From a34b4b8937f6b998b98a170bb32ac049eb3a4f60 Mon Sep 17 00:00:00 2001 From: Zoufishan Mehdi Date: Sat, 10 Oct 2015 16:21:30 -0400 Subject: [PATCH 01/44] first commit --- .../BreakingBad.xcodeproj/project.pbxproj | 322 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + BreakingBad/BreakingBad/AppDelegate.h | 25 ++ BreakingBad/BreakingBad/AppDelegate.m | 127 +++++++ .../AppIcon.appiconset/Contents.json | 38 +++ .../Base.lproj/LaunchScreen.storyboard | 27 ++ .../BreakingBad/Base.lproj/Main.storyboard | 25 ++ .../.xccurrentversion | 8 + .../BreakingBad.xcdatamodel/contents | 4 + BreakingBad/BreakingBad/Info.plist | 40 +++ BreakingBad/BreakingBad/ViewController.h | 15 + BreakingBad/BreakingBad/ViewController.m | 27 ++ BreakingBad/BreakingBad/main.m | 16 + 13 files changed, 681 insertions(+) create mode 100644 BreakingBad/BreakingBad.xcodeproj/project.pbxproj create mode 100644 BreakingBad/BreakingBad.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 BreakingBad/BreakingBad/AppDelegate.h create mode 100644 BreakingBad/BreakingBad/AppDelegate.m create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 BreakingBad/BreakingBad/Base.lproj/LaunchScreen.storyboard create mode 100644 BreakingBad/BreakingBad/Base.lproj/Main.storyboard create mode 100644 BreakingBad/BreakingBad/BreakingBad.xcdatamodeld/.xccurrentversion create mode 100644 BreakingBad/BreakingBad/BreakingBad.xcdatamodeld/BreakingBad.xcdatamodel/contents create mode 100644 BreakingBad/BreakingBad/Info.plist create mode 100644 BreakingBad/BreakingBad/ViewController.h create mode 100644 BreakingBad/BreakingBad/ViewController.m create mode 100644 BreakingBad/BreakingBad/main.m diff --git a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj new file mode 100644 index 0000000..4d31c85 --- /dev/null +++ b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj @@ -0,0 +1,322 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 5F8FF9991BC9A9CD00855DFB /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F8FF9981BC9A9CD00855DFB /* main.m */; }; + 5F8FF99C1BC9A9CD00855DFB /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F8FF99B1BC9A9CD00855DFB /* AppDelegate.m */; }; + 5F8FF99F1BC9A9CD00855DFB /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F8FF99E1BC9A9CD00855DFB /* ViewController.m */; }; + 5F8FF9A21BC9A9CD00855DFB /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5F8FF9A01BC9A9CD00855DFB /* Main.storyboard */; }; + 5F8FF9A51BC9A9CD00855DFB /* BreakingBad.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 5F8FF9A31BC9A9CD00855DFB /* BreakingBad.xcdatamodeld */; }; + 5F8FF9A71BC9A9CD00855DFB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5F8FF9A61BC9A9CD00855DFB /* Assets.xcassets */; }; + 5F8FF9AA1BC9A9CD00855DFB /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5F8FF9A81BC9A9CD00855DFB /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 5F8FF9941BC9A9CD00855DFB /* BreakingBad.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BreakingBad.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 5F8FF9981BC9A9CD00855DFB /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 5F8FF99A1BC9A9CD00855DFB /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 5F8FF99B1BC9A9CD00855DFB /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 5F8FF99D1BC9A9CD00855DFB /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + 5F8FF99E1BC9A9CD00855DFB /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + 5F8FF9A11BC9A9CD00855DFB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 5F8FF9A41BC9A9CD00855DFB /* BreakingBad.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = BreakingBad.xcdatamodel; sourceTree = ""; }; + 5F8FF9A61BC9A9CD00855DFB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 5F8FF9A91BC9A9CD00855DFB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 5F8FF9AB1BC9A9CD00855DFB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 5F8FF9911BC9A9CD00855DFB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 5F8FF98B1BC9A9CD00855DFB = { + isa = PBXGroup; + children = ( + 5F8FF9961BC9A9CD00855DFB /* BreakingBad */, + 5F8FF9951BC9A9CD00855DFB /* Products */, + ); + sourceTree = ""; + }; + 5F8FF9951BC9A9CD00855DFB /* Products */ = { + isa = PBXGroup; + children = ( + 5F8FF9941BC9A9CD00855DFB /* BreakingBad.app */, + ); + name = Products; + sourceTree = ""; + }; + 5F8FF9961BC9A9CD00855DFB /* BreakingBad */ = { + isa = PBXGroup; + children = ( + 5F8FF99A1BC9A9CD00855DFB /* AppDelegate.h */, + 5F8FF99B1BC9A9CD00855DFB /* AppDelegate.m */, + 5F8FF99D1BC9A9CD00855DFB /* ViewController.h */, + 5F8FF99E1BC9A9CD00855DFB /* ViewController.m */, + 5F8FF9A01BC9A9CD00855DFB /* Main.storyboard */, + 5F8FF9A61BC9A9CD00855DFB /* Assets.xcassets */, + 5F8FF9A81BC9A9CD00855DFB /* LaunchScreen.storyboard */, + 5F8FF9AB1BC9A9CD00855DFB /* Info.plist */, + 5F8FF9A31BC9A9CD00855DFB /* BreakingBad.xcdatamodeld */, + 5F8FF9971BC9A9CD00855DFB /* Supporting Files */, + ); + path = BreakingBad; + sourceTree = ""; + }; + 5F8FF9971BC9A9CD00855DFB /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 5F8FF9981BC9A9CD00855DFB /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 5F8FF9931BC9A9CD00855DFB /* BreakingBad */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5F8FF9AE1BC9A9CD00855DFB /* Build configuration list for PBXNativeTarget "BreakingBad" */; + buildPhases = ( + 5F8FF9901BC9A9CD00855DFB /* Sources */, + 5F8FF9911BC9A9CD00855DFB /* Frameworks */, + 5F8FF9921BC9A9CD00855DFB /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = BreakingBad; + productName = BreakingBad; + productReference = 5F8FF9941BC9A9CD00855DFB /* BreakingBad.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 5F8FF98C1BC9A9CD00855DFB /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0700; + ORGANIZATIONNAME = "Zoufishan Mehdi"; + TargetAttributes = { + 5F8FF9931BC9A9CD00855DFB = { + CreatedOnToolsVersion = 7.0; + }; + }; + }; + buildConfigurationList = 5F8FF98F1BC9A9CD00855DFB /* Build configuration list for PBXProject "BreakingBad" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 5F8FF98B1BC9A9CD00855DFB; + productRefGroup = 5F8FF9951BC9A9CD00855DFB /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 5F8FF9931BC9A9CD00855DFB /* BreakingBad */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 5F8FF9921BC9A9CD00855DFB /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5F8FF9AA1BC9A9CD00855DFB /* LaunchScreen.storyboard in Resources */, + 5F8FF9A71BC9A9CD00855DFB /* Assets.xcassets in Resources */, + 5F8FF9A21BC9A9CD00855DFB /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 5F8FF9901BC9A9CD00855DFB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5F8FF99F1BC9A9CD00855DFB /* ViewController.m in Sources */, + 5F8FF99C1BC9A9CD00855DFB /* AppDelegate.m in Sources */, + 5F8FF9A51BC9A9CD00855DFB /* BreakingBad.xcdatamodeld in Sources */, + 5F8FF9991BC9A9CD00855DFB /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 5F8FF9A01BC9A9CD00855DFB /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 5F8FF9A11BC9A9CD00855DFB /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 5F8FF9A81BC9A9CD00855DFB /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 5F8FF9A91BC9A9CD00855DFB /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 5F8FF9AC1BC9A9CD00855DFB /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 5F8FF9AD1BC9A9CD00855DFB /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 5F8FF9AF1BC9A9CD00855DFB /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = BreakingBad/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = nyc.c4q.zoufishanmehdi.BreakingBad; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 5F8FF9B01BC9A9CD00855DFB /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = BreakingBad/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = nyc.c4q.zoufishanmehdi.BreakingBad; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 5F8FF98F1BC9A9CD00855DFB /* Build configuration list for PBXProject "BreakingBad" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5F8FF9AC1BC9A9CD00855DFB /* Debug */, + 5F8FF9AD1BC9A9CD00855DFB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5F8FF9AE1BC9A9CD00855DFB /* Build configuration list for PBXNativeTarget "BreakingBad" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5F8FF9AF1BC9A9CD00855DFB /* Debug */, + 5F8FF9B01BC9A9CD00855DFB /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + +/* Begin XCVersionGroup section */ + 5F8FF9A31BC9A9CD00855DFB /* BreakingBad.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + 5F8FF9A41BC9A9CD00855DFB /* BreakingBad.xcdatamodel */, + ); + currentVersion = 5F8FF9A41BC9A9CD00855DFB /* BreakingBad.xcdatamodel */; + path = BreakingBad.xcdatamodeld; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ + }; + rootObject = 5F8FF98C1BC9A9CD00855DFB /* Project object */; +} diff --git a/BreakingBad/BreakingBad.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/BreakingBad/BreakingBad.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..dba6ad3 --- /dev/null +++ b/BreakingBad/BreakingBad.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/BreakingBad/BreakingBad/AppDelegate.h b/BreakingBad/BreakingBad/AppDelegate.h new file mode 100644 index 0000000..53e0a23 --- /dev/null +++ b/BreakingBad/BreakingBad/AppDelegate.h @@ -0,0 +1,25 @@ +// +// AppDelegate.h +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/10/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import +#import + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + +@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; +@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; +@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; + +- (void)saveContext; +- (NSURL *)applicationDocumentsDirectory; + + +@end + diff --git a/BreakingBad/BreakingBad/AppDelegate.m b/BreakingBad/BreakingBad/AppDelegate.m new file mode 100644 index 0000000..aca6b99 --- /dev/null +++ b/BreakingBad/BreakingBad/AppDelegate.m @@ -0,0 +1,127 @@ +// +// AppDelegate.m +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/10/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "AppDelegate.h" + +@interface AppDelegate () + +@end + +@implementation AppDelegate + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Override point for customization after application launch. + return YES; +} + +- (void)applicationWillResignActive:(UIApplication *)application { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. +} + +- (void)applicationDidEnterBackground:(UIApplication *)application { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. +} + +- (void)applicationWillEnterForeground:(UIApplication *)application { + // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. +} + +- (void)applicationDidBecomeActive:(UIApplication *)application { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. +} + +- (void)applicationWillTerminate:(UIApplication *)application { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + // Saves changes in the application's managed object context before the application terminates. + [self saveContext]; +} + +#pragma mark - Core Data stack + +@synthesize managedObjectContext = _managedObjectContext; +@synthesize managedObjectModel = _managedObjectModel; +@synthesize persistentStoreCoordinator = _persistentStoreCoordinator; + +- (NSURL *)applicationDocumentsDirectory { + // The directory the application uses to store the Core Data store file. This code uses a directory named "nyc.c4q.zoufishanmehdi.BreakingBad" in the application's documents directory. + return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; +} + +- (NSManagedObjectModel *)managedObjectModel { + // The managed object model for the application. It is a fatal error for the application not to be able to find and load its model. + if (_managedObjectModel != nil) { + return _managedObjectModel; + } + NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"BreakingBad" withExtension:@"momd"]; + _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; + return _managedObjectModel; +} + +- (NSPersistentStoreCoordinator *)persistentStoreCoordinator { + // The persistent store coordinator for the application. This implementation creates and returns a coordinator, having added the store for the application to it. + if (_persistentStoreCoordinator != nil) { + return _persistentStoreCoordinator; + } + + // Create the coordinator and store + + _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; + NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"BreakingBad.sqlite"]; + NSError *error = nil; + NSString *failureReason = @"There was an error creating or loading the application's saved data."; + if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { + // Report any error we got. + NSMutableDictionary *dict = [NSMutableDictionary dictionary]; + dict[NSLocalizedDescriptionKey] = @"Failed to initialize the application's saved data"; + dict[NSLocalizedFailureReasonErrorKey] = failureReason; + dict[NSUnderlyingErrorKey] = error; + error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:9999 userInfo:dict]; + // Replace this with code to handle the error appropriately. + // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. + NSLog(@"Unresolved error %@, %@", error, [error userInfo]); + abort(); + } + + return _persistentStoreCoordinator; +} + + +- (NSManagedObjectContext *)managedObjectContext { + // Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.) + if (_managedObjectContext != nil) { + return _managedObjectContext; + } + + NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; + if (!coordinator) { + return nil; + } + _managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; + [_managedObjectContext setPersistentStoreCoordinator:coordinator]; + return _managedObjectContext; +} + +#pragma mark - Core Data Saving support + +- (void)saveContext { + NSManagedObjectContext *managedObjectContext = self.managedObjectContext; + if (managedObjectContext != nil) { + NSError *error = nil; + if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) { + // Replace this implementation with code to handle the error appropriately. + // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. + NSLog(@"Unresolved error %@, %@", error, [error userInfo]); + abort(); + } + } +} + +@end diff --git a/BreakingBad/BreakingBad/Assets.xcassets/AppIcon.appiconset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..118c98f --- /dev/null +++ b/BreakingBad/BreakingBad/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,38 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/BreakingBad/BreakingBad/Base.lproj/LaunchScreen.storyboard b/BreakingBad/BreakingBad/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..2e721e1 --- /dev/null +++ b/BreakingBad/BreakingBad/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f56d2f3 --- /dev/null +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BreakingBad/BreakingBad/BreakingBad.xcdatamodeld/.xccurrentversion b/BreakingBad/BreakingBad/BreakingBad.xcdatamodeld/.xccurrentversion new file mode 100644 index 0000000..801f365 --- /dev/null +++ b/BreakingBad/BreakingBad/BreakingBad.xcdatamodeld/.xccurrentversion @@ -0,0 +1,8 @@ + + + + + _XCCurrentVersionName + BreakingBad.xcdatamodel + + diff --git a/BreakingBad/BreakingBad/BreakingBad.xcdatamodeld/BreakingBad.xcdatamodel/contents b/BreakingBad/BreakingBad/BreakingBad.xcdatamodeld/BreakingBad.xcdatamodel/contents new file mode 100644 index 0000000..193f33c --- /dev/null +++ b/BreakingBad/BreakingBad/BreakingBad.xcdatamodeld/BreakingBad.xcdatamodel/contents @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/BreakingBad/BreakingBad/Info.plist b/BreakingBad/BreakingBad/Info.plist new file mode 100644 index 0000000..6905cc6 --- /dev/null +++ b/BreakingBad/BreakingBad/Info.plist @@ -0,0 +1,40 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/BreakingBad/BreakingBad/ViewController.h b/BreakingBad/BreakingBad/ViewController.h new file mode 100644 index 0000000..ccec381 --- /dev/null +++ b/BreakingBad/BreakingBad/ViewController.h @@ -0,0 +1,15 @@ +// +// ViewController.h +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/10/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import + +@interface ViewController : UIViewController + + +@end + diff --git a/BreakingBad/BreakingBad/ViewController.m b/BreakingBad/BreakingBad/ViewController.m new file mode 100644 index 0000000..eff8569 --- /dev/null +++ b/BreakingBad/BreakingBad/ViewController.m @@ -0,0 +1,27 @@ +// +// ViewController.m +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/10/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "ViewController.h" + +@interface ViewController () + +@end + +@implementation ViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view, typically from a nib. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +@end diff --git a/BreakingBad/BreakingBad/main.m b/BreakingBad/BreakingBad/main.m new file mode 100644 index 0000000..7f0bbc4 --- /dev/null +++ b/BreakingBad/BreakingBad/main.m @@ -0,0 +1,16 @@ +// +// main.m +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/10/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} From 6a7279edb3c0f6360abbe525c5eae2b7589188ec Mon Sep 17 00:00:00 2001 From: Zoufishan Mehdi Date: Sat, 10 Oct 2015 17:58:00 -0400 Subject: [PATCH 02/44] Started working on the storyboard --- .../BreakingBad/Base.lproj/Main.storyboard | 238 +++++++++++++++++- 1 file changed, 229 insertions(+), 9 deletions(-) diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index f56d2f3..499be8f 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -1,25 +1,245 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - + - + + - + + From 1e6623c8c0c52fe3ffc150a37f0aaf27aafdc92a Mon Sep 17 00:00:00 2001 From: Mesfin Date: Sun, 11 Oct 2015 16:23:28 -0400 Subject: [PATCH 03/44] Added Parse pod and Created Custom classes --- .../BreakingBad.xcodeproj/project.pbxproj | 92 + .../contents.xcworkspacedata | 10 + BreakingBad/BreakingBad/AppDelegate.m | 15 +- BreakingBad/BreakingBad/BBUser.h | 20 + BreakingBad/BreakingBad/BBUser.m | 19 + .../BreakingBad/Base.lproj/Main.storyboard | 40 +- BreakingBad/BreakingBad/Entry.h | 16 + BreakingBad/BreakingBad/Entry.m | 20 + BreakingBad/BreakingBad/Goal.h | 19 + BreakingBad/BreakingBad/Goal.m | 19 + BreakingBad/BreakingBad/Habit.h | 21 + BreakingBad/BreakingBad/Habit.m | 21 + BreakingBad/BreakingBad/Step.h | 17 + BreakingBad/BreakingBad/Step.m | 20 + BreakingBad/BreakingBad/ViewController.m | 74 +- BreakingBad/Podfile | 1 + BreakingBad/Podfile.lock | 13 + .../Bolts/Bolts/Common/BFCancellationToken.h | 38 + .../Bolts/Bolts/Common/BFCancellationToken.m | 139 + .../Common/BFCancellationTokenRegistration.h | 25 + .../Common/BFCancellationTokenRegistration.m | 73 + .../Bolts/Common/BFCancellationTokenSource.h | 56 + .../Bolts/Common/BFCancellationTokenSource.m | 60 + .../Pods/Bolts/Bolts/Common/BFDefines.h | 18 + .../Pods/Bolts/Bolts/Common/BFExecutor.h | 58 + .../Pods/Bolts/Bolts/Common/BFExecutor.m | 112 + BreakingBad/Pods/Bolts/Bolts/Common/BFTask.h | 259 ++ BreakingBad/Pods/Bolts/Bolts/Common/BFTask.m | 470 +++ .../Bolts/Common/BFTaskCompletionSource.h | 87 + .../Bolts/Common/BFTaskCompletionSource.m | 83 + BreakingBad/Pods/Bolts/Bolts/Common/Bolts.h | 43 + BreakingBad/Pods/Bolts/Bolts/Common/Bolts.m | 21 + .../Pods/Bolts/Bolts/Common/BoltsVersion.h | 1 + BreakingBad/Pods/Bolts/LICENSE | 30 + BreakingBad/Pods/Bolts/README.md | 682 ++++ .../Private/Bolts/BFCancellationToken.h | 1 + .../Bolts/BFCancellationTokenRegistration.h | 1 + .../Private/Bolts/BFCancellationTokenSource.h | 1 + .../Pods/Headers/Private/Bolts/BFDefines.h | 1 + .../Pods/Headers/Private/Bolts/BFExecutor.h | 1 + .../Pods/Headers/Private/Bolts/BFTask.h | 1 + .../Private/Bolts/BFTaskCompletionSource.h | 1 + .../Pods/Headers/Private/Bolts/Bolts.h | 1 + .../Pods/Headers/Private/Bolts/BoltsVersion.h | 1 + .../Headers/Private/Parse/BFTask+Private.h | 1 + .../Pods/Headers/Private/Parse/PFACL.h | 1 + .../Pods/Headers/Private/Parse/PFACLPrivate.h | 1 + .../Pods/Headers/Private/Parse/PFACLState.h | 1 + .../Private/Parse/PFACLState_Private.h | 1 + .../Pods/Headers/Private/Parse/PFAlertView.h | 1 + .../Pods/Headers/Private/Parse/PFAnalytics.h | 1 + .../Private/Parse/PFAnalyticsController.h | 1 + .../Private/Parse/PFAnalyticsUtilities.h | 1 + .../Private/Parse/PFAnalytics_Private.h | 1 + .../Parse/PFAnonymousAuthenticationProvider.h | 1 + .../Headers/Private/Parse/PFAnonymousUtils.h | 1 + .../Private/Parse/PFAnonymousUtils_Private.h | 1 + .../Headers/Private/Parse/PFApplication.h | 1 + .../Pods/Headers/Private/Parse/PFAssert.h | 1 + .../Headers/Private/Parse/PFAsyncTaskQueue.h | 1 + .../Headers/Private/Parse/PFBase64Encoder.h | 1 + .../Pods/Headers/Private/Parse/PFBaseState.h | 1 + .../Private/Parse/PFCachedQueryController.h | 1 + .../Headers/Private/Parse/PFCategoryLoader.h | 1 + .../Pods/Headers/Private/Parse/PFCloud.h | 1 + .../Private/Parse/PFCloudCodeController.h | 1 + .../Headers/Private/Parse/PFCommandCache.h | 1 + .../Private/Parse/PFCommandCache_Private.h | 1 + .../Headers/Private/Parse/PFCommandResult.h | 1 + .../Headers/Private/Parse/PFCommandRunning.h | 1 + .../Private/Parse/PFCommandRunningConstants.h | 1 + .../Parse/PFCommandURLRequestConstructor.h | 1 + .../Pods/Headers/Private/Parse/PFConfig.h | 1 + .../Private/Parse/PFConfigController.h | 1 + .../Headers/Private/Parse/PFConfig_Private.h | 1 + .../Pods/Headers/Private/Parse/PFConstants.h | 1 + .../Private/Parse/PFCoreDataProvider.h | 1 + .../Headers/Private/Parse/PFCoreManager.h | 1 + .../Private/Parse/PFCurrentConfigController.h | 1 + .../Parse/PFCurrentInstallationController.h | 1 + .../Parse/PFCurrentObjectControlling.h | 1 + .../Private/Parse/PFCurrentUserController.h | 1 + .../Headers/Private/Parse/PFDataProvider.h | 1 + .../Headers/Private/Parse/PFDateFormatter.h | 1 + .../Pods/Headers/Private/Parse/PFDecoder.h | 1 + .../Private/Parse/PFDefaultACLController.h | 1 + .../Pods/Headers/Private/Parse/PFDevice.h | 1 + .../Pods/Headers/Private/Parse/PFEncoder.h | 1 + .../Headers/Private/Parse/PFErrorUtilities.h | 1 + .../Headers/Private/Parse/PFEventuallyPin.h | 1 + .../Headers/Private/Parse/PFEventuallyQueue.h | 1 + .../Private/Parse/PFEventuallyQueue_Private.h | 1 + .../Headers/Private/Parse/PFFieldOperation.h | 1 + .../Private/Parse/PFFieldOperationDecoder.h | 1 + .../Pods/Headers/Private/Parse/PFFile.h | 1 + .../Headers/Private/Parse/PFFileController.h | 1 + .../Headers/Private/Parse/PFFileDataStream.h | 1 + .../Headers/Private/Parse/PFFileManager.h | 1 + .../Private/Parse/PFFileStagingController.h | 1 + .../Pods/Headers/Private/Parse/PFFileState.h | 1 + .../Private/Parse/PFFileState_Private.h | 1 + .../Headers/Private/Parse/PFFile_Private.h | 1 + .../Pods/Headers/Private/Parse/PFGeoPoint.h | 1 + .../Headers/Private/Parse/PFGeoPointPrivate.h | 1 + .../Headers/Private/Parse/PFHTTPRequest.h | 1 + .../Parse/PFHTTPURLRequestConstructor.h | 1 + .../Pods/Headers/Private/Parse/PFHash.h | 1 + .../Headers/Private/Parse/PFInstallation.h | 1 + .../Private/Parse/PFInstallationConstants.h | 1 + .../Private/Parse/PFInstallationController.h | 1 + .../Parse/PFInstallationIdentifierStore.h | 1 + .../PFInstallationIdentifierStore_Private.h | 1 + .../Private/Parse/PFInstallationPrivate.h | 1 + .../Headers/Private/Parse/PFInternalUtils.h | 1 + .../Private/Parse/PFJSONSerialization.h | 1 + .../Headers/Private/Parse/PFKeyValueCache.h | 1 + .../Private/Parse/PFKeyValueCache_Private.h | 1 + .../Headers/Private/Parse/PFKeychainStore.h | 1 + .../Headers/Private/Parse/PFLocationManager.h | 1 + .../Pods/Headers/Private/Parse/PFLogger.h | 1 + .../Pods/Headers/Private/Parse/PFLogging.h | 1 + .../Pods/Headers/Private/Parse/PFMacros.h | 1 + .../Private/Parse/PFMultiProcessFileLock.h | 1 + .../Parse/PFMultiProcessFileLockController.h | 1 + .../Private/Parse/PFMulticastDelegate.h | 1 + .../Headers/Private/Parse/PFMutableACLState.h | 1 + .../Private/Parse/PFMutableFileState.h | 1 + .../Private/Parse/PFMutableObjectState.h | 1 + .../Private/Parse/PFMutablePushState.h | 1 + .../Private/Parse/PFMutableQueryState.h | 1 + .../Private/Parse/PFMutableRelationState.h | 1 + .../Private/Parse/PFMutableUserState.h | 1 + .../Parse/PFNetworkActivityIndicatorManager.h | 1 + .../Headers/Private/Parse/PFNetworkCommand.h | 1 + .../Headers/Private/Parse/PFNullability.h | 1 + .../Headers/Private/Parse/PFObject+Subclass.h | 1 + .../Pods/Headers/Private/Parse/PFObject.h | 1 + .../Private/Parse/PFObjectBatchController.h | 1 + .../Headers/Private/Parse/PFObjectConstants.h | 1 + .../Private/Parse/PFObjectController.h | 1 + .../Parse/PFObjectController_Private.h | 1 + .../Private/Parse/PFObjectControlling.h | 1 + .../Private/Parse/PFObjectEstimatedData.h | 1 + .../Headers/Private/Parse/PFObjectFileCoder.h | 1 + .../Private/Parse/PFObjectFileCodingLogic.h | 1 + .../Parse/PFObjectFilePersistenceController.h | 1 + .../Private/Parse/PFObjectLocalIdStore.h | 1 + .../Headers/Private/Parse/PFObjectPrivate.h | 1 + .../Headers/Private/Parse/PFObjectState.h | 1 + .../Private/Parse/PFObjectState_Private.h | 1 + .../Private/Parse/PFObjectSubclassInfo.h | 1 + .../Parse/PFObjectSubclassingController.h | 1 + .../Headers/Private/Parse/PFObjectUtilities.h | 1 + .../Private/Parse/PFOfflineObjectController.h | 1 + .../Private/Parse/PFOfflineQueryController.h | 1 + .../Private/Parse/PFOfflineQueryLogic.h | 1 + .../Headers/Private/Parse/PFOfflineStore.h | 1 + .../Headers/Private/Parse/PFOperationSet.h | 1 + .../Parse/PFPaymentTransactionObserver.h | 1 + .../PFPaymentTransactionObserver_Private.h | 1 + .../Pods/Headers/Private/Parse/PFPin.h | 1 + .../Private/Parse/PFPinningEventuallyQueue.h | 1 + .../Private/Parse/PFPinningObjectStore.h | 1 + .../Headers/Private/Parse/PFProduct+Private.h | 1 + .../Pods/Headers/Private/Parse/PFProduct.h | 1 + .../Private/Parse/PFProductsRequestHandler.h | 1 + .../Headers/Private/Parse/PFPropertyInfo.h | 1 + .../Private/Parse/PFPropertyInfo_Private.h | 1 + .../Private/Parse/PFPropertyInfo_Runtime.h | 1 + .../Pods/Headers/Private/Parse/PFPurchase.h | 1 + .../Private/Parse/PFPurchaseController.h | 1 + .../Pods/Headers/Private/Parse/PFPush.h | 1 + .../Private/Parse/PFPushChannelsController.h | 1 + .../Headers/Private/Parse/PFPushController.h | 1 + .../Headers/Private/Parse/PFPushManager.h | 1 + .../Headers/Private/Parse/PFPushPrivate.h | 1 + .../Pods/Headers/Private/Parse/PFPushState.h | 1 + .../Private/Parse/PFPushState_Private.h | 1 + .../Headers/Private/Parse/PFPushUtilities.h | 1 + .../Pods/Headers/Private/Parse/PFQuery.h | 1 + .../Headers/Private/Parse/PFQueryController.h | 1 + .../Headers/Private/Parse/PFQueryPrivate.h | 1 + .../Pods/Headers/Private/Parse/PFQueryState.h | 1 + .../Private/Parse/PFQueryState_Private.h | 1 + .../Headers/Private/Parse/PFQueryUtilities.h | 1 + .../Private/Parse/PFRESTAnalyticsCommand.h | 1 + .../Private/Parse/PFRESTCloudCommand.h | 1 + .../Headers/Private/Parse/PFRESTCommand.h | 1 + .../Private/Parse/PFRESTCommand_Private.h | 1 + .../Private/Parse/PFRESTConfigCommand.h | 1 + .../Headers/Private/Parse/PFRESTFileCommand.h | 1 + .../Private/Parse/PFRESTObjectBatchCommand.h | 1 + .../Private/Parse/PFRESTObjectCommand.h | 1 + .../Headers/Private/Parse/PFRESTPushCommand.h | 1 + .../Private/Parse/PFRESTQueryCommand.h | 1 + .../Private/Parse/PFRESTSessionCommand.h | 1 + .../Headers/Private/Parse/PFRESTUserCommand.h | 1 + .../Headers/Private/Parse/PFReachability.h | 1 + .../Pods/Headers/Private/Parse/PFRelation.h | 1 + .../Headers/Private/Parse/PFRelationPrivate.h | 1 + .../Headers/Private/Parse/PFRelationState.h | 1 + .../Private/Parse/PFRelationState_Private.h | 1 + .../Pods/Headers/Private/Parse/PFRole.h | 1 + .../Headers/Private/Parse/PFSQLiteDatabase.h | 1 + .../Parse/PFSQLiteDatabaseController.h | 1 + .../Private/Parse/PFSQLiteDatabaseResult.h | 1 + .../Private/Parse/PFSQLiteDatabase_Private.h | 1 + .../Headers/Private/Parse/PFSQLiteStatement.h | 1 + .../Pods/Headers/Private/Parse/PFSession.h | 1 + .../Private/Parse/PFSessionController.h | 1 + .../Private/Parse/PFSessionUtilities.h | 1 + .../Headers/Private/Parse/PFSession_Private.h | 1 + .../Headers/Private/Parse/PFSubclassing.h | 1 + .../Pods/Headers/Private/Parse/PFTaskQueue.h | 1 + .../Headers/Private/Parse/PFThreadsafety.h | 1 + .../Headers/Private/Parse/PFURLConstructor.h | 1 + .../Pods/Headers/Private/Parse/PFURLSession.h | 1 + .../Private/Parse/PFURLSessionCommandRunner.h | 1 + .../Parse/PFURLSessionCommandRunner_Private.h | 1 + .../Parse/PFURLSessionDataTaskDelegate.h | 1 + .../PFURLSessionDataTaskDelegate_Private.h | 1 + .../PFURLSessionFileDownloadTaskDelegate.h | 1 + .../Parse/PFURLSessionJSONDataTaskDelegate.h | 1 + .../Parse/PFURLSessionUploadTaskDelegate.h | 1 + .../Private/Parse/PFURLSession_Private.h | 1 + .../Pods/Headers/Private/Parse/PFUser.h | 1 + .../Parse/PFUserAuthenticationController.h | 1 + .../Parse/PFUserAuthenticationDelegate.h | 1 + .../Headers/Private/Parse/PFUserConstants.h | 1 + .../Headers/Private/Parse/PFUserController.h | 1 + .../Private/Parse/PFUserFileCodingLogic.h | 1 + .../Headers/Private/Parse/PFUserPrivate.h | 1 + .../Pods/Headers/Private/Parse/PFUserState.h | 1 + .../Private/Parse/PFUserState_Private.h | 1 + .../Pods/Headers/Private/Parse/PFWeakValue.h | 1 + .../Pods/Headers/Private/Parse/Parse.h | 1 + .../Headers/Private/Parse/ParseInternal.h | 1 + .../Pods/Headers/Private/Parse/ParseManager.h | 1 + .../Pods/Headers/Private/Parse/ParseModule.h | 1 + .../Headers/Private/Parse/Parse_Private.h | 1 + .../Public/Bolts/BFCancellationToken.h | 1 + .../Bolts/BFCancellationTokenRegistration.h | 1 + .../Public/Bolts/BFCancellationTokenSource.h | 1 + .../Pods/Headers/Public/Bolts/BFDefines.h | 1 + .../Pods/Headers/Public/Bolts/BFExecutor.h | 1 + .../Pods/Headers/Public/Bolts/BFTask.h | 1 + .../Public/Bolts/BFTaskCompletionSource.h | 1 + BreakingBad/Pods/Headers/Public/Bolts/Bolts.h | 1 + .../Pods/Headers/Public/Bolts/BoltsVersion.h | 1 + BreakingBad/Pods/Headers/Public/Parse/PFACL.h | 1 + .../Pods/Headers/Public/Parse/PFAnalytics.h | 1 + .../Headers/Public/Parse/PFAnonymousUtils.h | 1 + .../Pods/Headers/Public/Parse/PFCloud.h | 1 + .../Pods/Headers/Public/Parse/PFConfig.h | 1 + .../Pods/Headers/Public/Parse/PFConstants.h | 1 + .../Pods/Headers/Public/Parse/PFFile.h | 1 + .../Pods/Headers/Public/Parse/PFGeoPoint.h | 1 + .../Headers/Public/Parse/PFInstallation.h | 1 + .../Parse/PFNetworkActivityIndicatorManager.h | 1 + .../Pods/Headers/Public/Parse/PFNullability.h | 1 + .../Headers/Public/Parse/PFObject+Subclass.h | 1 + .../Pods/Headers/Public/Parse/PFObject.h | 1 + .../Pods/Headers/Public/Parse/PFProduct.h | 1 + .../Pods/Headers/Public/Parse/PFPurchase.h | 1 + .../Pods/Headers/Public/Parse/PFPush.h | 1 + .../Pods/Headers/Public/Parse/PFQuery.h | 1 + .../Pods/Headers/Public/Parse/PFRelation.h | 1 + .../Pods/Headers/Public/Parse/PFRole.h | 1 + .../Pods/Headers/Public/Parse/PFSession.h | 1 + .../Pods/Headers/Public/Parse/PFSubclassing.h | 1 + .../Pods/Headers/Public/Parse/PFUser.h | 1 + .../Parse/PFUserAuthenticationDelegate.h | 1 + BreakingBad/Pods/Headers/Public/Parse/Parse.h | 1 + BreakingBad/Pods/Manifest.lock | 13 + BreakingBad/Pods/Parse/LICENSE | 30 + .../PFDefaultACLController.h | 52 + .../PFDefaultACLController.m | 99 + .../Parse/Parse/Internal/ACL/PFACLPrivate.h | 42 + .../Parse/Internal/ACL/State/PFACLState.h | 42 + .../Parse/Internal/ACL/State/PFACLState.m | 87 + .../Internal/ACL/State/PFACLState_Private.h | 21 + .../Internal/ACL/State/PFMutableACLState.h | 17 + .../Internal/ACL/State/PFMutableACLState.m | 32 + .../Controller/PFAnalyticsController.h | 61 + .../Controller/PFAnalyticsController.m | 100 + .../Internal/Analytics/PFAnalytics_Private.h | 17 + .../Utilities/PFAnalyticsUtilities.h | 28 + .../Utilities/PFAnalyticsUtilities.m | 38 + .../Parse/Parse/Internal/BFTask+Private.h | 71 + .../Parse/Parse/Internal/BFTask+Private.m | 130 + .../CloudCode/PFCloudCodeController.h | 47 + .../CloudCode/PFCloudCodeController.m | 66 + .../Commands/CommandRunner/PFCommandRunning.h | 96 + .../Commands/CommandRunner/PFCommandRunning.m | 12 + .../CommandRunner/PFCommandRunningConstants.h | 35 + .../CommandRunner/PFCommandRunningConstants.m | 23 + .../PFCommandURLRequestConstructor.h | 50 + .../PFCommandURLRequestConstructor.m | 149 + .../URLSession/PFURLSessionCommandRunner.h | 22 + .../URLSession/PFURLSessionCommandRunner.m | 286 ++ .../PFURLSessionCommandRunner_Private.h | 29 + .../URLSession/Session/PFURLSession.h | 73 + .../URLSession/Session/PFURLSession.m | 264 ++ .../URLSession/Session/PFURLSession_Private.h | 24 + .../PFURLSessionDataTaskDelegate.h | 37 + .../PFURLSessionDataTaskDelegate.m | 180 ++ .../PFURLSessionDataTaskDelegate_Private.h | 34 + .../PFURLSessionFileDownloadTaskDelegate.h | 35 + .../PFURLSessionFileDownloadTaskDelegate.m | 101 + .../PFURLSessionJSONDataTaskDelegate.h | 20 + .../PFURLSessionJSONDataTaskDelegate.m | 90 + .../PFURLSessionUploadTaskDelegate.h | 29 + .../PFURLSessionUploadTaskDelegate.m | 56 + .../Commands/PFRESTAnalyticsCommand.h | 31 + .../Commands/PFRESTAnalyticsCommand.m | 61 + .../Internal/Commands/PFRESTCloudCommand.h | 22 + .../Internal/Commands/PFRESTCloudCommand.m | 27 + .../Parse/Internal/Commands/PFRESTCommand.h | 45 + .../Parse/Internal/Commands/PFRESTCommand.m | 230 ++ .../Internal/Commands/PFRESTCommand_Private.h | 25 + .../Internal/Commands/PFRESTConfigCommand.h | 22 + .../Internal/Commands/PFRESTConfigCommand.m | 33 + .../Internal/Commands/PFRESTFileCommand.h | 21 + .../Internal/Commands/PFRESTFileCommand.m | 29 + .../Commands/PFRESTObjectBatchCommand.h | 22 + .../Commands/PFRESTObjectBatchCommand.m | 42 + .../Internal/Commands/PFRESTObjectCommand.h | 36 + .../Internal/Commands/PFRESTObjectCommand.m | 77 + .../Internal/Commands/PFRESTPushCommand.h | 25 + .../Internal/Commands/PFRESTPushCommand.m | 57 + .../Internal/Commands/PFRESTQueryCommand.h | 57 + .../Internal/Commands/PFRESTQueryCommand.m | 200 ++ .../Internal/Commands/PFRESTSessionCommand.h | 20 + .../Internal/Commands/PFRESTSessionCommand.m | 23 + .../Internal/Commands/PFRESTUserCommand.h | 56 + .../Internal/Commands/PFRESTUserCommand.m | 132 + .../Config/Controller/PFConfigController.h | 48 + .../Config/Controller/PFConfigController.m | 95 + .../Controller/PFCurrentConfigController.h | 43 + .../Controller/PFCurrentConfigController.m | 109 + .../Parse/Internal/Config/PFConfig_Private.h | 22 + .../FieldOperation/PFFieldOperation.h | 168 + .../FieldOperation/PFFieldOperation.m | 552 ++++ .../FieldOperation/PFFieldOperationDecoder.h | 39 + .../FieldOperation/PFFieldOperationDecoder.m | 126 + .../File/Controller/PFFileController.h | 99 + .../File/Controller/PFFileController.m | 269 ++ .../File/Controller/PFFileStagingController.h | 74 + .../File/Controller/PFFileStagingController.m | 96 + .../File/FileDataStream/PFFileDataStream.h | 31 + .../File/FileDataStream/PFFileDataStream.m | 112 + .../Parse/Internal/File/PFFile_Private.h | 29 + .../Parse/Internal/File/State/PFFileState.h | 35 + .../Parse/Internal/File/State/PFFileState.m | 106 + .../Internal/File/State/PFFileState_Private.h | 22 + .../Internal/File/State/PFMutableFileState.h | 22 + .../Internal/File/State/PFMutableFileState.m | 18 + .../Internal/HTTPRequest/PFHTTPRequest.h | 24 + .../HTTPRequest/PFHTTPURLRequestConstructor.h | 19 + .../HTTPRequest/PFHTTPURLRequestConstructor.m | 52 + .../Internal/HTTPRequest/PFURLConstructor.h | 22 + .../Internal/HTTPRequest/PFURLConstructor.m | 33 + .../Constants/PFInstallationConstants.h | 22 + .../Constants/PFInstallationConstants.m | 22 + .../Controller/PFInstallationController.h | 31 + .../Controller/PFInstallationController.m | 105 + .../PFCurrentInstallationController.h | 52 + .../PFCurrentInstallationController.m | 289 ++ .../PFInstallationIdentifierStore.h | 39 + .../PFInstallationIdentifierStore.m | 118 + .../PFInstallationIdentifierStore_Private.h | 19 + .../Installation/PFInstallationPrivate.h | 28 + .../Internal/KeyValueCache/PFKeyValueCache.h | 47 + .../Internal/KeyValueCache/PFKeyValueCache.m | 336 ++ .../KeyValueCache/PFKeyValueCache_Private.h | 66 + .../OfflineQueryLogic/PFOfflineQueryLogic.h | 79 + .../OfflineQueryLogic/PFOfflineQueryLogic.m | 918 ++++++ .../OfflineStore/PFOfflineStore.h | 201 ++ .../OfflineStore/PFOfflineStore.m | 1067 +++++++ .../Parse/Internal/LocalDataStore/Pin/PFPin.h | 33 + .../Parse/Internal/LocalDataStore/Pin/PFPin.m | 81 + .../LocalDataStore/SQLite/PFSQLiteDatabase.h | 115 + .../LocalDataStore/SQLite/PFSQLiteDatabase.m | 339 ++ .../SQLite/PFSQLiteDatabaseController.h | 49 + .../SQLite/PFSQLiteDatabaseController.m | 79 + .../SQLite/PFSQLiteDatabaseResult.h | 70 + .../SQLite/PFSQLiteDatabaseResult.m | 168 + .../SQLite/PFSQLiteDatabase_Private.h | 20 + .../LocalDataStore/SQLite/PFSQLiteStatement.h | 30 + .../LocalDataStore/SQLite/PFSQLiteStatement.m | 49 + .../MultiProcessLock/PFMultiProcessFileLock.h | 26 + .../MultiProcessLock/PFMultiProcessFileLock.m | 105 + .../PFMultiProcessFileLockController.h | 36 + .../PFMultiProcessFileLockController.m | 88 + .../BatchController/PFObjectBatchController.h | 55 + .../BatchController/PFObjectBatchController.m | 229 ++ .../Object/Coder/File/PFObjectFileCoder.h | 38 + .../Object/Coder/File/PFObjectFileCoder.m | 44 + .../Coder/File/PFObjectFileCodingLogic.h | 33 + .../Coder/File/PFObjectFileCodingLogic.m | 58 + .../Object/Constants/PFObjectConstants.h | 23 + .../Object/Constants/PFObjectConstants.m | 22 + .../PFOfflineObjectController.h | 27 + .../PFOfflineObjectController.m | 86 + .../Object/Controller/PFObjectController.h | 35 + .../Object/Controller/PFObjectController.m | 126 + .../Controller/PFObjectController_Private.h | 22 + .../Object/Controller/PFObjectControlling.h | 58 + .../PFCurrentObjectControlling.h | 37 + .../EstimatedData/PFObjectEstimatedData.h | 44 + .../EstimatedData/PFObjectEstimatedData.m | 86 + .../PFObjectFilePersistenceController.h | 55 + .../PFObjectFilePersistenceController.m | 98 + .../LocalIdStore/PFObjectLocalIdStore.h | 49 + .../LocalIdStore/PFObjectLocalIdStore.m | 291 ++ .../Object/OperationSet/PFOperationSet.h | 70 + .../Object/OperationSet/PFOperationSet.m | 196 ++ .../Parse/Internal/Object/PFObjectPrivate.h | 306 ++ .../PinningStore/PFPinningObjectStore.h | 84 + .../PinningStore/PFPinningObjectStore.m | 163 + .../Object/State/PFMutableObjectState.h | 45 + .../Object/State/PFMutableObjectState.m | 61 + .../Internal/Object/State/PFObjectState.h | 60 + .../Internal/Object/State/PFObjectState.m | 179 ++ .../Object/State/PFObjectState_Private.h | 57 + .../Object/Subclassing/PFObjectSubclassInfo.h | 25 + .../Object/Subclassing/PFObjectSubclassInfo.m | 203 ++ .../PFObjectSubclassingController.h | 40 + .../PFObjectSubclassingController.m | 317 ++ .../Object/Utilities/PFObjectUtilities.h | 36 + .../Object/Utilities/PFObjectUtilities.m | 48 + .../Pods/Parse/Parse/Internal/PFAlertView.h | 23 + .../Pods/Parse/Parse/Internal/PFAlertView.m | 109 + .../Pods/Parse/Parse/Internal/PFApplication.h | 38 + .../Pods/Parse/Parse/Internal/PFApplication.m | 93 + .../Pods/Parse/Parse/Internal/PFAssert.h | 94 + .../Parse/Parse/Internal/PFAsyncTaskQueue.h | 24 + .../Parse/Parse/Internal/PFAsyncTaskQueue.m | 70 + .../Parse/Parse/Internal/PFBase64Encoder.h | 17 + .../Parse/Parse/Internal/PFBase64Encoder.m | 28 + .../Pods/Parse/Parse/Internal/PFBaseState.h | 76 + .../Pods/Parse/Parse/Internal/PFBaseState.m | 267 ++ .../Parse/Parse/Internal/PFCategoryLoader.h | 16 + .../Parse/Parse/Internal/PFCategoryLoader.m | 20 + .../Parse/Parse/Internal/PFCommandCache.h | 52 + .../Parse/Parse/Internal/PFCommandCache.m | 330 ++ .../Parse/Internal/PFCommandCache_Private.h | 16 + .../Parse/Parse/Internal/PFCommandResult.h | 34 + .../Parse/Parse/Internal/PFCommandResult.m | 43 + .../Parse/Parse/Internal/PFCoreDataProvider.h | 101 + .../Pods/Parse/Parse/Internal/PFCoreManager.h | 78 + .../Pods/Parse/Parse/Internal/PFCoreManager.m | 447 +++ .../Parse/Parse/Internal/PFDataProvider.h | 90 + .../Parse/Parse/Internal/PFDateFormatter.h | 55 + .../Parse/Parse/Internal/PFDateFormatter.m | 118 + .../Pods/Parse/Parse/Internal/PFDecoder.h | 49 + .../Pods/Parse/Parse/Internal/PFDecoder.m | 194 ++ .../Pods/Parse/Parse/Internal/PFDevice.h | 24 + .../Pods/Parse/Parse/Internal/PFDevice.m | 134 + .../Pods/Parse/Parse/Internal/PFEncoder.h | 67 + .../Pods/Parse/Parse/Internal/PFEncoder.m | 250 ++ .../Parse/Parse/Internal/PFErrorUtilities.h | 45 + .../Parse/Parse/Internal/PFErrorUtilities.m | 48 + .../Parse/Parse/Internal/PFEventuallyPin.h | 76 + .../Parse/Parse/Internal/PFEventuallyPin.m | 188 ++ .../Parse/Parse/Internal/PFEventuallyQueue.h | 94 + .../Parse/Parse/Internal/PFEventuallyQueue.m | 503 +++ .../Internal/PFEventuallyQueue_Private.h | 133 + .../Pods/Parse/Parse/Internal/PFFileManager.h | 77 + .../Pods/Parse/Parse/Internal/PFFileManager.m | 367 +++ .../Parse/Parse/Internal/PFGeoPointPrivate.h | 33 + .../Pods/Parse/Parse/Internal/PFHash.h | 21 + .../Pods/Parse/Parse/Internal/PFHash.m | 76 + .../Parse/Parse/Internal/PFInternalUtils.h | 76 + .../Parse/Parse/Internal/PFInternalUtils.m | 298 ++ .../Parse/Internal/PFJSONSerialization.h | 65 + .../Parse/Internal/PFJSONSerialization.m | 72 + .../Parse/Parse/Internal/PFKeychainStore.h | 37 + .../Parse/Parse/Internal/PFKeychainStore.m | 200 ++ .../Parse/Parse/Internal/PFLocationManager.h | 56 + .../Parse/Parse/Internal/PFLocationManager.m | 153 + .../Pods/Parse/Parse/Internal/PFLogger.h | 47 + .../Pods/Parse/Parse/Internal/PFLogger.m | 105 + .../Pods/Parse/Parse/Internal/PFLogging.h | 40 + .../Pods/Parse/Parse/Internal/PFMacros.h | 137 + .../Parse/Internal/PFMulticastDelegate.h | 31 + .../Parse/Internal/PFMulticastDelegate.m | 39 + .../Parse/Parse/Internal/PFNetworkCommand.h | 47 + .../Parse/Internal/PFPinningEventuallyQueue.h | 22 + .../Parse/Internal/PFPinningEventuallyQueue.m | 327 ++ .../Parse/Parse/Internal/PFReachability.h | 61 + .../Parse/Parse/Internal/PFReachability.m | 213 ++ .../Pods/Parse/Parse/Internal/PFTaskQueue.h | 29 + .../Pods/Parse/Parse/Internal/PFTaskQueue.m | 50 + .../Pods/Parse/Parse/Internal/PFWeakValue.h | 18 + .../Pods/Parse/Parse/Internal/PFWeakValue.m | 26 + .../Pods/Parse/Parse/Internal/ParseInternal.h | 31 + .../Pods/Parse/Parse/Internal/ParseManager.h | 101 + .../Pods/Parse/Parse/Internal/ParseManager.m | 466 +++ .../Pods/Parse/Parse/Internal/ParseModule.h | 26 + .../Pods/Parse/Parse/Internal/ParseModule.m | 134 + .../Pods/Parse/Parse/Internal/Parse_Private.h | 25 + .../Internal/Product/PFProduct+Private.h | 46 + .../PFProductsRequestHandler.h | 37 + .../PFProductsRequestHandler.m | 92 + .../Internal/PropertyInfo/PFPropertyInfo.h | 50 + .../Internal/PropertyInfo/PFPropertyInfo.m | 212 ++ .../PropertyInfo/PFPropertyInfo_Private.h | 25 + .../PropertyInfo/PFPropertyInfo_Runtime.h | 44 + .../PropertyInfo/PFPropertyInfo_Runtime.m | 122 + .../Controller/PFPurchaseController.h | 62 + .../Controller/PFPurchaseController.m | 241 ++ .../PFPaymentTransactionObserver.h | 29 + .../PFPaymentTransactionObserver.m | 105 + .../PFPaymentTransactionObserver_Private.h | 19 + .../PFPushChannelsController.h | 47 + .../PFPushChannelsController.m | 120 + .../Push/Controller/PFPushController.h | 49 + .../Push/Controller/PFPushController.m | 57 + .../Internal/Push/Manager/PFPushManager.h | 43 + .../Internal/Push/Manager/PFPushManager.m | 95 + .../Parse/Parse/Internal/Push/PFPushPrivate.h | 43 + .../Internal/Push/State/PFMutablePushState.h | 32 + .../Internal/Push/State/PFMutablePushState.m | 34 + .../Parse/Internal/Push/State/PFPushState.h | 39 + .../Parse/Internal/Push/State/PFPushState.m | 60 + .../Internal/Push/State/PFPushState_Private.h | 26 + .../Internal/Push/Utilites/PFPushUtilities.h | 20 + .../Internal/Push/Utilites/PFPushUtilities.m | 91 + .../Controller/PFCachedQueryController.h | 25 + .../Controller/PFCachedQueryController.m | 208 ++ .../Controller/PFOfflineQueryController.h | 31 + .../Controller/PFOfflineQueryController.m | 180 ++ .../Query/Controller/PFQueryController.h | 104 + .../Query/Controller/PFQueryController.m | 160 + .../Parse/Internal/Query/PFQueryPrivate.h | 56 + .../Query/State/PFMutableQueryState.h | 81 + .../Query/State/PFMutableQueryState.m | 177 ++ .../Parse/Internal/Query/State/PFQueryState.h | 65 + .../Parse/Internal/Query/State/PFQueryState.m | 88 + .../Query/State/PFQueryState_Private.h | 61 + .../Query/Utilities/PFQueryUtilities.h | 42 + .../Query/Utilities/PFQueryUtilities.m | 530 ++++ .../Internal/Relation/PFRelationPrivate.h | 27 + .../Relation/State/PFMutableRelationState.h | 19 + .../Relation/State/PFMutableRelationState.m | 62 + .../Internal/Relation/State/PFRelationState.h | 30 + .../Internal/Relation/State/PFRelationState.m | 65 + .../Relation/State/PFRelationState_Private.h | 28 + .../Session/Controller/PFSessionController.h | 40 + .../Session/Controller/PFSessionController.m | 60 + .../Internal/Session/PFSession_Private.h | 24 + .../Session/Utilities/PFSessionUtilities.h | 24 + .../Session/Utilities/PFSessionUtilities.m | 22 + .../Internal/ThreadSafety/PFThreadsafety.h | 13 + .../Internal/ThreadSafety/PFThreadsafety.m | 33 + .../PFUserAuthenticationController.h | 61 + .../PFUserAuthenticationController.m | 171 + .../PFAnonymousAuthenticationProvider.h | 27 + .../PFAnonymousAuthenticationProvider.m | 36 + .../Anonymous/PFAnonymousUtils_Private.h | 22 + .../User/Coder/File/PFUserFileCodingLogic.h | 18 + .../User/Coder/File/PFUserFileCodingLogic.m | 60 + .../Internal/User/Constants/PFUserConstants.h | 15 + .../Internal/User/Constants/PFUserConstants.m | 15 + .../User/Controller/PFUserController.h | 61 + .../User/Controller/PFUserController.m | 164 + .../PFCurrentUserController.h | 59 + .../PFCurrentUserController.m | 364 +++ .../Parse/Parse/Internal/User/PFUserPrivate.h | 79 + .../Internal/User/State/PFMutableUserState.h | 19 + .../Internal/User/State/PFMutableUserState.m | 20 + .../Parse/Internal/User/State/PFUserState.h | 26 + .../Parse/Internal/User/State/PFUserState.m | 64 + .../Internal/User/State/PFUserState_Private.h | 25 + BreakingBad/Pods/Parse/Parse/PFACL.h | 264 ++ BreakingBad/Pods/Parse/Parse/PFACL.m | 363 +++ BreakingBad/Pods/Parse/Parse/PFAnalytics.h | 167 + BreakingBad/Pods/Parse/Parse/PFAnalytics.m | 91 + .../Pods/Parse/Parse/PFAnonymousUtils.h | 82 + .../Pods/Parse/Parse/PFAnonymousUtils.m | 91 + BreakingBad/Pods/Parse/Parse/PFCloud.h | 91 + BreakingBad/Pods/Parse/Parse/PFCloud.m | 58 + BreakingBad/Pods/Parse/Parse/PFConfig.h | 106 + BreakingBad/Pods/Parse/Parse/PFConfig.m | 113 + BreakingBad/Pods/Parse/Parse/PFConstants.h | 509 +++ BreakingBad/Pods/Parse/Parse/PFConstants.m | 32 + BreakingBad/Pods/Parse/Parse/PFFile.h | 446 +++ BreakingBad/Pods/Parse/Parse/PFFile.m | 546 ++++ BreakingBad/Pods/Parse/Parse/PFGeoPoint.h | 114 + BreakingBad/Pods/Parse/Parse/PFGeoPoint.m | 193 ++ BreakingBad/Pods/Parse/Parse/PFInstallation.h | 113 + BreakingBad/Pods/Parse/Parse/PFInstallation.m | 342 ++ .../Parse/PFNetworkActivityIndicatorManager.h | 70 + .../Parse/PFNetworkActivityIndicatorManager.m | 165 + BreakingBad/Pods/Parse/Parse/PFNullability.h | 47 + .../Pods/Parse/Parse/PFObject+Subclass.h | 125 + BreakingBad/Pods/Parse/Parse/PFObject.h | 1429 +++++++++ BreakingBad/Pods/Parse/Parse/PFObject.m | 2770 +++++++++++++++++ BreakingBad/Pods/Parse/Parse/PFProduct.h | 70 + BreakingBad/Pods/Parse/Parse/PFProduct.m | 48 + BreakingBad/Pods/Parse/Parse/PFPurchase.h | 98 + BreakingBad/Pods/Parse/Parse/PFPurchase.m | 89 + BreakingBad/Pods/Parse/Parse/PFPush.h | 532 ++++ BreakingBad/Pods/Parse/Parse/PFPush.m | 464 +++ BreakingBad/Pods/Parse/Parse/PFQuery.h | 892 ++++++ BreakingBad/Pods/Parse/Parse/PFQuery.m | 1136 +++++++ BreakingBad/Pods/Parse/Parse/PFRelation.h | 58 + BreakingBad/Pods/Parse/Parse/PFRelation.m | 236 ++ BreakingBad/Pods/Parse/Parse/PFRole.h | 100 + BreakingBad/Pods/Parse/Parse/PFRole.m | 91 + BreakingBad/Pods/Parse/Parse/PFSession.h | 52 + BreakingBad/Pods/Parse/Parse/PFSession.m | 106 + BreakingBad/Pods/Parse/Parse/PFSubclassing.h | 87 + BreakingBad/Pods/Parse/Parse/PFUser.h | 519 +++ BreakingBad/Pods/Parse/Parse/PFUser.m | 1225 ++++++++ .../Parse/PFUserAuthenticationDelegate.h | 36 + BreakingBad/Pods/Parse/Parse/Parse.h | 195 ++ BreakingBad/Pods/Parse/Parse/Parse.m | 235 ++ .../Parse/Resources/en.lproj/Parse.strings | Bin 0 -> 122 bytes BreakingBad/Pods/Parse/README.md | 106 + .../Pods/Pods.xcodeproj/project.pbxproj | 2051 ++++++++++++ .../Bolts/Bolts-Private.xcconfig | 5 + .../Target Support Files/Bolts/Bolts-dummy.m | 5 + .../Bolts/Bolts-prefix.pch | 4 + .../Target Support Files/Bolts/Bolts.xcconfig | 0 .../Parse/Parse-Private.xcconfig | 6 + .../Target Support Files/Parse/Parse-dummy.m | 5 + .../Parse/Parse-prefix.pch | 4 + .../Target Support Files/Parse/Parse.xcconfig | 1 + .../Pods/Pods-acknowledgements.markdown | 40 + .../Pods/Pods-acknowledgements.plist | 74 + .../Target Support Files/Pods/Pods-dummy.m | 5 + .../Pods/Pods-resources.sh | 101 + .../Pods/Pods.debug.xcconfig | 5 + .../Pods/Pods.release.xcconfig | 5 + 636 files changed, 47197 insertions(+), 26 deletions(-) create mode 100644 BreakingBad/BreakingBad.xcworkspace/contents.xcworkspacedata create mode 100644 BreakingBad/BreakingBad/BBUser.h create mode 100644 BreakingBad/BreakingBad/BBUser.m create mode 100644 BreakingBad/BreakingBad/Entry.h create mode 100644 BreakingBad/BreakingBad/Entry.m create mode 100644 BreakingBad/BreakingBad/Goal.h create mode 100644 BreakingBad/BreakingBad/Goal.m create mode 100644 BreakingBad/BreakingBad/Habit.h create mode 100644 BreakingBad/BreakingBad/Habit.m create mode 100644 BreakingBad/BreakingBad/Step.h create mode 100644 BreakingBad/BreakingBad/Step.m create mode 100644 BreakingBad/Podfile create mode 100644 BreakingBad/Podfile.lock create mode 100644 BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationToken.h create mode 100644 BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationToken.m create mode 100644 BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h create mode 100644 BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m create mode 100644 BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h create mode 100644 BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m create mode 100644 BreakingBad/Pods/Bolts/Bolts/Common/BFDefines.h create mode 100644 BreakingBad/Pods/Bolts/Bolts/Common/BFExecutor.h create mode 100644 BreakingBad/Pods/Bolts/Bolts/Common/BFExecutor.m create mode 100644 BreakingBad/Pods/Bolts/Bolts/Common/BFTask.h create mode 100644 BreakingBad/Pods/Bolts/Bolts/Common/BFTask.m create mode 100644 BreakingBad/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h create mode 100644 BreakingBad/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m create mode 100644 BreakingBad/Pods/Bolts/Bolts/Common/Bolts.h create mode 100644 BreakingBad/Pods/Bolts/Bolts/Common/Bolts.m create mode 100644 BreakingBad/Pods/Bolts/Bolts/Common/BoltsVersion.h create mode 100644 BreakingBad/Pods/Bolts/LICENSE create mode 100644 BreakingBad/Pods/Bolts/README.md create mode 120000 BreakingBad/Pods/Headers/Private/Bolts/BFCancellationToken.h create mode 120000 BreakingBad/Pods/Headers/Private/Bolts/BFCancellationTokenRegistration.h create mode 120000 BreakingBad/Pods/Headers/Private/Bolts/BFCancellationTokenSource.h create mode 120000 BreakingBad/Pods/Headers/Private/Bolts/BFDefines.h create mode 120000 BreakingBad/Pods/Headers/Private/Bolts/BFExecutor.h create mode 120000 BreakingBad/Pods/Headers/Private/Bolts/BFTask.h create mode 120000 BreakingBad/Pods/Headers/Private/Bolts/BFTaskCompletionSource.h create mode 120000 BreakingBad/Pods/Headers/Private/Bolts/Bolts.h create mode 120000 BreakingBad/Pods/Headers/Private/Bolts/BoltsVersion.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/BFTask+Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFACL.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFACLPrivate.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFACLState.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFACLState_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFAlertView.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFAnalytics.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFAnalyticsController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFAnalyticsUtilities.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFAnalytics_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFAnonymousAuthenticationProvider.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFAnonymousUtils.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFAnonymousUtils_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFApplication.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFAssert.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFAsyncTaskQueue.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFBase64Encoder.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFBaseState.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFCachedQueryController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFCategoryLoader.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFCloud.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFCloudCodeController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFCommandCache.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFCommandCache_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFCommandResult.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFCommandRunning.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFCommandRunningConstants.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFCommandURLRequestConstructor.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFConfig.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFConfigController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFConfig_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFConstants.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFCoreDataProvider.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFCoreManager.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFCurrentConfigController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFCurrentInstallationController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFCurrentObjectControlling.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFCurrentUserController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFDataProvider.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFDateFormatter.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFDecoder.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFDefaultACLController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFDevice.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFEncoder.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFErrorUtilities.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFEventuallyPin.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFEventuallyQueue.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFEventuallyQueue_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFFieldOperation.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFFieldOperationDecoder.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFFile.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFFileController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFFileDataStream.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFFileManager.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFFileStagingController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFFileState.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFFileState_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFFile_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFGeoPoint.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFGeoPointPrivate.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFHTTPRequest.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFHTTPURLRequestConstructor.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFHash.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFInstallation.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFInstallationConstants.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFInstallationController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFInstallationIdentifierStore.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFInstallationIdentifierStore_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFInstallationPrivate.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFInternalUtils.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFJSONSerialization.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFKeyValueCache.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFKeyValueCache_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFKeychainStore.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFLocationManager.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFLogger.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFLogging.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFMacros.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFMultiProcessFileLock.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFMultiProcessFileLockController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFMulticastDelegate.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFMutableACLState.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFMutableFileState.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFMutableObjectState.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFMutablePushState.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFMutableQueryState.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFMutableRelationState.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFMutableUserState.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFNetworkActivityIndicatorManager.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFNetworkCommand.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFNullability.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFObject+Subclass.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFObject.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFObjectBatchController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFObjectConstants.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFObjectController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFObjectController_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFObjectControlling.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFObjectEstimatedData.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFObjectFileCoder.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFObjectFileCodingLogic.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFObjectFilePersistenceController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFObjectLocalIdStore.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFObjectPrivate.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFObjectState.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFObjectState_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFObjectSubclassInfo.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFObjectSubclassingController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFObjectUtilities.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFOfflineObjectController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFOfflineQueryController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFOfflineQueryLogic.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFOfflineStore.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFOperationSet.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFPaymentTransactionObserver.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFPaymentTransactionObserver_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFPin.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFPinningEventuallyQueue.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFPinningObjectStore.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFProduct+Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFProduct.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFProductsRequestHandler.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFPropertyInfo.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFPropertyInfo_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFPropertyInfo_Runtime.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFPurchase.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFPurchaseController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFPush.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFPushChannelsController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFPushController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFPushManager.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFPushPrivate.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFPushState.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFPushState_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFPushUtilities.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFQuery.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFQueryController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFQueryPrivate.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFQueryState.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFQueryState_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFQueryUtilities.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFRESTAnalyticsCommand.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFRESTCloudCommand.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFRESTCommand.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFRESTCommand_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFRESTConfigCommand.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFRESTFileCommand.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFRESTObjectBatchCommand.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFRESTObjectCommand.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFRESTPushCommand.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFRESTQueryCommand.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFRESTSessionCommand.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFRESTUserCommand.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFReachability.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFRelation.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFRelationPrivate.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFRelationState.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFRelationState_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFRole.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFSQLiteDatabase.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFSQLiteDatabaseController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFSQLiteDatabaseResult.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFSQLiteDatabase_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFSQLiteStatement.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFSession.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFSessionController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFSessionUtilities.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFSession_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFSubclassing.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFTaskQueue.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFThreadsafety.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFURLConstructor.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFURLSession.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFURLSessionCommandRunner.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFURLSessionCommandRunner_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFURLSessionDataTaskDelegate.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFURLSessionDataTaskDelegate_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFURLSessionFileDownloadTaskDelegate.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFURLSessionJSONDataTaskDelegate.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFURLSessionUploadTaskDelegate.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFURLSession_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFUser.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFUserAuthenticationController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFUserAuthenticationDelegate.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFUserConstants.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFUserController.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFUserFileCodingLogic.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFUserPrivate.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFUserState.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFUserState_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/PFWeakValue.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/Parse.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/ParseInternal.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/ParseManager.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/ParseModule.h create mode 120000 BreakingBad/Pods/Headers/Private/Parse/Parse_Private.h create mode 120000 BreakingBad/Pods/Headers/Public/Bolts/BFCancellationToken.h create mode 120000 BreakingBad/Pods/Headers/Public/Bolts/BFCancellationTokenRegistration.h create mode 120000 BreakingBad/Pods/Headers/Public/Bolts/BFCancellationTokenSource.h create mode 120000 BreakingBad/Pods/Headers/Public/Bolts/BFDefines.h create mode 120000 BreakingBad/Pods/Headers/Public/Bolts/BFExecutor.h create mode 120000 BreakingBad/Pods/Headers/Public/Bolts/BFTask.h create mode 120000 BreakingBad/Pods/Headers/Public/Bolts/BFTaskCompletionSource.h create mode 120000 BreakingBad/Pods/Headers/Public/Bolts/Bolts.h create mode 120000 BreakingBad/Pods/Headers/Public/Bolts/BoltsVersion.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFACL.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFAnalytics.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFAnonymousUtils.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFCloud.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFConfig.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFConstants.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFFile.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFGeoPoint.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFInstallation.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFNetworkActivityIndicatorManager.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFNullability.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFObject+Subclass.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFObject.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFProduct.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFPurchase.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFPush.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFQuery.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFRelation.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFRole.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFSession.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFSubclassing.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFUser.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/PFUserAuthenticationDelegate.h create mode 120000 BreakingBad/Pods/Headers/Public/Parse/Parse.h create mode 100644 BreakingBad/Pods/Manifest.lock create mode 100644 BreakingBad/Pods/Parse/LICENSE create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/ACL/PFACLPrivate.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/ACL/State/PFACLState.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/ACL/State/PFACLState.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/ACL/State/PFACLState_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/ACL/State/PFMutableACLState.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/ACL/State/PFMutableACLState.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Analytics/Controller/PFAnalyticsController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Analytics/Controller/PFAnalyticsController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Analytics/PFAnalytics_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/BFTask+Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/BFTask+Private.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/CloudCode/PFCloudCodeController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/CloudCode/PFCloudCodeController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunning.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunning.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTAnalyticsCommand.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTAnalyticsCommand.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTCloudCommand.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTCloudCommand.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTCommand.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTCommand.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTCommand_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTConfigCommand.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTConfigCommand.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTFileCommand.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTFileCommand.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTObjectBatchCommand.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTObjectBatchCommand.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTObjectCommand.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTObjectCommand.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTPushCommand.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTPushCommand.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTQueryCommand.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTQueryCommand.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTSessionCommand.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTSessionCommand.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTUserCommand.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTUserCommand.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Config/Controller/PFConfigController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Config/Controller/PFConfigController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Config/Controller/PFCurrentConfigController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Config/Controller/PFCurrentConfigController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Config/PFConfig_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperation.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperation.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperationDecoder.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperationDecoder.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/File/Controller/PFFileController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/File/Controller/PFFileController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/File/Controller/PFFileStagingController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/File/Controller/PFFileStagingController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/File/FileDataStream/PFFileDataStream.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/File/FileDataStream/PFFileDataStream.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/File/PFFile_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/File/State/PFFileState.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/File/State/PFFileState.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/File/State/PFFileState_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/File/State/PFMutableFileState.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/File/State/PFMutableFileState.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPRequest.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/HTTPRequest/PFURLConstructor.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/HTTPRequest/PFURLConstructor.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Installation/Constants/PFInstallationConstants.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Installation/Constants/PFInstallationConstants.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Installation/Controller/PFInstallationController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Installation/Controller/PFInstallationController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Installation/PFInstallationPrivate.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/Pin/PFPin.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/Pin/PFPin.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/BatchController/PFObjectBatchController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/BatchController/PFObjectBatchController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCoder.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCoder.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/Constants/PFObjectConstants.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/Constants/PFObjectConstants.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/PFObjectControlling.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/OperationSet/PFOperationSet.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/OperationSet/PFOperationSet.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/PFObjectPrivate.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/PinningStore/PFPinningObjectStore.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/PinningStore/PFPinningObjectStore.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/State/PFMutableObjectState.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/State/PFMutableObjectState.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/State/PFObjectState.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/State/PFObjectState.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/State/PFObjectState_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/Utilities/PFObjectUtilities.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Object/Utilities/PFObjectUtilities.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFAlertView.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFAlertView.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFApplication.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFApplication.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFAssert.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFAsyncTaskQueue.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFAsyncTaskQueue.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFBase64Encoder.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFBase64Encoder.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFBaseState.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFBaseState.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFCategoryLoader.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFCategoryLoader.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFCommandCache.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFCommandCache.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFCommandCache_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFCommandResult.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFCommandResult.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFCoreDataProvider.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFCoreManager.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFCoreManager.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFDataProvider.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFDateFormatter.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFDateFormatter.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFDecoder.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFDecoder.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFDevice.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFDevice.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFEncoder.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFEncoder.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFErrorUtilities.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFErrorUtilities.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFEventuallyPin.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFEventuallyPin.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFEventuallyQueue.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFEventuallyQueue.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFEventuallyQueue_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFFileManager.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFFileManager.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFGeoPointPrivate.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFHash.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFHash.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFInternalUtils.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFInternalUtils.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFJSONSerialization.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFJSONSerialization.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFKeychainStore.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFKeychainStore.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFLocationManager.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFLocationManager.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFLogger.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFLogger.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFLogging.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFMacros.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFMulticastDelegate.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFMulticastDelegate.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFNetworkCommand.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFPinningEventuallyQueue.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFPinningEventuallyQueue.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFReachability.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFReachability.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFTaskQueue.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFTaskQueue.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFWeakValue.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PFWeakValue.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/ParseInternal.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/ParseManager.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/ParseManager.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/ParseModule.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/ParseModule.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Parse_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Product/PFProduct+Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Purchase/Controller/PFPurchaseController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Purchase/Controller/PFPurchaseController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Push/ChannelsController/PFPushChannelsController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Push/ChannelsController/PFPushChannelsController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Push/Controller/PFPushController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Push/Controller/PFPushController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Push/Manager/PFPushManager.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Push/Manager/PFPushManager.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Push/PFPushPrivate.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Push/State/PFMutablePushState.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Push/State/PFMutablePushState.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Push/State/PFPushState.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Push/State/PFPushState.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Push/State/PFPushState_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Push/Utilites/PFPushUtilities.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Push/Utilites/PFPushUtilities.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFCachedQueryController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFCachedQueryController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFOfflineQueryController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFOfflineQueryController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFQueryController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFQueryController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Query/PFQueryPrivate.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Query/State/PFMutableQueryState.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Query/State/PFMutableQueryState.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Query/State/PFQueryState.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Query/State/PFQueryState.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Query/State/PFQueryState_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Query/Utilities/PFQueryUtilities.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Query/Utilities/PFQueryUtilities.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Relation/PFRelationPrivate.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Relation/State/PFMutableRelationState.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Relation/State/PFMutableRelationState.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Relation/State/PFRelationState.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Relation/State/PFRelationState.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Relation/State/PFRelationState_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Session/Controller/PFSessionController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Session/Controller/PFSessionController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Session/PFSession_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Session/Utilities/PFSessionUtilities.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/Session/Utilities/PFSessionUtilities.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/ThreadSafety/PFThreadsafety.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/ThreadSafety/PFThreadsafety.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/User/Constants/PFUserConstants.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/User/Constants/PFUserConstants.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/User/Controller/PFUserController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/User/Controller/PFUserController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/User/CurrentUserController/PFCurrentUserController.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/User/CurrentUserController/PFCurrentUserController.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/User/PFUserPrivate.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/User/State/PFMutableUserState.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/User/State/PFMutableUserState.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/User/State/PFUserState.h create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/User/State/PFUserState.m create mode 100644 BreakingBad/Pods/Parse/Parse/Internal/User/State/PFUserState_Private.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFACL.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFACL.m create mode 100644 BreakingBad/Pods/Parse/Parse/PFAnalytics.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFAnalytics.m create mode 100644 BreakingBad/Pods/Parse/Parse/PFAnonymousUtils.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFAnonymousUtils.m create mode 100644 BreakingBad/Pods/Parse/Parse/PFCloud.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFCloud.m create mode 100644 BreakingBad/Pods/Parse/Parse/PFConfig.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFConfig.m create mode 100644 BreakingBad/Pods/Parse/Parse/PFConstants.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFConstants.m create mode 100644 BreakingBad/Pods/Parse/Parse/PFFile.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFFile.m create mode 100644 BreakingBad/Pods/Parse/Parse/PFGeoPoint.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFGeoPoint.m create mode 100644 BreakingBad/Pods/Parse/Parse/PFInstallation.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFInstallation.m create mode 100644 BreakingBad/Pods/Parse/Parse/PFNetworkActivityIndicatorManager.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFNetworkActivityIndicatorManager.m create mode 100644 BreakingBad/Pods/Parse/Parse/PFNullability.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFObject+Subclass.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFObject.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFObject.m create mode 100644 BreakingBad/Pods/Parse/Parse/PFProduct.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFProduct.m create mode 100644 BreakingBad/Pods/Parse/Parse/PFPurchase.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFPurchase.m create mode 100644 BreakingBad/Pods/Parse/Parse/PFPush.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFPush.m create mode 100644 BreakingBad/Pods/Parse/Parse/PFQuery.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFQuery.m create mode 100644 BreakingBad/Pods/Parse/Parse/PFRelation.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFRelation.m create mode 100644 BreakingBad/Pods/Parse/Parse/PFRole.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFRole.m create mode 100644 BreakingBad/Pods/Parse/Parse/PFSession.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFSession.m create mode 100644 BreakingBad/Pods/Parse/Parse/PFSubclassing.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFUser.h create mode 100644 BreakingBad/Pods/Parse/Parse/PFUser.m create mode 100644 BreakingBad/Pods/Parse/Parse/PFUserAuthenticationDelegate.h create mode 100644 BreakingBad/Pods/Parse/Parse/Parse.h create mode 100644 BreakingBad/Pods/Parse/Parse/Parse.m create mode 100644 BreakingBad/Pods/Parse/Parse/Resources/en.lproj/Parse.strings create mode 100644 BreakingBad/Pods/Parse/README.md create mode 100644 BreakingBad/Pods/Pods.xcodeproj/project.pbxproj create mode 100644 BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig create mode 100644 BreakingBad/Pods/Target Support Files/Bolts/Bolts-dummy.m create mode 100644 BreakingBad/Pods/Target Support Files/Bolts/Bolts-prefix.pch create mode 100644 BreakingBad/Pods/Target Support Files/Bolts/Bolts.xcconfig create mode 100644 BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig create mode 100644 BreakingBad/Pods/Target Support Files/Parse/Parse-dummy.m create mode 100644 BreakingBad/Pods/Target Support Files/Parse/Parse-prefix.pch create mode 100644 BreakingBad/Pods/Target Support Files/Parse/Parse.xcconfig create mode 100644 BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown create mode 100644 BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist create mode 100644 BreakingBad/Pods/Target Support Files/Pods/Pods-dummy.m create mode 100755 BreakingBad/Pods/Target Support Files/Pods/Pods-resources.sh create mode 100644 BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig create mode 100644 BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig diff --git a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj index 4d31c85..5e56e76 100644 --- a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj +++ b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 4A5A43BBA13FCB718327B866 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 288369826A80E7C37FA68C71 /* libPods.a */; }; 5F8FF9991BC9A9CD00855DFB /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F8FF9981BC9A9CD00855DFB /* main.m */; }; 5F8FF99C1BC9A9CD00855DFB /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F8FF99B1BC9A9CD00855DFB /* AppDelegate.m */; }; 5F8FF99F1BC9A9CD00855DFB /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F8FF99E1BC9A9CD00855DFB /* ViewController.m */; }; @@ -14,9 +15,16 @@ 5F8FF9A51BC9A9CD00855DFB /* BreakingBad.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 5F8FF9A31BC9A9CD00855DFB /* BreakingBad.xcdatamodeld */; }; 5F8FF9A71BC9A9CD00855DFB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5F8FF9A61BC9A9CD00855DFB /* Assets.xcassets */; }; 5F8FF9AA1BC9A9CD00855DFB /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5F8FF9A81BC9A9CD00855DFB /* LaunchScreen.storyboard */; }; + DC2DC1881BCAC00500A627E2 /* Habit.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC1871BCAC00500A627E2 /* Habit.m */; settings = {ASSET_TAGS = (); }; }; + DC2DC18B1BCAC08700A627E2 /* Goal.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC18A1BCAC08700A627E2 /* Goal.m */; settings = {ASSET_TAGS = (); }; }; + DC2DC18E1BCAC0A700A627E2 /* Entry.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC18D1BCAC0A700A627E2 /* Entry.m */; settings = {ASSET_TAGS = (); }; }; + DC2DC1911BCAE7E600A627E2 /* Step.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC1901BCAE7E600A627E2 /* Step.m */; settings = {ASSET_TAGS = (); }; }; + DC2DC1941BCAEB8D00A627E2 /* BBUser.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC1931BCAEB8D00A627E2 /* BBUser.m */; settings = {ASSET_TAGS = (); }; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 27C4A644526FAE35EDE94530 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; + 288369826A80E7C37FA68C71 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; 5F8FF9941BC9A9CD00855DFB /* BreakingBad.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BreakingBad.app; sourceTree = BUILT_PRODUCTS_DIR; }; 5F8FF9981BC9A9CD00855DFB /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 5F8FF99A1BC9A9CD00855DFB /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -28,6 +36,17 @@ 5F8FF9A61BC9A9CD00855DFB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 5F8FF9A91BC9A9CD00855DFB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 5F8FF9AB1BC9A9CD00855DFB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B57E170B6FA09C54334C0536 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; + DC2DC1861BCAC00500A627E2 /* Habit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Habit.h; sourceTree = ""; }; + DC2DC1871BCAC00500A627E2 /* Habit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Habit.m; sourceTree = ""; }; + DC2DC1891BCAC08700A627E2 /* Goal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Goal.h; sourceTree = ""; }; + DC2DC18A1BCAC08700A627E2 /* Goal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Goal.m; sourceTree = ""; }; + DC2DC18C1BCAC0A700A627E2 /* Entry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Entry.h; sourceTree = ""; }; + DC2DC18D1BCAC0A700A627E2 /* Entry.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Entry.m; sourceTree = ""; }; + DC2DC18F1BCAE7E600A627E2 /* Step.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Step.h; sourceTree = ""; }; + DC2DC1901BCAE7E600A627E2 /* Step.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Step.m; sourceTree = ""; }; + DC2DC1921BCAEB8D00A627E2 /* BBUser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBUser.h; sourceTree = ""; }; + DC2DC1931BCAEB8D00A627E2 /* BBUser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBUser.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -35,6 +54,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4A5A43BBA13FCB718327B866 /* libPods.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -46,6 +66,8 @@ children = ( 5F8FF9961BC9A9CD00855DFB /* BreakingBad */, 5F8FF9951BC9A9CD00855DFB /* Products */, + 63F0AFE9BD856CE062BFF317 /* Pods */, + C7D24797CBE441A3A8CF05A9 /* Frameworks */, ); sourceTree = ""; }; @@ -62,6 +84,16 @@ children = ( 5F8FF99A1BC9A9CD00855DFB /* AppDelegate.h */, 5F8FF99B1BC9A9CD00855DFB /* AppDelegate.m */, + DC2DC1921BCAEB8D00A627E2 /* BBUser.h */, + DC2DC1931BCAEB8D00A627E2 /* BBUser.m */, + DC2DC1861BCAC00500A627E2 /* Habit.h */, + DC2DC1871BCAC00500A627E2 /* Habit.m */, + DC2DC1891BCAC08700A627E2 /* Goal.h */, + DC2DC18A1BCAC08700A627E2 /* Goal.m */, + DC2DC18C1BCAC0A700A627E2 /* Entry.h */, + DC2DC18D1BCAC0A700A627E2 /* Entry.m */, + DC2DC18F1BCAE7E600A627E2 /* Step.h */, + DC2DC1901BCAE7E600A627E2 /* Step.m */, 5F8FF99D1BC9A9CD00855DFB /* ViewController.h */, 5F8FF99E1BC9A9CD00855DFB /* ViewController.m */, 5F8FF9A01BC9A9CD00855DFB /* Main.storyboard */, @@ -82,6 +114,23 @@ name = "Supporting Files"; sourceTree = ""; }; + 63F0AFE9BD856CE062BFF317 /* Pods */ = { + isa = PBXGroup; + children = ( + B57E170B6FA09C54334C0536 /* Pods.debug.xcconfig */, + 27C4A644526FAE35EDE94530 /* Pods.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; + C7D24797CBE441A3A8CF05A9 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 288369826A80E7C37FA68C71 /* libPods.a */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -89,9 +138,11 @@ isa = PBXNativeTarget; buildConfigurationList = 5F8FF9AE1BC9A9CD00855DFB /* Build configuration list for PBXNativeTarget "BreakingBad" */; buildPhases = ( + 386C1D434FC76088901EED5D /* Check Pods Manifest.lock */, 5F8FF9901BC9A9CD00855DFB /* Sources */, 5F8FF9911BC9A9CD00855DFB /* Frameworks */, 5F8FF9921BC9A9CD00855DFB /* Resources */, + 33187123D7EE53A9E42AA534 /* Copy Pods Resources */, ); buildRules = ( ); @@ -147,14 +198,52 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 33187123D7EE53A9E42AA534 /* Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 386C1D434FC76088901EED5D /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 5F8FF9901BC9A9CD00855DFB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + DC2DC1881BCAC00500A627E2 /* Habit.m in Sources */, + DC2DC1911BCAE7E600A627E2 /* Step.m in Sources */, + DC2DC18B1BCAC08700A627E2 /* Goal.m in Sources */, 5F8FF99F1BC9A9CD00855DFB /* ViewController.m in Sources */, + DC2DC18E1BCAC0A700A627E2 /* Entry.m in Sources */, 5F8FF99C1BC9A9CD00855DFB /* AppDelegate.m in Sources */, 5F8FF9A51BC9A9CD00855DFB /* BreakingBad.xcdatamodeld in Sources */, + DC2DC1941BCAEB8D00A627E2 /* BBUser.m in Sources */, 5F8FF9991BC9A9CD00855DFB /* main.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -263,6 +352,7 @@ }; 5F8FF9AF1BC9A9CD00855DFB /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = B57E170B6FA09C54334C0536 /* Pods.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = BreakingBad/Info.plist; @@ -274,6 +364,7 @@ }; 5F8FF9B01BC9A9CD00855DFB /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 27C4A644526FAE35EDE94530 /* Pods.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = BreakingBad/Info.plist; @@ -302,6 +393,7 @@ 5F8FF9B01BC9A9CD00855DFB /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ diff --git a/BreakingBad/BreakingBad.xcworkspace/contents.xcworkspacedata b/BreakingBad/BreakingBad.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..f52d79c --- /dev/null +++ b/BreakingBad/BreakingBad.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/BreakingBad/BreakingBad/AppDelegate.m b/BreakingBad/BreakingBad/AppDelegate.m index aca6b99..8823b23 100644 --- a/BreakingBad/BreakingBad/AppDelegate.m +++ b/BreakingBad/BreakingBad/AppDelegate.m @@ -7,6 +7,11 @@ // #import "AppDelegate.h" +#import +#import "BBUser.h" +#import "Habit.h" +#import "Goal.h" +#import "Entry.h" @interface AppDelegate () @@ -16,7 +21,15 @@ @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - // Override point for customization after application launch. + + [BBUser registerSubclass]; + [Entry registerSubclass]; + [Goal registerSubclass]; + [Habit registerSubclass]; + [Step registerSubclass]; + + [Parse setApplicationId:@"4OUoEnBvW5xaxzLgWkDtZN31dFJoIduWBvB03o36" clientKey:@"aKDf8JmSXdA8PFp8wNdmi0cxiY6Nf4z7yXIgPjya"]; + return YES; } diff --git a/BreakingBad/BreakingBad/BBUser.h b/BreakingBad/BreakingBad/BBUser.h new file mode 100644 index 0000000..12a3f9f --- /dev/null +++ b/BreakingBad/BreakingBad/BBUser.h @@ -0,0 +1,20 @@ +// +// BBUser.h +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/11/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "PFUser.h" +#import "Habit.h" +#import + +@interface BBUser : PFUser + +@property (nonatomic) NSMutableArray *habits; +@property (nonatomic) NSString *email; +@property (nonatomic) NSString *password; +@property (nonatomic) NSString *username; + +@end diff --git a/BreakingBad/BreakingBad/BBUser.m b/BreakingBad/BreakingBad/BBUser.m new file mode 100644 index 0000000..4d0b051 --- /dev/null +++ b/BreakingBad/BreakingBad/BBUser.m @@ -0,0 +1,19 @@ +// +// BBUser.m +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/11/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "BBUser.h" +#import + +@implementation BBUser + +@dynamic habits; +@dynamic email; +@dynamic password; +@dynamic username; + +@end diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index 499be8f..0a58aa2 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -1,7 +1,7 @@ - + - + @@ -26,7 +26,7 @@ - + @@ -41,7 +41,7 @@ @@ -58,7 +58,7 @@ @@ -86,28 +86,28 @@ - - + + - - + + - - + + - - + + - - + + - - + + @@ -190,7 +190,7 @@ - + @@ -220,7 +220,7 @@ - + @@ -239,7 +239,7 @@ - + diff --git a/BreakingBad/BreakingBad/Entry.h b/BreakingBad/BreakingBad/Entry.h new file mode 100644 index 0000000..936f67c --- /dev/null +++ b/BreakingBad/BreakingBad/Entry.h @@ -0,0 +1,16 @@ +// +// Entry.h +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/11/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "PFObject.h" +#import + +@interface Entry : PFObject + +@property (nonatomic) NSString *entryLog; + +@end diff --git a/BreakingBad/BreakingBad/Entry.m b/BreakingBad/BreakingBad/Entry.m new file mode 100644 index 0000000..59cae4e --- /dev/null +++ b/BreakingBad/BreakingBad/Entry.m @@ -0,0 +1,20 @@ +// +// Entry.m +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/11/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "Entry.h" + +@implementation Entry + +@dynamic entryLog; + + ++ (NSString *)parseClassName{ + return @"Entry"; +} + +@end diff --git a/BreakingBad/BreakingBad/Goal.h b/BreakingBad/BreakingBad/Goal.h new file mode 100644 index 0000000..cdde172 --- /dev/null +++ b/BreakingBad/BreakingBad/Goal.h @@ -0,0 +1,19 @@ +// +// Goal.h +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/11/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "PFObject.h" +#import "Step.h" +#import + +@interface Goal : PFObject + +@property (nonatomic) NSMutableArray *steps; +@property (nonatomic) NSString *name; + + +@end diff --git a/BreakingBad/BreakingBad/Goal.m b/BreakingBad/BreakingBad/Goal.m new file mode 100644 index 0000000..75b007b --- /dev/null +++ b/BreakingBad/BreakingBad/Goal.m @@ -0,0 +1,19 @@ +// +// Goal.m +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/11/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "Goal.h" + +@implementation Goal + +@dynamic steps; +@dynamic name; + ++ (NSString *)parseClassName{ + return @"Goal"; +} +@end diff --git a/BreakingBad/BreakingBad/Habit.h b/BreakingBad/BreakingBad/Habit.h new file mode 100644 index 0000000..041514a --- /dev/null +++ b/BreakingBad/BreakingBad/Habit.h @@ -0,0 +1,21 @@ +// +// Habit.h +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/11/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "PFObject.h" +#import +#import "Entry.h" +#import "Goal.h" + +@interface Habit : PFObject + +@property (nonatomic) NSMutableArray *entries; +@property (nonatomic) NSMutableArray *goals; +@property (nonatomic) NSString *name; + + +@end diff --git a/BreakingBad/BreakingBad/Habit.m b/BreakingBad/BreakingBad/Habit.m new file mode 100644 index 0000000..429ccc1 --- /dev/null +++ b/BreakingBad/BreakingBad/Habit.m @@ -0,0 +1,21 @@ +// +// Habit.m +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/11/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "Habit.h" + +@implementation Habit + +@dynamic entries; +@dynamic goals; +@dynamic name; + ++ (NSString *)parseClassName{ + return @"Habit"; +} + +@end diff --git a/BreakingBad/BreakingBad/Step.h b/BreakingBad/BreakingBad/Step.h new file mode 100644 index 0000000..5146822 --- /dev/null +++ b/BreakingBad/BreakingBad/Step.h @@ -0,0 +1,17 @@ +// +// Step.h +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/11/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "PFObject.h" +#import + +@interface Step : PFObject + +@property (nonatomic) NSString *stepDescription; +@property (nonatomic) BOOL completed; + +@end diff --git a/BreakingBad/BreakingBad/Step.m b/BreakingBad/BreakingBad/Step.m new file mode 100644 index 0000000..712547c --- /dev/null +++ b/BreakingBad/BreakingBad/Step.m @@ -0,0 +1,20 @@ +// +// Step.m +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/11/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "Step.h" + +@implementation Step + +@dynamic stepDescription; +@dynamic completed; + ++(NSString *)parseClassName{ + return @"Step"; +} + +@end diff --git a/BreakingBad/BreakingBad/ViewController.m b/BreakingBad/BreakingBad/ViewController.m index eff8569..10633d6 100644 --- a/BreakingBad/BreakingBad/ViewController.m +++ b/BreakingBad/BreakingBad/ViewController.m @@ -7,6 +7,13 @@ // #import "ViewController.h" +#import +#import "BBUser.h" +#import "Habit.h" +#import "Goal.h" +#import "Entry.h" +#import "Step.h" + @interface ViewController () @@ -16,12 +23,69 @@ @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; - // Do any additional setup after loading the view, typically from a nib. + + BBUser *user = (BBUser *)[PFUser object]; + + user.email = @"ab1c@gmail.com"; + user.password = @"mesfinnotcool"; + user.username = @"nc3j"; + + + Habit *habit = [Habit new]; + habit.name = @"Smoking"; + + Entry *entry = [Entry new]; + entry.entryLog = @"Bitting nails"; + + + Step *step1 = [Step new]; + step1.stepDescription = @"1. No pack for a whole day"; + step1.completed = @YES; + + Step *step2 = [Step new]; + step2.stepDescription = @"1. No pack for a whole week"; + step2.completed = @NO; + + Goal *goal = [Goal new]; + goal.name = @"Quit Smoking"; + goal.steps = [NSMutableArray new]; + + [goal.steps addObject:step1]; + [goal.steps addObject:step2]; + + + habit.entries = [NSMutableArray new]; + habit.goals = [NSMutableArray new]; + habit.name = @"Zouf says we need to talk, ...whatever"; + + [habit.entries addObject:entry]; + [habit.goals addObject:goal]; + + + if([user objectForKey:@"habits"]==nil){ + user.habits = [NSMutableArray new]; + [user.habits addObject:habit]; + } + + [user signUpInBackground]; + [user saveInBackground]; + + + PFQuery *query = [PFQuery queryWithClassName:@"_User"]; + [query findObjectsInBackgroundWithBlock:^(NSArray * _Nullable objects, NSError * _Nullable error) { + ; + NSLog(@"%@",objects); + }]; + + BBUser *currentUser = (BBUser *)[PFUser currentUser]; + [currentUser objectForKey:@"habits"]; + [currentUser fetchIfNeeded]; + NSLog(@"%@",currentUser.habits); + } -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} + + + @end diff --git a/BreakingBad/Podfile b/BreakingBad/Podfile new file mode 100644 index 0000000..418a13c --- /dev/null +++ b/BreakingBad/Podfile @@ -0,0 +1 @@ +pod 'Parse' \ No newline at end of file diff --git a/BreakingBad/Podfile.lock b/BreakingBad/Podfile.lock new file mode 100644 index 0000000..adc9262 --- /dev/null +++ b/BreakingBad/Podfile.lock @@ -0,0 +1,13 @@ +PODS: + - Bolts/Tasks (1.3.0) + - Parse (1.9.0): + - Bolts/Tasks (>= 1.3.0) + +DEPENDENCIES: + - Parse + +SPEC CHECKSUMS: + Bolts: 805a4a87413e49d4a0c2b7d469084cbc46b09342 + Parse: 712efbc476d4f47b0f96b70db7e53101575753aa + +COCOAPODS: 0.38.2 diff --git a/BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationToken.h b/BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationToken.h new file mode 100644 index 0000000..90a20d7 --- /dev/null +++ b/BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationToken.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#import + +#import + +/*! + A block that will be called when a token is cancelled. + */ +typedef void(^BFCancellationBlock)(); + +/*! + The consumer view of a CancellationToken. + Propagates notification that operations should be canceled. + A BFCancellationToken has methods to inspect whether the token has been cancelled. + */ +@interface BFCancellationToken : NSObject + +/*! + Whether cancellation has been requested for this token source. + */ +@property (nonatomic, assign, readonly, getter=isCancellationRequested) BOOL cancellationRequested; + +/*! + Register a block to be notified when the token is cancelled. + If the token is already cancelled the delegate will be notified immediately. + */ +- (BFCancellationTokenRegistration *)registerCancellationObserverWithBlock:(BFCancellationBlock)block; + +@end diff --git a/BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationToken.m b/BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationToken.m new file mode 100644 index 0000000..b5006d0 --- /dev/null +++ b/BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationToken.m @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#import "BFCancellationToken.h" +#import "BFCancellationTokenRegistration.h" + +@interface BFCancellationToken () + +@property (atomic, assign, getter=isCancellationRequested) BOOL cancellationRequested; +@property (nonatomic, strong) NSMutableArray *registrations; +@property (nonatomic, strong) NSObject *lock; +@property (nonatomic) BOOL disposed; + +@end + +@interface BFCancellationTokenRegistration (BFCancellationToken) + ++ (instancetype)registrationWithToken:(BFCancellationToken *)token delegate:(BFCancellationBlock)delegate; + +- (void)notifyDelegate; + +@end + +@implementation BFCancellationToken + +#pragma mark - Initializer + +- (instancetype)init { + if (self = [super init]) { + _registrations = [NSMutableArray array]; + _lock = [NSObject new]; + } + return self; +} + +#pragma mark - Custom Setters/Getters + +- (BOOL)isCancellationRequested { + @synchronized(self.lock) { + [self throwIfDisposed]; + return _cancellationRequested; + } +} + +- (void)cancel { + NSArray *registrations; + @synchronized(self.lock) { + [self throwIfDisposed]; + if (_cancellationRequested) { + return; + } + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(cancelPrivate) object:nil]; + _cancellationRequested = YES; + registrations = [self.registrations copy]; + } + + [self notifyCancellation:registrations]; +} + +- (void)notifyCancellation:(NSArray *)registrations { + for (BFCancellationTokenRegistration *registration in registrations) { + [registration notifyDelegate]; + } +} + +- (BFCancellationTokenRegistration *)registerCancellationObserverWithBlock:(BFCancellationBlock)block { + @synchronized(self.lock) { + BFCancellationTokenRegistration *registration = [BFCancellationTokenRegistration registrationWithToken:self delegate:[block copy]]; + [self.registrations addObject:registration]; + + return registration; + } +} + +- (void)unregisterRegistration:(BFCancellationTokenRegistration *)registration { + @synchronized(self.lock) { + [self throwIfDisposed]; + [self.registrations removeObject:registration]; + } +} + +// Delay on a non-public method to prevent interference with a user calling performSelector or +// cancelPreviousPerformRequestsWithTarget on the public method +- (void)cancelPrivate { + [self cancel]; +} + +- (void)cancelAfterDelay:(int)millis { + [self throwIfDisposed]; + if (millis < -1) { + [NSException raise:NSInvalidArgumentException format:@"Delay must be >= -1"]; + } + + if (millis == 0) { + [self cancel]; + return; + } + + @synchronized(self.lock) { + [self throwIfDisposed]; + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(cancelPrivate) object:nil]; + if (self.cancellationRequested) { + return; + } + + if (millis != -1) { + double delay = (double)millis / 1000; + [self performSelector:@selector(cancelPrivate) withObject:nil afterDelay:delay]; + } + } +} + +- (void)dispose { + @synchronized(self.lock) { + if (self.disposed) { + return; + } + self.disposed = YES; + for (BFCancellationTokenRegistration *registration in self.registrations) { + [registration dispose]; + } + [self.registrations removeAllObjects]; + } +} + +- (void)throwIfDisposed { + if (self.disposed) { + [NSException raise:NSInternalInconsistencyException format:@"Object already disposed"]; + } +} + +@end diff --git a/BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h b/BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h new file mode 100644 index 0000000..3e7b711 --- /dev/null +++ b/BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#import + +/*! + Represents the registration of a cancellation observer with a cancellation token. + Can be used to unregister the observer at a later time. + */ +@interface BFCancellationTokenRegistration : NSObject + +/*! + Removes the cancellation observer registered with the token + and releases all resources associated with this registration. + */ +- (void)dispose; + +@end diff --git a/BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m b/BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m new file mode 100644 index 0000000..9c8a7ae --- /dev/null +++ b/BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#import "BFCancellationTokenRegistration.h" + +#import "BFCancellationToken.h" + +@interface BFCancellationTokenRegistration () + +@property (nonatomic, weak) BFCancellationToken *token; +@property (nonatomic, strong) BFCancellationBlock cancellationObserverBlock; +@property (nonatomic, strong) NSObject *lock; +@property (nonatomic) BOOL disposed; + +@end + +@interface BFCancellationToken (BFCancellationTokenRegistration) + +- (void)unregisterRegistration:(BFCancellationTokenRegistration *)registration; + +@end + +@implementation BFCancellationTokenRegistration + ++ (instancetype)registrationWithToken:(BFCancellationToken *)token delegate:(BFCancellationBlock)delegate { + BFCancellationTokenRegistration *registration = [BFCancellationTokenRegistration new]; + registration.token = token; + registration.cancellationObserverBlock = delegate; + return registration; +} + +- (instancetype)init { + if (self = [super init]) { + _lock = [NSObject new]; + } + return self; +} + +- (void)dispose { + @synchronized(self.lock) { + if (self.disposed) { + return; + } + self.disposed = YES; + } + + BFCancellationToken *token = self.token; + if (token != nil) { + [token unregisterRegistration:self]; + self.token = nil; + } + self.cancellationObserverBlock = nil; +} + +- (void)notifyDelegate { + @synchronized(self.lock) { + [self throwIfDisposed]; + self.cancellationObserverBlock(); + } +} + +- (void)throwIfDisposed { + NSAssert(!self.disposed, @"Object already disposed"); +} + +@end diff --git a/BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h b/BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h new file mode 100644 index 0000000..bd6e7a1 --- /dev/null +++ b/BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#import + +@class BFCancellationToken; + +/*! + BFCancellationTokenSource represents the producer side of a CancellationToken. + Signals to a CancellationToken that it should be canceled. + It is a cancellation token that also has methods + for changing the state of a token by cancelling it. + */ +@interface BFCancellationTokenSource : NSObject + +/*! + Creates a new cancellation token source. + */ ++ (instancetype)cancellationTokenSource; + +/*! + The cancellation token associated with this CancellationTokenSource. + */ +@property (nonatomic, strong, readonly) BFCancellationToken *token; + +/*! + Whether cancellation has been requested for this token source. + */ +@property (nonatomic, assign, readonly, getter=isCancellationRequested) BOOL cancellationRequested; + +/*! + Cancels the token if it has not already been cancelled. + */ +- (void)cancel; + +/*! + Schedules a cancel operation on this CancellationTokenSource after the specified number of milliseconds. + @param millis The number of milliseconds to wait before completing the returned task. + If delay is `0` the cancel is executed immediately. If delay is `-1` any scheduled cancellation is stopped. + */ +- (void)cancelAfterDelay:(int)millis; + +/*! + Releases all resources associated with this token source, + including disposing of all registrations. + */ +- (void)dispose; + +@end diff --git a/BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m b/BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m new file mode 100644 index 0000000..947f725 --- /dev/null +++ b/BreakingBad/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#import "BFCancellationTokenSource.h" + +#import "BFCancellationToken.h" + +@interface BFCancellationToken (BFCancellationTokenSource) + +- (void)cancel; +- (void)cancelAfterDelay:(int)millis; + +- (void)dispose; +- (void)throwIfDisposed; + +@end + +@implementation BFCancellationTokenSource + +#pragma mark - Initializer + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _token = [BFCancellationToken new]; + + return self; +} + ++ (instancetype)cancellationTokenSource { + return [BFCancellationTokenSource new]; +} + +#pragma mark - Custom Setters/Getters + +- (BOOL)isCancellationRequested { + return _token.isCancellationRequested; +} + +- (void)cancel { + [_token cancel]; +} + +- (void)cancelAfterDelay:(int)millis { + [_token cancelAfterDelay:millis]; +} + +- (void)dispose { + [_token dispose]; +} + +@end diff --git a/BreakingBad/Pods/Bolts/Bolts/Common/BFDefines.h b/BreakingBad/Pods/Bolts/Bolts/Common/BFDefines.h new file mode 100644 index 0000000..cf7dcdf --- /dev/null +++ b/BreakingBad/Pods/Bolts/Bolts/Common/BFDefines.h @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#import + +#if __has_feature(objc_generics) || __has_extension(objc_generics) +# define BF_GENERIC(type) +#else +# define BF_GENERIC(type) +# define BFGenericType id +#endif diff --git a/BreakingBad/Pods/Bolts/Bolts/Common/BFExecutor.h b/BreakingBad/Pods/Bolts/Bolts/Common/BFExecutor.h new file mode 100644 index 0000000..02af9ba --- /dev/null +++ b/BreakingBad/Pods/Bolts/Bolts/Common/BFExecutor.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#import + +/*! + An object that can run a given block. + */ +@interface BFExecutor : NSObject + +/*! + Returns a default executor, which runs continuations immediately until the call stack gets too + deep, then dispatches to a new GCD queue. + */ ++ (instancetype)defaultExecutor; + +/*! + Returns an executor that runs continuations on the thread where the previous task was completed. + */ ++ (instancetype)immediateExecutor; + +/*! + Returns an executor that runs continuations on the main thread. + */ ++ (instancetype)mainThreadExecutor; + +/*! + Returns a new executor that uses the given block to execute continuations. + @param block The block to use. + */ ++ (instancetype)executorWithBlock:(void(^)(void(^block)()))block; + +/*! + Returns a new executor that runs continuations on the given queue. + @param queue The instance of `dispatch_queue_t` to dispatch all continuations onto. + */ ++ (instancetype)executorWithDispatchQueue:(dispatch_queue_t)queue; + +/*! + Returns a new executor that runs continuations on the given queue. + @param queue The instance of `NSOperationQueue` to run all continuations on. + */ ++ (instancetype)executorWithOperationQueue:(NSOperationQueue *)queue; + +/*! + Runs the given block using this executor's particular strategy. + @param block The block to execute. + */ +- (void)execute:(void(^)())block; + +@end diff --git a/BreakingBad/Pods/Bolts/Bolts/Common/BFExecutor.m b/BreakingBad/Pods/Bolts/Bolts/Common/BFExecutor.m new file mode 100644 index 0000000..292e27c --- /dev/null +++ b/BreakingBad/Pods/Bolts/Bolts/Common/BFExecutor.m @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#import "BFExecutor.h" + +@interface BFExecutor () + +@property (nonatomic, copy) void(^block)(void(^block)()); + +@end + +@implementation BFExecutor + +#pragma mark - Executor methods + ++ (instancetype)defaultExecutor { + static BFExecutor *defaultExecutor = NULL; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + defaultExecutor = [self executorWithBlock:^void(void(^block)()) { + static const NSString *BFTaskDepthKey = @"BFTaskDepth"; + static const int BFTaskDefaultExecutorMaxDepth = 20; + + // We prefer to run everything possible immediately, so that there is callstack information + // when debugging. However, we don't want the stack to get too deep, so if the number of + // recursive calls to this method exceeds a certain depth, we dispatch to another GCD queue. + NSMutableDictionary *threadLocal = [[NSThread currentThread] threadDictionary]; + NSNumber *depth = threadLocal[BFTaskDepthKey]; + if (!depth) { + depth = @0; + } + if (depth.intValue > BFTaskDefaultExecutorMaxDepth) { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block); + } else { + NSNumber *previousDepth = depth; + threadLocal[BFTaskDepthKey] = @(previousDepth.intValue + 1); + @try { + block(); + } @finally { + threadLocal[BFTaskDepthKey] = previousDepth; + } + } + }]; + }); + return defaultExecutor; +} + ++ (instancetype)immediateExecutor { + static BFExecutor *immediateExecutor = NULL; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + immediateExecutor = [self executorWithBlock:^void(void(^block)()) { + block(); + }]; + }); + return immediateExecutor; +} + ++ (instancetype)mainThreadExecutor { + static BFExecutor *mainThreadExecutor = NULL; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + mainThreadExecutor = [self executorWithBlock:^void(void(^block)()) { + if (![NSThread isMainThread]) { + dispatch_async(dispatch_get_main_queue(), block); + } else { + block(); + } + }]; + }); + return mainThreadExecutor; +} + ++ (instancetype)executorWithBlock:(void(^)(void(^block)()))block { + return [[self alloc] initWithBlock:block]; +} + ++ (instancetype)executorWithDispatchQueue:(dispatch_queue_t)queue { + return [self executorWithBlock:^void(void(^block)()) { + dispatch_async(queue, block); + }]; +} + ++ (instancetype)executorWithOperationQueue:(NSOperationQueue *)queue { + return [self executorWithBlock:^void(void(^block)()) { + [queue addOperation:[NSBlockOperation blockOperationWithBlock:block]]; + }]; +} + +#pragma mark - Initializer + +- (instancetype)initWithBlock:(void(^)(void(^block)()))block { + if (self = [super init]) { + _block = block; + } + return self; +} + +#pragma mark - Execution + +- (void)execute:(void(^)())block { + self.block(block); +} + +@end diff --git a/BreakingBad/Pods/Bolts/Bolts/Common/BFTask.h b/BreakingBad/Pods/Bolts/Bolts/Common/BFTask.h new file mode 100644 index 0000000..827071d --- /dev/null +++ b/BreakingBad/Pods/Bolts/Bolts/Common/BFTask.h @@ -0,0 +1,259 @@ +/* + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#import + +#import +#import + +/*! + Error domain used if there was multiple errors on . + */ +extern NSString *const BFTaskErrorDomain; + +/*! + An exception that is thrown if there was multiple exceptions on . + */ +extern NSString *const BFTaskMultipleExceptionsException; + +@class BFExecutor; +@class BFTask; + +/*! + The consumer view of a Task. A BFTask has methods to + inspect the state of the task, and to add continuations to + be run once the task is complete. + */ +@interface BFTask BF_GENERIC(__covariant BFGenericType) : NSObject + +/*! + A block that can act as a continuation for a task. + */ +typedef id(^BFContinuationBlock)(BFTask BF_GENERIC(BFGenericType) *task); + +/*! + Creates a task that is already completed with the given result. + @param result The result for the task. + */ ++ (instancetype)taskWithResult:(BFGenericType)result; + +/*! + Creates a task that is already completed with the given error. + @param error The error for the task. + */ ++ (instancetype)taskWithError:(NSError *)error; + +/*! + Creates a task that is already completed with the given exception. + @param exception The exception for the task. + */ ++ (instancetype)taskWithException:(NSException *)exception; + +/*! + Creates a task that is already cancelled. + */ ++ (instancetype)cancelledTask; + +/*! + Returns a task that will be completed (with result == nil) once + all of the input tasks have completed. + @param tasks An `NSArray` of the tasks to use as an input. + */ ++ (instancetype)taskForCompletionOfAllTasks:(NSArray *)tasks; + +/*! + Returns a task that will be completed once all of the input tasks have completed. + If all tasks complete successfully without being faulted or cancelled the result will be + an `NSArray` of all task results in the order they were provided. + @param tasks An `NSArray` of the tasks to use as an input. + */ ++ (instancetype)taskForCompletionOfAllTasksWithResults:(NSArray *)tasks; + +/*! + Returns a task that will be completed a certain amount of time in the future. + @param millis The approximate number of milliseconds to wait before the + task will be finished (with result == nil). + */ ++ (instancetype)taskWithDelay:(int)millis; + +/*! + Returns a task that will be completed a certain amount of time in the future. + @param millis The approximate number of milliseconds to wait before the + task will be finished (with result == nil). + @param token The cancellation token (optional). + */ ++ (instancetype)taskWithDelay:(int)millis + cancellationToken:(BFCancellationToken *)token; + +/*! + Returns a task that will be completed after the given block completes with + the specified executor. + @param executor A BFExecutor responsible for determining how the + continuation block will be run. + @param block The block to immediately schedule to run with the given executor. + @returns A task that will be completed after block has run. + If block returns a BFTask, then the task returned from + this method will not be completed until that task is completed. + */ ++ (instancetype)taskFromExecutor:(BFExecutor *)executor + withBlock:(id (^)())block; + +// Properties that will be set on the task once it is completed. + +/*! + The result of a successful task. + */ +@property (nonatomic, strong, readonly) BFGenericType result; + +/*! + The error of a failed task. + */ +@property (nonatomic, strong, readonly) NSError *error; + +/*! + The exception of a failed task. + */ +@property (nonatomic, strong, readonly) NSException *exception; + +/*! + Whether this task has been cancelled. + */ +@property (nonatomic, assign, readonly, getter=isCancelled) BOOL cancelled; + +/*! + Whether this task has completed due to an error or exception. + */ +@property (nonatomic, assign, readonly, getter=isFaulted) BOOL faulted; + +/*! + Whether this task has completed. + */ +@property (nonatomic, assign, readonly, getter=isCompleted) BOOL completed; + +/*! + Enqueues the given block to be run once this task is complete. + This method uses a default execution strategy. The block will be + run on the thread where the previous task completes, unless the + the stack depth is too deep, in which case it will be run on a + dispatch queue with default priority. + @param block The block to be run once this task is complete. + @returns A task that will be completed after block has run. + If block returns a BFTask, then the task returned from + this method will not be completed until that task is completed. + */ +- (instancetype)continueWithBlock:(BFContinuationBlock)block; + +/*! + Enqueues the given block to be run once this task is complete. + This method uses a default execution strategy. The block will be + run on the thread where the previous task completes, unless the + the stack depth is too deep, in which case it will be run on a + dispatch queue with default priority. + @param block The block to be run once this task is complete. + @param cancellationToken The cancellation token (optional). + @returns A task that will be completed after block has run. + If block returns a BFTask, then the task returned from + this method will not be completed until that task is completed. + */ +- (instancetype)continueWithBlock:(BFContinuationBlock)block + cancellationToken:(BFCancellationToken *)cancellationToken; + +/*! + Enqueues the given block to be run once this task is complete. + @param executor A BFExecutor responsible for determining how the + continuation block will be run. + @param block The block to be run once this task is complete. + @returns A task that will be completed after block has run. + If block returns a BFTask, then the task returned from + this method will not be completed until that task is completed. + */ +- (instancetype)continueWithExecutor:(BFExecutor *)executor + withBlock:(BFContinuationBlock)block; +/*! + Enqueues the given block to be run once this task is complete. + @param executor A BFExecutor responsible for determining how the + continuation block will be run. + @param block The block to be run once this task is complete. + @param cancellationToken The cancellation token (optional). + @returns A task that will be completed after block has run. + If block returns a BFTask, then the task returned from + his method will not be completed until that task is completed. + */ +- (instancetype)continueWithExecutor:(BFExecutor *)executor + block:(BFContinuationBlock)block + cancellationToken:(BFCancellationToken *)cancellationToken; + +/*! + Identical to continueWithBlock:, except that the block is only run + if this task did not produce a cancellation, error, or exception. + If it did, then the failure will be propagated to the returned + task. + @param block The block to be run once this task is complete. + @returns A task that will be completed after block has run. + If block returns a BFTask, then the task returned from + this method will not be completed until that task is completed. + */ +- (instancetype)continueWithSuccessBlock:(BFContinuationBlock)block; + +/*! + Identical to continueWithBlock:, except that the block is only run + if this task did not produce a cancellation, error, or exception. + If it did, then the failure will be propagated to the returned + task. + @param block The block to be run once this task is complete. + @param cancellationToken The cancellation token (optional). + @returns A task that will be completed after block has run. + If block returns a BFTask, then the task returned from + this method will not be completed until that task is completed. + */ +- (instancetype)continueWithSuccessBlock:(BFContinuationBlock)block + cancellationToken:(BFCancellationToken *)cancellationToken; + +/*! + Identical to continueWithExecutor:withBlock:, except that the block + is only run if this task did not produce a cancellation, error, or + exception. If it did, then the failure will be propagated to the + returned task. + @param executor A BFExecutor responsible for determining how the + continuation block will be run. + @param block The block to be run once this task is complete. + @returns A task that will be completed after block has run. + If block returns a BFTask, then the task returned from + this method will not be completed until that task is completed. + */ +- (instancetype)continueWithExecutor:(BFExecutor *)executor + withSuccessBlock:(BFContinuationBlock)block; + +/*! + Identical to continueWithExecutor:withBlock:, except that the block + is only run if this task did not produce a cancellation, error, or + exception. If it did, then the failure will be propagated to the + returned task. + @param executor A BFExecutor responsible for determining how the + continuation block will be run. + @param block The block to be run once this task is complete. + @param cancellationToken The cancellation token (optional). + @returns A task that will be completed after block has run. + If block returns a BFTask, then the task returned from + this method will not be completed until that task is completed. + */ +- (instancetype)continueWithExecutor:(BFExecutor *)executor + successBlock:(BFContinuationBlock)block + cancellationToken:(BFCancellationToken *)cancellationToken; + +/*! + Waits until this operation is completed. + This method is inefficient and consumes a thread resource while + it's running. It should be avoided. This method logs a warning + message if it is used on the main thread. + */ +- (void)waitUntilFinished; + +@end diff --git a/BreakingBad/Pods/Bolts/Bolts/Common/BFTask.m b/BreakingBad/Pods/Bolts/Bolts/Common/BFTask.m new file mode 100644 index 0000000..4985cfa --- /dev/null +++ b/BreakingBad/Pods/Bolts/Bolts/Common/BFTask.m @@ -0,0 +1,470 @@ +/* + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#import "BFTask.h" + +#import + +#import "Bolts.h" + +__attribute__ ((noinline)) void warnBlockingOperationOnMainThread() { + NSLog(@"Warning: A long-running operation is being executed on the main thread. \n" + " Break on warnBlockingOperationOnMainThread() to debug."); +} + +NSString *const BFTaskErrorDomain = @"bolts"; +NSString *const BFTaskMultipleExceptionsException = @"BFMultipleExceptionsException"; + +@interface BFTask () { + id _result; + NSError *_error; + NSException *_exception; +} + +@property (atomic, assign, readwrite, getter=isCancelled) BOOL cancelled; +@property (atomic, assign, readwrite, getter=isFaulted) BOOL faulted; +@property (atomic, assign, readwrite, getter=isCompleted) BOOL completed; + +@property (nonatomic, strong) NSObject *lock; +@property (nonatomic, strong) NSCondition *condition; +@property (nonatomic, strong) NSMutableArray *callbacks; + +@end + +@implementation BFTask + +#pragma mark - Initializer + +- (instancetype)init { + if (self = [super init]) { + _lock = [[NSObject alloc] init]; + _condition = [[NSCondition alloc] init]; + _callbacks = [NSMutableArray array]; + } + return self; +} + +#pragma mark - Task Class methods + ++ (instancetype)taskWithResult:(id)result { + BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; + tcs.result = result; + return tcs.task; +} + ++ (instancetype)taskWithError:(NSError *)error { + BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; + tcs.error = error; + return tcs.task; +} + ++ (instancetype)taskWithException:(NSException *)exception { + BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; + tcs.exception = exception; + return tcs.task; +} + ++ (instancetype)cancelledTask { + BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; + [tcs cancel]; + return tcs.task; +} + ++ (instancetype)taskForCompletionOfAllTasks:(NSArray *)tasks { + __block int32_t total = (int32_t)tasks.count; + if (total == 0) { + return [self taskWithResult:nil]; + } + + __block int32_t cancelled = 0; + NSObject *lock = [[NSObject alloc] init]; + NSMutableArray *errors = [NSMutableArray array]; + NSMutableArray *exceptions = [NSMutableArray array]; + + BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; + for (BFTask *task in tasks) { + [task continueWithBlock:^id(BFTask *task) { + if (task.exception) { + @synchronized (lock) { + [exceptions addObject:task.exception]; + } + } else if (task.error) { + @synchronized (lock) { + [errors addObject:task.error]; + } + } else if (task.cancelled) { + OSAtomicIncrement32(&cancelled); + } + + if (OSAtomicDecrement32(&total) == 0) { + if (exceptions.count > 0) { + if (exceptions.count == 1) { + tcs.exception = [exceptions firstObject]; + } else { + NSException *exception = + [NSException exceptionWithName:BFTaskMultipleExceptionsException + reason:@"There were multiple exceptions." + userInfo:@{ @"exceptions": exceptions }]; + tcs.exception = exception; + } + } else if (errors.count > 0) { + if (errors.count == 1) { + tcs.error = [errors firstObject]; + } else { + NSError *error = [NSError errorWithDomain:BFTaskErrorDomain + code:kBFMultipleErrorsError + userInfo:@{ @"errors": errors }]; + tcs.error = error; + } + } else if (cancelled > 0) { + [tcs cancel]; + } else { + tcs.result = nil; + } + } + return nil; + }]; + } + return tcs.task; +} + ++ (instancetype)taskForCompletionOfAllTasksWithResults:(NSArray *)tasks { + return [[self taskForCompletionOfAllTasks:tasks] continueWithSuccessBlock:^id(BFTask *task) { + return [tasks valueForKey:@"result"]; + }]; +} + ++ (instancetype)taskWithDelay:(int)millis { + BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; + dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, millis * NSEC_PER_MSEC); + dispatch_after(popTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){ + tcs.result = nil; + }); + return tcs.task; +} + ++ (instancetype)taskWithDelay:(int)millis + cancellationToken:(BFCancellationToken *)token { + if (token.cancellationRequested) { + return [BFTask cancelledTask]; + } + + BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; + dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, millis * NSEC_PER_MSEC); + dispatch_after(popTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){ + if (token.cancellationRequested) { + [tcs cancel]; + return; + } + tcs.result = nil; + }); + return tcs.task; +} + ++ (instancetype)taskFromExecutor:(BFExecutor *)executor + withBlock:(id (^)())block { + return [[self taskWithResult:nil] continueWithExecutor:executor withBlock:^id(BFTask *task) { + return block(); + }]; +} + +#pragma mark - Custom Setters/Getters + +- (id)result { + @synchronized(self.lock) { + return _result; + } +} + +- (void)setResult:(id)result { + if (![self trySetResult:result]) { + [NSException raise:NSInternalInconsistencyException + format:@"Cannot set the result on a completed task."]; + } +} + +- (BOOL)trySetResult:(id)result { + @synchronized(self.lock) { + if (self.completed) { + return NO; + } + self.completed = YES; + _result = result; + [self runContinuations]; + return YES; + } +} + +- (NSError *)error { + @synchronized(self.lock) { + return _error; + } +} + +- (void)setError:(NSError *)error { + if (![self trySetError:error]) { + [NSException raise:NSInternalInconsistencyException + format:@"Cannot set the error on a completed task."]; + } +} + +- (BOOL)trySetError:(NSError *)error { + @synchronized(self.lock) { + if (self.completed) { + return NO; + } + self.completed = YES; + self.faulted = YES; + _error = error; + [self runContinuations]; + return YES; + } +} + +- (NSException *)exception { + @synchronized(self.lock) { + return _exception; + } +} + +- (void)setException:(NSException *)exception { + if (![self trySetException:exception]) { + [NSException raise:NSInternalInconsistencyException + format:@"Cannot set the exception on a completed task."]; + } +} + +- (BOOL)trySetException:(NSException *)exception { + @synchronized(self.lock) { + if (self.completed) { + return NO; + } + self.completed = YES; + self.faulted = YES; + _exception = exception; + [self runContinuations]; + return YES; + } +} + +- (BOOL)isCancelled { + @synchronized(self.lock) { + return _cancelled; + } +} + +- (BOOL)isFaulted { + @synchronized(self.lock) { + return _faulted; + } +} + +- (void)cancel { + @synchronized(self.lock) { + if (![self trySetCancelled]) { + [NSException raise:NSInternalInconsistencyException + format:@"Cannot cancel a completed task."]; + } + } +} + +- (BOOL)trySetCancelled { + @synchronized(self.lock) { + if (self.completed) { + return NO; + } + self.completed = YES; + self.cancelled = YES; + [self runContinuations]; + return YES; + } +} + +- (BOOL)isCompleted { + @synchronized(self.lock) { + return _completed; + } +} + +- (void)setCompleted { + @synchronized(self.lock) { + _completed = YES; + } +} + +- (void)runContinuations { + @synchronized(self.lock) { + [self.condition lock]; + [self.condition broadcast]; + [self.condition unlock]; + for (void (^callback)() in self.callbacks) { + callback(); + } + [self.callbacks removeAllObjects]; + } +} + +#pragma mark - Chaining methods + +- (instancetype)continueWithExecutor:(BFExecutor *)executor + withBlock:(BFContinuationBlock)block { + return [self continueWithExecutor:executor block:block cancellationToken:nil]; +} + +- (instancetype)continueWithExecutor:(BFExecutor *)executor + block:(BFContinuationBlock)block + cancellationToken:(BFCancellationToken *)cancellationToken { + BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; + + // Capture all of the state that needs to used when the continuation is complete. + void (^wrappedBlock)() = ^() { + [executor execute:^{ + if (cancellationToken.cancellationRequested) { + [tcs cancel]; + return; + } + + id result = nil; + @try { + result = block(self); + } @catch (NSException *exception) { + tcs.exception = exception; + return; + } + + if ([result isKindOfClass:[BFTask class]]) { + + id (^setupWithTask) (BFTask *) = ^id(BFTask *task) { + if (cancellationToken.cancellationRequested || task.cancelled) { + [tcs cancel]; + } else if (task.exception) { + tcs.exception = task.exception; + } else if (task.error) { + tcs.error = task.error; + } else { + tcs.result = task.result; + } + return nil; + }; + + BFTask *resultTask = (BFTask *)result; + + if (resultTask.completed) { + setupWithTask(resultTask); + } else { + [resultTask continueWithBlock:setupWithTask]; + } + + } else { + tcs.result = result; + } + }]; + }; + + BOOL completed; + @synchronized(self.lock) { + completed = self.completed; + if (!completed) { + [self.callbacks addObject:[wrappedBlock copy]]; + } + } + if (completed) { + wrappedBlock(); + } + + return tcs.task; +} + +- (instancetype)continueWithBlock:(BFContinuationBlock)block { + return [self continueWithExecutor:[BFExecutor defaultExecutor] block:block cancellationToken:nil]; +} + +- (instancetype)continueWithBlock:(BFContinuationBlock)block + cancellationToken:(BFCancellationToken *)cancellationToken { + return [self continueWithExecutor:[BFExecutor defaultExecutor] block:block cancellationToken:cancellationToken]; +} + +- (instancetype)continueWithExecutor:(BFExecutor *)executor + withSuccessBlock:(BFContinuationBlock)block { + return [self continueWithExecutor:executor successBlock:block cancellationToken:nil]; +} + +- (instancetype)continueWithExecutor:(BFExecutor *)executor + successBlock:(BFContinuationBlock)block + cancellationToken:(BFCancellationToken *)cancellationToken { + if (cancellationToken.cancellationRequested) { + return [BFTask cancelledTask]; + } + + return [self continueWithExecutor:executor block:^id(BFTask *task) { + if (task.faulted || task.cancelled) { + return task; + } else { + return block(task); + } + } cancellationToken:cancellationToken]; +} + +- (instancetype)continueWithSuccessBlock:(BFContinuationBlock)block { + return [self continueWithExecutor:[BFExecutor defaultExecutor] successBlock:block cancellationToken:nil]; +} + +- (instancetype)continueWithSuccessBlock:(BFContinuationBlock)block + cancellationToken:(BFCancellationToken *)cancellationToken { + return [self continueWithExecutor:[BFExecutor defaultExecutor] successBlock:block cancellationToken:cancellationToken]; +} + +#pragma mark - Syncing Task (Avoid it) + +- (void)warnOperationOnMainThread { + warnBlockingOperationOnMainThread(); +} + +- (void)waitUntilFinished { + if ([NSThread isMainThread]) { + [self warnOperationOnMainThread]; + } + + @synchronized(self.lock) { + if (self.completed) { + return; + } + [self.condition lock]; + } + [self.condition wait]; + [self.condition unlock]; +} + +#pragma mark - NSObject + +- (NSString *)description { + // Acquire the data from the locked properties + BOOL completed; + BOOL cancelled; + BOOL faulted; + + @synchronized(self.lock) { + completed = self.completed; + cancelled = self.cancelled; + faulted = self.faulted; + } + + // Description string includes status information and, if available, the + // result since in some ways this is what a promise actually "is". + return [NSString stringWithFormat:@"<%@: %p; completed = %@; cancelled = %@; faulted = %@;%@>", + NSStringFromClass([self class]), + self, + completed ? @"YES" : @"NO", + cancelled ? @"YES" : @"NO", + faulted ? @"YES" : @"NO", + completed ? [NSString stringWithFormat:@" result:%@", _result] : @""]; +} + +@end diff --git a/BreakingBad/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h b/BreakingBad/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h new file mode 100644 index 0000000..23366c1 --- /dev/null +++ b/BreakingBad/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#import + +#import + +@class BFTask BF_GENERIC(BFGenericType); + +/*! + A BFTaskCompletionSource represents the producer side of tasks. + It is a task that also has methods for changing the state of the + task by settings its completion values. + */ +@interface BFTaskCompletionSource BF_GENERIC(__covariant BFGenericType) : NSObject + +/*! + Creates a new unfinished task. + */ ++ (instancetype)taskCompletionSource; + +/*! + The task associated with this TaskCompletionSource. + */ +@property (nonatomic, strong, readonly) BFTask BF_GENERIC(BFGenericType) *task; + +/*! + Completes the task by setting the result. + Attempting to set this for a completed task will raise an exception. + @param result The result of the task. + */ +- (void)setResult:(BFGenericType)result; + +/*! + Completes the task by setting the error. + Attempting to set this for a completed task will raise an exception. + @param error The error for the task. + */ +- (void)setError:(NSError *)error; + +/*! + Completes the task by setting an exception. + Attempting to set this for a completed task will raise an exception. + @param exception The exception for the task. + */ +- (void)setException:(NSException *)exception; + +/*! + Completes the task by marking it as cancelled. + Attempting to set this for a completed task will raise an exception. + */ +- (void)cancel; + +/*! + Sets the result of the task if it wasn't already completed. + @returns whether the new value was set. + */ +- (BOOL)trySetResult:(BFGenericType)result; + +/*! + Sets the error of the task if it wasn't already completed. + @param error The error for the task. + @returns whether the new value was set. + */ +- (BOOL)trySetError:(NSError *)error; + +/*! + Sets the exception of the task if it wasn't already completed. + @param exception The exception for the task. + @returns whether the new value was set. + */ +- (BOOL)trySetException:(NSException *)exception; + +/*! + Sets the cancellation state of the task if it wasn't already completed. + @returns whether the new value was set. + */ +- (BOOL)trySetCancelled; + +@end diff --git a/BreakingBad/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m b/BreakingBad/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m new file mode 100644 index 0000000..bd66835 --- /dev/null +++ b/BreakingBad/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#import "BFTaskCompletionSource.h" + +#import "BFTask.h" + +@interface BFTaskCompletionSource () + +@property (nonatomic, strong, readwrite) BFTask *task; + +@end + +@interface BFTask (BFTaskCompletionSource) + +- (void)setResult:(id)result; +- (void)setError:(NSError *)error; +- (void)setException:(NSException *)exception; +- (void)cancel; +- (BOOL)trySetResult:(id)result; +- (BOOL)trySetError:(NSError *)error; +- (BOOL)trySetException:(NSException *)exception; +- (BOOL)trySetCancelled; + +@end + +@implementation BFTaskCompletionSource + +#pragma mark - Initializer + ++ (instancetype)taskCompletionSource { + return [[self alloc] init]; +} + +- (instancetype)init { + if (self = [super init]) { + _task = [[BFTask alloc] init]; + } + return self; +} + +#pragma mark - Custom Setters/Getters + +- (void)setResult:(id)result { + [self.task setResult:result]; +} + +- (void)setError:(NSError *)error { + [self.task setError:error]; +} + +- (void)setException:(NSException *)exception { + [self.task setException:exception]; +} + +- (void)cancel { + [self.task cancel]; +} + +- (BOOL)trySetResult:(id)result { + return [self.task trySetResult:result]; +} + +- (BOOL)trySetError:(NSError *)error { + return [self.task trySetError:error]; +} + +- (BOOL)trySetException:(NSException *)exception { + return [self.task trySetException:exception]; +} + +- (BOOL)trySetCancelled { + return [self.task trySetCancelled]; +} + +@end diff --git a/BreakingBad/Pods/Bolts/Bolts/Common/Bolts.h b/BreakingBad/Pods/Bolts/Bolts/Common/Bolts.h new file mode 100644 index 0000000..35d6c7c --- /dev/null +++ b/BreakingBad/Pods/Bolts/Bolts/Common/Bolts.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#import +#import +#import +#import +#import +#import +#import +#import + +#if __has_include() && TARGET_OS_IPHONE && !TARGET_OS_WATCH && !TARGET_OS_TV +#import +#import +#import +#import +#import +#import +#import +#import +#import +#endif + +/*! @abstract 80175001: There were multiple errors. */ +extern NSInteger const kBFMultipleErrorsError; + +@interface Bolts : NSObject + +/*! + Returns the version of the Bolts Framework as an NSString. + @returns The NSString representation of the current version. + */ ++ (NSString *)version; + +@end diff --git a/BreakingBad/Pods/Bolts/Bolts/Common/Bolts.m b/BreakingBad/Pods/Bolts/Bolts/Common/Bolts.m new file mode 100644 index 0000000..9a3e75c --- /dev/null +++ b/BreakingBad/Pods/Bolts/Bolts/Common/Bolts.m @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#import "Bolts.h" + +NSInteger const kBFMultipleErrorsError = 80175001; + +@implementation Bolts + ++ (NSString *)version { + return BOLTS_VERSION; +} + +@end diff --git a/BreakingBad/Pods/Bolts/Bolts/Common/BoltsVersion.h b/BreakingBad/Pods/Bolts/Bolts/Common/BoltsVersion.h new file mode 100644 index 0000000..afb6fcb --- /dev/null +++ b/BreakingBad/Pods/Bolts/Bolts/Common/BoltsVersion.h @@ -0,0 +1 @@ +#define BOLTS_VERSION @"1.3.0" diff --git a/BreakingBad/Pods/Bolts/LICENSE b/BreakingBad/Pods/Bolts/LICENSE new file mode 100644 index 0000000..e1a5831 --- /dev/null +++ b/BreakingBad/Pods/Bolts/LICENSE @@ -0,0 +1,30 @@ +BSD License + +For Bolts software + +Copyright (c) 2013-present, Facebook, Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name Facebook nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/BreakingBad/Pods/Bolts/README.md b/BreakingBad/Pods/Bolts/README.md new file mode 100644 index 0000000..003a2ea --- /dev/null +++ b/BreakingBad/Pods/Bolts/README.md @@ -0,0 +1,682 @@ +Bolts +============ +[![Build Status](http://img.shields.io/travis/BoltsFramework/Bolts-iOS/master.svg?style=flat)](https://travis-ci.org/BoltsFramework/Bolts-iOS) +[![Coverage Status](https://codecov.io/github/BoltsFramework/Bolts-iOS/coverage.svg?branch=master)](https://codecov.io/github/BoltsFramework/Bolts-iOS?branch=master) +[![Pod Version](http://img.shields.io/cocoapods/v/Bolts.svg?style=flat)](http://cocoadocs.org/docsets/Bolts/) +[![Pod Platform](http://img.shields.io/cocoapods/p/Bolts.svg?style=flat)](http://cocoadocs.org/docsets/Bolts/) +[![Pod License](http://img.shields.io/cocoapods/l/Bolts.svg?style=flat)](https://github.com/BoltsFramework/Bolts-iOS/blob/master/LICENSE) +[![Dependency Status](https://www.versioneye.com/objective-c/bolts/1.1.1/badge.svg?style=flat)](https://www.versioneye.com/objective-c/bolts) +[![Reference Status](https://www.versioneye.com/objective-c/bolts/reference_badge.svg?style=flat)](https://www.versioneye.com/objective-c/bolts/references) + +Bolts is a collection of low-level libraries designed to make developing mobile +apps easier. Bolts was designed by Parse and Facebook for our own internal use, +and we have decided to open source these libraries to make them available to +others. Using these libraries does not require using any Parse services. Nor +do they require having a Parse or Facebook developer account. + +Bolts includes: + +* "Tasks", which make organization of complex asynchronous code more manageable. A task is kind of like a JavaScript Promise, but available for iOS and Android. +* An implementation of the [App Links protocol](http://www.applinks.org), helping you link to content in other apps and handle incoming deep-links. + +For more information, see the [Bolts iOS API Reference](http://boltsframework.github.io/docs/ios/). + +# Tasks + +To build a truly responsive iOS application, you must keep long-running operations off of the UI thread, and be careful to avoid blocking anything the UI thread might be waiting on. This means you will need to execute various operations in the background. To make this easier, we've added a class called `BFTask`. A task represents the result of an asynchronous operation. Typically, a `BFTask` is returned from an asynchronous function and gives the ability to continue processing the result of the task. When a task is returned from a function, it's already begun doing its job. A task is not tied to a particular threading model: it represents the work being done, not where it is executing. Tasks have many advantages over other methods of asynchronous programming, such as callbacks. `BFTask` is not a replacement for `NSOperation` or GCD. In fact, they play well together. But tasks do fill in some gaps that those technologies don't address. +* `BFTask` takes care of managing dependencies for you. Unlike using `NSOperation` for dependency management, you don't have to declare all dependencies before starting a `BFTask`. For example, imagine you need to save a set of objects and each one may or may not require saving child objects. With an `NSOperation`, you would normally have to create operations for each of the child saves ahead of time. But you don't always know before you start the work whether that's going to be necessary. That can make managing dependencies with `NSOperation` very painful. Even in the best case, you have to create your dependencies before the operations that depend on them, which results in code that appears in a different order than it executes. With `BFTask`, you can decide during your operation's work whether there will be subtasks and return the other task in just those cases. +* `BFTasks` release their dependencies. `NSOperation` strongly retains its dependencies, so if you have a queue of ordered operations and sequence them using dependencies, you have a leak, because every operation gets retained forever. `BFTasks` release their callbacks as soon as they are run, so everything cleans up after itself. This can reduce memory use, and simplify memory management. +* `BFTasks` keep track of the state of finished tasks: It tracks whether there was a returned value, the task was cancelled, or if an error occurred. It also has convenience methods for propagating errors. With `NSOperation`, you have to build all of this stuff yourself. +* `BFTasks` don't depend on any particular threading model. So it's easy to have some tasks perform their work with an operation queue, while others perform work using blocks with GCD. These tasks can depend on each other seamlessly. +* Performing several tasks in a row will not create nested "pyramid" code as you would get when using only callbacks. +* `BFTasks` are fully composable, allowing you to perform branching, parallelism, and complex error handling, without the spaghetti code of having many named callbacks. +* You can arrange task-based code in the order that it executes, rather than having to split your logic across scattered callback functions. + +For the examples in this doc, assume there are async versions of some common Parse methods, called `saveAsync:` and `findAsync:` which return a `Task`. In a later section, we'll show how to define these functions yourself. + +## The `continueWithBlock` Method + +Every `BFTask` has a method named `continueWithBlock:` which takes a continuation block. A continuation is a block that will be executed when the task is complete. You can then inspect the task to check if it was successful and to get its result. + +```objective-c +// Objective-C +[[self saveAsync:obj] continueWithBlock:^id(BFTask *task) { + if (task.isCancelled) { + // the save was cancelled. + } else if (task.error) { + // the save failed. + } else { + // the object was saved successfully. + PFObject *object = task.result; + } + return nil; +}]; +``` + +```swift +// Swift +self.saveAsync(obj).continueWithBlock { + (task: BFTask!) -> BFTask in + if task.isCancelled() { + // the save was cancelled. + } else if task.error() { + // the save failed. + } else { + // the object was saved successfully. + var object = task.result() as PFObject + } +} +``` + +BFTasks use Objective-C blocks, so the syntax should be pretty straightforward. Let's look closer at the types involved with an example. + +```objective-c +// Objective-C +/** + * Gets an NSString asynchronously. + */ +- (BFTask *)getStringAsync { + // Let's suppose getNumberAsync returns a BFTask whose result is an NSNumber. + return [[self getNumberAsync] continueWithBlock:^id(BFTask *task) { + // This continuation block takes the NSNumber BFTask as input, + // and provides an NSString as output. + + NSNumber *number = task.result; + return [NSString stringWithFormat:@"%@", number]; + )]; +} +``` + +```swift +// Swift +/** + * Gets an NSString asynchronously. + */ +func getStringAsync() -> BFTask { + //Let's suppose getNumberAsync returns a BFTask whose result is an NSNumber. + return self.getNumberAsync().continueWithBlock { + (task: BFTask!) -> NSString in + // This continuation block takes the NSNumber BFTask as input, + // and provides an NSString as output. + + let number = task.result() as NSNumber + return NSString(format:"%@", number) + } +} +``` + +In many cases, you only want to do more work if the previous task was successful, and propagate any errors or cancellations to be dealt with later. To do this, use the `continueWithSuccessBlock:` method instead of `continueWithBlock:`. + +```objective-c +// Objective-C +[[self saveAsync:obj] continueWithSuccessBlock:^id(BFTask *task) { + // the object was saved successfully. + return nil; +}]; +``` + +```swift +// Swift +self.saveAsync(obj).continueWithSuccessBlock { + (task: BFTask!) -> AnyObject! in + // the object was saved successfully. + return nil +} +``` + +## Chaining Tasks Together + +BFTasks are a little bit magical, in that they let you chain them without nesting. If you return a BFTask from `continueWithBlock:`, then the task returned by `continueWithBlock:` will not be considered finished until the new task returned from the new continuation block. This lets you perform multiple actions without incurring the pyramid code you would get with callbacks. Likewise, you can return a `BFTask` from `continueWithSuccessBlock:`. So, return a `BFTask` to do more asynchronous work. + +```objective-c +// Objective-C +PFQuery *query = [PFQuery queryWithClassName:@"Student"]; +[query orderByDescending:@"gpa"]; +[[[[[self findAsync:query] continueWithSuccessBlock:^id(BFTask *task) { + NSArray *students = task.result; + PFObject *valedictorian = [students objectAtIndex:0]; + [valedictorian setObject:@YES forKey:@"valedictorian"]; + return [self saveAsync:valedictorian]; +}] continueWithSuccessBlock:^id(BFTask *task) { + PFObject *valedictorian = task.result; + return [self findAsync:query]; +}] continueWithSuccessBlock:^id(BFTask *task) { + NSArray *students = task.result; + PFObject *salutatorian = [students objectAtIndex:1]; + [salutatorian setObject:@YES forKey:@"salutatorian"]; + return [self saveAsync:salutatorian]; +}] continueWithSuccessBlock:^id(BFTask *task) { + // Everything is done! + return nil; +}]; +``` + +```swift +// Swift +var query = PFQuery(className:"Student") +query.orderByDescending("gpa") +findAsync(query).continueWithSuccessBlock { + (task: BFTask!) -> BFTask in + let students = task.result() as NSArray + var valedictorian = students.objectAtIndex(0) as PFObject + valedictorian["valedictorian"] = true + return self.saveAsync(valedictorian) +}.continueWithSuccessBlock { + (task: BFTask!) -> BFTask in + var valedictorian = task.result() as PFObject + return self.findAsync(query) +}.continueWithSuccessBlock { + (task: BFTask!) -> BFTask in + let students = task.result() as NSArray + var salutatorian = students.objectAtIndex(1) as PFObject + salutatorian["salutatorian"] = true + return self.saveAsync(salutatorian) +}.continueWithSuccessBlock { + (task: BFTask!) -> AnyObject! in + // Everything is done! + return nil +} +``` + +## Error Handling + +By carefully choosing whether to call `continueWithBlock:` or `continueWithSuccessBlock:`, you can control how errors are propagated in your application. Using `continueWithBlock:` lets you handle errors by transforming them or dealing with them. You can think of failed tasks kind of like throwing an exception. In fact, if you throw an exception inside a continuation, the resulting task will be faulted with that exception. + +```objective-c +// Objective-C +PFQuery *query = [PFQuery queryWithClassName:@"Student"]; +[query orderByDescending:@"gpa"]; +[[[[[self findAsync:query] continueWithSuccessBlock:^id(BFTask *task) { + NSArray *students = task.result; + PFObject *valedictorian = [students objectAtIndex:0]; + [valedictorian setObject:@YES forKey:@"valedictorian"]; + // Force this callback to fail. + return [BFTask taskWithError:[NSError errorWithDomain:@"example.com" + code:-1 + userInfo:nil]]; +}] continueWithSuccessBlock:^id(BFTask *task) { + // Now this continuation will be skipped. + PFQuery *valedictorian = task.result; + return [self findAsync:query]; +}] continueWithBlock:^id(BFTask *task) { + if (task.error) { + // This error handler WILL be called. + // The error will be the NSError returned above. + // Let's handle the error by returning a new value. + // The task will be completed with nil as its value. + return nil; + } + // This will also be skipped. + NSArray *students = task.result; + PFObject *salutatorian = [students objectAtIndex:1]; + [salutatorian setObject:@YES forKey:@"salutatorian"]; + return [self saveAsync:salutatorian]; +}] continueWithSuccessBlock:^id(BFTask *task) { + // Everything is done! This gets called. + // The task's result is nil. + return nil; +}]; +``` + +```swift +// Swift +var query = PFQuery(className:"Student") +query.orderByDescending("gpa") +findAsync(query).continueWithSuccessBlock { + (task: BFTask!) -> BFTask in + let students = task.result() as NSArray + var valedictorian = students.objectAtIndex(0) as PFObject + valedictorian["valedictorian"] = true + //Force this callback to fail. + return BFTask(error:NSError(domain:"example.com", + code:-1, userInfo: nil)) +}.continueWithSuccessBlock { + (task: BFTask!) -> AnyObject! in + //Now this continuation will be skipped. + var valedictorian = task.result() as PFObject + return self.findAsync(query) +}.continueWithBlock { + (task: BFTask!) -> AnyObject! in + if task.error() { + // This error handler WILL be called. + // The error will be the NSError returned above. + // Let's handle the error by returning a new value. + // The task will be completed with nil as its value. + return nil + } + // This will also be skipped. + let students = task.result() as NSArray + var salutatorian = students.objectAtIndex(1) as PFObject + salutatorian["salutatorian"] = true + return self.saveAsync(salutatorian) +}.continueWithSuccessBlock { + (task: BFTask!) -> AnyObject! in + // Everything is done! This gets called. + // The tasks result is nil. + return nil +} +``` + +It's often convenient to have a long chain of success callbacks with only one error handler at the end. + +## Creating Tasks + +When you're getting started, you can just use the tasks returned from methods like `findAsync:` or `saveAsync:`. However, for more advanced scenarios, you may want to make your own tasks. To do that, you create a `BFTaskCompletionSource`. This object will let you create a new `BFTask`, and control whether it gets marked as finished or cancelled. After you create a `BFTask`, you'll need to call `setResult:`, `setError:`, or `cancel` to trigger its continuations. + +```objective-c +// Objective-C +- (BFTask *)successAsync { + BFTaskCompletionSource *successful = [BFTaskCompletionSource taskCompletionSource]; + [successful setResult:@"The good result."]; + return successful.task; +} + +- (BFTask *)failAsync { + BFTaskCompletionSource *failed = [BFTaskCompletionSource taskCompletionSource]; + [failed setError:[NSError errorWithDomain:@"example.com" code:-1 userInfo:nil]]; + return failed.task; +} +``` + +```swift +// Swift +func successAsync() -> BFTask { + var successful = BFTaskCompletionSource() + successful.setResult("The good result.") + return successful.task +} + +func failAsync() -> BFTask { + var failed = BFTaskCompletionSource() + failed.setError(NSError(domain:"example.com", code:-1, userInfo:nil)) + return failed.task +} +``` + +If you know the result of a task at the time it is created, there are some convenience methods you can use. + +```objective-c +// Objective-C +BFTask *successful = [BFTask taskWithResult:@"The good result."]; + +BFTask *failed = [BFTask taskWithError:anError]; +``` + +```swift +// Swift +let successful = BFTask(result:"The good result") + +let failed = BFTask(error:anError) +``` + +## Creating Async Methods + +With these tools, it's easy to make your own asynchronous functions that return tasks. For example, you can make a task-based version of `fetchAsync:` easily. + +```objective-c +// Objective-C +- (BFTask *) fetchAsync:(PFObject *)object { + BFTaskCompletionSource *task = [BFTaskCompletionSource taskCompletionSource]; + [object fetchInBackgroundWithBlock:^(PFObject *object, NSError *error) { + if (!error) { + [task setResult:object]; + } else { + [task setError:error]; + } + }]; + return task.task; +} +``` + +```swift +// Swift +func fetchAsync(object: PFObject) -> BFTask { + var task = BFTaskCompletionSource() + object.fetchInBackgroundWithBlock { + (object: PFObject?, error: NSError?) -> Void in + if error == nil { + task.setResult(object) + } else { + task.setError(error) + } + } + return task.task +} + +``` + +It's similarly easy to create `saveAsync:`, `findAsync:` or `deleteAsync:`. + +## Tasks in Series + +`BFTasks` are convenient when you want to do a series of tasks in a row, each one waiting for the previous to finish. For example, imagine you want to delete all of the comments on your blog. + +```objective-c +// Objective-C +PFQuery *query = [PFQuery queryWithClassName:@"Comments"]; +[query whereKey:@"post" equalTo:@123]; + +[[[self findAsync:query] continueWithBlock:^id(BFTask *task) { + NSArray *results = task.result; + + // Create a trivial completed task as a base case. + BFTask *task = [BFTask taskWithResult:nil]; + for (PFObject *result in results) { + // For each item, extend the task with a function to delete the item. + task = [task continueWithBlock:^id(BFTask *task) { + // Return a task that will be marked as completed when the delete is finished. + return [self deleteAsync:result]; + }]; + } + return task; +}] continueWithBlock:^id(BFTask *task) { + // Every comment was deleted. + return nil; +}]; +``` + +```swift +// Swift +var query = PFQuery(className:"Comments") +query.whereKey("post", equalTo:123) +findAsync(query).continueWithBlock { + (task: BFTask!) -> BFTask in + let results = task.result() as NSArray + + // Create a trivial completed task as a base case. + let task = BFTask(result:nil) + for result : PFObject in results { + // For each item, extend the task with a function to delete the item. + task = task.continueWithBlock { + (task: BFTask!) -> BFTask in + return self.deleteAsync(result) + } + } + return task +}.continueWithBlock { + (task: BFTask!) -> AnyObject! in + // Every comment was deleted. + return nil +} +``` + +## Tasks in Parallel + +You can also perform several tasks in parallel, using the `taskForCompletionOfAllTasks:` method. You can start multiple operations at once, and use `taskForCompletionOfAllTasks:` to create a new task that will be marked as completed when all of its input tasks are completed. The new task will be successful only if all of the passed-in tasks succeed. Performing operations in parallel will be faster than doing them serially, but may consume more system resources and bandwidth. + +```objective-c +// Objective-C +PFQuery *query = [PFQuery queryWithClassName:@"Comments"]; +[query whereKey:@"post" equalTo:@123]; + +[[[self findAsync:query] continueWithBlock:^id(BFTask *results) { + // Collect one task for each delete into an array. + NSMutableArray *tasks = [NSMutableArray array]; + for (PFObject *result in results) { + // Start this delete immediately and add its task to the list. + [tasks addObject:[self deleteAsync:result]]; + } + // Return a new task that will be marked as completed when all of the deletes are + // finished. + return [BFTask taskForCompletionOfAllTasks:tasks]; +}] continueWithBlock:^id(BFTask *task) { + // Every comment was deleted. + return nil; +}]; +``` + +```swift +// Swift +var query = PFQuery(className:"Comments") +query.whereKey("post", equalTo:123) + +findAsync(query).continueWithBlock { + (task: BFTask!) -> BFTask in + // Collect one task for each delete into an array. + var tasks = NSMutableArray.array() + var results = task.result() as NSArray + for result : PFObject! in results { + // Start this delete immediately and add its task to the list. + tasks.addObject(self.deleteAsync(result)) + } + // Return a new task that will be marked as completed when all of the deletes + // are finished. + return BFTask(forCompletionOfAllTasks:tasks) +}.continueWithBlock { + (task: BFTask!) -> AnyObject! in + // Every comment was deleted. + return nil +} +``` + +## Task Executors + +Both `continueWithBlock:` and `continueWithSuccessBlock:` methods have another form that takes an instance of `BFExecutor`. These are `continueWithExecutor:withBlock:` and `continueWithExecutor:withSuccessBlock:`. These methods allow you to control how the continuation is executed. The default executor will dispatch to GCD, but you can provide your own executor to schedule work onto a different thread. For example, if you want to continue with work on the UI thread: + +```objective-c +// Create a BFExecutor that uses the main thread. +BFExecutor *myExecutor = [BFExecutor executorWithBlock:^void(void(^block)()) { + dispatch_async(dispatch_get_main_queue(), block); +}]; + +// And use the Main Thread Executor like this. The executor applies only to the new +// continuation being passed into continueWithBlock. +[[self fetchAsync:object] continueWithExecutor:myExecutor withBlock:^id(BFTask *task) { + myTextView.text = [object objectForKey:@"name"]; +}]; +``` + +For common cases, such as dispatching on the main thread, we have provided default implementations of `BFExecutor`. These include `defaultExecutor`, `immediateExecutor`, `mainThreadExecutor`, `executorWithDispatchQueue:`, and `executorWithOperationQueue:`. For example: + +```objective-c +// Continue on the Main Thread, using a built-in executor. +[[self fetchAsync:object] continueWithExecutor:[BFExecutor mainThreadExecutor] withBlock:^id(BFTask *task) { + myTextView.text = [object objectForKey:@"name"]; +}]; +``` + +## Task Cancellation + +It's generally bad design to keep track of the `BFTaskCompletionSource` for cancellation. A better model is to create a "cancellation token" at the top level, and pass that to each async function that you want to be part of the same "cancelable operation". Then, in your continuation blocks, you can check whether the cancellation token has been cancelled and bail out early by returning a `[BFTask cancelledTask]`. For example: + +```objective-c +- (void)doSomethingComplicatedAsync:(MYCancellationToken *)cancellationToken { + [[self doSomethingAsync:cancellationToken] continueWithBlock:^{ + if (cancellationToken.isCancelled) { + return [BFTask cancelledTask]; + } + // Do something that takes a while. + return result; + }]; +} + +// Somewhere else. +MYCancellationToken *cancellationToken = [[MYCancellationToken alloc] init]; +[obj doSomethingComplicatedAsync:cancellationToken]; + +// When you get bored... +[cancellationToken cancel]; +``` + +**Note:** The cancellation token implementation should be thread-safe. +We are likely to add some concept like this to Bolts at some point in the future. + +# App Links + +[App Links](http://www.applinks.org) provide a cross-platform mechanism that allows a developer to define and publish a deep-linking scheme for their content, allowing other apps to link directly to an experience optimized for the device they are running on. Whether you are building an app that receives incoming links or one that may link out to other apps' content, Bolts provides tools to simplify implementation of the [App Links protocol](http://www.applinks.org/documentation). + +## Handling an App Link + +The most common case will be making your app receive App Links. In-linking will allow your users to quickly access the richest, most native-feeling presentation of linked content on their devices. Bolts makes it easy to handle an inbound App Link (as well as general inbound deep-links) by providing utilities for processing an incoming URL. + +For example, you can use the `BFURL` utility class to parse an incoming URL in your `AppDelegate`: + +```objective-c +- (BOOL)application:(UIApplication *)application + openURL:(NSURL *)url + sourceApplication:(NSString *)sourceApplication + annotation:(id)annotation { + BFURL *parsedUrl = [BFURL URLWithInboundURL:url sourceApplication:sourceApplication]; + + // Use the target URL from the App Link to locate content. + if ([parsedUrl.targetURL.pathComponents[1] isEqualToString:@"profiles"]) { + // Open a profile viewer. + } + + // You can also check the query string easily. + NSString *query = parsedUrl.targetQueryParameters[@"query"]; + + // Apps that have existing deep-linking support and map their App Links to existing + // deep-linking functionality may instead want to perform these operations on the input URL. + // Use the target URL from the App Link to locate content. + if ([parsedUrl.inputURL.pathComponents[1] isEqualToString:@"profiles"]) { + // Open a profile viewer. + } + + // You can also check the query string easily. + NSString *query = parsedUrl.inputQueryParameters[@"query"]; + + // Apps can easily check the Extras and App Link data from the App Link as well. + NSString *fbAccessToken = parsedUrl.appLinkExtras[@"fb_access_token"]; + NSDictionary *refererData = parsedUrl.appLinkExtras[@"referer"]; +} +``` + +## Navigating to a URL + +Following an App Link allows your app to provide the best user experience (as defined by the receiving app) when a user navigates to a link. Bolts makes this process simple, automating the steps required to follow a link: + +1. Resolve the App Link by getting the App Link metadata from the HTML at the URL specified. +2. Step through App Link targets relevant to the device being used, checking whether the app that can handle the target is present on the device. +3. If an app is present, build a URL with the appropriate al_applink_data specified and navigate to that URL. +4. Otherwise, open the browser with the original URL specified. + +In the simplest case, it takes just one line of code to navigate to a URL that may have an App Link: + +```objective-c +[BFAppLinkNavigation navigateToURLInBackground:url]; +``` + +### Adding App and Navigation Data + +Under most circumstances, the data that will need to be passed along to an app during a navigation will be contained in the URL itself, so that whether or not the app is actually installed on the device, users are taken to the correct content. Occasionally, however, apps will want to pass along data that is relevant for app-to-app navigation, or will want to augment the App Link protocol with information that might be used by the app to adjust how the app should behave (e.g. showing a link back to the referring app). + +If you want to take advantage of these features, you can break apart the navigation process. First, you must have an App Link to which you wish to navigate: + +```objective-c +[[BFAppLinkNavigation resolveAppLinkInBackground:url] continueWithSuccessBlock:^id(BFTask *task) { + BFAppLink *link = task.result; +}]; +``` + +Then, you can build an App Link request with any additional data you would like and navigate: + +```objective-c +BFAppLinkNavigation *navigation = [BFAppLinkNavigation navigationWithAppLink:link + extras:@{ @"access_token": @"t0kEn" } + appLinkData:@{ @"ref": @"12345" }]; +NSError *error = nil; +[navigation navigate:&error]; +``` + +### Resolving App Link Metadata + +Bolts allows for custom App Link resolution, which may be used as a performance optimization (e.g. caching the metadata) or as a mechanism to allow developers to use a centralized index for obtaining App Link metadata. A custom App Link resolver just needs to be able to take a URL and return a `BFAppLink` containing the ordered list of `BFAppLinkTarget`s that are applicable for this device. Bolts provides one of these out of the box that performs this resolution on the device using a hidden UIWebView. + +You can use any resolver that implements the `BFAppLinkResolving` protocol by using one of the overloads on `BFAppLinkNavigation`: + +```objective-c +[BFAppLinkNavigation navigateToURLInBackground:url + resolver:resolver]; +``` + +Alternatively, a you can swap out the default resolver to be used by the built-in APIs: + +```objective-c +[BFAppLinkNavigation setDefaultResolver:resolver]; +[BFAppLinkNavigation navigateToURLInBackground:url]; +``` + +## App Link Return-to-Referer View + +When an application is opened via an App Link, a banner allowing the user to "Touch to return to " should be displayed. The `BFAppLinkReturnToRefererView` provides this functionality. It will take an incoming App Link and parse the referer information to display the appropriate calling app name. + +```objective-c +- (void)viewDidLoad { + [super viewDidLoad]; + + // Perform other view initialization. + + self.returnToRefererController = [[BFAppLinkReturnToRefererController alloc] init]; + + // self.returnToRefererView is a BFAppLinkReturnToRefererView. + // You may initialize the view either by loading it from a NIB or programmatically. + self.returnToRefererController.view = self.returnToRefererView; + + // If you have a UINavigationController in the view, then the bar must be shown above it. + [self.returnToRefererController] +} +``` + +The following code assumes that the view controller has an `openedAppLinkURL` `NSURL` property that has already been populated with the URL used to open the app. You can then do something like this to show the view: + +```objective-c +- (void)viewWillAppear { + [super viewWillAppear]; + + // Show only if you have a back AppLink. + [self.returnToRefererController showViewForRefererURL:self.openedAppLinkURL]; +} +``` + +In a navigaton-controller view hierarchy, the banner should be displayed above the navigation bar, and `BFAppLinkReturnToRefererController` provides an `initForDisplayAboveNavController` method to assist with this. + +## Analytics + +Bolts introduces Measurement Event. App Links posts three different Measurement Event notifications to the application, which can be caught and integrated with existing analytics components in your application. + +* `al_nav_out` — Raised when your app switches out to an App Links URL. +* `al_nav_in` — Raised when your app opens an incoming App Links URL. +* `al_ref_back_out` — Raised when your app returns back the referrer app using the built-in top navigation back bar view. + +### Listen for App Links Measurement Events + +There are other analytics tools that are integrated with Bolts' App Links events, but you can also listen for these events yourself: + +```objective-c +[[NSNotificationCenter defaultCenter] addObserverForName:BFMeasurementEventNotificationName object:nil queue:nil usingBlock:^(NSNotification *note) { + NSDictionary *event = note.userInfo; + NSDictionary *eventData = event[BFMeasurementEventArgsKey]; + // Integrate to your logging/analytics component. +}]; +``` + +### App Links Event Fields + +App Links Measurement Events sends additional information from App Links Intents in flattened string key value pairs. Here are some of the useful fields for the three events. + +* `al_nav_in` + * `inputURL`: the URL that opens the app. + * `inputURLScheme`: the scheme of `inputURL`. + * `refererURL`: the URL that the referrer app added into `al_applink_data`: `referer_app_link`. + * `refererAppName`: the app name that the referrer app added to `al_applink_data`: `referer_app_link`. + * `sourceApplication`: the bundle of referrer application. + * `targetURL`: the `target_url` field in `al_applink_data`. + * `version`: App Links API version. + +* `al_nav_out` / `al_ref_back_out` + * `outputURL`: the URL used to open the other app (or browser). If there is an eligible app to open, this will be the custom scheme url/intent in `al_applink_data`. + * `outputURLScheme`: the scheme of `outputURL`. + * `sourceURL`: the URL of the page hosting App Links meta tags. + * `sourceURLHost`: the hostname of `sourceURL`. + * `success`: `“1”` to indicate success in opening the App Link in another app or browser; `“0”` to indicate failure to open the App Link. + * `type`: `“app”` for open in app, `“web”` for open in browser; `“fail”` when the success field is `“0”`. + * `version`: App Links API version. + +# Installation + +You can download the latest framework files from our [Releases page](https://github.com/BoltsFramework/Bolts-iOS/releases). + +Bolts is also available through [CocoaPods](http://cocoapods.org). To install it simply add the following line to your Podfile: + + pod 'Bolts' diff --git a/BreakingBad/Pods/Headers/Private/Bolts/BFCancellationToken.h b/BreakingBad/Pods/Headers/Private/Bolts/BFCancellationToken.h new file mode 120000 index 0000000..0b69486 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Bolts/BFCancellationToken.h @@ -0,0 +1 @@ +../../../Bolts/Bolts/Common/BFCancellationToken.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Bolts/BFCancellationTokenRegistration.h b/BreakingBad/Pods/Headers/Private/Bolts/BFCancellationTokenRegistration.h new file mode 120000 index 0000000..c587ca7 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Bolts/BFCancellationTokenRegistration.h @@ -0,0 +1 @@ +../../../Bolts/Bolts/Common/BFCancellationTokenRegistration.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Bolts/BFCancellationTokenSource.h b/BreakingBad/Pods/Headers/Private/Bolts/BFCancellationTokenSource.h new file mode 120000 index 0000000..d3d5985 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Bolts/BFCancellationTokenSource.h @@ -0,0 +1 @@ +../../../Bolts/Bolts/Common/BFCancellationTokenSource.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Bolts/BFDefines.h b/BreakingBad/Pods/Headers/Private/Bolts/BFDefines.h new file mode 120000 index 0000000..5df18ff --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Bolts/BFDefines.h @@ -0,0 +1 @@ +../../../Bolts/Bolts/Common/BFDefines.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Bolts/BFExecutor.h b/BreakingBad/Pods/Headers/Private/Bolts/BFExecutor.h new file mode 120000 index 0000000..c071e8c --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Bolts/BFExecutor.h @@ -0,0 +1 @@ +../../../Bolts/Bolts/Common/BFExecutor.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Bolts/BFTask.h b/BreakingBad/Pods/Headers/Private/Bolts/BFTask.h new file mode 120000 index 0000000..5468334 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Bolts/BFTask.h @@ -0,0 +1 @@ +../../../Bolts/Bolts/Common/BFTask.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Bolts/BFTaskCompletionSource.h b/BreakingBad/Pods/Headers/Private/Bolts/BFTaskCompletionSource.h new file mode 120000 index 0000000..c74760f --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Bolts/BFTaskCompletionSource.h @@ -0,0 +1 @@ +../../../Bolts/Bolts/Common/BFTaskCompletionSource.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Bolts/Bolts.h b/BreakingBad/Pods/Headers/Private/Bolts/Bolts.h new file mode 120000 index 0000000..146ac6e --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Bolts/Bolts.h @@ -0,0 +1 @@ +../../../Bolts/Bolts/Common/Bolts.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Bolts/BoltsVersion.h b/BreakingBad/Pods/Headers/Private/Bolts/BoltsVersion.h new file mode 120000 index 0000000..0fa0e2d --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Bolts/BoltsVersion.h @@ -0,0 +1 @@ +../../../Bolts/Bolts/Common/BoltsVersion.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/BFTask+Private.h b/BreakingBad/Pods/Headers/Private/Parse/BFTask+Private.h new file mode 120000 index 0000000..10159b2 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/BFTask+Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/BFTask+Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFACL.h b/BreakingBad/Pods/Headers/Private/Parse/PFACL.h new file mode 120000 index 0000000..7c3c14f --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFACL.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFACL.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFACLPrivate.h b/BreakingBad/Pods/Headers/Private/Parse/PFACLPrivate.h new file mode 120000 index 0000000..2879692 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFACLPrivate.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/ACL/PFACLPrivate.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFACLState.h b/BreakingBad/Pods/Headers/Private/Parse/PFACLState.h new file mode 120000 index 0000000..d3b8d9b --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFACLState.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/ACL/State/PFACLState.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFACLState_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFACLState_Private.h new file mode 120000 index 0000000..d9dd502 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFACLState_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/ACL/State/PFACLState_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFAlertView.h b/BreakingBad/Pods/Headers/Private/Parse/PFAlertView.h new file mode 120000 index 0000000..85018b0 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFAlertView.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFAlertView.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFAnalytics.h b/BreakingBad/Pods/Headers/Private/Parse/PFAnalytics.h new file mode 120000 index 0000000..7751f45 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFAnalytics.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFAnalytics.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFAnalyticsController.h b/BreakingBad/Pods/Headers/Private/Parse/PFAnalyticsController.h new file mode 120000 index 0000000..e1fc43f --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFAnalyticsController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Analytics/Controller/PFAnalyticsController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFAnalyticsUtilities.h b/BreakingBad/Pods/Headers/Private/Parse/PFAnalyticsUtilities.h new file mode 120000 index 0000000..b383f8f --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFAnalyticsUtilities.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFAnalytics_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFAnalytics_Private.h new file mode 120000 index 0000000..defa006 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFAnalytics_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Analytics/PFAnalytics_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFAnonymousAuthenticationProvider.h b/BreakingBad/Pods/Headers/Private/Parse/PFAnonymousAuthenticationProvider.h new file mode 120000 index 0000000..14cb5b3 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFAnonymousAuthenticationProvider.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFAnonymousUtils.h b/BreakingBad/Pods/Headers/Private/Parse/PFAnonymousUtils.h new file mode 120000 index 0000000..7b9b437 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFAnonymousUtils.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFAnonymousUtils.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFAnonymousUtils_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFAnonymousUtils_Private.h new file mode 120000 index 0000000..8b4fcef --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFAnonymousUtils_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFApplication.h b/BreakingBad/Pods/Headers/Private/Parse/PFApplication.h new file mode 120000 index 0000000..b0d8ee6 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFApplication.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFApplication.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFAssert.h b/BreakingBad/Pods/Headers/Private/Parse/PFAssert.h new file mode 120000 index 0000000..370352c --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFAssert.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFAssert.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFAsyncTaskQueue.h b/BreakingBad/Pods/Headers/Private/Parse/PFAsyncTaskQueue.h new file mode 120000 index 0000000..87cce9d --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFAsyncTaskQueue.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFAsyncTaskQueue.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFBase64Encoder.h b/BreakingBad/Pods/Headers/Private/Parse/PFBase64Encoder.h new file mode 120000 index 0000000..adae939 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFBase64Encoder.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFBase64Encoder.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFBaseState.h b/BreakingBad/Pods/Headers/Private/Parse/PFBaseState.h new file mode 120000 index 0000000..6c1b489 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFBaseState.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFBaseState.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFCachedQueryController.h b/BreakingBad/Pods/Headers/Private/Parse/PFCachedQueryController.h new file mode 120000 index 0000000..0712e6e --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFCachedQueryController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Query/Controller/PFCachedQueryController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFCategoryLoader.h b/BreakingBad/Pods/Headers/Private/Parse/PFCategoryLoader.h new file mode 120000 index 0000000..7dedc13 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFCategoryLoader.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFCategoryLoader.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFCloud.h b/BreakingBad/Pods/Headers/Private/Parse/PFCloud.h new file mode 120000 index 0000000..4070bb1 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFCloud.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFCloud.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFCloudCodeController.h b/BreakingBad/Pods/Headers/Private/Parse/PFCloudCodeController.h new file mode 120000 index 0000000..38ca262 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFCloudCodeController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/CloudCode/PFCloudCodeController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFCommandCache.h b/BreakingBad/Pods/Headers/Private/Parse/PFCommandCache.h new file mode 120000 index 0000000..b9d3183 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFCommandCache.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFCommandCache.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFCommandCache_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFCommandCache_Private.h new file mode 120000 index 0000000..aafb22b --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFCommandCache_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFCommandCache_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFCommandResult.h b/BreakingBad/Pods/Headers/Private/Parse/PFCommandResult.h new file mode 120000 index 0000000..2f1114a --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFCommandResult.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFCommandResult.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFCommandRunning.h b/BreakingBad/Pods/Headers/Private/Parse/PFCommandRunning.h new file mode 120000 index 0000000..f2d7c78 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFCommandRunning.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunning.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFCommandRunningConstants.h b/BreakingBad/Pods/Headers/Private/Parse/PFCommandRunningConstants.h new file mode 120000 index 0000000..3a73786 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFCommandRunningConstants.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFCommandURLRequestConstructor.h b/BreakingBad/Pods/Headers/Private/Parse/PFCommandURLRequestConstructor.h new file mode 120000 index 0000000..bb68366 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFCommandURLRequestConstructor.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFConfig.h b/BreakingBad/Pods/Headers/Private/Parse/PFConfig.h new file mode 120000 index 0000000..919b834 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFConfig.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFConfig.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFConfigController.h b/BreakingBad/Pods/Headers/Private/Parse/PFConfigController.h new file mode 120000 index 0000000..354d1e5 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFConfigController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Config/Controller/PFConfigController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFConfig_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFConfig_Private.h new file mode 120000 index 0000000..64be7b4 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFConfig_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Config/PFConfig_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFConstants.h b/BreakingBad/Pods/Headers/Private/Parse/PFConstants.h new file mode 120000 index 0000000..3b96186 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFConstants.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFConstants.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFCoreDataProvider.h b/BreakingBad/Pods/Headers/Private/Parse/PFCoreDataProvider.h new file mode 120000 index 0000000..738cd66 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFCoreDataProvider.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFCoreDataProvider.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFCoreManager.h b/BreakingBad/Pods/Headers/Private/Parse/PFCoreManager.h new file mode 120000 index 0000000..c856497 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFCoreManager.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFCoreManager.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFCurrentConfigController.h b/BreakingBad/Pods/Headers/Private/Parse/PFCurrentConfigController.h new file mode 120000 index 0000000..aa2f13d --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFCurrentConfigController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Config/Controller/PFCurrentConfigController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFCurrentInstallationController.h b/BreakingBad/Pods/Headers/Private/Parse/PFCurrentInstallationController.h new file mode 120000 index 0000000..c935649 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFCurrentInstallationController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFCurrentObjectControlling.h b/BreakingBad/Pods/Headers/Private/Parse/PFCurrentObjectControlling.h new file mode 120000 index 0000000..0d5e144 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFCurrentObjectControlling.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFCurrentUserController.h b/BreakingBad/Pods/Headers/Private/Parse/PFCurrentUserController.h new file mode 120000 index 0000000..4c70eaa --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFCurrentUserController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/User/CurrentUserController/PFCurrentUserController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFDataProvider.h b/BreakingBad/Pods/Headers/Private/Parse/PFDataProvider.h new file mode 120000 index 0000000..52db407 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFDataProvider.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFDataProvider.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFDateFormatter.h b/BreakingBad/Pods/Headers/Private/Parse/PFDateFormatter.h new file mode 120000 index 0000000..14af49b --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFDateFormatter.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFDateFormatter.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFDecoder.h b/BreakingBad/Pods/Headers/Private/Parse/PFDecoder.h new file mode 120000 index 0000000..e8ca6e2 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFDecoder.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFDecoder.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFDefaultACLController.h b/BreakingBad/Pods/Headers/Private/Parse/PFDefaultACLController.h new file mode 120000 index 0000000..28ee2d0 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFDefaultACLController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFDevice.h b/BreakingBad/Pods/Headers/Private/Parse/PFDevice.h new file mode 120000 index 0000000..45f3174 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFDevice.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFDevice.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFEncoder.h b/BreakingBad/Pods/Headers/Private/Parse/PFEncoder.h new file mode 120000 index 0000000..ccfe72c --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFEncoder.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFEncoder.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFErrorUtilities.h b/BreakingBad/Pods/Headers/Private/Parse/PFErrorUtilities.h new file mode 120000 index 0000000..6cc92b4 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFErrorUtilities.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFErrorUtilities.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFEventuallyPin.h b/BreakingBad/Pods/Headers/Private/Parse/PFEventuallyPin.h new file mode 120000 index 0000000..d7914fd --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFEventuallyPin.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFEventuallyPin.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFEventuallyQueue.h b/BreakingBad/Pods/Headers/Private/Parse/PFEventuallyQueue.h new file mode 120000 index 0000000..93c4119 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFEventuallyQueue.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFEventuallyQueue.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFEventuallyQueue_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFEventuallyQueue_Private.h new file mode 120000 index 0000000..b7d09c4 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFEventuallyQueue_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFEventuallyQueue_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFFieldOperation.h b/BreakingBad/Pods/Headers/Private/Parse/PFFieldOperation.h new file mode 120000 index 0000000..f0a3bab --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFFieldOperation.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/FieldOperation/PFFieldOperation.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFFieldOperationDecoder.h b/BreakingBad/Pods/Headers/Private/Parse/PFFieldOperationDecoder.h new file mode 120000 index 0000000..2cd60fe --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFFieldOperationDecoder.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/FieldOperation/PFFieldOperationDecoder.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFFile.h b/BreakingBad/Pods/Headers/Private/Parse/PFFile.h new file mode 120000 index 0000000..05ca154 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFFile.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFFile.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFFileController.h b/BreakingBad/Pods/Headers/Private/Parse/PFFileController.h new file mode 120000 index 0000000..8c0f296 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFFileController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/File/Controller/PFFileController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFFileDataStream.h b/BreakingBad/Pods/Headers/Private/Parse/PFFileDataStream.h new file mode 120000 index 0000000..54cbb17 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFFileDataStream.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/File/FileDataStream/PFFileDataStream.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFFileManager.h b/BreakingBad/Pods/Headers/Private/Parse/PFFileManager.h new file mode 120000 index 0000000..09a9757 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFFileManager.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFFileManager.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFFileStagingController.h b/BreakingBad/Pods/Headers/Private/Parse/PFFileStagingController.h new file mode 120000 index 0000000..af38d1e --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFFileStagingController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/File/Controller/PFFileStagingController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFFileState.h b/BreakingBad/Pods/Headers/Private/Parse/PFFileState.h new file mode 120000 index 0000000..f70310a --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFFileState.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/File/State/PFFileState.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFFileState_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFFileState_Private.h new file mode 120000 index 0000000..fd636fa --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFFileState_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/File/State/PFFileState_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFFile_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFFile_Private.h new file mode 120000 index 0000000..53b4a61 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFFile_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/File/PFFile_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFGeoPoint.h b/BreakingBad/Pods/Headers/Private/Parse/PFGeoPoint.h new file mode 120000 index 0000000..e9079fe --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFGeoPoint.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFGeoPoint.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFGeoPointPrivate.h b/BreakingBad/Pods/Headers/Private/Parse/PFGeoPointPrivate.h new file mode 120000 index 0000000..f151ab9 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFGeoPointPrivate.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFGeoPointPrivate.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFHTTPRequest.h b/BreakingBad/Pods/Headers/Private/Parse/PFHTTPRequest.h new file mode 120000 index 0000000..578b9f2 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFHTTPRequest.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/HTTPRequest/PFHTTPRequest.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFHTTPURLRequestConstructor.h b/BreakingBad/Pods/Headers/Private/Parse/PFHTTPURLRequestConstructor.h new file mode 120000 index 0000000..f2e4304 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFHTTPURLRequestConstructor.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFHash.h b/BreakingBad/Pods/Headers/Private/Parse/PFHash.h new file mode 120000 index 0000000..ecea29b --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFHash.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFHash.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFInstallation.h b/BreakingBad/Pods/Headers/Private/Parse/PFInstallation.h new file mode 120000 index 0000000..1f2d37a --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFInstallation.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFInstallation.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFInstallationConstants.h b/BreakingBad/Pods/Headers/Private/Parse/PFInstallationConstants.h new file mode 120000 index 0000000..a4ca8a6 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFInstallationConstants.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Installation/Constants/PFInstallationConstants.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFInstallationController.h b/BreakingBad/Pods/Headers/Private/Parse/PFInstallationController.h new file mode 120000 index 0000000..530f6c2 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFInstallationController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Installation/Controller/PFInstallationController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFInstallationIdentifierStore.h b/BreakingBad/Pods/Headers/Private/Parse/PFInstallationIdentifierStore.h new file mode 120000 index 0000000..827fb6c --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFInstallationIdentifierStore.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFInstallationIdentifierStore_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFInstallationIdentifierStore_Private.h new file mode 120000 index 0000000..acff66f --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFInstallationIdentifierStore_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFInstallationPrivate.h b/BreakingBad/Pods/Headers/Private/Parse/PFInstallationPrivate.h new file mode 120000 index 0000000..fc6ac83 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFInstallationPrivate.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Installation/PFInstallationPrivate.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFInternalUtils.h b/BreakingBad/Pods/Headers/Private/Parse/PFInternalUtils.h new file mode 120000 index 0000000..a0e19bf --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFInternalUtils.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFInternalUtils.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFJSONSerialization.h b/BreakingBad/Pods/Headers/Private/Parse/PFJSONSerialization.h new file mode 120000 index 0000000..786edd6 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFJSONSerialization.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFJSONSerialization.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFKeyValueCache.h b/BreakingBad/Pods/Headers/Private/Parse/PFKeyValueCache.h new file mode 120000 index 0000000..f68af04 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFKeyValueCache.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/KeyValueCache/PFKeyValueCache.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFKeyValueCache_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFKeyValueCache_Private.h new file mode 120000 index 0000000..d971da7 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFKeyValueCache_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFKeychainStore.h b/BreakingBad/Pods/Headers/Private/Parse/PFKeychainStore.h new file mode 120000 index 0000000..1609762 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFKeychainStore.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFKeychainStore.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFLocationManager.h b/BreakingBad/Pods/Headers/Private/Parse/PFLocationManager.h new file mode 120000 index 0000000..c534560 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFLocationManager.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFLocationManager.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFLogger.h b/BreakingBad/Pods/Headers/Private/Parse/PFLogger.h new file mode 120000 index 0000000..f100f88 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFLogger.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFLogger.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFLogging.h b/BreakingBad/Pods/Headers/Private/Parse/PFLogging.h new file mode 120000 index 0000000..0957f9c --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFLogging.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFLogging.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFMacros.h b/BreakingBad/Pods/Headers/Private/Parse/PFMacros.h new file mode 120000 index 0000000..be0a4a8 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFMacros.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFMacros.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFMultiProcessFileLock.h b/BreakingBad/Pods/Headers/Private/Parse/PFMultiProcessFileLock.h new file mode 120000 index 0000000..d40b109 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFMultiProcessFileLock.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFMultiProcessFileLockController.h b/BreakingBad/Pods/Headers/Private/Parse/PFMultiProcessFileLockController.h new file mode 120000 index 0000000..8e59276 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFMultiProcessFileLockController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFMulticastDelegate.h b/BreakingBad/Pods/Headers/Private/Parse/PFMulticastDelegate.h new file mode 120000 index 0000000..c731e9b --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFMulticastDelegate.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFMulticastDelegate.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFMutableACLState.h b/BreakingBad/Pods/Headers/Private/Parse/PFMutableACLState.h new file mode 120000 index 0000000..05bf135 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFMutableACLState.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/ACL/State/PFMutableACLState.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFMutableFileState.h b/BreakingBad/Pods/Headers/Private/Parse/PFMutableFileState.h new file mode 120000 index 0000000..d08ab4a --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFMutableFileState.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/File/State/PFMutableFileState.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFMutableObjectState.h b/BreakingBad/Pods/Headers/Private/Parse/PFMutableObjectState.h new file mode 120000 index 0000000..e715fb4 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFMutableObjectState.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Object/State/PFMutableObjectState.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFMutablePushState.h b/BreakingBad/Pods/Headers/Private/Parse/PFMutablePushState.h new file mode 120000 index 0000000..3fe0c5d --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFMutablePushState.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Push/State/PFMutablePushState.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFMutableQueryState.h b/BreakingBad/Pods/Headers/Private/Parse/PFMutableQueryState.h new file mode 120000 index 0000000..8e8c7a5 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFMutableQueryState.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Query/State/PFMutableQueryState.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFMutableRelationState.h b/BreakingBad/Pods/Headers/Private/Parse/PFMutableRelationState.h new file mode 120000 index 0000000..13a1999 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFMutableRelationState.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Relation/State/PFMutableRelationState.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFMutableUserState.h b/BreakingBad/Pods/Headers/Private/Parse/PFMutableUserState.h new file mode 120000 index 0000000..d5dbab7 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFMutableUserState.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/User/State/PFMutableUserState.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFNetworkActivityIndicatorManager.h b/BreakingBad/Pods/Headers/Private/Parse/PFNetworkActivityIndicatorManager.h new file mode 120000 index 0000000..1ae2fdb --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFNetworkActivityIndicatorManager.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFNetworkActivityIndicatorManager.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFNetworkCommand.h b/BreakingBad/Pods/Headers/Private/Parse/PFNetworkCommand.h new file mode 120000 index 0000000..2c8a391 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFNetworkCommand.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFNetworkCommand.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFNullability.h b/BreakingBad/Pods/Headers/Private/Parse/PFNullability.h new file mode 120000 index 0000000..d3b6c2e --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFNullability.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFNullability.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFObject+Subclass.h b/BreakingBad/Pods/Headers/Private/Parse/PFObject+Subclass.h new file mode 120000 index 0000000..ccbad16 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFObject+Subclass.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFObject+Subclass.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFObject.h b/BreakingBad/Pods/Headers/Private/Parse/PFObject.h new file mode 120000 index 0000000..b00d5bb --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFObject.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFObject.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFObjectBatchController.h b/BreakingBad/Pods/Headers/Private/Parse/PFObjectBatchController.h new file mode 120000 index 0000000..ed0585f --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFObjectBatchController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Object/BatchController/PFObjectBatchController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFObjectConstants.h b/BreakingBad/Pods/Headers/Private/Parse/PFObjectConstants.h new file mode 120000 index 0000000..2834ef6 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFObjectConstants.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Object/Constants/PFObjectConstants.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFObjectController.h b/BreakingBad/Pods/Headers/Private/Parse/PFObjectController.h new file mode 120000 index 0000000..19d572b --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFObjectController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Object/Controller/PFObjectController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFObjectController_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFObjectController_Private.h new file mode 120000 index 0000000..3df14b2 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFObjectController_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Object/Controller/PFObjectController_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFObjectControlling.h b/BreakingBad/Pods/Headers/Private/Parse/PFObjectControlling.h new file mode 120000 index 0000000..facfd09 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFObjectControlling.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Object/Controller/PFObjectControlling.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFObjectEstimatedData.h b/BreakingBad/Pods/Headers/Private/Parse/PFObjectEstimatedData.h new file mode 120000 index 0000000..2627e92 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFObjectEstimatedData.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFObjectFileCoder.h b/BreakingBad/Pods/Headers/Private/Parse/PFObjectFileCoder.h new file mode 120000 index 0000000..4d9fc61 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFObjectFileCoder.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Object/Coder/File/PFObjectFileCoder.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFObjectFileCodingLogic.h b/BreakingBad/Pods/Headers/Private/Parse/PFObjectFileCodingLogic.h new file mode 120000 index 0000000..c5bb3c6 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFObjectFileCodingLogic.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFObjectFilePersistenceController.h b/BreakingBad/Pods/Headers/Private/Parse/PFObjectFilePersistenceController.h new file mode 120000 index 0000000..b2f5bb6 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFObjectFilePersistenceController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFObjectLocalIdStore.h b/BreakingBad/Pods/Headers/Private/Parse/PFObjectLocalIdStore.h new file mode 120000 index 0000000..e2cbdf8 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFObjectLocalIdStore.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFObjectPrivate.h b/BreakingBad/Pods/Headers/Private/Parse/PFObjectPrivate.h new file mode 120000 index 0000000..849167d --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFObjectPrivate.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Object/PFObjectPrivate.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFObjectState.h b/BreakingBad/Pods/Headers/Private/Parse/PFObjectState.h new file mode 120000 index 0000000..8835423 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFObjectState.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Object/State/PFObjectState.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFObjectState_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFObjectState_Private.h new file mode 120000 index 0000000..0068676 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFObjectState_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Object/State/PFObjectState_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFObjectSubclassInfo.h b/BreakingBad/Pods/Headers/Private/Parse/PFObjectSubclassInfo.h new file mode 120000 index 0000000..f408e73 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFObjectSubclassInfo.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFObjectSubclassingController.h b/BreakingBad/Pods/Headers/Private/Parse/PFObjectSubclassingController.h new file mode 120000 index 0000000..6f54ea8 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFObjectSubclassingController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFObjectUtilities.h b/BreakingBad/Pods/Headers/Private/Parse/PFObjectUtilities.h new file mode 120000 index 0000000..ca1e591 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFObjectUtilities.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Object/Utilities/PFObjectUtilities.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFOfflineObjectController.h b/BreakingBad/Pods/Headers/Private/Parse/PFOfflineObjectController.h new file mode 120000 index 0000000..2450581 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFOfflineObjectController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFOfflineQueryController.h b/BreakingBad/Pods/Headers/Private/Parse/PFOfflineQueryController.h new file mode 120000 index 0000000..61522e9 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFOfflineQueryController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Query/Controller/PFOfflineQueryController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFOfflineQueryLogic.h b/BreakingBad/Pods/Headers/Private/Parse/PFOfflineQueryLogic.h new file mode 120000 index 0000000..51de493 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFOfflineQueryLogic.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFOfflineStore.h b/BreakingBad/Pods/Headers/Private/Parse/PFOfflineStore.h new file mode 120000 index 0000000..e2a28d5 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFOfflineStore.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFOperationSet.h b/BreakingBad/Pods/Headers/Private/Parse/PFOperationSet.h new file mode 120000 index 0000000..b62dded --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFOperationSet.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Object/OperationSet/PFOperationSet.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFPaymentTransactionObserver.h b/BreakingBad/Pods/Headers/Private/Parse/PFPaymentTransactionObserver.h new file mode 120000 index 0000000..0cf1120 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFPaymentTransactionObserver.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFPaymentTransactionObserver_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFPaymentTransactionObserver_Private.h new file mode 120000 index 0000000..80578e3 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFPaymentTransactionObserver_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFPin.h b/BreakingBad/Pods/Headers/Private/Parse/PFPin.h new file mode 120000 index 0000000..a7301b9 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFPin.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/LocalDataStore/Pin/PFPin.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFPinningEventuallyQueue.h b/BreakingBad/Pods/Headers/Private/Parse/PFPinningEventuallyQueue.h new file mode 120000 index 0000000..5481dca --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFPinningEventuallyQueue.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFPinningEventuallyQueue.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFPinningObjectStore.h b/BreakingBad/Pods/Headers/Private/Parse/PFPinningObjectStore.h new file mode 120000 index 0000000..5ac2044 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFPinningObjectStore.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Object/PinningStore/PFPinningObjectStore.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFProduct+Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFProduct+Private.h new file mode 120000 index 0000000..d698072 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFProduct+Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Product/PFProduct+Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFProduct.h b/BreakingBad/Pods/Headers/Private/Parse/PFProduct.h new file mode 120000 index 0000000..f4f4940 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFProduct.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFProduct.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFProductsRequestHandler.h b/BreakingBad/Pods/Headers/Private/Parse/PFProductsRequestHandler.h new file mode 120000 index 0000000..b06ea1d --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFProductsRequestHandler.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFPropertyInfo.h b/BreakingBad/Pods/Headers/Private/Parse/PFPropertyInfo.h new file mode 120000 index 0000000..3571a7e --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFPropertyInfo.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PropertyInfo/PFPropertyInfo.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFPropertyInfo_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFPropertyInfo_Private.h new file mode 120000 index 0000000..3568406 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFPropertyInfo_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFPropertyInfo_Runtime.h b/BreakingBad/Pods/Headers/Private/Parse/PFPropertyInfo_Runtime.h new file mode 120000 index 0000000..6c7c2b3 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFPropertyInfo_Runtime.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFPurchase.h b/BreakingBad/Pods/Headers/Private/Parse/PFPurchase.h new file mode 120000 index 0000000..8d7cb4a --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFPurchase.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFPurchase.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFPurchaseController.h b/BreakingBad/Pods/Headers/Private/Parse/PFPurchaseController.h new file mode 120000 index 0000000..91f42f4 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFPurchaseController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Purchase/Controller/PFPurchaseController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFPush.h b/BreakingBad/Pods/Headers/Private/Parse/PFPush.h new file mode 120000 index 0000000..930cb47 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFPush.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFPush.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFPushChannelsController.h b/BreakingBad/Pods/Headers/Private/Parse/PFPushChannelsController.h new file mode 120000 index 0000000..84a2d30 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFPushChannelsController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Push/ChannelsController/PFPushChannelsController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFPushController.h b/BreakingBad/Pods/Headers/Private/Parse/PFPushController.h new file mode 120000 index 0000000..3f11f0e --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFPushController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Push/Controller/PFPushController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFPushManager.h b/BreakingBad/Pods/Headers/Private/Parse/PFPushManager.h new file mode 120000 index 0000000..04cbb0d --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFPushManager.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Push/Manager/PFPushManager.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFPushPrivate.h b/BreakingBad/Pods/Headers/Private/Parse/PFPushPrivate.h new file mode 120000 index 0000000..d25e5ff --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFPushPrivate.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Push/PFPushPrivate.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFPushState.h b/BreakingBad/Pods/Headers/Private/Parse/PFPushState.h new file mode 120000 index 0000000..686f491 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFPushState.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Push/State/PFPushState.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFPushState_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFPushState_Private.h new file mode 120000 index 0000000..87e61e5 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFPushState_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Push/State/PFPushState_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFPushUtilities.h b/BreakingBad/Pods/Headers/Private/Parse/PFPushUtilities.h new file mode 120000 index 0000000..e6460a3 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFPushUtilities.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Push/Utilites/PFPushUtilities.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFQuery.h b/BreakingBad/Pods/Headers/Private/Parse/PFQuery.h new file mode 120000 index 0000000..1ea0442 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFQuery.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFQuery.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFQueryController.h b/BreakingBad/Pods/Headers/Private/Parse/PFQueryController.h new file mode 120000 index 0000000..5635d68 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFQueryController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Query/Controller/PFQueryController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFQueryPrivate.h b/BreakingBad/Pods/Headers/Private/Parse/PFQueryPrivate.h new file mode 120000 index 0000000..2f1bf2f --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFQueryPrivate.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Query/PFQueryPrivate.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFQueryState.h b/BreakingBad/Pods/Headers/Private/Parse/PFQueryState.h new file mode 120000 index 0000000..381352e --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFQueryState.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Query/State/PFQueryState.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFQueryState_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFQueryState_Private.h new file mode 120000 index 0000000..97a6657 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFQueryState_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Query/State/PFQueryState_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFQueryUtilities.h b/BreakingBad/Pods/Headers/Private/Parse/PFQueryUtilities.h new file mode 120000 index 0000000..f5c92e2 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFQueryUtilities.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Query/Utilities/PFQueryUtilities.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFRESTAnalyticsCommand.h b/BreakingBad/Pods/Headers/Private/Parse/PFRESTAnalyticsCommand.h new file mode 120000 index 0000000..6fe355e --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFRESTAnalyticsCommand.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/PFRESTAnalyticsCommand.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFRESTCloudCommand.h b/BreakingBad/Pods/Headers/Private/Parse/PFRESTCloudCommand.h new file mode 120000 index 0000000..46f5e1f --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFRESTCloudCommand.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/PFRESTCloudCommand.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFRESTCommand.h b/BreakingBad/Pods/Headers/Private/Parse/PFRESTCommand.h new file mode 120000 index 0000000..4fe070b --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFRESTCommand.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/PFRESTCommand.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFRESTCommand_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFRESTCommand_Private.h new file mode 120000 index 0000000..df23738 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFRESTCommand_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/PFRESTCommand_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFRESTConfigCommand.h b/BreakingBad/Pods/Headers/Private/Parse/PFRESTConfigCommand.h new file mode 120000 index 0000000..f671a72 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFRESTConfigCommand.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/PFRESTConfigCommand.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFRESTFileCommand.h b/BreakingBad/Pods/Headers/Private/Parse/PFRESTFileCommand.h new file mode 120000 index 0000000..e31ba58 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFRESTFileCommand.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/PFRESTFileCommand.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFRESTObjectBatchCommand.h b/BreakingBad/Pods/Headers/Private/Parse/PFRESTObjectBatchCommand.h new file mode 120000 index 0000000..828b203 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFRESTObjectBatchCommand.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/PFRESTObjectBatchCommand.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFRESTObjectCommand.h b/BreakingBad/Pods/Headers/Private/Parse/PFRESTObjectCommand.h new file mode 120000 index 0000000..7de026d --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFRESTObjectCommand.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/PFRESTObjectCommand.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFRESTPushCommand.h b/BreakingBad/Pods/Headers/Private/Parse/PFRESTPushCommand.h new file mode 120000 index 0000000..d2a676e --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFRESTPushCommand.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/PFRESTPushCommand.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFRESTQueryCommand.h b/BreakingBad/Pods/Headers/Private/Parse/PFRESTQueryCommand.h new file mode 120000 index 0000000..82f2793 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFRESTQueryCommand.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/PFRESTQueryCommand.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFRESTSessionCommand.h b/BreakingBad/Pods/Headers/Private/Parse/PFRESTSessionCommand.h new file mode 120000 index 0000000..e3651cb --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFRESTSessionCommand.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/PFRESTSessionCommand.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFRESTUserCommand.h b/BreakingBad/Pods/Headers/Private/Parse/PFRESTUserCommand.h new file mode 120000 index 0000000..9a13083 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFRESTUserCommand.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/PFRESTUserCommand.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFReachability.h b/BreakingBad/Pods/Headers/Private/Parse/PFReachability.h new file mode 120000 index 0000000..ac4e8fa --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFReachability.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFReachability.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFRelation.h b/BreakingBad/Pods/Headers/Private/Parse/PFRelation.h new file mode 120000 index 0000000..a3e8444 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFRelation.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFRelation.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFRelationPrivate.h b/BreakingBad/Pods/Headers/Private/Parse/PFRelationPrivate.h new file mode 120000 index 0000000..0115a6f --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFRelationPrivate.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Relation/PFRelationPrivate.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFRelationState.h b/BreakingBad/Pods/Headers/Private/Parse/PFRelationState.h new file mode 120000 index 0000000..f2659be --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFRelationState.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Relation/State/PFRelationState.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFRelationState_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFRelationState_Private.h new file mode 120000 index 0000000..ac2cfe1 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFRelationState_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Relation/State/PFRelationState_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFRole.h b/BreakingBad/Pods/Headers/Private/Parse/PFRole.h new file mode 120000 index 0000000..26cd86c --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFRole.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFRole.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFSQLiteDatabase.h b/BreakingBad/Pods/Headers/Private/Parse/PFSQLiteDatabase.h new file mode 120000 index 0000000..787b1e8 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFSQLiteDatabase.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFSQLiteDatabaseController.h b/BreakingBad/Pods/Headers/Private/Parse/PFSQLiteDatabaseController.h new file mode 120000 index 0000000..37b616f --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFSQLiteDatabaseController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFSQLiteDatabaseResult.h b/BreakingBad/Pods/Headers/Private/Parse/PFSQLiteDatabaseResult.h new file mode 120000 index 0000000..a2c98a3 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFSQLiteDatabaseResult.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFSQLiteDatabase_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFSQLiteDatabase_Private.h new file mode 120000 index 0000000..3165b80 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFSQLiteDatabase_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFSQLiteStatement.h b/BreakingBad/Pods/Headers/Private/Parse/PFSQLiteStatement.h new file mode 120000 index 0000000..3ef2050 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFSQLiteStatement.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFSession.h b/BreakingBad/Pods/Headers/Private/Parse/PFSession.h new file mode 120000 index 0000000..4c43360 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFSession.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFSession.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFSessionController.h b/BreakingBad/Pods/Headers/Private/Parse/PFSessionController.h new file mode 120000 index 0000000..19acd46 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFSessionController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Session/Controller/PFSessionController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFSessionUtilities.h b/BreakingBad/Pods/Headers/Private/Parse/PFSessionUtilities.h new file mode 120000 index 0000000..13ac6c5 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFSessionUtilities.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Session/Utilities/PFSessionUtilities.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFSession_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFSession_Private.h new file mode 120000 index 0000000..077e55a --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFSession_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Session/PFSession_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFSubclassing.h b/BreakingBad/Pods/Headers/Private/Parse/PFSubclassing.h new file mode 120000 index 0000000..901cadc --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFSubclassing.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFSubclassing.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFTaskQueue.h b/BreakingBad/Pods/Headers/Private/Parse/PFTaskQueue.h new file mode 120000 index 0000000..d7ccda7 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFTaskQueue.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFTaskQueue.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFThreadsafety.h b/BreakingBad/Pods/Headers/Private/Parse/PFThreadsafety.h new file mode 120000 index 0000000..d670b07 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFThreadsafety.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/ThreadSafety/PFThreadsafety.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFURLConstructor.h b/BreakingBad/Pods/Headers/Private/Parse/PFURLConstructor.h new file mode 120000 index 0000000..6760b55 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFURLConstructor.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/HTTPRequest/PFURLConstructor.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFURLSession.h b/BreakingBad/Pods/Headers/Private/Parse/PFURLSession.h new file mode 120000 index 0000000..767bbbf --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFURLSession.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFURLSessionCommandRunner.h b/BreakingBad/Pods/Headers/Private/Parse/PFURLSessionCommandRunner.h new file mode 120000 index 0000000..a5bcf23 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFURLSessionCommandRunner.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFURLSessionCommandRunner_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFURLSessionCommandRunner_Private.h new file mode 120000 index 0000000..4079814 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFURLSessionCommandRunner_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFURLSessionDataTaskDelegate.h b/BreakingBad/Pods/Headers/Private/Parse/PFURLSessionDataTaskDelegate.h new file mode 120000 index 0000000..c0c5ccb --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFURLSessionDataTaskDelegate.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFURLSessionDataTaskDelegate_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFURLSessionDataTaskDelegate_Private.h new file mode 120000 index 0000000..8d6abcf --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFURLSessionDataTaskDelegate_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFURLSessionFileDownloadTaskDelegate.h b/BreakingBad/Pods/Headers/Private/Parse/PFURLSessionFileDownloadTaskDelegate.h new file mode 120000 index 0000000..61d5d80 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFURLSessionFileDownloadTaskDelegate.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFURLSessionJSONDataTaskDelegate.h b/BreakingBad/Pods/Headers/Private/Parse/PFURLSessionJSONDataTaskDelegate.h new file mode 120000 index 0000000..1933d5b --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFURLSessionJSONDataTaskDelegate.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFURLSessionUploadTaskDelegate.h b/BreakingBad/Pods/Headers/Private/Parse/PFURLSessionUploadTaskDelegate.h new file mode 120000 index 0000000..5327ead --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFURLSessionUploadTaskDelegate.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFURLSession_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFURLSession_Private.h new file mode 120000 index 0000000..d3c1649 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFURLSession_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFUser.h b/BreakingBad/Pods/Headers/Private/Parse/PFUser.h new file mode 120000 index 0000000..01e4199 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFUser.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFUser.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFUserAuthenticationController.h b/BreakingBad/Pods/Headers/Private/Parse/PFUserAuthenticationController.h new file mode 120000 index 0000000..3b222ff --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFUserAuthenticationController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFUserAuthenticationDelegate.h b/BreakingBad/Pods/Headers/Private/Parse/PFUserAuthenticationDelegate.h new file mode 120000 index 0000000..3b6b473 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFUserAuthenticationDelegate.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFUserAuthenticationDelegate.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFUserConstants.h b/BreakingBad/Pods/Headers/Private/Parse/PFUserConstants.h new file mode 120000 index 0000000..2ad9193 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFUserConstants.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/User/Constants/PFUserConstants.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFUserController.h b/BreakingBad/Pods/Headers/Private/Parse/PFUserController.h new file mode 120000 index 0000000..ed6c494 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFUserController.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/User/Controller/PFUserController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFUserFileCodingLogic.h b/BreakingBad/Pods/Headers/Private/Parse/PFUserFileCodingLogic.h new file mode 120000 index 0000000..ca0302d --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFUserFileCodingLogic.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFUserPrivate.h b/BreakingBad/Pods/Headers/Private/Parse/PFUserPrivate.h new file mode 120000 index 0000000..114e09a --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFUserPrivate.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/User/PFUserPrivate.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFUserState.h b/BreakingBad/Pods/Headers/Private/Parse/PFUserState.h new file mode 120000 index 0000000..f18a548 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFUserState.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/User/State/PFUserState.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFUserState_Private.h b/BreakingBad/Pods/Headers/Private/Parse/PFUserState_Private.h new file mode 120000 index 0000000..b5b0d81 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFUserState_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/User/State/PFUserState_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/PFWeakValue.h b/BreakingBad/Pods/Headers/Private/Parse/PFWeakValue.h new file mode 120000 index 0000000..7cc66d2 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/PFWeakValue.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/PFWeakValue.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/Parse.h b/BreakingBad/Pods/Headers/Private/Parse/Parse.h new file mode 120000 index 0000000..699c11c --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/Parse.h @@ -0,0 +1 @@ +../../../Parse/Parse/Parse.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/ParseInternal.h b/BreakingBad/Pods/Headers/Private/Parse/ParseInternal.h new file mode 120000 index 0000000..96a779a --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/ParseInternal.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/ParseInternal.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/ParseManager.h b/BreakingBad/Pods/Headers/Private/Parse/ParseManager.h new file mode 120000 index 0000000..1644f32 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/ParseManager.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/ParseManager.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/ParseModule.h b/BreakingBad/Pods/Headers/Private/Parse/ParseModule.h new file mode 120000 index 0000000..9f00abd --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/ParseModule.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/ParseModule.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/Parse/Parse_Private.h b/BreakingBad/Pods/Headers/Private/Parse/Parse_Private.h new file mode 120000 index 0000000..c149580 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/Parse/Parse_Private.h @@ -0,0 +1 @@ +../../../Parse/Parse/Internal/Parse_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Bolts/BFCancellationToken.h b/BreakingBad/Pods/Headers/Public/Bolts/BFCancellationToken.h new file mode 120000 index 0000000..0b69486 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Bolts/BFCancellationToken.h @@ -0,0 +1 @@ +../../../Bolts/Bolts/Common/BFCancellationToken.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Bolts/BFCancellationTokenRegistration.h b/BreakingBad/Pods/Headers/Public/Bolts/BFCancellationTokenRegistration.h new file mode 120000 index 0000000..c587ca7 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Bolts/BFCancellationTokenRegistration.h @@ -0,0 +1 @@ +../../../Bolts/Bolts/Common/BFCancellationTokenRegistration.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Bolts/BFCancellationTokenSource.h b/BreakingBad/Pods/Headers/Public/Bolts/BFCancellationTokenSource.h new file mode 120000 index 0000000..d3d5985 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Bolts/BFCancellationTokenSource.h @@ -0,0 +1 @@ +../../../Bolts/Bolts/Common/BFCancellationTokenSource.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Bolts/BFDefines.h b/BreakingBad/Pods/Headers/Public/Bolts/BFDefines.h new file mode 120000 index 0000000..5df18ff --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Bolts/BFDefines.h @@ -0,0 +1 @@ +../../../Bolts/Bolts/Common/BFDefines.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Bolts/BFExecutor.h b/BreakingBad/Pods/Headers/Public/Bolts/BFExecutor.h new file mode 120000 index 0000000..c071e8c --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Bolts/BFExecutor.h @@ -0,0 +1 @@ +../../../Bolts/Bolts/Common/BFExecutor.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Bolts/BFTask.h b/BreakingBad/Pods/Headers/Public/Bolts/BFTask.h new file mode 120000 index 0000000..5468334 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Bolts/BFTask.h @@ -0,0 +1 @@ +../../../Bolts/Bolts/Common/BFTask.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Bolts/BFTaskCompletionSource.h b/BreakingBad/Pods/Headers/Public/Bolts/BFTaskCompletionSource.h new file mode 120000 index 0000000..c74760f --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Bolts/BFTaskCompletionSource.h @@ -0,0 +1 @@ +../../../Bolts/Bolts/Common/BFTaskCompletionSource.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Bolts/Bolts.h b/BreakingBad/Pods/Headers/Public/Bolts/Bolts.h new file mode 120000 index 0000000..146ac6e --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Bolts/Bolts.h @@ -0,0 +1 @@ +../../../Bolts/Bolts/Common/Bolts.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Bolts/BoltsVersion.h b/BreakingBad/Pods/Headers/Public/Bolts/BoltsVersion.h new file mode 120000 index 0000000..0fa0e2d --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Bolts/BoltsVersion.h @@ -0,0 +1 @@ +../../../Bolts/Bolts/Common/BoltsVersion.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFACL.h b/BreakingBad/Pods/Headers/Public/Parse/PFACL.h new file mode 120000 index 0000000..7c3c14f --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFACL.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFACL.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFAnalytics.h b/BreakingBad/Pods/Headers/Public/Parse/PFAnalytics.h new file mode 120000 index 0000000..7751f45 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFAnalytics.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFAnalytics.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFAnonymousUtils.h b/BreakingBad/Pods/Headers/Public/Parse/PFAnonymousUtils.h new file mode 120000 index 0000000..7b9b437 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFAnonymousUtils.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFAnonymousUtils.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFCloud.h b/BreakingBad/Pods/Headers/Public/Parse/PFCloud.h new file mode 120000 index 0000000..4070bb1 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFCloud.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFCloud.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFConfig.h b/BreakingBad/Pods/Headers/Public/Parse/PFConfig.h new file mode 120000 index 0000000..919b834 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFConfig.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFConfig.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFConstants.h b/BreakingBad/Pods/Headers/Public/Parse/PFConstants.h new file mode 120000 index 0000000..3b96186 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFConstants.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFConstants.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFFile.h b/BreakingBad/Pods/Headers/Public/Parse/PFFile.h new file mode 120000 index 0000000..05ca154 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFFile.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFFile.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFGeoPoint.h b/BreakingBad/Pods/Headers/Public/Parse/PFGeoPoint.h new file mode 120000 index 0000000..e9079fe --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFGeoPoint.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFGeoPoint.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFInstallation.h b/BreakingBad/Pods/Headers/Public/Parse/PFInstallation.h new file mode 120000 index 0000000..1f2d37a --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFInstallation.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFInstallation.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFNetworkActivityIndicatorManager.h b/BreakingBad/Pods/Headers/Public/Parse/PFNetworkActivityIndicatorManager.h new file mode 120000 index 0000000..1ae2fdb --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFNetworkActivityIndicatorManager.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFNetworkActivityIndicatorManager.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFNullability.h b/BreakingBad/Pods/Headers/Public/Parse/PFNullability.h new file mode 120000 index 0000000..d3b6c2e --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFNullability.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFNullability.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFObject+Subclass.h b/BreakingBad/Pods/Headers/Public/Parse/PFObject+Subclass.h new file mode 120000 index 0000000..ccbad16 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFObject+Subclass.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFObject+Subclass.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFObject.h b/BreakingBad/Pods/Headers/Public/Parse/PFObject.h new file mode 120000 index 0000000..b00d5bb --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFObject.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFObject.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFProduct.h b/BreakingBad/Pods/Headers/Public/Parse/PFProduct.h new file mode 120000 index 0000000..f4f4940 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFProduct.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFProduct.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFPurchase.h b/BreakingBad/Pods/Headers/Public/Parse/PFPurchase.h new file mode 120000 index 0000000..8d7cb4a --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFPurchase.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFPurchase.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFPush.h b/BreakingBad/Pods/Headers/Public/Parse/PFPush.h new file mode 120000 index 0000000..930cb47 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFPush.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFPush.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFQuery.h b/BreakingBad/Pods/Headers/Public/Parse/PFQuery.h new file mode 120000 index 0000000..1ea0442 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFQuery.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFQuery.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFRelation.h b/BreakingBad/Pods/Headers/Public/Parse/PFRelation.h new file mode 120000 index 0000000..a3e8444 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFRelation.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFRelation.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFRole.h b/BreakingBad/Pods/Headers/Public/Parse/PFRole.h new file mode 120000 index 0000000..26cd86c --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFRole.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFRole.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFSession.h b/BreakingBad/Pods/Headers/Public/Parse/PFSession.h new file mode 120000 index 0000000..4c43360 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFSession.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFSession.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFSubclassing.h b/BreakingBad/Pods/Headers/Public/Parse/PFSubclassing.h new file mode 120000 index 0000000..901cadc --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFSubclassing.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFSubclassing.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFUser.h b/BreakingBad/Pods/Headers/Public/Parse/PFUser.h new file mode 120000 index 0000000..01e4199 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFUser.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFUser.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/PFUserAuthenticationDelegate.h b/BreakingBad/Pods/Headers/Public/Parse/PFUserAuthenticationDelegate.h new file mode 120000 index 0000000..3b6b473 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/PFUserAuthenticationDelegate.h @@ -0,0 +1 @@ +../../../Parse/Parse/PFUserAuthenticationDelegate.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/Parse/Parse.h b/BreakingBad/Pods/Headers/Public/Parse/Parse.h new file mode 120000 index 0000000..699c11c --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/Parse/Parse.h @@ -0,0 +1 @@ +../../../Parse/Parse/Parse.h \ No newline at end of file diff --git a/BreakingBad/Pods/Manifest.lock b/BreakingBad/Pods/Manifest.lock new file mode 100644 index 0000000..adc9262 --- /dev/null +++ b/BreakingBad/Pods/Manifest.lock @@ -0,0 +1,13 @@ +PODS: + - Bolts/Tasks (1.3.0) + - Parse (1.9.0): + - Bolts/Tasks (>= 1.3.0) + +DEPENDENCIES: + - Parse + +SPEC CHECKSUMS: + Bolts: 805a4a87413e49d4a0c2b7d469084cbc46b09342 + Parse: 712efbc476d4f47b0f96b70db7e53101575753aa + +COCOAPODS: 0.38.2 diff --git a/BreakingBad/Pods/Parse/LICENSE b/BreakingBad/Pods/Parse/LICENSE new file mode 100644 index 0000000..d98b0e0 --- /dev/null +++ b/BreakingBad/Pods/Parse/LICENSE @@ -0,0 +1,30 @@ +BSD License + +For Parse iOS/OSX SDK software + +Copyright (c) 2015-present, Parse, LLC. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name Parse nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/BreakingBad/Pods/Parse/Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h b/BreakingBad/Pods/Parse/Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h new file mode 100644 index 0000000..cff7a3e --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h @@ -0,0 +1,52 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFACL; + +NS_ASSUME_NONNULL_BEGIN + +@interface PFDefaultACLController : NSObject + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +// TODO: (nlutsenko, richardross) Make it not terrible aka don't have singletons ++ (instancetype)defaultController; ++ (void)clearDefaultController; + +///-------------------------------------- +/// @name Default ACL +///-------------------------------------- + +/*! + Get the default ACL managed by this controller. + + @return A task that returns the ACL encapsulated by this controller. + */ +- (BFTask *)getDefaultACLAsync; + +/*! + Set the new default default ACL to be encapsulated in this controller. + + @param acl The new ACL. Will be copied. + @param accessForCurrentUser Whether or not we should add special access for the current user on this ACL. + + @return A task that returns the new (copied) ACL now encapsulated in this controller. + */ +- (BFTask *)setDefaultACLAsync:(PFACL *)acl withCurrentUserAccess:(BOOL)accessForCurrentUser; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m b/BreakingBad/Pods/Parse/Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m new file mode 100644 index 0000000..82bd638 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m @@ -0,0 +1,99 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFDefaultACLController.h" + +#import + +#import "PFACLPrivate.h" +#import "PFAsyncTaskQueue.h" +#import "PFCoreManager.h" +#import "PFCurrentUserController.h" +#import "Parse_Private.h" + +@implementation PFDefaultACLController { + PFAsyncTaskQueue *_taskQueue; + + PFACL *_defaultACL; + BOOL _useCurrentUser; + + PFUser *_lastCurrentUser; + PFACL *_defaultACLWithCurrentUser; +} + +static PFDefaultACLController *defaultController_; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + ++ (instancetype)defaultController { + if (!defaultController_) { + defaultController_ = [[self alloc] init]; + } + return defaultController_; +} + ++ (void)clearDefaultController { + defaultController_ = nil; +} + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _taskQueue = [[PFAsyncTaskQueue alloc] init]; + + return self; +} + +///-------------------------------------- +#pragma mark - ACL +///-------------------------------------- + +- (BFTask PF_GENERIC(PFACL *)*)getDefaultACLAsync { + return [_taskQueue enqueue:^id(BFTask *task) { + if (!_defaultACL || !_useCurrentUser) { + return _defaultACL; + } + + PFCurrentUserController *currentUserController = [Parse _currentManager].coreManager.currentUserController; + return [[currentUserController getCurrentObjectAsync] continueWithBlock:^id(BFTask *task) { + PFUser *currentUser = task.result; + if (!currentUser) { + return _defaultACL; + } + + if (currentUser != _lastCurrentUser) { + _defaultACLWithCurrentUser = [_defaultACL createUnsharedCopy]; + [_defaultACLWithCurrentUser setShared:YES]; + [_defaultACLWithCurrentUser setReadAccess:YES forUser:currentUser]; + [_defaultACLWithCurrentUser setWriteAccess:YES forUser:currentUser]; + _lastCurrentUser = currentUser; + } + return _defaultACLWithCurrentUser; + }]; + }]; +} + +- (BFTask PF_GENERIC(PFACL *)*)setDefaultACLAsync:(PFACL *)acl withCurrentUserAccess:(BOOL)accessForCurrentUser { + return [_taskQueue enqueue:^id(BFTask *task) { + _defaultACLWithCurrentUser = nil; + _lastCurrentUser = nil; + + _defaultACL = [acl createUnsharedCopy]; + [_defaultACL setShared:YES]; + + _useCurrentUser = accessForCurrentUser; + + return _defaultACL; + }]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/ACL/PFACLPrivate.h b/BreakingBad/Pods/Parse/Parse/Internal/ACL/PFACLPrivate.h new file mode 100644 index 0000000..6a641d6 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/ACL/PFACLPrivate.h @@ -0,0 +1,42 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "PFACL.h" + +@class PFUser; + +@interface PFACL (Private) + +// Internal commands + +/* + Gets the encoded format for an ACL. + */ +- (NSDictionary *)encodeIntoDictionary; + +/* + Creates a new ACL object from an existing dictionary. + */ +- (instancetype)initWithDictionary:(NSDictionary *)dictionary; + +/*! + Creates an ACL from its encoded format. + */ ++ (instancetype)ACLWithDictionary:(NSDictionary *)dictionary; + +- (void)setShared:(BOOL)shared; +- (BOOL)isShared; +- (instancetype)createUnsharedCopy; +- (BOOL)hasUnresolvedUser; + ++ (instancetype)defaultACL; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/ACL/State/PFACLState.h b/BreakingBad/Pods/Parse/Parse/Internal/ACL/State/PFACLState.h new file mode 100644 index 0000000..90e06af --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/ACL/State/PFACLState.h @@ -0,0 +1,42 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFBaseState.h" + +NS_ASSUME_NONNULL_BEGIN + +@class PFMutableACLState; + +typedef void (^PFACLStateMutationBlock)(PFMutableACLState *); + +@interface PFACLState : PFBaseState + +@property (nonatomic, copy, readonly) NSDictionary *permissions; +@property (nonatomic, assign, readonly, getter=isShared) BOOL shared; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithState:(PFACLState *)otherState NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithState:(PFACLState *)otherState mutatingBlock:(PFACLStateMutationBlock)mutatingBlock; + ++ (instancetype)stateWithState:(PFACLState *)otherState; ++ (instancetype)stateWithState:(PFACLState *)otherState mutatingBlock:(PFACLStateMutationBlock)mutatingBlock; + +///-------------------------------------- +/// @name Mutating +///-------------------------------------- + +- (instancetype)copyByMutatingWithBlock:(PFACLStateMutationBlock)mutatingBlock NS_RETURNS_RETAINED; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/ACL/State/PFACLState.m b/BreakingBad/Pods/Parse/Parse/Internal/ACL/State/PFACLState.m new file mode 100644 index 0000000..a80649e --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/ACL/State/PFACLState.m @@ -0,0 +1,87 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFACLState_Private.h" + +#import "PFMutableACLState.h" + +@implementation PFACLState + +///-------------------------------------- +#pragma mark - PFBaseStateSubclass +///-------------------------------------- + ++ (NSDictionary *)propertyAttributes { + return @{ + @"permissions": [PFPropertyAttributes attributes], + @"shared": [PFPropertyAttributes attributes], + }; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _permissions = [NSDictionary dictionary]; + _shared = NO; + + return self; +} + +- (instancetype)initWithState:(PFACLState *)otherState { + return [super initWithState:otherState]; +} + +- (instancetype)initWithState:(PFACLState *)otherState mutatingBlock:(PFACLStateMutationBlock)mutatingBlock { + self = [self initWithState:otherState]; + if (!self) return nil; + + // Make permissions mutable for the duration of the block. + _permissions = [_permissions mutableCopy]; + + mutatingBlock((PFMutableACLState *)self); + + _permissions = [_permissions copy]; + + return self; +} + ++ (instancetype)stateWithState:(PFACLState *)otherState { + return [super stateWithState:otherState]; +} + ++ (instancetype)stateWithState:(PFACLState *)otherState mutatingBlock:(PFACLStateMutationBlock)mutatingBlock { + return [[self alloc] initWithState:otherState mutatingBlock:mutatingBlock]; +} + +///-------------------------------------- +#pragma mark - Copying +///-------------------------------------- + +- (instancetype)copyWithZone:(NSZone *)zone { + return [[PFACLState allocWithZone:zone] initWithState:self]; +} + +- (instancetype)mutableCopyWithZone:(NSZone *)zone { + return [[PFMutableACLState allocWithZone:zone] initWithState:self]; +} + +///-------------------------------------- +#pragma mark - Mutating +///-------------------------------------- + +- (instancetype)copyByMutatingWithBlock:(PFACLStateMutationBlock)mutationsBlock { + return [[PFACLState alloc] initWithState:self mutatingBlock:mutationsBlock]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/ACL/State/PFACLState_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/ACL/State/PFACLState_Private.h new file mode 100644 index 0000000..a3ed153 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/ACL/State/PFACLState_Private.h @@ -0,0 +1,21 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFACLState.h" + +@interface PFACLState () { +@protected + NSDictionary *_permissions; + BOOL _shared; +} + +@property (nonatomic, copy, readwrite) NSDictionary *permissions; +@property (nonatomic, assign, readwrite, getter=isShared) BOOL shared; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/ACL/State/PFMutableACLState.h b/BreakingBad/Pods/Parse/Parse/Internal/ACL/State/PFMutableACLState.h new file mode 100644 index 0000000..d2bda0c --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/ACL/State/PFMutableACLState.h @@ -0,0 +1,17 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFACLState.h" + +@interface PFMutableACLState : PFACLState + +@property (nonatomic, copy, readwrite) NSMutableDictionary *permissions; +@property (nonatomic, assign, readwrite, getter=isShared) BOOL shared; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/ACL/State/PFMutableACLState.m b/BreakingBad/Pods/Parse/Parse/Internal/ACL/State/PFMutableACLState.m new file mode 100644 index 0000000..5361b8d --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/ACL/State/PFMutableACLState.m @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFMutableACLState.h" + +#import "PFACLState_Private.h" + +@implementation PFMutableACLState + +@dynamic permissions; +@dynamic shared; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _permissions = [NSMutableDictionary dictionary]; + + return self; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Analytics/Controller/PFAnalyticsController.h b/BreakingBad/Pods/Parse/Parse/Internal/Analytics/Controller/PFAnalyticsController.h new file mode 100644 index 0000000..0681ec4 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Analytics/Controller/PFAnalyticsController.h @@ -0,0 +1,61 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFDataProvider.h" + +@class BFTask PF_GENERIC(__covariant BFGenericType); + +@interface PFAnalyticsController : NSObject + +@property (nonatomic, weak, readonly) id dataSource; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; + ++ (instancetype)controllerWithDataSource:(id)dataSource; + +///-------------------------------------- +/// @name Track Event +///-------------------------------------- + +/*! + @abstract Tracks this application being launched. If this happened as the result of the + user opening a push notification, this method sends along information to + correlate this open with that push. + + @param payload The Remote Notification payload. + @param sessionToken Current user session token. + + @returns `BFTask` with result set to `@YES`. + */ +- (BFTask *)trackAppOpenedEventAsyncWithRemoteNotificationPayload:(NSDictionary *)payload + sessionToken:(NSString *)sessionToken; + +/*! + @abstract Tracks the occurrence of a custom event with additional dimensions. + + @param name Event name. + @param dimensions `NSDictionary` of information by which to segment this event. + @param sessionToken Current user session token. + + @returns `BFTask` with result set to `@YES`. + */ +- (BFTask *)trackEventAsyncWithName:(NSString *)name + dimensions:(NSDictionary *)dimensions + sessionToken:(NSString *)sessionToken; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Analytics/Controller/PFAnalyticsController.m b/BreakingBad/Pods/Parse/Parse/Internal/Analytics/Controller/PFAnalyticsController.m new file mode 100644 index 0000000..b77eba6 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Analytics/Controller/PFAnalyticsController.m @@ -0,0 +1,100 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFAnalyticsController.h" + +#import "BFTask+Private.h" +#import "PFAnalyticsUtilities.h" +#import "PFAssert.h" +#import "PFEventuallyQueue.h" +#import "PFRESTAnalyticsCommand.h" + +@interface PFAnalyticsController () + +@property (nonatomic, weak, readonly) PFEventuallyQueue *eventuallyQueue; + +@end + +@implementation PFAnalyticsController + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithDataSource:(id)dataSource { + self = [super init]; + if (!self) return nil; + + _dataSource = dataSource; + + return self; +} + ++ (instancetype)controllerWithDataSource:(id)dataSource { + return [[self alloc] initWithDataSource:dataSource]; +} + +///-------------------------------------- +#pragma mark - Track Event +///-------------------------------------- + +- (BFTask *)trackAppOpenedEventAsyncWithRemoteNotificationPayload:(NSDictionary *)payload + sessionToken:(NSString *)sessionToken { + @weakify(self); + return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + @strongify(self); + // If the Remote Notification payload had a message sent along with it, make + // sure to send that along so the server can identify "app opened from push" + // instead. + id alert = payload[@"aps"][@"alert"]; + NSString *pushDigest = (alert ? [PFAnalyticsUtilities md5DigestFromPushPayload:alert] : nil); + + PFRESTCommand *command = [PFRESTAnalyticsCommand trackAppOpenedEventCommandWithPushHash:pushDigest + sessionToken:sessionToken]; + return [self.eventuallyQueue enqueueCommandInBackground:command]; + }] continueWithSuccessResult:@YES]; +} + +- (BFTask *)trackEventAsyncWithName:(NSString *)name + dimensions:(NSDictionary *)dimensions + sessionToken:(NSString *)sessionToken { + PFParameterAssert([[name stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length], + @"A name for the custom event must be provided."); + + if (dimensions) { + [dimensions enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + PFParameterAssert([key isKindOfClass:[NSString class]] && [obj isKindOfClass:[NSString class]], + @"trackEvent dimensions expect keys and values of type NSString."); + }]; + } + + @weakify(self); + return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + @strongify(self); + NSDictionary *encodedDimensions = [[PFNoObjectEncoder objectEncoder] encodeObject:dimensions]; + PFRESTCommand *command = [PFRESTAnalyticsCommand trackEventCommandWithEventName:name + dimensions:encodedDimensions + sessionToken:sessionToken]; + return [self.eventuallyQueue enqueueCommandInBackground:command]; + }] continueWithSuccessResult:@YES]; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (PFEventuallyQueue *)eventuallyQueue { + return self.dataSource.eventuallyQueue; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Analytics/PFAnalytics_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/Analytics/PFAnalytics_Private.h new file mode 100644 index 0000000..d001798 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Analytics/PFAnalytics_Private.h @@ -0,0 +1,17 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +/*! + Predefined events - AppOpened, CrashReport + Coming soon - Log, ... + */ +extern NSString *const PFAnalyticsEventAppOpened; +extern NSString *const PFAnalyticsEventCrashReport; diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h b/BreakingBad/Pods/Parse/Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h new file mode 100644 index 0000000..69f581f --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@interface PFAnalyticsUtilities : NSObject + +/*! + Serializes and hexdigests an alert payload into a "push_hash" identifier + for use in Analytics. + Limitedly flexible - the payload is the value under the "alert" key in the + "aps" hash of a remote notification, so we can reasonably assume that the + complexity of its structure is limited to that accepted by Apple (in its + "The Notification Payload" docs) + + @param payload `alert` value from a push notification. + + @returns md5 identifier. + */ ++ (NSString *)md5DigestFromPushPayload:(id)payload; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m b/BreakingBad/Pods/Parse/Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m new file mode 100644 index 0000000..9107d18 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m @@ -0,0 +1,38 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFAnalyticsUtilities.h" + +#import "PFHash.h" + +@implementation PFAnalyticsUtilities + ++ (NSString *)md5DigestFromPushPayload:(id)payload { + if (!payload || payload == [NSNull null]) { + payload = @""; + } else if ([payload isKindOfClass:[NSDictionary class]]) { + NSDictionary *dict = payload; + NSArray *keys = [[dict allKeys] sortedArrayUsingSelector:@selector(compare:)]; + NSMutableArray *components = [NSMutableArray arrayWithCapacity:[dict count] * 2]; + [keys enumerateObjectsUsingBlock:^(id key, NSUInteger idx, BOOL *stop) { + [components addObject:key]; + + // alert[@"loc-args"] can be an NSArray + id value = [dict objectForKey:key]; + if ([value isKindOfClass:[NSArray class]]) { + value = [value componentsJoinedByString:@""]; + } + [components addObject:value]; + }]; + payload = [components componentsJoinedByString:@""]; + } + return PFMD5HashFromString([payload description]); +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/BFTask+Private.h b/BreakingBad/Pods/Parse/Parse/Internal/BFTask+Private.h new file mode 100644 index 0000000..0d01c82 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/BFTask+Private.h @@ -0,0 +1,71 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import +#import + +#import "PFInternalUtils.h" + +@interface BFExecutor (Background) + ++ (instancetype)defaultPriorityBackgroundExecutor; + +@end + +@interface BFTask (Private) + +- (instancetype)continueAsyncWithBlock:(BFContinuationBlock)block; +- (instancetype)continueAsyncWithSuccessBlock:(BFContinuationBlock)block; + +- (instancetype)continueWithResult:(id)result; +- (instancetype)continueWithSuccessResult:(id)result; + +- (instancetype)continueWithMainThreadResultBlock:(PFIdResultBlock)resultBlock + executeIfCancelled:(BOOL)executeIfCancelled; +- (instancetype)continueWithMainThreadBooleanResultBlock:(PFBooleanResultBlock)resultBlock + executeIfCancelled:(BOOL)executeIfCancelled; + +/*! + Adds a continuation to the task that will run the given block on the main + thread sometime after this task has finished. If the task was cancelled, + the block will never be called. If the task had an exception, the exception + will be throw on the main thread instead of running the block. Otherwise, + the block will be given the result and error of this task. + @returns A new task that will be finished once the block has run. + */ +- (BFTask *)thenCallBackOnMainThreadAsync:(void(^)(id result, NSError *error))block; + +/*! + Identical to thenCallBackOnMainThreadAsync:, except that the result of a successful + task will be converted to a BOOL using the boolValue method, and that will + be passed to the block instead of the original result. + */ +- (BFTask *)thenCallBackOnMainThreadWithBoolValueAsync:(void(^)(BOOL result, NSError *error))block; + +/*! + Same as `waitForResult:error withMainThreadWarning:YES` + */ +- (id)waitForResult:(NSError **)error; + +/*! + Waits until this operation is completed, then returns its value. + This method is inefficient and consumes a thread resource while its running. + + @param error If an error occurs, upon return contains an `NSError` object that describes the problem. + @param warningEnabled `BOOL` value that + + @return Returns a `self.result` if task completed. `nil` - if cancelled. + */ +- (id)waitForResult:(NSError **)error withMainThreadWarning:(BOOL)warningEnabled; + +@end + +extern void forceLoadCategory_BFTask_Private(); diff --git a/BreakingBad/Pods/Parse/Parse/Internal/BFTask+Private.m b/BreakingBad/Pods/Parse/Parse/Internal/BFTask+Private.m new file mode 100644 index 0000000..5ed4959 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/BFTask+Private.m @@ -0,0 +1,130 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "BFTask+Private.h" + +#import +#import + +#import "PFLogging.h" + +@implementation BFExecutor (Background) + ++ (instancetype)defaultPriorityBackgroundExecutor { + static BFExecutor *executor; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + executor = [BFExecutor executorWithDispatchQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)]; + }); + return executor; +} + +@end + +@implementation BFTask (Private) + +- (instancetype)continueAsyncWithBlock:(BFContinuationBlock)block { + return [self continueWithExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:block]; +} + +- (instancetype)continueAsyncWithSuccessBlock:(BFContinuationBlock)block { + return [self continueWithExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withSuccessBlock:block]; +} + +- (instancetype)continueWithResult:(id)result { + return [self continueWithBlock:^id(BFTask *task) { + return result; + }]; +} + +- (instancetype)continueWithSuccessResult:(id)result { + return [self continueWithSuccessBlock:^id(BFTask *task) { + return result; + }]; +} + +- (instancetype)continueWithMainThreadResultBlock:(PFIdResultBlock)resultBlock + executeIfCancelled:(BOOL)executeIfCancelled { + if (!resultBlock) { + return self; + } + return [self continueWithExecutor:[BFExecutor mainThreadExecutor] + withBlock:^id(BFTask *task) { + BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; + + @try { + if (self.exception) { + //TODO: (nlutsenko) Add more context, by passing a `_cmd` from the caller method + PFLogException(self.exception); + @throw self.exception; + } + + if (!self.cancelled || executeIfCancelled) { + resultBlock(self.result, self.error); + } + } @finally { + tcs.result = nil; + } + + return tcs.task; + }]; +} + +- (instancetype)continueWithMainThreadBooleanResultBlock:(PFBooleanResultBlock)resultBlock + executeIfCancelled:(BOOL)executeIfCancelled { + return [self continueWithMainThreadResultBlock:^(id object, NSError *error) { + resultBlock([object boolValue], error); + } executeIfCancelled:executeIfCancelled]; +} + +- (BFTask *)thenCallBackOnMainThreadAsync:(void(^)(id result, NSError *error))block { + return [self continueWithMainThreadResultBlock:block executeIfCancelled:NO]; +} + +- (BFTask *)thenCallBackOnMainThreadWithBoolValueAsync:(void(^)(BOOL result, NSError *error))block { + if (!block) { + return self; + } + return [self thenCallBackOnMainThreadAsync:^(id blockResult, NSError *blockError) { + block([blockResult boolValue], blockError); + }]; +} + +- (id)waitForResult:(NSError **)error { + return [self waitForResult:error withMainThreadWarning:YES]; +} + +- (id)waitForResult:(NSError **)error withMainThreadWarning:(BOOL)warningEnabled { + if (warningEnabled) { + [self waitUntilFinished]; + } else { + dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); + [self continueWithBlock:^id(BFTask *task) { + dispatch_semaphore_signal(semaphore); + return nil; + }]; + dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); + } + if (self.cancelled) { + return nil; + } else if (self.exception) { + @throw self.exception; + } + if (self.error && error) { + *error = self.error; + } + return self.result; +} + +@end + +void forceLoadCategory_BFTask_Private() { + NSString *string = nil; + [string description]; +} diff --git a/BreakingBad/Pods/Parse/Parse/Internal/CloudCode/PFCloudCodeController.h b/BreakingBad/Pods/Parse/Parse/Internal/CloudCode/PFCloudCodeController.h new file mode 100644 index 0000000..8532572 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/CloudCode/PFCloudCodeController.h @@ -0,0 +1,47 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@protocol PFCommandRunning; + +@interface PFCloudCodeController : NSObject + +@property (nonatomic, strong, readonly) id commandRunner; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithCommandRunner:(id)commandRunner NS_DESIGNATED_INITIALIZER; + ++ (instancetype)controllerWithCommandRunner:(id)commandRunner; + +///-------------------------------------- +/// @name Cloud Functions +///-------------------------------------- + +/*! + Calls a Cloud Code function and returns a result of it's execution. + + @param functionName Function name to call. + @param parameters Parameters to pass. (can't be nil). + @param sessionToken Session token to use. + + @returns `BFTask` with a result set to a result of Cloud Function. + */ +- (BFTask *)callCloudCodeFunctionAsync:(NSString *)functionName + withParameters:(NSDictionary *)parameters + sessionToken:(NSString *)sessionToken; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/CloudCode/PFCloudCodeController.m b/BreakingBad/Pods/Parse/Parse/Internal/CloudCode/PFCloudCodeController.m new file mode 100644 index 0000000..212e47a --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/CloudCode/PFCloudCodeController.m @@ -0,0 +1,66 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFCloudCodeController.h" + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFCommandResult.h" +#import "PFCommandRunning.h" +#import "PFDecoder.h" +#import "PFEncoder.h" +#import "PFInternalUtils.h" +#import "PFRESTCloudCommand.h" + +@implementation PFCloudCodeController + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithCommandRunner:(id)commandRunner { + self = [super init]; + if (!self) return nil; + + _commandRunner = commandRunner; + + return self; +} + ++ (instancetype)controllerWithCommandRunner:(id)commandRunner { + return [[self alloc] initWithCommandRunner:commandRunner]; +} + +///-------------------------------------- +#pragma mark - Cloud Functions +///-------------------------------------- + +- (BFTask *)callCloudCodeFunctionAsync:(NSString *)functionName + withParameters:(NSDictionary *)parameters + sessionToken:(NSString *)sessionToken { + @weakify(self); + return [[[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + @strongify(self); + NSDictionary *encodedParameters = [[PFNoObjectEncoder objectEncoder] encodeObject:parameters]; + PFRESTCloudCommand *command = [PFRESTCloudCommand commandForFunction:functionName + withParameters:encodedParameters + sessionToken:sessionToken]; + return [self.commandRunner runCommandAsync:command withOptions:PFCommandRunningOptionRetryIfFailed]; + }] continueWithSuccessBlock:^id(BFTask *task) { + return ((PFCommandResult *)(task.result)).result[@"result"]; + }] continueWithSuccessBlock:^id(BFTask *task) { + return [[PFDecoder objectDecoder] decodeObject:task.result]; + }]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunning.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunning.h new file mode 100644 index 0000000..c07f754 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunning.h @@ -0,0 +1,96 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFDataProvider.h" + +@class BFCancellationToken; +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFCommandResult; +@class PFRESTCommand; +@protocol PFNetworkCommand; + +typedef NS_OPTIONS(NSUInteger, PFCommandRunningOptions) { + PFCommandRunningOptionRetryIfFailed = 1 << 0, +}; + +extern NSTimeInterval const PFCommandRunningDefaultRetryDelay; + +NS_ASSUME_NONNULL_BEGIN + +@protocol PFCommandRunning + +@property (nonatomic, weak, readonly) id dataSource; + +@property (nonatomic, copy, readonly) NSString *applicationId; +@property (nonatomic, copy, readonly) NSString *clientKey; + +@property (nonatomic, assign) NSTimeInterval initialRetryDelay; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)initWithDataSource:(id)dataSource + applicationId:(NSString *)applicationId + clientKey:(NSString *)clientKey; ++ (instancetype)commandRunnerWithDataSource:(id)dataSource + applicationId:(NSString *)applicationId + clientKey:(NSString *)clientKey; + +///-------------------------------------- +/// @name Data Commands +///-------------------------------------- + +/*! + Run command. + + @param command Command to run. + @param options Options to use to run command. + + @returns `BFTask` with result set to `PFCommandResult`. + */ +- (BFTask *)runCommandAsync:(PFRESTCommand *)command + withOptions:(PFCommandRunningOptions)options; + +/*! + Run command. + + @param command Command to run. + @param options Options to use to run command. + @param cancellationToken Operation to use as a cancellation token. + + @returns `BFTask` with result set to `PFCommandResult`. + */ +- (BFTask *)runCommandAsync:(PFRESTCommand *)command + withOptions:(PFCommandRunningOptions)options + cancellationToken:(nullable BFCancellationToken *)cancellationToken; + +///-------------------------------------- +/// @name File Commands +///-------------------------------------- + +- (BFTask *)runFileUploadCommandAsync:(PFRESTCommand *)command + withContentType:(NSString *)contentType + contentSourceFilePath:(NSString *)sourceFilePath + options:(PFCommandRunningOptions)options + cancellationToken:(nullable BFCancellationToken *)cancellationToken + progressBlock:(nullable PFProgressBlock)progressBlock; + +- (BFTask *)runFileDownloadCommandAsyncWithFileURL:(NSURL *)url + targetFilePath:(NSString *)filePath + cancellationToken:(nullable BFCancellationToken *)cancellationToken + progressBlock:(nullable PFProgressBlock)progressBlock; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunning.m b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunning.m new file mode 100644 index 0000000..6b0c49f --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunning.m @@ -0,0 +1,12 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFCommandRunning.h" + +NSTimeInterval const PFCommandRunningDefaultRetryDelay = 1.0; diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h new file mode 100644 index 0000000..7531fde --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h @@ -0,0 +1,35 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +///-------------------------------------- +/// @name Running +///-------------------------------------- + +extern uint8_t const PFCommandRunningDefaultMaxAttemptsCount; + +///-------------------------------------- +/// @name Headers +///-------------------------------------- + +extern NSString *const PFCommandHeaderNameApplicationId; +extern NSString *const PFCommandHeaderNameClientKey; +extern NSString *const PFCommandHeaderNameClientVersion; +extern NSString *const PFCommandHeaderNameInstallationId; +extern NSString *const PFCommandHeaderNameAppBuildVersion; +extern NSString *const PFCommandHeaderNameAppDisplayVersion; +extern NSString *const PFCommandHeaderNameOSVersion; +extern NSString *const PFCommandHeaderNameSessionToken; + +///-------------------------------------- +/// @name HTTP Method Override +///-------------------------------------- + +extern NSString *const PFCommandParameterNameMethodOverride; diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m new file mode 100644 index 0000000..3ea747f --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m @@ -0,0 +1,23 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFCommandRunningConstants.h" + +uint8_t const PFCommandRunningDefaultMaxAttemptsCount = 5; + +NSString *const PFCommandHeaderNameApplicationId = @"X-Parse-Application-Id"; +NSString *const PFCommandHeaderNameClientKey = @"X-Parse-Client-Key"; +NSString *const PFCommandHeaderNameClientVersion = @"X-Parse-Client-Version"; +NSString *const PFCommandHeaderNameInstallationId = @"X-Parse-Installation-Id"; +NSString *const PFCommandHeaderNameAppBuildVersion = @"X-Parse-App-Build-Version"; +NSString *const PFCommandHeaderNameAppDisplayVersion = @"X-Parse-App-Display-Version"; +NSString *const PFCommandHeaderNameOSVersion = @"X-Parse-OS-Version"; +NSString *const PFCommandHeaderNameSessionToken = @"X-Parse-Session-Token"; + +NSString *const PFCommandParameterNameMethodOverride = @"_method"; diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h new file mode 100644 index 0000000..6583f5b --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h @@ -0,0 +1,50 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "PFDataProvider.h" + +@class PFRESTCommand; + +@interface PFCommandURLRequestConstructor : NSObject + +@property (nonatomic, weak, readonly) id dataSource; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; ++ (instancetype)constructorWithDataSource:(id)dataSource; + +///-------------------------------------- +/// @name Data +///-------------------------------------- + +- (NSURLRequest *)dataURLRequestForCommand:(PFRESTCommand *)command; + +///-------------------------------------- +/// @name File Upload +///-------------------------------------- + +- (NSURLRequest *)fileUploadURLRequestForCommand:(PFRESTCommand *)command + withContentType:(NSString *)contentType + contentSourceFilePath:(NSString *)contentFilePath; + +///-------------------------------------- +/// @name Headers +///-------------------------------------- + ++ (NSDictionary *)defaultURLRequestHeadersForApplicationId:(NSString *)applicationId + clientKey:(NSString *)clientKey + bundle:(NSBundle *)bundle; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m new file mode 100644 index 0000000..b489704 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m @@ -0,0 +1,149 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFCommandURLRequestConstructor.h" + +#import "PFAssert.h" +#import "PFCommandRunningConstants.h" +#import "PFDevice.h" +#import "PFHTTPRequest.h" +#import "PFHTTPURLRequestConstructor.h" +#import "PFInstallationIdentifierStore.h" +#import "PFInternalUtils.h" +#import "PFRESTCommand.h" +#import "PFURLConstructor.h" +#import "Parse_Private.h" + +@implementation PFCommandURLRequestConstructor + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithDataSource:(id)dataSource { + self = [super init]; + if (!self) return nil; + + _dataSource = dataSource; + + return self; +} + ++ (instancetype)constructorWithDataSource:(id)dataSource { + return [[self alloc] initWithDataSource:dataSource]; +} + +///-------------------------------------- +#pragma mark - Data +///-------------------------------------- + +- (NSURLRequest *)dataURLRequestForCommand:(PFRESTCommand *)command { + NSURL *url = [PFURLConstructor URLFromAbsoluteString:[PFInternalUtils parseServerURLString] + path:[NSString stringWithFormat:@"/1/%@", command.httpPath] + query:nil]; + NSDictionary *headers = [self _URLRequestHeadersForCommand:command]; + + NSString *requestMethod = command.httpMethod; + NSDictionary *requestParameters = nil; + if (command.parameters) { + NSDictionary *parameters = nil; + + // The request URI may be too long to include parameters in the URI. + // To avoid this problem we send the parameters in a POST request json-encoded body + // and add a custom parameter that overrides the method in a request. + if ([requestMethod isEqualToString:PFHTTPRequestMethodGET] || + [requestMethod isEqualToString:PFHTTPRequestMethodHEAD] || + [requestMethod isEqualToString:PFHTTPRequestMethodDELETE]) { + NSMutableDictionary *mutableParameters = [command.parameters mutableCopy]; + mutableParameters[PFCommandParameterNameMethodOverride] = command.httpMethod; + + requestMethod = PFHTTPRequestMethodPOST; + parameters = [mutableParameters copy]; + } else { + parameters = command.parameters; + } + requestParameters = [[PFPointerObjectEncoder objectEncoder] encodeObject:parameters]; + } + + return [PFHTTPURLRequestConstructor urlRequestWithURL:url + httpMethod:requestMethod + httpHeaders:headers + parameters:requestParameters]; +} + +///-------------------------------------- +#pragma mark - File +///-------------------------------------- + +- (NSURLRequest *)fileUploadURLRequestForCommand:(PFRESTCommand *)command + withContentType:(NSString *)contentType + contentSourceFilePath:(NSString *)contentFilePath { + NSMutableURLRequest *request = [[self dataURLRequestForCommand:command] mutableCopy]; + + if (contentType) { + [request setValue:contentType forHTTPHeaderField:PFHTTPRequestHeaderNameContentType]; + } + + //TODO (nlutsenko): Check for error here. + NSNumber *fileSize = [PFInternalUtils fileSizeOfFileAtPath:contentFilePath error:nil]; + [request setValue:[fileSize stringValue] forHTTPHeaderField:PFHTTPRequestHeaderNameContentLength]; + + return request; +} + +///-------------------------------------- +#pragma mark - Headers +///-------------------------------------- + ++ (NSDictionary *)defaultURLRequestHeadersForApplicationId:(NSString *)applicationId + clientKey:(NSString *)clientKey + bundle:(NSBundle *)bundle { +#if TARGET_OS_IPHONE + NSString *versionPrefix = @"i"; +#else + NSString *versionPrefix = @"osx"; +#endif + + NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; + + mutableHeaders[PFCommandHeaderNameApplicationId] = applicationId; + mutableHeaders[PFCommandHeaderNameClientKey] = clientKey; + + mutableHeaders[PFCommandHeaderNameClientVersion] = [versionPrefix stringByAppendingString:PARSE_VERSION]; + mutableHeaders[PFCommandHeaderNameOSVersion] = [PFDevice currentDevice].operatingSystemFullVersion; + + // Bundle Version and Display Version can be null, when running tests + NSString *bundleVersion = [bundle objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey]; + if (bundleVersion) { + mutableHeaders[PFCommandHeaderNameAppBuildVersion] = bundleVersion; + } + NSString *displayVersion = [bundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; + if (displayVersion) { + mutableHeaders[PFCommandHeaderNameAppDisplayVersion] = displayVersion; + } + + return [mutableHeaders copy]; +} + +- (NSDictionary *)_URLRequestHeadersForCommand:(PFRESTCommand *)command { + NSMutableDictionary *headers = [NSMutableDictionary dictionary]; + [headers addEntriesFromDictionary:command.additionalRequestHeaders]; + PFInstallationIdentifierStore *installationIdentifierStore = self.dataSource.installationIdentifierStore; + headers[PFCommandHeaderNameInstallationId] = installationIdentifierStore.installationIdentifier; + if (command.sessionToken) { + headers[PFCommandHeaderNameSessionToken] = command.sessionToken; + } + return [headers copy]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h new file mode 100644 index 0000000..7f75dfd --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "PFCommandRunning.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFURLSessionCommandRunner : NSObject + +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m new file mode 100644 index 0000000..d504980 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m @@ -0,0 +1,286 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFURLSessionCommandRunner.h" +#import "PFURLSessionCommandRunner_Private.h" + +#import + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFCommandResult.h" +#import "PFCommandRunningConstants.h" +#import "PFCommandURLRequestConstructor.h" +#import "PFConstants.h" +#import "PFDevice.h" +#import "PFEncoder.h" +#import "PFHTTPRequest.h" +#import "PFHTTPURLRequestConstructor.h" +#import "PFInstallationIdentifierStore.h" +#import "PFInternalUtils.h" +#import "PFLogging.h" +#import "PFMacros.h" +#import "PFRESTCommand.h" +#import "PFURLConstructor.h" +#import "PFURLSession.h" + +@interface PFURLSessionCommandRunner () + +@property (nonatomic, strong) NSNotificationCenter *notificationCenter; + +@end + +@implementation PFURLSessionCommandRunner + +@synthesize applicationId = _applicationId; +@synthesize clientKey = _clientKey; +@synthesize initialRetryDelay = _initialRetryDelay; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithDataSource:(id)dataSource + applicationId:(NSString *)applicationId + clientKey:(NSString *)clientKey { + NSURLSessionConfiguration *configuration = [[self class] _urlSessionConfigurationForApplicationId:applicationId + clientKey:clientKey]; + PFURLSession *session = [PFURLSession sessionWithConfiguration:configuration delegate:self]; + PFCommandURLRequestConstructor *constructor = [PFCommandURLRequestConstructor constructorWithDataSource:dataSource]; + self = [self initWithDataSource:dataSource + session:session + requestConstructor:constructor + notificationCenter:[NSNotificationCenter defaultCenter]]; + if (!self) return nil; + + _applicationId = [applicationId copy]; + _clientKey = [clientKey copy]; + + return self; +} + +- (instancetype)initWithDataSource:(id)dataSource + session:(PFURLSession *)session + requestConstructor:(PFCommandURLRequestConstructor *)requestConstructor + notificationCenter:(NSNotificationCenter *)notificationCenter { + self = [super init]; + if (!self) return nil; + + _initialRetryDelay = PFCommandRunningDefaultRetryDelay; + + _requestConstructor = requestConstructor; + _session = session; + _notificationCenter = notificationCenter; + + return self; +} + ++ (instancetype)commandRunnerWithDataSource:(id)dataSource + applicationId:(NSString *)applicationId + clientKey:(NSString *)clientKey { + return [[self alloc] initWithDataSource:dataSource applicationId:applicationId clientKey:clientKey]; +} + +///-------------------------------------- +#pragma mark - Dealloc +///-------------------------------------- + +- (void)dealloc { + // This is required to call, since session will continue to be present in memory and running otherwise. + [_session invalidateAndCancel]; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (id)dataSource { + return _requestConstructor.dataSource; +} + +///-------------------------------------- +#pragma mark - Data Commands +///-------------------------------------- + +- (BFTask PF_GENERIC(PFCommandResult *)*)runCommandAsync:(PFRESTCommand *)command withOptions:(PFCommandRunningOptions)options { + return [self runCommandAsync:command withOptions:options cancellationToken:nil]; +} + +- (BFTask PF_GENERIC(PFCommandResult *)*)runCommandAsync:(PFRESTCommand *)command + withOptions:(PFCommandRunningOptions)options + cancellationToken:(BFCancellationToken *)cancellationToken { + return [self _performCommandRunningBlock:^id { + [command resolveLocalIds]; + NSURLRequest *request = [self.requestConstructor dataURLRequestForCommand:command]; + return [_session performDataURLRequestAsync:request forCommand:command cancellationToken:cancellationToken]; + } withOptions:options cancellationToken:cancellationToken]; +} + +///-------------------------------------- +#pragma mark - File Commands +///-------------------------------------- + +- (BFTask PF_GENERIC(PFCommandResult *)*)runFileUploadCommandAsync:(PFRESTCommand *)command + withContentType:(NSString *)contentType + contentSourceFilePath:(NSString *)sourceFilePath + options:(PFCommandRunningOptions)options + cancellationToken:(nullable BFCancellationToken *)cancellationToken + progressBlock:(nullable PFProgressBlock)progressBlock { + @weakify(self); + return [self _performCommandRunningBlock:^id { + @strongify(self); + + [command resolveLocalIds]; + NSURLRequest *request = [self.requestConstructor fileUploadURLRequestForCommand:command + withContentType:contentType + contentSourceFilePath:sourceFilePath]; + return [_session performFileUploadURLRequestAsync:request + forCommand:command + withContentSourceFilePath:sourceFilePath + cancellationToken:cancellationToken + progressBlock:progressBlock]; + + } withOptions:options cancellationToken:cancellationToken]; +} + +- (BFTask PF_GENERIC(PFCommandResult *)*)runFileDownloadCommandAsyncWithFileURL:(NSURL *)url + targetFilePath:(NSString *)filePath + cancellationToken:(nullable BFCancellationToken *)cancellationToken + progressBlock:(nullable PFProgressBlock)progressBlock { + return [self _performCommandRunningBlock:^id { + NSURLRequest *request = [NSURLRequest requestWithURL:url]; + return [_session performFileDownloadURLRequestAsync:request + toFileAtPath:filePath + withCancellationToken:cancellationToken + progressBlock:progressBlock]; + } withOptions:PFCommandRunningOptionRetryIfFailed + cancellationToken:cancellationToken]; +} + +///-------------------------------------- +#pragma mark - Retrying +///-------------------------------------- + +- (BFTask *)_performCommandRunningBlock:(nonnull id (^)())block + withOptions:(PFCommandRunningOptions)options + cancellationToken:(BFCancellationToken *)cancellationToken { + if (cancellationToken.cancellationRequested) { + return [BFTask cancelledTask]; + } + + if (!(options & PFCommandRunningOptionRetryIfFailed)) { + return block(); + } + + NSTimeInterval delay = self.initialRetryDelay; // Delay (secs) of next retry attempt + + // Set the initial delay to something between 1 and 2 seconds. We want it to be + // random so that clients that fail simultaneously don't retry on simultaneous + // intervals. + delay += self.initialRetryDelay * ((double)(arc4random() & 0x0FFFF) / (double)0x0FFFF); + return [self _performCommandRunningBlock:block + withCancellationToken:cancellationToken + delay:delay + forAttempts:PFCommandRunningDefaultMaxAttemptsCount]; +} + +- (BFTask *)_performCommandRunningBlock:(nonnull id (^)())block + withCancellationToken:(BFCancellationToken *)cancellationToken + delay:(NSTimeInterval)delay + forAttempts:(NSUInteger)attempts { + @weakify(self); + return [block() continueWithBlock:^id(BFTask *task) { + @strongify(self); + if (task.cancelled) { + return task; + } + + if ([[task.error userInfo][@"temporary"] boolValue] && attempts > 1) { + PFLogError(PFLoggingTagCommon, + @"Network connection failed. Making attempt %lu after sleeping for %f seconds.", + (unsigned long)(PFCommandRunningDefaultMaxAttemptsCount - attempts + 1), (double)delay); + + return [[BFTask taskWithDelay:(int)(delay * 1000)] continueWithBlock:^id(BFTask *task) { + return [self _performCommandRunningBlock:block + withCancellationToken:cancellationToken + delay:delay * 2.0 + forAttempts:attempts - 1]; + } cancellationToken:cancellationToken]; + } + return task; + } cancellationToken:cancellationToken]; +} + +///-------------------------------------- +#pragma mark - NSURLSessionConfiguration +///-------------------------------------- + ++ (NSURLSessionConfiguration *)_urlSessionConfigurationForApplicationId:(NSString *)applicationId + clientKey:(NSString *)clientKey { + NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; + + // No cookies, they are bad for you. + configuration.HTTPCookieAcceptPolicy = NSHTTPCookieAcceptPolicyNever; + configuration.HTTPShouldSetCookies = NO; + + // Completely disable caching of responses for security reasons. + configuration.URLCache = [[NSURLCache alloc] initWithMemoryCapacity:[NSURLCache sharedURLCache].memoryCapacity + diskCapacity:0 + diskPath:nil]; + + NSBundle *bundle = [NSBundle mainBundle]; + NSDictionary *headers = [PFCommandURLRequestConstructor defaultURLRequestHeadersForApplicationId:applicationId + clientKey:clientKey + bundle:bundle]; + configuration.HTTPAdditionalHeaders = headers; + + return configuration; +} + +///-------------------------------------- +#pragma mark - PFURLSessionDelegate +///-------------------------------------- + +- (void)urlSession:(PFURLSession *)session willPerformURLRequest:(NSURLRequest *)request { + [[BFExecutor defaultPriorityBackgroundExecutor] execute:^{ + NSDictionary *userInfo = ([PFLogger sharedLogger].logLevel == PFLogLevelDebug ? + @{ PFNetworkNotificationURLRequestUserInfoKey : request } : nil); + [self.notificationCenter postNotificationName:PFNetworkWillSendURLRequestNotification + object:self + userInfo:userInfo]; + }]; +} + +- (void)urlSession:(PFURLSession *)session +didPerformURLRequest:(NSURLRequest *)request + withURLResponse:(nullable NSURLResponse *)response + responseString:(nullable NSString *)responseString { + [[BFExecutor defaultPriorityBackgroundExecutor] execute:^{ + NSMutableDictionary *userInfo = nil; + if ([PFLogger sharedLogger].logLevel == PFLogLevelDebug) { + userInfo = [NSMutableDictionary dictionaryWithObject:request + forKey:PFNetworkNotificationURLRequestUserInfoKey]; + if (response) { + userInfo[PFNetworkNotificationURLResponseUserInfoKey] = response; + } + if (responseString) { + userInfo[PFNetworkNotificationURLResponseBodyUserInfoKey] = responseString; + } + } + [self.notificationCenter postNotificationName:PFNetworkDidReceiveURLResponseNotification + object:self + userInfo:userInfo]; + }]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h new file mode 100644 index 0000000..e10c6f1 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFURLSessionCommandRunner.h" + +@class PFCommandURLRequestConstructor; +@class PFURLSession; + +NS_ASSUME_NONNULL_BEGIN + +@interface PFURLSessionCommandRunner () + +@property (nonatomic, strong, readonly) PFURLSession *session; +@property (nonatomic, strong, readonly) PFCommandURLRequestConstructor *requestConstructor; + +- (instancetype)initWithDataSource:(id)dataSource + session:(PFURLSession *)session + requestConstructor:(PFCommandURLRequestConstructor *)requestConstructor + notificationCenter:(NSNotificationCenter *)notificationCenter NS_DESIGNATED_INITIALIZER; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h new file mode 100644 index 0000000..ff53d22 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h @@ -0,0 +1,73 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +@class BFCancellationToken; + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFRESTCommand; + +NS_ASSUME_NONNULL_BEGIN + +@class PFURLSession; + +@protocol PFURLSessionDelegate + +- (void)urlSession:(PFURLSession *)session willPerformURLRequest:(NSURLRequest *)request; + +- (void)urlSession:(PFURLSession *)session didPerformURLRequest:(NSURLRequest *)request withURLResponse:(nullable NSURLResponse *)response responseString:(nullable NSString *)string; + +@end + +@interface PFURLSession : NSObject + +@property (nonatomic, weak, readonly) id delegate; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithConfiguration:(NSURLSessionConfiguration *)configuration + delegate:(id)delegate NS_DESIGNATED_INITIALIZER; + ++ (instancetype)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration + delegate:(id)delegate; + +///-------------------------------------- +/// @name Teardown +///-------------------------------------- + +- (void)invalidateAndCancel; + +///-------------------------------------- +/// @name Network Requests +///-------------------------------------- + +- (BFTask *)performDataURLRequestAsync:(NSURLRequest *)request + forCommand:(PFRESTCommand *)command + cancellationToken:(nullable BFCancellationToken *)cancellationToken; + +- (BFTask *)performFileUploadURLRequestAsync:(NSURLRequest *)request + forCommand:(PFRESTCommand *)command + withContentSourceFilePath:(NSString *)sourceFilePath + cancellationToken:(nullable BFCancellationToken *)cancellationToken + progressBlock:(nullable PFProgressBlock)progressBlock; + +- (BFTask *)performFileDownloadURLRequestAsync:(NSURLRequest *)request + toFileAtPath:(NSString *)filePath + withCancellationToken:(nullable BFCancellationToken *)cancellationToken + progressBlock:(nullable PFProgressBlock)progressBlock; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m new file mode 100644 index 0000000..9934f47 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m @@ -0,0 +1,264 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFURLSession.h" +#import "PFURLSession_Private.h" + +#import + +#import "BFTask+Private.h" +#import "PFCommandResult.h" +#import "PFMacros.h" +#import "PFAssert.h" +#import "PFURLSessionJSONDataTaskDelegate.h" +#import "PFURLSessionUploadTaskDelegate.h" +#import "PFURLSessionFileDownloadTaskDelegate.h" + +typedef void (^PFURLSessionTaskCompletionHandler)(NSData *data, NSURLResponse *response, NSError *error); + +@interface PFURLSession () { + dispatch_queue_t _sessionTaskQueue; + NSURLSession *_urlSession; + NSMutableDictionary *_delegatesDictionary; + dispatch_queue_t _delegatesAccessQueue; +} + +@end + +@implementation PFURLSession + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithConfiguration:(NSURLSessionConfiguration *)configuration + delegate:(id)delegate { + // NOTE: cast to id suppresses warning about designated initializer. + return [(id)self initWithURLSession:[NSURLSession sessionWithConfiguration:configuration + delegate:self + delegateQueue:nil] + delegate:delegate]; +} + +- (instancetype)initWithURLSession:(NSURLSession *)session + delegate:(id)delegate { + self = [super init]; + if (!self) return nil; + + _delegate = delegate; + _urlSession = session; + + _sessionTaskQueue = dispatch_queue_create("com.parse.urlSession.tasks", DISPATCH_QUEUE_SERIAL); + + _delegatesDictionary = [NSMutableDictionary dictionary]; + _delegatesAccessQueue = dispatch_queue_create("com.parse.urlSession.delegates", DISPATCH_QUEUE_CONCURRENT); + + return self; +} + ++ (instancetype)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration + delegate:(id)delegate { + return [[self alloc] initWithConfiguration:configuration delegate:delegate]; +} + ++ (instancetype)sessionWithURLSession:(nonnull NSURLSession *)session + delegate:(id)delegate { + return [[self alloc] initWithURLSession:session delegate:delegate]; +} + +///-------------------------------------- +#pragma mark - Teardown +///-------------------------------------- + +- (void)invalidateAndCancel { + [_urlSession invalidateAndCancel]; +} + +///-------------------------------------- +#pragma mark - Network Requests +///-------------------------------------- + +- (BFTask *)performDataURLRequestAsync:(NSURLRequest *)request + forCommand:(PFRESTCommand *)command + cancellationToken:(BFCancellationToken *)cancellationToken { + if (cancellationToken.cancellationRequested) { + return [BFTask cancelledTask]; + } + + @weakify(self); + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + @strongify(self); + if (cancellationToken.cancellationRequested) { + return [BFTask cancelledTask]; + } + + __block NSURLSessionDataTask *task = nil; + dispatch_sync(_sessionTaskQueue, ^{ + task = [_urlSession dataTaskWithRequest:request]; + }); + PFURLSessionDataTaskDelegate *delegate = [PFURLSessionJSONDataTaskDelegate taskDelegateForDataTask:task + withCancellationToken:cancellationToken]; + return [self _performDataTask:task withDelegate:delegate]; + }]; +} + +- (BFTask *)performFileUploadURLRequestAsync:(NSURLRequest *)request + forCommand:(PFRESTCommand *)command + withContentSourceFilePath:(NSString *)sourceFilePath + cancellationToken:(BFCancellationToken *)cancellationToken + progressBlock:(PFProgressBlock)progressBlock { + if (cancellationToken.cancellationRequested) { + return [BFTask cancelledTask]; + } + + @weakify(self); + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + @strongify(self); + if (cancellationToken.cancellationRequested) { + return [BFTask cancelledTask]; + } + + __block NSURLSessionDataTask *task = nil; + dispatch_sync(_sessionTaskQueue, ^{ + task = [_urlSession uploadTaskWithRequest:request fromFile:[NSURL fileURLWithPath:sourceFilePath]]; + }); + PFURLSessionUploadTaskDelegate *delegate = [PFURLSessionUploadTaskDelegate taskDelegateForDataTask:task + withCancellationToken:cancellationToken + uploadProgressBlock:progressBlock]; + return [self _performDataTask:task withDelegate:delegate]; + }]; +} + +- (BFTask *)performFileDownloadURLRequestAsync:(NSURLRequest *)request + toFileAtPath:(NSString *)filePath + withCancellationToken:(nullable BFCancellationToken *)cancellationToken + progressBlock:(nullable PFProgressBlock)progressBlock { + if (cancellationToken.cancellationRequested) { + return [BFTask cancelledTask]; + } + + @weakify(self); + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + @strongify(self); + if (cancellationToken.cancellationRequested) { + return [BFTask cancelledTask]; + } + + __block NSURLSessionDataTask *task = nil; + dispatch_sync(_sessionTaskQueue, ^{ + task = [_urlSession dataTaskWithRequest:request]; + }); + PFURLSessionFileDownloadTaskDelegate *delegate = [PFURLSessionFileDownloadTaskDelegate taskDelegateForDataTask:task + withCancellationToken:cancellationToken + targetFilePath:filePath + progressBlock:progressBlock]; + return [self _performDataTask:task withDelegate:delegate]; + }]; +} + +- (BFTask *)_performDataTask:(NSURLSessionDataTask *)dataTask withDelegate:(PFURLSessionDataTaskDelegate *)delegate { + [self.delegate urlSession:self willPerformURLRequest:dataTask.originalRequest]; + + @weakify(self); + return [BFTask taskFromExecutor:[BFExecutor defaultExecutor] withBlock:^id{ + @strongify(self); + NSNumber *taskIdentifier = @(dataTask.taskIdentifier); + [self setDelegate:delegate forDataTask:dataTask]; + + BFTask *resultTask = [delegate.resultTask continueWithBlock:^id(BFTask *task) { + @strongify(self); + [self.delegate urlSession:self + didPerformURLRequest:dataTask.originalRequest + withURLResponse:delegate.response + responseString:delegate.responseString]; + + [self _removeDelegateForTaskWithIdentifier:taskIdentifier]; + return task; + }]; + [dataTask resume]; + + return resultTask; + }]; +} + +///-------------------------------------- +#pragma mark - Private +///-------------------------------------- + +- (PFURLSessionDataTaskDelegate *)_taskDelegateForDataTask:(NSURLSessionDataTask *)task { + __block PFURLSessionDataTaskDelegate *delegate = nil; + dispatch_sync(_delegatesAccessQueue, ^{ + delegate = _delegatesDictionary[@(task.taskIdentifier)]; + }); + return delegate; +} + +- (void)setDelegate:(PFURLSessionDataTaskDelegate *)delegate forDataTask:(NSURLSessionDataTask *)task { + dispatch_barrier_async(_delegatesAccessQueue, ^{ + _delegatesDictionary[@(task.taskIdentifier)] = delegate; + }); +} + +- (void)_removeDelegateForTaskWithIdentifier:(NSNumber *)identifier { + dispatch_barrier_async(_delegatesAccessQueue, ^{ + [_delegatesDictionary removeObjectForKey:identifier]; + }); +} + +///-------------------------------------- +#pragma mark - NSURLSessionTaskDelegate +///-------------------------------------- + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionDataTask *)task + didSendBodyData:(int64_t)bytesSent + totalBytesSent:(int64_t)totalBytesSent +totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend { + PFURLSessionDataTaskDelegate *delegate = [self _taskDelegateForDataTask:task]; + [delegate URLSession:session + task:task + didSendBodyData:bytesSent + totalBytesSent:totalBytesSent +totalBytesExpectedToSend:totalBytesExpectedToSend]; +} + +- (void)URLSession:(NSURLSession *)session task:(NSURLSessionDataTask *)task didCompleteWithError:(NSError *)error { + PFURLSessionDataTaskDelegate *delegate = [self _taskDelegateForDataTask:task]; + [delegate URLSession:session task:task didCompleteWithError:error]; +} + +///-------------------------------------- +#pragma mark - NSURLSessionDataDelegate +///-------------------------------------- + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask +didReceiveResponse:(NSURLResponse *)response + completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler { + PFURLSessionDataTaskDelegate *delegate = [self _taskDelegateForDataTask:dataTask]; + [delegate URLSession:session dataTask:dataTask didReceiveResponse:response completionHandler:completionHandler]; +} + +- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { + PFURLSessionDataTaskDelegate *delegate = [self _taskDelegateForDataTask:dataTask]; + [delegate URLSession:session dataTask:dataTask didReceiveData:data]; +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask + willCacheResponse:(NSCachedURLResponse *)proposedResponse + completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler { + completionHandler(nil); // Prevent any caching for security reasons +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h new file mode 100644 index 0000000..1f047ac --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h @@ -0,0 +1,24 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFURLSession.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFURLSession () + +- (instancetype)initWithURLSession:(NSURLSession *)session + delegate:(id)delegate NS_DESIGNATED_INITIALIZER; + ++ (instancetype)sessionWithURLSession:(NSURLSession *)session + delegate:(id)delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h new file mode 100644 index 0000000..a1f8ca9 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +@class BFCancellationToken; + +@class BFTask PF_GENERIC(__covariant BFGenericType); + +NS_ASSUME_NONNULL_BEGIN + +@interface PFURLSessionDataTaskDelegate : NSObject + +@property (nonatomic, strong, readonly) NSURLSessionDataTask *dataTask; +@property (nonatomic, strong, readonly) BFTask *resultTask; + +@property (nonatomic, strong, readonly) NSHTTPURLResponse *response; +@property (nullable, nonatomic, copy, readonly) NSString *responseString; + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initForDataTask:(NSURLSessionDataTask *)dataTask + withCancellationToken:(nullable BFCancellationToken *)cancellationToken NS_DESIGNATED_INITIALIZER; + ++ (instancetype)taskDelegateForDataTask:(NSURLSessionDataTask *)dataTask + withCancellationToken:(nullable BFCancellationToken *)cancellationToken; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m new file mode 100644 index 0000000..f81e9d6 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m @@ -0,0 +1,180 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFURLSessionDataTaskDelegate.h" +#import "PFURLSessionDataTaskDelegate_Private.h" + +#import +#import + +#import "PFAssert.h" +#import "PFMacros.h" + +@interface PFURLSessionDataTaskDelegate () { + BFTaskCompletionSource *_taskCompletionSource; +} + +@end + +@implementation PFURLSessionDataTaskDelegate + +@synthesize dataOutputStream = _dataOutputStream; +@synthesize downloadedBytes = _downloadedBytes; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initForDataTask:(NSURLSessionDataTask *)dataTask + withCancellationToken:(BFCancellationToken *)cancellationToken { + self = [super init]; + if (!self) return nil; + + _taskCompletionSource = [BFTaskCompletionSource taskCompletionSource]; + + _dataTask = dataTask; + @weakify(self); + [cancellationToken registerCancellationObserverWithBlock:^{ + @strongify(self); + [self _cancel]; + }]; + + return self; +} + ++ (instancetype)taskDelegateForDataTask:(NSURLSessionDataTask *)dataTask + withCancellationToken:(nullable BFCancellationToken *)cancellationToken { + return [[self alloc] initForDataTask:dataTask withCancellationToken:cancellationToken]; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (BFTask *)resultTask { + return _taskCompletionSource.task; +} + +- (NSOutputStream *)dataOutputStream { + if (!_dataOutputStream) { + _dataOutputStream = [NSOutputStream outputStreamToMemory]; + } + return _dataOutputStream; +} + +///-------------------------------------- +#pragma mark - Task +///-------------------------------------- + +- (void)_taskDidFinish { + [self _closeDataOutputStream]; + if (self.error) { + [_taskCompletionSource trySetError:self.error]; + } else { + [_taskCompletionSource trySetResult:self.result]; + } +} + +- (void)_taskDidCancel { + [self _closeDataOutputStream]; + [_taskCompletionSource trySetCancelled]; +} + +- (void)_cancel { + [self.dataTask cancel]; +} + +///-------------------------------------- +#pragma mark - Stream +///-------------------------------------- + +- (void)_openDataOutputStream { + [self.dataOutputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; + [self.dataOutputStream open]; +} + +- (void)_writeDataOutputStreamData:(NSData *)data { + NSInteger length = [data length]; + while (YES) { + NSInteger bytesWritten = 0; + if ([self.dataOutputStream hasSpaceAvailable]) { + const uint8_t *dataBuffer = (uint8_t *)[data bytes]; + + NSInteger numberOfBytesWritten = 0; + while (bytesWritten < length) { + numberOfBytesWritten = [self.dataOutputStream write:&dataBuffer[bytesWritten] + maxLength:(length - bytesWritten)]; + if (numberOfBytesWritten == -1) { + break; + } + + bytesWritten += numberOfBytesWritten; + } + break; + } + + if (self.dataOutputStream.streamError) { + [self.dataTask cancel]; + self.error = self.dataOutputStream.streamError; + // Don't finish the delegate here, as we will finish when NSURLSessionTask calls back about cancellation. + return; + } + } + _downloadedBytes += length; +} + +- (void)_closeDataOutputStream { + [self.dataOutputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; + [self.dataOutputStream close]; +} + +///-------------------------------------- +#pragma mark - NSURLSessionTaskDelegate +///-------------------------------------- + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task + didSendBodyData:(int64_t)bytesSent + totalBytesSent:(int64_t)totalBytesSent +totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend { + // No-op, we don't care about progress here. +} + +- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { + if ([error.domain isEqualToString:NSURLErrorDomain] && error.code == NSURLErrorCancelled) { + [self _taskDidCancel]; + } else { + self.error = self.error ?: error; + [self _taskDidFinish]; + } +} + +///-------------------------------------- +#pragma mark - NSURLSessionDataDelegate +///-------------------------------------- + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask +didReceiveResponse:(NSURLResponse *)response + completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler { + _response = (NSHTTPURLResponse *)response; + [self _openDataOutputStream]; + + completionHandler(NSURLSessionResponseAllow); +} + +- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { + [self _writeDataOutputStreamData:data]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h new file mode 100644 index 0000000..030d4f0 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h @@ -0,0 +1,34 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFURLSessionDataTaskDelegate.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFURLSessionDataTaskDelegate () + +@property (nonatomic, strong, readonly) dispatch_queue_t dataQueue; + +/*! + @abstract Defaults to to-memory output stream if not overwritten. + */ +@property (nonatomic, strong, readonly) NSOutputStream *dataOutputStream; +@property (nonatomic, assign, readonly) uint64_t downloadedBytes; + +@property (nullable, nonatomic, strong) id result; +@property (nullable, nonatomic, strong) NSError *error; + +@property (nullable, nonatomic, copy, readwrite) NSString *responseString; + +- (void)_taskDidFinish NS_REQUIRES_SUPER; +- (void)_taskDidCancel NS_REQUIRES_SUPER; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h new file mode 100644 index 0000000..918e1b5 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h @@ -0,0 +1,35 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFURLSessionDataTaskDelegate.h" + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface PFURLSessionFileDownloadTaskDelegate : PFURLSessionDataTaskDelegate + +@property (nonatomic, copy, readonly) NSString *targetFilePath; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initForDataTask:(NSURLSessionDataTask *)dataTask + withCancellationToken:(nullable BFCancellationToken *)cancellationToken + targetFilePath:(NSString *)targetFilePath + progressBlock:(nullable PFProgressBlock)progressBlock; ++ (instancetype)taskDelegateForDataTask:(NSURLSessionDataTask *)dataTask + withCancellationToken:(nullable BFCancellationToken *)cancellationToken + targetFilePath:(NSString *)targetFilePath + progressBlock:(nullable PFProgressBlock)progressBlock; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m new file mode 100644 index 0000000..d770267 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m @@ -0,0 +1,101 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFURLSessionFileDownloadTaskDelegate.h" + +#import "PFErrorUtilities.h" +#import "PFHash.h" +#import "PFURLSessionDataTaskDelegate_Private.h" + +@interface PFURLSessionFileDownloadTaskDelegate () { + NSOutputStream *_fileDataOutputStream; + PFProgressBlock _progressBlock; +} + +@end + +@implementation PFURLSessionFileDownloadTaskDelegate + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initForDataTask:(NSURLSessionDataTask *)dataTask + withCancellationToken:(BFCancellationToken *)cancellationToken + targetFilePath:(NSString *)targetFilePath + progressBlock:(PFProgressBlock)progressBlock { + self = [super initForDataTask:dataTask withCancellationToken:cancellationToken]; + if (!self) return nil; + + _targetFilePath = targetFilePath; + _fileDataOutputStream = [NSOutputStream outputStreamToFileAtPath:_targetFilePath append:NO]; + _progressBlock = progressBlock; + + return self; +} + ++ (instancetype)taskDelegateForDataTask:(NSURLSessionDataTask *)dataTask + withCancellationToken:(BFCancellationToken *)cancellationToken + targetFilePath:(NSString *)targetFilePath + progressBlock:(PFProgressBlock)progressBlock { + return [[self alloc] initForDataTask:dataTask + withCancellationToken:cancellationToken + targetFilePath:targetFilePath + progressBlock:progressBlock]; +} + +///-------------------------------------- +#pragma mark - Progress +///-------------------------------------- + +- (void)_reportProgress { + if (!_progressBlock) { + return; + } + + int progress = (int)(self.downloadedBytes / (CGFloat)self.response.expectedContentLength * 100); + _progressBlock(progress); +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (NSOutputStream *)dataOutputStream { + return _fileDataOutputStream; +} + +///-------------------------------------- +#pragma mark - Task +///-------------------------------------- + +- (void)_taskDidFinish { + if (self.error) { + // TODO: (nlutsenko) Unify this with code from PFURLSessionJSONDataTaskDelegate + NSMutableDictionary *errorDictionary = [NSMutableDictionary dictionary]; + errorDictionary[@"code"] = @(kPFErrorConnectionFailed); + errorDictionary[@"error"] = [self.error localizedDescription]; + errorDictionary[@"originalError"] = self.error; + errorDictionary[NSUnderlyingErrorKey] = self.error; + errorDictionary[@"temporary"] = @(self.response.statusCode >= 500 || self.response.statusCode < 400); + self.error = [PFErrorUtilities errorFromResult:errorDictionary]; + } + [super _taskDidFinish]; +} + +///-------------------------------------- +#pragma mark - NSURLSessionDataDelegate +///-------------------------------------- + +- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { + [super URLSession:session dataTask:dataTask didReceiveData:data]; + [self _reportProgress]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h new file mode 100644 index 0000000..66a06d1 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h @@ -0,0 +1,20 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "PFURLSessionDataTaskDelegate.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFURLSessionJSONDataTaskDelegate : PFURLSessionDataTaskDelegate + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m new file mode 100644 index 0000000..f10eac3 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m @@ -0,0 +1,90 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFURLSessionJSONDataTaskDelegate.h" + +#import +#import +#import + +#import "PFCommandResult.h" +#import "PFConstants.h" +#import "PFErrorUtilities.h" +#import "PFMacros.h" +#import "PFURLSessionDataTaskDelegate_Private.h" + +@interface PFURLSessionJSONDataTaskDelegate () + +@end + +@implementation PFURLSessionJSONDataTaskDelegate + +///-------------------------------------- +#pragma mark - Private +///-------------------------------------- + +- (void)_taskDidFinish { + NSData *data = [self.dataOutputStream propertyForKey:NSStreamDataWrittenToMemoryStreamKey]; + + id result = nil; + + NSError *jsonError = nil; + if (data) { + self.responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + result = [NSJSONSerialization JSONObjectWithData:data + options:0 + error:&jsonError]; + + if (jsonError && !self.error) { + self.error = jsonError; + [super _taskDidFinish]; + return; + } + } + + if (self.error) { + NSMutableDictionary *errorDictionary = [NSMutableDictionary dictionary]; + errorDictionary[@"code"] = @(kPFErrorConnectionFailed); + errorDictionary[@"originalError"] = self.error; + errorDictionary[NSUnderlyingErrorKey] = self.error; + errorDictionary[@"temporary"] = @(self.response.statusCode >= 500 || self.response.statusCode < 400); + + NSString *description = [self.error localizedDescription] ?: [self.error localizedFailureReason]; + if (description) { + errorDictionary[@"error"] = description; + } + + self.error = [PFErrorUtilities errorFromResult:errorDictionary]; + [super _taskDidFinish]; + return; + } + + if (self.response.statusCode >= 200) { + if (self.response.statusCode < 400) { + PFCommandResult *commandResult = [PFCommandResult commandResultWithResult:result + resultString:self.responseString + httpResponse:self.response]; + self.result = commandResult; + } else if ([result isKindOfClass:[NSDictionary class]]) { + NSDictionary *resultDictionary = (NSDictionary *)result; + if (resultDictionary[@"error"]) { + NSMutableDictionary *errorDictionary = [NSMutableDictionary dictionaryWithDictionary:resultDictionary]; + errorDictionary[@"temporary"] = @(self.response.statusCode >= 500 || self.response.statusCode < 400); + self.error = [PFErrorUtilities errorFromResult:errorDictionary]; + } + } + } + + if (!self.result && !self.error) { + self.error = [PFErrorUtilities errorWithCode:kPFErrorInternalServer message:self.responseString]; + } + [super _taskDidFinish]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h new file mode 100644 index 0000000..d08225f --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFURLSessionJSONDataTaskDelegate.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFURLSessionUploadTaskDelegate : PFURLSessionJSONDataTaskDelegate + +- (instancetype)initForDataTask:(NSURLSessionDataTask *)dataTask + withCancellationToken:(nullable BFCancellationToken *)cancellationToken + uploadProgressBlock:(nullable PFProgressBlock)progressBlock; ++ (instancetype)taskDelegateForDataTask:(NSURLSessionDataTask *)dataTask + withCancellationToken:(nullable BFCancellationToken *)cancellationToken + uploadProgressBlock:(nullable PFProgressBlock)progressBlock; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m new file mode 100644 index 0000000..8cf9698 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m @@ -0,0 +1,56 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFURLSessionUploadTaskDelegate.h" + +@implementation PFURLSessionUploadTaskDelegate { + __nullable PFProgressBlock _progressBlock; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initForDataTask:(NSURLSessionDataTask *)dataTask + withCancellationToken:(nullable BFCancellationToken *)cancellationToken + uploadProgressBlock:(nullable PFProgressBlock)progressBlock { + self = [self initForDataTask:dataTask withCancellationToken:cancellationToken]; + if (!self) return nil; + + _progressBlock = [progressBlock copy]; + + return self; +} + ++ (instancetype)taskDelegateForDataTask:(NSURLSessionDataTask *)dataTask + withCancellationToken:(nullable BFCancellationToken *)cancellationToken + uploadProgressBlock:(nullable PFProgressBlock)progressBlock { + return [[self alloc] initForDataTask:dataTask + withCancellationToken:cancellationToken + uploadProgressBlock:progressBlock]; +} + +///-------------------------------------- +#pragma mark - NSURLSessionTaskDelegate +///-------------------------------------- + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task + didSendBodyData:(int64_t)bytesSent + totalBytesSent:(int64_t)totalBytesSent +totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend { + int progress = (int)round(totalBytesSent / (CGFloat)totalBytesExpectedToSend * 100); + dispatch_async(dispatch_get_main_queue(), ^{ + if (_progressBlock) { + _progressBlock(progress); + } + }); +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTAnalyticsCommand.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTAnalyticsCommand.h new file mode 100644 index 0000000..585b141 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTAnalyticsCommand.h @@ -0,0 +1,31 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTCommand.h" + +NS_ASSUME_NONNULL_BEGIN + +extern NSString *const PFRESTAnalyticsEventNameAppOpened; +extern NSString *const PFRESTAnalyticsEventNameCrashReport; + +@interface PFRESTAnalyticsCommand : PFRESTCommand + ++ (instancetype)trackAppOpenedEventCommandWithPushHash:(nullable NSString *)pushHash + sessionToken:(nullable NSString *)sessionToken; + ++ (instancetype)trackEventCommandWithEventName:(NSString *)eventName + dimensions:(nullable NSDictionary *)dimensions + sessionToken:(nullable NSString *)sessionToken; + ++ (instancetype)trackCrashReportCommandWithBreakpadDumpParameters:(NSDictionary *)parameters + sessionToken:(nullable NSString *)sessionToken; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTAnalyticsCommand.m b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTAnalyticsCommand.m new file mode 100644 index 0000000..6badd35 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTAnalyticsCommand.m @@ -0,0 +1,61 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTAnalyticsCommand.h" + +#import "PFHTTPRequest.h" + +/** + * Predefined events - AppOpened, CrashReport + * Coming soon - Log, ... + */ +NSString *const PFRESTAnalyticsEventNameAppOpened = @"AppOpened"; +NSString *const PFRESTAnalyticsEventNameCrashReport = @"_CrashReport"; + +@implementation PFRESTAnalyticsCommand + ++ (instancetype)trackAppOpenedEventCommandWithPushHash:(NSString *)pushHash + sessionToken:(NSString *)sessionToken { + NSDictionary *parameters = (pushHash ? @{ @"push_hash" : pushHash } : nil); + return [self _trackEventCommandWithEventName:PFRESTAnalyticsEventNameAppOpened + parameters:parameters + sessionToken:sessionToken]; +} + ++ (instancetype)trackEventCommandWithEventName:(NSString *)eventName + dimensions:(NSDictionary *)dimensions + sessionToken:(NSString *)sessionToken { + NSDictionary *parameters = (dimensions ? @{ @"dimensions" : dimensions } : nil); + return [self _trackEventCommandWithEventName:eventName parameters:parameters sessionToken:sessionToken]; +} + ++ (instancetype)trackCrashReportCommandWithBreakpadDumpParameters:(NSDictionary *)parameters + sessionToken:(NSString *)sessionToken { + return [self _trackEventCommandWithEventName:PFRESTAnalyticsEventNameCrashReport + parameters:@{ @"breakpadDump" : parameters } + sessionToken:sessionToken]; +} + ++ (instancetype)_trackEventCommandWithEventName:(NSString *)eventName + parameters:(NSDictionary *)parameters + sessionToken:(NSString *)sessionToken { + NSString *httpPath = [NSString stringWithFormat:@"events/%@", eventName]; + + NSMutableDictionary *dictionary = (parameters ? [parameters mutableCopy] : [NSMutableDictionary dictionary]); + if (!dictionary[@"at"]) { + dictionary[@"at"] = [NSDate date]; + } + + return [self commandWithHTTPPath:httpPath + httpMethod:PFHTTPRequestMethodPOST + parameters:dictionary + sessionToken:sessionToken]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTCloudCommand.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTCloudCommand.h new file mode 100644 index 0000000..b15bf7a --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTCloudCommand.h @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTCommand.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFRESTCloudCommand : PFRESTCommand + ++ (instancetype)commandForFunction:(NSString *)function + withParameters:(nullable NSDictionary *)parameters + sessionToken:(nullable NSString *)sessionToken; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTCloudCommand.m b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTCloudCommand.m new file mode 100644 index 0000000..5bd85a9 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTCloudCommand.m @@ -0,0 +1,27 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTCloudCommand.h" + +#import "PFAssert.h" +#import "PFHTTPRequest.h" + +@implementation PFRESTCloudCommand + ++ (instancetype)commandForFunction:(NSString *)function + withParameters:(NSDictionary *)parameters + sessionToken:(NSString *)sessionToken { + NSString *path = [NSString stringWithFormat:@"functions/%@", function]; + return [self commandWithHTTPPath:path + httpMethod:PFHTTPRequestMethodPOST + parameters:parameters + sessionToken:sessionToken]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTCommand.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTCommand.h new file mode 100644 index 0000000..0e6ad3e --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTCommand.h @@ -0,0 +1,45 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "PFNetworkCommand.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFRESTCommand : NSObject + +@property (nonatomic, copy, readonly) NSString *httpPath; +@property (nonatomic, copy, readonly) NSString *httpMethod; + +@property (nullable, nonatomic, copy, readonly) NSDictionary *parameters; +@property (nullable, nonatomic, copy) NSDictionary *additionalRequestHeaders; + +@property (nonatomic, copy, readonly) NSString *cacheKey; + +@property (nullable, nonatomic, copy) NSString *localId; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + ++ (instancetype)commandWithHTTPPath:(NSString *)path + httpMethod:(NSString *)httpMethod + parameters:(nullable NSDictionary *)parameters + sessionToken:(nullable NSString *)sessionToken; + ++ (instancetype)commandWithHTTPPath:(NSString *)path + httpMethod:(NSString *)httpMethod + parameters:(nullable NSDictionary *)parameters + operationSetUUID:(nullable NSString *)operationSetIdentifier + sessionToken:(nullable NSString *)sessionToken; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTCommand.m b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTCommand.m new file mode 100644 index 0000000..b9460fa --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTCommand.m @@ -0,0 +1,230 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTCommand.h" +#import "PFRESTCommand_Private.h" + +#import "PFAssert.h" +#import "PFCoreManager.h" +#import "PFFieldOperation.h" +#import "PFHTTPRequest.h" +#import "PFHash.h" +#import "PFInternalUtils.h" +#import "PFObjectLocalIdStore.h" +#import "PFObjectPrivate.h" +#import "Parse_Private.h" + +static NSString *const PFRESTCommandHTTPPathEncodingKey = @"httpPath"; +static NSString *const PFRESTCommandHTTPMethodEncodingKey = @"httpMethod"; +static NSString *const PFRESTCommandParametersEncodingKey = @"parameters"; +static NSString *const PFRESTCommandSessionTokenEncodingKey = @"sessionToken"; +static NSString *const PFRESTCommandLocalIdEncodingKey = @"localId"; + +// Increment this when you change the format of cache values. +static const int PFRESTCommandCacheKeyVersion = 1; + +@implementation PFRESTCommand + +@synthesize sessionToken = _sessionToken; +@synthesize operationSetUUID = _operationSetUUID; +@synthesize localId = _localId; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + ++ (instancetype)commandWithHTTPPath:(NSString *)path + httpMethod:(NSString *)httpMethod + parameters:(NSDictionary *)parameters + sessionToken:(NSString *)sessionToken { + return [self commandWithHTTPPath:path + httpMethod:httpMethod + parameters:parameters + operationSetUUID:nil + sessionToken:sessionToken]; +} + ++ (instancetype)commandWithHTTPPath:(NSString *)path + httpMethod:(NSString *)httpMethod + parameters:(NSDictionary *)parameters + operationSetUUID:(NSString *)operationSetIdentifier + sessionToken:(NSString *)sessionToken { + PFRESTCommand *command = [[self alloc] init]; + command.httpPath = path; + command.httpMethod = httpMethod; + command.parameters = parameters; + command.operationSetUUID = operationSetIdentifier; + command.sessionToken = sessionToken; + return command; +} + +///-------------------------------------- +#pragma mark - CacheKey +///-------------------------------------- + +- (NSString *)cacheKey { + if (_cacheKey) { + return _cacheKey; + } + + NSMutableDictionary *cacheParameters = [NSMutableDictionary dictionaryWithCapacity:2]; + if (self.parameters) { + cacheParameters[PFRESTCommandParametersEncodingKey] = self.parameters; + } + if (self.sessionToken) { + cacheParameters[PFRESTCommandSessionTokenEncodingKey] = self.sessionToken; + } + + NSString *parametersCacheKey = [PFInternalUtils cacheKeyForObject:cacheParameters]; + + _cacheKey = [NSString stringWithFormat:@"PFRESTCommand.%i.%@.%@.%ld.%@", + PFRESTCommandCacheKeyVersion, self.httpMethod, PFMD5HashFromString(self.httpPath), + // We use MD5 instead of native hash because it collides too much. + (long)PARSE_API_VERSION, PFMD5HashFromString(parametersCacheKey)]; + return _cacheKey; +} + +///-------------------------------------- +#pragma mark - PFNetworkCommand +///-------------------------------------- + +#pragma mark Encoding/Decoding + ++ (instancetype)commandFromDictionaryRepresentation:(NSDictionary *)dictionary { + if (![self isValidDictionaryRepresentation:dictionary]) { + return nil; + } + + PFRESTCommand *command = [self commandWithHTTPPath:dictionary[PFRESTCommandHTTPPathEncodingKey] + httpMethod:dictionary[PFRESTCommandHTTPMethodEncodingKey] + parameters:dictionary[PFRESTCommandParametersEncodingKey] + sessionToken:dictionary[PFRESTCommandSessionTokenEncodingKey]]; + command.localId = dictionary[PFRESTCommandLocalIdEncodingKey]; + return command; +} + +- (NSDictionary *)dictionaryRepresentation { + NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; + if (self.httpPath) { + dictionary[PFRESTCommandHTTPPathEncodingKey] = self.httpPath; + } + if (self.httpMethod) { + dictionary[PFRESTCommandHTTPMethodEncodingKey] = self.httpMethod; + } + if (self.parameters) { + NSDictionary *parameters = [[PFPointerOrLocalIdObjectEncoder objectEncoder] encodeObject:self.parameters]; + dictionary[PFRESTCommandParametersEncodingKey] = parameters; + } + if (self.sessionToken) { + dictionary[PFRESTCommandSessionTokenEncodingKey] = self.sessionToken; + } + if (self.localId) { + dictionary[PFRESTCommandLocalIdEncodingKey] = self.localId; + } + return [dictionary copy]; +} + ++ (BOOL)isValidDictionaryRepresentation:(NSDictionary *)dictionary { + return dictionary[PFRESTCommandHTTPPathEncodingKey] != nil; +} + +#pragma mark Local Identifiers + +/*! + If this was the second save on a new object while offline, then its objectId + wasn't yet set when the command was created, so it would have been considered a + "create". But if the first save succeeded, then there is an objectId now, and it + will be mapped to the localId for this command's result. If so, change the + "create" operation to an "update", and add the objectId to the command. + */ +- (void)maybeChangeServerOperation { + if (self.localId) { + NSString *objectId = [[Parse _currentManager].coreManager.objectLocalIdStore objectIdForLocalId:self.localId]; + if (objectId) { + self.localId = nil; + + NSArray *components = [self.httpPath pathComponents]; + if ([components count] == 2) { + self.httpPath = [NSString pathWithComponents:[components arrayByAddingObject:objectId]]; + } + + if ([self.httpPath hasPrefix:@"classes"] && + [self.httpMethod isEqualToString:PFHTTPRequestMethodPOST]) { + self.httpMethod = PFHTTPRequestMethodPUT; + } + } + + PFConsistencyAssert(![self.httpMethod isEqualToString:PFHTTPRequestMethodDELETE] || objectId, + @"Attempt to delete non-existent object."); + } +} + ++ (BOOL)forEachLocalIdIn:(id)object doBlock:(BOOL(^)(PFObject *pointer))block { + __block BOOL modified = NO; + + // If this is a Pointer with a local id, try to resolve it. + if ([object isKindOfClass:[PFObject class]] && !((PFObject *)object).objectId) { + return block(object); + } + + if ([object isKindOfClass:[NSDictionary class]]) { + [object enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) { + if ([[self class] forEachLocalIdIn:obj doBlock:block]) { + modified = YES; + } + }]; + } else if ([object isKindOfClass:[NSArray class]]) { + for (id value in object) { + if ([[self class] forEachLocalIdIn:value doBlock:block]) { + modified = YES; + } + } + } else if ([object isKindOfClass:[PFAddOperation class]]) { + for (id value in ((PFAddOperation *)object).objects) { + if ([[self class] forEachLocalIdIn:value doBlock:block]) { + modified = YES; + } + } + } else if ([object isKindOfClass:[PFAddUniqueOperation class]]) { + for (id value in ((PFAddUniqueOperation *)object).objects) { + if ([[self class] forEachLocalIdIn:value doBlock:block]) { + modified = YES; + } + } + } else if ([object isKindOfClass:[PFRemoveOperation class]]) { + for (id value in ((PFRemoveOperation *)object).objects) { + if ([[self class] forEachLocalIdIn:value doBlock:block]) { + modified = YES; + } + } + } + + return modified; +} + +- (void)forEachLocalId:(BOOL(^)(PFObject *pointer))block { + NSDictionary *data = [[PFDecoder objectDecoder] decodeObject:self.parameters]; + if (!data) { + return; + } + + if ([[self class] forEachLocalIdIn:data doBlock:block]) { + self.parameters = [[PFPointerOrLocalIdObjectEncoder objectEncoder] encodeObject:data]; + } +} + +- (void)resolveLocalIds { + [self forEachLocalId:^(PFObject *pointer) { + [pointer resolveLocalId]; + return YES; + }]; + [self maybeChangeServerOperation]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTCommand_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTCommand_Private.h new file mode 100644 index 0000000..f3d1e4e --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTCommand_Private.h @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTCommand.h" + +@interface PFRESTCommand () + +@property (nonatomic, copy, readwrite) NSString *sessionToken; + +@property (nonatomic, copy, readwrite) NSString *httpPath; +@property (nonatomic, copy, readwrite) NSString *httpMethod; + +@property (nonatomic, copy, readwrite) NSDictionary *parameters; + +@property (nonatomic, copy, readwrite) NSString *cacheKey; + +@property (nonatomic, copy, readwrite) NSString *operationSetUUID; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTConfigCommand.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTConfigCommand.h new file mode 100644 index 0000000..7b52307 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTConfigCommand.h @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTCommand.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFRESTConfigCommand : PFRESTCommand + ++ (instancetype)configFetchCommandWithSessionToken:(nullable NSString *)sessionToken; ++ (instancetype)configUpdateCommandWithConfigParameters:(NSDictionary *)parameters + sessionToken:(nullable NSString *)sessionToken; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTConfigCommand.m b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTConfigCommand.m new file mode 100644 index 0000000..6709990 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTConfigCommand.m @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTConfigCommand.h" + +#import "PFAssert.h" +#import "PFHTTPRequest.h" + +@implementation PFRESTConfigCommand + ++ (instancetype)configFetchCommandWithSessionToken:(NSString *)sessionToken { + return [self commandWithHTTPPath:@"config" + httpMethod:PFHTTPRequestMethodGET + parameters:nil + sessionToken:sessionToken]; +} + ++ (instancetype)configUpdateCommandWithConfigParameters:(NSDictionary *)parameters + sessionToken:(NSString *)sessionToken { + NSDictionary *commandParameters = @{ @"params" : parameters }; + return [self commandWithHTTPPath:@"config" + httpMethod:PFHTTPRequestMethodPUT + parameters:commandParameters + sessionToken:sessionToken]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTFileCommand.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTFileCommand.h new file mode 100644 index 0000000..770b258 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTFileCommand.h @@ -0,0 +1,21 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTCommand.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFRESTFileCommand : PFRESTCommand + ++ (instancetype)uploadCommandForFileWithName:(NSString *)fileName + sessionToken:(nullable NSString *)sessionToken; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTFileCommand.m b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTFileCommand.m new file mode 100644 index 0000000..1de7cc9 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTFileCommand.m @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTFileCommand.h" + +#import "PFAssert.h" +#import "PFHTTPRequest.h" + +@implementation PFRESTFileCommand + ++ (instancetype)uploadCommandForFileWithName:(NSString *)fileName + sessionToken:(NSString *)sessionToken { + NSMutableString *httpPath = [@"files/" mutableCopy]; + if (fileName) { + [httpPath appendString:fileName]; + } + return [self commandWithHTTPPath:httpPath + httpMethod:PFHTTPRequestMethodPOST + parameters:nil + sessionToken:sessionToken]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTObjectBatchCommand.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTObjectBatchCommand.h new file mode 100644 index 0000000..8b28e34 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTObjectBatchCommand.h @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTCommand.h" + +extern NSUInteger const PFRESTObjectBatchCommandSubcommandsLimit; + +NS_ASSUME_NONNULL_BEGIN + +@interface PFRESTObjectBatchCommand : PFRESTCommand + ++ (instancetype)batchCommandWithCommands:(NSArray *)commands sessionToken:(nullable NSString *)sessionToken; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTObjectBatchCommand.m b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTObjectBatchCommand.m new file mode 100644 index 0000000..7aa407f --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTObjectBatchCommand.m @@ -0,0 +1,42 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTObjectBatchCommand.h" + +#import "PFAssert.h" +#import "PFHTTPRequest.h" + +NSUInteger const PFRESTObjectBatchCommandSubcommandsLimit = 50; + +@implementation PFRESTObjectBatchCommand + ++ (nonnull instancetype)batchCommandWithCommands:(NSArray *)commands + sessionToken:(NSString *)sessionToken { + PFParameterAssert([commands count] <= PFRESTObjectBatchCommandSubcommandsLimit, + @"Max of %d commands are allowed in a single batch command", + (int)PFRESTObjectBatchCommandSubcommandsLimit); + + NSMutableArray *requests = [NSMutableArray arrayWithCapacity:[commands count]]; + for (PFRESTCommand *command in commands) { + NSMutableDictionary *requestDictionary = [@{ @"method" : command.httpMethod, + @"path" : [NSString stringWithFormat:@"/1/%@", command.httpPath] + } mutableCopy]; + if (command.parameters) { + requestDictionary[@"body"] = command.parameters; + } + + [requests addObject:requestDictionary]; + } + return [self commandWithHTTPPath:@"batch" + httpMethod:PFHTTPRequestMethodPOST + parameters:@{ @"requests" : requests } + sessionToken:sessionToken]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTObjectCommand.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTObjectCommand.h new file mode 100644 index 0000000..67a8ff4 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTObjectCommand.h @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTCommand.h" + +NS_ASSUME_NONNULL_BEGIN + +@class PFObjectState; + +@interface PFRESTObjectCommand : PFRESTCommand + ++ (instancetype)fetchObjectCommandForObjectState:(PFObjectState *)state + withSessionToken:(nullable NSString *)sessionToken; + ++ (instancetype)createObjectCommandForObjectState:(PFObjectState *)state + changes:(nullable NSDictionary *)changes + operationSetUUID:(nullable NSString *)operationSetIdentifier + sessionToken:(nullable NSString *)sessionToken; + ++ (instancetype)updateObjectCommandForObjectState:(PFObjectState *)state + changes:(nullable NSDictionary *)changes + operationSetUUID:(nullable NSString *)operationSetIdentifier + sessionToken:(nullable NSString *)sessionToken; + ++ (instancetype)deleteObjectCommandForObjectState:(PFObjectState *)state + withSessionToken:(nullable NSString *)sessionToken; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTObjectCommand.m b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTObjectCommand.m new file mode 100644 index 0000000..964273e --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTObjectCommand.m @@ -0,0 +1,77 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTObjectCommand.h" + +#import "PFAssert.h" +#import "PFHTTPRequest.h" +#import "PFObjectState.h" + +@implementation PFRESTObjectCommand + ++ (instancetype)fetchObjectCommandForObjectState:(PFObjectState *)state + withSessionToken:(NSString *)sessionToken { + PFParameterAssert(state.objectId.length, @"objectId should be non nil"); + PFParameterAssert(state.parseClassName.length, @"Class name should be non nil"); + + NSString *httpPath = [NSString stringWithFormat:@"classes/%@/%@", state.parseClassName, state.objectId]; + PFRESTObjectCommand *command = [self commandWithHTTPPath:httpPath + httpMethod:PFHTTPRequestMethodGET + parameters:nil + sessionToken:sessionToken]; + return command; +} + ++ (instancetype)createObjectCommandForObjectState:(PFObjectState *)state + changes:(NSDictionary *)changes + operationSetUUID:(NSString *)operationSetIdentifier + sessionToken:(NSString *)sessionToken { + PFParameterAssert(state.parseClassName.length, @"Class name should be non nil"); + + NSString *httpPath = [NSString stringWithFormat:@"classes/%@", state.parseClassName]; + PFRESTObjectCommand *command = [self commandWithHTTPPath:httpPath + httpMethod:PFHTTPRequestMethodPOST + parameters:changes + operationSetUUID:operationSetIdentifier + sessionToken:sessionToken]; + return command; +} + ++ (instancetype)updateObjectCommandForObjectState:(PFObjectState *)state + changes:(NSDictionary *)changes + operationSetUUID:(NSString *)operationSetIdentifier + sessionToken:(NSString *)sessionToken { + PFParameterAssert(state.parseClassName.length, @"Class name should be non nil"); + PFParameterAssert(state.objectId.length, @"objectId should be non nil"); + + NSString *httpPath = [NSString stringWithFormat:@"classes/%@/%@", state.parseClassName, state.objectId]; + PFRESTObjectCommand *command = [self commandWithHTTPPath:httpPath + httpMethod:PFHTTPRequestMethodPUT + parameters:changes + operationSetUUID:operationSetIdentifier + sessionToken:sessionToken]; + return command; +} + ++ (instancetype)deleteObjectCommandForObjectState:(PFObjectState *)state + withSessionToken:(NSString *)sessionToken { + PFParameterAssert(state.parseClassName.length, @"Class name should be non nil"); + + NSMutableString *httpPath = [NSMutableString stringWithFormat:@"classes/%@", state.parseClassName]; + if (state.objectId) { + [httpPath appendFormat:@"/%@", state.objectId]; + } + PFRESTObjectCommand *command = [self commandWithHTTPPath:httpPath + httpMethod:PFHTTPRequestMethodDELETE + parameters:nil + sessionToken:sessionToken]; + return command; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTPushCommand.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTPushCommand.h new file mode 100644 index 0000000..d58965d --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTPushCommand.h @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTCommand.h" + +#import + +@class PFPushState; + +NS_ASSUME_NONNULL_BEGIN + +PF_WATCH_UNAVAILABLE @interface PFRESTPushCommand : PFRESTCommand + ++ (instancetype)sendPushCommandWithPushState:(PFPushState *)state + sessionToken:(nullable NSString *)sessionToken; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTPushCommand.m b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTPushCommand.m new file mode 100644 index 0000000..2f7601e --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTPushCommand.m @@ -0,0 +1,57 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTPushCommand.h" + +#import "PFAssert.h" +#import "PFDateFormatter.h" +#import "PFHTTPRequest.h" +#import "PFInternalUtils.h" +#import "PFPushState.h" +#import "PFQueryState.h" +#import "PFRESTQueryCommand.h" + +@implementation PFRESTPushCommand + ++ (instancetype)sendPushCommandWithPushState:(PFPushState *)state + sessionToken:(NSString *)sessionToken { + NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; + + if (state.queryState) { + NSDictionary *queryParameters = [PFRESTQueryCommand findCommandParametersForQueryState:state.queryState]; + parameters[@"where"] = queryParameters[@"where"]; + } else { + if (state.channels) { + parameters[@"channels"] = [state.channels allObjects]; + } + } + + // If there are no conditions set, then push to everyone by specifying empty query conditions. + if ([parameters count] == 0) { + parameters[@"where"] = @{}; + } + + if (state.expirationDate) { + parameters[@"expiration_time"] = [[PFDateFormatter sharedFormatter] preciseStringFromDate:state.expirationDate]; + } else if (state.expirationTimeInterval) { + parameters[@"expiration_interval"] = state.expirationTimeInterval; + } + + // TODO (nlutsenko): Probably we need an assert here, as there is no reason to send push without message + if (state.payload) { + parameters[@"data"] = state.payload; + } + + return [self commandWithHTTPPath:@"push" + httpMethod:PFHTTPRequestMethodPOST + parameters:parameters + sessionToken:sessionToken]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTQueryCommand.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTQueryCommand.h new file mode 100644 index 0000000..a77a66f --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTQueryCommand.h @@ -0,0 +1,57 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTCommand.h" + +@class PFQueryState; + +NS_ASSUME_NONNULL_BEGIN + +@interface PFRESTQueryCommand : PFRESTCommand + +///-------------------------------------- +/// @name Find +///-------------------------------------- + ++ (instancetype)findCommandForQueryState:(PFQueryState *)queryState withSessionToken:(nullable NSString *)sessionToken; + ++ (instancetype)findCommandForClassWithName:(NSString *)className + order:(nullable NSString *)order + conditions:(nullable NSDictionary *)conditions + selectedKeys:(nullable NSSet *)selectedKeys + includedKeys:(nullable NSSet *)includedKeys + limit:(NSInteger)limit + skip:(NSInteger)skip + extraOptions:(nullable NSDictionary *)extraOptions + tracingEnabled:(BOOL)trace + sessionToken:(nullable NSString *)sessionToken; + +///-------------------------------------- +/// @name Count +///-------------------------------------- + ++ (instancetype)countCommandFromFindCommand:(PFRESTQueryCommand *)findCommand; + +///-------------------------------------- +/// @name Parameters +///-------------------------------------- + ++ (NSDictionary *)findCommandParametersForQueryState:(PFQueryState *)queryState; ++ (NSDictionary *)findCommandParametersWithOrder:(nullable NSString *)order + conditions:(nullable NSDictionary *)conditions + selectedKeys:(nullable NSSet *)selectedKeys + includedKeys:(nullable NSSet *)includedKeys + limit:(NSInteger)limit + skip:(NSInteger)skip + extraOptions:(nullable NSDictionary *)extraOptions + tracingEnabled:(BOOL)trace; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTQueryCommand.m b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTQueryCommand.m new file mode 100644 index 0000000..bf90f49 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTQueryCommand.m @@ -0,0 +1,200 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTQueryCommand.h" + +#import "PFAssert.h" +#import "PFEncoder.h" +#import "PFHTTPRequest.h" +#import "PFQueryPrivate.h" +#import "PFQueryState.h" + +@implementation PFRESTQueryCommand + +///-------------------------------------- +#pragma mark - Find +///-------------------------------------- + ++ (instancetype)findCommandForQueryState:(PFQueryState *)queryState withSessionToken:(NSString *)sessionToken { + NSDictionary *parameters = [self findCommandParametersForQueryState:queryState]; + return [self _findCommandForClassWithName:queryState.parseClassName + parameters:parameters + sessionToken:sessionToken]; +} + ++ (instancetype)findCommandForClassWithName:(NSString *)className + order:(NSString *)order + conditions:(NSDictionary *)conditions + selectedKeys:(NSSet *)selectedKeys + includedKeys:(NSSet *)includedKeys + limit:(NSInteger)limit + skip:(NSInteger)skip + extraOptions:(NSDictionary *)extraOptions + tracingEnabled:(BOOL)trace + sessionToken:(NSString *)sessionToken { + NSDictionary *parameters = [self findCommandParametersWithOrder:order + conditions:conditions + selectedKeys:selectedKeys + includedKeys:includedKeys + limit:limit + skip:skip + extraOptions:extraOptions + tracingEnabled:trace]; + return [self _findCommandForClassWithName:className + parameters:parameters + sessionToken:sessionToken]; +} + ++ (instancetype)_findCommandForClassWithName:(NSString *)className + parameters:(NSDictionary *)parameters + sessionToken:(NSString *)sessionToken { + NSString *httpPath = [NSString stringWithFormat:@"classes/%@", className]; + PFRESTQueryCommand *command = [self commandWithHTTPPath:httpPath + httpMethod:PFHTTPRequestMethodGET + parameters:parameters + sessionToken:sessionToken]; + return command; +} + +///-------------------------------------- +#pragma mark - Count +///-------------------------------------- + ++ (instancetype)countCommandFromFindCommand:(PFRESTQueryCommand *)findCommand { + NSMutableDictionary *parameters = [findCommand.parameters mutableCopy]; + parameters[@"count"] = @"1"; + parameters[@"limit"] = @"0"; // Set the limit to 0, as we are not interested in results at all. + [parameters removeObjectForKey:@"skip"]; + + return [self commandWithHTTPPath:findCommand.httpPath + httpMethod:findCommand.httpMethod + parameters:[parameters copy] + sessionToken:findCommand.sessionToken]; +} + +///-------------------------------------- +#pragma mark - Parameters +///-------------------------------------- + ++ (NSDictionary *)findCommandParametersForQueryState:(PFQueryState *)queryState { + return [self findCommandParametersWithOrder:queryState.sortOrderString + conditions:queryState.conditions + selectedKeys:queryState.selectedKeys + includedKeys:queryState.includedKeys + limit:queryState.limit + skip:queryState.skip + extraOptions:queryState.extraOptions + tracingEnabled:queryState.trace]; +} + ++ (NSDictionary *)findCommandParametersWithOrder:(NSString *)order + conditions:(NSDictionary *)conditions + selectedKeys:(NSSet *)selectedKeys + includedKeys:(NSSet *)includedKeys + limit:(NSInteger)limit + skip:(NSInteger)skip + extraOptions:(NSDictionary *)extraOptions + tracingEnabled:(BOOL)trace { + NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; + + if ([order length]) { + parameters[@"order"] = order; + } + if (selectedKeys != nil) { + parameters[@"keys"] = [[selectedKeys allObjects] componentsJoinedByString:@","]; + } + if ([includedKeys count] > 0) { + parameters[@"include"] = [[includedKeys allObjects] componentsJoinedByString:@","]; + } + if (limit >= 0) { + parameters[@"limit"] = [NSString stringWithFormat:@"%d", (int)limit]; + } + if (skip > 0) { + parameters[@"skip"] = [NSString stringWithFormat:@"%d", (int)skip]; + } + if (trace) { + // TODO: (nlutsenko) Double check that tracing still works. Maybe create test for it. + parameters[@"trace"] = @"1"; + } + [extraOptions enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + parameters[key] = obj; + }]; + + if ([conditions count] > 0) { + NSMutableDictionary *whereData = [[NSMutableDictionary alloc] init]; + [conditions enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + if ([key isEqualToString:@"$or"]) { + NSArray *array = (NSArray *)obj; + NSMutableArray *newArray = [NSMutableArray array]; + for (PFQuery *subquery in array) { + // TODO: (nlutsenko) Move this validation into PFQuery/PFQueryState. + PFParameterAssert(subquery.state.limit < 0, @"OR queries do not support sub queries with limits"); + PFParameterAssert(subquery.state.skip == 0, @"OR queries do not support sub queries with skip"); + PFParameterAssert(subquery.state.sortKeys.count == 0, @"OR queries do not support sub queries with order"); + PFParameterAssert(subquery.state.includedKeys.count == 0, @"OR queries do not support sub-queries with includes"); + PFParameterAssert(subquery.state.selectedKeys == nil, @"OR queries do not support sub-queries with selectKeys"); + + NSDictionary *queryDict = [self findCommandParametersWithOrder:subquery.state.sortOrderString + conditions:subquery.state.conditions + selectedKeys:subquery.state.selectedKeys + includedKeys:subquery.state.includedKeys + limit:subquery.state.limit + skip:subquery.state.skip + extraOptions:nil + tracingEnabled:NO]; + + queryDict = queryDict[@"where"]; + if ([queryDict count] > 0) { + [newArray addObject:queryDict]; + } else { + [newArray addObject:[NSDictionary dictionary]]; + } + } + whereData[key] = newArray; + } else { + id object = [self _encodeSubqueryIfNeeded:obj]; + whereData[key] = [[PFPointerObjectEncoder objectEncoder] encodeObject:object]; + } + }]; + + parameters[@"where"] = whereData; + } + + return parameters; +} + ++ (id)_encodeSubqueryIfNeeded:(id)object { + if (![object isKindOfClass:[NSDictionary class]]) { + return object; + } + + NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithCapacity:[object count]]; + [object enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + if ([obj isKindOfClass:[PFQuery class]]) { + PFQuery *subquery = (PFQuery *)obj; + NSMutableDictionary *subqueryParameters = [[self findCommandParametersWithOrder:subquery.state.sortOrderString + conditions:subquery.state.conditions + selectedKeys:subquery.state.selectedKeys + includedKeys:subquery.state.includedKeys + limit:subquery.state.limit + skip:subquery.state.skip + extraOptions:subquery.state.extraOptions + tracingEnabled:NO] mutableCopy]; + subqueryParameters[@"className"] = subquery.parseClassName; + obj = subqueryParameters; + } else if ([obj isKindOfClass:[NSDictionary class]]) { + obj = [self _encodeSubqueryIfNeeded:obj]; + } + + parameters[key] = obj; + }]; + return parameters; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTSessionCommand.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTSessionCommand.h new file mode 100644 index 0000000..d777b04 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTSessionCommand.h @@ -0,0 +1,20 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTCommand.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFRESTSessionCommand : PFRESTCommand + ++ (instancetype)getCurrentSessionCommandWithSessionToken:(nullable NSString *)sessionToken; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTSessionCommand.m b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTSessionCommand.m new file mode 100644 index 0000000..c38bd1c --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTSessionCommand.m @@ -0,0 +1,23 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTSessionCommand.h" + +#import "PFHTTPRequest.h" + +@implementation PFRESTSessionCommand + ++ (instancetype)getCurrentSessionCommandWithSessionToken:(nullable NSString *)sessionToken { + return [self commandWithHTTPPath:@"sessions/me" + httpMethod:PFHTTPRequestMethodGET + parameters:nil + sessionToken:sessionToken]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTUserCommand.h b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTUserCommand.h new file mode 100644 index 0000000..93c81db --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTUserCommand.h @@ -0,0 +1,56 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTCommand.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFRESTUserCommand : PFRESTCommand + +@property (nonatomic, assign, readonly) BOOL revocableSessionEnabled; + +///-------------------------------------- +/// @name Log In +///-------------------------------------- + ++ (instancetype)logInUserCommandWithUsername:(NSString *)username + password:(NSString *)password + revocableSession:(BOOL)revocableSessionEnabled; ++ (instancetype)serviceLoginUserCommandWithAuthenticationType:(NSString *)authenticationType + authenticationData:(NSDictionary *)authenticationData + revocableSession:(BOOL)revocableSessionEnabled; ++ (instancetype)serviceLoginUserCommandWithParameters:(NSDictionary *)parameters + revocableSession:(BOOL)revocableSessionEnabled + sessionToken:(nullable NSString *)sessionToken; + +///-------------------------------------- +/// @name Sign Up +///-------------------------------------- + ++ (instancetype)signUpUserCommandWithParameters:(NSDictionary *)parameters + revocableSession:(BOOL)revocableSessionEnabled + sessionToken:(nullable NSString *)sessionToken; + +///-------------------------------------- +/// @name Current User +///-------------------------------------- + ++ (instancetype)getCurrentUserCommandWithSessionToken:(NSString *)sessionToken; ++ (instancetype)upgradeToRevocableSessionCommandWithSessionToken:(NSString *)sessionToken; ++ (instancetype)logOutUserCommandWithSessionToken:(NSString *)sessionToken; + +///-------------------------------------- +/// @name Password Rest +///-------------------------------------- + ++ (instancetype)resetPasswordCommandForUserWithEmail:(NSString *)email; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTUserCommand.m b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTUserCommand.m new file mode 100644 index 0000000..190a5d5 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Commands/PFRESTUserCommand.m @@ -0,0 +1,132 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRESTUserCommand.h" + +#import "PFAssert.h" +#import "PFHTTPRequest.h" + +static NSString *const PFRESTUserCommandRevocableSessionHeader = @"X-Parse-Revocable-Session"; +static NSString *const PFRESTUserCommandRevocableSessionHeaderEnabledValue = @"1"; + +@interface PFRESTUserCommand () + +@property (nonatomic, assign, readwrite) BOOL revocableSessionEnabled; + +@end + +@implementation PFRESTUserCommand + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + ++ (instancetype)_commandWithHTTPPath:(NSString *)path + httpMethod:(NSString *)httpMethod + parameters:(NSDictionary *)parameters + sessionToken:(NSString *)sessionToken + revocableSession:(BOOL)revocableSessionEnabled { + PFRESTUserCommand *command = [self commandWithHTTPPath:path + httpMethod:httpMethod + parameters:parameters + sessionToken:sessionToken]; + if (revocableSessionEnabled) { + command.additionalRequestHeaders = @{ PFRESTUserCommandRevocableSessionHeader : + PFRESTUserCommandRevocableSessionHeaderEnabledValue}; + } + command.revocableSessionEnabled = revocableSessionEnabled; + return command; +} + +///-------------------------------------- +#pragma mark - Log In +///-------------------------------------- + ++ (instancetype)logInUserCommandWithUsername:(NSString *)username + password:(NSString *)password + revocableSession:(BOOL)revocableSessionEnabled { + NSDictionary *parameters = @{ @"username" : username, + @"password" : password }; + return [self _commandWithHTTPPath:@"login" + httpMethod:PFHTTPRequestMethodGET + parameters:parameters + sessionToken:nil + revocableSession:revocableSessionEnabled]; +} + ++ (instancetype)serviceLoginUserCommandWithAuthenticationType:(NSString *)authenticationType + authenticationData:(NSDictionary *)authenticationData + revocableSession:(BOOL)revocableSessionEnabled { + NSDictionary *parameters = @{ @"authData" : @{ authenticationType : authenticationData } }; + return [self serviceLoginUserCommandWithParameters:parameters + revocableSession:revocableSessionEnabled + sessionToken:nil]; +} + ++ (instancetype)serviceLoginUserCommandWithParameters:(NSDictionary *)parameters + revocableSession:(BOOL)revocableSessionEnabled + sessionToken:(NSString *)sessionToken { + return [self _commandWithHTTPPath:@"users" + httpMethod:PFHTTPRequestMethodPOST + parameters:parameters + sessionToken:sessionToken + revocableSession:revocableSessionEnabled]; +} + +///-------------------------------------- +#pragma mark - Sign Up +///-------------------------------------- + ++ (instancetype)signUpUserCommandWithParameters:(NSDictionary *)parameters + revocableSession:(BOOL)revocableSessionEnabled + sessionToken:(NSString *)sessionToken { + return [self _commandWithHTTPPath:@"users" + httpMethod:PFHTTPRequestMethodPOST + parameters:parameters + sessionToken:sessionToken + revocableSession:revocableSessionEnabled]; +} + +///-------------------------------------- +#pragma mark - Current User +///-------------------------------------- + ++ (instancetype)getCurrentUserCommandWithSessionToken:(NSString *)sessionToken { + return [self commandWithHTTPPath:@"users/me" + httpMethod:PFHTTPRequestMethodGET + parameters:nil + sessionToken:sessionToken]; +} + ++ (instancetype)upgradeToRevocableSessionCommandWithSessionToken:(NSString *)sessionToken { + return [self commandWithHTTPPath:@"upgradeToRevocableSession" + httpMethod:PFHTTPRequestMethodPOST + parameters:nil + sessionToken:sessionToken]; +} + ++ (instancetype)logOutUserCommandWithSessionToken:(NSString *)sessionToken { + return [self commandWithHTTPPath:@"logout" + httpMethod:PFHTTPRequestMethodPOST + parameters:nil + sessionToken:sessionToken]; +} + +///-------------------------------------- +#pragma mark - Additional User Commands +///-------------------------------------- + ++ (instancetype)resetPasswordCommandForUserWithEmail:(NSString *)email { + return [self commandWithHTTPPath:@"requestPasswordReset" + httpMethod:PFHTTPRequestMethodPOST + parameters:@{ @"email" : email } + sessionToken:nil]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Config/Controller/PFConfigController.h b/BreakingBad/Pods/Parse/Parse/Internal/Config/Controller/PFConfigController.h new file mode 100644 index 0000000..1333849 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Config/Controller/PFConfigController.h @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFConfig; +@class PFCurrentConfigController; +@class PFFileManager; +@protocol PFCommandRunning; + +@interface PFConfigController : NSObject + +@property (nonatomic, strong, readonly) PFFileManager *fileManager; +@property (nonatomic, strong, readonly) id commandRunner; + +@property (nonatomic, strong, readonly) PFCurrentConfigController *currentConfigController; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithFileManager:(PFFileManager *)fileManager + commandRunner:(id)commandRunner NS_DESIGNATED_INITIALIZER; + +///-------------------------------------- +/// @name Fetch +///-------------------------------------- + +/*! + Fetches current config from network async. + + @param sessionToken Current user session token. + + @returns `BFTask` with result set to `PFConfig`. + */ +- (BFTask *)fetchConfigAsyncWithSessionToken:(NSString *)sessionToken; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Config/Controller/PFConfigController.m b/BreakingBad/Pods/Parse/Parse/Internal/Config/Controller/PFConfigController.m new file mode 100644 index 0000000..ec26b5b --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Config/Controller/PFConfigController.m @@ -0,0 +1,95 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFConfigController.h" + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFCommandResult.h" +#import "PFCommandRunning.h" +#import "PFConfig_Private.h" +#import "PFCurrentConfigController.h" +#import "PFDecoder.h" +#import "PFRESTConfigCommand.h" + +@interface PFConfigController () +{ + dispatch_queue_t _dataAccessQueue; + dispatch_queue_t _networkQueue; + BFExecutor *_networkExecutor; +} + +@end + +@implementation PFConfigController + +@synthesize currentConfigController = _currentConfigController; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithFileManager:(PFFileManager *)fileManager + commandRunner:(id)commandRunner { + self = [super init]; + if (!self) return nil; + + _fileManager = fileManager; + _commandRunner = commandRunner; + + _dataAccessQueue = dispatch_queue_create("com.parse.config.access", DISPATCH_QUEUE_SERIAL); + + _networkQueue = dispatch_queue_create("com.parse.config.network", DISPATCH_QUEUE_SERIAL); + _networkExecutor = [BFExecutor executorWithDispatchQueue:_networkQueue]; + + return self; +} + +///-------------------------------------- +#pragma mark - Fetch +///-------------------------------------- + +- (BFTask *)fetchConfigAsyncWithSessionToken:(NSString *)sessionToken { + @weakify(self); + return [BFTask taskFromExecutor:_networkExecutor withBlock:^id{ + @strongify(self); + PFRESTCommand *command = [PFRESTConfigCommand configFetchCommandWithSessionToken:sessionToken]; + return [[[self.commandRunner runCommandAsync:command + withOptions:PFCommandRunningOptionRetryIfFailed] + continueWithSuccessBlock:^id(BFTask *task) { + PFCommandResult *result = task.result; + NSDictionary *fetchedConfig = [[PFDecoder objectDecoder] decodeObject:result.result]; + return [[PFConfig alloc] initWithFetchedConfig:fetchedConfig]; + }] continueWithSuccessBlock:^id(BFTask *task) { + // Roll-forward the config. + return [[self.currentConfigController setCurrentConfigAsync:task.result] continueWithResult:task.result]; + }]; + }]; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (PFCurrentConfigController *)currentConfigController { + __block PFCurrentConfigController *controller = nil; + dispatch_sync(_dataAccessQueue, ^{ + if (!_currentConfigController) { + _currentConfigController = [[PFCurrentConfigController alloc] initWithFileManager:self.fileManager]; + } + controller = _currentConfigController; + }); + return controller; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Config/Controller/PFCurrentConfigController.h b/BreakingBad/Pods/Parse/Parse/Internal/Config/Controller/PFCurrentConfigController.h new file mode 100644 index 0000000..0c947c8 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Config/Controller/PFCurrentConfigController.h @@ -0,0 +1,43 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFMacros.h" + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFConfig; +@class PFFileManager; + +@interface PFCurrentConfigController : NSObject + +@property (nonatomic, strong, readonly) PFFileManager *fileManager; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithFileManager:(PFFileManager *)fileManager NS_DESIGNATED_INITIALIZER; + ++ (instancetype)controllerWithFileManager:(PFFileManager *)fileManager; + +///-------------------------------------- +/// @name Accessors +///-------------------------------------- + +- (BFTask *)getCurrentConfigAsync; +- (BFTask *)setCurrentConfigAsync:(PFConfig *)config; + +- (BFTask *)clearCurrentConfigAsync; +- (BFTask *)clearMemoryCachedCurrentConfigAsync; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Config/Controller/PFCurrentConfigController.m b/BreakingBad/Pods/Parse/Parse/Internal/Config/Controller/PFCurrentConfigController.m new file mode 100644 index 0000000..1378520 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Config/Controller/PFCurrentConfigController.m @@ -0,0 +1,109 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFCurrentConfigController.h" + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFConfig_Private.h" +#import "PFDecoder.h" +#import "PFFileManager.h" +#import "PFJSONSerialization.h" + +static NSString *const PFConfigCurrentConfigFileName_ = @"config"; + +@interface PFCurrentConfigController () { + dispatch_queue_t _dataQueue; + BFExecutor *_dataExecutor; + PFConfig *_currentConfig; +} + +@property (nonatomic, copy, readonly) NSString *configFilePath; + +@end + +@implementation PFCurrentConfigController + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithFileManager:(PFFileManager *)fileManager { + self = [super init]; + if (!self) return nil; + + _dataQueue = dispatch_queue_create("com.parse.config.current", DISPATCH_QUEUE_SERIAL); + _dataExecutor = [BFExecutor executorWithDispatchQueue:_dataQueue]; + + _fileManager = fileManager; + + return self; +} + ++ (instancetype)controllerWithFileManager:(PFFileManager *)fileManager { + return [[self alloc] initWithFileManager:fileManager]; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (BFTask *)getCurrentConfigAsync { + return [BFTask taskFromExecutor:_dataExecutor withBlock:^id{ + if (!_currentConfig) { + NSDictionary *dictionary = [PFJSONSerialization JSONObjectFromFileAtPath:self.configFilePath]; + if (dictionary) { + NSDictionary *decodedDictionary = [[PFDecoder objectDecoder] decodeObject:dictionary]; + _currentConfig = [[PFConfig alloc] initWithFetchedConfig:decodedDictionary]; + } else { + _currentConfig = [[PFConfig alloc] init]; + } + } + return _currentConfig; + }]; +} + +- (BFTask *)setCurrentConfigAsync:(PFConfig *)config { + @weakify(self); + return [BFTask taskFromExecutor:_dataExecutor withBlock:^id{ + @strongify(self); + _currentConfig = config; + + NSDictionary *configParameters = @{ PFConfigParametersRESTKey : (config.parametersDictionary ?: @{}) }; + id encodedObject = [[PFPointerObjectEncoder objectEncoder] encodeObject:configParameters]; + NSData *jsonData = [PFJSONSerialization dataFromJSONObject:encodedObject]; + return [PFFileManager writeDataAsync:jsonData toFile:self.configFilePath]; + }]; +} + +- (BFTask *)clearCurrentConfigAsync { + @weakify(self); + return [BFTask taskFromExecutor:_dataExecutor withBlock:^id{ + @strongify(self); + _currentConfig = nil; + return [PFFileManager removeItemAtPathAsync:self.configFilePath]; + }]; +} + +- (BFTask *)clearMemoryCachedCurrentConfigAsync { + return [BFTask taskFromExecutor:_dataExecutor withBlock:^id{ + _currentConfig = nil; + return nil; + }]; +} + +- (NSString *)configFilePath { + return [self.fileManager parseDataItemPathForPathComponent:PFConfigCurrentConfigFileName_]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Config/PFConfig_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/Config/PFConfig_Private.h new file mode 100644 index 0000000..8ea452f --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Config/PFConfig_Private.h @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +extern NSString *const PFConfigParametersRESTKey; + +@interface PFConfig (Private) + +@property (atomic, copy, readonly) NSDictionary *parametersDictionary; + +- (instancetype)initWithFetchedConfig:(NSDictionary *)config; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperation.h b/BreakingBad/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperation.h new file mode 100644 index 0000000..519353d --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperation.h @@ -0,0 +1,168 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "PFEncoder.h" + +@class PFDecoder; +@class PFObject; + +///-------------------------------------- +#pragma mark - PFFieldOperation +///-------------------------------------- + +/*! + A PFFieldOperation represents a modification to a value in a PFObject. + For example, setting, deleting, or incrementing a value are all different + kinds of PFFieldOperations. PFFieldOperations themselves can be considered + to be immutable. + */ +@interface PFFieldOperation : NSObject + +/*! + Converts the PFFieldOperation to a data structure (typically an NSDictionary) + that can be converted to JSON and sent to Parse as part of a save operation. + + @param objectEncoder encoder that will be used to encode the object. + @returns An object to be jsonified. + */ +- (id)encodeWithObjectEncoder:(PFEncoder *)objectEncoder; + +/*! + Returns a field operation that is composed of a previous operation followed by + this operation. This will not mutate either operation. However, it may return + self if the current operation is not affected by previous changes. For example: + [{increment by 2} mergeWithPrevious:{set to 5}] -> {set to 7} + [{set to 5} mergeWithPrevious:{increment by 2}] -> {set to 5} + [{add "foo"} mergeWithPrevious:{delete}] -> {set to ["foo"]} + [{delete} mergeWithPrevious:{add "foo"}] -> {delete} + + @param previous The most recent operation on the field, or nil if none. + @returns A new PFFieldOperation or self. + */ +- (PFFieldOperation *)mergeWithPrevious:(PFFieldOperation *)previous; + +/*! + Returns a new estimated value based on a previous value and this operation. This + value is not intended to be sent to Parse, but it used locally on the client to + inspect the most likely current value for a field. + + The key and object are used solely for PFRelation to be able to construct objects + that refer back to its parent. + + @param oldValue The previous value for the field. + @param key The key that this value is for. + + @returns The new value for the field. + */ +- (id)applyToValue:(id)oldValue forKey:(NSString *)key; + +@end + +///-------------------------------------- +#pragma mark - Independent Operations +///-------------------------------------- + +/*! + An operation where a field is set to a given value regardless of + its previous value. + */ +@interface PFSetOperation : PFFieldOperation + +@property (nonatomic, strong, readonly) id value; + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithValue:(id)value NS_DESIGNATED_INITIALIZER; ++ (instancetype)setWithValue:(id)value; + +@end + +/*! + An operation where a field is deleted from the object. + */ +@interface PFDeleteOperation : PFFieldOperation + ++ (instancetype)operation; + +@end + +///-------------------------------------- +#pragma mark - Numeric Operations +///-------------------------------------- + +/*! + An operation that increases a numeric field's value by a given amount. + */ +@interface PFIncrementOperation : PFFieldOperation + +@property (nonatomic, strong, readonly) NSNumber *amount; + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithAmount:(NSNumber *)amount NS_DESIGNATED_INITIALIZER; ++ (instancetype)incrementWithAmount:(NSNumber *)amount; + +@end + +///-------------------------------------- +#pragma mark - Array Operations +///-------------------------------------- + +/*! + An operation that adds a new element to an array field. + */ +@interface PFAddOperation : PFFieldOperation + +@property (nonatomic, strong, readonly) NSArray *objects; + ++ (instancetype)addWithObjects:(NSArray *)array; + +@end + +/*! + An operation that adds a new element to an array field, + only if it wasn't already present. + */ +@interface PFAddUniqueOperation : PFFieldOperation + +@property (nonatomic, strong, readonly) NSArray *objects; + ++ (instancetype)addUniqueWithObjects:(NSArray *)array; + +@end + +/*! + An operation that removes every instance of an element from + an array field. + */ +@interface PFRemoveOperation : PFFieldOperation + +@property (nonatomic, strong, readonly) NSArray *objects; + ++ (instancetype)removeWithObjects:(NSArray *)array; + +@end + +///-------------------------------------- +#pragma mark - Relation Operations +///-------------------------------------- + +/*! + An operation where a PFRelation's value is modified. + */ +@interface PFRelationOperation : PFFieldOperation + +@property (nonatomic, copy) NSString *targetClass; +@property (nonatomic, strong) NSMutableSet *relationsToAdd; +@property (nonatomic, strong) NSMutableSet *relationsToRemove; + ++ (instancetype)addRelationToObjects:(NSArray *)targets; ++ (instancetype)removeRelationToObjects:(NSArray *)targets; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperation.m b/BreakingBad/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperation.m new file mode 100644 index 0000000..780347f --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperation.m @@ -0,0 +1,552 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFFieldOperation.h" + +#import "PFAssert.h" +#import "PFDecoder.h" +#import "PFInternalUtils.h" +#import "PFObject.h" +#import "PFOfflineStore.h" +#import "PFRelation.h" +#import "PFRelationPrivate.h" + +///-------------------------------------- +#pragma mark - PFFieldOperation +///-------------------------------------- + +// PFFieldOperation and its subclasses encapsulate operations that can be done on a field. +@implementation PFFieldOperation + +- (id)encodeWithObjectEncoder:(PFEncoder *)objectEncoder { + PFConsistencyAssert(NO, @"Operation is invalid."); + return nil; +} + +- (PFFieldOperation *)mergeWithPrevious:(PFFieldOperation *)previous { + PFConsistencyAssert(NO, @"Operation is invalid."); + return nil; +} + +- (id)applyToValue:(id)oldValue forKey:(NSString *)key { + PFConsistencyAssert(NO, @"Operation is invalid."); + return nil; +} + +@end + +///-------------------------------------- +#pragma mark - Independent Operations +///-------------------------------------- + +@implementation PFSetOperation + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithValue:(id)value { + self = [super init]; + if (!self) return nil; + + PFParameterAssert(value, @"Cannot set a nil value in a PFObject."); + _value = value; + + return self; +} + ++ (id)setWithValue:(id)newValue { + return [[self alloc] initWithValue:newValue]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"set to %@", self.value]; +} + +- (id)encodeWithObjectEncoder:(PFEncoder *)objectEncoder { + return [objectEncoder encodeObject:self.value]; +} + +- (PFSetOperation *)mergeWithPrevious:(PFFieldOperation *)previous { + return self; +} + +- (id)applyToValue:(id)oldValue forKey:(NSString *)key { + return self.value; +} + +@end + +@implementation PFDeleteOperation + ++ (instancetype)operation { + return [[self alloc] init]; +} + +- (NSString *)description { + return @"delete"; +} + +- (id)encodeWithObjectEncoder:(PFEncoder *)objectEncoder { + return @{ @"__op" : @"Delete" }; +} + +- (PFFieldOperation *)mergeWithPrevious:(PFFieldOperation *)previous { + return self; +} + +- (id)applyToValue:(id)oldValue forKey:(NSString *)key { + return nil; +} + +@end + +///-------------------------------------- +#pragma mark - Numeric Operations +///-------------------------------------- + +@implementation PFIncrementOperation + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithAmount:(NSNumber *)amount { + self = [super init]; + if (!self) return nil; + + _amount = amount; + + return self; +} + ++ (instancetype)incrementWithAmount:(NSNumber *)newAmount { + return [[self alloc] initWithAmount:newAmount]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"increment by %@", self.amount]; +} + +- (id)encodeWithObjectEncoder:(PFEncoder *)objectEncoder { + return @{ @"__op" : @"Increment", + @"amount" : self.amount }; +} + +- (PFFieldOperation *)mergeWithPrevious:(PFFieldOperation *)previous { + if (!previous) { + return self; + } else if ([previous isKindOfClass:[PFDeleteOperation class]]) { + return [PFSetOperation setWithValue:self.amount]; + } else if ([previous isKindOfClass:[PFSetOperation class]]) { + id oldValue = ((PFSetOperation *)previous).value; + PFParameterAssert([oldValue isKindOfClass:[NSNumber class]], @"You cannot increment a non-number."); + return [PFSetOperation setWithValue:[PFInternalUtils addNumber:self.amount withNumber:oldValue]]; + } else if ([previous isKindOfClass:[PFIncrementOperation class]]) { + NSNumber *newAmount = [PFInternalUtils addNumber:self.amount + withNumber:((PFIncrementOperation *)previous).amount]; + return [PFIncrementOperation incrementWithAmount:newAmount]; + } + [NSException raise:NSInternalInconsistencyException format:@"Operation is invalid after previous operation."]; + return nil; +} + +- (id)applyToValue:(id)oldValue forKey:(NSString *)key { + if (!oldValue) { + return self.amount; + } + + PFParameterAssert([oldValue isKindOfClass:[NSNumber class]], @"You cannot increment a non-number."); + return [PFInternalUtils addNumber:self.amount withNumber:oldValue]; +} + +@end + +///-------------------------------------- +#pragma mark - Array Operations +///-------------------------------------- + +@implementation PFAddOperation + +- (instancetype)initWithObjects:(NSArray *)array { + self = [super init]; + if (!self) return nil; + + _objects = array; + + return self; +} + ++ (instancetype)addWithObjects:(NSArray *)objects { + return [(PFAddOperation *)[self alloc] initWithObjects:objects]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"add %@", self.objects]; +} + +- (id)encodeWithObjectEncoder:(PFEncoder *)objectEncoder { + NSMutableArray *encodedObjects = [objectEncoder encodeObject:self.objects]; + return @{ @"__op" : @"Add", + @"objects" : encodedObjects }; +} + +- (PFFieldOperation *)mergeWithPrevious:(PFFieldOperation *)previous { + if (!previous) { + return self; + } else if ([previous isKindOfClass:[PFDeleteOperation class]]) { + return [PFSetOperation setWithValue:self.objects]; + } else if ([previous isKindOfClass:[PFSetOperation class]]) { + if ([((PFSetOperation *)previous).value isKindOfClass:[NSArray class]]) { + NSArray *oldArray = (NSArray *)(((PFSetOperation *)previous).value); + NSArray *newArray = [oldArray arrayByAddingObjectsFromArray:self.objects]; + return [PFSetOperation setWithValue:newArray]; + } else { + [NSException raise:NSInternalInconsistencyException format:@"You can't add an item to a non-array."]; + return nil; + } + } else if ([previous isKindOfClass:[PFAddOperation class]]) { + NSMutableArray *newObjects = [((PFAddOperation *)previous).objects mutableCopy]; + [newObjects addObjectsFromArray:self.objects]; + return [[self class] addWithObjects:newObjects]; + } + [NSException raise:NSInternalInconsistencyException format:@"Operation is invalid after previous operation."]; + return nil; +} + +- (id)applyToValue:(id)oldValue forKey:(NSString *)key { + if (!oldValue) { + return [self.objects mutableCopy]; + } else if ([oldValue isKindOfClass:[NSArray class]]) { + return [((NSArray *)oldValue)arrayByAddingObjectsFromArray:self.objects]; + } + [NSException raise:NSInternalInconsistencyException format:@"Operation is invalid after previous operation."]; + return nil; +} + +@end + +@implementation PFAddUniqueOperation + +- (instancetype)initWithObjects:(NSArray *)array { + self = [super init]; + if (!self) return nil; + + _objects = [[NSSet setWithArray:array] allObjects]; + + return self; +} + ++ (instancetype)addUniqueWithObjects:(NSArray *)objects { + return [(PFAddUniqueOperation *)[self alloc] initWithObjects:objects]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"addToSet %@", self.objects]; +} + +- (id)encodeWithObjectEncoder:(PFEncoder *)objectEncoder { + NSMutableArray *encodedObjects = [objectEncoder encodeObject:self.objects]; + return @{ @"__op" : @"AddUnique", + @"objects" : encodedObjects }; +} + +- (PFFieldOperation *)mergeWithPrevious:(PFFieldOperation *)previous { + if (!previous) { + return self; + } else if ([previous isKindOfClass:[PFDeleteOperation class]]) { + return [PFSetOperation setWithValue:self.objects]; + } else if ([previous isKindOfClass:[PFSetOperation class]]) { + if ([((PFSetOperation *)previous).value isKindOfClass:[NSArray class]]) { + NSArray *oldArray = (((PFSetOperation *)previous).value); + return [PFSetOperation setWithValue:[self applyToValue:oldArray forKey:nil]]; + } else { + [NSException raise:NSInternalInconsistencyException format:@"You can't add an item to a non-array."]; + return nil; + } + } else if ([previous isKindOfClass:[PFAddUniqueOperation class]]) { + NSArray *previousObjects = ((PFAddUniqueOperation *)previous).objects; + return [[self class] addUniqueWithObjects:[self applyToValue:previousObjects forKey:nil]]; + } + [NSException raise:NSInternalInconsistencyException format:@"Operation is invalid after previous operation."]; + return nil; +} + +- (id)applyToValue:(id)oldValue forKey:(NSString *)key { + if (!oldValue) { + return [self.objects mutableCopy]; + } else if ([oldValue isKindOfClass:[NSArray class]]) { + NSMutableArray *newValue = [oldValue mutableCopy]; + for (id objectToAdd in self.objects) { + if ([objectToAdd isKindOfClass:[PFObject class]] && [objectToAdd objectId]) { + // Check uniqueness by objectId instead of equality. If the PFObject + // already exists in the array, replace it with the newer one. + NSUInteger index = [newValue indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { + return [obj isKindOfClass:[PFObject class]] && + [[obj objectId] isEqualToString:[objectToAdd objectId]]; + }]; + if (index == NSNotFound) { + [newValue addObject:objectToAdd]; + } else { + [newValue replaceObjectAtIndex:index withObject:objectToAdd]; + } + } else if (![newValue containsObject:objectToAdd]) { + [newValue addObject:objectToAdd]; + } + } + return newValue; + } + [NSException raise:NSInternalInconsistencyException format:@"Operation is invalid after previous operation."]; + return nil; +} + +@end + +@implementation PFRemoveOperation + +- (instancetype)initWithObjects:(NSArray *)array { + self = [super init]; + + _objects = array; + + return self; +} + ++ (id)removeWithObjects:(NSArray *)objects { + return [(PFRemoveOperation *)[self alloc] initWithObjects:objects]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"remove %@", self.objects]; +} + +- (id)encodeWithObjectEncoder:(PFEncoder *)objectEncoder { + NSMutableArray *encodedObjects = [objectEncoder encodeObject:self.objects]; + return @{ @"__op" : @"Remove", + @"objects" : encodedObjects }; +} + +- (PFFieldOperation *)mergeWithPrevious:(PFFieldOperation *)previous { + if (!previous) { + return self; + } else if ([previous isKindOfClass:[PFDeleteOperation class]]) { + [NSException raise:NSInternalInconsistencyException format:@"You can't remove items from a deleted array."]; + return nil; + } else if ([previous isKindOfClass:[PFSetOperation class]]) { + if ([((PFSetOperation *)previous).value isKindOfClass:[NSArray class]]) { + NSArray *oldArray = ((PFSetOperation *)previous).value; + return [PFSetOperation setWithValue:[self applyToValue:oldArray forKey:nil]]; + } else { + [NSException raise:NSInternalInconsistencyException format:@"You can't add an item to a non-array."]; + return nil; + } + } else if ([previous isKindOfClass:[PFRemoveOperation class]]) { + NSArray *newObjects = [((PFRemoveOperation *)previous).objects arrayByAddingObjectsFromArray:self.objects]; + return [PFRemoveOperation removeWithObjects:newObjects]; + } + + [NSException raise:NSInternalInconsistencyException format:@"Operation is invalid after previous operation."]; + return nil; +} + +- (id)applyToValue:(id)oldValue forKey:(NSString *)key { + if (!oldValue) { + return [self.objects mutableCopy]; + } else if ([oldValue isKindOfClass:[NSArray class]]) { + NSMutableArray *newValue = [((NSArray *)oldValue)mutableCopy]; + [newValue removeObjectsInArray:self.objects]; + + // Remove the removed objects from objectsToBeRemoved -- the items + // remaining should be ones that weren't removed by object equality. + NSMutableArray *objectsToBeRemoved = [self.objects mutableCopy]; + [objectsToBeRemoved removeObjectsInArray:newValue]; + for (id objectToRemove in objectsToBeRemoved) { + if ([objectToRemove isKindOfClass:[PFObject class]] && [objectToRemove objectId]) { + NSIndexSet *indexes = [newValue indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { + return ([obj isKindOfClass:[PFObject class]] && + [[obj objectId] isEqualToString:[objectToRemove objectId]]); + }]; + if ([indexes count] != 0) { + [newValue removeObjectsAtIndexes:indexes]; + } + } + } + return newValue; + } + [NSException raise:NSInternalInconsistencyException format:@"Operation is invalid after previous operation."]; + return nil; +} + +@end + +///-------------------------------------- +#pragma mark - Relation Operations +///-------------------------------------- + +@implementation PFRelationOperation +@synthesize targetClass; + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _relationsToAdd = [NSMutableSet set]; + _relationsToRemove = [NSMutableSet set]; + + return self; +} + ++ (instancetype)addRelationToObjects:(NSArray *)targets { + PFRelationOperation *op = [[self alloc] init]; + if (targets.count > 0) { + op.targetClass = [[targets firstObject] parseClassName]; + } + + for (PFObject *target in targets) { + PFParameterAssert([target.parseClassName isEqualToString:op.targetClass], + @"All objects in a relation must be of the same class."); + [op.relationsToAdd addObject:target]; + } + + return op; +} + ++ (instancetype)removeRelationToObjects:(NSArray *)targets { + PFRelationOperation *operation = [[self alloc] init]; + if (targets.count > 0) { + operation.targetClass = [[targets objectAtIndex:0] parseClassName]; + } + + for (PFObject *target in targets) { + PFParameterAssert([target.parseClassName isEqualToString:operation.targetClass], + @"All objects in a relation must be of the same class."); + [operation.relationsToRemove addObject:target]; + } + + return operation; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"PFRelationOperation<%@> add:%@ remove:%@", + self.targetClass, + self.relationsToAdd, + self.relationsToRemove]; +} + +- (NSArray *)_convertToArrayInSet:(NSSet *)set withObjectEncoder:(PFEncoder *)objectEncoder { + NSMutableArray *array = [NSMutableArray arrayWithCapacity:set.count]; + for (PFObject *object in set) { + id encodedDict = [objectEncoder encodeObject:object]; + [array addObject:encodedDict]; + } + return array; +} + +- (id)encodeWithObjectEncoder:(PFEncoder *)objectEncoder { + NSDictionary *addDict = nil; + NSDictionary *removeDict = nil; + if (self.relationsToAdd.count > 0) { + NSArray *array = [self _convertToArrayInSet:self.relationsToAdd withObjectEncoder:objectEncoder]; + addDict = @{ @"__op" : @"AddRelation", + @"objects" : array }; + } + if (self.relationsToRemove.count > 0) { + NSArray *array = [self _convertToArrayInSet:self.relationsToRemove withObjectEncoder:objectEncoder]; + removeDict = @{ @"__op" : @"RemoveRelation", + @"objects" : array }; + } + + if (addDict && removeDict) { + return @{ @"__op" : @"Batch", + @"ops" : @[ addDict, removeDict ] }; + } + + if (addDict) { + return addDict; + } + + if (removeDict) { + return removeDict; + } + + [NSException raise:NSInternalInconsistencyException format:@"A PFRelationOperation was created without any data."]; + return nil; +} + +- (PFFieldOperation *)mergeWithPrevious:(PFFieldOperation *)previous { + if (!previous) { + return self; + } + + PFConsistencyAssert(![previous isKindOfClass:[PFDeleteOperation class]], @"You can't modify a relation after deleting it"); + PFConsistencyAssert([previous isKindOfClass:[PFRelationOperation class]], @"Operation is invalid after previous operation"); + + PFRelationOperation *previousOperation = (PFRelationOperation *)previous; + + PFParameterAssert(!previousOperation.targetClass || [previousOperation.targetClass isEqualToString:self.targetClass], + @"Related object object must be of class %@, but %@ was passed in", + previousOperation.targetClass, self.targetClass); + + //TODO: (nlutsenko) This logic seems to be messed up. We should return a new operation here, also merging logic seems funky. + NSSet *newRelationsToAdd = [self.relationsToAdd copy]; + NSSet *newRelationsToRemove = [self.relationsToRemove copy]; + [self.relationsToAdd removeAllObjects]; + [self.relationsToRemove removeAllObjects]; + + for (NSString *objectId in previousOperation.relationsToAdd) { + [self.relationsToRemove removeObject:objectId]; + [self.relationsToAdd addObject:objectId]; + } + for (NSString *objectId in previousOperation.relationsToRemove) { + [self.relationsToRemove removeObject:objectId]; + [self.relationsToRemove addObject:objectId]; + } + + for (NSString *objectId in newRelationsToAdd) { + [self.relationsToRemove removeObject:objectId]; + [self.relationsToAdd addObject:objectId]; + } + for (NSString *objectId in newRelationsToRemove) { + [self.relationsToRemove removeObject:objectId]; + [self.relationsToRemove addObject:objectId]; + } + return self; +} + +- (id)applyToValue:(id)oldValue forKey:(NSString *)key { + PFRelation *relation = nil; + if (!oldValue) { + relation = [PFRelation relationWithTargetClass:self.targetClass]; + } else if ([oldValue isKindOfClass:[PFRelation class]]) { + relation = oldValue; + if (self.targetClass) { + if (relation.targetClass) { + PFParameterAssert([relation.targetClass isEqualToString:targetClass], + @"Related object object must be of class %@, but %@ was passed in", + relation.targetClass, self.targetClass); + } else { + relation.targetClass = self.targetClass; + } + } + } else { + [NSException raise:NSInternalInconsistencyException format:@"Operation is invalid after previous operation."]; + return nil; + } + + for (PFObject *object in self.relationsToAdd) { + [relation _addKnownObject:object]; + } + for (PFObject *object in self.relationsToRemove) { + [relation _removeKnownObject:object]; + } + + return relation; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperationDecoder.h b/BreakingBad/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperationDecoder.h new file mode 100644 index 0000000..831418a --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperationDecoder.h @@ -0,0 +1,39 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@class PFDecoder; +@class PFFieldOperation; + +NS_ASSUME_NONNULL_BEGIN + +@interface PFFieldOperationDecoder : NSObject + +///-------------------------------------- +/// @name Init +///-------------------------------------- + ++ (instancetype)defaultDecoder; + +///-------------------------------------- +/// @name Decoding +///-------------------------------------- + +/*! + Converts a parsed JSON object into a PFFieldOperation. + + @param encoded An NSDictionary containing an __op field. + @returns An NSObject that conforms to PFFieldOperation. + */ +- (PFFieldOperation *)decode:(NSDictionary *)encoded withDecoder:(PFDecoder *)decoder; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperationDecoder.m b/BreakingBad/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperationDecoder.m new file mode 100644 index 0000000..1c5a303 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperationDecoder.m @@ -0,0 +1,126 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFFieldOperationDecoder.h" + +#import "PFAssert.h" +#import "PFDecoder.h" +#import "PFFieldOperation.h" + +@interface PFFieldOperationDecoder () { + NSMutableDictionary *_operationDecoders; +} + +@end + +typedef PFFieldOperation * (^PFFieldOperationDecodingBlock_)(NSDictionary *encoded, PFDecoder *decoder); + +@implementation PFFieldOperationDecoder + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _operationDecoders = [NSMutableDictionary dictionary]; + [self _registerDefaultOperationDecoders]; + + return self; +} + ++ (instancetype)defaultDecoder { + static PFFieldOperationDecoder *decoder; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + decoder = [[self alloc] init]; + }); + return decoder; +} + +///-------------------------------------- +#pragma mark - Setup +///-------------------------------------- + +- (void)_registerDecoderForOperationWithName:(NSString *)name block:(PFFieldOperationDecodingBlock_)block { + _operationDecoders[name] = [block copy]; +} + +- (void)_registerDefaultOperationDecoders { + @weakify(self); + [self _registerDecoderForOperationWithName:@"Batch" block:^(NSDictionary *encoded, PFDecoder *decoder) { + @strongify(self); + PFFieldOperation *op = nil; + NSArray *ops = encoded[@"ops"]; + for (id maybeEncodedNextOp in ops) { + PFFieldOperation *nextOp = nil; + if ([maybeEncodedNextOp isKindOfClass:[PFFieldOperation class]]) { + nextOp = maybeEncodedNextOp; + } else { + nextOp = [self decode:maybeEncodedNextOp withDecoder:decoder]; + } + op = [nextOp mergeWithPrevious:op]; + } + return op; + }]; + + [self _registerDecoderForOperationWithName:@"Delete" block:^(NSDictionary *encoded, PFDecoder *decoder) { + // Deleting has no state, so it can be a singleton. + static PFDeleteOperation *deleteOperation = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + deleteOperation = [[PFDeleteOperation alloc] init]; + }); + return deleteOperation; + }]; + + [self _registerDecoderForOperationWithName:@"Increment" block:^(NSDictionary *encoded, PFDecoder *decoder) { + return [PFIncrementOperation incrementWithAmount:encoded[@"amount"]]; + }]; + + [self _registerDecoderForOperationWithName:@"Add" block:^(NSDictionary *encoded, PFDecoder *decoder) { + NSArray *objects = [decoder decodeObject:encoded[@"objects"]]; + return [PFAddOperation addWithObjects:objects]; + }]; + + [self _registerDecoderForOperationWithName:@"AddUnique" block:^(NSDictionary *encoded, PFDecoder *decoder) { + NSArray *objects = [decoder decodeObject:encoded[@"objects"]]; + return [PFAddUniqueOperation addUniqueWithObjects:objects]; + }]; + + [self _registerDecoderForOperationWithName:@"Remove" block:^(NSDictionary *encoded, PFDecoder *decoder) { + NSArray *objects = [decoder decodeObject:encoded[@"objects"]]; + return [PFRemoveOperation removeWithObjects:objects]; + }]; + + [self _registerDecoderForOperationWithName:@"AddRelation" block:^(NSDictionary *encoded, PFDecoder *decoder) { + NSArray *objects = [decoder decodeObject:encoded[@"objects"]]; + return [PFRelationOperation addRelationToObjects:objects]; + }]; + + [self _registerDecoderForOperationWithName:@"RemoveRelation" block:^(NSDictionary *encoded, PFDecoder *decoder) { + NSArray *objects = [decoder decodeObject:encoded[@"objects"]]; + return [PFRelationOperation removeRelationToObjects:objects]; + }]; +} + +///-------------------------------------- +#pragma mark - Decoding +///-------------------------------------- + +- (PFFieldOperation *)decode:(NSDictionary *)encoded withDecoder:(PFDecoder *)decoder { + NSString *operationName = encoded[@"__op"]; + PFFieldOperationDecodingBlock_ block = _operationDecoders[operationName]; + PFConsistencyAssert(block, @"Unable to decode operation of type %@.", operationName); + return block(encoded, decoder); +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/File/Controller/PFFileController.h b/BreakingBad/Pods/Parse/Parse/Internal/File/Controller/PFFileController.h new file mode 100644 index 0000000..dd12a2c --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/File/Controller/PFFileController.h @@ -0,0 +1,99 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFDataProvider.h" +#import "PFMacros.h" + +@class BFCancellationToken; +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFFileState; +@class PFFileStagingController; + +@interface PFFileController : NSObject + +@property (nonatomic, weak, readonly) id dataSource; + +@property (nonatomic, strong, readonly) PFFileStagingController *fileStagingController; + +@property (nonatomic, copy, readonly) NSString *cacheFilesDirectoryPath; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; + ++ (instancetype)controllerWithDataSource:(id)dataSource; + + +///-------------------------------------- +/// @name Download +///-------------------------------------- + +/*! + Downloads a file asynchronously with a given state. + + @param fileState File state to download the file for. + @param cancellationToken Cancellation token. + @param progressBlock Progress block to call (optional). + + @returns `BFTask` with a result set to `nil`. + */ +- (BFTask *)downloadFileAsyncWithState:(PFFileState *)fileState + cancellationToken:(BFCancellationToken *)cancellationToken + progressBlock:(PFProgressBlock)progressBlock; + +/*! + Downloads a file asynchronously with a given state and yields a stream to the live download of that file. + + @param fileState File state to download the file for. + @param cancellationToken Cancellation token. + @param progressBlock Progress block to call (optional). + + @return `BFTask` with a result set to live `NSInputStream` of the file. + */ +- (BFTask *)downloadFileStreamAsyncWithState:(PFFileState *)fileState + cancellationToken:(BFCancellationToken *)cancellationToken + progressBlock:(PFProgressBlock)progressBlock; + +///-------------------------------------- +/// @name Upload +///-------------------------------------- + +/*! + Uploads a file asynchronously from file path for a given file state. + + @param fileState File state to upload the file for. + @param sourceFilePath Source file path. + @param sessionToken Session token to use. + @param cancellationToken Cancellation token. + @param progressBlock Progress block to call (optional). + + @returns `BFTask` with a result set to `PFFileState` of uploaded file. + */ +- (BFTask *)uploadFileAsyncWithState:(PFFileState *)fileState + sourceFilePath:(NSString *)sourceFilePath + sessionToken:(NSString *)sessionToken + cancellationToken:(BFCancellationToken *)cancellationToken + progressBlock:(PFProgressBlock)progressBlock; + +///-------------------------------------- +/// @name Cache +///-------------------------------------- + +- (BFTask *)clearFileCacheAsync; + +- (NSString *)cachedFilePathForFileState:(PFFileState *)fileState; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/File/Controller/PFFileController.m b/BreakingBad/Pods/Parse/Parse/Internal/File/Controller/PFFileController.m new file mode 100644 index 0000000..d9b2a51 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/File/Controller/PFFileController.m @@ -0,0 +1,269 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFFileController.h" + +#import +#import + +#import "BFTask+Private.h" +#import "PFFileDataStream.h" +#import "PFAssert.h" +#import "PFCommandResult.h" +#import "PFCommandRunning.h" +#import "PFFileManager.h" +#import "PFFileStagingController.h" +#import "PFFileState.h" +#import "PFHash.h" +#import "PFMacros.h" +#import "PFRESTFileCommand.h" + +static NSString *const PFFileControllerCacheDirectoryName_ = @"PFFileCache"; + +@interface PFFileController () { + NSMutableDictionary *_downloadTasks; // { "urlString" : BFTask } + NSMutableDictionary *_downloadProgressBlocks; // { "urlString" : [ block1, block2 ] } + dispatch_queue_t _downloadDataAccessQueue; + dispatch_queue_t _fileStagingControllerAccessQueue; +} + +@end + +@implementation PFFileController + +@synthesize fileStagingController = _fileStagingController; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithDataSource:(id)dataSource { + self = [super init]; + if (!self) return nil; + + _dataSource = dataSource; + + _downloadTasks = [NSMutableDictionary dictionary]; + _downloadProgressBlocks = [NSMutableDictionary dictionary]; + _downloadDataAccessQueue = dispatch_queue_create("com.parse.fileController.download", DISPATCH_QUEUE_SERIAL); + _fileStagingControllerAccessQueue = dispatch_queue_create("com.parse.filestaging.controller.access", DISPATCH_QUEUE_SERIAL); + + return self; +} + ++ (instancetype)controllerWithDataSource:(id)dataSource { + return [[self alloc] initWithDataSource:dataSource]; +} + +///-------------------------------------- +#pragma mark - Properties +///-------------------------------------- + +- (PFFileStagingController *)fileStagingController { + __block PFFileStagingController *result = nil; + dispatch_sync(_fileStagingControllerAccessQueue, ^{ + if (!_fileStagingController) { + _fileStagingController = [PFFileStagingController controllerWithDataSource:self.dataSource]; + } + result = _fileStagingController; + }); + return result; +} + +///-------------------------------------- +#pragma mark - Download +///-------------------------------------- + +- (BFTask *)downloadFileAsyncWithState:(PFFileState *)fileState + cancellationToken:(BFCancellationToken *)cancellationToken + progressBlock:(PFProgressBlock)progressBlock { + if (cancellationToken.cancellationRequested) { + return [BFTask cancelledTask]; + } + + @weakify(self); + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + @strongify(self); + [self _addFileDownloadProgressBlock:progressBlock forFileWithState:fileState]; + + BFTask *resultTask = [self _fileDownloadResultTaskForFileWithState:fileState]; + if (!resultTask) { + NSURL *url = [NSURL URLWithString:fileState.secureURLString]; + NSString *temporaryPath = [self _temporaryFileDownloadPathForFileState:fileState]; + + PFProgressBlock unifyingProgressBlock = [self _fileDownloadUnifyingProgressBlockForFileState:fileState]; + resultTask = [self.dataSource.commandRunner runFileDownloadCommandAsyncWithFileURL:url + targetFilePath:temporaryPath + cancellationToken:cancellationToken + progressBlock:unifyingProgressBlock]; + resultTask = [[resultTask continueWithSuccessBlock:^id(BFTask *task) { + return [[PFFileManager moveItemAsyncAtPath:temporaryPath + toPath:[self cachedFilePathForFileState:fileState]] continueWithBlock:^id(BFTask *task) { + // Ignore the error if file exists. + if (task.error && task.error.code == NSFileWriteFileExistsError) { + return nil; + } + return task; + }]; + }] continueWithBlock:^id(BFTask *task) { + dispatch_barrier_async(_downloadDataAccessQueue, ^{ + [_downloadTasks removeObjectForKey:fileState.secureURLString]; + [_downloadProgressBlocks removeObjectForKey:fileState.secureURLString]; + }); + return task; + }]; + dispatch_barrier_async(_downloadDataAccessQueue, ^{ + _downloadTasks[fileState.secureURLString] = resultTask; + }); + } + return resultTask; + }]; +} + +- (BFTask *)downloadFileStreamAsyncWithState:(PFFileState *)fileState + cancellationToken:(BFCancellationToken *)cancellationToken + progressBlock:(PFProgressBlock)progressBlock { + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + BFTaskCompletionSource *taskCompletionSource = [BFTaskCompletionSource taskCompletionSource]; + NSString *filePath = [self _temporaryFileDownloadPathForFileState:fileState]; + PFFileDataStream *stream = [[PFFileDataStream alloc] initWithFileAtPath:filePath]; + [[self downloadFileAsyncWithState:fileState + cancellationToken:cancellationToken + progressBlock:^(int percentDone) { + [taskCompletionSource trySetResult:stream]; + + if (progressBlock) { + progressBlock(percentDone); + } + }] continueWithBlock:^id(BFTask *task) { + [stream stopBlocking]; + return task; + }]; + return taskCompletionSource.task; + }]; +} + +- (BFTask *)_fileDownloadResultTaskForFileWithState:(PFFileState *)state { + __block BFTask *resultTask = nil; + dispatch_sync(_downloadDataAccessQueue, ^{ + resultTask = _downloadTasks[state.secureURLString]; + }); + return resultTask; +} + +- (PFProgressBlock)_fileDownloadUnifyingProgressBlockForFileState:(PFFileState *)fileState { + return ^(int progress) { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + __block NSArray *blocks = nil; + dispatch_sync(_downloadDataAccessQueue, ^{ + blocks = [_downloadProgressBlocks[fileState.secureURLString] copy]; + }); + if (blocks.count != 0) { + dispatch_async(dispatch_get_main_queue(), ^{ + for (PFProgressBlock block in blocks) { + block(progress); + } + }); + } + }); + }; +} + +- (void)_addFileDownloadProgressBlock:(PFProgressBlock)block forFileWithState:(PFFileState *)state { + if (!block) { + return; + } + + dispatch_barrier_async(_downloadDataAccessQueue, ^{ + NSMutableArray *progressBlocks = _downloadProgressBlocks[state.secureURLString]; + if (!progressBlocks) { + progressBlocks = [NSMutableArray arrayWithObject:block]; + _downloadProgressBlocks[state.secureURLString] = progressBlocks; + } else { + [progressBlocks addObject:block]; + } + }); +} + +- (NSString *)_temporaryFileDownloadPathForFileState:(PFFileState *)fileState { + return [NSTemporaryDirectory() stringByAppendingPathComponent:PFMD5HashFromString(fileState.secureURLString)]; +} + +///-------------------------------------- +#pragma mark - Upload +///-------------------------------------- + +- (BFTask *)uploadFileAsyncWithState:(PFFileState *)fileState + sourceFilePath:(NSString *)sourceFilePath + sessionToken:(NSString *)sessionToken + cancellationToken:(BFCancellationToken *)cancellationToken + progressBlock:(PFProgressBlock)progressBlock { + PFRESTFileCommand *command = [PFRESTFileCommand uploadCommandForFileWithName:fileState.name + sessionToken:sessionToken]; + + @weakify(self); + if (cancellationToken.cancellationRequested) { + return [BFTask cancelledTask]; + } + return [[[self.dataSource.commandRunner runFileUploadCommandAsync:command + withContentType:fileState.mimeType + contentSourceFilePath:sourceFilePath + options:PFCommandRunningOptionRetryIfFailed + cancellationToken:cancellationToken + progressBlock:progressBlock] continueWithSuccessBlock:^id(BFTask *task) { + PFCommandResult *result = task.result; + PFFileState *fileState = [[PFFileState alloc] initWithName:result.result[@"name"] + urlString:result.result[@"url"] + mimeType:nil]; + return fileState; + }] continueWithSuccessBlock:^id(BFTask *task) { + @strongify(self); + + NSString *finalPath = [self cachedFilePathForFileState:task.result]; + NSError *error = nil; + [[NSFileManager defaultManager] moveItemAtPath:sourceFilePath + toPath:finalPath + error:&error]; + if (error) { + return [BFTask taskWithError:error]; + } + return task; + }]; +} + +///-------------------------------------- +#pragma mark - Cache +///-------------------------------------- + +- (NSString *)cachedFilePathForFileState:(PFFileState *)fileState { + if (!fileState.secureURLString) { + return nil; + } + + NSString *filename = [fileState.secureURLString lastPathComponent]; + NSString *path = [self.cacheFilesDirectoryPath stringByAppendingPathComponent:filename]; + return path; +} + +- (NSString *)cacheFilesDirectoryPath { + NSString *path = [self.dataSource.fileManager parseCacheItemPathForPathComponent:PFFileControllerCacheDirectoryName_]; + [[PFFileManager createDirectoryIfNeededAsyncAtPath:path] waitForResult:nil withMainThreadWarning:NO]; + return path; +} + +- (BFTask *)clearFileCacheAsync { + NSString *path = [self cacheFilesDirectoryPath]; + return [PFFileManager removeDirectoryContentsAsyncAtPath:path]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/File/Controller/PFFileStagingController.h b/BreakingBad/Pods/Parse/Parse/Internal/File/Controller/PFFileStagingController.h new file mode 100644 index 0000000..15ee8d7 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/File/Controller/PFFileStagingController.h @@ -0,0 +1,74 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +@class BFTask PF_GENERIC(__covariant BFGenericType); + +NS_ASSUME_NONNULL_BEGIN + +@protocol PFFileManagerProvider; + +@interface PFFileStagingController : NSObject + +@property (nonatomic, weak, readonly) id dataSource; + +@property (nonatomic, copy, readonly) NSString *stagedFilesDirectoryPath; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; + ++ (instancetype)controllerWithDataSource:(id)dataSource; + +///-------------------------------------- +/// @name Staging +///-------------------------------------- + +/*! + Moves a file from the specified path to the staging directory based off of the name and unique ID passed in. + + @param filePath The source path to stage + @param name The name of the file to stage + @param uniqueId A unique ID for this file to be used when differentiating between files with the same name. + + @return A task, which yields the path of the staged file on disk. + */ +- (BFTask *)stageFileAsyncAtPath:(NSString *)filePath name:(NSString *)name uniqueId:(uint64_t)uniqueId; + +/*! + Creates a file from the specified data and places it into the staging directory based off of the name and unique + ID passed in. + + @param fileData The data to stage + @param name The name of the file to stage + @param uniqueId The unique ID for this file to be used when differentiating between files with the same name. + + @return A task, which yields the path of the staged file on disk. + */ +- (BFTask *)stageFileAsyncWithData:(NSData *)fileData name:(NSString *)name uniqueId:(uint64_t)uniqueId; + +/*! + Get the staged directory path for a file with the specified name and unique ID. + + @param name The name of the staged file + @param uniqueId The unique ID of the staged file + + @return The path in the staged directory folder which contains the contents of the requested file. + */ +- (NSString *)stagedFilePathForFileWithName:(NSString *)name uniqueId:(uint64_t)uniqueId; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/File/Controller/PFFileStagingController.m b/BreakingBad/Pods/Parse/Parse/Internal/File/Controller/PFFileStagingController.m new file mode 100644 index 0000000..fb13749 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/File/Controller/PFFileStagingController.m @@ -0,0 +1,96 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFFileStagingController.h" + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFAsyncTaskQueue.h" +#import "PFDataProvider.h" +#import "PFFileManager.h" +#import "PFLogging.h" + +static NSString *const PFFileStagingControllerDirectoryName_ = @"PFFileStaging"; + +@implementation PFFileStagingController { + PFAsyncTaskQueue *_taskQueue; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithDataSource:(id)dataSource { + self = [super init]; + if (!self) return nil; + + _dataSource = dataSource; + _taskQueue = [PFAsyncTaskQueue taskQueue]; + + [self _clearStagedFilesAsync]; + + return self; +} + ++ (instancetype)controllerWithDataSource:(id)dataSource { + return [[self alloc] initWithDataSource:dataSource]; +} + +///-------------------------------------- +#pragma mark - Properties +///-------------------------------------- + +- (NSString *)stagedFilesDirectoryPath { + NSString *folderPath = [self.dataSource.fileManager parseLocalSandboxDataDirectoryPath]; + return [folderPath stringByAppendingPathComponent:PFFileStagingControllerDirectoryName_]; +} + +///-------------------------------------- +#pragma mark - Staging +///-------------------------------------- + +- (BFTask *)stageFileAsyncAtPath:(NSString *)filePath name:(NSString *)name uniqueId:(uint64_t)uniqueId { + return [_taskQueue enqueue:^id(BFTask *task) { + return [[PFFileManager createDirectoryIfNeededAsyncAtPath:[self stagedFilesDirectoryPath]] continueWithBlock:^id(BFTask *task) { + NSString *destinationPath = [self stagedFilePathForFileWithName:name uniqueId:uniqueId]; + return [[PFFileManager copyItemAsyncAtPath:filePath toPath:destinationPath] continueWithSuccessResult:destinationPath]; + }]; + }]; +} + +- (BFTask *)stageFileAsyncWithData:(NSData *)fileData name:(NSString *)name uniqueId:(uint64_t)uniqueId { + return [_taskQueue enqueue:^id(BFTask *task) { + return [[PFFileManager createDirectoryIfNeededAsyncAtPath:[self stagedFilesDirectoryPath]] continueWithBlock:^id(BFTask *task) { + NSString *destinationPath = [self stagedFilePathForFileWithName:name uniqueId:uniqueId]; + return [[PFFileManager writeDataAsync:fileData toFile:destinationPath] continueWithSuccessResult:destinationPath]; + }]; + }]; +} + +- (NSString *)stagedFilePathForFileWithName:(NSString *)name uniqueId:(uint64_t)uniqueId { + NSString *fileName = [NSString stringWithFormat:@"%llX_%@", uniqueId, name]; + return [[self stagedFilesDirectoryPath] stringByAppendingPathComponent:fileName]; +} + +///-------------------------------------- +#pragma mark - Clearing +///-------------------------------------- + +- (BFTask *)_clearStagedFilesAsync { + return [_taskQueue enqueue:^id(BFTask *task) { + NSString *stagedFilesDirectoryPath = [self stagedFilesDirectoryPath]; + return [PFFileManager removeItemAtPathAsync:stagedFilesDirectoryPath]; + }]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/File/FileDataStream/PFFileDataStream.h b/BreakingBad/Pods/Parse/Parse/Internal/File/FileDataStream/PFFileDataStream.h new file mode 100644 index 0000000..fa86bc6 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/File/FileDataStream/PFFileDataStream.h @@ -0,0 +1,31 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +/*! + PFFileDataStream is an NSStream proxy which won't read the last byte of a file until the downlaod has finished. + + When downloading a file stream via `-[PFFile getDataDownloadStreamInBackground]`, we need to be able to read and write + to the same file on disk concurrently. + + NSInputStream closes itself as soon as it hits EOF, so this class wraps an underlying NSInputStream and stops the + stream from closing until after writing has finished. + */ +@interface PFFileDataStream : NSProxy + +- (instancetype)initWithFileAtPath:(NSString *)path; + +- (void)stopBlocking; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/File/FileDataStream/PFFileDataStream.m b/BreakingBad/Pods/Parse/Parse/Internal/File/FileDataStream/PFFileDataStream.m new file mode 100644 index 0000000..ac03501 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/File/FileDataStream/PFFileDataStream.m @@ -0,0 +1,112 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFFileDataStream.h" + +#import +#import + +@interface PFFileDataStream() { + NSString *_path; + NSInputStream *_inputStream; + + int _fd; + BOOL _finished; + + __weak id _delegate; +} + +@end + +@implementation PFFileDataStream + +- (instancetype)initWithFileAtPath:(NSString *)path { + _finished = NO; + + _path = path; + _inputStream = [NSInputStream inputStreamWithFileAtPath:path]; + _inputStream.delegate = self; + + return self; +} + +- (void)stopBlocking { + _finished = YES; + + [self stream:_inputStream handleEvent:NSStreamEventHasBytesAvailable]; +} + +///-------------------------------------- +#pragma mark - NSProxy methods +///-------------------------------------- + +- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel { + return [_inputStream methodSignatureForSelector:sel]; +} + +- (void)forwardInvocation:(NSInvocation *)invocation { + [invocation invokeWithTarget:_inputStream]; +} + +- (BOOL)respondsToSelector:(SEL)aSelector { + Method implementation = class_getInstanceMethod([self class], aSelector); + return implementation ? YES : [_inputStream respondsToSelector:aSelector]; +} + +///-------------------------------------- +#pragma mark - NSInputStream methods +///-------------------------------------- + +- (void)setDelegate:(id)delegate { + _delegate = delegate; +} + +- (id)delegate { + return _delegate; +} + +- (void)open { + _fd = open([_path UTF8String], O_RDONLY | O_NONBLOCK); + [_inputStream open]; +} + +- (void)close { + [_inputStream close]; + close(_fd); +} + +- (NSInteger)read:(uint8_t *)buffer maxLength:(NSUInteger)len { + if (!_finished) { + off_t currentOffset = [[_inputStream propertyForKey:NSStreamFileCurrentOffsetKey] unsignedLongLongValue]; + off_t fileSize = lseek(_fd, 0, SEEK_END); + + len = (NSUInteger)MIN(len, ((fileSize - currentOffset) - 1)); + } + + // Reading 0 bytes from an NSInputStream causes this strange undocumented behavior: it marks the stream as 'at end', + // regardless of whether more bytes are available or not. lolwut? + if (len == 0) { + return 0; + } + + return [_inputStream read:buffer maxLength:len]; +} + +///-------------------------------------- +#pragma mark - NSStreamDelegate +///-------------------------------------- + +- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode { + id delegate = _delegate; + if ([delegate respondsToSelector:@selector(stream:handleEvent:)]) { + [delegate stream:(NSInputStream *)self handleEvent:eventCode]; + } +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/File/PFFile_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/File/PFFile_Private.h new file mode 100644 index 0000000..43fe6cc --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/File/PFFile_Private.h @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import +#import + +#import "PFFileState.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFFile (Private) + +@property (nonatomic, strong, readonly) PFFileState *state; + ++ (instancetype)fileWithName:(nullable NSString *)name url:(nullable NSString *)url; + +- (nullable NSString *)_cachedFilePath; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/File/State/PFFileState.h b/BreakingBad/Pods/Parse/Parse/Internal/File/State/PFFileState.h new file mode 100644 index 0000000..8088ae9 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/File/State/PFFileState.h @@ -0,0 +1,35 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "PFBaseState.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFFileState : PFBaseState + +@property (nonatomic, copy, readonly) NSString *name; +@property (nullable, nonatomic, copy, readonly) NSString *urlString; +@property (nullable, nonatomic, copy, readonly) NSString *secureURLString; + +@property (nullable, nonatomic, copy, readonly) NSString *mimeType; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)initWithState:(PFFileState *)state; +- (instancetype)initWithName:(nullable NSString *)name + urlString:(nullable NSString *)urlString + mimeType:(nullable NSString *)mimeType; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/File/State/PFFileState.m b/BreakingBad/Pods/Parse/Parse/Internal/File/State/PFFileState.m new file mode 100644 index 0000000..3a0e4e8 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/File/State/PFFileState.m @@ -0,0 +1,106 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFFileState.h" +#import "PFFileState_Private.h" + +#import "PFMutableFileState.h" +#import "PFPropertyInfo.h" + +static NSString *const _PFFileStateSecureDomain = @"files.parsetfss.com"; + +@interface PFFileState () + +@property (nonatomic, copy, readwrite) NSString *secureURLString; + +@end + +@implementation PFFileState + +///-------------------------------------- +#pragma mark - PFBaseStateSubclass +///-------------------------------------- + ++ (NSDictionary *)propertyAttributes { + return @{ + @"name" : [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], + @"urlString" : [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], + @"mimeType" : [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], + }; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithState:(PFFileState *)state { + return [super initWithState:state]; +} + +- (instancetype)initWithName:(NSString *)name urlString:(NSString *)urlString mimeType:(NSString *)mimeType { + self = [super init]; + if (!self) return nil; + + _name = (name ? [name copy] : @"file"); + _urlString = [urlString copy]; + _mimeType = [mimeType copy]; + + return self; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (void)setUrlString:(NSString *)urlString { + if (self.urlString != urlString) { + _urlString = [urlString copy]; + _secureURLString = nil; // Invalidate variable cache + } +} + +- (NSString *)secureURLString { + if (_secureURLString) { + return _secureURLString; + } + + if (!self.urlString) { + return nil; + } + + NSURLComponents *components = [NSURLComponents componentsWithString:self.urlString]; + if (!components) { + return self.urlString; + } + + NSString *scheme = [components scheme]; + if (![scheme isEqualToString:@"http"]) { + return self.urlString; + } + + if ([[components host] isEqualToString:_PFFileStateSecureDomain]) { + components.scheme = @"https"; + } + _secureURLString = [[components URL] absoluteString]; + return _secureURLString; +} + +///-------------------------------------- +#pragma mark - Mutable Copying +///-------------------------------------- + +- (id)copyWithZone:(NSZone *)zone { + return [[PFFileState allocWithZone:zone] initWithState:self]; +} + +- (instancetype)mutableCopyWithZone:(NSZone *)zone { + return [[PFMutableFileState allocWithZone:zone] initWithState:self]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/File/State/PFFileState_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/File/State/PFFileState_Private.h new file mode 100644 index 0000000..5114fef --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/File/State/PFFileState_Private.h @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFFileState.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFFileState () + +@property (nonatomic, copy, readwrite) NSString *name; +@property (nullable, nonatomic, copy, readwrite) NSString *urlString; +@property (nullable, nonatomic, copy, readwrite) NSString *mimeType; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/File/State/PFMutableFileState.h b/BreakingBad/Pods/Parse/Parse/Internal/File/State/PFMutableFileState.h new file mode 100644 index 0000000..1d33fa8 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/File/State/PFMutableFileState.h @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFFileState.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFMutableFileState : PFFileState + +@property (nonatomic, copy, readwrite) NSString *name; +@property (nullable, nonatomic, copy, readwrite) NSString *urlString; +@property (nullable, nonatomic, copy, readwrite) NSString *mimeType; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/File/State/PFMutableFileState.m b/BreakingBad/Pods/Parse/Parse/Internal/File/State/PFMutableFileState.m new file mode 100644 index 0000000..53db52c --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/File/State/PFMutableFileState.m @@ -0,0 +1,18 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFMutableFileState.h" + +@implementation PFMutableFileState + +@dynamic name; +@dynamic urlString; +@dynamic mimeType; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPRequest.h b/BreakingBad/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPRequest.h new file mode 100644 index 0000000..e6394e4 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPRequest.h @@ -0,0 +1,24 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#ifndef Parse_PFHTTPRequest_h +#define Parse_PFHTTPRequest_h + +#import + +static NSString *const PFHTTPRequestMethodGET = @"GET"; +static NSString *const PFHTTPRequestMethodHEAD = @"HEAD"; +static NSString *const PFHTTPRequestMethodDELETE = @"DELETE"; +static NSString *const PFHTTPRequestMethodPOST = @"POST"; +static NSString *const PFHTTPRequestMethodPUT = @"PUT"; + +static NSString *const PFHTTPRequestHeaderNameContentType = @"Content-Type"; +static NSString *const PFHTTPRequestHeaderNameContentLength = @"Content-Length"; + +#endif diff --git a/BreakingBad/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h b/BreakingBad/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h new file mode 100644 index 0000000..b3bfb70 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@interface PFHTTPURLRequestConstructor : NSObject + ++ (NSMutableURLRequest *)urlRequestWithURL:(NSURL *)url + httpMethod:(NSString *)httpMethod + httpHeaders:(NSDictionary *)httpHeaders + parameters:(NSDictionary *)parameters; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m b/BreakingBad/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m new file mode 100644 index 0000000..e948c3d --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m @@ -0,0 +1,52 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFHTTPURLRequestConstructor.h" + +#import "PFAssert.h" +#import "PFHTTPRequest.h" +#import "PFURLConstructor.h" + +static NSString *const PFHTTPURLRequestContentTypeJSON = @"application/json; charset=utf8"; + +@implementation PFHTTPURLRequestConstructor + +///-------------------------------------- +#pragma mark - Public +///-------------------------------------- + ++ (NSMutableURLRequest *)urlRequestWithURL:(NSURL *)url + httpMethod:(NSString *)httpMethod + httpHeaders:(NSDictionary *)httpHeaders + parameters:(NSDictionary *)parameters { + NSParameterAssert(url != nil); + NSParameterAssert(httpMethod != nil); + + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + + request.HTTPMethod = httpMethod; + request.allHTTPHeaderFields = httpHeaders; + + if (parameters != nil) { + PFConsistencyAssert([httpMethod isEqualToString:PFHTTPRequestMethodPOST] || + [httpMethod isEqualToString:PFHTTPRequestMethodPUT], + @"Can't create %@ request with json body.", httpMethod); + + [request setValue:PFHTTPURLRequestContentTypeJSON forHTTPHeaderField:PFHTTPRequestHeaderNameContentType]; + + NSError *error = nil; + [request setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters + options:(NSJSONWritingOptions)0 + error:&error]]; + PFConsistencyAssert(error == nil, @"Failed to serialize JSON with error = %@", error); + } + return request; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/HTTPRequest/PFURLConstructor.h b/BreakingBad/Pods/Parse/Parse/Internal/HTTPRequest/PFURLConstructor.h new file mode 100644 index 0000000..19f7e26 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/HTTPRequest/PFURLConstructor.h @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface PFURLConstructor : NSObject + ++ (NSURL *)URLFromAbsoluteString:(NSString *)string + path:(nullable NSString *)path + query:(nullable NSString *)query; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/HTTPRequest/PFURLConstructor.m b/BreakingBad/Pods/Parse/Parse/Internal/HTTPRequest/PFURLConstructor.m new file mode 100644 index 0000000..7e0dd24 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/HTTPRequest/PFURLConstructor.m @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFURLConstructor.h" + +#import "PFAssert.h" + +@implementation PFURLConstructor + +///-------------------------------------- +#pragma mark - Basic +///-------------------------------------- + ++ (NSURL *)URLFromAbsoluteString:(NSString *)string + path:(nullable NSString *)path + query:(nullable NSString *)query { + NSURLComponents *components = [NSURLComponents componentsWithString:string]; + if (components.path) { + components.path = path; + } + if (query) { + components.query = query; + } + return components.URL; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Installation/Constants/PFInstallationConstants.h b/BreakingBad/Pods/Parse/Parse/Internal/Installation/Constants/PFInstallationConstants.h new file mode 100644 index 0000000..29ef544 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Installation/Constants/PFInstallationConstants.h @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +extern NSString *const PFInstallationKeyParseVersion; +extern NSString *const PFInstallationKeyDeviceType; +extern NSString *const PFInstallationKeyInstallationId; +extern NSString *const PFInstallationKeyDeviceToken; +extern NSString *const PFInstallationKeyAppName; +extern NSString *const PFInstallationKeyAppVersion; +extern NSString *const PFInstallationKeyAppIdentifier; +extern NSString *const PFInstallationKeyTimeZone; +extern NSString *const PFInstallationKeyLocaleIdentifier; +extern NSString *const PFInstallationKeyBadge; +extern NSString *const PFInstallationKeyChannels; diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Installation/Constants/PFInstallationConstants.m b/BreakingBad/Pods/Parse/Parse/Internal/Installation/Constants/PFInstallationConstants.m new file mode 100644 index 0000000..19f2565 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Installation/Constants/PFInstallationConstants.m @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFInstallationConstants.h" + +NSString *const PFInstallationKeyParseVersion = @"parseVersion"; +NSString *const PFInstallationKeyDeviceType = @"deviceType"; +NSString *const PFInstallationKeyInstallationId = @"installationId"; +NSString *const PFInstallationKeyDeviceToken = @"deviceToken"; +NSString *const PFInstallationKeyAppName = @"appName"; +NSString *const PFInstallationKeyAppVersion = @"appVersion"; +NSString *const PFInstallationKeyAppIdentifier = @"appIdentifier"; +NSString *const PFInstallationKeyTimeZone = @"timeZone"; +NSString *const PFInstallationKeyLocaleIdentifier = @"localeIdentifier"; +NSString *const PFInstallationKeyBadge = @"badge"; +NSString *const PFInstallationKeyChannels = @"channels"; diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Installation/Controller/PFInstallationController.h b/BreakingBad/Pods/Parse/Parse/Internal/Installation/Controller/PFInstallationController.h new file mode 100644 index 0000000..75573b9 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Installation/Controller/PFInstallationController.h @@ -0,0 +1,31 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "PFCoreDataProvider.h" +#import "PFObjectControlling.h" + +NS_ASSUME_NONNULL_BEGIN + +PF_WATCH_UNAVAILABLE @interface PFInstallationController : NSObject + +@property (nonatomic, weak, readonly) id dataSource; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithDataSource:(id)dataSource; ++ (instancetype)controllerWithDataSource:(id)dataSource; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Installation/Controller/PFInstallationController.m b/BreakingBad/Pods/Parse/Parse/Internal/Installation/Controller/PFInstallationController.m new file mode 100644 index 0000000..66d09cc --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Installation/Controller/PFInstallationController.m @@ -0,0 +1,105 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFInstallationController.h" + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFCurrentInstallationController.h" +#import "PFInstallationPrivate.h" +#import "PFObjectController.h" +#import "PFObjectPrivate.h" + +@implementation PFInstallationController + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithDataSource:(id)dataSource { + self = [super init]; + if (!self) return nil; + + _dataSource = dataSource; + + return self; +} + ++ (instancetype)controllerWithDataSource:(id)dataSource { + return [[self alloc] initWithDataSource:dataSource]; +} + +///-------------------------------------- +#pragma mark - Fetch +///-------------------------------------- + +- (BFTask *)fetchObjectAsync:(PFInstallation *)object withSessionToken:(nullable NSString *)sessionToken { + @weakify(self); + return [[[self.objectController fetchObjectAsync:object + withSessionToken:sessionToken] continueWithBlock:^id(BFTask *task) { + @strongify(self); + + // Do not attempt to resave an object if LDS is enabled, since changing objectId is not allowed. + if (self.currentInstallationController.storageType == PFCurrentObjectStorageTypeOfflineStore) { + return task; + } + + if (task.faulted && task.error.code == kPFErrorObjectNotFound) { + @synchronized (object.lock) { + // Retry the fetch as a save operation because this Installation was deleted on the server. + // We always want [currentInstallation fetch] to succeed. + object.objectId = nil; + [object _markAllFieldsDirty]; + return [[object saveAsync:nil] continueWithSuccessResult:object]; + } + } + return task; + }] continueWithBlock:^id(BFTask *task) { + @strongify(self); + // Roll-forward the previous task. + return [[self.currentInstallationController saveCurrentObjectAsync:object] continueWithResult:task]; + }]; +} + +- (BFTask *)processFetchResultAsync:(NSDictionary *)result forObject:(PFInstallation *)object { + @weakify(self); + return [[self.objectController processFetchResultAsync:result forObject:object] continueWithBlock:^id(BFTask *task) { + @strongify(self); + // Roll-forward the previous task. + return [[self.currentInstallationController saveCurrentObjectAsync:object] continueWithResult:task]; + }]; +} + +///-------------------------------------- +#pragma mark - Delete +///-------------------------------------- + +- (BFTask *)deleteObjectAsync:(PFObject *)object withSessionToken:(nullable NSString *)sessionToken { + PFConsistencyAssert(NO, @"Installations cannot be deleted."); + return nil; +} + +- (BFTask *)processDeleteResultAsync:(nullable NSDictionary *)result forObject:(PFObject *)object { + PFConsistencyAssert(NO, @"Installations cannot be deleted."); + return nil; +} + +///-------------------------------------- +#pragma mark - Private +///-------------------------------------- + +- (id)objectController { + return self.dataSource.objectController; +} + +- (PFCurrentInstallationController *)currentInstallationController { + return self.dataSource.currentInstallationController; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h b/BreakingBad/Pods/Parse/Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h new file mode 100644 index 0000000..b51f996 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h @@ -0,0 +1,52 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFCoreDataProvider.h" +#import "PFCurrentObjectControlling.h" +#import "PFDataProvider.h" +#import "PFMacros.h" + +extern NSString *const PFCurrentInstallationFileName; +extern NSString *const PFCurrentInstallationPinName; + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFInstallation; + +PF_WATCH_UNAVAILABLE @interface PFCurrentInstallationController : NSObject + +@property (nonatomic, weak, readonly) id commonDataSource; +@property (nonatomic, weak, readonly) id coreDataSource; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithStorageType:(PFCurrentObjectStorageType)dataStorageType + commonDataSource:(id)commonDataSource + coreDataSource:(id)coreDataSource; + ++ (instancetype)controllerWithStorageType:(PFCurrentObjectStorageType)dataStorageType + commonDataSource:(id)commonDataSource + coreDataSource:(id)coreDataSource; + +///-------------------------------------- +/// @name Installation +///-------------------------------------- + +@property (nonatomic, strong, readonly) PFInstallation *memoryCachedCurrentInstallation; + +- (BFTask *)clearCurrentInstallationAsync; +- (BFTask *)clearMemoryCachedCurrentInstallationAsync; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m b/BreakingBad/Pods/Parse/Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m new file mode 100644 index 0000000..f716106 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m @@ -0,0 +1,289 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFCurrentInstallationController.h" + +#import "BFTask+Private.h" +#import "PFAsyncTaskQueue.h" +#import "PFFileManager.h" +#import "PFInstallationIdentifierStore.h" +#import "PFInstallationPrivate.h" +#import "PFMacros.h" +#import "PFObjectFilePersistenceController.h" +#import "PFObjectPrivate.h" +#import "PFPushPrivate.h" +#import "PFQuery.h" + +NSString *const PFCurrentInstallationFileName = @"currentInstallation"; +NSString *const PFCurrentInstallationPinName = @"_currentInstallation"; + +@interface PFCurrentInstallationController () { + dispatch_queue_t _dataQueue; + PFAsyncTaskQueue *_dataTaskQueue; +} + +@property (nonatomic, strong, readonly) PFFileManager *fileManager; +@property (nonatomic, strong, readonly) PFInstallationIdentifierStore *installationIdentifierStore; + +@property (nonatomic, strong) PFInstallation *currentInstallation; +@property (nonatomic, assign) BOOL currentInstallationMatchesDisk; + +@end + +@implementation PFCurrentInstallationController + +@synthesize storageType = _storageType; + +@synthesize currentInstallation = _currentInstallation; +@synthesize currentInstallationMatchesDisk = _currentInstallationMatchesDisk; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithStorageType:(PFCurrentObjectStorageType)storageType + commonDataSource:(id)commonDataSource + coreDataSource:(id)coreDataSource { + self = [super init]; + if (!self) return nil; + + _dataQueue = dispatch_queue_create("com.parse.installation.current", DISPATCH_QUEUE_CONCURRENT); + _dataTaskQueue = [[PFAsyncTaskQueue alloc] init]; + + _storageType = storageType; + _commonDataSource = commonDataSource; + _coreDataSource = coreDataSource; + + return self; +} + ++ (instancetype)controllerWithStorageType:(PFCurrentObjectStorageType)storageType + commonDataSource:(id)commonDataSource + coreDataSource:(id)coreDataSource { + return [[self alloc] initWithStorageType:storageType + commonDataSource:commonDataSource + coreDataSource:coreDataSource]; +} + +///-------------------------------------- +#pragma mark - PFCurrentObjectControlling +///-------------------------------------- + +- (BFTask *)getCurrentObjectAsync { + @weakify(self); + return [_dataTaskQueue enqueue:^BFTask *(BFTask *unused) { + return [[[BFTask taskFromExecutor:[BFExecutor defaultExecutor] withBlock:^id { + @strongify(self); + if (self.currentInstallation) { + return self.currentInstallation; + } + + if (!self.currentInstallationMatchesDisk) { + return [[self _loadCurrentInstallationFromDiskAsync] continueWithBlock:^id(BFTask *task) { + PFInstallation *installation = task.result; + if (installation) { + // If there is no objectId, but there is some data + // it means that the data wasn't yet saved to the server + // so we should mark everything as dirty + if (!installation.objectId && [[installation allKeys] count]) { + [installation _markAllFieldsDirty]; + } + } + return task; + }]; + } + return nil; + }] continueWithBlock:^id(BFTask *task) { + @strongify(self); + if (task.faulted) { + return task; + } + + PFInstallation *installation = task.result; + NSString *installationId = self.installationIdentifierStore.installationIdentifier; + installationId = [installationId lowercaseString]; + if (!installation || ![installationId isEqualToString:installation.installationId]) { + // If there's no installation object, or the object's installation + // ID doesn't match this device's installation ID, create a new + // installation. Try to keep track of the previously stored device + // token: if there was an installation already stored just re-use + // its device token, otherwise try loading from the keychain (where + // old SDKs stored the token). Discard the old installation. + NSString *oldDeviceToken = nil; + if (installation) { + oldDeviceToken = installation.deviceToken; + } else { + oldDeviceToken = [[PFPush pushInternalUtilClass] getDeviceTokenFromKeychain]; + } + + installation = [PFInstallation object]; + installation.deviceType = kPFDeviceType; + installation.installationId = installationId; + if (oldDeviceToken) { + installation.deviceToken = oldDeviceToken; + } + } + + return installation; + }] continueWithBlock:^id(BFTask *task) { + dispatch_barrier_sync(_dataQueue, ^{ + _currentInstallation = task.result; + _currentInstallationMatchesDisk = !task.faulted; + }); + return task; + }]; + }]; +} + +- (BFTask *)saveCurrentObjectAsync:(PFInstallation *)installation { + @weakify(self); + return [_dataTaskQueue enqueue:^BFTask *(BFTask *unused) { + @strongify(self); + + if (installation != self.currentInstallation) { + return nil; + } + return [[self _saveCurrentInstallationToDiskAsync:installation] continueWithBlock:^id(BFTask *task) { + self.currentInstallationMatchesDisk = (!task.faulted && !task.cancelled); + return nil; + }]; + }]; +} + +///-------------------------------------- +#pragma mark - Installation +///-------------------------------------- + +- (PFInstallation *)memoryCachedCurrentInstallation { + return self.currentInstallation; +} + +- (BFTask *)clearCurrentInstallationAsync { + @weakify(self); + return [_dataTaskQueue enqueue:^BFTask *(BFTask *unused) { + @strongify(self); + + dispatch_barrier_sync(_dataQueue, ^{ + _currentInstallation = nil; + _currentInstallationMatchesDisk = NO; + }); + + NSMutableArray *tasks = [NSMutableArray arrayWithCapacity:2]; + if (self.storageType == PFCurrentObjectStorageTypeOfflineStore) { + BFTask *unpinTask = [PFObject unpinAllObjectsInBackgroundWithName:PFCurrentInstallationPinName]; + [tasks addObject:unpinTask]; + } + + NSString *path = [self.fileManager parseDataItemPathForPathComponent:PFCurrentInstallationFileName]; + BFTask *fileTask = [PFFileManager removeItemAtPathAsync:path]; + [tasks addObject:fileTask]; + + return [BFTask taskForCompletionOfAllTasks:tasks]; + }]; +} + +- (BFTask *)clearMemoryCachedCurrentInstallationAsync { + return [_dataTaskQueue enqueue:^BFTask *(BFTask *unused) { + self.currentInstallation = nil; + self.currentInstallationMatchesDisk = NO; + + return nil; + }]; +} + +///-------------------------------------- +#pragma mark - Data Storage +///-------------------------------------- + +- (BFTask *)_loadCurrentInstallationFromDiskAsync { + if (self.storageType == PFCurrentObjectStorageTypeOfflineStore) { + // Try loading from OfflineStore + PFQuery *query = [[[PFQuery queryWithClassName:[PFInstallation parseClassName]] + fromPinWithName:PFCurrentInstallationPinName] ignoreACLs]; + + return [[query findObjectsInBackground] continueWithSuccessBlock:^id(BFTask *task) { + NSArray *results = task.result; + if ([results count] == 1) { + return [BFTask taskWithResult:[results firstObject]]; + } else if ([results count] != 0) { + return [[PFObject unpinAllObjectsInBackgroundWithName:PFCurrentInstallationPinName] + continueWithSuccessResult:nil]; + } + + // Backward compatibility if we previously have non-LDS currentInstallation. + return [PFObject _migrateObjectInBackgroundFromFile:PFCurrentInstallationFileName + toPin:PFCurrentInstallationPinName]; + }]; + } + + PFObjectFilePersistenceController *controller = self.objectFilePersistenceController; + return [controller loadPersistentObjectAsyncForKey:PFCurrentInstallationFileName]; +} + +- (BFTask *)_saveCurrentInstallationToDiskAsync:(PFInstallation *)installation { + if (self.storageType == PFCurrentObjectStorageTypeOfflineStore) { + BFTask *task = [PFObject unpinAllObjectsInBackgroundWithName:PFCurrentInstallationPinName]; + return [task continueWithBlock:^id(BFTask *task) { + // Make sure to not pin children of PFInstallation automatically, as it can create problems + // if any of the children are of Installation class. + return [installation _pinInBackgroundWithName:PFCurrentInstallationPinName includeChildren:NO]; + }]; + } + + PFObjectFilePersistenceController *controller = self.objectFilePersistenceController; + return [controller persistObjectAsync:installation forKey:PFCurrentInstallationFileName]; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (PFFileManager *)fileManager { + return self.commonDataSource.fileManager; +} + +- (PFObjectFilePersistenceController *)objectFilePersistenceController { + return self.coreDataSource.objectFilePersistenceController; +} + +- (PFInstallationIdentifierStore *)installationIdentifierStore { + return self.commonDataSource.installationIdentifierStore; +} + +- (PFInstallation *)currentInstallation { + __block PFInstallation *installation = nil; + dispatch_sync(_dataQueue, ^{ + installation = _currentInstallation; + }); + return installation; +} + +- (void)setCurrentInstallation:(PFInstallation *)currentInstallation { + dispatch_barrier_sync(_dataQueue, ^{ + if (_currentInstallation != currentInstallation) { + _currentInstallation = currentInstallation; + } + }); +} + +- (BOOL)currentInstallationMatchesDisk { + __block BOOL matches = NO; + dispatch_sync(_dataQueue, ^{ + matches = _currentInstallationMatchesDisk; + }); + return matches; +} + +- (void)setCurrentInstallationMatchesDisk:(BOOL)currentInstallationMatchesDisk { + dispatch_barrier_sync(_dataQueue, ^{ + _currentInstallationMatchesDisk = currentInstallationMatchesDisk; + }); +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h b/BreakingBad/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h new file mode 100644 index 0000000..3e7becb --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h @@ -0,0 +1,39 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@class PFFileManager; + +@interface PFInstallationIdentifierStore : NSObject + +/*! + Returns a cached installationId or creates a new one, saves it to disk and returns it. + + @returns `NSString` representation of current installationId. + */ +@property (nonatomic, copy, readonly) NSString *installationIdentifier; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithFileManager:(PFFileManager *)fileManager NS_DESIGNATED_INITIALIZER; + +///-------------------------------------- +/// @name Clear +///-------------------------------------- + +/*! + Clears installation identifier on disk and in-memory. + */ +- (void)clearInstallationIdentifier; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m b/BreakingBad/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m new file mode 100644 index 0000000..af7fac5 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m @@ -0,0 +1,118 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFInstallationIdentifierStore.h" + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFFileManager.h" +#import "PFInternalUtils.h" +#import "PFMacros.h" +#import "PFMultiProcessFileLockController.h" +#import "Parse_Private.h" + +static NSString *const PFInstallationIdentifierFileName = @"installationId"; + +@interface PFInstallationIdentifierStore () { + dispatch_queue_t _synchronizationQueue; + PFFileManager *_fileManager; +} + +@property (nonatomic, copy, readwrite) NSString *installationIdentifier; +@property (nonatomic, copy, readonly) NSString *installationIdentifierFilePath; + +@end + +@implementation PFInstallationIdentifierStore + +@synthesize installationIdentifier = _installationIdentifier; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithFileManager:(PFFileManager *)fileManager { + self = [super init]; + if (!self) return nil; + + _synchronizationQueue = dispatch_queue_create("com.parse.installationIdentifier", DISPATCH_QUEUE_SERIAL); + PFMarkDispatchQueue(_synchronizationQueue); + + _fileManager = fileManager; + + return self; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (NSString *)installationIdentifier { + __block NSString *identifier = nil; + dispatch_sync(_synchronizationQueue, ^{ + if (!_installationIdentifier) { + [self _loadInstallationIdentifier]; + } + + identifier = _installationIdentifier; + }); + return identifier; +} + +- (void)setInstallationIdentifier:(NSString *)installationIdentifier { + PFAssertIsOnDispatchQueue(_synchronizationQueue); + if (_installationIdentifier != installationIdentifier) { + _installationIdentifier = [installationIdentifier copy]; + } +} + +- (void)clearInstallationIdentifier { + dispatch_sync(_synchronizationQueue, ^{ + NSString *filePath = self.installationIdentifierFilePath; + [[PFFileManager removeItemAtPathAsync:filePath] waitForResult:nil withMainThreadWarning:NO]; + + self.installationIdentifier = nil; + }); +} + +///-------------------------------------- +#pragma mark - Disk Operations +///-------------------------------------- + +- (void)_loadInstallationIdentifier { + PFAssertIsOnDispatchQueue(_synchronizationQueue); + + NSString *filePath = self.installationIdentifierFilePath; + [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:filePath]; + + NSString *identifier = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; + if (!identifier) { + identifier = [[[NSUUID UUID] UUIDString] lowercaseString]; + [[PFFileManager writeStringAsync:identifier toFile:filePath] waitForResult:nil withMainThreadWarning:NO]; + } + self.installationIdentifier = identifier; + + [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:filePath]; +} + +- (void)_clearCachedInstallationIdentifier { + dispatch_sync(_synchronizationQueue, ^{ + self.installationIdentifier = nil; + }); +} + +- (NSString *)installationIdentifierFilePath { + return [_fileManager parseDataItemPathForPathComponent:PFInstallationIdentifierFileName]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h new file mode 100644 index 0000000..f84b36b --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFInstallationIdentifierStore.h" + +@interface PFInstallationIdentifierStore (Private) + +/*! + Clears in-memory cached installation identifier, if any. + */ +- (void)_clearCachedInstallationIdentifier; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Installation/PFInstallationPrivate.h b/BreakingBad/Pods/Parse/Parse/Internal/Installation/PFInstallationPrivate.h new file mode 100644 index 0000000..0e24f86 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Installation/PFInstallationPrivate.h @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +@interface PFInstallation (Private) + +- (void)_clearDeviceToken; +- (void)_markAllFieldsDirty; + +@end + +@interface PFInstallation () + +// Private read-write declarations of publicly-readonly fields. +@property (nonatomic, copy, readwrite) NSString *deviceType; +@property (nonatomic, copy, readwrite) NSString *installationId; +@property (nonatomic, copy, readwrite) NSString *timeZone; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache.h b/BreakingBad/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache.h new file mode 100644 index 0000000..e2518de --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache.h @@ -0,0 +1,47 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface PFKeyValueCache : NSObject + +@property (nonatomic, copy, readonly) NSString *cacheDirectoryPath; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithCacheDirectoryPath:(NSString *)path; + +///-------------------------------------- +/// @name Setting +///-------------------------------------- + +- (void)setObject:(NSString *)object forKey:(NSString *)key; +- (void)setObject:(NSString *)object forKeyedSubscript:(NSString *)key; + +///-------------------------------------- +/// @name Getting +///-------------------------------------- + +- (NSString *)objectForKey:(NSString *)key maxAge:(NSTimeInterval)age; + +///-------------------------------------- +/// @name Removing +///-------------------------------------- + +- (void)removeObjectForKey:(NSString *)key; +- (void)removeAllObjects; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache.m b/BreakingBad/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache.m new file mode 100644 index 0000000..f2ee85f --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache.m @@ -0,0 +1,336 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFKeyValueCache_Private.h" + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFConstants.h" +#import "PFFileManager.h" +#import "PFInternalUtils.h" +#import "PFLogging.h" + +static const NSUInteger PFKeyValueCacheDefaultDiskCacheSize = 10 << 20; +static const NSUInteger PFKeyValueCacheDefaultDiskCacheRecords = 1000; +static const NSUInteger PFKeyValueCacheDefaultMemoryCacheRecordSize = 1 << 20; +static const NSTimeInterval PFKeyValueCacheDiskCacheTimeResolution = 1; // HFS+ stores only second level accuracy. + +static NSString *const PFKeyValueCacheDiskCachePathKey = @"path"; + +@interface PFKeyValueCacheEntry () + +// We need to generate a setter that's atomic to safely clear the value. +@property (nullable, atomic, readwrite, copy) NSString *value; + +@end + +@implementation PFKeyValueCacheEntry + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithValue:(NSString *)value { + return [self initWithValue:value creationTime:[NSDate date]]; +} + +- (instancetype)initWithValue:(NSString *)value creationTime:(NSDate *)creationTime { + self = [super init]; + if (!self) return nil; + + _value = [value copy]; + _creationTime = creationTime; + + return self; +} + ++ (instancetype)cacheEntryWithValue:(NSString *)value { + return [[self alloc] initWithValue:value]; +} + ++ (instancetype)cacheEntryWithValue:(NSString *)value creationTime:(NSDate *)creationTime { + return [[self alloc] initWithValue:value creationTime:creationTime]; +} + +@end + +@implementation PFKeyValueCache { + NSURL *_cacheDirectoryURL; + dispatch_queue_t _diskCacheQueue; + + NSDate *_lastDiskCacheModDate; + NSUInteger _lastDiskCacheSize; + NSMutableArray *_lastDiskCacheAttributes; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithCacheDirectoryPath:(NSString *)path { + return [self initWithCacheDirectoryURL:[NSURL fileURLWithPath:path] + fileManager:[NSFileManager defaultManager] + memoryCache:[[NSCache alloc] init]]; +} + +- (instancetype)initWithCacheDirectoryURL:(NSURL *)url + fileManager:(NSFileManager *)fileManager + memoryCache:(NSCache *)cache { + self = [super init]; + if (!self) return nil; + + _cacheDirectoryURL = url; + _fileManager = fileManager; + _memoryCache = cache; + + _diskCacheQueue = dispatch_queue_create("com.parse.keyvaluecache.disk", DISPATCH_QUEUE_SERIAL); + + _maxDiskCacheBytes = PFKeyValueCacheDefaultDiskCacheSize; + _maxDiskCacheRecords = PFKeyValueCacheDefaultDiskCacheRecords; + _maxMemoryCacheBytesPerRecord = PFKeyValueCacheDefaultMemoryCacheRecordSize; + + return self; +} + +///-------------------------------------- +#pragma mark - Property Accessors +///-------------------------------------- + +- (NSString *)cacheDirectoryPath { + [_fileManager createDirectoryAtURL:_cacheDirectoryURL withIntermediateDirectories:YES attributes:nil error:NULL]; + return _cacheDirectoryURL.path; +} + +///-------------------------------------- +#pragma mark - Public +///-------------------------------------- + +- (void)setObject:(NSString *)object forKeyedSubscript:(NSString *)key { + [self setObject:object forKey:key]; +} + +- (void)setObject:(NSString *)value forKey:(NSString *)key { + NSUInteger keyBytes = [key maximumLengthOfBytesUsingEncoding:[key fastestEncoding]]; + NSUInteger valueBytes = [value maximumLengthOfBytesUsingEncoding:[value fastestEncoding]]; + + if ((keyBytes + valueBytes) < self.maxMemoryCacheBytesPerRecord) { + [self.memoryCache setObject:[PFKeyValueCacheEntry cacheEntryWithValue:value] forKey:key]; + } else { + [self.memoryCache removeObjectForKey:key]; + } + + dispatch_async(_diskCacheQueue, ^{ + [self _createDiskCacheEntry:value atURL:[self _cacheURLForKey:key]]; + [self _compactDiskCache]; + }); +} + +- (NSString *)objectForKey:(NSString *)key maxAge:(NSTimeInterval)maxAge { + NSURL *cacheURL = [self _cacheURLForKey:key]; + PFKeyValueCacheEntry *cacheEntry = [self.memoryCache objectForKey:key]; + + if (cacheEntry) { + if ([[NSDate date] timeIntervalSinceDate:cacheEntry.creationTime] > maxAge) { + // We know the cache to be too old in both copies. + // Save space, remove this key from disk, and it's value from the memory cache. + [self removeObjectForKey:key]; + return nil; + } + + dispatch_async(_diskCacheQueue, ^{ + [self _updateModificationDateAtURL:cacheURL]; + }); + + return cacheEntry.value; + } + + // Wait for all outstanding disk operations before continuing, as another thread could be in the process of + // Writing a value to disk right now. + __block NSString *value = nil; + dispatch_sync(_diskCacheQueue, ^{ + NSDate *modificationDate = [self _modificationDateOfCacheEntryAtURL:cacheURL]; + if ([[NSDate date] timeIntervalSinceDate:modificationDate] > maxAge) { + [self removeObjectForKey:key]; + return; + } + + // Cache misses here (e.g. creationDate and value are both nil) should still be put into the memory cache. + value = [self _diskCacheEntryForURL:cacheURL]; + [self.memoryCache setObject:[PFKeyValueCacheEntry cacheEntryWithValue:value creationTime:modificationDate] + forKey:key]; + }); + + return value; +} + +- (void)removeObjectForKey:(NSString *)key { + [self.memoryCache removeObjectForKey:key]; + + dispatch_async(_diskCacheQueue, ^{ + [self.fileManager removeItemAtURL:[self _cacheURLForKey:key] error:NULL]; + }); +} + +- (void)removeAllObjects { + [self.memoryCache removeAllObjects]; + + dispatch_sync(_diskCacheQueue, ^{ + // Directory will be automatically recreated the next time 'cacheDir' is accessed. + [self.fileManager removeItemAtURL:_cacheDirectoryURL error:NULL]; + }); +} + +- (void)waitForOutstandingOperations { + dispatch_sync(_diskCacheQueue, ^{ + // Wait, do nothing + }); +} + +///-------------------------------------- +#pragma mark - Private +///-------------------------------------- + +- (NSURL *)_cacheURLForKey:(NSString *)key { + return [_cacheDirectoryURL URLByAppendingPathComponent:key]; +} + +- (void)_updateModificationDateAtURL:(NSURL *)url { + [self.fileManager setAttributes:@{ NSFileModificationDate: [NSDate date] } ofItemAtPath:url.path error:NULL]; +} + +- (NSDate *)_modificationDateOfCacheEntryAtURL:(NSURL *)url { + return [self.fileManager attributesOfItemAtPath:url.path error:NULL][NSFileModificationDate]; +} + +///-------------------------------------- +#pragma mark - Disk Cache +///-------------------------------------- + +- (NSString *)_diskCacheEntryForURL:(NSURL *)url { + NSData *bytes = [self.fileManager contentsAtPath:[url path]]; + if (!bytes) { + return nil; + } + + [self _updateModificationDateAtURL:url]; + return [[NSString alloc] initWithData:bytes encoding:NSUTF8StringEncoding]; +} + +- (void)_createDiskCacheEntry:(NSString *)value atURL:(NSURL *)url { + NSString *path = [url path]; + NSData *bytes = [value dataUsingEncoding:NSUTF8StringEncoding]; + NSDate *creationDate = [NSDate date]; + + BOOL isDirty = [self _isDiskCacheDirty]; + + [_fileManager createDirectoryAtURL:_cacheDirectoryURL withIntermediateDirectories:YES attributes:nil error:NULL]; + [self.fileManager createFileAtPath:path + contents:bytes + attributes:@{ NSFileCreationDate: creationDate, NSFileModificationDate: creationDate }]; + + if (!isDirty) { + _lastDiskCacheModDate = creationDate; + _lastDiskCacheSize += bytes.length; + + [self _addToDiskCacheDictionary:path + modificationDate:creationDate + size:bytes.length]; + } else { + [self _invalidateDiskCache]; + } +} + +- (BOOL)_isDiskCacheDirty { + if (!_lastDiskCacheModDate) { + return YES; + } + + NSDate *modificationDate = [self _modificationDateOfCacheEntryAtURL:_cacheDirectoryURL]; + NSTimeInterval knownInterval = [_lastDiskCacheModDate timeIntervalSinceReferenceDate]; + NSTimeInterval actualInterval = [modificationDate timeIntervalSinceReferenceDate]; + + // NOTE: Most file systems (HFS) can only store up to 1 second of precision, whereas NSDate is super high resolution + // Yes, this is actually really bad to have hard coded, as this does give some window where we can get unwanted + // entries in the cache. However, that chance of another process touching this directory is greatly outweighed by + // the performance gained by using this technique. Plus, in the case of concurrent modification, we will never over- + // agressively remove something from the cache, we just might go a little bit over our limit. + return (actualInterval - knownInterval) >= PFKeyValueCacheDiskCacheTimeResolution; +} + +- (void)_invalidateDiskCache { + _lastDiskCacheModDate = nil; + _lastDiskCacheSize = 0; + _lastDiskCacheAttributes = nil; +} + +- (void)_recreateDiskCache { + NSDictionary *cacheDirectoryAttributes = [self.fileManager attributesOfItemAtPath:_cacheDirectoryURL.path error:NULL]; + + _lastDiskCacheModDate = cacheDirectoryAttributes[NSFileModificationDate]; + _lastDiskCacheSize = 0; + _lastDiskCacheAttributes = [[NSMutableArray alloc] init]; + + NSDirectoryEnumerator *enumerator = [self.fileManager enumeratorAtPath:[_cacheDirectoryURL path]]; + NSString *path = nil; + + while ((path = [enumerator nextObject]) != nil) { + [enumerator skipDescendants]; + + NSDictionary *attributes = enumerator.fileAttributes; + NSUInteger size = [attributes[NSFileSize] unsignedIntegerValue]; + + _lastDiskCacheSize += size; + + // NOTE: Do not use -copy here, as fileAttributes are lazily-loaded, we would run into issues with a lot of + // syscalls all at once here. + [self _addToDiskCacheDictionary:path + modificationDate:attributes[NSFileModificationDate] + size:size]; + } +} + +- (void)_addToDiskCacheDictionary:(NSString *)path modificationDate:(NSDate *)modificationDate size:(NSUInteger)size { + NSDictionary *entry = @{ + PFKeyValueCacheDiskCachePathKey: path, + NSFileModificationDate: modificationDate, + NSFileSize: @(size) + }; + + NSInteger insertionIndex = [_lastDiskCacheAttributes indexOfObject:entry + inSortedRange:NSMakeRange(0, _lastDiskCacheAttributes.count) + options:NSBinarySearchingInsertionIndex + usingComparator:^NSComparisonResult(id obj1, id obj2) { + return [obj1[NSFileModificationDate] compare:obj2[NSFileModificationDate]]; + }]; + + [_lastDiskCacheAttributes insertObject:entry atIndex:insertionIndex]; +} + +- (void)_compactDiskCache { + if ([self _isDiskCacheDirty]) { + [self _recreateDiskCache]; + } + + while (_lastDiskCacheAttributes.count > _maxDiskCacheRecords || _lastDiskCacheSize > _maxDiskCacheBytes) { + NSDictionary *attributes = [_lastDiskCacheAttributes firstObject]; + NSString *toRemove = attributes[PFKeyValueCacheDiskCachePathKey]; + NSNumber *fileSize = attributes[NSFileSize]; + + [self.fileManager removeItemAtURL:[self _cacheURLForKey:toRemove] error:NULL]; + _lastDiskCacheSize -= [fileSize unsignedIntegerValue]; + + [_lastDiskCacheAttributes removeObjectAtIndex:0]; + } +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h new file mode 100644 index 0000000..6c45b6d --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h @@ -0,0 +1,66 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFKeyValueCache.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFKeyValueCache () + +///-------------------------------------- +/// @name Properties +///-------------------------------------- + +@property (nullable, nonatomic, strong, readwrite) NSFileManager *fileManager; +@property (nullable, nonatomic, strong, readwrite) NSCache *memoryCache; + +@property (nonatomic, assign) NSUInteger maxDiskCacheBytes; +@property (nonatomic, assign) NSUInteger maxDiskCacheRecords; +@property (nonatomic, assign) NSUInteger maxMemoryCacheBytesPerRecord; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)initWithCacheDirectoryURL:(nullable NSURL *)url + fileManager:(nullable NSFileManager *)fileManager + memoryCache:(nullable NSCache *)cache NS_DESIGNATED_INITIALIZER; + +///-------------------------------------- +/// @name Waiting +///-------------------------------------- + +- (void)waitForOutstandingOperations; + +@end + +@interface PFKeyValueCacheEntry : NSObject + +///-------------------------------------- +/// @name Properties +///-------------------------------------- + +@property (atomic, copy, readonly) NSString *value; +@property (atomic, strong, readonly) NSDate *creationTime; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + ++ (instancetype)cacheEntryWithValue:(NSString *)value; ++ (instancetype)cacheEntryWithValue:(NSString *)value creationTime:(NSDate *)creationTime; + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithValue:(NSString *)value; +- (instancetype)initWithValue:(NSString *)value + creationTime:(NSDate *)creationTime NS_DESIGNATED_INITIALIZER; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h new file mode 100644 index 0000000..ff8bfa2 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h @@ -0,0 +1,79 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFMacros.h" + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFObject; +@class PFOfflineStore; +@class PFQueryState; +@class PFSQLiteDatabase; +@class PFUser; + +typedef BFTask PF_GENERIC(NSNumber *)* (^PFConstraintMatcherBlock)(PFObject *object, PFSQLiteDatabase *database); + +typedef NS_OPTIONS(uint8_t, PFOfflineQueryOption) { + PFOfflineQueryOptionOrder = 1 << 0, + PFOfflineQueryOptionLimit = 1 << 1, + PFOfflineQueryOptionSkip = 1 << 2, +}; + +@interface PFOfflineQueryLogic : NSObject + +/*! + Initialize an `PFOfflineQueryLogic` instance with `PFOfflineStore` instance. + `PFOfflineStore` is needed for subQuery, inQuery and fetch. + */ +- (instancetype)initWithOfflineStore:(PFOfflineStore *)offlineStore; + +/*! + @returns YES iff the object is visible based on its read ACL and the given user objectId. + */ ++ (BOOL)userHasReadAccess:(PFUser *)user ofObject:(PFObject *)object; + +/*! + @returns YES iff the object is visible based on its read ACL and the given user objectId. + */ ++ (BOOL)userHasWriteAccess:(PFUser *)user ofObject:(PFObject *)object; + +/*! + Returns a PFConstraintMatcherBlock that returns true iff the object matches the given + query's constraints. This takes in a PFSQLiteDatabase connection because SQLite is finicky + about nesting connections, so we want to reuse them whenever possible. + */ +- (PFConstraintMatcherBlock)createMatcherForQueryState:(PFQueryState *)queryState user:(PFUser *)user; + +/*! + Sort given array with given `PFQuery` constraint. + + @returns sorted result. + */ +- (NSArray *)resultsByApplyingOptions:(PFOfflineQueryOption)options + ofQueryState:(PFQueryState *)queryState + toResults:(NSArray *)results; + +/*! + Make sure all of the objects included by the given query get fetched. + */ +- (BFTask *)fetchIncludesAsyncForResults:(NSArray *)results + ofQueryState:(PFQueryState *)queryState + inDatabase:(PFSQLiteDatabase *)database; + +/*! + Make sure all of the objects included by the given query get fetched. + */ +- (BFTask *)fetchIncludesForObjectAsync:(PFObject *)object + queryState:(PFQueryState *)queryState + database:(PFSQLiteDatabase *)database; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m new file mode 100644 index 0000000..63168ce --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m @@ -0,0 +1,918 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFOfflineQueryLogic.h" + +#import + +#import "PFACL.h" +#import "PFAssert.h" +#import "PFConstants.h" +#import "PFDateFormatter.h" +#import "PFDecoder.h" +#import "PFEncoder.h" +#import "PFErrorUtilities.h" +#import "PFGeoPoint.h" +#import "PFOfflineStore.h" +#import "PFQueryPrivate.h" +#import "PFRelation.h" +#import "PFRelationPrivate.h" + +typedef BOOL (^PFComparatorDeciderBlock)(id value, id constraint); +typedef BOOL (^PFSubQueryMatcherBlock)(id object, NSArray *results); + +/*! + A query to be used in $inQuery, $notInQuery, $select and $dontSelect + */ +@interface PFSubQueryMatcher : NSObject + +@property (nonatomic, strong, readonly) PFQuery *subQuery; +@property (nonatomic, strong) BFTask *subQueryResults; +@property (nonatomic, strong, readonly) PFOfflineStore *offlineStore; + +@end + +@implementation PFSubQueryMatcher + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithSubQuery:(PFQuery *)query offlineStore:(PFOfflineStore *)offlineStore { + if ((self = [super init]) != nil) { + _subQuery = query; + _offlineStore = offlineStore; + } + + return self; +} + +///-------------------------------------- +#pragma mark - SubQuery Matcher Creator +///-------------------------------------- + +- (PFConstraintMatcherBlock)createMatcherWithSubQueryMatcherBlock:(PFSubQueryMatcherBlock)block user:(PFUser *)user { + return ^BFTask *(PFObject *object, PFSQLiteDatabase *database) { + if (self.subQueryResults == nil) { + self.subQueryResults = [self.offlineStore findAsyncForQueryState:self.subQuery.state + user:user + pin:nil + isCount:NO + database:database]; + } + return [self.subQueryResults continueWithSuccessBlock:^id(BFTask *task) { + return @(block(object, task.result)); + }]; + }; +} + +@end + +@interface PFOfflineQueryLogic () + +@property (nonatomic, weak) PFOfflineStore *offlineStore; + +@end + +@implementation PFOfflineQueryLogic + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithOfflineStore:(PFOfflineStore *)offlineStore { + if ((self = [super init]) != nil) { + _offlineStore = offlineStore; + } + return self; +} + +///-------------------------------------- +#pragma mark - Value Getter +///-------------------------------------- + +- (id)valueForContainer:(id)container + key:(NSString *)key { + return [self valueForContainer:container key:key depth:0]; +} + +- (id)valueForContainer:(id)container + key:(NSString *)key + depth:(int)depth { + if ([key rangeOfString:@"."].location != NSNotFound) { + NSArray *parts = [key componentsSeparatedByString:@"."]; + + NSString *firstKey = [parts firstObject]; + NSString *rest = nil; + if ([parts count] > 1) { + NSRange range = NSMakeRange(1, [parts count] - 1); + rest = [[parts subarrayWithRange:range] componentsJoinedByString:@"."]; + } + id value = [self valueForContainer:container key:firstKey depth:depth + 1]; + // Only NSDictionary can be dotted into for getting values, so we should reject + // anything like ParseObjects and arrays. + if (!(value == nil || [value isKindOfClass:[NSDictionary class]])) { + if (depth > 0) { + id restFormat = [[PFPointerObjectEncoder objectEncoder] encodeObject:value]; + if ([restFormat isKindOfClass:[NSDictionary class]]) { + return [self valueForContainer:restFormat key:rest depth:depth + 1]; + } + } + [NSException raise:NSInvalidArgumentException format:@"Key %@ is invalid", key]; + } + return [self valueForContainer:value key:rest depth:depth + 1]; + } + + if ([container isKindOfClass:[PFObject class]]) { + PFObject *object = (PFObject *)container; + + // The object needs to have been fetched already if we are going to sort by one of its field. + PFParameterAssert(object.isDataAvailable, @"Bad key %@", key); + + // Handle special keys for PFObject. + if ([key isEqualToString:@"objectId"]) { + return object.objectId; + } else if ([key isEqualToString:@"createdAt"] || [key isEqualToString:@"_created_at"]) { + return object.createdAt; + } else if ([key isEqualToString:@"updatedAt"] || [key isEqualToString:@"_updated_at"]) { + return object.updatedAt; + } else { + return object[key]; + } + } else if ([container isKindOfClass:[NSDictionary class]]) { + return ((NSDictionary *)container)[key]; + } else if (container == nil) { + return nil; + } else { + [NSException raise:NSInvalidArgumentException format:@"Bad key %@", key]; + // Shouldn't reach here. + return nil; + } +} + +///-------------------------------------- +#pragma mark - Matcher With Decider +///-------------------------------------- + +/*! + Returns YES if decider returns YES for any value in the given array. + */ ++ (BOOL)matchesArray:(NSArray *)array + constraint:(id)constraint + withDecider:(PFComparatorDeciderBlock)decider { + for (id value in array) { + if (decider(value, constraint)) { + return YES; + } + } + return NO; +} + +/*! + Returns YES if decider returns YES for any value in the given array. + */ ++ (BOOL)matchesValue:(id)value + constraint:(id)constraint + withDecider:(PFComparatorDeciderBlock)decider { + if ([value isKindOfClass:[NSArray class]]) { + return [self matchesArray:value constraint:constraint withDecider:decider]; + } else { + return decider(value, constraint); + } +} + +///-------------------------------------- +#pragma mark - Matcher +///-------------------------------------- + +/*! + Implements simple equality constraints. This emulates Mongo's behavior where "equals" can mean array containment. + */ ++ (BOOL)matchesValue:(id)value + equalTo:(id)constraint { + return [self matchesValue:value constraint:constraint withDecider:^BOOL (id value, id constraint) { + // Do custom matching for dates to make sure we have proper precision. + if ([value isKindOfClass:[NSDate class]] && + [constraint isKindOfClass:[NSDate class]]) { + PFDateFormatter *dateFormatter = [PFDateFormatter sharedFormatter]; + NSString *valueString = [dateFormatter preciseStringFromDate:value]; + NSString *constraintString = [dateFormatter preciseStringFromDate:constraint]; + return [valueString isEqual:constraintString]; + } + + if ([value isKindOfClass:[PFRelation class]]) { + return [value isEqual:constraint] || [value _hasKnownObject:constraint]; + } + + return [value isEqual:constraint]; + }]; +} + +/*! + Matches $ne constraints. + */ ++ (BOOL)matchesValue:(id)value + notEqualTo:(id)constraint { + return ![self matchesValue:value equalTo:constraint]; +} + +/*! + Matches $lt constraints. + */ ++ (BOOL)matchesValue:(id)value + lessThan:(id)constraint { + return [self matchesValue:value constraint:constraint withDecider:^BOOL (id value, id constraint) { + if (value == nil || value == [NSNull null]) { + return NO; + } + NSComparisonResult comparisonResult = [value compare:constraint]; + return comparisonResult == NSOrderedAscending; + }]; +} + +/*! + Matches $lte constraints. + */ ++ (BOOL)matchesValue:(id)value + lessThanOrEqualTo:(id)constraint { + return [self matchesValue:value constraint:constraint withDecider:^BOOL (id value, id constraint) { + if (value == nil || value == [NSNull null]) { + return NO; + } + NSComparisonResult comparisonResult = [value compare:constraint]; + return (comparisonResult == NSOrderedAscending) || (comparisonResult == NSOrderedSame); + }]; +} + +/*! + Matches $gt constraints. + */ ++ (BOOL)matchesValue:(id)value + greaterThan:(id)constraint { + return [self matchesValue:value constraint:constraint withDecider:^BOOL (id value, id constraint) { + if (value == nil || value == [NSNull null]) { + return NO; + } + NSComparisonResult comparisonResult = [value compare:constraint]; + return comparisonResult == NSOrderedDescending; + }]; +} + +/*! + Matches $gte constraints. + */ ++ (BOOL)matchesValue:(id)value +greaterThanOrEqualTo:(id)constraint { + return [self matchesValue:value constraint:constraint withDecider:^BOOL (id value, id constraint) { + if (value == nil || value == [NSNull null]) { + return NO; + } + NSComparisonResult comparisonResult = [value compare:constraint]; + return (comparisonResult == NSOrderedDescending) || (comparisonResult == NSOrderedSame); + }]; +} + +/*! + Matches $in constraints. + $in returns YES if the intersection of value and constraint is not an empty set. + */ ++ (BOOL)matchesValue:(id)value + containedIn:(id)constraint { + if (constraint == nil || constraint == [NSNull null]) { + return NO; + } + + PFParameterAssert([constraint isKindOfClass:[NSArray class]], @"Constraint type not supported for $in queries"); + + for (id requiredItem in (NSArray *)constraint) { + if ([self matchesValue:value equalTo:requiredItem]) { + return YES; + } + } + return NO; +} + +/*! + Matches $nin constraints. + */ ++ (BOOL)matchesValue:(id)value + notContainedIn:(id)constraint { + return ![self matchesValue:value containedIn:constraint]; +} + +/*! + Matches $all constraints. + */ ++ (BOOL)matchesValue:(id)value containsAllObjectsInArray:(id)constraints { + PFParameterAssert([constraints isKindOfClass:[NSArray class]], @"Constraint type not supported for $all queries"); + PFParameterAssert([value isKindOfClass:[NSArray class]], @"Value type not supported for $all queries"); + + for (id requiredItem in (NSArray *)constraints) { + if (![self matchesValue:value equalTo:requiredItem]) { + return NO; + } + } + return YES; +} + +/*! + Matches $regex constraints. + */ ++ (BOOL)matchesValue:(id)value + regex:(id)constraint + withOptions:(NSString *)options { + if (value == nil || value == [NSNull null]) { + return NO; + } + + if (options == nil) { + options = @""; + } + + PFParameterAssert([options rangeOfString:@"^[imxs]*$" options:NSRegularExpressionSearch].location != NSNotFound, + @"Invalid regex options %@", options); + + NSRegularExpressionOptions flags = 0; + if ([options rangeOfString:@"i"].location != NSNotFound) { + flags = flags | NSRegularExpressionCaseInsensitive; + } + if ([options rangeOfString:@"m"].location != NSNotFound) { + flags = flags | NSRegularExpressionAnchorsMatchLines; + } + if ([options rangeOfString:@"x"].location != NSNotFound) { + flags = flags | NSRegularExpressionAllowCommentsAndWhitespace; + } + if ([options rangeOfString:@"s"].location != NSNotFound) { + flags = flags | NSRegularExpressionDotMatchesLineSeparators; + } + + NSError *error = nil; + NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:constraint + options:flags + error:&error]; + NSArray *matches = [regex matchesInString:value options:0 range:NSMakeRange(0, [value length])]; + return matches.count > 0; +} + +/*! + Matches $exists constraints. + */ ++ (BOOL)matchesValue:(id)value + exists:(id)constraint { + if (constraint != nil && [constraint boolValue]) { + return value != nil && value != [NSNull null]; + } + + return value == nil || value == [NSNull null]; +} + +/*! + Matches $nearSphere constraints. + */ ++ (BOOL)matchesValue:(id)value + nearSphere:(id)constraint + maxDistance:(NSNumber *)maxDistance { + if (value == nil || value == [NSNull null]) { + return NO; + } + if (maxDistance == nil) { + return YES; + } + PFGeoPoint *point1 = constraint; + PFGeoPoint *point2 = value; + return [point1 distanceInRadiansTo:point2] <= [maxDistance doubleValue]; +} + +/*! + Matches $within constraints. + */ ++ (BOOL)matchesValue:(id)value + within:(id)constraint { + NSDictionary *constraintDictionary = (NSDictionary *)constraint; + NSArray *box = constraintDictionary[PFQueryOptionKeyBox]; + PFGeoPoint *southWest = box[0]; + PFGeoPoint *northEast = box[1]; + PFGeoPoint *target = (PFGeoPoint *)value; + + PFParameterAssert(northEast.longitude >= southWest.longitude, + @"whereWithinGeoBox queries cannot cross the International Date Line."); + PFParameterAssert(northEast.latitude >= southWest.latitude, + @"The southwest corner of a geo box must be south of the northeast corner."); + PFParameterAssert((northEast.longitude - southWest.longitude) <= 180, + @"Geo box queries larger than 180 degrees in longitude are not supported." + @"Please check point order."); + + return (target.latitude >= southWest.latitude && + target.latitude <= northEast.latitude && + target.longitude >= southWest.longitude && + target.longitude <= northEast.longitude); +} + +/*! + Returns YES iff the given value matches the given operator and constraint. + Raise NSInvalidArgumentException if the operator is not one this function can handle + */ ++ (BOOL)matchesValue:(id)value + constraint:(id)constraint + operator:(NSString *)operator + allKeyConstraints:(NSDictionary *)allKeyConstraints { + if ([operator isEqualToString:PFQueryKeyNotEqualTo]) { + return [self matchesValue:value notEqualTo:constraint]; + } else if ([operator isEqualToString:PFQueryKeyLessThan]) { + return [self matchesValue:value lessThan:constraint]; + } else if ([operator isEqualToString:PFQueryKeyLessThanEqualTo]) { + return [self matchesValue:value lessThanOrEqualTo:constraint]; + } else if ([operator isEqualToString:PFQueryKeyGreaterThan]) { + return [self matchesValue:value greaterThan:constraint]; + } else if ([operator isEqualToString:PFQueryKeyGreaterThanOrEqualTo]) { + return [self matchesValue:value greaterThanOrEqualTo:constraint]; + } else if ([operator isEqualToString:PFQueryKeyContainedIn]) { + return [self matchesValue:value containedIn:constraint]; + } else if ([operator isEqualToString:PFQueryKeyNotContainedIn]) { + return [self matchesValue:value notContainedIn:constraint]; + } else if ([operator isEqualToString:PFQueryKeyContainsAll]) { + return [self matchesValue:value containsAllObjectsInArray:constraint]; + } else if ([operator isEqualToString:PFQueryKeyRegex]) { + return [self matchesValue:value regex:constraint withOptions:allKeyConstraints[PFQueryOptionKeyRegexOptions]]; + } else if ([operator isEqualToString:PFQueryOptionKeyRegexOptions]) { + // No need to do anything. This is handled by $regex. + return YES; + } else if ([operator isEqualToString:PFQueryKeyExists]) { + return [self matchesValue:value exists:constraint]; + } else if ([operator isEqualToString:PFQueryKeyNearSphere]) { + return [self matchesValue:value + nearSphere:constraint + maxDistance:allKeyConstraints[PFQueryOptionKeyMaxDistance]]; + } else if ([operator isEqualToString:PFQueryOptionKeyMaxDistance]) { + // No need to do anything. This is handled by $nearSphere. + return YES; + } else if ([operator isEqualToString:PFQueryKeyWithin]) { + return [self matchesValue:value within:constraint]; + } + + [NSException raise:NSInvalidArgumentException + format:@"The offline store does not yet support %@ operator.", operator]; + // Shouldn't reach here + return YES; +} + +/*! + Creates a matcher that handles $inQuery constraints. + */ +- (PFConstraintMatcherBlock)createMatcherForKey:(NSString *)key + inQuery:(id)constraints + user:(PFUser *)user { + PFQuery *query = (PFQuery *)constraints; + PFSubQueryMatcher *subQueryMatcher = [[PFSubQueryMatcher alloc] initWithSubQuery:query + offlineStore:self.offlineStore]; + return [subQueryMatcher createMatcherWithSubQueryMatcherBlock:^BOOL(id object, NSArray *results) { + id value = [self valueForContainer:object key:key]; + return [[self class] matchesValue:value containedIn:results]; + } user:user]; +} + +/*! + Creates a matcher that handles $notInQuery constraints. + */ +- (PFConstraintMatcherBlock)createMatcherForKey:(NSString *)key + notInQuery:(id)constraints + user:(PFUser *)user { + PFConstraintMatcherBlock inQueryMatcher = [self createMatcherForKey:key inQuery:constraints user:user]; + return ^BFTask *(PFObject *object, PFSQLiteDatabase *database) { + return [inQueryMatcher(object, database) continueWithSuccessBlock:^id(BFTask *task) { + return @(![task.result boolValue]); + }]; + }; +} + +/*! + Creates a matcher that handles $select constraints. + */ +- (PFConstraintMatcherBlock)createMatcherForKey:(NSString *)key + select:(id)constraints + user:(PFUser *)user { + NSDictionary *constraintDictionary = (NSDictionary *)constraints; + PFQuery *query = (PFQuery *)constraintDictionary[PFQueryKeyQuery]; + NSString *resultKey = (NSString *)constraintDictionary[PFQueryKeyKey]; + PFSubQueryMatcher *subQueryMatcher = [[PFSubQueryMatcher alloc] initWithSubQuery:query + offlineStore:self.offlineStore]; + return [subQueryMatcher createMatcherWithSubQueryMatcherBlock:^BOOL(id object, NSArray *results) { + id value = [self valueForContainer:object key:key]; + for (id result in results) { + id resultValue = [self valueForContainer:result key:resultKey]; + if ([[self class] matchesValue:resultValue equalTo:value]) { + return YES; + } + } + return NO; + } user:user]; +} + +/*! + Creates a matcher that handles $dontSelect constraints. + */ +- (PFConstraintMatcherBlock)createMatcherForKey:(NSString *)key + dontSelect:(id)constraints + user:(PFUser *)user { + PFConstraintMatcherBlock selectMatcher = [self createMatcherForKey:key select:constraints user:user]; + return ^BFTask *(PFObject *object, PFSQLiteDatabase *database) { + return [selectMatcher(object, database) continueWithSuccessBlock:^id(BFTask *task) { + return @(![task.result boolValue]); + }]; + }; +} + +/*! + Creates a matcher for a particular constraint operator. + */ +- (PFConstraintMatcherBlock)createMatcherWithOperator:(NSString *)operator + constraints:(id)constraint + key:(NSString *)key + allKeyConstraints:(NSDictionary *)allKeyConstraints + user:(PFUser *)user { + if ([operator isEqualToString:PFQueryKeyInQuery]) { + return [self createMatcherForKey:key inQuery:constraint user:user]; + } else if ([operator isEqualToString:PFQueryKeyNotInQuery]) { + return [self createMatcherForKey:key notInQuery:constraint user:user]; + } else if ([operator isEqualToString:PFQueryKeySelect]) { + return [self createMatcherForKey:key select:constraint user:user]; + } else if ([operator isEqualToString:PFQueryKeyDontSelect]) { + return [self createMatcherForKey:key dontSelect:constraint user:user]; + } else { + return ^BFTask *(PFObject *object, PFSQLiteDatabase *database) { + id value = [self valueForContainer:object key:key]; + BOOL matchesValue = [[self class] matchesValue:value + constraint:constraint + operator:operator + allKeyConstraints:allKeyConstraints]; + return [BFTask taskWithResult:@(matchesValue)]; + }; + } +} + +/*! + Handles $or queries. + */ +- (PFConstraintMatcherBlock)createOrMatcherForQueries:(NSArray *)queries user:(PFUser *)user { + NSMutableArray *matchers = [NSMutableArray array]; + for (PFQuery *query in queries) { + PFConstraintMatcherBlock matcher = [self createMatcherWithQueryConstraints:query.state.conditions user:user]; + [matchers addObject:matcher]; + } + + // Now OR together the constraints for each query. + return ^BFTask *(PFObject *object, PFSQLiteDatabase *database) { + BFTask *task = [BFTask taskWithResult:@NO]; + for (PFConstraintMatcherBlock matcher in matchers) { + task = [task continueWithSuccessBlock:^id(BFTask *task) { + if ([task.result boolValue]) { + return task; + } + return matcher(object, database); + }]; + } + return task; + }; +} + +/*! + Returns a PFConstraintMatcherBlock that return true iff the object matches queryConstraints. This + takes in a SQLiteDatabase connection because SQLite is finicky about nesting connections, so we + want to reuse them whenever possible. + */ +- (PFConstraintMatcherBlock)createMatcherWithQueryConstraints:(NSDictionary *)queryConstraints user:(PFUser *)user { + NSMutableArray *matchers = [[NSMutableArray alloc] init]; + [queryConstraints enumerateKeysAndObjectsUsingBlock:^(id key, id queryConstraintValue, BOOL *stop) { + if ([key isEqualToString:PFQueryKeyOr]) { + // A set of queries to be OR-ed together + PFConstraintMatcherBlock matcher = [self createOrMatcherForQueries:queryConstraintValue user:user]; + [matchers addObject:matcher]; + } else if ([key isEqualToString:PFQueryKeyRelatedTo]) { + PFConstraintMatcherBlock matcher = ^BFTask *(PFObject *object, PFSQLiteDatabase *database) { + PFObject *parent = queryConstraintValue[PFQueryKeyObject]; + NSString *relationKey = queryConstraintValue[PFQueryKeyKey]; + PFRelation *relation = parent[relationKey]; + + return [BFTask taskWithResult:@([relation _hasKnownObject:object])]; + }; + [matchers addObject:matcher]; + } else if ([queryConstraintValue isKindOfClass:[NSDictionary class]]) { + // If it's a set of constraints that should be AND-ed together + NSDictionary *keyConstraints = (NSDictionary *)queryConstraintValue; + [keyConstraints enumerateKeysAndObjectsUsingBlock:^(id operator, id keyConstraintValue, BOOL *stop) { + PFConstraintMatcherBlock matcher = [self createMatcherWithOperator:operator + constraints:keyConstraintValue + key:key + allKeyConstraints:keyConstraints + user:user]; + [matchers addObject:matcher]; + }]; + } else { + // It's not a set of constraints, so it's just a value to compare against. + PFConstraintMatcherBlock matcher = ^BFTask *(PFObject *object, PFSQLiteDatabase *database) { + id objectValue = [self valueForContainer:object key:key]; + BOOL matches = [[self class] matchesValue:objectValue equalTo:queryConstraintValue]; + return [BFTask taskWithResult:@(matches)]; + }; + [matchers addObject:matcher]; + } + }]; + + // Now AND together the constraints for each key + return ^BFTask *(PFObject *object, PFSQLiteDatabase *database) { + BFTask *task = [BFTask taskWithResult:@YES]; + for (PFConstraintMatcherBlock matcher in matchers) { + task = [task continueWithSuccessBlock:^id(BFTask *task) { + if (![task.result boolValue]) { + return task; + } + @try { + return matcher(object, database); + } @catch (NSException *exception) { + // Promote to error to keep the same behavior as online. + NSError *error = [PFErrorUtilities errorWithCode:kPFErrorInvalidQuery + message:exception.reason + shouldLog:NO]; + return [BFTask taskWithError:error]; + } + }]; + } + return task; + }; +} + +///-------------------------------------- +#pragma mark - Fetch +///-------------------------------------- + +- (BFTask *)fetchIncludeAsync:(NSString *)include + container:(id)container + database:(PFSQLiteDatabase *)database { + if (container == nil) { + return [BFTask taskWithResult:nil]; + } + + if ([container isKindOfClass:[NSArray class]]) { + NSArray *array = (NSArray *)container; + // We do the fetches in series because it makes it easier to fail on the first error. + BFTask *task = [BFTask taskWithResult:nil]; + for (id item in array) { + task = [task continueWithSuccessBlock:^id(BFTask *task) { + return [self fetchIncludeAsync:include container:item database:database]; + }]; + } + return task; + } + + // If we've reached the end of include, then actually do the fetch. + if (include == nil) { + if ([container isKindOfClass:[PFObject class]]) { + PFObject *object = (PFObject *)container; + return [self.offlineStore fetchObjectLocallyAsync:object database:database]; + } else if (container == [NSNull null]) { + // Accept NSNull value in included field. We swallow it silently instead of + // throwing an exception. + return nil; + } + NSError *error = [PFErrorUtilities errorWithCode:kPFErrorInvalidNestedKey + message:@"include is invalid for non-ParseObjects"]; + return [BFTask taskWithError:error]; + } + + // Descend into the container and try again + NSArray *parts = [include componentsSeparatedByString:@"."]; + + NSString *key = [parts firstObject]; + NSString *rest = nil; + if ([parts count] > 1) { + NSRange range = NSMakeRange(1, [parts count] - 1); + rest = [[parts subarrayWithRange:range] componentsJoinedByString:@"."]; + } + + return [[[BFTask taskWithResult:nil] continueWithBlock:^id(BFTask *task) { + if ([container isKindOfClass:[PFObject class]]) { + BFTask *fetchTask = [self fetchIncludeAsync:nil container:container database:database]; + return [fetchTask continueWithSuccessBlock:^id(BFTask *task) { + return ((PFObject *)container)[key]; + }]; + } else if ([container isKindOfClass:[NSDictionary class]]) { + return ((NSDictionary *)container)[key]; + } else if (container == [NSNull null]) { + // Accept NSNull value in included field. We swallow it silently instead of + // throwing an exception. + return nil; + } + NSException *exception = [NSException exceptionWithName:NSInternalInconsistencyException + reason:@"include is invalid" + userInfo:nil]; + return [BFTask taskWithException:exception]; + }] continueWithSuccessBlock:^id(BFTask *task) { + return [self fetchIncludeAsync:rest container:task.result database:database]; + }]; +} + +///-------------------------------------- +#pragma mark - User Access +///-------------------------------------- + ++ (BOOL)userHasReadAccess:(PFUser *)user ofObject:(PFObject *)object { + if (user == object) { + return YES; + } + + PFACL *acl = [object ACL]; + if (acl == nil) { + return YES; + } + if ([acl getPublicReadAccess]) { + return YES; + } + if (user != nil && [acl getReadAccessForUser:user]) { + return YES; + } + + // TODO (hallucinogen): Implement roles + return NO; +} + ++ (BOOL)userHasWriteAccess:(PFUser *)user ofObject:(PFObject *)object { + if (user == object) { + return YES; + } + + PFACL *acl = [object ACL]; + if (acl == nil) { + return YES; + } + if ([acl getPublicWriteAccess]) { + return YES; + } + if (user != nil && [acl getWriteAccessForUser:user]) { + return YES; + } + + // TODO (hallucinogen): Implement roles + return NO; +} + +///-------------------------------------- +#pragma mark - Internal Public Methods +///-------------------------------------- + +- (PFConstraintMatcherBlock)createMatcherForQueryState:(PFQueryState *)queryState user:(PFUser *)user { + PFConstraintMatcherBlock constraintMatcher = [self createMatcherWithQueryConstraints:queryState.conditions + user:user]; + // Capture ignoreACLs before the block since it might be modified between matchings. + BOOL shouldIgnoreACLs = queryState.shouldIgnoreACLs; + + return ^BFTask *(PFObject *object, PFSQLiteDatabase *database) { + // TODO (hallucinogen): revisit this whether we should check query and object parseClassname equality + if (!shouldIgnoreACLs && ![[self class] userHasReadAccess:user ofObject:object]) { + return [BFTask taskWithResult:@NO]; + } + return constraintMatcher(object, database); + }; +} + +///-------------------------------------- +#pragma mark - Query Options +///-------------------------------------- + +- (NSArray *)resultsByApplyingOptions:(PFOfflineQueryOption)options + ofQueryState:(PFQueryState *)queryState + toResults:(NSArray *)results { + // No results or empty options. + if (results.count == 0 || options == 0) { + return results; + } + + NSMutableArray *mutableResults = [results mutableCopy]; + if (options & PFOfflineQueryOptionOrder) { + [self _sortResults:mutableResults ofQueryState:queryState]; + } + if (options & PFOfflineQueryOptionSkip) { + NSInteger skip = queryState.skip; + if (skip > 0) { + skip = MIN(skip, results.count); + [mutableResults removeObjectsInRange:NSMakeRange(0, skip)]; + } + } + if (options & PFOfflineQueryOptionLimit) { + NSInteger limit = queryState.limit; + if (limit >= 0 && mutableResults.count > limit) { + [mutableResults removeObjectsInRange:NSMakeRange(limit, mutableResults.count - limit)]; + } + } + + return [mutableResults copy]; +} + +- (void)_sortResults:(NSMutableArray *)results ofQueryState:(PFQueryState *)queryState { + NSArray *keys = queryState.sortKeys; + [keys enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + NSString *key = (NSString *)obj; + if ([key rangeOfString:@"^-?[A-Za-z][A-Za-z0-9_]*$" options:NSRegularExpressionSearch].location == NSNotFound) { + PFConsistencyAssert([@"_created_at" isEqualToString:key] || [@"_updated_at" isEqualToString:key], + @"Invalid key name: %@", key); + } + }]; + + __block NSString *nearSphereKey = nil; + __block PFGeoPoint *nearSphereValue = nil; + [queryState.conditions enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + if ([obj isKindOfClass:[NSDictionary class]]) { + NSDictionary *keyConstraints = (NSDictionary *)obj; + if (keyConstraints[PFQueryKeyNearSphere]) { + nearSphereKey = [key copy]; + nearSphereValue = keyConstraints[PFQueryKeyNearSphere]; + } + } + }]; + + // If there's nothing to sort based on, then don't do anything. + if (keys.count == 0 && nearSphereKey == nil) { + return; + } + + [results sortUsingComparator:^NSComparisonResult(id lhs, id rhs) { + if (nearSphereKey != nil) { + PFGeoPoint *lhsPoint = [self valueForContainer:lhs key:nearSphereKey]; + PFGeoPoint *rhsPoint = [self valueForContainer:rhs key:nearSphereKey]; + + double lhsDistance = [lhsPoint distanceInRadiansTo:nearSphereValue]; + double rhsDistance = [rhsPoint distanceInRadiansTo:nearSphereValue]; + if (lhsDistance != rhsDistance) { + return (lhsDistance - rhsDistance < 0) ? NSOrderedAscending : NSOrderedDescending; + } + } + + for (int i = 0; i < keys.count; ++i) { + NSString *key = keys[i]; + BOOL descending = NO; + if ([key hasPrefix:@"-"]) { + descending = YES; + key = [key substringFromIndex:1]; + } + + id lhsValue = [self valueForContainer:lhs key:key]; + id rhsValue = [self valueForContainer:rhs key:key]; + + NSComparisonResult result = NSOrderedSame; + if (lhsValue != nil && rhsValue == nil) { + result = NSOrderedAscending; + } else if (lhsValue == nil && rhsValue != nil) { + result = NSOrderedDescending; + } else if (lhsValue == nil && rhsValue == nil) { + result = NSOrderedSame; + } else { + result = [lhsValue compare:rhsValue]; + } + + if (result != 0) { + return descending ? -result : result; + } + + } + + return NSOrderedSame; + }]; +} + +- (BFTask *)fetchIncludesAsyncForResults:(NSArray *)results + ofQueryState:(PFQueryState *)queryState + inDatabase:(PFSQLiteDatabase *)database { + BFTask *fetchTask = [BFTask taskWithResult:nil]; + for (PFObject *object in results) { + @weakify(self); + fetchTask = [fetchTask continueWithSuccessBlock:^id(BFTask *task) { + @strongify(self); + return [self fetchIncludesForObjectAsync:object + queryState:queryState + database:database]; + }]; + } + return fetchTask; +} + +- (BFTask *)fetchIncludesForObjectAsync:(PFObject *)object + queryState:(PFQueryState *)queryState + database:(PFSQLiteDatabase *)database { + NSSet *includes = queryState.includedKeys; + // We do the fetches in series because it makes it easier to fail on first error. + BFTask *task = [BFTask taskWithResult:nil]; + for (NSString *include in includes) { + // We do the fetches in series because it makes it easier to fail on the first error. + task = [task continueWithSuccessBlock:^id(BFTask *task) { + return [self fetchIncludeAsync:include container:object database:database]; + }]; + } + return task; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h new file mode 100644 index 0000000..b8f1c69 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h @@ -0,0 +1,201 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFMacros.h" + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFFileManager; +@class PFObject; +@class PFPin; +@class PFQueryState; +@class PFSQLiteDatabase; +@class PFUser; + +typedef NS_OPTIONS(uint8_t, PFOfflineStoreOptions) +{ + PFOfflineStoreOptionAlwaysFetchFromSQLite = 1 << 0, +}; + +//TODO: (nlutsenko) Bring this header up to standard with @name, method comments, etc... +@interface PFOfflineStore : NSObject + +@property (nonatomic, assign, readonly) PFOfflineStoreOptions options; +@property (nonatomic, strong, readonly) PFFileManager *fileManager; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithFileManager:(PFFileManager *)fileManager + options:(PFOfflineStoreOptions)options NS_DESIGNATED_INITIALIZER; + +///-------------------------------------- +/// @name Fetch +///-------------------------------------- + +- (BFTask *)fetchObjectLocallyAsync:(PFObject *)object; + +/*! + Gets the data for the given object from the offline database. Returns a task that will be + completed if data for the object was available. If the object is not in the cache, the task + will be faulted, with a CACHE_MISS error. + + @param object The object to fetch. + @param database A database connection to use. + */ +- (BFTask *)fetchObjectLocallyAsync:(PFObject *)object database:(PFSQLiteDatabase *)database; + +///-------------------------------------- +/// @name Save +///-------------------------------------- + +//TODO: (nlutsenko) Remove `includChildren` method, replace with PFLocalStore that wraps OfflineStore + Pin. +- (BFTask *)saveObjectLocallyAsync:(PFObject *)object includeChildren:(BOOL)includeChildren; +- (BFTask *)saveObjectLocallyAsync:(PFObject *)object withChildren:(NSArray *)children; + +/*! + Stores an object (and optionally, every object it points to recursively) in the local database. + If any of the objects have not been fetched from Parse, they will not be stored. However, if + they have changed data, the data will be retained. To get the objects back later, you can use a + ParseQuery with a cache policy that uses the local cache, or you can create an unfetched + pointer with ParseObject.createWithoutData() and then call fetchFromLocalDatastore() on it. + If you modify the object after saving it locally, such as by fetching it or saving it, + those changes will automatically be applied to the cache. + + @param object The root of the objects to save. + @param children If non-empty - these children will be saved to LDS as well. + @param database A database connection to use. + */ +- (BFTask *)saveObjectLocallyAsync:(PFObject *)object + withChildren:(NSArray *)children + database:(PFSQLiteDatabase *)database; + +///-------------------------------------- +/// @name Find +///-------------------------------------- + +/*! + Runs a PFQueryState against the store's contents. + + @returns The objects that match the query's constraint. + */ +- (BFTask *)findAsyncForQueryState:(PFQueryState *)queryState + user:(PFUser *)user + pin:(PFPin *)pin; + +/*! + Runs a PFQueryState against the store's contents. + + @returns The count of objects that match the query's constraint. + */ +- (BFTask *)countAsyncForQueryState:(PFQueryState *)queryState + user:(PFUser *)user + pin:(PFPin *)pin; + +/*! + Runs a PFQueryState against the store's contents. + + @returns The objects that match the query's constraint. + */ +- (BFTask *)findAsyncForQueryState:(PFQueryState *)queryState + user:(PFUser *)user + pin:(PFPin *)pin + isCount:(BOOL)isCount; + +/*! + Runs a PFQueryState against the store's contents. May cause any instances of the object to get fetched from + offline database. (TODO (hallucinogen): should we consider objects in memory but not in Offline Store?) + + @param queryState The query. + @param user The user making the query. + @param pin (Optional) The pin we're querying across. If null, all pins. + @param isCount YES if we're doing count. + @param database The PFSQLiteDatabase + + @returns The objects that match the query's constraint. + */ +- (BFTask *)findAsyncForQueryState:(PFQueryState *)queryState + user:(PFUser *)user + pin:(PFPin *)pin + isCount:(BOOL)isCount + database:(PFSQLiteDatabase *)database; + +///-------------------------------------- +/// @name Update Internal State +///-------------------------------------- + +/*! + Takes an object that has been fetched from the database before and updates it with whatever + data is in memory. This will only be used when data comes back from the server after a fetch + or a save. + */ +- (BFTask *)updateDataForObjectAsync:(PFObject *)object; + +///-------------------------------------- +/// @name Delete +///-------------------------------------- + +/*! + Deletes the given object from Offline Store's pins + */ +- (BFTask *)deleteDataForObjectAsync:(PFObject *)object; + +///-------------------------------------- +/// @name Unpin +///-------------------------------------- + +- (BFTask *)unpinObjectAsync:(PFObject *)object; + +///-------------------------------------- +/// @name Internal Helper Methods +///-------------------------------------- + +/*! + Gets the UUID for the given object, if it has one. Otherwise, creates a new UUID for the object + and adds a new row to the database for the object with no data. + */ +- (BFTask *)getOrCreateUUIDAsyncForObject:(PFObject *)object + database:(PFSQLiteDatabase *)database; + +/*! + This should only be called from `PFObject.objectWithoutDataWithClassName`. + + @returns an object from OfflineStore cache. If nil is returned the object is not found in the cache. + */ +- (PFObject *)getOrCreateObjectWithoutDataWithClassName:(NSString *)className + objectId:(NSString *)objectId; + +/*! + When an object is finished saving, it gets an objectId. Then it should call this method to + clean up the bookeeping around ids. + */ +- (void)updateObjectIdForObject:(PFObject *)object + oldObjectId:(NSString *)oldObjectId + newObjectId:(NSString *)newObjectId; + +///-------------------------------------- +/// @name Unit Test Helper Methods +///-------------------------------------- + +/*! + Used in unit testing only. Clears all in-memory caches so that data must be retrieved from disk. + */ +- (void)simulateReboot; + +/*! + Used in unit testing only. Clears the database on disk. + */ +- (void)clearDatabase; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m new file mode 100644 index 0000000..d90e373 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m @@ -0,0 +1,1067 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFOfflineStore.h" + +#import + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFDecoder.h" +#import "PFEncoder.h" +#import "PFErrorUtilities.h" +#import "PFFileManager.h" +#import "PFJSONSerialization.h" +#import "PFObjectPrivate.h" +#import "PFOfflineQueryLogic.h" +#import "PFPin.h" +#import "PFQueryPrivate.h" +#import "PFSQLiteDatabase.h" +#import "PFSQLiteDatabaseController.h" +#import "PFSQLiteDatabaseResult.h" +#import "PFUser.h" +#import "PFWeakValue.h" +#import "Parse_Private.h" + +typedef BFTask *(^PFOfflineStoreDatabaseExecutionBlock)(PFSQLiteDatabase *database); + +NSString *const PFOfflineStoreDatabaseName = @"ParseOfflineStore"; + +NSString *const PFOfflineStoreTableOfObjects = @"ParseObjects"; +NSString *const PFOfflineStoreKeyOfClassName = @"className"; +NSString *const PFOfflineStoreKeyOfIsDeletingEventually = @"isDeletingEventually"; +NSString *const PFOfflineStoreKeyOfJSON = @"json"; +NSString *const PFOfflineStoreKeyOfObjectId = @"objectId"; +NSString *const PFOfflineStoreKeyOfUUID = @"uuid"; + +NSString *const PFOfflineStoreTableOfDependencies = @"Dependencies"; +NSString *const PFOfflineStoreKeyOfKey = @"key"; + +int const PFOfflineStoreMaximumSQLVariablesCount = 999; + +@interface PFOfflineStore () + +@property (nonatomic, assign, readwrite) PFOfflineStoreOptions options; + +@property (nonatomic, strong, readonly) NSObject *lock; + +/*! + In-memory map of (className, objectId) to ParseObject. This is used so that we can + always return the same instance for a given object. Objects in this map may or may + not be in the database. + */ +@property (nonatomic, strong, readonly) NSMapTable *classNameAndObjectIdToObjectMap; + +/*! + In-memory set of ParseObjects that have been fetched from local database already. + If the object is in the map, a fetch of it has been started. If the value is a + finished task, then the fetch was completed. + */ +@property (nonatomic, strong, readonly) NSMapTable *fetchedObjects; + +/*! + In-memory map of ParseObject to UUID. This is used so that we can always return + the same instance for a given object. Objects in this map may or may not be in the + database. + */ +@property (nonatomic, strong, readonly) NSMapTable *objectToUUIDMap; + +/*! + In-memory map of UUID to ParseObject. This is used so we can always return + the same instance for a given object. The only objects in this map are ones that + are in database. + */ +@property (nonatomic, strong, readonly) NSMapTable *UUIDToObjectMap; + +@property (nonatomic, strong, readonly) PFOfflineQueryLogic *offlineQueryLogic; + +@property (nonatomic, strong, readonly) PFSQLiteDatabaseController *databaseController; + +@end + +@implementation PFOfflineStore + +@synthesize offlineQueryLogic = _offlineQueryLogic; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithFileManager:(PFFileManager *)fileManager options:(PFOfflineStoreOptions)options { + self = [super init]; + if (!self) return nil; + + _options = options; + _fileManager = fileManager; + _databaseController = [PFSQLiteDatabaseController controllerWithFileManager:_fileManager]; + _lock = [[NSObject alloc] init]; + _classNameAndObjectIdToObjectMap = [NSMapTable strongToWeakObjectsMapTable]; + _fetchedObjects = [NSMapTable weakToStrongObjectsMapTable]; + // This is a bit different from what we have in Android. The reason is because the object is quickly + // retained by the OS and we depend on this MapTable to fetch the `uuidTask` of the object. + _objectToUUIDMap = [NSMapTable weakToStrongObjectsMapTable]; + _UUIDToObjectMap = [NSMapTable strongToWeakObjectsMapTable]; + + [[self class] _initializeTablesInBackgroundWithDatabaseController:_databaseController]; + + return self; +} + +///-------------------------------------- +#pragma mark - Fetch +///-------------------------------------- + +- (BFTask *)fetchObjectLocallyAsync:(PFObject *)object { + __block BFTask *fetchTask = nil; + return [[self _performDatabaseOperationAsyncWithBlock:^BFTask *(PFSQLiteDatabase *database) { + // We need this to return the result of `fetchObjectLocallyAsync` instead of returning the + // result of `[database closeAsync]` + fetchTask = [self fetchObjectLocallyAsync:object database:database]; + return fetchTask; + }] continueWithBlock:^id(BFTask *task) { + return fetchTask; + }]; +} + +- (BFTask *)fetchObjectLocallyAsync:(PFObject *)object database:(PFSQLiteDatabase *)database { + BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; + BFTask *uuidTask = nil; + + @synchronized (self.lock) { + BFTask *fetchTask = [self.fetchedObjects objectForKey:object]; + if (fetchTask && !(self.options & PFOfflineStoreOptionAlwaysFetchFromSQLite)) { + // The object has been fetched from offline store, so any data that's in there + // is already reflected in the in-memory version. There's nothing more to do. + return [fetchTask continueWithBlock:^id(BFTask *task) { + return [BFTask taskWithResult:[task.result weakObject]]; + }]; + } + + // Put a placeholder so that anyone else who attempts to fetch this object will just + // wait for this call to finish doing it. + [self.fetchedObjects setObject:[tcs.task continueWithBlock:^id(BFTask *task) { + return [BFTask taskWithResult:[PFWeakValue valueWithWeakObject:task.result]]; + }] forKey:object]; + uuidTask = [self.objectToUUIDMap objectForKey:object]; + } + NSString *className = [object parseClassName]; + NSString *objectId = [object objectId]; + + // If this gets set, then it will contain data from offline store that need to be merged + // into existing object in memory + BFTask *jsonStringTask = [BFTask taskWithResult:nil]; + __block NSString *uuid = nil; + + if (objectId == nil) { + // This object has never been saved to Parse + if (uuidTask == nil) { + // This object was not pulled from the datastore or previously saved to it. + // There's nothing that can be fetched from it. This isn't an error, because it's + // really convenient to try to fetch objects from offline store just to make sure + // they're up-to-date, and we shouldn't force developers to specially handle this case. + } else { + // This object is a new ParseObject that is known to the datastore, but hasn't been + // fetched. The only way this could happen is if the object had previously been stored + // in the offline store, then the object was removed from memory (maybe by rebooting), + // and then an object with a pointer to it was fetched, so we only created the pointer. + // We need to pull the data out of the database using UUID. + + jsonStringTask = [[uuidTask continueWithSuccessBlock:^id(BFTask *task) { + uuid = task.result; + NSString *query = [NSString stringWithFormat:@"SELECT %@ FROM %@ WHERE %@ = ?;", + PFOfflineStoreKeyOfJSON, PFOfflineStoreTableOfObjects, PFOfflineStoreKeyOfUUID]; + return [database executeQueryAsync:query + withArgumentsInArray:[NSArray arrayWithObjects:uuid, nil]]; + }] continueWithSuccessBlock:^id(BFTask *task) { + PFSQLiteDatabaseResult *result = task.result; + if (![result next]) { + [result close]; + [NSException raise:NSInternalInconsistencyException + format:@"Attempted to find non-existent uuid %@.", uuid]; + } + NSString *jsonString = [result stringForColumnIndex:0]; + [result close]; + + return jsonString; + }]; + } + } else { + if (uuidTask && !(self.options & PFOfflineStoreOptionAlwaysFetchFromSQLite)) { + // This object is an existing ParseObject, and we must've already pulled its data + // out of the offline store, or else we wouldn't know its UUID. This should never happen. + NSString *message = @"Object must have already been fetched but isn't marked as fetched."; + [tcs setException:[NSException exceptionWithName:NSInternalInconsistencyException + reason:message + userInfo:nil]]; + + @synchronized (self.lock) { + [self.fetchedObjects removeObjectForKey:object]; + } + return tcs.task; + } + + // We've got a pointer to an existing ParseObject, but we've never pulled its data out of + // the offline store. Since fetching from the server forces a fetch from the offline + // store, that means this is a pointer. We need to try to find any existing entry for this + // object in the database. + NSString *query = [NSString stringWithFormat:@"SELECT %@, %@ FROM %@ WHERE %@ = ? AND %@ = ?;", + PFOfflineStoreKeyOfJSON, PFOfflineStoreKeyOfUUID, + PFOfflineStoreTableOfObjects, PFOfflineStoreKeyOfClassName, + PFOfflineStoreKeyOfObjectId]; + NSArray *args = @[ className, objectId ]; + jsonStringTask = [[database executeQueryAsync:query + withArgumentsInArray:args] continueWithSuccessBlock:^id(BFTask *task) { + PFSQLiteDatabaseResult *result = task.result; + if (![result next]) { + NSString *errorMessage = @"This object is not available in the offline cache."; + NSError *error = [PFErrorUtilities errorWithCode:kPFErrorCacheMiss + message:errorMessage + shouldLog:NO]; + [result close]; + return [BFTask taskWithError:error]; + } + + NSString *jsonString = [result stringForColumnIndex:0]; + NSString *newUUID = [result stringForColumnIndex:1]; + [result close]; + + @synchronized (self.lock) { + // It's okay to put this object into the uuid map. No one will try to fetch it, + // because it's already in the fetchedObjects map. And no one will try to save it + // without fetching it first, so everything should be fine. + [self.objectToUUIDMap setObject:[BFTask taskWithResult:newUUID] forKey:object]; + [self.UUIDToObjectMap setObject:object forKey:newUUID]; + } + return jsonString; + }]; + } + + return [[jsonStringTask continueWithSuccessBlock:^id(BFTask *task) { + NSString *jsonString = task.result; + if (jsonString == nil) { + // This means we tried to fetch from the database that was never actually saved + // locally. This probably means that its parent object was saved locally and we + // just created a pointer to this object. This should be considered cache miss. + + NSString *errorMessage = @"Attempted to fetch and object offline which was never " + @"saved to the offline cache"; + NSError *error = [PFErrorUtilities errorWithCode:kPFErrorCacheMiss + message:errorMessage + shouldLog:NO]; + return [BFTask taskWithError:error]; + } + id parsedJson = [PFJSONSerialization JSONObjectFromString:jsonString]; + NSMutableDictionary *offlineObjects = [[NSMutableDictionary alloc] init]; + [PFInternalUtils traverseObject:parsedJson usingBlock:^id(id object) { + // Omit root and PFObject + if ([object isKindOfClass:[NSDictionary class]] && + [((NSDictionary *)object)[@"__type"] isEqualToString:@"OfflineObject"] && + object != parsedJson) { + NSString *uuid = ((NSDictionary *)object)[@"uuid"]; + offlineObjects[uuid] = [self _getPointerAsyncWithUUID:uuid database:database]; + } + return object; + }]; + + NSArray *objectValues = [offlineObjects allValues]; + return [[BFTask taskForCompletionOfAllTasks:objectValues] continueWithSuccessBlock:^id(BFTask *task) { + PFDecoder *decoder = [PFOfflineDecoder decoderWithOfflineObjects:offlineObjects]; + [object mergeFromRESTDictionary:parsedJson withDecoder:decoder]; + return [BFTask taskWithResult:nil]; + }]; + }] continueWithBlock:^id(BFTask *task) { + if (task.isCancelled) { + [tcs cancel]; + } else if (task.error != nil) { + [tcs setError:task.error]; + } else if (task.exception != nil) { + [tcs setException:task.exception]; + } else { + [tcs setResult:object]; + } + return tcs.task; + }]; +} + +///-------------------------------------- +#pragma mark - Save +///-------------------------------------- + +- (BFTask *)saveObjectLocallyAsync:(PFObject *)object includeChildren:(BOOL)includeChildren { + //TODO: (nlutsenko) Remove this method, replace with LocalStore implementation that wraps OfflineStore + Pin. + return [self _performDatabaseTransactionAsyncWithBlock:^BFTask *(PFSQLiteDatabase *database) { + return [self saveObjectLocallyAsync:object includeChildren:includeChildren database:database]; + }]; +} + +- (BFTask *)saveObjectLocallyAsync:(PFObject *)object withChildren:(NSArray *)children { + return [self _performDatabaseTransactionAsyncWithBlock:^BFTask *(PFSQLiteDatabase *database) { + return [self saveObjectLocallyAsync:object withChildren:children database:database]; + }]; +} + +- (BFTask *)saveObjectLocallyAsync:(PFObject *)object + includeChildren:(BOOL)includeChildren + database:(PFSQLiteDatabase *)database { + //TODO: (nlutsenko) Remove this method, replace with LocalStore implementation that wraps OfflineStore + Pin. + NSMutableArray *children = nil; + if (includeChildren) { + children = [NSMutableArray array]; + [PFInternalUtils traverseObject:object usingBlock:^id(id traversedObject) { + if ([traversedObject isKindOfClass:[PFObject class]]) { + [children addObject:traversedObject]; + } + return traversedObject; + }]; + } + return [self saveObjectLocallyAsync:object withChildren:children database:database]; +} + +- (BFTask *)saveObjectLocallyAsync:(PFObject *)object + withChildren:(NSArray *)children + database:(PFSQLiteDatabase *)database { + //TODO (nlutsenko): Add assert that checks whether all children are actually children of an object. + NSMutableArray *objectsInTree = nil; + if (children == nil) { + objectsInTree = [NSMutableArray arrayWithObject:object]; + } else { + objectsInTree = [children mutableCopy]; + if (![objectsInTree containsObject:object]) { + [objectsInTree addObject:object]; + } + } + + // Call saveObjectLocallyAsync for each of them individually + NSMutableArray *tasks = [[NSMutableArray alloc] init]; + for (PFObject *objInTree in objectsInTree) { + [tasks addObject:[self fetchObjectLocallyAsync:objInTree database:database]]; + } + + return [[[[[BFTask taskForCompletionOfAllTasks:tasks] continueWithBlock:^id(BFTask *task) { + return [self.objectToUUIDMap objectForKey:object]; + }] continueWithSuccessBlock:^id(BFTask *task) { + NSString *uuid = task.result; + if (uuid == nil) { + // The root object was never stored in offline store, so nothing unpin. + return [BFTask taskWithResult:nil]; + } + + // Delete all objects locally corresponding to the key we're trying to use in case it was + // used before (overwrite) + return [self _unpinKeyAsync:uuid database:database]; + }] continueWithSuccessBlock:^id(BFTask *task) { + return [self getOrCreateUUIDAsyncForObject:object database:database]; + }] continueWithSuccessBlock:^id(BFTask *task) { + NSString *uuid = task.result; + + NSMutableArray *tasks = [[NSMutableArray alloc] init]; + for (PFObject *object in objectsInTree) { + [tasks addObject:[self saveObjectLocallyAsync:object key:uuid database:database]]; + } + + return [BFTask taskForCompletionOfAllTasks:tasks]; + }]; +} + +- (BFTask *)saveObjectLocallyAsync:(PFObject *)object + key:(NSString *)key + database:(PFSQLiteDatabase *)database { + if ([object objectId] != nil && ![object isDataAvailable] && + ![object _hasChanges] && ![object _hasOutstandingOperations]) { + return [BFTask taskWithResult:nil]; + } + + __block NSString *uuid = nil; + __block id encoded = nil; + return [[[[BFTask taskFromExecutor:[BFExecutor defaultExecutor] withBlock:^id{ + // Make sure we have UUID for the object to be saved. + return [self getOrCreateUUIDAsyncForObject:object database:database]; + }] continueWithSuccessBlock:^id(BFTask *task) { + uuid = task.result; + + // Encode the object, and wait for the UUIDs in its pointers to get encoded. + PFOfflineObjectEncoder *encoder = [PFOfflineObjectEncoder objectEncoderWithOfflineStore:self database:database]; + // We don't care about operationSetUUIDs here + NSArray *operationSetUUIDs = nil; + encoded = [object RESTDictionaryWithObjectEncoder:encoder operationSetUUIDs:&operationSetUUIDs]; + return [encoder encodeFinished]; + }] continueWithSuccessBlock:^id(BFTask *task) { + // Time to actually save the object + NSString *className = [object parseClassName]; + NSString *objectId = [object objectId]; + NSString *encodedString = [PFJSONSerialization stringFromJSONObject:encoded]; + NSString *updateFields = nil; + NSArray *queryParams = nil; + + if (objectId != nil) { + updateFields = [NSString stringWithFormat:@"%@ = ?, %@ = ?, %@ = ?", + PFOfflineStoreKeyOfClassName, PFOfflineStoreKeyOfJSON, + PFOfflineStoreKeyOfObjectId]; + queryParams = @[className, encodedString, objectId, uuid]; + } else { + updateFields = [NSString stringWithFormat:@"%@ = ?, %@ = ?", + PFOfflineStoreKeyOfClassName, PFOfflineStoreKeyOfJSON]; + queryParams = @[className, encodedString, uuid]; + } + + NSString *sql = [NSString stringWithFormat:@"UPDATE %@ SET %@ WHERE %@ = ?", + PFOfflineStoreTableOfObjects, updateFields, + PFOfflineStoreKeyOfUUID]; + return [database executeSQLAsync:sql withArgumentsInArray:queryParams]; + }] continueWithSuccessBlock:^id(BFTask *task) { + NSString *sql = [NSString stringWithFormat:@"INSERT OR IGNORE INTO %@(%@, %@) VALUES (?, ?)", + PFOfflineStoreTableOfDependencies, PFOfflineStoreKeyOfKey, + PFOfflineStoreKeyOfUUID]; + return [database executeSQLAsync:sql withArgumentsInArray:@[key, uuid]]; + }]; +} + +///-------------------------------------- +#pragma mark - Find +///-------------------------------------- + +- (BFTask *)findAsyncForQueryState:(PFQueryState *)queryState + user:(PFUser *)user + pin:(PFPin *)pin { + return [self findAsyncForQueryState:queryState user:user pin:pin isCount:NO]; +} + +- (BFTask *)countAsyncForQueryState:(PFQueryState *)queryState + user:(PFUser *)user + pin:(PFPin *)pin { + return [[self findAsyncForQueryState:queryState + user:user + pin:pin + isCount:YES] continueWithSuccessBlock:^id(BFTask *task) { + if (!task.cancelled && !task.error && !task.exception) { + NSArray *result = task.result; + return @(result.count); + } + return task; + }]; +} + +- (BFTask *)findAsyncForQueryState:(PFQueryState *)queryState + user:(PFUser *)user + pin:(PFPin *)pin + isCount:(BOOL)isCount { + __block BFTask *resultTask = nil; + return [[self _performDatabaseOperationAsyncWithBlock:^BFTask *(PFSQLiteDatabase *database) { + resultTask = [self findAsyncForQueryState:queryState user:user pin:pin isCount:isCount database:database]; + return resultTask; + }] continueWithBlock:^id(BFTask *ignored) { + // We need this to return the result of `findQuery` instead of returning the + // result of `[database closeAsync]` + return resultTask; + }]; +} + +- (BFTask *)findAsyncForQueryState:(PFQueryState *)queryState + user:(PFUser *)user + pin:(PFPin *)pin + isCount:(BOOL)isCount + database:(PFSQLiteDatabase *)database { + __block NSMutableArray *mutableResults = [NSMutableArray array]; + BFTask *queryTask = nil; + BOOL includeIsDeletingEventually = queryState.shouldIncludeDeletingEventually; + + if (pin == nil) { + NSString *isDeletingEventuallyQuery = @""; + if (!includeIsDeletingEventually) { + isDeletingEventuallyQuery = [NSString stringWithFormat:@"AND %@ = 0", + PFOfflineStoreKeyOfIsDeletingEventually]; + } + NSString *queryString = [NSString stringWithFormat:@"SELECT %@ FROM %@ WHERE %@ = ? %@;", + PFOfflineStoreKeyOfUUID, PFOfflineStoreTableOfObjects, + PFOfflineStoreKeyOfClassName, isDeletingEventuallyQuery]; + queryTask = [database executeQueryAsync:queryString withArgumentsInArray:@[ queryState.parseClassName ]]; + } else { + BFTask *uuidTask = [self.objectToUUIDMap objectForKey:pin]; + if (uuidTask == nil) { + // Pin was never saved locally, therefore there won't be any results. + return [BFTask taskWithResult:mutableResults]; + } + + queryTask = [uuidTask continueWithSuccessBlock:^id(BFTask *task) { + NSString *uuid = task.result; + NSString *isDeletingEventuallyQuery = @""; + if (!includeIsDeletingEventually) { + isDeletingEventuallyQuery = [NSString stringWithFormat:@"AND %@ = 0", + PFOfflineStoreKeyOfIsDeletingEventually]; + } + NSString *queryString = [NSString stringWithFormat:@"SELECT A.%@ FROM %@ A " + @"INNER JOIN %@ B ON A.%@ = B.%@ WHERE %@ = ? AND %@ = ? %@;", + PFOfflineStoreKeyOfUUID, PFOfflineStoreTableOfObjects, + PFOfflineStoreTableOfDependencies, PFOfflineStoreKeyOfUUID, + PFOfflineStoreKeyOfUUID, PFOfflineStoreKeyOfClassName, + PFOfflineStoreKeyOfKey, isDeletingEventuallyQuery]; + + return [database executeQueryAsync:queryString + withArgumentsInArray:@[ queryState.parseClassName, uuid ]]; + }]; + } + + @weakify(self); + return [[queryTask continueWithSuccessBlock:^id(BFTask *task) { + @strongify(self); + PFSQLiteDatabaseResult *result = task.result; + + PFConstraintMatcherBlock matcherBlock = [self.offlineQueryLogic createMatcherForQueryState:queryState + user:user]; + + BFTask *checkAllObjectsTask = [BFTask taskWithResult:nil]; + while ([result next]) { + NSString *uuid = [result stringForColumnIndex:0]; + __block PFObject *object = nil; + + checkAllObjectsTask = [[[[checkAllObjectsTask continueWithSuccessBlock:^id(BFTask *task) { + return [self _getPointerAsyncWithUUID:uuid database:database]; + }] continueWithSuccessBlock:^id(BFTask *task) { + object = task.result; + return [self fetchObjectLocallyAsync:object database:database]; + }] continueWithSuccessBlock:^id(BFTask *task) { + if (!object.isDataAvailable) { + return [BFTask taskWithResult:@NO]; + } + return matcherBlock(object, database); + }] continueWithSuccessBlock:^id(BFTask *task) { + if ([task.result boolValue]) { + [mutableResults addObject:object]; + } + return [BFTask taskWithResult:nil]; + }]; + } + [result close]; + + return checkAllObjectsTask; + }] continueWithSuccessBlock:^id(BFTask *task) { + @strongify(self); + + // Sort, Apply Skip and Limit + + PFOfflineQueryOption queryOptions = 0; + if (!isCount) { + queryOptions = PFOfflineQueryOptionOrder | PFOfflineQueryOptionSkip | PFOfflineQueryOptionLimit; + } + NSArray *results = [self.offlineQueryLogic resultsByApplyingOptions:queryOptions + ofQueryState:queryState + toResults:mutableResults]; + + // Fetch includes + BFTask *fetchIncludesTask = [self.offlineQueryLogic fetchIncludesAsyncForResults:results + ofQueryState:queryState + inDatabase:database]; + + return [fetchIncludesTask continueWithSuccessBlock:^id(BFTask *task) { + return results; + }]; + }]; +} + +///-------------------------------------- +#pragma mark - Update +///-------------------------------------- + +- (BFTask *)updateDataForObjectAsync:(PFObject *)object { + BFTask *fetchTask = nil; + + @synchronized (self.lock) { + fetchTask = [self.fetchedObjects objectForKey:object]; + if (!fetchTask) { + NSException *exception = [NSException exceptionWithName:NSInternalInconsistencyException + reason:@"An object cannot be updated if it wasn't fetched" + userInfo:nil]; + return [BFTask taskWithException:exception]; + } + } + return [fetchTask continueWithBlock:^id(BFTask *task) { + if (task.error != nil) { + // Catch CACHE_MISS errors and ignore them. + if (task.error.code == kPFErrorCacheMiss) { + return [BFTask taskWithResult:nil]; + } + return [BFTask taskWithResult:[task.result weakObject]]; + } + + return [self _performDatabaseTransactionAsyncWithBlock:^BFTask *(PFSQLiteDatabase *database) { + return [self _updateDataForObjectAsync:object inDatabase:database]; + }]; + }]; +} + +- (BFTask *)_updateDataForObjectAsync:(PFObject *)object inDatabase:(PFSQLiteDatabase *)database { + BFTask *uuidTask = nil; + @synchronized (self.lock) { + uuidTask = [self.objectToUUIDMap objectForKey:object]; + if (!uuidTask) { + // It was fetched, but it has no UUID. That must mean it isn't actually in the database. + return [BFTask taskWithResult:nil]; + } + } + + __block NSString *uuid = nil; + __block NSDictionary *dataDictionary = nil; + return [[uuidTask continueWithSuccessBlock:^id(BFTask *task) { + uuid = task.result; + + PFOfflineObjectEncoder *encoder = [PFOfflineObjectEncoder objectEncoderWithOfflineStore:self + database:database]; + NSArray *operationSetUUIDs = nil; + dataDictionary = [object RESTDictionaryWithObjectEncoder:encoder operationSetUUIDs:&operationSetUUIDs]; + return [encoder encodeFinished]; + }] continueWithSuccessBlock:^id(BFTask *task) { + // Put it in database + NSString *className = object.parseClassName; + NSString *objectId = object.objectId; + NSString *encodedDataDictionary = [PFJSONSerialization stringFromJSONObject:dataDictionary]; + NSNumber *deletingEventually = dataDictionary[PFOfflineStoreKeyOfIsDeletingEventually]; + + NSString *updateParams = nil; + NSArray *updateArguments = nil; + if (objectId != nil) { + updateParams = [NSString stringWithFormat:@"%@ = ?, %@ = ?, %@ = ?, %@ = ?", + PFOfflineStoreKeyOfClassName, PFOfflineStoreKeyOfJSON, + PFOfflineStoreKeyOfIsDeletingEventually, PFOfflineStoreKeyOfObjectId]; + updateArguments = @[ className, encodedDataDictionary, deletingEventually, objectId, uuid ]; + } else { + updateParams = [NSString stringWithFormat:@"%@ = ?, %@ = ?, %@ = ?", + PFOfflineStoreKeyOfClassName, PFOfflineStoreKeyOfJSON, + PFOfflineStoreKeyOfIsDeletingEventually]; + updateArguments = @[ className, encodedDataDictionary, deletingEventually, uuid ]; + } + + NSString *sql = [NSString stringWithFormat:@"UPDATE %@ SET %@ WHERE %@ = ?", + PFOfflineStoreTableOfObjects, updateParams, PFOfflineStoreKeyOfUUID]; + + return [database executeSQLAsync:sql withArgumentsInArray:updateArguments]; + }]; +} + +///-------------------------------------- +#pragma mark - Delete +///-------------------------------------- + +- (BFTask *)deleteDataForObjectAsync:(PFObject *)object { + return [self _performDatabaseTransactionAsyncWithBlock:^BFTask *(PFSQLiteDatabase *database) { + return [self deleteDataForObjectAsync:object database:database]; + }]; +} + +- (BFTask *)deleteDataForObjectAsync:(PFObject *)object database:(PFSQLiteDatabase *)database { + __block NSString *uuid = nil; + + // Make sure the object has a UUID. + BFTask *uuidTask = nil; + @synchronized (self.lock) { + uuidTask = [self.objectToUUIDMap objectForKey:object]; + if (!uuidTask) { + // It was fetched, but it has no UUID. That must mean it isn't actually in the database. + return [BFTask taskWithResult:nil]; + } + } + + uuidTask = [uuidTask continueWithSuccessBlock:^id(BFTask *task) { + uuid = task.result; + return task; + }]; + + // If the object was the root of a pin, unpin it. + BFTask *unpinTask = [[uuidTask continueWithSuccessBlock:^id(BFTask *task) { + // Find all the roots for this object. + NSString *sql = [NSString stringWithFormat:@"SELECT %@ FROM %@ WHERE %@ = ?", + PFOfflineStoreKeyOfKey, PFOfflineStoreTableOfDependencies, + PFOfflineStoreKeyOfUUID]; + return [database executeQueryAsync:sql withArgumentsInArray:@[ uuid ]]; + }] continueWithSuccessBlock:^id(BFTask *task) { + // Try to unpin this object from the pin label if it's a root of the PFPin. + PFSQLiteDatabaseResult *result = task.result; + NSMutableArray *tasks = [NSMutableArray array]; + + while (result.next) { + NSString *objectUUID = [result stringForColumnIndex:0]; + + BFTask *getPointerTask = [self _getPointerAsyncWithUUID:objectUUID database:database]; + BFTask *objectUnpinTask = [[getPointerTask continueWithSuccessBlock:^id(BFTask *task) { + PFPin *pin = task.result; + return [self fetchObjectLocallyAsync:pin database:database]; + }] continueWithBlock:^id(BFTask *task) { + PFPin *pin = task.result; + + NSMutableArray *modified = pin.objects; + if (modified == nil || ![modified containsObject:object]) { + return task; + } + + [modified removeObject:object]; + if (modified.count == 0) { + return [self _unpinKeyAsync:objectUUID database:database]; + } + pin.objects = modified; + + return [self saveObjectLocallyAsync:pin includeChildren:YES database:database]; + }]; + [tasks addObject:objectUnpinTask]; + } + [result close]; + + return [BFTask taskForCompletionOfAllTasks:tasks]; + }]; + + return [[[unpinTask continueWithSuccessBlock:^id(BFTask *task) { + NSString *sql = [NSString stringWithFormat:@"DELETE FROM %@ WHERE %@ = ?", + PFOfflineStoreTableOfDependencies, PFOfflineStoreKeyOfUUID]; + return [database executeSQLAsync:sql withArgumentsInArray:@[ uuid ]]; + }] continueWithSuccessBlock:^id(BFTask *task) { + NSString *sql = [NSString stringWithFormat:@"DELETE FROM %@ WHERE %@ = ?", + PFOfflineStoreTableOfObjects, PFOfflineStoreKeyOfUUID]; + return [database executeSQLAsync:sql withArgumentsInArray:@[ uuid ]]; + }] continueWithSuccessBlock:^id(BFTask *task) { + // Delete the object from memory cache. + // (or else `PFObject.objectWithoutDataWithClassName` will return a valid object) + @synchronized (self.lock) { + // TODO (hallucinogen): we should probably clean up UUIDToObjectMap and objectToUUIDMap + // but getting the uuid requires a task and things might get a little funky... + if (object.objectId != nil) { + NSString *key = [self _generateKeyForClassName:object.parseClassName objectId:object.objectId]; + [self.classNameAndObjectIdToObjectMap removeObjectForKey:key]; + } + [self.fetchedObjects removeObjectForKey:object]; + } + return task; + }]; +} + +///-------------------------------------- +#pragma mark - Unpin +///-------------------------------------- + +- (BFTask *)unpinObjectAsync:(PFObject *)object { + BFTask *uuidTask = [self.objectToUUIDMap objectForKey:object]; + return [uuidTask continueWithBlock:^id(BFTask *task) { + NSString *uuid = task.result; + if (!uuid) { + // The root object was never stored in the offline store, so nothing to unpin. + return [BFTask taskWithResult:nil]; + } + return [self _unpinKeyAsync:uuid]; + }]; +} + +- (BFTask *)_unpinKeyAsync:(NSString *)key { + return [self _performDatabaseTransactionAsyncWithBlock:^BFTask *(PFSQLiteDatabase *database) { + return [self _unpinKeyAsync:key database:database]; + }]; +} + +- (BFTask *)_unpinKeyAsync:(NSString *)key database:(PFSQLiteDatabase *)database { + NSMutableArray *uuidsToDelete = [NSMutableArray array]; + // Fetch all uuids from Dependencies for key=? grouped by uuid having a count of 1 + NSString *query = [NSString stringWithFormat:@"SELECT %@ FROM %@ WHERE %@ = ? AND %@ IN " + @"(SELECT %@ FROM %@ GROUP BY %@ HAVING COUNT(%@) = 1);", + PFOfflineStoreKeyOfUUID, PFOfflineStoreTableOfDependencies, + PFOfflineStoreKeyOfKey, PFOfflineStoreKeyOfUUID, PFOfflineStoreKeyOfUUID, + PFOfflineStoreTableOfDependencies, PFOfflineStoreKeyOfUUID, + PFOfflineStoreKeyOfUUID]; + return [[[[database executeQueryAsync:query + withArgumentsInArray:@[ key ]] continueWithSuccessBlock:^id(BFTask *task) { + // DELETE FROM Objects + PFSQLiteDatabaseResult *result = task.result; + while (result.next) { + [uuidsToDelete addObject:[result stringForColumnIndex:0]]; + } + [result close]; + + return [self _deleteObjectsWithUUIDs:uuidsToDelete database:database]; + }] continueWithSuccessBlock:^id(BFTask *task) { + // DELETE FROM Dependencies + NSString *sql = [NSString stringWithFormat:@"DELETE FROM %@ WHERE %@ = ?", + PFOfflineStoreTableOfDependencies, PFOfflineStoreKeyOfKey]; + return [database executeSQLAsync:sql withArgumentsInArray:@[ key ]]; + }] continueWithSuccessBlock:^id(BFTask *task) { + @synchronized (self.lock) { + // Remove uuids from memory + for (NSString *uuid in uuidsToDelete) { + PFObject *object = [self.UUIDToObjectMap objectForKey:uuid]; + if (object != nil) { + [self.objectToUUIDMap removeObjectForKey:object]; + [self.UUIDToObjectMap removeObjectForKey:uuid]; + } + } + } + return [BFTask taskWithResult:nil]; + }]; +} + +- (BFTask *)_deleteObjectsWithUUIDs:(NSArray *)uuids database:(PFSQLiteDatabase *)database { + if (uuids.count <= 0) { + return [BFTask taskWithResult:nil]; + } + + if (uuids.count > PFOfflineStoreMaximumSQLVariablesCount) { + NSRange range = NSMakeRange(0, PFOfflineStoreMaximumSQLVariablesCount); + return [[self _deleteObjectsWithUUIDs:[uuids subarrayWithRange:range] + database:database] continueWithSuccessBlock:^id(BFTask *task) { + unsigned long includedCount = uuids.count - PFOfflineStoreMaximumSQLVariablesCount; + NSRange range = NSMakeRange(PFOfflineStoreMaximumSQLVariablesCount, includedCount); + return [self _deleteObjectsWithUUIDs:[uuids subarrayWithRange:range] database:database]; + }]; + } + + NSMutableArray *placeholders = [NSMutableArray array]; + for (int i = 0; i < uuids.count; ++i) { + [placeholders addObject:@"?"]; + } + NSString *sql = [NSString stringWithFormat:@"DELETE FROM %@ WHERE %@ IN (%@);", + PFOfflineStoreTableOfObjects, PFOfflineStoreKeyOfUUID, + [placeholders componentsJoinedByString:@","]]; + return [database executeSQLAsync:sql withArgumentsInArray:uuids]; +} + +///-------------------------------------- +#pragma mark - Internal Helper Methods +///-------------------------------------- + +- (BFTask *)getOrCreateUUIDAsyncForObject:(PFObject *)object + database:(PFSQLiteDatabase *)database { + NSString *newUUID = [[NSUUID UUID] UUIDString]; + BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; + + @synchronized (self.lock) { + BFTask *uuidTask = [self.objectToUUIDMap objectForKey:object]; + if (uuidTask != nil) { + // Return existing task. + return uuidTask; + } + + // The object doesn't have UUID yet, so we're gonna have to make one + [self.objectToUUIDMap setObject:tcs.task forKey:object]; + [self.UUIDToObjectMap setObject:object forKey:newUUID]; + + __weak id weakObject = object; + [self.fetchedObjects setObject:[tcs.task continueWithSuccessBlock:^id(BFTask *task) { + return [PFWeakValue valueWithWeakObject:weakObject]; + }] forKey:object]; + } + + // We need to put a placeholder row in the database so that later on the save can be just + // an update. This could be a pointer to an object that itself never gets saved offline, + // in which case the consumer will just have to deal with that. + NSString *query = [NSString stringWithFormat:@"INSERT INTO %@(%@, %@) VALUES(?, ?);", + PFOfflineStoreTableOfObjects, PFOfflineStoreKeyOfUUID, PFOfflineStoreKeyOfClassName]; + [[database executeSQLAsync:query + withArgumentsInArray:@[ newUUID, [object parseClassName]]] continueWithSuccessBlock:^id(BFTask *task) { + [tcs setResult:newUUID]; + return [BFTask taskWithResult:nil]; + }]; + + return tcs.task; +} + +/*! + Gets an unfetched pointer to an object in the database, based on its uuid. The object may or may + not be in memory, but it must be in database. If it is already in memory, the instance will be + returned. Since this is only for creating pointers to objects that are referenced by other objects + in the datastore, it's a fair assumption. + + @param uuid The UUID of the object to retrieve. + @param database The database instance to retrieve from. + @returns The object with that UUID. + */ +- (BFTask *)_getPointerAsyncWithUUID:(NSString *)uuid + database:(PFSQLiteDatabase *)database { + @synchronized (self.lock) { + PFObject *existing = [self.UUIDToObjectMap objectForKey:uuid]; + if (existing != nil) { + return [BFTask taskWithResult:existing]; + } + } + + // We only want the pointer, but we have to look in the database to know if there's something + // with this classname and object id already. + NSString *query = [NSString stringWithFormat:@"SELECT %@, %@ FROM %@ WHERE %@ = ?;", + PFOfflineStoreKeyOfClassName, PFOfflineStoreKeyOfObjectId, + PFOfflineStoreTableOfObjects, PFOfflineStoreKeyOfUUID]; + return [[database executeQueryAsync:query + withArgumentsInArray:@[ uuid ]] continueWithSuccessBlock:^id(BFTask *task) { + PFSQLiteDatabaseResult *result = task.result; + if (![result next]) { + [result close]; + [NSException raise:NSInternalInconsistencyException + format:@"Attempted to find non-existent uuid %@", uuid]; + } + + @synchronized (self.lock) { + PFObject *existing = [self.UUIDToObjectMap objectForKey:uuid]; + if (existing != nil) { + [result close]; + return existing; + } + + NSString *className = [result stringForColumnIndex:0]; + NSString *objectId = [result stringForColumnIndex:1]; + [result close]; + + PFObject *pointer = [PFObject objectWithoutDataWithClassName:className objectId:objectId]; + + // If it doesn't have objectId, we don't really need the UUID, and this simplifies some + // other logic elsewhere if we only update the map for new objects. + if (objectId == nil) { + [self.UUIDToObjectMap setObject:pointer forKey:uuid]; + [self.objectToUUIDMap setObject:[BFTask taskWithResult:uuid] forKey:pointer]; + } + return pointer; + } + }]; +} + +- (PFObject *)getOrCreateObjectWithoutDataWithClassName:(NSString *)className + objectId:(NSString *)objectId { + PFParameterAssert(objectId, @"objectId cannot be nil."); + + PFObject *object = nil; + @synchronized (self.lock) { + NSString *key = [self _generateKeyForClassName:className objectId:objectId]; + object = [self.classNameAndObjectIdToObjectMap objectForKey:key]; + if (!object) { + object = [PFObject objectWithClassName:className objectId:objectId completeData:NO]; + [self updateObjectIdForObject:object oldObjectId:nil newObjectId:objectId]; + } + } + return object; +} + +- (void)updateObjectIdForObject:(PFObject *)object + oldObjectId:(NSString *)oldObjectId + newObjectId:(NSString *)newObjectId { + if (oldObjectId != nil) { + PFConsistencyAssert([oldObjectId isEqualToString:newObjectId], @"objectIds cannot be changed in offline mode."); + return; + } + + NSString *className = object.parseClassName; + NSString *key = [self _generateKeyForClassName:className objectId:newObjectId]; + + @synchronized (self.lock) { + // See if there's already an entry for new objectId. + PFObject *existing = [self.classNameAndObjectIdToObjectMap objectForKey:key]; + PFConsistencyAssert(existing == nil || existing == object, + @"Attempted to change an objectId to one that's already known to the OfflineStore."); + + // Okay, all clear to add the new reference. + [self.classNameAndObjectIdToObjectMap setObject:object forKey:key]; + } +} + +- (NSString *)_generateKeyForClassName:(NSString *)className + objectId:(NSString *)objectId { + return [NSString stringWithFormat:@"%@:%@", className, objectId]; +} + +// TODO (hallucinogen): is this the right way to store the schema? ++ (NSString *)PFOfflineStoreParseObjectsTableSchema { + return [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@ (" + @"%@ TEXT PRIMARY KEY, " + @"%@ TEXT NOT NULL, " + @"%@ TEXT, " + @"%@ TEXT, " + @"%@ INTEGER DEFAULT 0, " + @"UNIQUE(%@, %@));", PFOfflineStoreTableOfObjects, PFOfflineStoreKeyOfUUID, + PFOfflineStoreKeyOfClassName, PFOfflineStoreKeyOfObjectId, PFOfflineStoreKeyOfJSON, + PFOfflineStoreKeyOfIsDeletingEventually, PFOfflineStoreKeyOfClassName, + PFOfflineStoreKeyOfObjectId]; +} + ++ (NSString *)PFOfflineStoreDependenciesTableSchema { + return [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@ (" + @"%@ TEXT NOT NULL, " + @"%@ TEXT NOT NULL, " + @"PRIMARY KEY(%@, %@));", PFOfflineStoreTableOfDependencies, PFOfflineStoreKeyOfKey, + PFOfflineStoreKeyOfUUID, PFOfflineStoreKeyOfKey, PFOfflineStoreKeyOfUUID]; +} + ++ (BFTask *)_initializeTablesInBackgroundWithDatabaseController:(PFSQLiteDatabaseController *)databaseController { + return [[databaseController openDatabaseWithNameAsync:PFOfflineStoreDatabaseName] continueWithBlock:^id(BFTask *task) { + PFSQLiteDatabase *database = task.result; + return [[[[[database beginTransactionAsync] continueWithSuccessBlock:^id(BFTask *task) { + return [database executeSQLAsync:[self PFOfflineStoreParseObjectsTableSchema] withArgumentsInArray:nil]; + }] continueWithSuccessBlock:^id(BFTask *task) { + return [database executeSQLAsync:[self PFOfflineStoreDependenciesTableSchema] withArgumentsInArray:nil]; + }] continueWithSuccessBlock:^id(BFTask *task) { + return [database commitAsync]; + }] continueWithBlock:^id(BFTask *task) { + return [database closeAsync]; + }]; + }]; +} + +///-------------------------------------- +#pragma mark - Database Helpers +///-------------------------------------- + +- (BFTask *)_performDatabaseTransactionAsyncWithBlock:(PFOfflineStoreDatabaseExecutionBlock)block { + return [self _performDatabaseOperationAsyncWithBlock:^BFTask *(PFSQLiteDatabase *database) { + BFTask *task = [database beginTransactionAsync]; + task = [task continueWithSuccessBlock:^id(BFTask *task) { + return block(database); + }]; + return [task continueWithSuccessBlock:^id(BFTask *task) { + return [database commitAsync]; + }]; + }]; +} + +- (BFTask *)_performDatabaseOperationAsyncWithBlock:(PFOfflineStoreDatabaseExecutionBlock)block { + return [[self.databaseController openDatabaseWithNameAsync:PFOfflineStoreDatabaseName] continueWithBlock:^id(BFTask *task) { + PFSQLiteDatabase *database = task.result; + return [block(database) continueWithBlock:^id(BFTask *task) { + return [database closeAsync]; + }]; + }]; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (PFOfflineQueryLogic *)offlineQueryLogic { + @synchronized (self.lock) { + if (!_offlineQueryLogic) { + _offlineQueryLogic = [[PFOfflineQueryLogic alloc] initWithOfflineStore:self]; + } + return _offlineQueryLogic; + } +} + +///-------------------------------------- +#pragma mark - Unit Test helper +///-------------------------------------- + +- (void)simulateReboot { + @synchronized (self.lock) { + [self.UUIDToObjectMap removeAllObjects]; + [self.objectToUUIDMap removeAllObjects]; + [self.classNameAndObjectIdToObjectMap removeAllObjects]; + [self.fetchedObjects removeAllObjects]; + } +} + +- (void)clearDatabase { + // Delete DB file + NSString *filePath = [self.fileManager parseDataItemPathForPathComponent:PFOfflineStoreDatabaseName]; + [[PFFileManager removeItemAtPathAsync:filePath] waitForResult:nil withMainThreadWarning:NO]; + + // Reinitialize tables + [PFOfflineStore _initializeTablesInBackgroundWithDatabaseController:self.databaseController]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/Pin/PFPin.h b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/Pin/PFPin.h new file mode 100644 index 0000000..745baf6 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/Pin/PFPin.h @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import +#import + +extern NSString *const PFPinKeyName; +extern NSString *const PFPinKeyObjects; + +/*! + PFPin represent internal pin implementation of PFObject's `pin`. + */ +@interface PFPin : PFObject + +@property (nonatomic, copy) NSString *name; +@property (nonatomic, strong) NSMutableArray *objects; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)initWithName:(NSString *)name; ++ (instancetype)pinWithName:(NSString *)name; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/Pin/PFPin.m b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/Pin/PFPin.m new file mode 100644 index 0000000..3519b47 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/Pin/PFPin.m @@ -0,0 +1,81 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFPin.h" + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFObject+Subclass.h" +#import "PFObjectPrivate.h" +#import "PFOfflineStore.h" +#import "PFQueryPrivate.h" +#import "Parse_Private.h" + +NSString *const PFPinKeyName = @"_name"; +NSString *const PFPinKeyObjects = @"_objects"; + +@implementation PFPin + +///-------------------------------------- +#pragma mark - PFSubclassing +///-------------------------------------- + ++ (NSString *)parseClassName { + return @"_Pin"; +} + +// Validates a class name. We override this to only allow the pin class name. ++ (void)_assertValidInstanceClassName:(NSString *)className { + PFParameterAssert([className isEqualToString:[self parseClassName]], + @"Cannot initialize a PFPin with a custom class name."); +} + +- (BOOL)needsDefaultACL { + return NO; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithName:(NSString *)name { + self = [super init]; + if (!self) return nil; + + // Use property accessor, as there is no ivar here for `name`. + self.name = name; + + return self; +} + ++ (instancetype)pinWithName:(NSString *)name { + return [[self alloc] initWithName:name]; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (NSString *)name { + return self[PFPinKeyName]; +} + +- (void)setName:(NSString *)name { + self[PFPinKeyName] = [name copy]; +} + +- (NSMutableArray *)objects { + return self[PFPinKeyObjects]; +} + +- (void)setObjects:(NSMutableArray *)objects { + self[PFPinKeyObjects] = [objects mutableCopy]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h new file mode 100644 index 0000000..fc37993 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h @@ -0,0 +1,115 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFMacros.h" + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFFileManager; +@class PFSQLiteDatabaseResult; + +/*! + Argument count given in executeSQLAsync or executeQueryAsync is invalid. + */ +extern int const PFSQLiteDatabaseInvalidArgumenCountErrorCode; + +/*! + Method `executeSQL` cannot execute SELECT. Use `executeQuery` instead. + */ +extern int const PFSQLiteDatabaseInvalidSQL; + +/*! + Database is opened already. + */ +extern int const PFSQLiteDatabaseDatabaseAlreadyOpened; + +/*! + Database is closed already. + */ +extern int const PFSQLiteDatabaseDatabaseAlreadyClosed; + +NS_ASSUME_NONNULL_BEGIN + +@interface PFSQLiteDatabase : NSObject + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)initWithPath:(NSString *)path; + +///-------------------------------------- +/// @name Database Creation +///-------------------------------------- + ++ (instancetype)databaseWithPath:(NSString *)path; + +///-------------------------------------- +/// @name Connection +///-------------------------------------- + +/*! + @returns A `BFTask` that resolves to `YES` if the database is open. + */ +- (BFTask *)isOpenAsync; + +/*! + Opens database. Database is one time use. Open > Close > Open is forbidden. + */ +- (BFTask *)openAsync; + +/*! + Closes the database connection. + */ +- (BFTask *)closeAsync; + +///-------------------------------------- +/// @name Transaction +///-------------------------------------- + +/*! + Begins a database transaction in EXCLUSIVE mode. + */ +- (BFTask *)beginTransactionAsync; + +/*! + Commits running transaction. + */ +- (BFTask *)commitAsync; + +/*! + Rollbacks running transaction. + */ +- (BFTask *)rollbackAsync; + +///-------------------------------------- +/// @name Query Methods +///-------------------------------------- + +/*! + Runs a single SQL statement which return result (SELECT). + */ +- (BFTask *)executeQueryAsync:(NSString *)sql withArgumentsInArray:(nullable NSArray *)args; + +/*! + Runs a single SQL statement, while caching the resulting statement for future use. + */ +- (BFTask *)executeCachedQueryAsync:(NSString *)sql withArgumentsInArray:(nullable NSArray *)args; + +/*! + Runs a single SQL statement which doesn't return result (UPDATE/INSERT/DELETE). + */ +- (BFTask *)executeSQLAsync:(NSString *)sql withArgumentsInArray:(nullable NSArray *)args; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m new file mode 100644 index 0000000..9c46fa3 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m @@ -0,0 +1,339 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFSQLiteDatabase.h" +#import "PFSQLiteDatabase_Private.h" + +#import + +#import +#import + +#import "BFTask+Private.h" +#import "PFFileManager.h" +#import "PFInternalUtils.h" +#import "PFMacros.h" +#import "PFMultiProcessFileLockController.h" +#import "PFSQLiteDatabaseResult.h" +#import "PFSQLiteStatement.h" +#import "Parse_Private.h" + +NSString *const PFSQLiteDatabaseBeginExclusiveOperationCommand = @"BEGIN EXCLUSIVE"; +NSString *const PFSQLiteDatabaseCommitOperationCommand = @"COMMIT"; +NSString *const PFSQLiteDatabaseRollbackOperationCommand = @"ROLLBACK"; + +NSString *const PFSQLiteDatabaseErrorSQLiteDomain = @"SQLite"; +NSString *const PFSQLiteDatabaseErrorPFSQLiteDatabaseDomain = @"PFSQLiteDatabase"; + +int const PFSQLiteDatabaseInvalidArgumenCountErrorCode = 1; +int const PFSQLiteDatabaseInvalidSQL = 2; +int const PFSQLiteDatabaseDatabaseAlreadyOpened = 3; +int const PFSQLiteDatabaseDatabaseAlreadyClosed = 4; + +@interface PFSQLiteDatabase () { + BFTaskCompletionSource *_databaseClosedTaskCompletionSource; + dispatch_queue_t _databaseQueue; + BFExecutor *_databaseExecutor; + NSMutableDictionary *_cachedStatements; +} + +/*! + Database instance + */ +@property (nonatomic, assign) sqlite3 *database; + +/*! + Database path + */ +@property (nonatomic, copy) NSString *databasePath; + +@end + +@implementation PFSQLiteDatabase + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithPath:(NSString *)path { + self = [super init]; + if (!self) return nil; + + _databaseClosedTaskCompletionSource = [[BFTaskCompletionSource alloc] init]; + _databasePath = [path copy]; + _databaseQueue = dispatch_queue_create("com.parse.sqlite.db.queue", DISPATCH_QUEUE_SERIAL); + _databaseExecutor = [BFExecutor executorWithDispatchQueue:_databaseQueue]; + _cachedStatements = [[NSMutableDictionary alloc] init]; + + return self; +} + ++ (instancetype)databaseWithPath:(NSString *)path { + return [[self alloc] initWithPath:path]; +} + +///-------------------------------------- +#pragma mark - Connection +///-------------------------------------- + +- (BFTask *)isOpenAsync { + return [BFTask taskFromExecutor:_databaseExecutor withBlock:^id { + return @(self.database != nil); + }]; +} + +- (BFTask *)openAsync { + return [BFTask taskFromExecutor:_databaseExecutor withBlock:^id { + if (self.database) { + NSError *error = [self _errorWithErrorCode:PFSQLiteDatabaseDatabaseAlreadyOpened + errorMessage:@"Database is opened already." + domain:PFSQLiteDatabaseErrorPFSQLiteDatabaseDomain]; + return [BFTask taskWithError:error]; + } + + // Check if this database have already been opened before. + if (_databaseClosedTaskCompletionSource.task.completed) { + NSError *error = [self _errorWithErrorCode:PFSQLiteDatabaseDatabaseAlreadyClosed + errorMessage:@"Closed database cannot be reopen." + domain:PFSQLiteDatabaseErrorPFSQLiteDatabaseDomain]; + return [BFTask taskWithError:error]; + } + + // Lock the file to avoid multi-process access. + [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:self.databasePath]; + + sqlite3 *db; + int resultCode = sqlite3_open([self.databasePath UTF8String], &db); + if (resultCode != SQLITE_OK) { + return [BFTask taskWithError:[self _errorWithErrorCode:resultCode]]; + } + + self.database = db; + return [BFTask taskWithResult:nil]; + }]; +} + +- (BFTask *)closeAsync { + return [BFTask taskFromExecutor:_databaseExecutor withBlock:^id { + if (!self.database) { + NSError *error = [self _errorWithErrorCode:PFSQLiteDatabaseDatabaseAlreadyClosed + errorMessage:@"Database is closed already." + domain:PFSQLiteDatabaseErrorPFSQLiteDatabaseDomain]; + return [BFTask taskWithError:error]; + } + + [self _clearCachedStatements]; + int resultCode = sqlite3_close(self.database); + + [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:self.databasePath]; + + if (resultCode == SQLITE_OK) { + + self.database = nil; + [_databaseClosedTaskCompletionSource setResult:nil]; + } else { + // Returns error + [_databaseClosedTaskCompletionSource setError:[self _errorWithErrorCode:resultCode]]; + } + return _databaseClosedTaskCompletionSource.task; + }]; +} + +///-------------------------------------- +#pragma mark - Transaction +///-------------------------------------- + +- (BFTask *)beginTransactionAsync { + return [self executeSQLAsync:PFSQLiteDatabaseBeginExclusiveOperationCommand + withArgumentsInArray:nil]; +} + +- (BFTask *)commitAsync { + return [self executeSQLAsync:PFSQLiteDatabaseCommitOperationCommand + withArgumentsInArray:nil]; +} + +- (BFTask *)rollbackAsync { + return [self executeSQLAsync:PFSQLiteDatabaseRollbackOperationCommand + withArgumentsInArray:nil]; +} + +///-------------------------------------- +#pragma mark - Query Methods +///-------------------------------------- + +- (BFTask *)_executeQueryAsync:(NSString *)sql withArgumentsInArray:(NSArray *)args cachingEnabled:(BOOL)enableCaching { + int resultCode = 0; + PFSQLiteStatement *statement = enableCaching ? [self _cachedStatementForQuery:sql] : nil; + if (!statement) { + sqlite3_stmt *sqliteStatement = nil; + resultCode = sqlite3_prepare_v2(self.database, [sql UTF8String], -1, &sqliteStatement, 0); + if (resultCode != SQLITE_OK) { + sqlite3_finalize(sqliteStatement); + return [BFTask taskWithError:[self _errorWithErrorCode:resultCode]]; + } + statement = [[PFSQLiteStatement alloc] initWithStatement:sqliteStatement]; + + if (enableCaching) { + [self _cacheStatement:statement forQuery:sql]; + } + } else { + [statement reset]; + } + + // Make parameter + int queryCount = sqlite3_bind_parameter_count([statement sqliteStatement]); + int argumentCount = (int)[args count]; + if (queryCount != argumentCount) { + if (!enableCaching) { + [statement close]; + } + + NSError *error = [self _errorWithErrorCode:PFSQLiteDatabaseInvalidArgumenCountErrorCode + errorMessage:@"Statement arguments count doesn't match " + @"given arguments count." + domain:NSStringFromClass([self class])]; + return [BFTask taskWithError:error]; + } + + for (int idx = 0; idx < queryCount; ++idx) { + [self _bindObject:args[idx] toColumn:(idx + 1) inStatement:statement]; + } + + PFSQLiteDatabaseResult *result = [[PFSQLiteDatabaseResult alloc] initWithStatement:statement]; + return [BFTask taskWithResult:result]; +} + +- (BFTask *)executeCachedQueryAsync:(NSString *)sql withArgumentsInArray:(NSArray *)args { + return [BFTask taskFromExecutor:_databaseExecutor withBlock:^id { + return [self _executeQueryAsync:sql withArgumentsInArray:args cachingEnabled:YES]; + }]; +} + +- (BFTask *)executeQueryAsync:(NSString *)sql withArgumentsInArray:(NSArray *)args { + return [BFTask taskFromExecutor:_databaseExecutor withBlock:^id { + return [self _executeQueryAsync:sql withArgumentsInArray:args cachingEnabled:NO]; + }]; +} + +- (BFTask *)executeSQLAsync:(NSString *)sql withArgumentsInArray:(NSArray *)args { + return [BFTask taskFromExecutor:_databaseExecutor withBlock:^id { + return [[self _executeQueryAsync:sql + withArgumentsInArray:args + cachingEnabled:NO] continueWithExecutor:[BFExecutor immediateExecutor] withSuccessBlock:^id(BFTask *task) { + PFSQLiteDatabaseResult *databaseResult = task.result; + int sqliteResultCode = [databaseResult step]; + [databaseResult close]; + + switch (sqliteResultCode) { + case SQLITE_DONE: { + return [BFTask taskWithResult:nil]; + } + case SQLITE_ROW: { + NSError *error = [self _errorWithErrorCode:PFSQLiteDatabaseInvalidSQL + errorMessage:@"Cannot SELECT on executeSQLAsync." + @"Please use executeQueryAsync." + domain:NSStringFromClass([self class])]; + return [BFTask taskWithError:error]; + } + default: { + return [BFTask taskWithError:[self _errorWithErrorCode:sqliteResultCode]]; + } + } + }]; + }]; +} + +/*! + bindObject will bind any object supported by PFSQLiteDatabase to query statement. + Note: sqlite3 query index binding is one-based, while querying result is zero-based. + */ +- (void)_bindObject:(id)obj toColumn:(int)idx inStatement:(PFSQLiteStatement *)statement { + if ((!obj) || ((NSNull *)obj == [NSNull null])) { + sqlite3_bind_null([statement sqliteStatement], idx); + } else if ([obj isKindOfClass:[NSData class]]) { + const void *bytes = [obj bytes]; + if (!bytes) { + // It's an empty NSData object, aka [NSData data]. + // Don't pass a NULL pointer, or sqlite will bind a SQL null instead of a blob. + bytes = ""; + } + sqlite3_bind_blob([statement sqliteStatement], idx, bytes, (int)[obj length], SQLITE_TRANSIENT); + } else if ([obj isKindOfClass:[NSDate class]]) { + sqlite3_bind_double([statement sqliteStatement], idx, [obj timeIntervalSince1970]); + } else if ([obj isKindOfClass:[NSNumber class]]) { + if (CFNumberIsFloatType((__bridge CFNumberRef)obj)) { + sqlite3_bind_double([statement sqliteStatement], idx, [obj doubleValue]); + } else { + sqlite3_bind_int64([statement sqliteStatement], idx, [obj longLongValue]); + } + } else { + sqlite3_bind_text([statement sqliteStatement], idx, [[obj description] UTF8String], -1, SQLITE_TRANSIENT); + } +} + +///-------------------------------------- +#pragma mark - Cached Statements +///-------------------------------------- + +- (void)_clearCachedStatements { + for (PFSQLiteStatement *statement in [_cachedStatements allValues]) { + [statement close]; + } + + [_cachedStatements removeAllObjects]; +} + +- (PFSQLiteStatement *)_cachedStatementForQuery:(NSString *)query { + return _cachedStatements[query]; +} + +- (void)_cacheStatement:(PFSQLiteStatement *)statement forQuery:(NSString *)query { + _cachedStatements[query] = statement; +} + +///-------------------------------------- +#pragma mark - Errors +///-------------------------------------- + +/*! + Generates SQLite error. The details of the error code can be seen in: www.sqlite.org/c3ref/errcode.html + */ +- (NSError *)_errorWithErrorCode:(int)errorCode { + return [self _errorWithErrorCode:errorCode + errorMessage:[NSString stringWithUTF8String:sqlite3_errmsg(self.database)]]; +} + +- (NSError *)_errorWithErrorCode:(int)errorCode errorMessage:(NSString *)errorMessage { + return [self _errorWithErrorCode:errorCode + errorMessage:errorMessage + domain:PFSQLiteDatabaseErrorSQLiteDomain]; +} + +/*! + Generates SQLite/PFSQLiteDatabase error. + */ +- (NSError *)_errorWithErrorCode:(int)errorCode + errorMessage:(NSString *)errorMessage + domain:(NSString *)domain { + NSMutableDictionary *result = [NSMutableDictionary dictionary]; + result[@"code"] = @(errorCode); + result[@"error"] = errorMessage; + return [[NSError alloc] initWithDomain:domain code:errorCode userInfo:result]; +} + +///-------------------------------------- +#pragma mark - Private +///-------------------------------------- + +- (BFTask *)databaseClosedTask { + return _databaseClosedTaskCompletionSource.task; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h new file mode 100644 index 0000000..d1a0f8c --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFFileManager; +@class PFSQLiteDatabase; + +NS_ASSUME_NONNULL_BEGIN + +@interface PFSQLiteDatabaseController : NSObject + +@property (nonatomic, strong, readonly) PFFileManager *fileManager; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithFileManager:(PFFileManager *)fileManager NS_DESIGNATED_INITIALIZER; ++ (instancetype)controllerWithFileManager:(PFFileManager *)fileManager; + +///-------------------------------------- +/// @name Opening +///-------------------------------------- + +/*! + @abstract Asynchronously opens a database connection to the database with the name specified. + @note Only one database can be actively open at a time. + + @param name The name of the database to open. + + @return A task, which yields a `PFSQLiteDatabase`, with the open database. + When the database is closed, a new database connection can be opened. + */ +- (BFTask *)openDatabaseWithNameAsync:(NSString *)name; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m new file mode 100644 index 0000000..d971ea4 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m @@ -0,0 +1,79 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFSQLiteDatabaseController.h" + +#import +#import + +#import "PFAssert.h" +#import "PFAsyncTaskQueue.h" +#import "PFFileManager.h" +#import "PFSQLiteDatabase_Private.h" + +@implementation PFSQLiteDatabaseController { + PFAsyncTaskQueue *_openDatabaseQueue; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithFileManager:(PFFileManager *)fileManager { + self = [super init]; + if (!self) return nil; + + _fileManager = fileManager; + _openDatabaseQueue = [[PFAsyncTaskQueue alloc] init]; + + return self; +} + ++ (instancetype)controllerWithFileManager:(PFFileManager *)fileManager { + return [[self alloc] initWithFileManager:fileManager]; +} + +///-------------------------------------- +#pragma mark - Opening +///-------------------------------------- + +// TODO: (richardross) Implement connection pooling using NSCache or similar mechanism. +- (BFTask *)openDatabaseWithNameAsync:(NSString *)name { + BFTaskCompletionSource *taskCompletionSource = [BFTaskCompletionSource taskCompletionSource]; + [_openDatabaseQueue enqueue:^id(BFTask *task) { + NSString *databasePath = [self.fileManager parseDataItemPathForPathComponent:name]; + PFSQLiteDatabase *sqliteDatabase = [PFSQLiteDatabase databaseWithPath:databasePath]; + [[sqliteDatabase openAsync] continueWithBlock:^id(BFTask *task) { + if (task.faulted) { + NSError *error = task.error; + if (error) { + [taskCompletionSource trySetError:error]; + } else { + [taskCompletionSource trySetException:task.exception]; + } + } else if (task.cancelled) { + [taskCompletionSource trySetCancelled]; + } else { + [taskCompletionSource trySetResult:sqliteDatabase]; + } + + return nil; + }]; + + return sqliteDatabase.databaseClosedTask; + }]; + + return taskCompletionSource.task; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h new file mode 100644 index 0000000..d63d36f --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h @@ -0,0 +1,70 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@class PFSQLiteStatement; + +NS_ASSUME_NONNULL_BEGIN + +@interface PFSQLiteDatabaseResult : NSObject + +- (instancetype)initWithStatement:(PFSQLiteStatement *)statement; + +/*! + Move current result to next row. Returns true if next result exists. False if current result + is the end of result set. + */ +- (BOOL)next; + +/*! + Move the current result to next row, and returns the raw SQLite return code for the cursor. + Useful for detecting end of cursor vs. error. + */ +- (int)step; + +/*! + Closes the database result. + */ +- (BOOL)close; + +///-------------------------------------- +/// @name Get Column Value +///-------------------------------------- + +- (int)intForColumn:(NSString *)columnName; +- (int)intForColumnIndex:(int)columnIndex; + +- (long)longForColumn:(NSString *)columnName; +- (long)longForColumnIndex:(int)columnIndex; + +- (BOOL)boolForColumn:(NSString *)columnName; +- (BOOL)boolForColumnIndex:(int)columnIndex; + +- (double)doubleForColumn:(NSString *)columnName; +- (double)doubleForColumnIndex:(int)columnIndex; + +- (nullable NSString *)stringForColumn:(NSString *)columnName; +- (nullable NSString *)stringForColumnIndex:(int)columnIndex; + +- (nullable NSDate *)dateForColumn:(NSString *)columnName; +- (nullable NSDate *)dateForColumnIndex:(int)columnIndex; + +- (nullable NSData *)dataForColumn:(NSString *)columnName; +- (nullable NSData *)dataForColumnIndex:(int)columnIndex; + +- (nullable id)objectForColumn:(NSString *)columnName; +- (nullable id)objectForColumnIndex:(int)columnIndex; + +- (BOOL)columnIsNull:(NSString *)columnName; +- (BOOL)columnIndexIsNull:(int)columnIndex; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m new file mode 100644 index 0000000..cdbeb0e --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m @@ -0,0 +1,168 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFSQLiteDatabaseResult.h" + +#import + +#import "PFSQLiteStatement.h" + +@interface PFSQLiteDatabaseResult () + +@property (nonatomic, copy, readonly) NSDictionary *columnNameToIndexMap; +@property (nonatomic, strong, readonly) PFSQLiteStatement *statement; + +@end + +@implementation PFSQLiteDatabaseResult + +@synthesize columnNameToIndexMap = _columnNameToIndexMap; + +- (instancetype)initWithStatement:(PFSQLiteStatement *)stmt { + if ((self = [super init])) { + _statement = stmt; + } + return self; +} + +- (BOOL)next { + return [self step] == SQLITE_ROW; +} + +- (int)step { + return sqlite3_step([self.statement sqliteStatement]); +} + +- (BOOL)close { + return [self.statement close]; +} + +- (int)intForColumn:(NSString *)columnName { + return [self intForColumnIndex:[self columnIndexForName:columnName]]; +} + +- (int)intForColumnIndex:(int)columnIndex { + return sqlite3_column_int([self.statement sqliteStatement], columnIndex); +} + +- (long)longForColumn:(NSString *)columnName { + return [self longForColumnIndex:[self columnIndexForName:columnName]]; +} + +- (long)longForColumnIndex:(int)columnIndex { + return (long)sqlite3_column_int64([self.statement sqliteStatement], columnIndex); +} + +- (BOOL)boolForColumn:(NSString *)columnName { + return [self boolForColumnIndex:[self columnIndexForName:columnName]]; +} + +- (BOOL)boolForColumnIndex:(int)columnIndex { + return ([self intForColumnIndex:columnIndex] != 0); +} + +- (double)doubleForColumn:(NSString *)columnName { + return [self doubleForColumnIndex:[self columnIndexForName:columnName]]; +} + +- (double)doubleForColumnIndex:(int)columnIndex { + return sqlite3_column_double([self.statement sqliteStatement], columnIndex); +} + +- (NSString *)stringForColumn:(NSString *)columnName { + return [self stringForColumnIndex:[self columnIndexForName:columnName]]; +} + +- (NSString *)stringForColumnIndex:(int)columnIndex { + if ([self columnIndexIsNull:columnIndex]) { + return nil; + } + + const char *str = (const char *)sqlite3_column_text([self.statement sqliteStatement], columnIndex); + if (!str) { + return nil; + } + return [NSString stringWithUTF8String:str]; +} + +- (NSDate *)dateForColumn:(NSString *)columnName { + return [self dateForColumnIndex:[self columnIndexForName:columnName]]; +} + +- (NSDate *)dateForColumnIndex:(int)columnIndex { + // TODO: (nlutsenko) probably use formatter + return [NSDate dateWithTimeIntervalSince1970:[self doubleForColumnIndex:columnIndex]]; +} + +- (NSData *)dataForColumn:(NSString *)columnName { + return [self dataForColumnIndex:[self columnIndexForName:columnName]]; +} + +- (NSData *)dataForColumnIndex:(int)columnIndex { + if ([self columnIndexIsNull:columnIndex]) { + return nil; + } + + int size = sqlite3_column_bytes([self.statement sqliteStatement], columnIndex); + const char *buffer = sqlite3_column_blob([self.statement sqliteStatement], columnIndex); + if (buffer == nil) { + return nil; + } + return [NSData dataWithBytes:buffer length:size]; +} + +- (id)objectForColumn:(NSString *)columnName { + return [self objectForColumnIndex:[self columnIndexForName:columnName]]; +} + +- (id)objectForColumnIndex:(int)columnIndex { + int columnType = sqlite3_column_type([self.statement sqliteStatement], columnIndex); + switch (columnType) { + case SQLITE_INTEGER: + return @([self longForColumnIndex:columnIndex]); + case SQLITE_FLOAT: + return @([self doubleForColumnIndex:columnIndex]); + case SQLITE_BLOB: + return [self dataForColumnIndex:columnIndex]; + default: + return [self stringForColumnIndex:columnIndex]; + } +} + +- (BOOL)columnIsNull:(NSString *)columnName { + return [self columnIndexIsNull:[self columnIndexForName:columnName]]; +} + +- (BOOL)columnIndexIsNull:(int)columnIndex { + return (sqlite3_column_type([self.statement sqliteStatement], columnIndex) == SQLITE_NULL); +} + +- (int)columnIndexForName:(NSString *)columnName { + NSNumber *index = self.columnNameToIndexMap[[columnName lowercaseString]]; + if (index) { + return [index intValue]; + } + // not found + return -1; +} + +- (NSDictionary *)columnNameToIndexMap { + if (!_columnNameToIndexMap) { + int columnCount = sqlite3_column_count([self.statement sqliteStatement]); + NSMutableDictionary *mutableColumnNameToIndexMap = [[NSMutableDictionary alloc] initWithCapacity:columnCount]; + for (int i = 0; i < columnCount; ++i) { + NSString *key = [NSString stringWithUTF8String:sqlite3_column_name([self.statement sqliteStatement], i)]; + mutableColumnNameToIndexMap[[key lowercaseString]] = @(i); + } + _columnNameToIndexMap = mutableColumnNameToIndexMap; + } + return _columnNameToIndexMap; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h new file mode 100644 index 0000000..5db0366 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h @@ -0,0 +1,20 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFSQLiteDatabase.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFSQLiteDatabase () + +@property (nonatomic, strong, readonly) BFTask *databaseClosedTask; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h new file mode 100644 index 0000000..04e181c --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h @@ -0,0 +1,30 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +/*! + PFSQLiteStatement is sqlite3_stmt wrapper class. + */ +typedef struct sqlite3_stmt sqlite3_stmt; + +@interface PFSQLiteStatement : NSObject + +@property (atomic, assign, readonly) sqlite3_stmt *sqliteStatement; + +- (instancetype)initWithStatement:(sqlite3_stmt *)stmt; + +- (BOOL)close; +- (BOOL)reset; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m new file mode 100644 index 0000000..03f31b6 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFSQLiteStatement.h" + +#import + +@implementation PFSQLiteStatement + +- (instancetype)initWithStatement:(sqlite3_stmt *)stmt { + self = [super init]; + if (!stmt || !self) return nil; + + _sqliteStatement = stmt; + + return self; +} + +- (void)dealloc { + [self close]; +} + +- (BOOL)close { + if (!_sqliteStatement) { + return YES; + } + + int resultCode = sqlite3_finalize(_sqliteStatement); + _sqliteStatement = nil; + + return (resultCode == SQLITE_OK || resultCode == SQLITE_DONE); +} + +- (BOOL)reset { + if (!_sqliteStatement) { + return YES; + } + + int resultCode = sqlite3_reset(_sqliteStatement); + return (resultCode == SQLITE_OK || resultCode == SQLITE_DONE); +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h b/BreakingBad/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h new file mode 100644 index 0000000..da1ad89 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h @@ -0,0 +1,26 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +//TODO: (nlutsenko) Add unit tests for this class. +@interface PFMultiProcessFileLock : NSObject + +@property (nonatomic, copy, readonly) NSString *filePath; +@property (nonatomic, copy, readonly) NSString *lockFilePath; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initForFileWithPath:(NSString *)path NS_DESIGNATED_INITIALIZER; ++ (instancetype)lockForFileWithPath:(NSString *)path; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m b/BreakingBad/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m new file mode 100644 index 0000000..2c02cea --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m @@ -0,0 +1,105 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFMultiProcessFileLock.h" + +#import "PFAssert.h" +#import "PFMacros.h" + +static const NSTimeInterval PFMultiProcessLockAttemptsDelay = 0.001; + +@interface PFMultiProcessFileLock () { + dispatch_queue_t _synchronizationQueue; + int _fileDescriptor; +} + +@property (nonatomic, copy, readwrite) NSString *filePath; +@property (nonatomic, copy, readwrite) NSString *lockFilePath; + +@end + +@implementation PFMultiProcessFileLock + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initForFileWithPath:(NSString *)path { + self = [super init]; + if (!self) return nil; + + _filePath = [path copy]; + _lockFilePath = [path stringByAppendingPathExtension:@"pflock"]; + + NSString *queueName = [NSString stringWithFormat:@"com.parse.multiprocess.%@", + [[path lastPathComponent] stringByDeletingPathExtension]]; + _synchronizationQueue = dispatch_queue_create([queueName UTF8String], DISPATCH_QUEUE_SERIAL); + + return self; +} + ++ (instancetype)lockForFileWithPath:(NSString *)path { + return [[self alloc] initForFileWithPath:path]; +} + +- (void)dealloc { + [self unlock]; +} + +///-------------------------------------- +#pragma mark - NSLocking +///-------------------------------------- + +- (void)lock { + dispatch_sync(_synchronizationQueue, ^{ + // Greater than zero means that the lock was already succesfully acquired. + if (_fileDescriptor > 0) { + return; + } + + BOOL locked = NO; + while (!locked) @autoreleasepool { + locked = [self _tryLock]; + if (!locked) { + [NSThread sleepForTimeInterval:PFMultiProcessLockAttemptsDelay]; + } + } + }); +} + +- (void)unlock { + dispatch_sync(_synchronizationQueue, ^{ + // Only descriptor that is greater than zero is going to be open. + if (_fileDescriptor <= 0) { + return; + } + + close(_fileDescriptor); + _fileDescriptor = 0; + }); +} + +///-------------------------------------- +#pragma mark - Private +///-------------------------------------- + +- (BOOL)_tryLock { + const char *filePath = [self.lockFilePath fileSystemRepresentation]; + + // Atomically create a lock file if it doesn't exist and acquire the lock. + _fileDescriptor = open(filePath, (O_RDWR | O_CREAT | O_EXLOCK), + ((S_IRUSR | S_IWUSR | S_IXUSR) | (S_IRGRP | S_IWGRP | S_IXGRP) | (S_IROTH | S_IWOTH | S_IXOTH))); + return (_fileDescriptor > 0); +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h b/BreakingBad/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h new file mode 100644 index 0000000..098b01a --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +//TODO: (nlutsenko) Add unit tests for this class. +@interface PFMultiProcessFileLockController : NSObject + +//TODO: (nlutsenko) Re-consider using singleton here. ++ (instancetype)sharedController; + +/*! + Increments the content access counter by 1. + If the count was 0 - this will try to acquire the file lock first. + + @param filePath Path to a file to lock access to. + */ +- (void)beginLockedContentAccessForFileAtPath:(NSString *)filePath; + +/*! + Decrements the content access counter by 1. + If the count reaches 0 - the lock is going to be released. + + @param filePath Path to a file to lock access to. + */ +- (void)endLockedContentAccessForFileAtPath:(NSString *)filePath; + +- (NSUInteger)lockedContentAccessCountForFileAtPath:(NSString *)filePath; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m b/BreakingBad/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m new file mode 100644 index 0000000..be10da9 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m @@ -0,0 +1,88 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFMultiProcessFileLockController.h" + +#import "PFMultiProcessFileLock.h" + +@interface PFMultiProcessFileLockController () { + dispatch_queue_t _synchronizationQueue; + NSMutableDictionary *_locksDictionary; + NSMutableDictionary *_contentAccessDictionary; +} + +@end + +@implementation PFMultiProcessFileLockController + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _synchronizationQueue = dispatch_queue_create("com.parse.multiprocesslock.controller", DISPATCH_QUEUE_CONCURRENT); + + _locksDictionary = [NSMutableDictionary dictionary]; + _contentAccessDictionary = [NSMutableDictionary dictionary]; + + return self; +} + ++ (instancetype)sharedController { + static PFMultiProcessFileLockController *controller; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + controller = [[self alloc] init]; + }); + return controller; +} + +///-------------------------------------- +#pragma mark - Public +///-------------------------------------- + +- (void)beginLockedContentAccessForFileAtPath:(NSString *)filePath { + dispatch_barrier_sync(_synchronizationQueue, ^{ + PFMultiProcessFileLock *fileLock = _locksDictionary[filePath]; + if (!fileLock) { + fileLock = [PFMultiProcessFileLock lockForFileWithPath:filePath]; + _locksDictionary[filePath] = fileLock; + } + + [fileLock lock]; + + NSUInteger contentAccess = [_contentAccessDictionary[filePath] unsignedIntegerValue]; + _contentAccessDictionary[filePath] = @(contentAccess + 1); + }); +} + +- (void)endLockedContentAccessForFileAtPath:(NSString *)filePath { + dispatch_barrier_sync(_synchronizationQueue, ^{ + PFMultiProcessFileLock *fileLock = _locksDictionary[filePath]; + [fileLock unlock]; + + if (fileLock && [_contentAccessDictionary[filePath] unsignedIntegerValue] == 0) { + [_locksDictionary removeObjectForKey:filePath]; + [_contentAccessDictionary removeObjectForKey:filePath]; + } + }); +} + +- (NSUInteger)lockedContentAccessCountForFileAtPath:(NSString *)filePath { + __block NSUInteger value = 0; + dispatch_sync(_synchronizationQueue, ^{ + value = [_contentAccessDictionary[filePath] unsignedIntegerValue]; + }); + return value; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/BatchController/PFObjectBatchController.h b/BreakingBad/Pods/Parse/Parse/Internal/Object/BatchController/PFObjectBatchController.h new file mode 100644 index 0000000..a513f6d --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/BatchController/PFObjectBatchController.h @@ -0,0 +1,55 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFDataProvider.h" +#import "PFMacros.h" + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFObject; + +NS_ASSUME_NONNULL_BEGIN + +@interface PFObjectBatchController : NSObject + +@property (nonatomic, weak, readonly) id dataSource; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; ++ (instancetype)controllerWithDataSource:(id)dataSource; + +///-------------------------------------- +/// @name Fetch +///-------------------------------------- + +- (BFTask *)fetchObjectsAsync:(nullable NSArray *)objects withSessionToken:(nullable NSString *)sessionToken; + +///-------------------------------------- +/// @name Delete +///-------------------------------------- + +- (BFTask *)deleteObjectsAsync:(nullable NSArray *)objects withSessionToken:(nullable NSString *)sessionToken; + +///-------------------------------------- +/// @name Utilities +///-------------------------------------- + ++ (nullable NSArray *)uniqueObjectsArrayFromArray:(nullable NSArray *)objects omitObjectsWithData:(BOOL)omitFetched; ++ (NSArray *)uniqueObjectsArrayFromArray:(NSArray *)objects usingFilter:(BOOL (^)(PFObject *object))filter; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/BatchController/PFObjectBatchController.m b/BreakingBad/Pods/Parse/Parse/Internal/Object/BatchController/PFObjectBatchController.m new file mode 100644 index 0000000..5ad34ca --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/BatchController/PFObjectBatchController.m @@ -0,0 +1,229 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFObjectBatchController.h" + +#import + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFCommandResult.h" +#import "PFCommandRunning.h" +#import "PFErrorUtilities.h" +#import "PFMacros.h" +#import "PFObjectController.h" +#import "PFObjectPrivate.h" +#import "PFQueryPrivate.h" +#import "PFRESTQueryCommand.h" +#import "PFRESTObjectCommand.h" +#import "PFRESTObjectBatchCommand.h" + +@implementation PFObjectBatchController + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithDataSource:(id)dataSource { + self = [super init]; + if (!self) return nil; + + _dataSource = dataSource; + + return self; +} + ++ (instancetype)controllerWithDataSource:(id)dataSource { + return [[self alloc] initWithDataSource:dataSource]; +} + +///-------------------------------------- +#pragma mark - Fetch +///-------------------------------------- + +- (BFTask *)fetchObjectsAsync:(NSArray *)objects withSessionToken:(NSString *)sessionToken { + if (objects.count == 0) { + return [BFTask taskWithResult:objects]; + } + + @weakify(self); + return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + @strongify(self); + PFRESTCommand *command = [self _fetchCommandForObjects:objects withSessionToken:sessionToken]; + return [self.dataSource.commandRunner runCommandAsync:command + withOptions:PFCommandRunningOptionRetryIfFailed]; + }] continueWithSuccessBlock:^id(BFTask *task) { + @strongify(self); + PFCommandResult *result = task.result; + return [self _processFetchResultAsync:result.result forObjects:objects]; + }]; +} + +- (PFRESTCommand *)_fetchCommandForObjects:(NSArray *)objects withSessionToken:(NSString *)sessionToken { + NSArray *objectIds = [objects valueForKey:@keypath(PFObject, objectId)]; + PFQuery *query = [PFQuery queryWithClassName:[objects.firstObject parseClassName]]; + [query whereKey:@keypath(PFObject, objectId) containedIn:objectIds]; + query.limit = objectIds.count; + return [PFRESTQueryCommand findCommandForQueryState:query.state withSessionToken:sessionToken]; +} + +- (BFTask *)_processFetchResultAsync:(NSDictionary *)result forObjects:(NSArray *)objects { + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + NSArray *results = result[@"results"]; // TODO: (nlutsenko) Move this logic into command itself? + NSArray *objectIds = [results valueForKey:@keypath(PFObject, objectId)]; + NSDictionary *objectResults = [NSDictionary dictionaryWithObjects:results forKeys:objectIds]; + + NSMutableArray *tasks = [NSMutableArray arrayWithCapacity:objects.count]; + for (PFObject *object in objects) { + PFObjectController *controller = [[object class] objectController]; + NSDictionary *objectResult = objectResults[object.objectId]; + + BFTask *task = nil; + if (objectResult) { + task = [controller processFetchResultAsync:objectResult forObject:object]; + } else { + NSError *error = [PFErrorUtilities errorWithCode:kPFErrorObjectNotFound + message:@"Object not found on the server."]; + task = [BFTask taskWithError:error]; + } + [tasks addObject:task]; + } + return [BFTask taskForCompletionOfAllTasks:tasks]; + }]; +} + +///-------------------------------------- +#pragma mark - Delete +///-------------------------------------- + +- (BFTask *)deleteObjectsAsync:(NSArray *)objects withSessionToken:(NSString *)sessionToken { + if (objects.count == 0) { + return [BFTask taskWithResult:objects]; + } + + @weakify(self); + return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + @strongify(self); + NSArray *objectBatches = [PFInternalUtils arrayBySplittingArray:objects + withMaximumComponentsPerSegment:PFRESTObjectBatchCommandSubcommandsLimit]; + NSMutableArray *tasks = [NSMutableArray arrayWithCapacity:objectBatches.count]; + for (NSArray *batch in objectBatches) { + PFRESTCommand *command = [self _deleteCommandForObjects:batch withSessionToken:sessionToken]; + BFTask *task = [[self.dataSource.commandRunner runCommandAsync:command + withOptions:PFCommandRunningOptionRetryIfFailed] continueWithSuccessBlock:^id(BFTask *task) { + PFCommandResult *result = task.result; + return [self _processDeleteResultsAsync:[result result] forObjects:batch]; + }]; + [tasks addObject:task]; + } + return [[BFTask taskForCompletionOfAllTasks:tasks] continueWithBlock:^id(BFTask *task) { + NSError *taskError = task.error; + if (taskError && [taskError.domain isEqualToString:BFTaskErrorDomain]) { + NSArray *taskErrors = taskError.userInfo[@"errors"]; + NSMutableArray *errors = [NSMutableArray array]; + for (NSError *error in taskErrors) { + if ([error.domain isEqualToString:BFTaskErrorDomain]) { + [errors addObjectsFromArray:error.userInfo[@"errors"]]; + } else { + [errors addObject:error]; + } + } + return [BFTask taskWithError:[NSError errorWithDomain:BFTaskErrorDomain + code:kBFMultipleErrorsError + userInfo:@{ @"errors" : errors }]]; + } + return task; + }]; + }] continueWithSuccessResult:objects]; +} + +- (PFRESTCommand *)_deleteCommandForObjects:(NSArray *)objects withSessionToken:(NSString *)sessionToken { + NSMutableArray *commands = [NSMutableArray arrayWithCapacity:objects.count]; + for (PFObject *object in objects) { + PFRESTCommand *deleteCommand = [PFRESTObjectCommand deleteObjectCommandForObjectState:object._state + withSessionToken:sessionToken]; + [commands addObject:deleteCommand]; + } + return [PFRESTObjectBatchCommand batchCommandWithCommands:commands sessionToken:sessionToken]; +} + +- (BFTask *)_processDeleteResultsAsync:(NSArray *)results forObjects:(NSArray *)objects { + NSMutableArray *tasks = [NSMutableArray arrayWithCapacity:results.count]; + [results enumerateObjectsUsingBlock:^(NSDictionary *result, NSUInteger idx, BOOL *stop) { + PFObject *object = objects[idx]; + NSDictionary *errorResult = result[@"error"]; + NSDictionary *successResult = result[@"success"]; + + id controller = [[object class] objectController]; + BFTask *task = [controller processDeleteResultAsync:successResult forObject:object]; + if (errorResult) { + task = [task continueWithBlock:^id(BFTask *task) { + return [BFTask taskWithError:[PFErrorUtilities errorFromResult:errorResult]]; + }]; + } + [tasks addObject:task]; + }]; + return [BFTask taskForCompletionOfAllTasks:tasks]; +} + +///-------------------------------------- +#pragma mark - Utilities +///-------------------------------------- + +//TODO: (nlutsenko) Convert to use `uniqueObjectsArrayFromArray:usingFilter:` ++ (NSArray *)uniqueObjectsArrayFromArray:(NSArray *)objects omitObjectsWithData:(BOOL)omitFetched { + if (objects.count == 0) { + return objects; + } + + NSMutableSet *set = [NSMutableSet setWithCapacity:[objects count]]; + NSString *className = [objects.firstObject parseClassName]; + for (PFObject *object in objects) { + @synchronized (object.lock) { + if (omitFetched && [object isDataAvailable]) { + continue; + } + + //TODO: (nlutsenko) Convert to using errors instead of assertions. + PFParameterAssert([className isEqualToString:object.parseClassName], + @"All object should be in the same class."); + PFParameterAssert(object.objectId != nil, + @"All objects must exist on the server."); + + [set addObject:object]; + } + } + return [set allObjects]; +} + ++ (NSArray *)uniqueObjectsArrayFromArray:(NSArray *)objects usingFilter:(BOOL (^)(PFObject *object))filter { + if (objects.count == 0) { + return objects; + } + + NSMutableDictionary *uniqueObjects = [NSMutableDictionary dictionary]; + for (PFObject *object in objects) { + if (!filter(object)) { + continue; + } + + // Use stringWithFormat: in case objectId or parseClassName are nil. + NSString *objectIdentifier = [NSString stringWithFormat:@"%@%@", object.parseClassName, object.objectId]; + if (!uniqueObjects[objectIdentifier]) { + uniqueObjects[objectIdentifier] = object; + } + } + return [uniqueObjects allValues]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCoder.h b/BreakingBad/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCoder.h new file mode 100644 index 0000000..371acc1 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCoder.h @@ -0,0 +1,38 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@class PFDecoder; +@class PFEncoder; +@class PFObject; + +NS_ASSUME_NONNULL_BEGIN + +/*! + Handles encoding/decoding of `PFObject`s into a /2 JSON format. + /2 format is only used for persisting `currentUser`, `currentInstallation` to disk when LDS is not enabled. + */ +@interface PFObjectFileCoder : NSObject + +///-------------------------------------- +/// @name Encode +///-------------------------------------- + ++ (NSData *)dataFromObject:(PFObject *)object usingEncoder:(PFEncoder *)encoder; + +///-------------------------------------- +/// @name Decode +///-------------------------------------- + ++ (PFObject *)objectFromData:(NSData *)data usingDecoder:(PFDecoder *)decoder; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCoder.m b/BreakingBad/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCoder.m new file mode 100644 index 0000000..75bc197 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCoder.m @@ -0,0 +1,44 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFObjectFileCoder.h" + +#import "PFJSONSerialization.h" +#import "PFObjectFileCodingLogic.h" +#import "PFObjectPrivate.h" +#import "PFObjectState.h" + +@implementation PFObjectFileCoder + +///-------------------------------------- +#pragma mark - Encode +///-------------------------------------- + ++ (NSData *)dataFromObject:(PFObject *)object usingEncoder:(PFEncoder *)encoder { + NSMutableDictionary *result = [NSMutableDictionary dictionary]; + result[@"classname"] = object._state.parseClassName; + result[@"data"] = [object._state dictionaryRepresentationWithObjectEncoder:encoder]; + return [PFJSONSerialization dataFromJSONObject:result]; +} + +///-------------------------------------- +#pragma mark - Decode +///-------------------------------------- + ++ (PFObject *)objectFromData:(NSData *)data usingDecoder:(PFDecoder *)decoder { + NSDictionary *dictionary = [PFJSONSerialization JSONObjectFromData:data]; + NSString *className = dictionary[@"classname"] ?: dictionary[@"className"]; + NSString *objectId = dictionary[@"data"][@"objectId"] ?: dictionary[@"id"]; + + PFObject *object = [PFObject objectWithoutDataWithClassName:className objectId:objectId]; + [[[object class] objectFileCodingLogic] updateObject:object fromDictionary:dictionary usingDecoder:decoder]; + return object; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h b/BreakingBad/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h new file mode 100644 index 0000000..c9ce66c --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@class PFDecoder; +@class PFObject; + +NS_ASSUME_NONNULL_BEGIN + +@interface PFObjectFileCodingLogic : NSObject + +///-------------------------------------- +/// @name Init +///-------------------------------------- + ++ (instancetype)codingLogic; + +///-------------------------------------- +/// @name Logic +///-------------------------------------- + +- (void)updateObject:(PFObject *)object fromDictionary:(NSDictionary *)dictionary usingDecoder:(PFDecoder *)decoder; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m b/BreakingBad/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m new file mode 100644 index 0000000..f5955f1 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m @@ -0,0 +1,58 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFObjectFileCodingLogic.h" + +#import "PFMutableObjectState.h" +#import "PFObjectPrivate.h" + +@implementation PFObjectFileCodingLogic + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + ++ (instancetype)codingLogic { + return [[self alloc] init]; +} + +///-------------------------------------- +#pragma mark - Logic +///-------------------------------------- + +- (void)updateObject:(PFObject *)object fromDictionary:(NSDictionary *)dictionary usingDecoder:(PFDecoder *)decoder { + PFMutableObjectState *state = [object._state mutableCopy]; + NSString *newObjectId = dictionary[@"id"]; + if (newObjectId) { + state.objectId = newObjectId; + } + NSString *createdAtString = dictionary[@"created_at"]; + if (createdAtString) { + [state setCreatedAtFromString:createdAtString]; + } + NSString *updatedAtString = dictionary[@"updated_at"]; + if (updatedAtString) { + [state setUpdatedAtFromString:updatedAtString]; + } + object._state = state; + + NSDictionary *newPointers = dictionary[@"pointers"]; + NSMutableDictionary *pointersDictionary = [NSMutableDictionary dictionaryWithCapacity:newPointers.count]; + [newPointers enumerateKeysAndObjectsUsingBlock:^(id key, NSArray *pointerArray, BOOL *stop) { + PFObject *pointer = [PFObject objectWithoutDataWithClassName:[pointerArray firstObject] + objectId:[pointerArray lastObject]]; + pointersDictionary[key] = pointer; + }]; + + NSMutableDictionary *dataDictionary = [NSMutableDictionary dictionaryWithDictionary:dictionary[@"data"]]; + [dataDictionary addEntriesFromDictionary:pointersDictionary]; + [object _mergeAfterFetchWithResult:dataDictionary decoder:decoder completeData:YES]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/Constants/PFObjectConstants.h b/BreakingBad/Pods/Parse/Parse/Internal/Object/Constants/PFObjectConstants.h new file mode 100644 index 0000000..524078c --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/Constants/PFObjectConstants.h @@ -0,0 +1,23 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +// REST Key magic strings +extern NSString *const PFObjectCompleteRESTKey; +extern NSString *const PFObjectOperationsRESTKey; +extern NSString *const PFObjectTypeRESTKey; +extern NSString *const PFObjectObjectIdRESTKey; +extern NSString *const PFObjectUpdatedAtRESTKey; +extern NSString *const PFObjectCreatedAtRESTKey; +extern NSString *const PFObjectIsDeletingEventuallyRESTKey; +extern NSString *const PFObjectClassNameRESTKey; +extern NSString *const PFObjectACLRESTKey; + +extern NSString *const PFObjectDefaultPin; diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/Constants/PFObjectConstants.m b/BreakingBad/Pods/Parse/Parse/Internal/Object/Constants/PFObjectConstants.m new file mode 100644 index 0000000..76047ec --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/Constants/PFObjectConstants.m @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFObjectConstants.h" + +NSString *const PFObjectCompleteRESTKey = @"__complete"; +NSString *const PFObjectOperationsRESTKey = @"__operations"; +NSString *const PFObjectTypeRESTKey = @"__type"; +NSString *const PFObjectObjectIdRESTKey = @"objectId"; +NSString *const PFObjectUpdatedAtRESTKey = @"updatedAt"; +NSString *const PFObjectCreatedAtRESTKey = @"createdAt"; +NSString *const PFObjectIsDeletingEventuallyRESTKey = @"isDeletingEventually"; +NSString *const PFObjectClassNameRESTKey = @"className"; +NSString *const PFObjectACLRESTKey = @"ACL"; + +NSString *const PFObjectDefaultPin = @"_default"; diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h b/BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h new file mode 100644 index 0000000..27dd6dd --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h @@ -0,0 +1,27 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFObjectController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFOfflineObjectController : PFObjectController + +@property (nonatomic, weak, readonly) id dataSource; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; ++ (instancetype)controllerWithDataSource:(id)dataSource; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m b/BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m new file mode 100644 index 0000000..e9cefc3 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m @@ -0,0 +1,86 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFOfflineObjectController.h" + +#import "BFTask+Private.h" +#import "PFMacros.h" +#import "PFObjectController_Private.h" +#import "PFObjectPrivate.h" +#import "PFObjectState.h" +#import "PFOfflineStore.h" + +@interface PFOfflineObjectController () + +@property (nonatomic, strong, readonly) PFOfflineStore *offlineStore; + +@end + +@implementation PFOfflineObjectController + +@dynamic dataSource; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithDataSource:(id)dataSource { + return [super initWithDataSource:dataSource]; +} + ++ (instancetype)controllerWithDataSource:(id)dataSource { + return [super controllerWithDataSource:dataSource]; +} + +///-------------------------------------- +#pragma mark - PFObjectController +///-------------------------------------- + +- (BFTask *)processFetchResultAsync:(NSDictionary *)result forObject:(PFObject *)object { + return [[[[self.offlineStore fetchObjectLocallyAsync:object] continueWithBlock:^id(BFTask *task) { + // Catch CacheMiss error and ignore it. + if ([task.error.domain isEqualToString:PFParseErrorDomain] && + task.error.code == kPFErrorCacheMiss) { + return nil; + } + return task; + }] continueWithBlock:^id(BFTask *task) { + return [super processFetchResultAsync:result forObject:object]; + }] continueWithBlock:^id(BFTask *task) { + return [[self.offlineStore updateDataForObjectAsync:object] continueWithBlock:^id(BFTask *task) { + // Catch CACHE_MISS and ignore it. + if ([task.error.domain isEqualToString:PFParseErrorDomain] && + task.error.code == kPFErrorCacheMiss) { + return [BFTask taskWithResult:nil]; + } + return task; + }]; + }]; +} + +- (BFTask *)processDeleteResultAsync:(nullable NSDictionary *)result forObject:(PFObject *)object { + @weakify(self); + return [[super processDeleteResultAsync:result forObject:object] continueWithBlock:^id(BFTask *task) { + @strongify(self); + if (object._state.deleted) { + return [self.offlineStore deleteDataForObjectAsync:object]; + } + return [self.offlineStore updateDataForObjectAsync:object]; + }]; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (PFOfflineStore *)offlineStore { + return self.dataSource.offlineStore; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController.h b/BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController.h new file mode 100644 index 0000000..44a8ac6 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController.h @@ -0,0 +1,35 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "PFDataProvider.h" +#import "PFObjectControlling.h" + + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFObject; + +NS_ASSUME_NONNULL_BEGIN + +@interface PFObjectController : NSObject + +@property (nonatomic, weak, readonly) id dataSource; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; ++ (instancetype)controllerWithDataSource:(id)dataSource; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController.m b/BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController.m new file mode 100644 index 0000000..ec5d45b --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController.m @@ -0,0 +1,126 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFObjectController.h" +#import "PFObjectController_Private.h" + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFCommandResult.h" +#import "PFCommandRunning.h" +#import "PFErrorUtilities.h" +#import "PFMacros.h" +#import "PFObjectPrivate.h" +#import "PFObjectState.h" +#import "PFRESTObjectCommand.h" +#import "PFTaskQueue.h" + +@implementation PFObjectController + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithDataSource:(id)dataSource { + self = [super init]; + if (!self) return nil; + + _dataSource = dataSource; + + return self; +} + ++ (instancetype)controllerWithDataSource:(id)dataSource { + return [[self alloc] initWithDataSource:dataSource]; +} + +///-------------------------------------- +#pragma mark - PFObjectControlling +///-------------------------------------- + +#pragma mark Fetch + +- (BFTask *)fetchObjectAsync:(PFObject *)object withSessionToken:(NSString *)sessionToken { + @weakify(self); + return [[[[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + return [object _validateFetchAsync]; + }] continueWithSuccessBlock:^id(BFTask *task) { + @strongify(self); + PFRESTCommand *command = [PFRESTObjectCommand fetchObjectCommandForObjectState:[object._state copy] + withSessionToken:sessionToken]; + return [self _runFetchCommand:command forObject:object]; + }] continueWithSuccessBlock:^id(BFTask *task) { + @strongify(self); + PFCommandResult *result = task.result; + return [self processFetchResultAsync:result.result forObject:object]; + }] continueWithSuccessResult:object]; +} + +- (BFTask *)_runFetchCommand:(PFRESTCommand *)command forObject:(PFObject *)object { + return [self.dataSource.commandRunner runCommandAsync:command withOptions:PFCommandRunningOptionRetryIfFailed]; +} + +- (BFTask *)processFetchResultAsync:(NSDictionary *)result forObject:(PFObject *)object { + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + NSDictionary *fetchedObjects = [object _collectFetchedObjects]; + @synchronized (object.lock) { + PFKnownParseObjectDecoder *decoder = [PFKnownParseObjectDecoder decoderWithFetchedObjects:fetchedObjects]; + [object _mergeAfterFetchWithResult:result decoder:decoder completeData:YES]; + } + return nil; + }]; +} + +#pragma mark Delete + +- (BFTask *)deleteObjectAsync:(PFObject *)object withSessionToken:(nullable NSString *)sessionToken { + @weakify(self); + return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + return [object _validateDeleteAsync]; + }] continueWithSuccessBlock:^id(BFTask *task) { + @strongify(self); + PFObjectState *state = [object._state copy]; + if (!state.objectId) { + return nil; + } + + PFRESTCommand *command = [PFRESTObjectCommand deleteObjectCommandForObjectState:state + withSessionToken:sessionToken]; + return [[self _runDeleteCommand:command forObject:object] continueWithBlock:^id(BFTask *fetchTask) { + @strongify(self); + PFCommandResult *result = fetchTask.result; + return [[self processDeleteResultAsync:result.result forObject:object] continueWithBlock:^id(BFTask *task) { + // Propagate the result of network task if it's faulted, cancelled. + if (fetchTask.faulted || fetchTask.cancelled) { + return fetchTask; + } + // Propagate the result of processDeleteResult otherwise. + return task; + }]; + }]; + }]; +} + +- (BFTask *)_runDeleteCommand:(PFRESTCommand *)command forObject:(PFObject *)object { + return [self.dataSource.commandRunner runCommandAsync:command withOptions:PFCommandRunningOptionRetryIfFailed]; +} + +- (BFTask *)processDeleteResultAsync:(NSDictionary *)result forObject:(PFObject *)object { + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + BOOL deleted = (result != nil); + [object _setDeleted:deleted]; + return nil; + }]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController_Private.h new file mode 100644 index 0000000..7ca5abc --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController_Private.h @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFObjectController.h" + +@class PFRESTCommand; + +@interface PFObjectController () + +///-------------------------------------- +/// @name Fetch +///-------------------------------------- + +- (BFTask *)_runFetchCommand:(PFRESTCommand *)command forObject:(PFObject *)object; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/PFObjectControlling.h b/BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/PFObjectControlling.h new file mode 100644 index 0000000..e57a645 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/Controller/PFObjectControlling.h @@ -0,0 +1,58 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFMacros.h" + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFObject; + +NS_ASSUME_NONNULL_BEGIN + +@protocol PFObjectControlling + +///-------------------------------------- +/// @name Fetch +///-------------------------------------- + +/*! + Fetches an object asynchronously. + + @param object Object to fetch. + @param sessionToken Session token to use. + + @returns `BFTask` with result set to `PFObject`. + */ +- (BFTask *)fetchObjectAsync:(PFObject *)object withSessionToken:(nullable NSString *)sessionToken; + +- (BFTask *)processFetchResultAsync:(NSDictionary *)result forObject:(PFObject *)object; + +///-------------------------------------- +/// @name Delete +///-------------------------------------- + +/*! + Deletes an object asynchronously. + + @param object Object to fetch. + @param sessionToken Session token to use. + + @returns `BFTask` with result set to `nil`. + */ +- (BFTask *)deleteObjectAsync:(PFObject *)object withSessionToken:(nullable NSString *)sessionToken; + +//TODO: (nlutsenko) This needs removal, figure out how to kill it. +- (BFTask *)processDeleteResultAsync:(nullable NSDictionary *)result forObject:(PFObject *)object; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h b/BreakingBad/Pods/Parse/Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h new file mode 100644 index 0000000..9cbd1b0 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFObject; + +typedef NS_ENUM(NSUInteger, PFCurrentObjectStorageType) { + PFCurrentObjectStorageTypeFile = 1, + PFCurrentObjectStorageTypeOfflineStore, +}; + +@protocol PFCurrentObjectControlling + +@property (nonatomic, assign, readonly) PFCurrentObjectStorageType storageType; + +///-------------------------------------- +/// @name Current +///-------------------------------------- + +- (BFTask *)getCurrentObjectAsync; +- (BFTask *)saveCurrentObjectAsync:(PFObject *)object; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h b/BreakingBad/Pods/Parse/Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h new file mode 100644 index 0000000..b507e8a --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h @@ -0,0 +1,44 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@class PFFieldOperation; +@class PFOperationSet; + +@interface PFObjectEstimatedData : NSObject + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)initWithServerData:(NSDictionary *)serverData + operationSetQueue:(NSArray *)operationSetQueue; ++ (instancetype)estimatedDataFromServerData:(NSDictionary *)serverData + operationSetQueue:(NSArray *)operationSetQueue; + +///-------------------------------------- +/// @name Read +///-------------------------------------- + +- (id)objectForKey:(NSString *)key; +- (id)objectForKeyedSubscript:(NSString *)keyedSubscript; + +- (void)enumerateKeysAndObjectsUsingBlock:(void (^)(NSString *key, id obj, BOOL *stop))block; + +@property (nonatomic, copy, readonly) NSArray *allKeys; +@property (nonatomic, copy, readonly) NSDictionary *dictionaryRepresentation; + +///-------------------------------------- +/// @name Write +///-------------------------------------- + +- (id)applyFieldOperation:(PFFieldOperation *)operation forKey:(NSString *)key; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m b/BreakingBad/Pods/Parse/Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m new file mode 100644 index 0000000..7fb5df5 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m @@ -0,0 +1,86 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFObjectEstimatedData.h" + +#import "PFObjectUtilities.h" + +@interface PFObjectEstimatedData () { + NSMutableDictionary *_dataDictionary; +} + +@end + +@implementation PFObjectEstimatedData + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _dataDictionary = [NSMutableDictionary dictionary]; + + return self; +} + +- (instancetype)initWithServerData:(NSDictionary *)serverData + operationSetQueue:(NSArray *)operationSetQueue { + self = [super init]; + if (!self) return nil; + + // Don't use mutableCopy to make sure we never initialize _dataDictionary to `nil`. + _dataDictionary = [NSMutableDictionary dictionaryWithDictionary:serverData]; + for (PFOperationSet *operationSet in operationSetQueue) { + [PFObjectUtilities applyOperationSet:operationSet toDictionary:_dataDictionary]; + } + + return self; +} + ++ (instancetype)estimatedDataFromServerData:(NSDictionary *)serverData + operationSetQueue:(NSArray *)operationSetQueue { + return [[self alloc] initWithServerData:serverData operationSetQueue:operationSetQueue]; +} + +///-------------------------------------- +#pragma mark - Read +///-------------------------------------- + +- (void)enumerateKeysAndObjectsUsingBlock:(void (^)(NSString *key, id obj, BOOL *stop))block { + [_dataDictionary enumerateKeysAndObjectsUsingBlock:block]; +} + +- (id)objectForKey:(NSString *)key { + return [_dataDictionary objectForKey:key]; +} + +- (id)objectForKeyedSubscript:(NSString *)keyedSubscript { + return [_dataDictionary objectForKeyedSubscript:keyedSubscript]; +} + +- (NSArray *)allKeys { + return [_dataDictionary allKeys]; +} + +- (NSDictionary *)dictionaryRepresentation { + return [_dataDictionary copy]; +} + +///-------------------------------------- +#pragma mark - Write +///-------------------------------------- + +- (id)applyFieldOperation:(PFFieldOperation *)operation forKey:(NSString *)key { + return [PFObjectUtilities newValueByApplyingFieldOperation:operation toDictionary:_dataDictionary forKey:key]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h b/BreakingBad/Pods/Parse/Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h new file mode 100644 index 0000000..8537ddf --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h @@ -0,0 +1,55 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFDataProvider.h" +#import "PFMacros.h" + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFObject; + +@interface PFObjectFilePersistenceController : NSObject + +@property (nonatomic, weak, readonly) id dataSource; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; ++ (instancetype)controllerWithDataSource:(id)dataSource; + +///-------------------------------------- +/// @name Objects +///-------------------------------------- + +/*! + Loads and creates a PFObject from file. + + @param key File name to use. + + @returns `BFTask` with `PFObject` or `nil` result. + */ +- (BFTask *)loadPersistentObjectAsyncForKey:(NSString *)key; + +/*! + Saves a given object to a file with name. + + @param object Object to save. + @param key File name to use. + + @returns `BFTask` with `nil` result. + */ +- (BFTask *)persistObjectAsync:(PFObject *)object forKey:(NSString *)key; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m b/BreakingBad/Pods/Parse/Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m new file mode 100644 index 0000000..38fdcd1 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m @@ -0,0 +1,98 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFObjectFilePersistenceController.h" + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFFileManager.h" +#import "PFJSONSerialization.h" +#import "PFMacros.h" +#import "PFMultiProcessFileLockController.h" +#import "PFObjectFileCoder.h" +#import "PFObjectPrivate.h" + +@implementation PFObjectFilePersistenceController + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithDataSource:(id)dataSource { + self = [super init]; + if (!self) return nil; + + _dataSource = dataSource; + + return self; +} + ++ (instancetype)controllerWithDataSource:(id)dataSource { + return [[self alloc] initWithDataSource:dataSource]; +} + +///-------------------------------------- +#pragma mark - Objects +///-------------------------------------- + +- (BFTask *)loadPersistentObjectAsyncForKey:(NSString *)key { + @weakify(self); + return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + @strongify(self); + + NSString *path = [self.dataSource.fileManager parseDataItemPathForPathComponent:key]; + [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:path]; + if (![[NSFileManager defaultManager] fileExistsAtPath:path]) { + [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:path]; + return nil; + } + + NSError *error = nil; + NSData *jsonData = [NSData dataWithContentsOfFile:path + options:NSDataReadingMappedIfSafe + error:&error]; + [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:path]; + + if (error) { + return [BFTask taskWithError:error]; + } + return jsonData; + }] continueWithSuccessBlock:^id(BFTask *task) { + NSData *jsonData = task.result; + if (jsonData) { + PFObject *object = [PFObjectFileCoder objectFromData:jsonData usingDecoder:[PFDecoder objectDecoder]]; + return object; + } + + return nil; + }]; +} + +- (BFTask *)persistObjectAsync:(PFObject *)object forKey:(NSString *)key { + @weakify(self); + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + @strongify(self); + + NSData *data = [PFObjectFileCoder dataFromObject:object usingEncoder:[PFPointerObjectEncoder objectEncoder]]; + + NSString *filePath = [self.dataSource.fileManager parseDataItemPathForPathComponent:key]; + [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:filePath]; + + return [[PFFileManager writeDataAsync:data toFile:filePath] continueWithBlock:^id(BFTask *task) { + [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:filePath]; + return nil; + }]; + }]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h b/BreakingBad/Pods/Parse/Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h new file mode 100644 index 0000000..541056b --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "PFDataProvider.h" + +/*! + A disk-based map of local ids to global Parse objectIds. Every entry in this + map has a retain count, and the entry will be removed from the map if the + retain count reaches 0. Every time a localId is written out to disk, its retain + count should be incremented. When the reference on disk is deleted, it should + be decremented. Some entries in this map may not have an object id yet. + This class is thread-safe. + */ +@interface PFObjectLocalIdStore : NSObject + +@property (nonatomic, weak, readonly) id dataSource; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; ++ (instancetype)storeWithDataSource:(id)dataSource; + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (NSString *)createLocalId; +- (void)retainLocalIdOnDisk:(NSString *)localId; +- (void)releaseLocalIdOnDisk:(NSString *)localId; + +- (void)setObjectId:(NSString *)objectId forLocalId:(NSString *)localId; +- (NSString *)objectIdForLocalId:(NSString *)localId; + +// For testing only. +- (BOOL)clear; +- (void)clearInMemoryCache; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m b/BreakingBad/Pods/Parse/Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m new file mode 100644 index 0000000..7c88c3e --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m @@ -0,0 +1,291 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFObjectLocalIdStore.h" + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFFileManager.h" +#import "PFInternalUtils.h" +#import "PFJSONSerialization.h" +#import "PFLogging.h" +#import "Parse_Private.h" + +static NSString *const _PFObjectLocalIdStoreDiskFolderPath = @"LocalId"; + +///-------------------------------------- +#pragma mark - PFObjectLocalIdStoreMapEntry +///-------------------------------------- + +/*! + * Internal class representing all the information we know about a local id. + */ +@interface PFObjectLocalIdStoreMapEntry : NSObject + +@property (nonatomic, strong) NSString *objectId; +@property (atomic, assign) int referenceCount; + +- (instancetype)init NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithFile:(NSString *)filePath; + +@end + +@implementation PFObjectLocalIdStoreMapEntry + +- (instancetype)init { + return [super init]; +} + +- (instancetype)initWithFile:(NSString *)filePath { + self = [self init]; + if (!self) return nil; + + NSData *jsonData = [NSData dataWithContentsOfFile:filePath]; + NSDictionary *dictionary = [PFJSONSerialization JSONObjectFromData:jsonData]; + + _objectId = [dictionary[@"objectId"] copy]; + _referenceCount = [dictionary[@"referenceCount"] intValue]; + + return self; +} + +- (void)writeToFile:(NSString *)filePath { + NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; + dictionary[@"referenceCount"] = @(self.referenceCount); + if (self.objectId) { + dictionary[@"objectId"] = self.objectId; + } + + NSData *jsonData = [PFJSONSerialization dataFromJSONObject:dictionary]; + [[PFFileManager writeDataAsync:jsonData toFile:filePath] waitForResult:nil withMainThreadWarning:NO]; +} + +@end + +///-------------------------------------- +#pragma mark - PFObjectLocalIdStore +///-------------------------------------- + +@interface PFObjectLocalIdStore () { + NSString *_diskPath; + NSObject *_lock; + NSMutableDictionary *_inMemoryCache; +} + +@end + +@implementation PFObjectLocalIdStore + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +/*! + * Creates a new LocalIdManager with default options. + */ +- (instancetype)initWithDataSource:(id)dataSource { + self = [super init]; + if (!self) return nil; + + _dataSource = dataSource; + + _lock = [[NSObject alloc] init]; + _inMemoryCache = [NSMutableDictionary dictionary]; + + // Construct the path to the disk storage directory. + _diskPath = [[Parse _currentManager].fileManager parseDataItemPathForPathComponent:_PFObjectLocalIdStoreDiskFolderPath]; + + NSError *error = nil; + [[PFFileManager createDirectoryIfNeededAsyncAtPath:_diskPath] waitForResult:&error withMainThreadWarning:NO]; + if (error) { + PFLogError(PFLoggingTagCommon, @"Unable to create directories for local id storage with error: %@", error); + } + + return self; +} + ++ (instancetype)storeWithDataSource:(id)dataSource { + return [[self alloc] initWithDataSource:dataSource]; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +/*! + * Returns Yes if localId has the right basic format for a local id. + */ ++ (BOOL)isLocalId:(NSString *)localId { + if ([localId length] != 22U) { + return NO; + } + if (![localId hasPrefix:@"local_"]) { + return NO; + } + for (int i = 6; i < [localId length]; ++i) { + if (!ishexnumber([localId characterAtIndex:i])) { + return NO; + } + } + return YES; +} + +/*! + * Grabs one entry in the local id map off the disk. + */ +- (PFObjectLocalIdStoreMapEntry *)getMapEntry:(NSString *)localId { + PFConsistencyAssert([[self class] isLocalId:localId], @"Tried to get invalid local id: \"%@\".", localId); + + PFObjectLocalIdStoreMapEntry *entry = nil; + + NSString *file = [_diskPath stringByAppendingPathComponent:localId]; + if (![[NSFileManager defaultManager] isReadableFileAtPath:file]) { + entry = [[PFObjectLocalIdStoreMapEntry alloc] init]; + } else { + entry = [[PFObjectLocalIdStoreMapEntry alloc] initWithFile:file]; + } + + // If there's an objectId in memory, make sure it matches the one in the + // file. This is in case the id was retained on disk *after* it was resolved. + if (!entry.objectId) { + NSString *objectId = [_inMemoryCache objectForKey:localId]; + if (objectId) { + entry.objectId = objectId; + if (entry.referenceCount > 0) { + [self putMapEntry:entry forLocalId:localId]; + } + } + } + + return entry; +} + +/*! + * Writes one entry to the local id map on disk. + */ +- (void)putMapEntry:(PFObjectLocalIdStoreMapEntry *)entry forLocalId:(NSString *)localId { + PFConsistencyAssert([[self class] isLocalId:localId], @"Tried to get invalid local id: \"%@\".", localId); + + NSString *file = [_diskPath stringByAppendingPathComponent:localId]; + [entry writeToFile:file]; +} + +/*! + * Removes an entry from the local id map on disk. + */ +- (void)removeMapEntry:(NSString *)localId { + PFConsistencyAssert([[self class] isLocalId:localId], @"Tried to get invalid local id: \"%@\".", localId); + + NSString *file = [_diskPath stringByAppendingPathComponent:localId]; + [[NSFileManager defaultManager] removeItemAtPath:file error:nil]; +} + +/*! + * Creates a new local id in the map. + */ +- (NSString *)createLocalId { + @synchronized (_lock) { + // Generate a new random string of upper and lower case letters. + + // Start by generating a number. It will be the localId as a base-52 number. + // It has to be a uint64_t because log256(52^10) ~= 7.13 bytes. + uint64_t localIdNumber = (((uint64_t)arc4random()) << 32) | ((uint64_t)arc4random()); + NSString *localId = [NSString stringWithFormat:@"local_%016llx", localIdNumber]; + + PFConsistencyAssert([[self class] isLocalId:localId], @"Generated an invalid local id: \"%@\".", localId); + + return localId; + } +} + +/*! + * Increments the retain count of a local id on disk. + */ +- (void)retainLocalIdOnDisk:(NSString *)localId { + @synchronized (_lock) { + PFObjectLocalIdStoreMapEntry *entry = [self getMapEntry:localId]; + entry.referenceCount++; + [self putMapEntry:entry forLocalId:localId]; + } +} + +/*! + * Decrements the retain count of a local id on disk. + * If the retain count hits zero, the id is forgotten forever. + */ +- (void)releaseLocalIdOnDisk:(NSString *)localId { + @synchronized (_lock) { + PFObjectLocalIdStoreMapEntry *entry = [self getMapEntry:localId]; + if (--entry.referenceCount > 0) { + [self putMapEntry:entry forLocalId:localId]; + } else { + [self removeMapEntry:localId]; + } + } +} + +/*! + * Sets the objectId associated with a given local id. + */ +- (void)setObjectId:(NSString *)objectId forLocalId:(NSString *)localId { + @synchronized (_lock) { + PFObjectLocalIdStoreMapEntry *entry = [self getMapEntry:localId]; + if (entry.referenceCount > 0) { + entry.objectId = objectId; + [self putMapEntry:entry forLocalId:localId]; + } + [_inMemoryCache setObject:objectId forKey:localId]; + } +} + +/*! + * Returns the objectId associated with a given local id. + * Returns nil if no objectId is yet known for the lcoal id. + */ +- (NSString *)objectIdForLocalId:(NSString *)localId { + @synchronized (_lock) { + NSString *objectId = [_inMemoryCache objectForKey:localId]; + if (objectId) { + return objectId; + } + + PFObjectLocalIdStoreMapEntry *entry = [self getMapEntry:localId]; + return entry.objectId; + } +} + +/*! + * Removes all local ids from the disk and memory caches. + */ +- (BOOL)clear { + @synchronized (_lock) { + [self clearInMemoryCache]; + + BOOL empty = ([[[[NSFileManager defaultManager] enumeratorAtPath:_diskPath] allObjects] count] == 0); + + [[NSFileManager defaultManager] removeItemAtPath:_diskPath error:nil]; + + [[NSFileManager defaultManager] createDirectoryAtPath:_diskPath + withIntermediateDirectories:YES + attributes:nil + error:nil]; + return !empty; + } +} + +/*! + * Removes all local ids from the memory cache. + */ +- (void)clearInMemoryCache { + @synchronized (_lock) { + [_inMemoryCache removeAllObjects]; + } +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/OperationSet/PFOperationSet.h b/BreakingBad/Pods/Parse/Parse/Internal/Object/OperationSet/PFOperationSet.h new file mode 100644 index 0000000..5456ffa --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/OperationSet/PFOperationSet.h @@ -0,0 +1,70 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@class PFDecoder; +@class PFEncoder; +@class PFFieldOperation; + +/*! + A set of field-level operations that can be performed on an object, corresponding to one + command. For example, all the data for a single call to save() will be packaged here. It is + assumed that the PFObject that owns the operations handles thread-safety. + */ +@interface PFOperationSet : NSObject + +/*! + Returns true if this set corresponds to a call to saveEventually. + */ +@property (nonatomic, assign, getter=isSaveEventually) BOOL saveEventually; + +/*! + A unique id for this operation set. + */ +@property (nonatomic, copy, readonly) NSString *uuid; + +@property (nonatomic, copy) NSDate *updatedAt; + +/*! + Merges the changes from the given operation set into this one. Most typically, this is what + happens when a save fails and changes need to be rolled into the next save. + */ +- (void)mergeOperationSet:(PFOperationSet *)other; + +/*! + Converts this operation set into its REST format for serializing to the pinning store + */ +- (NSDictionary *)RESTDictionaryUsingObjectEncoder:(PFEncoder *)objectEncoder + operationSetUUIDs:(NSArray **)operationSetUUIDs; + +/*! + The inverse of RESTDictionaryUsingObjectEncoder. + Creates a new OperationSet from the given NSDictionary + */ ++ (PFOperationSet *)operationSetFromRESTDictionary:(NSDictionary *)data + usingDecoder:(PFDecoder *)decoder; + +///-------------------------------------- +/// @name Accessors +///-------------------------------------- + +- (id)objectForKey:(id)aKey; +- (id)objectForKeyedSubscript:(id)aKey; +- (NSUInteger)count; +- (NSEnumerator *)keyEnumerator; + +- (void)enumerateKeysAndObjectsUsingBlock:(void (^)(NSString *key, PFFieldOperation *operation, BOOL *stop))block; + +- (void)setObject:(id)anObject forKey:(id)aKey; +- (void)setObject:(id)anObject forKeyedSubscript:(id)aKey; +- (void)removeObjectForKey:(id)aKey; +- (void)removeAllObjects; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/OperationSet/PFOperationSet.m b/BreakingBad/Pods/Parse/Parse/Internal/Object/OperationSet/PFOperationSet.m new file mode 100644 index 0000000..f1df813 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/OperationSet/PFOperationSet.m @@ -0,0 +1,196 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFOperationSet.h" + +#import "PFACL.h" +#import "PFACLPrivate.h" +#import "PFDecoder.h" +#import "PFEncoder.h" +#import "PFFieldOperation.h" +#import "PFInternalUtils.h" + +NSString *const PFOperationSetKeyUUID = @"__uuid"; +NSString *const PFOperationSetKeyIsSaveEventually = @"__isSaveEventually"; +NSString *const PFOperationSetKeyUpdatedAt = @"__updatedAt"; +NSString *const PFOperationSetKeyACL = @"ACL"; + +@interface PFOperationSet() + +@property (nonatomic, strong) NSMutableDictionary *dictionary; + +@end + +@implementation PFOperationSet + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + return [self initWithUUID:[[NSUUID UUID] UUIDString]]; +} + +- (instancetype)initWithUUID:(NSString *)uuid { + self = [super init]; + if (!self) return nil; + + _dictionary = [NSMutableDictionary dictionary]; + _uuid = [uuid copy]; + + _updatedAt = [NSDate date]; + + return self; +} + +///-------------------------------------- +#pragma mark - Merge +///-------------------------------------- + +- (void)mergeOperationSet:(PFOperationSet *)other { + [other.dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + PFFieldOperation *localOperation = self.dictionary[key]; + PFFieldOperation *remoteOperation = other.dictionary[key]; + if (localOperation != nil) { + localOperation = [localOperation mergeWithPrevious:remoteOperation]; + self.dictionary[key] = localOperation; + } else { + self.dictionary[key] = remoteOperation; + } + }]; + self.updatedAt = [NSDate date]; +} + +///-------------------------------------- +#pragma mark - Encoding +///-------------------------------------- + +- (NSDictionary *)RESTDictionaryUsingObjectEncoder:(PFEncoder *)objectEncoder + operationSetUUIDs:(NSArray **)operationSetUUIDs { + NSMutableDictionary *operationSetResult = [[NSMutableDictionary alloc] init]; + [self.dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + operationSetResult[key] = [obj encodeWithObjectEncoder:objectEncoder]; + }]; + + operationSetResult[PFOperationSetKeyUUID] = self.uuid; + operationSetResult[PFOperationSetKeyUpdatedAt] = [objectEncoder encodeObject:self.updatedAt]; + + if (self.saveEventually) { + operationSetResult[PFOperationSetKeyIsSaveEventually] = @YES; + } + *operationSetUUIDs = @[ self.uuid ]; + return operationSetResult; +} + ++ (PFOperationSet *)operationSetFromRESTDictionary:(NSDictionary *)data + usingDecoder:(PFDecoder *)decoder { + NSMutableDictionary *mutableData = [data mutableCopy]; + NSString *inputUUID = mutableData[PFOperationSetKeyUUID]; + [mutableData removeObjectForKey:PFOperationSetKeyUUID]; + PFOperationSet *operationSet = nil; + if (inputUUID == nil) { + operationSet = [[PFOperationSet alloc] init]; + } else { + operationSet = [[PFOperationSet alloc] initWithUUID:inputUUID]; + } + + NSNumber *saveEventuallyFlag = mutableData[PFOperationSetKeyIsSaveEventually]; + if (saveEventuallyFlag) { + operationSet.saveEventually = [saveEventuallyFlag boolValue]; + [mutableData removeObjectForKey:PFOperationSetKeyIsSaveEventually]; + } + + NSDate *updatedAt = mutableData[PFOperationSetKeyUpdatedAt]; + [mutableData removeObjectForKey:PFOperationSetKeyUpdatedAt]; + + [mutableData enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + id value = [decoder decodeObject:obj]; + PFFieldOperation *fieldOperation = nil; + if ([key isEqualToString:PFOperationSetKeyACL]) { + // TODO (hallucinogen): where to use the decoder? + value = [PFACL ACLWithDictionary:obj]; + } + if ([value isKindOfClass:[PFFieldOperation class]]) { + fieldOperation = value; + } else { + fieldOperation = [PFSetOperation setWithValue:value]; + } + operationSet[key] = fieldOperation; + }]; + operationSet.updatedAt = updatedAt ? [decoder decodeObject:updatedAt] : nil; + + return operationSet; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (id)objectForKey:(id)aKey { + return self.dictionary[aKey]; +} + +- (id)objectForKeyedSubscript:(id)aKey { + return [self objectForKey:aKey]; +} + +- (NSUInteger)count { + return [self.dictionary count]; +} + +- (NSEnumerator *)keyEnumerator { + return [self.dictionary keyEnumerator]; +} + +- (void)enumerateKeysAndObjectsUsingBlock:(void (^)(NSString *key, PFFieldOperation *operation, BOOL *stop))block { + [self.dictionary enumerateKeysAndObjectsUsingBlock:block]; +} + +- (void)setObject:(id)anObject forKey:(id)aKey { + self.dictionary[aKey] = anObject; + self.updatedAt = [NSDate date]; +} + +- (void)setObject:(id)anObject forKeyedSubscript:(id)key { + [self setObject:anObject forKey:key]; +} + +- (void)removeObjectForKey:(id)key { + [self.dictionary removeObjectForKey:key]; + self.updatedAt = [NSDate date]; +} + +- (void)removeAllObjects { + [self.dictionary removeAllObjects]; + self.updatedAt = [NSDate date]; +} + +///-------------------------------------- +#pragma mark - NSFastEnumeration +///-------------------------------------- + +- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state + objects:(id __unsafe_unretained [])buffer + count:(NSUInteger)len { + return [self.dictionary countByEnumeratingWithState:state objects:buffer count:len]; +} + +///-------------------------------------- +#pragma mark - NSCopying +///-------------------------------------- + +- (instancetype)copyWithZone:(NSZone *)zone { + PFOperationSet *operationSet = [[[self class] allocWithZone:zone] initWithUUID:self.uuid]; + operationSet.dictionary = [self.dictionary mutableCopy]; + operationSet.updatedAt = [self.updatedAt copy]; + operationSet.saveEventually = self.saveEventually; + return operationSet; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/PFObjectPrivate.h b/BreakingBad/Pods/Parse/Parse/Internal/Object/PFObjectPrivate.h new file mode 100644 index 0000000..949e589 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/PFObjectPrivate.h @@ -0,0 +1,306 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import + +#import "PFDecoder.h" +#import "PFEncoder.h" +#import "PFMulticastDelegate.h" +#import "PFObjectControlling.h" + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFCurrentUserController; +@class PFFieldOperation; +@class PFJSONCacheItem; +@class PFMultiCommand; +@class PFObjectEstimatedData; +@class PFObjectFileCodingLogic; +@class PFObjectState; +@class PFObjectSubclassingController; +@class PFOperationSet; +@class PFPinningObjectStore; +@class PFRESTCommand; +@class PFTaskQueue; + +///-------------------------------------- +#pragma mark - PFObjectPrivateSubclass +///-------------------------------------- + +@protocol PFObjectPrivateSubclass + +@required + +///-------------------------------------- +/// @name State +///-------------------------------------- + ++ (PFObjectState *)_newObjectStateWithParseClassName:(NSString *)className + objectId:(NSString *)objectId + isComplete:(BOOL)complete; + +@optional + +///-------------------------------------- +/// @name Before Save +///-------------------------------------- + +/*! + Called before an object is going to be saved. Called in a context of object lock. + Subclasses can override this method to do any custom updates before an object gets saved. + */ +- (void)_objectWillSave; + +@end + +///-------------------------------------- +#pragma mark - PFObject +///-------------------------------------- + +// Extension for property methods. +@interface PFObject () + +/*! + @returns Current object state. + */ +@property (nonatomic, copy) PFObjectState *_state; +@property (nonatomic, copy) NSMutableSet *_availableKeys; + +- (instancetype)initWithObjectState:(PFObjectState *)state; ++ (instancetype)objectWithClassName:(NSString *)className + objectId:(NSString *)objectid + completeData:(BOOL)completeData; ++ (instancetype)objectWithoutDataWithClassName:(NSString *)className localId:(NSString *)localId; + +- (PFTaskQueue *)taskQueue; + +- (PFObjectEstimatedData *)_estimatedData; + +#if PARSE_OSX_ONLY +// Not available publicly, but available for testing + +- (instancetype)refresh; +- (instancetype)refresh:(NSError **)error; +- (void)refreshInBackgroundWithBlock:(PFObjectResultBlock)block; +- (void)refreshInBackgroundWithTarget:(id)target selector:(SEL)selector; + +#endif + +///-------------------------------------- +/// @name Validation +///-------------------------------------- + +- (BFTask PF_GENERIC(PFVoid) *)_validateFetchAsync NS_REQUIRES_SUPER; +- (BFTask PF_GENERIC(PFVoid) *)_validateDeleteAsync NS_REQUIRES_SUPER; + +/*! + Validate the save eventually operation with the current state. + The result of this task is ignored. The error/cancellation/exception will prevent `saveEventually`. + + @returns Task that encapsulates the validation. + */ +- (BFTask PF_GENERIC(PFVoid) *)_validateSaveEventuallyAsync NS_REQUIRES_SUPER; + +///-------------------------------------- +/// @name Pin +///-------------------------------------- +- (BFTask *)_pinInBackgroundWithName:(NSString *)name includeChildren:(BOOL)includeChildren; ++ (BFTask *)_pinAllInBackground:(NSArray *)objects withName:(NSString *)name includeChildren:(BOOL)includeChildren; + ++ (PFPinningObjectStore *)pinningObjectStore; ++ (id)objectController; ++ (PFObjectFileCodingLogic *)objectFileCodingLogic; ++ (PFCurrentUserController *)currentUserController; + +///-------------------------------------- +#pragma mark - Subclassing +///-------------------------------------- + ++ (PFObjectSubclassingController *)subclassingController; + +@end + +@interface PFObject (Private) + +/*! + Returns the object that should be used to synchronize all internal data access. + */ +- (NSObject *)lock; + +/*! + Blocks until all outstanding operations have completed. + */ +- (void)waitUntilFinished; + +- (NSDictionary *)_collectFetchedObjects; + +///-------------------------------------- +#pragma mark - Static methods for Subclassing +///-------------------------------------- + +/*! + Unregisters a class registered using registerSubclass: + If we ever expose thsi method publicly, we must change the underlying implementation + to have stack behavior. Currently unregistering a custom class for a built-in will + leave the built-in unregistered as well. + @param subclass the subclass + */ ++ (void)unregisterSubclass:(Class)subclass; + +///-------------------------------------- +#pragma mark - Children helpers +///-------------------------------------- +- (BFTask *)_saveChildrenInBackgroundWithCurrentUser:(PFUser *)currentUser sessionToken:(NSString *)sessionToken; + +///-------------------------------------- +#pragma mark - Dirtiness helpers +///-------------------------------------- +- (BOOL)isDirty:(BOOL)considerChildren; +- (void)_setDirty:(BOOL)dirty; + +- (void)performOperation:(PFFieldOperation *)operation forKey:(NSString *)key; +- (void)setHasBeenFetched:(BOOL)fetched; +- (void)_setDeleted:(BOOL)deleted; + +- (BOOL)isDataAvailableForKey:(NSString *)key; + +- (BOOL)_hasChanges; +- (BOOL)_hasOutstandingOperations; +- (PFOperationSet *)unsavedChanges; + +///-------------------------------------- +#pragma mark - Validations +///-------------------------------------- +- (void)_checkSaveParametersWithCurrentUser:(PFUser *)currentUser; +/*! + Checks if Parse class name could be used to initialize a given instance of PFObject or it's subclass. + */ ++ (void)_assertValidInstanceClassName:(NSString *)className; + +///-------------------------------------- +#pragma mark - Serialization helpers +///-------------------------------------- +- (NSString *)getOrCreateLocalId; +- (void)resolveLocalId; + ++ (id)_objectFromDictionary:(NSDictionary *)dictionary + defaultClassName:(NSString *)defaultClassName + completeData:(BOOL)completeData; + ++ (id)_objectFromDictionary:(NSDictionary *)dictionary + defaultClassName:(NSString *)defaultClassName + selectedKeys:(NSArray *)selectedKeys; + ++ (id)_objectFromDictionary:(NSDictionary *)dictionary + defaultClassName:(NSString *)defaultClassName + completeData:(BOOL)completeData + decoder:(PFDecoder *)decoder; ++ (BFTask *)_migrateObjectInBackgroundFromFile:(NSString *)fileName toPin:(NSString *)pinName; ++ (BFTask *)_migrateObjectInBackgroundFromFile:(NSString *)fileName + toPin:(NSString *)pinName + usingMigrationBlock:(BFContinuationBlock)block; + +- (NSMutableDictionary *)_convertToDictionaryForSaving:(PFOperationSet *)changes + withObjectEncoder:(PFEncoder *)encoder; + +///-------------------------------------- +#pragma mark - REST operations +///-------------------------------------- +- (NSDictionary *)RESTDictionaryWithObjectEncoder:(PFEncoder *)objectEncoder + operationSetUUIDs:(NSArray **)operationSetUUIDs; +- (NSDictionary *)RESTDictionaryWithObjectEncoder:(PFEncoder *)objectEncoder + operationSetUUIDs:(NSArray **)operationSetUUIDs + state:(PFObjectState *)state + operationSetQueue:(NSArray *)operationSetQueue; + +- (void)mergeFromRESTDictionary:(NSDictionary *)object + withDecoder:(PFDecoder *)decoder; + +///-------------------------------------- +#pragma mark - Data helpers +///-------------------------------------- +- (void)checkForChangesToMutableContainers; +- (void)rebuildEstimatedData; + +///-------------------------------------- +#pragma mark - Command handlers +///-------------------------------------- +- (PFObject *)mergeFromObject:(PFObject *)other; + +- (void)_mergeAfterSaveWithResult:(NSDictionary *)result decoder:(PFDecoder *)decoder; +- (void)_mergeAfterFetchWithResult:(NSDictionary *)result decoder:(PFDecoder *)decoder completeData:(BOOL)completeData; +- (void)_mergeFromServerWithResult:(NSDictionary *)result decoder:(PFDecoder *)decoder completeData:(BOOL)completeData; + +- (BFTask *)handleSaveResultAsync:(NSDictionary *)result; + +///-------------------------------------- +#pragma mark - Asynchronous operations +///-------------------------------------- +- (void)startSave; +- (BFTask *)_enqueueSaveEventuallyWithChildren:(BOOL)saveChildren; +- (BFTask *)saveAsync:(BFTask *)toAwait; +- (BFTask *)fetchAsync:(BFTask *)toAwait; +- (BFTask *)deleteAsync:(BFTask *)toAwait; + +///-------------------------------------- +#pragma mark - Command constructors +///-------------------------------------- +- (PFRESTCommand *)_constructSaveCommandForChanges:(PFOperationSet *)changes + sessionToken:(NSString *)sessionToken + objectEncoder:(PFEncoder *)encoder; +- (PFRESTCommand *)_currentDeleteCommandWithSessionToken:(NSString *)sessionToken; + +///-------------------------------------- +#pragma mark - Misc helpers +///-------------------------------------- +- (NSString *)displayClassName; +- (NSString *)displayObjectId; + +- (void)registerSaveListener:(void (^)(id result, NSError *error))callback; +- (void)unregisterSaveListener:(void (^)(id result, NSError *error))callback; +- (PFACL *)ACLWithoutCopying; + +///-------------------------------------- +#pragma mark - Get and set +///-------------------------------------- + +- (void)_setObject:(id)object + forKey:(NSString *)key + onlyIfDifferent:(BOOL)onlyIfDifferent; + +///-------------------------------------- +#pragma mark - Subclass Helpers +///-------------------------------------- + +/*! + This method is called by -[PFObject init]; changes made to the object during this + method will not mark the object as dirty. PFObject uses this method to to apply the + default ACL; subclasses which override this method shold be sure to call the super + implementation if they want to honor the default ACL. + */ +- (void)setDefaultValues; + +/*! + This method allows subclasses to determine whether a default ACL should be applied + to new instances. + */ +- (BOOL)needsDefaultACL; + +@end + +@interface PFObject () { + PFMulticastDelegate *saveDelegate; +} + +@property (nonatomic, strong) PFMulticastDelegate *saveDelegate; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/PinningStore/PFPinningObjectStore.h b/BreakingBad/Pods/Parse/Parse/Internal/Object/PinningStore/PFPinningObjectStore.h new file mode 100644 index 0000000..66950c7 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/PinningStore/PFPinningObjectStore.h @@ -0,0 +1,84 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFDataProvider.h" + +NS_ASSUME_NONNULL_BEGIN + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFPin; + +@interface PFPinningObjectStore : NSObject + +@property (nonatomic, weak, readonly) id dataSource; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; ++ (instancetype)storeWithDataSource:(id)dataSource; + +///-------------------------------------- +/// @name Pin +///-------------------------------------- + +/*! + Gets pin with name equals to given name. + + @param name Pin Name. + + @returns `BFTask` with `PFPin` result if pinning succeeds. + */ +- (BFTask *)fetchPinAsyncWithName:(NSString *)name; + +/*! + Pins given objects to the pin. Creates new pin if the pin with such name is not found. + + @param objects Array of `PFObject`s to pin. + @param name Pin Name. + @param includeChildren Whether children of `objects` should be pinned as well. + + @returns `BFTask` with `@YES` result. + */ +- (BFTask *)pinObjectsAsync:(nullable NSArray *)objects + withPinName:(NSString *)name + includeChildren:(BOOL)includeChildren; + +///-------------------------------------- +/// @name Unpin +///-------------------------------------- + +/*! + Unpins given array of objects from the pin. + + @param objects Objects to unpin. + @param name Pin name. + + @returns `BFTask` with `@YES` result. + */ +- (BFTask *)unpinObjectsAsync:(nullable NSArray *)objects withPinName:(NSString *)name; + +/*! + Unpins all objects from the pin. + + @param name Pin name. + + @returns `BFTask` with `YES` result. + */ +- (BFTask *)unpinAllObjectsAsyncWithPinName:(NSString *)name; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/PinningStore/PFPinningObjectStore.m b/BreakingBad/Pods/Parse/Parse/Internal/Object/PinningStore/PFPinningObjectStore.m new file mode 100644 index 0000000..b731df1 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/PinningStore/PFPinningObjectStore.m @@ -0,0 +1,163 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFPinningObjectStore.h" + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFMacros.h" +#import "PFOfflineStore.h" +#import "PFPin.h" +#import "PFQueryPrivate.h" + +@interface PFPinningObjectStore () { + NSMapTable *_pinCacheTable; + dispatch_queue_t _pinCacheAccessQueue; + BFExecutor *_pinCacheAccessExecutor; +} + +@end + +@implementation PFPinningObjectStore + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithDataSource:(id)dataSource { + self = [super init]; + if (!self) return nil; + + _pinCacheTable = [NSMapTable strongToWeakObjectsMapTable]; + _pinCacheAccessQueue = dispatch_queue_create("com.parse.object.pin.cache", DISPATCH_QUEUE_SERIAL); + _pinCacheAccessExecutor = [BFExecutor executorWithDispatchQueue:_pinCacheAccessQueue]; + + _dataSource = dataSource; + + return self; +} + ++ (instancetype)storeWithDataSource:(id)dataSource { + return [[self alloc] initWithDataSource:dataSource]; +} + +///-------------------------------------- +#pragma mark - Pin +///-------------------------------------- + +- (BFTask *)fetchPinAsyncWithName:(NSString *)name { + @weakify(self); + return [BFTask taskFromExecutor:_pinCacheAccessExecutor withBlock:^id{ + BFTask *cachedTask = [_pinCacheTable objectForKey:name] ?: [BFTask taskWithResult:nil]; + // We need to call directly to OfflineStore since we don't want/need a user to query for ParsePins + cachedTask = [cachedTask continueWithBlock:^id(BFTask *task) { + @strongify(self); + PFQuery *query = [[PFPin query] whereKey:PFPinKeyName equalTo:name]; + PFOfflineStore *store = self.dataSource.offlineStore; + return [[store findAsyncForQueryState:query.state + user:nil + pin:nil] continueWithSuccessBlock:^id(BFTask *task) { + NSArray *result = task.result; + // TODO (hallucinogen): What do we do if there are more than 1 result? + PFPin *pin = (result.count != 0 ? result.firstObject : [PFPin pinWithName:name]); + return pin; + }]; + }]; + // Put the task back into the cache. + [_pinCacheTable setObject:cachedTask forKey:name]; + return cachedTask; + }]; +} + +- (BFTask *)pinObjectsAsync:(NSArray *)objects withPinName:(NSString *)name includeChildren:(BOOL)includeChildren { + if (objects.count == 0) { + return [BFTask taskWithResult:@YES]; + } + + @weakify(self); + return [[[self fetchPinAsyncWithName:name] continueWithSuccessBlock:^id(BFTask *task) { + @strongify(self); + PFPin *pin = task.result; + PFOfflineStore *store = self.dataSource.offlineStore; + //TODO (hallucinogen): some stuff @grantland mentioned can't be done maybe needs to be done here + //TODO (grantland): change to use relations. currently the related PO are only getting saved + //TODO (grantland): can't add and then remove + + // Hack to store collection in a pin + NSMutableArray *modified = pin.objects; + if (modified == nil) { + modified = [objects mutableCopy]; + } else { + for (PFObject *object in objects) { + if (![modified containsObject:object]) { + [modified addObject:object]; + } + } + } + pin.objects = modified; + + BFTask *saveTask = nil; + if (includeChildren) { + saveTask = [store saveObjectLocallyAsync:pin includeChildren:YES]; + } else { + saveTask = [store saveObjectLocallyAsync:pin withChildren:pin.objects]; + } + return saveTask; + }] continueWithSuccessResult:@YES]; +} + +///-------------------------------------- +#pragma mark - Unpin +///-------------------------------------- + +- (BFTask *)unpinObjectsAsync:(NSArray *)objects withPinName:(NSString *)name { + if (objects.count == 0) { + return [BFTask taskWithResult:@YES]; + } + + @weakify(self); + return [[[self fetchPinAsyncWithName:name] continueWithSuccessBlock:^id(BFTask *task) { + @strongify(self); + PFPin *pin = task.result; + NSMutableArray *modified = pin.objects; + if (!modified) { + // Nothing to unpin + return task; + } + + //TODO (hallucinogen): some stuff @grantland mentioned can't be done maybe needs to be done here + //TODO (grantland): change to use relations. currently the related PO are only getting saved + //TODO (grantland): can't add and then remove + + PFOfflineStore *store = self.dataSource.offlineStore; + + [modified removeObjectsInArray:objects]; + if (modified.count == 0) { + return [store unpinObjectAsync:pin]; + } + pin.objects = modified; + + return [store saveObjectLocallyAsync:pin includeChildren:YES]; + }] continueWithSuccessResult:@YES]; +} + +- (BFTask *)unpinAllObjectsAsyncWithPinName:(NSString *)name { + @weakify(self); + return [[self fetchPinAsyncWithName:name] continueWithSuccessBlock:^id(BFTask *task) { + @strongify(self); + PFPin *pin = task.result; + return [[self.dataSource.offlineStore unpinObjectAsync:pin] continueWithSuccessResult:@YES]; + }]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/State/PFMutableObjectState.h b/BreakingBad/Pods/Parse/Parse/Internal/Object/State/PFMutableObjectState.h new file mode 100644 index 0000000..70cae09 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/State/PFMutableObjectState.h @@ -0,0 +1,45 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFObjectState.h" + +@class PFOperationSet; + +@interface PFMutableObjectState : PFObjectState + +@property (nonatomic, copy, readwrite) NSString *parseClassName; +@property (nonatomic, copy, readwrite) NSString *objectId; + +@property (nonatomic, strong, readwrite) NSDate *createdAt; +@property (nonatomic, strong, readwrite) NSDate *updatedAt; + +@property (nonatomic, copy, readwrite) NSDictionary *serverData; + +@property (nonatomic, assign, readwrite, getter=isComplete) BOOL complete; +@property (nonatomic, assign, readwrite, getter=isDeleted) BOOL deleted; + +///-------------------------------------- +/// @name Accessors +///-------------------------------------- + +- (void)setServerDataObject:(id)object forKey:(NSString *)key; +- (void)removeServerDataObjectForKey:(NSString *)key; +- (void)removeServerDataObjectsForKeys:(NSArray *)keys; + +- (void)setCreatedAtFromString:(NSString *)string; +- (void)setUpdatedAtFromString:(NSString *)string; + +///-------------------------------------- +/// @name Apply +///-------------------------------------- + +- (void)applyState:(PFObjectState *)state; +- (void)applyOperationSet:(PFOperationSet *)operationSet; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/State/PFMutableObjectState.m b/BreakingBad/Pods/Parse/Parse/Internal/Object/State/PFMutableObjectState.m new file mode 100644 index 0000000..edfd652 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/State/PFMutableObjectState.m @@ -0,0 +1,61 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFMutableObjectState.h" + +#import "PFDateFormatter.h" +#import "PFObjectState_Private.h" + +@implementation PFMutableObjectState + +@dynamic parseClassName; +@dynamic objectId; +@dynamic createdAt; +@dynamic updatedAt; +@dynamic serverData; +@dynamic complete; +@dynamic deleted; + +///-------------------------------------- +#pragma mark - PFMutableObjectState +///-------------------------------------- + +#pragma mark Accessors + +- (void)setServerDataObject:(id)object forKey:(NSString *)key { + [super setServerDataObject:object forKey:key]; +} + +- (void)removeServerDataObjectForKey:(NSString *)key { + [super removeServerDataObjectForKey:key]; +} + +- (void)removeServerDataObjectsForKeys:(NSArray *)keys { + [super removeServerDataObjectsForKeys:keys]; +} + +- (void)setCreatedAtFromString:(NSString *)string { + [super setCreatedAtFromString:string]; +} + +- (void)setUpdatedAtFromString:(NSString *)string { + [super setUpdatedAtFromString:string]; +} + +#pragma mark Apply + +- (void)applyState:(PFObjectState *)state { + [super applyState:state]; +} + +- (void)applyOperationSet:(PFOperationSet *)operationSet { + [super applyOperationSet:operationSet]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/State/PFObjectState.h b/BreakingBad/Pods/Parse/Parse/Internal/Object/State/PFObjectState.h new file mode 100644 index 0000000..a7d9744 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/State/PFObjectState.h @@ -0,0 +1,60 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@class PFEncoder; + +@interface PFObjectState : NSObject + +@property (nonatomic, copy, readonly) NSString *parseClassName; +@property (nonatomic, copy, readonly) NSString *objectId; + +@property (nonatomic, strong, readonly) NSDate *createdAt; +@property (nonatomic, strong, readonly) NSDate *updatedAt; + +@property (nonatomic, copy, readonly) NSDictionary *serverData; + +@property (nonatomic, assign, readonly, getter=isComplete) BOOL complete; +@property (nonatomic, assign, readonly, getter=isDeleted) BOOL deleted; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_DESIGNATED_INITIALIZER; + +- (instancetype)initWithState:(PFObjectState *)state NS_REQUIRES_SUPER; +- (instancetype)initWithParseClassName:(NSString *)parseClassName; +- (instancetype)initWithParseClassName:(NSString *)parseClassName + objectId:(NSString *)objectId + isComplete:(BOOL)complete; + ++ (instancetype)stateWithState:(PFObjectState *)state NS_REQUIRES_SUPER; ++ (instancetype)stateWithParseClassName:(NSString *)parseClassName; ++ (instancetype)stateWithParseClassName:(NSString *)parseClassName + objectId:(NSString *)objectId + isComplete:(BOOL)complete; + +///-------------------------------------- +/// @name Coding +///-------------------------------------- + +/*! + Encodes all fields in `serverData`, `objectId`, `createdAt` and `updatedAt` into objects suitable for JSON/Persistence. + + @note `parseClassName` isn't automatically added to the dictionary. + + @param objectEncoder Encoder to use to encode custom objects. + + @returns `NSDictionary` instance representing object state. + */ +- (NSDictionary *)dictionaryRepresentationWithObjectEncoder:(PFEncoder *)objectEncoder NS_REQUIRES_SUPER; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/State/PFObjectState.m b/BreakingBad/Pods/Parse/Parse/Internal/Object/State/PFObjectState.m new file mode 100644 index 0000000..fec73f4 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/State/PFObjectState.m @@ -0,0 +1,179 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFObjectState.h" +#import "PFObjectState_Private.h" + +#import "PFDateFormatter.h" +#import "PFEncoder.h" +#import "PFMutableObjectState.h" +#import "PFObjectConstants.h" +#import "PFObjectUtilities.h" + +@implementation PFObjectState + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _serverData = [NSMutableDictionary dictionary]; + + return [super init]; +} + +- (instancetype)initWithState:(PFObjectState *)state { + self = [self init]; + if (!self) return nil; + + _parseClassName = [state.parseClassName copy]; + _objectId = [state.objectId copy]; + + _updatedAt = state.updatedAt; + _createdAt = state.createdAt; + + _serverData = [state.serverData mutableCopy] ?: [NSMutableDictionary dictionary]; + + _complete = state.complete; + _deleted = state.deleted; + + return self; +} + +- (instancetype)initWithParseClassName:(NSString *)parseClassName { + return [self initWithParseClassName:parseClassName objectId:nil isComplete:NO]; +} + +- (instancetype)initWithParseClassName:(NSString *)parseClassName + objectId:(NSString *)objectId + isComplete:(BOOL)complete { + self = [self init]; + if (!self) return nil; + + _parseClassName = [parseClassName copy]; + _objectId = [objectId copy]; + _complete = complete; + + return self; +} + ++ (instancetype)stateWithState:(PFObjectState *)state { + return [[self alloc] initWithState:state]; +} + ++ (instancetype)stateWithParseClassName:(NSString *)parseClassName { + return [[self alloc] initWithParseClassName:parseClassName]; +} + ++ (instancetype)stateWithParseClassName:(NSString *)parseClassName + objectId:(NSString *)objectId + isComplete:(BOOL)complete { + return [[self alloc] initWithParseClassName:parseClassName + objectId:objectId + isComplete:complete]; +} + +///-------------------------------------- +#pragma mark - Accessors +///--------------------------------------s + +- (void)setServerData:(NSDictionary *)serverData { + if (self.serverData != serverData) { + _serverData = [serverData mutableCopy]; + } +} + +///-------------------------------------- +#pragma mark - Coding +///-------------------------------------- + +- (NSDictionary *)dictionaryRepresentationWithObjectEncoder:(PFEncoder *)objectEncoder { + NSMutableDictionary *result = [NSMutableDictionary dictionary]; + if (self.objectId) { + result[PFObjectObjectIdRESTKey] = self.objectId; + } + if (self.createdAt) { + result[PFObjectCreatedAtRESTKey] = [[PFDateFormatter sharedFormatter] preciseStringFromDate:self.createdAt]; + } + if (self.updatedAt) { + result[PFObjectUpdatedAtRESTKey] = [[PFDateFormatter sharedFormatter] preciseStringFromDate:self.updatedAt]; + } + [self.serverData enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + result[key] = [objectEncoder encodeObject:obj]; + }]; + return [result copy]; +} + +///-------------------------------------- +#pragma mark - PFObjectState (Mutable) +///-------------------------------------- + +#pragma mark Accessors + +- (void)setServerDataObject:(id)object forKey:(NSString *)key { + _serverData[key] = object; +} + +- (void)removeServerDataObjectForKey:(NSString *)key { + [_serverData removeObjectForKey:key]; +} + +- (void)removeServerDataObjectsForKeys:(NSArray *)keys { + [_serverData removeObjectsForKeys:keys]; +} + +- (void)setCreatedAtFromString:(NSString *)string { + self.createdAt = [[PFDateFormatter sharedFormatter] dateFromString:string]; +} + +- (void)setUpdatedAtFromString:(NSString *)string { + self.updatedAt = [[PFDateFormatter sharedFormatter] dateFromString:string]; +} + +#pragma mark Apply + +- (void)applyState:(PFObjectState *)state { + if (state.objectId) { + self.objectId = state.objectId; + } + if (state.createdAt) { + self.createdAt = state.createdAt; + } + if (state.updatedAt) { + self.updatedAt = state.updatedAt; + } + [_serverData addEntriesFromDictionary:state.serverData]; + + self.complete |= state.complete; +} + +- (void)applyOperationSet:(PFOperationSet *)operationSet { + [PFObjectUtilities applyOperationSet:operationSet toDictionary:_serverData]; +} + +///-------------------------------------- +#pragma mark - NSCopying +///-------------------------------------- + +- (id)copyWithZone:(NSZone *)zone { + return [[PFObjectState allocWithZone:zone] initWithState:self]; +} + +///-------------------------------------- +#pragma mark - NSMutableCopying +///-------------------------------------- + +- (id)mutableCopyWithZone:(NSZone *)zone { + return [[PFMutableObjectState allocWithZone:zone] initWithState:self]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/State/PFObjectState_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/Object/State/PFObjectState_Private.h new file mode 100644 index 0000000..d5f8d63 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/State/PFObjectState_Private.h @@ -0,0 +1,57 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFObjectState.h" + +@class PFOperationSet; + +@interface PFObjectState () { +@protected + NSString *_parseClassName; + NSString *_objectId; + NSDate *_createdAt; + NSDate *_updatedAt; + NSMutableDictionary *_serverData; + + BOOL _complete; + BOOL _deleted; +} + +@property (nonatomic, copy, readwrite) NSString *parseClassName; +@property (nonatomic, copy, readwrite) NSString *objectId; +@property (nonatomic, strong, readwrite) NSDate *createdAt; +@property (nonatomic, strong, readwrite) NSDate *updatedAt; +@property (nonatomic, copy, readwrite) NSMutableDictionary *serverData; + +@property (nonatomic, assign, readwrite, getter=isComplete) BOOL complete; +@property (nonatomic, assign, readwrite, getter=isDeleted) BOOL deleted; + +@end + +@interface PFObjectState (Mutable) + +///-------------------------------------- +/// @name Accessors +///-------------------------------------- + +- (void)setServerDataObject:(id)object forKey:(NSString *)key; +- (void)removeServerDataObjectForKey:(NSString *)key; +- (void)removeServerDataObjectsForKeys:(NSArray *)keys; + +- (void)setCreatedAtFromString:(NSString *)string; +- (void)setUpdatedAtFromString:(NSString *)string; + +///-------------------------------------- +/// @name Apply +///-------------------------------------- + +- (void)applyState:(PFObjectState *)state NS_REQUIRES_SUPER; +- (void)applyOperationSet:(PFOperationSet *)operationSet NS_REQUIRES_SUPER; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h b/BreakingBad/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h new file mode 100644 index 0000000..3db23d7 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@class PFPropertyInfo; + +@interface PFObjectSubclassInfo : NSObject + +@property (atomic, strong) Class subclass; + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithSubclass:(Class)kls NS_DESIGNATED_INITIALIZER; ++ (instancetype)subclassInfoWithSubclass:(Class)kls; + +- (PFPropertyInfo *)propertyInfoForSelector:(SEL)cmd isSetter:(BOOL *)isSetter; +- (NSMethodSignature *)forwardingMethodSignatureForSelector:(SEL)cmd; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m b/BreakingBad/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m new file mode 100644 index 0000000..8005b1a --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m @@ -0,0 +1,203 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFObjectSubclassInfo.h" + +#import + +#import "PFAssert.h" +#import "PFLogging.h" +#import "PFMacros.h" +#import "PFPropertyInfo_Private.h" + +///-------------------------------------- +#pragma mark - Helper +///-------------------------------------- + +static BOOL startsWith(const char *string, const char *prefix) { + // Keep iterating in lockstep. If we run out of prefix letters first, + // this is a valid prefix. + for (; *string && *prefix && *prefix == *string; ++string, ++prefix) + ; + return !*prefix; +} + +// This method helps us get our bearings regardless of whether we were passed +// setFoo: or foo. We'll always exit this method by setting outPair to +// [accessor, mutator] and returns the property they correspond to. If the +// property cannot be found, returns NULL and outPair is undefined. +// An objc_property_t is an opaque struct pointer containing a SEL name and char * +// type information which follows a DSL explained in the Objective-C Runtime Reference. +static objc_property_t getAccessorMutatorPair(Class klass, SEL sel, SEL outPair[2]) { + const char *selName = sel_getName(sel); + ptrdiff_t selNameByteLen = strlen(selName) + 1; + char temp[selNameByteLen + 4]; + + if (startsWith(selName, "set")) { + outPair[1] = sel; + memcpy(temp, selName + 3, selNameByteLen - 3); + temp[0] -= 'A' - 'a'; + + temp[selNameByteLen - 5] = 0; // drop ':' + outPair[0] = sel_registerName(temp); + } else { + outPair[0] = sel; + sprintf(temp, "set%s:", selName); + if (selName[0] >= 'a' && selName[0] <= 'z') { + temp[3] += 'A' - 'a'; + } + outPair[1] = sel_registerName(temp); + } + + const char *propName = sel_getName(outPair[0]); + objc_property_t property = class_getProperty(klass, propName); + if (!property) { + // The user could have broken convention and declared an upper case property. + memcpy(temp, propName, strlen(propName) + 1); + temp[0] += 'A' - 'a'; + outPair[0] = sel_registerName(temp); + property = class_getProperty(klass, temp); + } + return property; +} + +@implementation PFObjectSubclassInfo { + dispatch_queue_t _dataAccessQueue; + NSMutableDictionary *_knownProperties; + NSMutableDictionary *_knownMethodSignatures; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithSubclass:(Class)kls { + self = [super init]; + if (!self) return nil; + + _dataAccessQueue = dispatch_queue_create("com.parse.object.subclassing.data.access", DISPATCH_QUEUE_SERIAL); + _subclass = kls; + + _knownProperties = [NSMutableDictionary dictionary]; + _knownMethodSignatures = [NSMutableDictionary dictionary]; + + return self; +} + ++ (instancetype)subclassInfoWithSubclass:(Class)kls { + return [[self alloc] initWithSubclass:kls]; +} + +///-------------------------------------- +#pragma mark - Public +///-------------------------------------- + +- (PFPropertyInfo *)propertyInfoForSelector:(SEL)cmd isSetter:(BOOL *)isSetter { + __block PFPropertyInfo *result = nil; + dispatch_sync(_dataAccessQueue, ^{ + result = [self _rawPropertyInfoForSelector:cmd]; + }); + + if (isSetter) { + *isSetter = (cmd == result.setterSelector); + } + + return result; +} + +- (NSMethodSignature *)forwardingMethodSignatureForSelector:(SEL)cmd { + __block NSMethodSignature *result = nil; + NSString *selectorString = NSStringFromSelector(cmd); + + // NSMethodSignature can be fairly heavyweight, so let's agressively cache this here. + dispatch_sync(_dataAccessQueue, ^{ + result = _knownMethodSignatures[selectorString]; + if (result) { + return; + } + + PFPropertyInfo *propertyInfo = [self _rawPropertyInfoForSelector:cmd]; + if (!propertyInfo) { + return; + } + + BOOL isSetter = (cmd == propertyInfo.setterSelector); + NSString *typeEncoding = propertyInfo.typeEncoding; + + // Property type encoding includes the class name as well. + // This is fine, except for the fact that NSMethodSignature hates that. + NSUInteger startLocation = [typeEncoding rangeOfString:@"\"" options:0].location; + NSUInteger endLocation = [typeEncoding rangeOfString:@"\"" + options:NSBackwardsSearch | NSAnchoredSearch].location; + + if (startLocation != NSNotFound && endLocation != NSNotFound) { + typeEncoding = [typeEncoding substringToIndex:startLocation]; + } + + NSString *objcTypes = ([NSString stringWithFormat:(isSetter ? @"v@:%@" : @"%@@:"), typeEncoding]); + result = [NSMethodSignature signatureWithObjCTypes:[objcTypes UTF8String]]; + + _knownMethodSignatures[selectorString] = result; + }); + + return result; +} + +///-------------------------------------- +#pragma mark - Private +///-------------------------------------- + +- (PFPropertyInfo *)_rawPropertyInfoForSelector:(SEL)cmd { + PFPropertyInfo *result = nil; + NSString *selectorString = NSStringFromSelector(cmd); + result = _knownProperties[selectorString]; + if (result) { + return result; + } + + SEL propertySelectors[2]; + objc_property_t property = getAccessorMutatorPair(self.subclass, cmd, propertySelectors); + if (!property) { + return nil; + } + + // Check if we've registered this property with a different name. + NSString *propertyName = @(property_getName(property)); + result = _knownProperties[propertyName]; + if (result) { + // Re-register it with the name we just searched for for faster future lookup. + _knownProperties[selectorString] = result; + return result; + } + + const char *attributes = property_getAttributes(property); + if (strstr(attributes, "T@\"PFRelation\",") == attributes && !strstr(attributes, ",R")) { + PFLogWarning(PFLoggingTagCommon, + @"PFRelation properties are always readonly, but %@.%@ was declared otherwise.", + self.subclass, selectorString); + } + + result = [PFPropertyInfo propertyInfoWithClass:self.subclass name:propertyName]; + + _knownProperties[result.name] = result; + if (result.getterSelector) { + _knownProperties[NSStringFromSelector(result.getterSelector)] = result; + } + if (result.setterSelector) { + _knownProperties[NSStringFromSelector(result.setterSelector)] = result; + } + + return result; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h b/BreakingBad/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h new file mode 100644 index 0000000..ef7977b --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@class PFObject; +@protocol PFSubclassing; + +@interface PFObjectSubclassingController : NSObject + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +//TODO: (nlutsenko, richardross) Make it not terrible aka don't have singletons. ++ (instancetype)defaultController; ++ (void)clearDefaultController; + +///-------------------------------------- +/// @name Registration +///-------------------------------------- + +- (Class)subclassForParseClassName:(NSString *)parseClassName; +- (void)registerSubclass:(Class)kls; +- (void)unregisterSubclass:(Class)kls; + +///-------------------------------------- +/// @name Forwarding +///-------------------------------------- + +- (NSMethodSignature *)forwardingMethodSignatureForSelector:(SEL)cmd ofClass:(Class)kls; +- (BOOL)forwardObjectInvocation:(NSInvocation *)invocation withObject:(PFObject *)object; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m b/BreakingBad/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m new file mode 100644 index 0000000..878a816 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m @@ -0,0 +1,317 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFObjectSubclassingController.h" + +#import + +#import "PFAssert.h" +#import "PFMacros.h" +#import "PFObject.h" +#import "PFObjectSubclassInfo.h" +#import "PFPropertyInfo_Private.h" +#import "PFPropertyInfo_Runtime.h" +#import "PFSubclassing.h" + +// CFNumber does not use number type 0, we take advantage of that here. +#define kCFNumberTypeUnknown 0 + +static CFNumberType PFNumberTypeForObjCType(const char *encodedType) { +// To save anyone in the future from some major headaches, sanity check here. +#if kCFNumberTypeMax > UINT8_MAX +#error kCFNumberTypeMax has been changed! This solution will no longer work. +#endif + + // Organizing the table this way makes it nicely fit into two cache lines. This makes lookups nearly free, even more + // so if repeated. + static uint8_t types[128] = { + // Core types. + ['c'] = kCFNumberCharType, + ['i'] = kCFNumberIntType, + ['s'] = kCFNumberShortType, + ['l'] = kCFNumberLongType, + ['q'] = kCFNumberLongLongType, + + // CFNumber (and NSNumber, actually) does not store unsigned types. + // This may cause some strange issues when dealing with values near the max for that type. + // We should investigate this if it becomes a problem. + ['C'] = kCFNumberCharType, + ['I'] = kCFNumberIntType, + ['S'] = kCFNumberShortType, + ['L'] = kCFNumberLongType, + ['Q'] = kCFNumberLongLongType, + + // Floating point + ['f'] = kCFNumberFloatType, + ['d'] = kCFNumberDoubleType, + + // C99 & CXX boolean. We are keeping this here for decoding, as you can safely use CFNumberGetBytes on a + // CFBoolean, and extract it into a char. + ['B'] = kCFNumberCharType, + }; + + return (CFNumberType)types[encodedType[0]]; +} + +static NSNumber *PFNumberCreateSafe(const char *typeEncoding, const void *bytes) { + // NOTE: This is required because NSJSONSerialization treats all NSNumbers with the 'char' type as numbers, not + // booleans. As such, we must treat any and all boolean type encodings as explicit booleans, otherwise we will + // send '1' and '0' to the api server rather than 'true' and 'false'. + // + // TODO (richardross): When we drop support for 10.9/iOS 7, remove the 'c' encoding and only use the new 'B' + // encoding. + if (typeEncoding[0] == 'B' || typeEncoding[0] == 'c') { + return [NSNumber numberWithBool:*(BOOL *)bytes]; + } + + CFNumberType numberType = PFNumberTypeForObjCType(typeEncoding); + PFConsistencyAssert(numberType != kCFNumberTypeUnknown, @"Unsupported type encoding %s!", typeEncoding); + return (__bridge_transfer NSNumber *)CFNumberCreate(NULL, numberType, bytes); +} + +@implementation PFObjectSubclassingController { + dispatch_queue_t _registeredSubclassesAccessQueue; + NSMutableDictionary *_registeredSubclasses; + NSMutableDictionary *_unregisteredSubclasses; +} + +static PFObjectSubclassingController *defaultController_; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _registeredSubclassesAccessQueue = dispatch_queue_create("com.parse.object.subclassing", DISPATCH_QUEUE_SERIAL); + _registeredSubclasses = [NSMutableDictionary dictionary]; + _unregisteredSubclasses = [NSMutableDictionary dictionary]; + + return self; +} + ++ (instancetype)defaultController { + if (!defaultController_) { + defaultController_ = [[PFObjectSubclassingController alloc] init]; + } + return defaultController_; +} + ++ (void)clearDefaultController { + defaultController_ = nil; +} + +///-------------------------------------- +#pragma mark - Public +///-------------------------------------- + +- (Class)subclassForParseClassName:(NSString *)parseClassName { + __block Class result = nil; + pf_sync_with_throw(_registeredSubclassesAccessQueue, ^{ + result = [_registeredSubclasses[parseClassName] subclass]; + }); + return result; +} + +- (void)registerSubclass:(Class)kls { + pf_sync_with_throw(_registeredSubclassesAccessQueue, ^{ + [self _rawRegisterSubclass:kls]; + }); +} + +- (void)unregisterSubclass:(Class)class { + pf_sync_with_throw(_registeredSubclassesAccessQueue, ^{ + NSString *parseClassName = [class parseClassName]; + Class registeredClass = [_registeredSubclasses[parseClassName] subclass]; + + // Make it a no-op if the class itself is not registered or + // if there is another class registered under the same name. + if (registeredClass == nil || + ![registeredClass isEqual:class]) { + return; + } + + [_registeredSubclasses removeObjectForKey:parseClassName]; + }); +} + +- (BOOL)forwardObjectInvocation:(NSInvocation *)invocation withObject:(PFObject *)object { + PFObjectSubclassInfo *subclassInfo = [self _subclassInfoForClass:[object class]]; + + BOOL isSetter = NO; + PFPropertyInfo *propertyInfo = [subclassInfo propertyInfoForSelector:invocation.selector isSetter:&isSetter]; + if (!propertyInfo) { + return NO; + } + + if (isSetter) { + [self _forwardSetterInvocation:invocation forProperty:propertyInfo withObject:object]; + } else { + [self _forwardGetterInvocation:invocation forProperty:propertyInfo withObject:object]; + } + return YES; +} + +- (NSMethodSignature *)forwardingMethodSignatureForSelector:(SEL)cmd ofClass:(Class)kls { + PFObjectSubclassInfo *subclassInfo = [self _subclassInfoForClass:kls]; + return [subclassInfo forwardingMethodSignatureForSelector:cmd]; +} + +///-------------------------------------- +#pragma mark - Private +///-------------------------------------- + +- (void)_forwardGetterInvocation:(NSInvocation *)invocation + forProperty:(PFPropertyInfo *)propertyInfo + withObject:(PFObject *)object { + PFConsistencyAssert(invocation.methodSignature.numberOfArguments == 2, @"Getter should take no arguments!"); + PFConsistencyAssert(invocation.methodSignature.methodReturnType[0] != 'v', @"A getter cannot return void!"); + + const char *methodReturnType = [invocation.methodSignature methodReturnType]; + void *returnValueBytes = alloca([invocation.methodSignature methodReturnLength]); + + if (propertyInfo.ivar) { + object_getIvarValue_safe(object, propertyInfo.ivar, returnValueBytes, propertyInfo.associationType); + } else { + __autoreleasing id dictionaryValue = nil; + if ([propertyInfo.typeEncoding isEqualToString:@"@\"PFRelation\""]) { + dictionaryValue = [object relationForKey:propertyInfo.name]; + } else { + dictionaryValue = object[propertyInfo.name]; + + // TODO: (richardross) Investigate why we were orignally copying the result of -objectForKey, + // as this doens't seem right. + if (propertyInfo.associationType == PFPropertyInfoAssociationTypeCopy) { + dictionaryValue = [dictionaryValue copy]; + } + } + + if (dictionaryValue == nil || [dictionaryValue isKindOfClass:[NSNull class]]) { + memset(returnValueBytes, 0, invocation.methodSignature.methodReturnLength); + } else if (methodReturnType[0] == '@') { + memcpy(returnValueBytes, (void *) &dictionaryValue, sizeof(id)); + } else if ([dictionaryValue isKindOfClass:[NSNumber class]]) { + CFNumberGetValue((__bridge CFNumberRef) dictionaryValue, + PFNumberTypeForObjCType(methodReturnType), + returnValueBytes); + } else { + // TODO:(richardross)Support C-style structs that automatically convert to JSON via NSValue? + PFConsistencyAssert(false, @"Unsupported type encoding %s!", methodReturnType); + } + } + + [invocation setReturnValue:returnValueBytes]; +} + +- (void)_forwardSetterInvocation:(NSInvocation *)invocation + forProperty:(PFPropertyInfo *)propertyInfo + withObject:(PFObject *)object { + PFConsistencyAssert(invocation.methodSignature.numberOfArguments == 3, @"Setter should only take 1 argument!"); + + PFObject *sourceObject = object; + const char *argumentType = [invocation.methodSignature getArgumentTypeAtIndex:2]; + + NSUInteger argumentValueSize = 0; + NSGetSizeAndAlignment(argumentType, &argumentValueSize, NULL); + + void *argumentValueBytes = alloca(argumentValueSize); + [invocation getArgument:argumentValueBytes atIndex:2]; + + if (propertyInfo.ivar) { + object_setIvarValue_safe(sourceObject, propertyInfo.ivar, argumentValueBytes, propertyInfo.associationType); + } else { + id dictionaryValue = nil; + + if (argumentType[0] == '@') { + dictionaryValue = *(__unsafe_unretained id *)argumentValueBytes; + + if (propertyInfo.associationType == PFPropertyInfoAssociationTypeCopy) { + dictionaryValue = [dictionaryValue copy]; + } + } else { + dictionaryValue = PFNumberCreateSafe(argumentType, argumentValueBytes); + } + + if (dictionaryValue == nil) { + [sourceObject removeObjectForKey:propertyInfo.name]; + } else { + sourceObject[propertyInfo.name] = dictionaryValue; + } + } +} + +- (PFObjectSubclassInfo *)_subclassInfoForClass:(Class)kls { + __block PFObjectSubclassInfo *result = nil; + pf_sync_with_throw(_registeredSubclassesAccessQueue, ^{ + if (class_respondsToSelector(object_getClass(kls), @selector(parseClassName))) { + result = _registeredSubclasses[[kls parseClassName]]; + } + + // TODO: (nlutsenko, richardross) Don't let unregistered subclasses have dynamic property resolution. + if (!result) { + result = [PFObjectSubclassInfo subclassInfoWithSubclass:kls]; + _unregisteredSubclasses[NSStringFromClass(kls)] = result; + } + }); + return result; +} + +// Reverse compatibility note: many people may have built PFObject subclasses before +// we officially supported them. Our implementation can do cool stuff, but requires +// the parseClassName class method. +- (void)_rawRegisterSubclass:(Class)kls { + PFConsistencyAssert([kls conformsToProtocol:@protocol(PFSubclassing)], + @"Can only call +registerSubclass on subclasses conforming to PFSubclassing."); + + NSString *parseClassName = [kls parseClassName]; + + // Bug detection: don't allow subclasses of subclasses (i.e. custom user classes) + // to change the value of +parseClassName + if ([kls superclass] != [PFObject class]) { + // We compare Method definitions against the PFObject version witout invoking it + // because that Method could throw on an intermediary class which is + // not meant for direct use. + Method baseImpl = class_getClassMethod([PFObject class], @selector(parseClassName)); + Method superImpl = class_getClassMethod([kls superclass], @selector(parseClassName)); + + PFConsistencyAssert(superImpl == baseImpl || + [parseClassName isEqualToString:[[kls superclass] parseClassName]], + @"Subclasses of subclasses may not have separate +parseClassName " + "definitions. %@ should inherit +parseClassName from %@.", + kls, [kls superclass]); + } + + Class current = [_registeredSubclasses[parseClassName] subclass]; + if (current && current != kls) { + // We've already registered a more specific subclass (i.e. we're calling + // registerSubclass:PFUser after MYUser + if ([current isSubclassOfClass:kls]) { + return; + } + + PFConsistencyAssert([kls isSubclassOfClass:current], + @"Tried to register both %@ and %@ as the native PFObject subclass " + "of %@. Cannot determine the right class to use because neither " + "inherits from the other.", current, kls, parseClassName); + } + + // Move the subclass info from unregisteredSubclasses dictionary to registered ones, or create if it doesn't exist. + NSString *className = NSStringFromClass(kls); + PFObjectSubclassInfo *subclassInfo = _unregisteredSubclasses[className]; + if (subclassInfo) { + [_unregisteredSubclasses removeObjectForKey:className]; + } else { + subclassInfo = [PFObjectSubclassInfo subclassInfoWithSubclass:kls]; + } + _registeredSubclasses[[kls parseClassName]] = subclassInfo; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/Utilities/PFObjectUtilities.h b/BreakingBad/Pods/Parse/Parse/Internal/Object/Utilities/PFObjectUtilities.h new file mode 100644 index 0000000..a94952d --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/Utilities/PFObjectUtilities.h @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class PFFieldOperation; +@class PFOperationSet; + +@interface PFObjectUtilities : NSObject + +///-------------------------------------- +/// @name Operations +///-------------------------------------- + ++ (id)newValueByApplyingFieldOperation:(PFFieldOperation *)operation + toDictionary:(NSMutableDictionary *)dictionary + forKey:(NSString *)key; ++ (void)applyOperationSet:(PFOperationSet *)operationSet toDictionary:(NSMutableDictionary *)dictionary; + +///-------------------------------------- +/// @name Equality +///-------------------------------------- + ++ (BOOL)isObject:(nullable id)objectA equalToObject:(nullable id)objectB; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Object/Utilities/PFObjectUtilities.m b/BreakingBad/Pods/Parse/Parse/Internal/Object/Utilities/PFObjectUtilities.m new file mode 100644 index 0000000..9b5f1e1 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Object/Utilities/PFObjectUtilities.m @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFObjectUtilities.h" + +#import "PFFieldOperation.h" +#import "PFOperationSet.h" + +@implementation PFObjectUtilities + +///-------------------------------------- +#pragma mark - Operations +///-------------------------------------- + ++ (id)newValueByApplyingFieldOperation:(PFFieldOperation *)operation + toDictionary:(NSMutableDictionary *)dictionary + forKey:(NSString *)key { + id oldValue = dictionary[key]; + id newValue = [operation applyToValue:oldValue forKey:key]; + if (newValue) { + dictionary[key] = newValue; + } else { + [dictionary removeObjectForKey:key]; + } + return newValue; +} + ++ (void)applyOperationSet:(PFOperationSet *)operationSet toDictionary:(NSMutableDictionary *)dictionary { + [operationSet enumerateKeysAndObjectsUsingBlock:^(NSString *key, PFFieldOperation *obj, BOOL *stop) { + [self newValueByApplyingFieldOperation:obj toDictionary:dictionary forKey:key]; + }]; +} + +///-------------------------------------- +#pragma mark - Equality +///-------------------------------------- + ++ (BOOL)isObject:(id)objectA equalToObject:(id)objectB { + return (objectA == objectB || (objectA != nil && [objectA isEqual:objectB])); +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFAlertView.h b/BreakingBad/Pods/Parse/Parse/Internal/PFAlertView.h new file mode 100644 index 0000000..bddaf30 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFAlertView.h @@ -0,0 +1,23 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import +#import + +typedef void(^PFAlertViewCompletion)(NSUInteger selectedOtherButtonIndex); + +@interface PFAlertView : NSObject + ++ (void)showAlertWithTitle:(NSString *)title + message:(NSString *)message + cancelButtonTitle:(NSString *)cancelButtonTitle + otherButtonTitles:(NSArray *)otherButtonTitles + completion:(PFAlertViewCompletion)completion NS_EXTENSION_UNAVAILABLE_IOS(""); + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFAlertView.m b/BreakingBad/Pods/Parse/Parse/Internal/PFAlertView.m new file mode 100644 index 0000000..e17fa6d --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFAlertView.m @@ -0,0 +1,109 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFAlertView.h" + +@interface PFAlertView () + +@property (nonatomic, copy) PFAlertViewCompletion completion; + +@end + +@implementation PFAlertView + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + ++ (void)showAlertWithTitle:(NSString *)title + message:(NSString *)message + cancelButtonTitle:(NSString *)cancelButtonTitle + otherButtonTitles:(NSArray *)otherButtonTitles + completion:(PFAlertViewCompletion)completion { + if ([UIAlertController class] != nil) { + __block UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title + message:message + preferredStyle:UIAlertControllerStyleAlert]; + + void (^alertActionHandler)(UIAlertAction *) = [^(UIAlertAction *action) { + if (completion) { + // This block intentionally retains alertController, and releases it afterwards. + if (action.style == UIAlertActionStyleCancel) { + completion(NSNotFound); + } else { + NSUInteger index = [alertController.actions indexOfObject:action]; + completion(index - 1); + } + } + alertController = nil; + } copy]; + + [alertController addAction:[UIAlertAction actionWithTitle:cancelButtonTitle + style:UIAlertActionStyleCancel + handler:alertActionHandler]]; + + for (NSString *buttonTitle in otherButtonTitles) { + [alertController addAction:[UIAlertAction actionWithTitle:buttonTitle + style:UIAlertActionStyleDefault + handler:alertActionHandler]]; + } + + UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow; + UIViewController *viewController = keyWindow.rootViewController; + while (viewController.presentedViewController) { + viewController = viewController.presentedViewController; + } + + [viewController presentViewController:alertController animated:YES completion:nil]; + } else { +#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0 + __block PFAlertView *pfAlertView = [[self alloc] init]; + UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title + message:message + delegate:nil + cancelButtonTitle:cancelButtonTitle + otherButtonTitles:nil]; + + for (NSString *buttonTitle in otherButtonTitles) { + [alertView addButtonWithTitle:buttonTitle]; + } + + pfAlertView.completion = ^(NSUInteger index) { + if (completion) { + completion(index); + } + + pfAlertView = nil; + }; + + alertView.delegate = pfAlertView; + [alertView show]; +#endif + } +} + +#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0 + +///-------------------------------------- +#pragma mark - UIAlertViewDelegate +///-------------------------------------- + +- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { + if (self.completion) { + if (buttonIndex == alertView.cancelButtonIndex) { + self.completion(NSNotFound); + } else { + self.completion(buttonIndex - 1); + } + } +} + +#endif + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFApplication.h b/BreakingBad/Pods/Parse/Parse/Internal/PFApplication.h new file mode 100644 index 0000000..7bf1c24 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFApplication.h @@ -0,0 +1,38 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#if TARGET_OS_IOS +#import +#elif TARGET_OS_WATCH +@class UIApplication; +#elif TARGET_OS_MAC +#import +@compatibility_alias UIApplication NSApplication; +#endif + +/*! + `PFApplication` class provides a centralized way to get the information about the current application, + or the environment it's running in. Please note, that all device specific things - should go to . + */ +@interface PFApplication : NSObject + +@property (nonatomic, strong, readonly) UIApplication *systemApplication; + +@property (nonatomic, assign, readonly, getter=isAppStoreEnvironment) BOOL appStoreEnvironment; +@property (nonatomic, assign, readonly, getter=isExtensionEnvironment) BOOL extensionEnvironment; + +@property (nonatomic, assign) NSInteger iconBadgeNumber; + ++ (instancetype)currentApplication; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFApplication.m b/BreakingBad/Pods/Parse/Parse/Internal/PFApplication.m new file mode 100644 index 0000000..a602fa1 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFApplication.m @@ -0,0 +1,93 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFApplication.h" + +#if TARGET_OS_IOS +#import +#elif !TARGET_OS_WATCH && TARGET_OS_MAC +#import +#endif + +@implementation PFApplication + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + ++ (instancetype)currentApplication { + static PFApplication *application; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + application = [[self alloc] init]; + }); + return application; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (BOOL)isAppStoreEnvironment { +#if TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR + return ([[NSBundle mainBundle] pathForResource:@"embedded" ofType:@"mobileprovision"] == nil); +#endif + + return NO; +} + +- (BOOL)isExtensionEnvironment { + return [[[NSBundle mainBundle] bundlePath] hasSuffix:@".appex"]; +} + +- (NSInteger)iconBadgeNumber { +#if TARGET_OS_WATCH + return 0; +#elif TARGET_OS_IOS + return self.systemApplication.applicationIconBadgeNumber; +#elif TARGET_OS_MAC + // Make sure not to use `NSApp` here, because it doesn't work sometimes, + // `NSApplication +sharedApplication` does though. + NSString *badgeLabel = [[NSApplication sharedApplication] dockTile].badgeLabel; + if (badgeLabel.length == 0) { + return 0; + } + + NSScanner *scanner = [NSScanner localizedScannerWithString:badgeLabel]; + + NSInteger number = 0; + [scanner scanInteger:&number]; + if (scanner.scanLocation != badgeLabel.length) { + return 0; + } + + return number; +#endif +} + +- (void)setIconBadgeNumber:(NSInteger)iconBadgeNumber { + if (self.iconBadgeNumber != iconBadgeNumber) { +#if TARGET_OS_IOS + self.systemApplication.applicationIconBadgeNumber = iconBadgeNumber; +#elif !TARGET_OS_WATCH + [[NSApplication sharedApplication] dockTile].badgeLabel = [@(iconBadgeNumber) stringValue]; +#endif + } +} + +- (UIApplication *)systemApplication { +#if TARGET_OS_WATCH + return nil; +#else + // Workaround to make `sharedApplication` still be called even if compiling for App Extensions or WatchKit apps. + return [UIApplication performSelector:@selector(sharedApplication)]; +#endif +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFAssert.h b/BreakingBad/Pods/Parse/Parse/Internal/PFAssert.h new file mode 100644 index 0000000..35277e0 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFAssert.h @@ -0,0 +1,94 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFMacros.h" + +#ifndef Parse_PFAssert_h +#define Parse_PFAssert_h + +/*! + Raises an `NSInvalidArgumentException` if the `condition` does not pass. + Use `description` to supply the way to fix the exception. + */ +#define PFParameterAssert(condition, description, ...) \ + do {\ + if (!(condition)) { \ + [NSException raise:NSInvalidArgumentException \ + format:description, ##__VA_ARGS__]; \ + } \ + } while(0) + +/*! + Raises an `NSRangeException` if the `condition` does not pass. + Use `description` to supply the way to fix the exception. + */ +#define PFRangeAssert(condition, description, ...) \ + do {\ + if (!(condition)) { \ + [NSException raise:NSRangeException \ + format:description, ##__VA_ARGS__]; \ + } \ +} while(0) + +/*! + Raises an `NSInternalInconsistencyException` if the `condition` does not pass. + Use `description` to supply the way to fix the exception. + */ +#define PFConsistencyAssert(condition, description, ...) \ + do { \ + if (!(condition)) { \ + [NSException raise:NSInternalInconsistencyException \ + format:description, ##__VA_ARGS__]; \ + } \ + } while(0) + +/*! + Always raises `NSInternalInconsistencyException` with details + about the method used and class that received the message + */ +#define PFNotDesignatedInitializer() \ +do { \ + PFConsistencyAssert(NO, \ + @"%@ is not the designated initializer for instances of %@.", \ + NSStringFromSelector(_cmd), \ + NSStringFromClass([self class])); \ + return nil; \ +} while (0) + +/*! + Raises `NSInternalInconsistencyException` if current thread is not main thread. + */ +#define PFAssertMainThread() \ +do { \ + PFConsistencyAssert([NSThread isMainThread], @"This method must be called on the main thread."); \ +} while (0) + +/*! + Raises `NSInternalInconsistencyException` if current thread is not the required one. + */ +#define PFAssertIsOnThread(thread) \ +do { \ + PFConsistencyAssert([NSThread currentThread] == thread, \ + @"This method must be called only on thread: %@.", thread); \ +} while (0) + +/*! + Raises `NSInternalInconsistencyException` if the current queue + is not the same as the queue provided. + Make sure you mark the queue first via `PFMarkDispatchQueue` + */ +#define PFAssertIsOnDispatchQueue(queue) \ +do { \ + void *mark = PFOSObjectPointer(queue); \ + PFConsistencyAssert(dispatch_get_specific(mark) == mark, \ + @"%s must be executed on %s", \ + __PRETTY_FUNCTION__, dispatch_queue_get_label(queue)); \ +} while (0) + +#endif diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFAsyncTaskQueue.h b/BreakingBad/Pods/Parse/Parse/Internal/PFAsyncTaskQueue.h new file mode 100644 index 0000000..45da5dc --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFAsyncTaskQueue.h @@ -0,0 +1,24 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface PFAsyncTaskQueue : NSObject + ++ (instancetype)taskQueue; + +- (BFTask *)enqueue:(BFContinuationBlock)block; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFAsyncTaskQueue.m b/BreakingBad/Pods/Parse/Parse/Internal/PFAsyncTaskQueue.m new file mode 100644 index 0000000..2dae167 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFAsyncTaskQueue.m @@ -0,0 +1,70 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFAsyncTaskQueue.h" + +#import + +#import "BFTask+Private.h" + +@interface PFAsyncTaskQueue() + +@property (nonatomic, strong) dispatch_queue_t syncQueue; +@property (nonatomic, strong) BFTask *tail; + +@end + +@implementation PFAsyncTaskQueue + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _tail = [BFTask taskWithResult:nil]; + _syncQueue = dispatch_queue_create("com.parse.asynctaskqueue.sync", DISPATCH_QUEUE_SERIAL); + + return self; +} + ++ (instancetype)taskQueue { + return [[self alloc] init]; +} + +///-------------------------------------- +#pragma mark - Enqueue +///-------------------------------------- + +- (BFTask *)enqueue:(BFContinuationBlock)block { + BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; + dispatch_async(_syncQueue, ^{ + _tail = [_tail continueAsyncWithBlock:block]; + [_tail continueAsyncWithBlock:^id(BFTask *task) { + if (task.faulted) { + NSError *error = task.error; + if (error) { + [source trySetError:error]; + } else { + [source trySetException:task.exception]; + } + } else if (task.cancelled) { + [source trySetCancelled]; + } else { + [source trySetResult:task.result]; + } + return task; + }]; + }); + return source.task; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFBase64Encoder.h b/BreakingBad/Pods/Parse/Parse/Internal/PFBase64Encoder.h new file mode 100644 index 0000000..4a7d44f --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFBase64Encoder.h @@ -0,0 +1,17 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@interface PFBase64Encoder : NSObject + ++ (NSData *)dataFromBase64String:(NSString *)string; ++ (NSString *)base64StringFromData:(NSData *)data; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFBase64Encoder.m b/BreakingBad/Pods/Parse/Parse/Internal/PFBase64Encoder.m new file mode 100644 index 0000000..07fb5d0 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFBase64Encoder.m @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFBase64Encoder.h" + +@implementation PFBase64Encoder + ++ (NSData *)dataFromBase64String:(NSString *)string { + if (!string) { + return [NSData data]; + } + return [[NSData alloc] initWithBase64EncodedString:string options:NSDataBase64DecodingIgnoreUnknownCharacters]; +} + ++ (NSString *)base64StringFromData:(NSData *)data { + if (!data) { + return [NSString string]; + } + return [data base64EncodedStringWithOptions:0]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFBaseState.h b/BreakingBad/Pods/Parse/Parse/Internal/PFBaseState.h new file mode 100644 index 0000000..535403c --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFBaseState.h @@ -0,0 +1,76 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +typedef NS_ENUM(uint8_t, PFPropertyInfoAssociationType) { + PFPropertyInfoAssociationTypeDefault, // Assign for c-types, strong for objc-types. + PFPropertyInfoAssociationTypeAssign, + PFPropertyInfoAssociationTypeStrong, + PFPropertyInfoAssociationTypeWeak, + PFPropertyInfoAssociationTypeCopy, + PFPropertyInfoAssociationTypeMutableCopy, +}; + +@interface PFPropertyAttributes : NSObject + +@property (nonatomic, assign, readonly) PFPropertyInfoAssociationType associationType; + +- (instancetype)initWithAssociationType:(PFPropertyInfoAssociationType)associationType NS_DESIGNATED_INITIALIZER; + ++ (instancetype)attributes; ++ (instancetype)attributesWithAssociationType:(PFPropertyInfoAssociationType)associationType; + +@end + +@protocol PFBaseStateSubclass + +/*! + This is the list of properties that should be used automatically for the methods implemented by PFBaseState. + + It should be a dictionary in the format of @{ @"<#property name#>": [PFPropertyAttributes attributes] } + This will be automatically cached by PFBaseState, no need for you to cache it yourself. + + @return a dictionary of property attributes + */ ++ (NSDictionary *)propertyAttributes; + +@end + +/*! + Shared base class for all state objects. + Implements -init, -description, -debugDescription, -hash, -isEqual:, -compareTo:, etc. for you. + */ +@interface PFBaseState : NSObject + +- (instancetype)initWithState:(PFBaseState *)otherState; ++ (instancetype)stateWithState:(PFBaseState *)otherState; + +- (NSComparisonResult)compare:(PFBaseState *)other; + +/*! + Returns a dictionary representation of this object. + + Essentially, it takes the values for the keys of this object, and stuffs them in the dictionary. + It will call -dictionaryRepresentation on any objects it contains, in order to handle base states + contained in this base state. + + If a value is `nil`, it will be replaced with [NSNull null], to ensure all keys exist in the dictionary. + + If you don't like this behavior, you can overwrite the method + -nilValueForProperty:(NSString *) property + to return either nil to skip the key, or a value to use in it's place. + + @return A dictionary representation of this object state. + */ +- (NSDictionary *)dictionaryRepresentation; + +- (id)debugQuickLookObject; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFBaseState.m b/BreakingBad/Pods/Parse/Parse/Internal/PFBaseState.m new file mode 100644 index 0000000..dc6af22 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFBaseState.m @@ -0,0 +1,267 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFBaseState.h" + +#import +#import + +#import "PFAssert.h" +#import "PFHash.h" +#import "PFMacros.h" +#import "PFPropertyInfo.h" + +///-------------------------------------- +#pragma mark - Helpers +///-------------------------------------- + +@implementation PFPropertyAttributes + +- (instancetype)init { + return [self initWithAssociationType:PFPropertyInfoAssociationTypeDefault]; +} + +- (instancetype)initWithAssociationType:(PFPropertyInfoAssociationType)associationType { + self = [super init]; + if (!self) return nil; + + _associationType = associationType; + + return self; +} + ++ (instancetype)attributes { + return [[self alloc] init]; +} + ++ (instancetype)attributesWithAssociationType:(PFPropertyInfoAssociationType)associationType { + return [[self alloc] initWithAssociationType:associationType]; +} + +@end + +@interface PFBaseState () { + BOOL _initializing; +} + +@end + +@implementation PFBaseState + +///-------------------------------------- +#pragma mark - Property Info +///-------------------------------------- + ++ (NSSet *)_propertyInfo { + static void *_propertyMapKey = &_propertyMapKey; + static dispatch_queue_t queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + queue = dispatch_queue_create("com.parse.basestate.propertyinfo", DISPATCH_QUEUE_SERIAL); + }); + + __block NSMutableSet *results = nil; + dispatch_sync(queue, ^{ + results = objc_getAssociatedObject(self, _propertyMapKey); + if (results) { + return; + } + + NSDictionary *attributesMap = [(id)self propertyAttributes]; + results = [[NSMutableSet alloc] initWithCapacity:attributesMap.count]; + + [attributesMap enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + [results addObject:[PFPropertyInfo propertyInfoWithClass:self + name:key + associationType:[obj associationType]]]; + }]; + + objc_setAssociatedObject(self, _propertyMapKey, results, OBJC_ASSOCIATION_RETAIN); + }); + + return results; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + // To prevent a recursive init function. + if (_initializing) { + return [super init]; + } + + _initializing = YES; + return [self initWithState:nil]; +} + +- (instancetype)initWithState:(id)otherState { + if (!_initializing) { + _initializing = YES; + + self = [self init]; + if (!self) return nil; + } + + NSSet *ourProperties = [[self class] _propertyInfo]; + NSSet *theirProperties = [[otherState class] _propertyInfo]; + + NSMutableSet *shared = [ourProperties mutableCopy]; + [shared intersectSet:theirProperties]; + + for (PFPropertyInfo *property in shared) { + [property takeValueFrom:otherState toObject:self]; + } + + return self; +} + ++ (instancetype)stateWithState:(PFBaseState *)otherState { + return [[self alloc] initWithState:otherState]; +} + +///-------------------------------------- +#pragma mark - Hashing +///-------------------------------------- + +- (NSUInteger)hash { + NSUInteger result = 0; + + for (PFPropertyInfo *property in [[self class] _propertyInfo]) { + result = PFIntegerPairHash(result, [[property getWrappedValueFrom:self] hash]); + } + + return result; +} + +///-------------------------------------- +#pragma mark - Comparison +///-------------------------------------- + +- (NSComparisonResult)compare:(PFBaseState *)other { + PFParameterAssert([other isKindOfClass:[PFBaseState class]], + @"Cannot compatre to an object that isn't a PFBaseState"); + + NSSet *ourProperties = [[self class] _propertyInfo]; + NSSet *theirProperties = [[other class] _propertyInfo]; + + NSMutableSet *shared = [ourProperties mutableCopy]; + [shared intersectSet:theirProperties]; + + for (PFPropertyInfo *info in shared) { + id ourValue = [info getWrappedValueFrom:self]; + id theirValue = [info getWrappedValueFrom:other]; + + if (![ourValue respondsToSelector:@selector(compare:)]) { + continue; + } + + NSComparisonResult result = [ourValue compare:theirValue]; + if (result != NSOrderedSame) { + return result; + } + } + + return NSOrderedSame; +} + +///-------------------------------------- +#pragma mark - Equality +///-------------------------------------- + +- (BOOL)isEqual:(id)other { + if (self == other) { + return YES; + } + + if (![other isKindOfClass:[PFBaseState class]]) { + return NO; + } + + NSSet *ourProperties = [[self class] _propertyInfo]; + NSSet *theirProperties = [[other class] _propertyInfo]; + + NSMutableSet *shared = [ourProperties mutableCopy]; + [shared intersectSet:theirProperties]; + + for (PFPropertyInfo *info in shared) { + id ourValue = [info getWrappedValueFrom:self]; + id theirValue = [info getWrappedValueFrom:other]; + + if (ourValue != theirValue && ![ourValue isEqual:theirValue]) { + return NO; + } + } + + return YES; +} + +///-------------------------------------- +#pragma mark - Description +///-------------------------------------- + +// This allows us to easily use the same implementation for description and debugDescription +- (NSString *)descriptionWithValueSelector:(SEL)toPerform { + NSMutableString *results = [NSMutableString stringWithFormat:@"<%@: %p", [self class], self]; + + for (PFPropertyInfo *property in [[self class] _propertyInfo]) { + id propertyValue = [property getWrappedValueFrom:self]; + NSString *propertyDescription = objc_msgSend_safe(NSString *)(propertyValue, toPerform); + + [results appendFormat:@", %@: %@", property.name, propertyDescription]; + } + + [results appendString:@">"]; + return results; +} + +- (NSString *)description { + return [self descriptionWithValueSelector:_cmd]; +} + +- (NSString *)debugDescription { + return [self descriptionWithValueSelector:_cmd]; +} + +///-------------------------------------- +#pragma mark - Dictionary/QuickLook representation +///-------------------------------------- + +- (id)nilValueForProperty:(NSString *)propertyName { + return [NSNull null]; +} + +// Implementation detail - this returns a mutable dictionary with mutable leaves. +- (NSDictionary *)dictionaryRepresentation { + NSSet *properties = [[self class] _propertyInfo]; + NSMutableDictionary *results = [[NSMutableDictionary alloc] initWithCapacity:properties.count]; + + for (PFPropertyInfo *info in properties) { + id value = [info getWrappedValueFrom:self]; + + if (value == nil) { + value = [self nilValueForProperty:info.name]; + + if (value == nil) { + continue; + } + } + + results[info.name] = value; + } + + return results; +} + +- (id)debugQuickLookObject { + return [[self dictionaryRepresentation] description]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFCategoryLoader.h b/BreakingBad/Pods/Parse/Parse/Internal/PFCategoryLoader.h new file mode 100644 index 0000000..9c298e2 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFCategoryLoader.h @@ -0,0 +1,16 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@interface PFCategoryLoader : NSObject + ++ (void)loadPrivateCategories; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFCategoryLoader.m b/BreakingBad/Pods/Parse/Parse/Internal/PFCategoryLoader.m new file mode 100644 index 0000000..1a38f40 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFCategoryLoader.m @@ -0,0 +1,20 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFCategoryLoader.h" + +#import "BFTask+Private.h" + +@implementation PFCategoryLoader + ++ (void)loadPrivateCategories { + forceLoadCategory_BFTask_Private(); +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFCommandCache.h b/BreakingBad/Pods/Parse/Parse/Internal/PFCommandCache.h new file mode 100644 index 0000000..4d780cf --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFCommandCache.h @@ -0,0 +1,52 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFEventuallyQueue.h" + +@class PFCommandCacheTestHelper; +@class PFObject; + +/*! + ParseCommandCache manages an on-disk cache of commands to be executed, and a thread with a standard run loop + that executes the commands. There should only ever be one instance of this class, because multiple instances + would be running separate threads trying to read and execute the same commands. + */ +@interface PFCommandCache : PFEventuallyQueue + +@property (nonatomic, copy, readonly) NSString *diskCachePath; +@property (nonatomic, assign, readonly) unsigned long long diskCacheSize; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +/*! + Creates the command cache object for all ParseObjects with default configuration. + This command cache is used to locally store save commands created by the [PFObject saveEventually]. + When a PFCommandCache is instantiated, it will begin running its run loop, + which will start by processing any commands already stored in the on-disk queue. + */ ++ (instancetype)newDefaultCommandCacheWithCommandRunner:(id)commandRunner + cacheFolderPath:(NSString *)cacheFolderPath; + +- (instancetype)initWithCommandRunner:(id)commandRunner + maxAttemptsCount:(NSUInteger)attemptsCount + retryInterval:(NSTimeInterval)retryInterval NS_UNAVAILABLE; + +- (instancetype)initWithCommandRunner:(id)commandRunner + maxAttemptsCount:(NSUInteger)attemptsCount + retryInterval:(NSTimeInterval)retryInterval + diskCachePath:(NSString *)diskCachePath + diskCacheSize:(unsigned long long)diskCacheSize NS_DESIGNATED_INITIALIZER; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFCommandCache.m b/BreakingBad/Pods/Parse/Parse/Internal/PFCommandCache.m new file mode 100644 index 0000000..6889964 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFCommandCache.m @@ -0,0 +1,330 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFCommandCache.h" + +#include +#include + +#import +#import + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFCommandResult.h" +#import "PFCoreManager.h" +#import "PFErrorUtilities.h" +#import "PFEventuallyQueue_Private.h" +#import "PFFileManager.h" +#import "PFLogging.h" +#import "PFMacros.h" +#import "PFMultiProcessFileLockController.h" +#import "PFObject.h" +#import "PFObjectLocalIdStore.h" +#import "PFObjectPrivate.h" +#import "PFRESTCommand.h" +#import "Parse_Private.h" + +static NSString *const _PFCommandCacheDiskCacheDirectoryName = @"Command Cache"; + +static const NSString *PFCommandCachePrefixString = @"Command"; +static unsigned long long const PFCommandCacheDefaultDiskCacheSize = 10 * 1024 * 1024; // 10 MB + +@interface PFCommandCache () { + unsigned int _fileCounter; +} + +@property (nonatomic, assign, readwrite, setter=_setDiskCacheSize:) unsigned long long diskCacheSize; + +@end + +@implementation PFCommandCache + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + ++ (instancetype)newDefaultCommandCacheWithCommandRunner:(id)commandRunner + cacheFolderPath:(NSString *)cacheFolderPath { + NSString *diskCachePath = [cacheFolderPath stringByAppendingPathComponent:_PFCommandCacheDiskCacheDirectoryName]; + diskCachePath = [diskCachePath stringByStandardizingPath]; + PFCommandCache *cache = [[PFCommandCache alloc] initWithCommandRunner:commandRunner + maxAttemptsCount:PFEventuallyQueueDefaultMaxAttemptsCount + retryInterval:PFEventuallyQueueDefaultTimeoutRetryInterval + diskCachePath:diskCachePath + diskCacheSize:PFCommandCacheDefaultDiskCacheSize]; + [cache start]; + return cache; +} + +- (instancetype)initWithCommandRunner:(id)commandRunner + maxAttemptsCount:(NSUInteger)attemptsCount + retryInterval:(NSTimeInterval)retryInterval { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithCommandRunner:(id)commandRunner + maxAttemptsCount:(NSUInteger)attemptsCount + retryInterval:(NSTimeInterval)retryInterval + diskCachePath:(NSString *)diskCachePath + diskCacheSize:(unsigned long long)diskCacheSize { + self = [super initWithCommandRunner:commandRunner maxAttemptsCount:attemptsCount retryInterval:retryInterval]; + if (!self) return nil; + + _diskCachePath = diskCachePath; + _diskCacheSize = diskCacheSize; + _fileCounter = 0; + + [self _createDiskCachePathIfNeeded]; + + return self; +} + +///-------------------------------------- +#pragma mark - Controlling Queue +///-------------------------------------- + +- (void)removeAllCommands { + [self pause]; + + [super removeAllCommands]; + + NSArray *commandIdentifiers = [self _pendingCommandIdentifiers]; + NSMutableArray *tasks = [NSMutableArray arrayWithCapacity:[commandIdentifiers count]]; + + for (NSString *identifier in commandIdentifiers) { + BFTask *task = [self _removeFileForCommandWithIdentifier:identifier]; + [tasks addObject:task]; + } + + [[BFTask taskForCompletionOfAllTasks:tasks] waitUntilFinished]; + + [self resume]; +} + +///-------------------------------------- +#pragma mark - PFEventuallyQueue +///-------------------------------------- + +- (void)_simulateReboot { + [super _simulateReboot]; + [self _createDiskCachePathIfNeeded]; +} + +///-------------------------------------- +#pragma mark - PFEventuallyQueueSubclass +///-------------------------------------- + +- (NSString *)_newIdentifierForCommand:(id)command { + // Start with current time - so we can sort identifiers and get the oldest one first. + return [NSString stringWithFormat:@"%@-%016qx-%08x-%@", + PFCommandCachePrefixString, + (unsigned long long)[NSDate timeIntervalSinceReferenceDate], + _fileCounter++, + [[NSUUID UUID] UUIDString]]; +} + +- (NSArray *)_pendingCommandIdentifiers { + NSArray *result = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:self.diskCachePath error:nil]; + // Only accept files that starts with "Command" since sometimes the directory is filled with garbage + // e.g.: https://phab.parse.com/file/info/PHID-FILE-qgbwk7sm7kcyaks6n4j7/ + result = [result filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF BEGINSWITH %@", PFCommandCachePrefixString]]; + + return [result sortedArrayUsingSelector:@selector(compare:)]; +} + +- (id)_commandWithIdentifier:(NSString *)identifier error:(NSError **)error { + [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:self.diskCachePath]; + + NSError *innerError = nil; + NSData *jsonData = [NSData dataWithContentsOfFile:[self _filePathForCommandWithIdentifier:identifier] + options:NSDataReadingUncached + error:&innerError]; + + [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:self.diskCachePath]; + + if (innerError || !jsonData) { + NSString *message = [NSString stringWithFormat:@"Failed to read command from cache. %@", + innerError ? [innerError localizedDescription] : @""]; + innerError = [PFErrorUtilities errorWithCode:kPFErrorInternalServer + message:message]; + if (error) { + *error = innerError; + } + return nil; + } + + id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData + options:0 + error:&innerError]; + if (innerError) { + NSString *message = [NSString stringWithFormat:@"Failed to deserialiaze command from cache. %@", + [innerError localizedDescription]]; + innerError = [PFErrorUtilities errorWithCode:kPFErrorInternalServer + message:message]; + } else { + if ([PFRESTCommand isValidDictionaryRepresentation:jsonObject]) { + return [PFRESTCommand commandFromDictionaryRepresentation:jsonObject]; + } + innerError = [PFErrorUtilities errorWithCode:kPFErrorInternalServer + message:@"Failed to construct eventually command from cache." + shouldLog:NO]; + } + if (innerError && error) { + *error = innerError; + } + + return nil; +} + +- (BFTask *)_enqueueCommandInBackground:(id)command + object:(PFObject *)object + identifier:(NSString *)identifier { + return [self _saveCommandToCacheInBackground:command object:object identifier:identifier]; +} + +- (BFTask *)_didFinishRunningCommand:(id)command + withIdentifier:(NSString *)identifier + resultTask:(BFTask *)resultTask { + // Get the new objectId and mark the new localId so it can be resolved. + if (command.localId) { + NSDictionary *dictionaryResult = nil; + if ([resultTask.result isKindOfClass:[NSDictionary class]]) { + dictionaryResult = resultTask.result; + } else if ([resultTask.result isKindOfClass:[PFCommandResult class]]) { + PFCommandResult *commandResult = resultTask.result; + dictionaryResult = commandResult.result; + } + + if (dictionaryResult != nil) { + NSString *objectId = dictionaryResult[@"objectId"]; + if (objectId) { + [[Parse _currentManager].coreManager.objectLocalIdStore setObjectId:objectId forLocalId:command.localId]; + } + } + } + + [[self _removeFileForCommandWithIdentifier:identifier] waitUntilFinished]; + return [super _didFinishRunningCommand:command withIdentifier:identifier resultTask:resultTask]; +} + +- (BFTask *)_waitForOperationSet:(PFOperationSet *)operationSet eventuallyPin:(PFEventuallyPin *)eventuallyPin { + // Do nothing. This is only relevant in PFPinningEventuallyQueue. Looks super hacky you said? Yes it is! + return [BFTask taskWithResult:nil]; +} + +///-------------------------------------- +#pragma mark - Disk Cache +///-------------------------------------- + +- (BFTask *)_cleanupDiskCacheWithRequiredFreeSize:(NSUInteger)requiredSize { + return [BFTask taskFromExecutor:[BFExecutor defaultExecutor] withBlock:^id{ + NSUInteger size = requiredSize; + + NSMutableDictionary *commandSizes = [NSMutableDictionary dictionary]; + + [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:self.diskCachePath]; + NSDirectoryEnumerator *enumerator = [[NSFileManager defaultManager] enumeratorAtPath:self.diskCachePath]; + + NSString *identifier = nil; + while ((identifier = [enumerator nextObject])) { + NSNumber *fileSize = [enumerator fileAttributes][NSFileSize]; + if (fileSize) { + commandSizes[identifier] = fileSize; + size += [fileSize unsignedIntegerValue]; + } + } + + [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:self.diskCachePath]; + + if (size > self.diskCacheSize) { + // Get identifiers and sort them to remove oldest commands first + NSArray *identifiers = [[commandSizes allKeys] sortedArrayUsingSelector:@selector(compare:)]; + for (NSString *identifier in identifiers) @autoreleasepool { + [self _removeFileForCommandWithIdentifier:identifier]; + size -= [commandSizes[identifier] unsignedIntegerValue]; + + if (size <= self.diskCacheSize) { + break; + } + [commandSizes removeObjectForKey:identifier]; + } + } + + return [BFTask taskWithResult:nil]; + }]; +} + +- (void)_setDiskCacheSize:(unsigned long long)diskCacheSize { + _diskCacheSize = diskCacheSize; +} + +///-------------------------------------- +#pragma mark - Files +///-------------------------------------- + +- (BFTask *)_saveCommandToCacheInBackground:(id)command + object:(PFObject *)object + identifier:(NSString *)identifier { + if (object != nil && object.objectId == nil) { + command.localId = [object getOrCreateLocalId]; + } + + @weakify(self); + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + @strongify(self); + + NSError *error = nil; + NSData *data = [NSJSONSerialization dataWithJSONObject:[command dictionaryRepresentation] + options:0 + error:&error]; + NSUInteger commandSize = [data length]; + if (commandSize > self.diskCacheSize) { + error = [PFErrorUtilities errorWithCode:kPFErrorInternalServer + message:@"Failed to run command, because it's too big."]; + } else if (commandSize == 0) { + error = [PFErrorUtilities errorWithCode:kPFErrorInternalServer + message:@"Failed to run command, because it's empty."]; + } + + if (error) { + return [BFTask taskWithError:error]; + } + + [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:self.diskCachePath]; + return [[[self _cleanupDiskCacheWithRequiredFreeSize:commandSize] continueWithBlock:^id(BFTask *task) { + NSString *filePath = [self _filePathForCommandWithIdentifier:identifier]; + return [PFFileManager writeDataAsync:data toFile:filePath]; + }] continueWithBlock:^id(BFTask *task) { + [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:self.diskCachePath]; + return task; + }]; + }]; +} + +- (BFTask *)_removeFileForCommandWithIdentifier:(NSString *)identifier { + NSString *filePath = [self _filePathForCommandWithIdentifier:identifier]; + return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:self.diskCachePath]; + return [PFFileManager removeItemAtPathAsync:filePath withFileLock:NO]; + }] continueWithBlock:^id(BFTask *task) { + [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:self.diskCachePath]; + return task; // Roll-forward the previous task. + }]; +} + +- (NSString *)_filePathForCommandWithIdentifier:(NSString *)identifier { + return [self.diskCachePath stringByAppendingPathComponent:identifier]; +} + +- (void)_createDiskCachePathIfNeeded { + [[PFFileManager createDirectoryIfNeededAsyncAtPath:_diskCachePath] waitForResult:nil withMainThreadWarning:NO]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFCommandCache_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/PFCommandCache_Private.h new file mode 100644 index 0000000..869ce66 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFCommandCache_Private.h @@ -0,0 +1,16 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFCommandCache.h" + +@interface PFCommandCache () + +- (void)_setDiskCacheSize:(unsigned long long)diskCacheSize; + +@end; diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFCommandResult.h b/BreakingBad/Pods/Parse/Parse/Internal/PFCommandResult.h new file mode 100644 index 0000000..a87d667 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFCommandResult.h @@ -0,0 +1,34 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface PFCommandResult : NSObject + +@property (nonatomic, strong, readonly) id result; +@property (nullable, nonatomic, copy, readonly) NSString *resultString; +@property (nullable, nonatomic, strong, readonly) NSHTTPURLResponse *httpResponse; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithResult:(NSDictionary *)result + resultString:(nullable NSString *)resultString + httpResponse:(nullable NSHTTPURLResponse *)response NS_DESIGNATED_INITIALIZER; ++ (instancetype)commandResultWithResult:(NSDictionary *)result + resultString:(nullable NSString *)resultString + httpResponse:(nullable NSHTTPURLResponse *)response; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFCommandResult.m b/BreakingBad/Pods/Parse/Parse/Internal/PFCommandResult.m new file mode 100644 index 0000000..e83f2c3 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFCommandResult.m @@ -0,0 +1,43 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFCommandResult.h" + +#import "PFAssert.h" + +@implementation PFCommandResult + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithResult:(NSDictionary *)result + resultString:(NSString *)resultString + httpResponse:(NSHTTPURLResponse *)response { + self = [super init]; + if (!self) return nil; + + _result = result; + _resultString = [resultString copy]; + _httpResponse = response; + + return self; +} + ++ (instancetype)commandResultWithResult:(NSDictionary *)result + resultString:(NSString *)resultString + httpResponse:(NSHTTPURLResponse *)response { + return [[self alloc] initWithResult:result resultString:resultString httpResponse:response]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFCoreDataProvider.h b/BreakingBad/Pods/Parse/Parse/Internal/PFCoreDataProvider.h new file mode 100644 index 0000000..021e974 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFCoreDataProvider.h @@ -0,0 +1,101 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#ifndef Parse_PFCoreDataProvider_h +#define Parse_PFCoreDataProvider_h + +NS_ASSUME_NONNULL_BEGIN + +///-------------------------------------- +/// @name Object +///-------------------------------------- + +@class PFObjectController; + +@protocol PFObjectControllerProvider + +@property (nonatomic, strong) PFObjectController *objectController; + +@end + +@class PFObjectBatchController; + +@protocol PFObjectBatchController + +@property (nonatomic, strong, readonly) PFObjectBatchController *objectBatchController; + +@end + +@class PFObjectFilePersistenceController; + +@protocol PFObjectFilePersistenceControllerProvider + +@property (nonatomic, strong, readonly) PFObjectFilePersistenceController *objectFilePersistenceController; + +@end + +@class PFObjectLocalIdStore; + +@protocol PFObjectLocalIdStoreProvider + +@property (nonatomic, strong) PFObjectLocalIdStore *objectLocalIdStore; + +@end + +///-------------------------------------- +/// @name User +///-------------------------------------- + +@class PFUserAuthenticationController; + +@protocol PFUserAuthenticationControllerProvider + +@property (nonatomic, strong) PFUserAuthenticationController *userAuthenticationController; + +@end + +@class PFCurrentUserController; + +@protocol PFCurrentUserControllerProvider + +@property (nonatomic, strong) PFCurrentUserController *currentUserController; + +@end + +@class PFUserController; + +@protocol PFUserControllerProvider + +@property (nonatomic, strong) PFUserController *userController; + +@end + +///-------------------------------------- +/// @name Installation +///-------------------------------------- + +@class PFCurrentInstallationController; + +@protocol PFCurrentInstallationControllerProvider + +@property (nonatomic, strong) PFCurrentInstallationController *currentInstallationController; + +@end + +@class PFInstallationController; + +@protocol PFInstallationControllerProvider + +@property (nonatomic, strong) PFInstallationController *installationController; + +@end + +#endif + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFCoreManager.h b/BreakingBad/Pods/Parse/Parse/Internal/PFCoreManager.h new file mode 100644 index 0000000..19e2fca --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFCoreManager.h @@ -0,0 +1,78 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "PFCoreDataProvider.h" +#import "PFDataProvider.h" + +@class PFInstallationIdentifierStore; + +NS_ASSUME_NONNULL_BEGIN + +@protocol PFCoreManagerDataSource + + +@property (nonatomic, strong, readonly) PFInstallationIdentifierStore *installationIdentifierStore; + +@end + +@class PFCloudCodeController; +@class PFConfigController; +@class PFFileController; +@class PFObjectFilePersistenceController; +@class PFObjectSubclassingController; +@class PFPinningObjectStore; +@class PFQueryController; +@class PFSessionController; + +@interface PFCoreManager : NSObject + + +@property (nonatomic, weak, readonly) id dataSource; + +@property (nonatomic, strong) PFQueryController *queryController; +@property (nonatomic, strong) PFFileController *fileController; +@property (nonatomic, strong) PFCloudCodeController *cloudCodeController; +@property (nonatomic, strong) PFConfigController *configController; +@property (nonatomic, strong) PFSessionController *sessionController; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; + ++ (instancetype)managerWithDataSource:(id)dataSource; + +///-------------------------------------- +/// @name ObjectFilePersistenceController +///-------------------------------------- + +- (void)unloadObjectFilePersistenceController; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFCoreManager.m b/BreakingBad/Pods/Parse/Parse/Internal/PFCoreManager.m new file mode 100644 index 0000000..c2b02dc --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFCoreManager.m @@ -0,0 +1,447 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFCoreManager.h" + +#import "PFAssert.h" +#import "PFCachedQueryController.h" +#import "PFCloudCodeController.h" +#import "PFConfigController.h" +#import "PFCurrentInstallationController.h" +#import "PFCurrentUserController.h" +#import "PFFileController.h" +#import "PFInstallationController.h" +#import "PFLocationManager.h" +#import "PFMacros.h" +#import "PFObjectBatchController.h" +#import "PFObjectController.h" +#import "PFObjectFilePersistenceController.h" +#import "PFObjectLocalIdStore.h" +#import "PFObjectSubclassingController.h" +#import "PFOfflineObjectController.h" +#import "PFOfflineQueryController.h" +#import "PFPinningObjectStore.h" +#import "PFSessionController.h" +#import "PFUserAuthenticationController.h" +#import "PFUserController.h" + +@interface PFCoreManager () { + dispatch_queue_t _locationManagerAccessQueue; + dispatch_queue_t _controllerAccessQueue; + dispatch_queue_t _objectLocalIdStoreAccessQueue; +} + +@end + +@implementation PFCoreManager + +@synthesize locationManager = _locationManager; + +@synthesize queryController = _queryController; +@synthesize fileController = _fileController; +@synthesize cloudCodeController = _cloudCodeController; +@synthesize configController = _configController; +@synthesize objectController = _objectController; +@synthesize objectBatchController = _objectBatchController; +@synthesize objectFilePersistenceController = _objectFilePersistenceController; +@synthesize objectLocalIdStore = _objectLocalIdStore; +@synthesize pinningObjectStore = _pinningObjectStore; +@synthesize userAuthenticationController = _userAuthenticationController; +@synthesize sessionController = _sessionController; +@synthesize currentInstallationController = _currentInstallationController; +@synthesize currentUserController = _currentUserController; +@synthesize userController = _userController; +@synthesize installationController = _installationController; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithDataSource:(id)dataSource { + self = [super init]; + if (!self) return nil; + + _dataSource = dataSource; + + _locationManagerAccessQueue = dispatch_queue_create("com.parse.core.locationManager", DISPATCH_QUEUE_SERIAL); + _controllerAccessQueue = dispatch_queue_create("com.parse.core.controller.accessQueue", DISPATCH_QUEUE_SERIAL); + _objectLocalIdStoreAccessQueue = dispatch_queue_create("com.parse.core.object.localIdStore", DISPATCH_QUEUE_SERIAL); + + return self; +} + ++ (instancetype)managerWithDataSource:(id)dataSource { + return [[self alloc] initWithDataSource:dataSource]; +} + +///-------------------------------------- +#pragma mark - LocationManager +///-------------------------------------- + +- (PFLocationManager *)locationManager { + __block PFLocationManager *manager; + dispatch_sync(_locationManagerAccessQueue, ^{ + if (!_locationManager) { + _locationManager = [[PFLocationManager alloc] init]; + } + manager = _locationManager; + }); + return manager; +} + +///-------------------------------------- +#pragma mark - QueryController +///-------------------------------------- + +- (PFQueryController *)queryController { + __block PFQueryController *queryController; + dispatch_sync(_controllerAccessQueue, ^{ + if (!_queryController) { + id dataSource = self.dataSource; + if (dataSource.offlineStoreLoaded) { + _queryController = [PFOfflineQueryController controllerWithCommonDataSource:dataSource + coreDataSource:self]; + } else { + _queryController = [PFCachedQueryController controllerWithCommonDataSource:dataSource]; + } + } + queryController = _queryController; + }); + return queryController; +} + +- (void)setQueryController:(PFQueryController *)queryController { + dispatch_sync(_controllerAccessQueue, ^{ + _queryController = queryController; + }); +} + +///-------------------------------------- +#pragma mark - FileController +///-------------------------------------- + +- (PFFileController *)fileController { + __block PFFileController *controller = nil; + dispatch_sync(_controllerAccessQueue, ^{ + if (!_fileController) { + _fileController = [PFFileController controllerWithDataSource:self.dataSource]; + } + controller = _fileController; + }); + return controller; +} + +- (void)setFileController:(PFFileController *)fileController { + dispatch_sync(_controllerAccessQueue, ^{ + _fileController = fileController; + }); +} + +///-------------------------------------- +#pragma mark - CloudCodeController +///-------------------------------------- + +- (PFCloudCodeController *)cloudCodeController { + __block PFCloudCodeController *controller = nil; + dispatch_sync(_controllerAccessQueue, ^{ + if (!_cloudCodeController) { + _cloudCodeController = [[PFCloudCodeController alloc] initWithCommandRunner:self.dataSource.commandRunner]; + } + controller = _cloudCodeController; + }); + return controller; +} + +- (void)setCloudCodeController:(PFCloudCodeController *)cloudCodeController { + dispatch_sync(_controllerAccessQueue, ^{ + _cloudCodeController = cloudCodeController; + }); +} + +///-------------------------------------- +#pragma mark - ConfigController +///-------------------------------------- + +- (PFConfigController *)configController { + __block PFConfigController *controller = nil; + dispatch_sync(_controllerAccessQueue, ^{ + if (!_configController) { + id dataSource = self.dataSource; + _configController = [[PFConfigController alloc] initWithFileManager:dataSource.fileManager + commandRunner:dataSource.commandRunner]; + } + controller = _configController; + }); + return controller; +} + +- (void)setConfigController:(PFConfigController *)configController { + dispatch_sync(_controllerAccessQueue, ^{ + _configController = configController; + }); +} + +///-------------------------------------- +#pragma mark - ObjectController +///-------------------------------------- + +- (PFObjectController *)objectController { + __block PFObjectController *controller = nil; + dispatch_sync(_controllerAccessQueue, ^{ + if (!_objectController) { + id dataSource = self.dataSource; + if (dataSource.offlineStoreLoaded) { + _objectController = [PFOfflineObjectController controllerWithDataSource:dataSource]; + } else { + _objectController = [PFObjectController controllerWithDataSource:dataSource]; + } + } + controller = _objectController; + }); + return controller; +} + +- (void)setObjectController:(PFObjectController *)controller { + dispatch_sync(_controllerAccessQueue, ^{ + _objectController = controller; + }); +} + +///-------------------------------------- +#pragma mark - ObjectBatchController +///-------------------------------------- + +- (PFObjectBatchController *)objectBatchController { + __block PFObjectBatchController *controller = nil; + dispatch_sync(_controllerAccessQueue, ^{ + if (!_objectBatchController) { + _objectBatchController = [PFObjectBatchController controllerWithDataSource:self.dataSource]; + } + controller = _objectBatchController; + }); + return controller; +} + +///-------------------------------------- +#pragma mark - ObjectFilePersistenceController +///-------------------------------------- + +- (PFObjectFilePersistenceController *)objectFilePersistenceController { + __block PFObjectFilePersistenceController *controller = nil; + dispatch_sync(_controllerAccessQueue, ^{ + if (!_objectFilePersistenceController) { + _objectFilePersistenceController = [PFObjectFilePersistenceController controllerWithDataSource:self.dataSource]; + } + controller = _objectFilePersistenceController; + }); + return controller; +} + +- (void)unloadObjectFilePersistenceController { + dispatch_sync(_controllerAccessQueue, ^{ + _objectFilePersistenceController = nil; + }); +} + +///-------------------------------------- +#pragma mark - Pinning Object Store +///-------------------------------------- + +- (PFPinningObjectStore *)pinningObjectStore { + __block PFPinningObjectStore *controller = nil; + dispatch_sync(_controllerAccessQueue, ^{ + if (!_pinningObjectStore) { + _pinningObjectStore = [PFPinningObjectStore storeWithDataSource:self.dataSource]; + } + controller = _pinningObjectStore; + }); + return controller; +} + +- (void)setPinningObjectStore:(PFPinningObjectStore *)pinningObjectStore { + dispatch_sync(_controllerAccessQueue, ^{ + _pinningObjectStore = pinningObjectStore; + }); +} + +///-------------------------------------- +#pragma mark - Object LocalId Store +///-------------------------------------- + +- (PFObjectLocalIdStore *)objectLocalIdStore { + __block PFObjectLocalIdStore *store = nil; + @weakify(self); + dispatch_sync(_objectLocalIdStoreAccessQueue, ^{ + @strongify(self); + if (!_objectLocalIdStore) { + _objectLocalIdStore = [[PFObjectLocalIdStore alloc] initWithDataSource:self.dataSource]; + } + store = _objectLocalIdStore; + }); + return store; +} + +- (void)setObjectLocalIdStore:(PFObjectLocalIdStore *)objectLocalIdStore { + dispatch_sync(_objectLocalIdStoreAccessQueue, ^{ + _objectLocalIdStore = objectLocalIdStore; + }); +} + +///-------------------------------------- +#pragma mark - UserAuthenticationController +///-------------------------------------- + +- (PFUserAuthenticationController *)userAuthenticationController { + __block PFUserAuthenticationController *controller = nil; + dispatch_sync(_controllerAccessQueue, ^{ + if (!_userAuthenticationController) { + _userAuthenticationController = [PFUserAuthenticationController controllerWithDataSource:self]; + } + controller = _userAuthenticationController; + }); + return controller; +} + +- (void)setUserAuthenticationController:(PFUserAuthenticationController *)userAuthenticationController { + dispatch_sync(_controllerAccessQueue, ^{ + _userAuthenticationController = userAuthenticationController; + }); +} + +///-------------------------------------- +#pragma mark - SessionController +///-------------------------------------- + +- (PFSessionController *)sessionController { + __block PFSessionController *controller = nil; + dispatch_sync(_controllerAccessQueue, ^{ + if (!_sessionController) { + _sessionController = [PFSessionController controllerWithDataSource:self.dataSource]; + } + controller = _sessionController; + }); + return controller; +} + +- (void)setSessionController:(PFSessionController *)sessionController { + dispatch_sync(_controllerAccessQueue, ^{ + _sessionController = sessionController; + }); +} + +#if !TARGET_OS_WATCH + +///-------------------------------------- +#pragma mark - Current Installation Controller +///-------------------------------------- + +- (PFCurrentInstallationController *)currentInstallationController { + __block PFCurrentInstallationController *controller = nil; + dispatch_sync(_controllerAccessQueue, ^{ + if (!_currentInstallationController) { + id dataSource = self.dataSource; + PFCurrentObjectStorageType storageType = (dataSource.offlineStore ? + PFCurrentObjectStorageTypeOfflineStore : + PFCurrentObjectStorageTypeFile); + _currentInstallationController = [PFCurrentInstallationController controllerWithStorageType:storageType + commonDataSource:dataSource + coreDataSource:self]; + } + controller = _currentInstallationController; + }); + return controller; +} + +- (void)setCurrentInstallationController:(PFCurrentInstallationController *)controller { + dispatch_sync(_controllerAccessQueue, ^{ + _currentInstallationController = controller; + }); +} + +#endif + +///-------------------------------------- +#pragma mark - Current User Controller +///-------------------------------------- + +- (PFCurrentUserController *)currentUserController { + __block PFCurrentUserController *controller = nil; + dispatch_sync(_controllerAccessQueue, ^{ + if (!_currentUserController) { + id dataSource = self.dataSource; + PFCurrentObjectStorageType storageType = (dataSource.offlineStore ? + PFCurrentObjectStorageTypeOfflineStore : + PFCurrentObjectStorageTypeFile); + _currentUserController = [PFCurrentUserController controllerWithStorageType:storageType + commonDataSource:dataSource + coreDataSource:self]; + } + controller = _currentUserController; + }); + return controller; +} + +- (void)setCurrentUserController:(PFCurrentUserController *)currentUserController { + dispatch_sync(_controllerAccessQueue, ^{ + _currentUserController = currentUserController; + }); +} + +#if !TARGET_OS_WATCH + +///-------------------------------------- +#pragma mark - Installation Controller +///-------------------------------------- + +- (PFInstallationController *)installationController { + __block PFInstallationController *controller = nil; + dispatch_sync(_controllerAccessQueue, ^{ + if (!_installationController) { + _installationController = [PFInstallationController controllerWithDataSource:self]; + } + controller = _installationController; + }); + return controller; +} + +- (void)setInstallationController:(PFInstallationController *)installationController { + dispatch_sync(_controllerAccessQueue, ^{ + _installationController = installationController; + }); +} + +#endif + +///-------------------------------------- +#pragma mark - User Controller +///-------------------------------------- + +- (PFUserController *)userController { + __block PFUserController *controller = nil; + dispatch_sync(_controllerAccessQueue, ^{ + if (!_userController) { + _userController = [PFUserController controllerWithCommonDataSource:self.dataSource + coreDataSource:self]; + } + controller = _userController; + }); + return controller; +} + +- (void)setUserController:(PFUserController *)userController { + dispatch_sync(_controllerAccessQueue, ^{ + _userController = userController; + }); +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFDataProvider.h b/BreakingBad/Pods/Parse/Parse/Internal/PFDataProvider.h new file mode 100644 index 0000000..3813c4d --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFDataProvider.h @@ -0,0 +1,90 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#ifndef Parse_PFDataProviders_h +#define Parse_PFDataProviders_h + +NS_ASSUME_NONNULL_BEGIN + +@protocol PFCommandRunning; + +@protocol PFCommandRunnerProvider + +@property (nonatomic, strong, readonly) id commandRunner; + +@end + +@class PFFileManager; + +@protocol PFFileManagerProvider + +@property (nonatomic, strong, readonly) PFFileManager *fileManager; + +@end + +@class PFOfflineStore; + +@protocol PFOfflineStoreProvider + +@property (nullable, nonatomic, strong) PFOfflineStore *offlineStore; +@property (nonatomic, assign, readonly, getter=isOfflineStoreLoaded) BOOL offlineStoreLoaded; + +@end + +@class PFEventuallyQueue; + +@protocol PFEventuallyQueueProvider + +@property (nonatomic, strong, readonly) PFEventuallyQueue *eventuallyQueue; + +@end + +@class PFKeychainStore; + +@protocol PFKeychainStoreProvider + +@property (nonatomic, strong, readonly) PFKeychainStore *keychainStore; + +@end + +@class PFKeyValueCache; + +@protocol PFKeyValueCacheProvider + +@property (nonatomic, strong, readonly) PFKeyValueCache *keyValueCache; + +@end + +@class PFLocationManager; + +@protocol PFLocationManagerProvider + +@property (nonatomic, strong, readonly) PFLocationManager *locationManager; + +@end + +@class PFPinningObjectStore; + +@protocol PFPinningObjectStoreProvider + +@property (nonatomic, strong) PFPinningObjectStore *pinningObjectStore; + +@end + +@class PFInstallationIdentifierStore; + +@protocol PFInstallationIdentifierStoreProvider + +@property (nonatomic, strong, readonly) PFInstallationIdentifierStore *installationIdentifierStore; + +@end + +#endif + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFDateFormatter.h b/BreakingBad/Pods/Parse/Parse/Internal/PFDateFormatter.h new file mode 100644 index 0000000..d258e76 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFDateFormatter.h @@ -0,0 +1,55 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface PFDateFormatter : NSObject + ++ (instancetype)sharedFormatter; + +///-------------------------------------- +/// @name String from Date +///-------------------------------------- + +/*! + Converts `NSDate` into `NSString` representation using the following format: yyyy-MM-dd'T'HH:mm:ss.SSS'Z' + + @param date `NSDate` to convert. + + @returns Formatted `NSString` representation. + */ +- (NSString *)preciseStringFromDate:(NSDate *)date; + +///-------------------------------------- +/// @name Date from String +///-------------------------------------- + +/*! + Converts `NSString` representation of a date into `NSDate` object. + + @discussion Following date formats are supported: + YYYY-MM-DD + YYYY-MM-DD HH:MM'Z' + YYYY-MM-DD HH:MM:SS'Z' + YYYY-MM-DD HH:MM:SS.SSS'Z' + YYYY-MM-DDTHH:MM'Z' + YYYY-MM-DDTHH:MM:SS'Z' + YYYY-MM-DDTHH:MM:SS.SSS'Z' + + @param string `NSString` representation to convert. + + @returns `NSDate` incapsulating the date. + */ +- (NSDate *)dateFromString:(NSString *)string; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFDateFormatter.m b/BreakingBad/Pods/Parse/Parse/Internal/PFDateFormatter.m new file mode 100644 index 0000000..c4a6ba2 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFDateFormatter.m @@ -0,0 +1,118 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFDateFormatter.h" + +#import + +@interface PFDateFormatter () { + dispatch_queue_t _synchronizationQueue; + + sqlite3 *_sqliteDatabase; + sqlite3_stmt *_stringToDateStatement; +} + +@property (nonatomic, strong, readonly) NSDateFormatter *preciseDateFormatter; + +@end + +@implementation PFDateFormatter + +@synthesize preciseDateFormatter = _preciseDateFormatter; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + ++ (instancetype)sharedFormatter { + static PFDateFormatter *formatter; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + formatter = [[self alloc] init]; + }); + return formatter; +} + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _synchronizationQueue = dispatch_queue_create("com.parse.dateFormatter", DISPATCH_QUEUE_SERIAL); + + //TODO: (nlutsenko) Check for error here. + sqlite3_open(":memory:", &_sqliteDatabase); + sqlite3_prepare_v2(_sqliteDatabase, + "SELECT strftime('%s', ?), strftime('%f', ?);", + -1, + &_stringToDateStatement, + NULL); + + return self; +} + +- (void)dealloc { + sqlite3_finalize(_stringToDateStatement); + sqlite3_close(_sqliteDatabase); +} + +///-------------------------------------- +#pragma mark - Date Formatters +///-------------------------------------- + +- (NSDateFormatter *)preciseDateFormatter { + if (!_preciseDateFormatter) { + _preciseDateFormatter = [[NSDateFormatter alloc] init]; + _preciseDateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; + _preciseDateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; + _preciseDateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; + } + return _preciseDateFormatter; +} + +///-------------------------------------- +#pragma mark - String from Date +///-------------------------------------- + +- (NSString *)preciseStringFromDate:(NSDate *)date { + __block NSString *string = nil; + dispatch_sync(_synchronizationQueue, ^{ + string = [self.preciseDateFormatter stringFromDate:date]; + }); + return string; +} + +///-------------------------------------- +#pragma mark - Date from String +///-------------------------------------- + +- (NSDate *)dateFromString:(NSString *)string { + __block sqlite3_int64 interval = 0; + __block double seconds = 0.0; + dispatch_sync(_synchronizationQueue, ^{ + const char *utf8String = [string UTF8String]; + + sqlite3_bind_text(_stringToDateStatement, 1, utf8String, -1, SQLITE_STATIC); + sqlite3_bind_text(_stringToDateStatement, 2, utf8String, -1, SQLITE_STATIC); + + if (sqlite3_step(_stringToDateStatement) == SQLITE_ROW) { + interval = sqlite3_column_int64(_stringToDateStatement, 0); + seconds = sqlite3_column_double(_stringToDateStatement, 1); + } + + sqlite3_reset(_stringToDateStatement); + sqlite3_clear_bindings(_stringToDateStatement); + }); + // Extract the fraction component of the seconds + double sintegral = 0.0; + double sfraction = modf(seconds, &sintegral); + + return [NSDate dateWithTimeIntervalSince1970:(double)interval + sfraction]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFDecoder.h b/BreakingBad/Pods/Parse/Parse/Internal/PFDecoder.h new file mode 100644 index 0000000..b0e5074 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFDecoder.h @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface PFDecoder : NSObject + +/*! + Globally available shared instance of PFDecoder. + */ ++ (PFDecoder *)objectDecoder; + +/*! + Takes a complex object that was deserialized and converts encoded + dictionaries into the proper Parse types. This is the inverse of + encodeObject:allowUnsaved:allowObjects:seenObjects:. + */ +- (nullable id)decodeObject:(nullable id)object; + +@end + +/*! + Extends the normal JSON to PFObject decoding to also deal with placeholders for new objects + that have been saved offline. + */ +@interface PFOfflineDecoder : PFDecoder + ++ (instancetype)decoderWithOfflineObjects:(nullable NSDictionary *)offlineObjects; + +@end + +/*! + A subclass of PFDecoder which can keep PFObject that has been fetched instead of creating a new instance. + */ +@interface PFKnownParseObjectDecoder : PFDecoder + ++ (instancetype)decoderWithFetchedObjects:(nullable NSDictionary *)fetchedObjects; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFDecoder.m b/BreakingBad/Pods/Parse/Parse/Internal/PFDecoder.m new file mode 100644 index 0000000..9cd045a --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFDecoder.m @@ -0,0 +1,194 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFDecoder.h" + +#import "PFBase64Encoder.h" +#import "PFDateFormatter.h" +#import "PFFieldOperation.h" +#import "PFFieldOperationDecoder.h" +#import "PFFile_Private.h" +#import "PFGeoPointPrivate.h" +#import "PFInternalUtils.h" +#import "PFMacros.h" +#import "PFObjectPrivate.h" +#import "PFRelationPrivate.h" + +///-------------------------------------- +#pragma mark - PFDecoder +///-------------------------------------- + +@implementation PFDecoder + +#pragma mark Init + ++ (PFDecoder *)objectDecoder { + static PFDecoder *decoder; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + decoder = [[PFDecoder alloc] init]; + }); + return decoder; +} + +#pragma mark Decode + +- (id)decodeDictionary:(NSDictionary *)dictionary { + NSString *op = dictionary[@"__op"]; + if (op) { + return [[PFFieldOperationDecoder defaultDecoder] decode:dictionary withDecoder:self]; + } + + NSString *type = dictionary[@"__type"]; + if (type) { + if ([type isEqualToString:@"Date"]) { + return [[PFDateFormatter sharedFormatter] dateFromString:dictionary[@"iso"]]; + + } else if ([type isEqualToString:@"Bytes"]) { + return [PFBase64Encoder dataFromBase64String:dictionary[@"base64"]]; + + } else if ([type isEqualToString:@"GeoPoint"]) { + return [PFGeoPoint geoPointWithDictionary:dictionary]; + + } else if ([type isEqualToString:@"Relation"]) { + return [PFRelation relationFromDictionary:dictionary withDecoder:self]; + + } else if ([type isEqualToString:@"File"]) { + return [PFFile fileWithName:dictionary[@"name"] + url:dictionary[@"url"]]; + + } else if ([type isEqualToString:@"Pointer"]) { + NSString *objectId = dictionary[@"objectId"]; + NSString *localId = dictionary[@"localId"]; + NSString *className = dictionary[@"className"]; + if (localId) { + // This is a PFObject deserialized off the local disk, which has a localId + // that will need to be resolved before the object can be sent over the network. + // Its localId should be known to PFObjectLocalIdStore. + return [self _decodePointerForClassName:className localId:localId]; + } else { + return [self _decodePointerForClassName:className objectId:objectId]; + } + + } else if ([type isEqualToString:@"Object"]) { + NSString *className = dictionary[@"className"]; + + NSMutableDictionary *data = [dictionary mutableCopy]; + [data removeObjectForKey:@"__type"]; + [data removeObjectForKey:@"className"]; + NSDictionary *result = [self decodeDictionary:data]; + + return [PFObject _objectFromDictionary:result + defaultClassName:className + completeData:YES + decoder:self]; + + } else { + // We don't know how to decode this, so just leave it as a dictionary. + return dictionary; + } + } + + NSMutableDictionary *newDictionary = [NSMutableDictionary dictionaryWithCapacity:[dictionary count]]; + [dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + newDictionary[key] = [self decodeObject:obj]; + }]; + return newDictionary; +} + +- (id)_decodePointerForClassName:(NSString *)className objectId:(NSString *)objectId { + return [PFObject objectWithoutDataWithClassName:className objectId:objectId]; +} + +- (id)_decodePointerForClassName:(NSString *)className localId:(NSString *)localId { + return [PFObject objectWithoutDataWithClassName:className localId:localId]; +} + +- (id)decodeArray:(NSArray *)array { + NSMutableArray *newArray = [NSMutableArray arrayWithCapacity:array.count]; + for (id value in array) { + [newArray addObject:[self decodeObject:value]]; + } + return newArray; +} + +- (id)decodeObject:(id)object { + if ([object isKindOfClass:[NSDictionary class]]) { + return [self decodeDictionary:object]; + } else if ([object isKindOfClass:[NSArray class]]) { + return [self decodeArray:object]; + } + return object; +} + +@end + +///-------------------------------------- +#pragma mark - PFOfflineDecoder +///-------------------------------------- + +@interface PFOfflineDecoder () + +/*! + A map of UUID to Task that will be finished once the given PFObject is loaded. + The Tasks should all be finished before decode is called. + */ +@property (nonatomic, copy) NSDictionary *offlineObjects; + +@end + +@implementation PFOfflineDecoder + ++ (instancetype)decoderWithOfflineObjects:(NSDictionary *)offlineObjects { + PFOfflineDecoder *decoder = [[self alloc] init]; + decoder.offlineObjects = offlineObjects; + return decoder; +} + +#pragma mark PFDecoder + +- (id)decodeObject:(id)object { + if ([object isKindOfClass:[NSDictionary class]] && + [((NSDictionary *)object)[@"__type"] isEqualToString:@"OfflineObject"]) { + NSString *uuid = ((NSDictionary *)object)[@"uuid"]; + return ((BFTask *)self.offlineObjects[uuid]).result; + } + + // Embedded objects can't show up here, because we never stored them that way offline. + return [super decodeObject:object]; +} + +@end + +///-------------------------------------- +#pragma mark - PFKnownParseObjectDecoder +///-------------------------------------- + +@interface PFKnownParseObjectDecoder () + +@property (nonatomic, copy) NSDictionary *fetchedObjects; + +@end + +@implementation PFKnownParseObjectDecoder + ++ (instancetype)decoderWithFetchedObjects:(NSDictionary *)fetchedObjects { + PFKnownParseObjectDecoder *decoder = [[self alloc] init]; + decoder.fetchedObjects = fetchedObjects; + return decoder; +} + +- (id)_decodePointerForClassName:(NSString *)className objectId:(NSString *)objectId { + if (_fetchedObjects != nil && _fetchedObjects[objectId]) { + return _fetchedObjects[objectId]; + } + return [super _decodePointerForClassName:className objectId:objectId]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFDevice.h b/BreakingBad/Pods/Parse/Parse/Internal/PFDevice.h new file mode 100644 index 0000000..6e62a3c --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFDevice.h @@ -0,0 +1,24 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@interface PFDevice : NSObject + +@property (nonatomic, copy, readonly) NSString *detailedModel; + +@property (nonatomic, copy, readonly) NSString *operatingSystemFullVersion; +@property (nonatomic, copy, readonly) NSString *operatingSystemVersion; +@property (nonatomic, copy, readonly) NSString *operatingSystemBuild; + +@property (nonatomic, assign, readonly, getter=isJailbroken) BOOL jailbroken; + ++ (instancetype)currentDevice; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFDevice.m b/BreakingBad/Pods/Parse/Parse/Internal/PFDevice.m new file mode 100644 index 0000000..b918012 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFDevice.m @@ -0,0 +1,134 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFDevice.h" + +#import + +#if TARGET_OS_WATCH +#import +#elif TARGET_OS_IOS +#import +#elif TARGET_OS_MAC +#import +#endif + +#include +#include +#include + +static NSString *PFDeviceSysctlByName(NSString *name) { + const char *charName = [name UTF8String]; + + size_t size; + sysctlbyname(charName, NULL, &size, NULL, 0); + char *answer = (char*)malloc(size); + + if (answer == NULL) { + return nil; + } + + sysctlbyname(charName, answer, &size, NULL, 0); + NSString *string = [NSString stringWithUTF8String:answer]; + free(answer); + + return string; +} + +@implementation PFDevice + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + ++ (instancetype)currentDevice { + static PFDevice *device; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + device = [[self alloc] init]; + }); + return device; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (NSString *)detailedModel { + NSString *name = PFDeviceSysctlByName(@"hw.machine"); + if (!name) { +#if TARGET_OS_WATCH + name = [WKInterfaceDevice currentDevice].model; +#elif TARGET_OS_IOS + name = [UIDevice currentDevice].model; +#elif TARGET_OS_MAC + name = @"Mac"; +#endif + } + return name; +} + +- (NSString *)operatingSystemFullVersion { + NSString *version = self.operatingSystemVersion; + NSString *build = self.operatingSystemBuild; + if (build.length) { + version = [version stringByAppendingFormat:@" (%@)", build]; + } + return version; +} +- (NSString *)operatingSystemVersion { +#if TARGET_OS_IOS + return [UIDevice currentDevice].systemVersion; +#elif TARGET_OS_WATCH + NSOperatingSystemVersion version = [NSProcessInfo processInfo].operatingSystemVersion; + return [NSString stringWithFormat:@"%d.%d.%d", + (int)version.majorVersion, + (int)version.minorVersion, + (int)version.patchVersion]; +#elif TARGET_OS_MAC + NSProcessInfo *info = [NSProcessInfo processInfo]; + if ([info respondsToSelector:@selector(operatingSystemVersion)]) { + NSOperatingSystemVersion version = info.operatingSystemVersion; + return [NSString stringWithFormat:@"%d.%d.%d", + (int)version.majorVersion, + (int)version.minorVersion, + (int)version.patchVersion]; + } else { + // TODO: (nlutsenko) Remove usage of this method, when we drop support for OSX 10.9 +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + SInt32 major, minor, bugfix; + if (Gestalt(gestaltSystemVersionMajor, &major) == noErr && + Gestalt(gestaltSystemVersionMinor, &minor) == noErr && + Gestalt(gestaltSystemVersionBugFix, &bugfix) == noErr) { + return [NSString stringWithFormat:@"%d.%d.%d", major, minor, bugfix]; + } +#pragma clang diagnostic pop + return [[NSProcessInfo processInfo] operatingSystemVersionString]; + } +#endif +} + +- (NSString *)operatingSystemBuild { + return PFDeviceSysctlByName(@"kern.osversion"); +} + +- (BOOL)isJailbroken { + BOOL jailbroken = NO; +#if TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR + DIR *dir = opendir("/"); + if (dir != NULL) { + jailbroken = YES; + closedir(dir); + } +#endif + return jailbroken; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFEncoder.h b/BreakingBad/Pods/Parse/Parse/Internal/PFEncoder.h new file mode 100644 index 0000000..9482755 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFEncoder.h @@ -0,0 +1,67 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFMacros.h" + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFObject; +@class PFOfflineStore; +@class PFSQLiteDatabase; + +///-------------------------------------- +/// @name Encoders +///-------------------------------------- + +@interface PFEncoder : NSObject + ++ (instancetype)objectEncoder; + +- (id)encodeObject:(id)object; +- (id)encodeParseObject:(PFObject *)object; + +@end + +/*! + Encoding strategy that rejects PFObject. + */ +@interface PFNoObjectEncoder : PFEncoder + +@end + +/*! + Encoding strategy that encodes PFObject to PFPointer with objectId or with localId. + */ +@interface PFPointerOrLocalIdObjectEncoder : PFEncoder + +@end + +/*! + Encoding strategy that encodes PFObject to PFPointer with objectId and rejects + unsaved PFObject. + */ +@interface PFPointerObjectEncoder : PFPointerOrLocalIdObjectEncoder + +@end + +/*! + Encoding strategy that can encode objects that are available offline. After using this encoder, + you must call encodeFinished and wait for its result to be finished before the results of the + encoding will be valid. + */ +@interface PFOfflineObjectEncoder : PFEncoder + ++ (instancetype)objectEncoderWithOfflineStore:(PFOfflineStore *)store database:(PFSQLiteDatabase *)database; + +- (BFTask *)encodeFinished; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFEncoder.m b/BreakingBad/Pods/Parse/Parse/Internal/PFEncoder.m new file mode 100644 index 0000000..6f9ce64 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFEncoder.m @@ -0,0 +1,250 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFEncoder.h" + +#import "PFACLPrivate.h" +#import "PFAssert.h" +#import "PFBase64Encoder.h" +#import "PFDateFormatter.h" +#import "PFFieldOperation.h" +#import "PFFile_Private.h" +#import "PFGeoPointPrivate.h" +#import "PFObjectPrivate.h" +#import "PFOfflineStore.h" +#import "PFRelationPrivate.h" + +@implementation PFEncoder + ++ (instancetype)objectEncoder { + static PFEncoder *encoder; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + encoder = [[PFEncoder alloc] init]; + }); + return encoder; +} + +- (id)encodeObject:(id)object { + if ([object isKindOfClass:[PFObject class]]) { + return [self encodeParseObject:object]; + } else if ([object isKindOfClass:[NSData class]]) { + return @{ + @"__type" : @"Bytes", + @"base64" : [PFBase64Encoder base64StringFromData:object] + }; + + } else if ([object isKindOfClass:[NSDate class]]) { + return @{ + @"__type" : @"Date", + @"iso" : [[PFDateFormatter sharedFormatter] preciseStringFromDate:object] + }; + + } else if ([object isKindOfClass:[PFFile class]]) { + if (((PFFile *)object).isDirty) { + // TODO: (nlutsenko) Figure out what to do with things like an unsaved file + // in a mutable container, where we don't normally want to allow serializing + // such a thing inside an object. + // + // Returning this empty object is strictly wrong, but we have to have *something* + // to put into an object's mutable container cache, and this is just about the + // best we can do right now. + // + // [NSException raise:NSInternalInconsistencyException + // format:@"Tried to serialize an unsaved file."]; + return @{ @"__type" : @"File" }; + } + return @{ + @"__type" : @"File", + @"url" : ((PFFile *)object).state.urlString, + @"name" : ((PFFile *)object).name + }; + + } else if ([object isKindOfClass:[PFFieldOperation class]]) { + // Always encode PFFieldOperation with PFPointerOrLocalId + return [object encodeWithObjectEncoder:[PFPointerOrLocalIdObjectEncoder objectEncoder]]; + } else if ([object isKindOfClass:[PFACL class]]) { + // TODO (hallucinogen): pass object encoder here + return [object encodeIntoDictionary]; + + } else if ([object isKindOfClass:[PFGeoPoint class]]) { + // TODO (hallucinogen): pass object encoder here + return [object encodeIntoDictionary]; + + } else if ([object isKindOfClass:[PFRelation class]]) { + // TODO (hallucinogen): pass object encoder here + return [object encodeIntoDictionary]; + + } else if ([object isKindOfClass:[NSArray class]]) { + NSMutableArray *newArray = [NSMutableArray arrayWithCapacity:[object count]]; + for (id elem in object) { + [newArray addObject:[self encodeObject:elem]]; + } + return newArray; + + } else if ([object isKindOfClass:[NSDictionary class]]) { + NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:[object count]]; + [object enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + dict[key] = [self encodeObject:obj]; + }]; + return dict; + } + + return object; +} + +- (id)encodeParseObject:(PFObject *)object { + // Do nothing here + return nil; +} + +@end + +///-------------------------------------- +#pragma mark - PFNoObjectEncoder +///-------------------------------------- + +@implementation PFNoObjectEncoder + ++ (instancetype)objectEncoder { + static PFNoObjectEncoder *encoder; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + encoder = [[PFNoObjectEncoder alloc] init]; + }); + return encoder; +} + +- (id)encodeParseObject:(PFObject *)object { + [NSException raise:NSInternalInconsistencyException format:@"PFObjects are not allowed here."]; + return nil; +} + +@end + +///-------------------------------------- +#pragma mark - PFPointerOrLocalIdObjectEncoder +///-------------------------------------- + +@implementation PFPointerOrLocalIdObjectEncoder + ++ (instancetype)objectEncoder { + static PFPointerOrLocalIdObjectEncoder *instance = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + instance = [[PFPointerOrLocalIdObjectEncoder alloc] init]; + }); + return instance; +} + +- (id)encodeParseObject:(PFObject *)object { + if (object.objectId) { + return @{ + @"__type" : @"Pointer", + @"objectId" : object.objectId, + @"className" : object.parseClassName + }; + } + return @{ + @"__type" : @"Pointer", + @"localId" : [object getOrCreateLocalId], + @"className" : object.parseClassName + }; +} + +@end + +///-------------------------------------- +#pragma mark - PFPointerObjectEncoder +///-------------------------------------- + +@implementation PFPointerObjectEncoder + ++ (instancetype)objectEncoder { + static PFPointerObjectEncoder *encoder; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + encoder = [[self alloc] init]; + }); + return encoder; +} + +- (id)encodeParseObject:(PFObject *)object { + PFConsistencyAssert(object.objectId, @"Tried to save an object with a new, unsaved child."); + return [super encodeParseObject:object]; +} + +@end + +///-------------------------------------- +#pragma mark - PFOfflineObjectEncoder +///-------------------------------------- + +@interface PFOfflineObjectEncoder () + +@property (nonatomic, assign) PFOfflineStore *store; +@property (nonatomic, assign) PFSQLiteDatabase *database; +@property (nonatomic, strong) NSMutableArray *tasks; +@property (nonatomic, strong) NSObject *tasksLock; // TODO: (nlutsenko) Avoid using @synchronized + +@end + +@implementation PFOfflineObjectEncoder + ++ (instancetype)objectEncoder { + PFNotDesignatedInitializer(); + return nil; +} + ++ (instancetype)objectEncoderWithOfflineStore:(PFOfflineStore *)store database:(PFSQLiteDatabase *)database { + PFOfflineObjectEncoder *encoder = [[self alloc] init]; + encoder.store = store; + encoder.database = database; + encoder.tasks = [NSMutableArray array]; + encoder.tasksLock = [[NSObject alloc] init]; + return encoder; +} + +- (id)encodeParseObject:(PFObject *)object { + if (object.objectId) { + return @{ + @"__type" : @"Pointer", + @"objectId" : object.objectId, + @"className" : object.parseClassName + }; + } else { + NSMutableDictionary *result = [@{ @"__type" : @"OfflineObject" } mutableCopy]; + @synchronized(self.tasksLock) { + BFTask *uuidTask = [self.store getOrCreateUUIDAsyncForObject:object database:self.database]; + [uuidTask continueWithSuccessBlock:^id(BFTask *task) { + result[@"uuid"] = task.result; + return nil; + }]; + [self.tasks addObject:uuidTask]; + } + return result; + } +} + +- (BFTask *)encodeFinished { + return [[BFTask taskForCompletionOfAllTasks:self.tasks] continueWithBlock:^id(BFTask *ignore) { + @synchronized (self.tasksLock) { + // TODO (hallucinogen) It might be better to return an aggregate error here + for (BFTask *task in self.tasks) { + if (task.cancelled || task.error != nil) { + return task; + } + } + [self.tasks removeAllObjects]; + return [BFTask taskWithResult:nil]; + } + }]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFErrorUtilities.h b/BreakingBad/Pods/Parse/Parse/Internal/PFErrorUtilities.h new file mode 100644 index 0000000..a5656f6 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFErrorUtilities.h @@ -0,0 +1,45 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface PFErrorUtilities : NSObject + +/*! + Construct an error object from a code and a message. + + @description Note that this logs all errors given to it. + You should use `errorWithCode:message:shouldLog:` to explicitly control whether it logs. + + @param code Parse Error Code + @param message Error description + + @return Instance of `NSError` or `nil`. + */ ++ (nullable NSError *)errorWithCode:(NSInteger)code message:(NSString *)message; ++ (nullable NSError *)errorWithCode:(NSInteger)code message:(NSString *)message shouldLog:(BOOL)shouldLog; + +/*! + Construct an error object from a result dictionary the API returned. + + @description Note that this logs all errors given to it. + You should use `errorFromResult:shouldLog:` to explicitly control whether it logs. + + @param result Network command result. + + @return Instance of `NSError` or `nil`. + */ ++ (nullable NSError *)errorFromResult:(NSDictionary *)result; ++ (nullable NSError *)errorFromResult:(NSDictionary *)result shouldLog:(BOOL)shouldLog; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFErrorUtilities.m b/BreakingBad/Pods/Parse/Parse/Internal/PFErrorUtilities.m new file mode 100644 index 0000000..a3f060d --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFErrorUtilities.m @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFErrorUtilities.h" + +#import "PFConstants.h" +#import "PFLogging.h" + +@implementation PFErrorUtilities + ++ (NSError *)errorWithCode:(NSInteger)code message:(NSString *)message { + return [self errorWithCode:code message:message shouldLog:YES]; +} + ++ (NSError *)errorWithCode:(NSInteger)code message:(NSString *)message shouldLog:(BOOL)shouldLog { + NSDictionary *result = @{ @"code" : @(code), + @"error" : message }; + return [self errorFromResult:result shouldLog:shouldLog]; +} + ++ (NSError *)errorFromResult:(NSDictionary *)result { + return [self errorFromResult:result shouldLog:YES]; +} + ++ (NSError *)errorFromResult:(NSDictionary *)result shouldLog:(BOOL)shouldLog { + NSInteger errorCode = [[result objectForKey:@"code"] integerValue]; + + NSString *errorExplanation = [result objectForKey:@"error"]; + + if (shouldLog) { + PFLogError(PFLoggingTagCommon, + @"%@ (Code: %ld, Version: %@)", errorExplanation, (long)errorCode, PARSE_VERSION); + } + + NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithDictionary:result]; + if (errorExplanation) { + userInfo[NSLocalizedDescriptionKey] = errorExplanation; + } + return [NSError errorWithDomain:PFParseErrorDomain code:errorCode userInfo:userInfo]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFEventuallyPin.h b/BreakingBad/Pods/Parse/Parse/Internal/PFEventuallyPin.h new file mode 100644 index 0000000..de6e754 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFEventuallyPin.h @@ -0,0 +1,76 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFObject.h" +#import "PFSubclassing.h" + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@protocol PFNetworkCommand; + +extern NSString *const PFEventuallyPinPinName; + +// Cache policies +typedef NS_ENUM(NSUInteger, PFEventuallyPinType) { + PFEventuallyPinTypeSave = 1, + PFEventuallyPinTypeDelete, + PFEventuallyPinTypeCommand +}; + +/*! + PFEventuallyPin represents PFCommand that's save locally so that it can be executed eventually. + + Properties of PFEventuallyPin: + - time + Used for sort order when querying for all EventuallyPins. + - type + PFEventuallyPinTypeSave or PFEventuallyPinTypeDelete. + - object + The object the operation should notify when complete. + - operationSetUUID + The operationSet to be completed. + - sessionToken + The user that instantiated the operation. + */ +@interface PFEventuallyPin : PFObject + +@property (nonatomic, copy, readonly) NSString *uuid; + +@property (nonatomic, assign, readonly) PFEventuallyPinType type; + +@property (nonatomic, strong, readonly) PFObject *object; + +@property (nonatomic, copy, readonly) NSString *operationSetUUID; + +@property (nonatomic, copy, readonly) NSString *sessionToken; + +@property (nonatomic, strong, readonly) id command; + +///-------------------------------------- +#pragma mark - Eventually Pin +///-------------------------------------- + +/*! + Wrap given PFObject and PFCommand in a PFEventuallyPin with auto-generated UUID. + */ ++ (BFTask *)pinEventually:(PFObject *)object forCommand:(id)command; + +/*! + Wrap given PFObject and PFCommand in a PFEventuallyPin with given UUID. + */ ++ (BFTask *)pinEventually:(PFObject *)object forCommand:(id)command withUUID:(NSString *)uuid; + ++ (BFTask *)findAllEventuallyPin; + ++ (BFTask *)findAllEventuallyPinWithExcludeUUIDs:(NSArray *)excludeUUIDs; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFEventuallyPin.m b/BreakingBad/Pods/Parse/Parse/Internal/PFEventuallyPin.m new file mode 100644 index 0000000..aa9e0d4 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFEventuallyPin.m @@ -0,0 +1,188 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFEventuallyPin.h" + +#import + +#import "PFAssert.h" +#import "PFHTTPRequest.h" +#import "PFInternalUtils.h" +#import "PFObject+Subclass.h" +#import "PFObjectPrivate.h" +#import "PFOfflineStore.h" +#import "PFQuery.h" +#import "PFRESTCommand.h" + +NSString *const PFEventuallyPinPinName = @"_eventuallyPin"; + +NSString *const PFEventuallyPinKeyUUID = @"uuid"; +NSString *const PFEventuallyPinKeyTime = @"time"; +NSString *const PFEventuallyPinKeyType = @"type"; +NSString *const PFEventuallyPinKeyObject = @"object"; +NSString *const PFEventuallyPinKeyOperationSetUUID = @"operationSetUUID"; +NSString *const PFEventuallyPinKeySessionToken = @"sessionToken"; +NSString *const PFEventuallyPinKeyCommand = @"command"; + +@implementation PFEventuallyPin + +///-------------------------------------- +#pragma mark - PFSubclassing +///-------------------------------------- + ++ (NSString *)parseClassName { + return @"_EventuallyPin"; +} + +// Validates a class name. We override this to only allow the pin class name. ++ (void)_assertValidInstanceClassName:(NSString *)className { + PFParameterAssert([className isEqualToString:[self parseClassName]], + @"Cannot initialize a PFEventuallyPin with a custom class name."); +} + +- (BOOL)needsDefaultACL { + return NO; +} + +///-------------------------------------- +#pragma mark - Getter +///-------------------------------------- + +- (NSString *)uuid { + return self[PFEventuallyPinKeyUUID]; +} + +- (PFEventuallyPinType)type { + return [self[PFEventuallyPinKeyType] intValue]; +} + +- (PFObject *)object { + return self[PFEventuallyPinKeyObject]; +} + +- (NSString *)operationSetUUID { + return self[PFEventuallyPinKeyOperationSetUUID]; +} + +- (NSString *)sessionToken { + return self[PFEventuallyPinKeySessionToken]; +} + +- (id)command { + NSDictionary *dictionary = self[PFEventuallyPinKeyCommand]; + if ([PFRESTCommand isValidDictionaryRepresentation:dictionary]) { + return [PFRESTCommand commandFromDictionaryRepresentation:dictionary]; + } + return nil; +} + +///-------------------------------------- +#pragma mark - Eventually Pin +///-------------------------------------- + ++ (BFTask *)pinEventually:(PFObject *)object forCommand:(id)command { + return [self pinEventually:object forCommand:command withUUID:[[NSUUID UUID] UUIDString]]; +} + ++ (BFTask *)pinEventually:(PFObject *)object forCommand:(id)command withUUID:(NSString *)uuid { + PFEventuallyPinType type = [self _pinTypeForCommand:command]; + NSDictionary *commandDictionary = (type == PFEventuallyPinTypeCommand ? [command dictionaryRepresentation] : nil); + return [self _pinEventually:object + type:type + uuid:uuid + operationSetUUID:command.operationSetUUID + sessionToken:command.sessionToken + commandDictionary:commandDictionary]; +} + ++ (BFTask *)findAllEventuallyPin { + return [self findAllEventuallyPinWithExcludeUUIDs:nil]; +} + ++ (BFTask *)findAllEventuallyPinWithExcludeUUIDs:(NSArray *)excludeUUIDs { + PFQuery *query = [PFQuery queryWithClassName:self.parseClassName]; + [query fromPinWithName:PFEventuallyPinPinName]; + [query orderByAscending:PFEventuallyPinKeyTime]; + + if (excludeUUIDs != nil) { + [query whereKey:PFEventuallyPinKeyUUID notContainedIn:excludeUUIDs]; + } + + return [[query findObjectsInBackground] continueWithBlock:^id(BFTask *task) { + NSArray *pins = task.result; + NSMutableArray *fetchTasks = [NSMutableArray array]; + + for (PFEventuallyPin *pin in pins) { + PFObject *object = pin.object; + if (object != nil) { + [fetchTasks addObject:[object fetchFromLocalDatastoreInBackground]]; + } + } + + return [[BFTask taskForCompletionOfAllTasks:fetchTasks] continueWithBlock:^id(BFTask *task) { + return [BFTask taskWithResult:pins]; + }]; + }]; +} + +///-------------------------------------- +#pragma mark - Private +///-------------------------------------- + ++ (BFTask *)_pinEventually:(PFObject *)object + type:(PFEventuallyPinType)type + uuid:(NSString *)uuid + operationSetUUID:(NSString *)operationSetUUID + sessionToken:(NSString *)sessionToken + commandDictionary:(NSDictionary *)commandDictionary { + PFEventuallyPin *pin = [[PFEventuallyPin alloc] init]; + pin[PFEventuallyPinKeyUUID] = uuid; + pin[PFEventuallyPinKeyTime] = [NSDate date]; + pin[PFEventuallyPinKeyType] = @(type); + if (object != nil) { + pin[PFEventuallyPinKeyObject] = object; + } + if (operationSetUUID != nil) { + pin[PFEventuallyPinKeyOperationSetUUID] = operationSetUUID; + } + if (sessionToken != nil) { + pin[PFEventuallyPinKeySessionToken] = sessionToken; + } + if (commandDictionary != nil) { + pin[PFEventuallyPinKeyCommand] = commandDictionary; + } + + // NOTE: This is needed otherwise ARC releases the pins before we have a chance to persist the new ones to disk, + // Which means we'd lose any columns on objects in eventually pins not currently in memory. + __block NSArray *existingPins = nil; + return [[[self findAllEventuallyPin] continueWithSuccessBlock:^id(BFTask *task) { + existingPins = task.result; + return [pin pinInBackgroundWithName:PFEventuallyPinPinName]; + }] continueWithSuccessBlock:^id(BFTask *task) { + existingPins = nil; + return pin; + }]; +} + ++ (PFEventuallyPinType)_pinTypeForCommand:(id)command { + PFEventuallyPinType type = PFEventuallyPinTypeCommand; + NSString *path = [(PFRESTCommand *)command httpPath]; + NSString *method = [(PFRESTCommand *)command httpMethod]; + if ([path hasPrefix:@"classes"]) { + if ([method isEqualToString:PFHTTPRequestMethodPOST] || + [method isEqualToString:PFHTTPRequestMethodPUT]) { + type = PFEventuallyPinTypeSave; + } else if ([method isEqualToString:PFHTTPRequestMethodDELETE]) { + type = PFEventuallyPinTypeDelete; + } + } + return type; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFEventuallyQueue.h b/BreakingBad/Pods/Parse/Parse/Internal/PFEventuallyQueue.h new file mode 100644 index 0000000..0ac4ea1 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFEventuallyQueue.h @@ -0,0 +1,94 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFMacros.h" +#import "PFNetworkCommand.h" + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFEventuallyPin; +@class PFEventuallyQueueTestHelper; +@class PFObject; +@protocol PFCommandRunning; + +extern NSUInteger const PFEventuallyQueueDefaultMaxAttemptsCount; +extern NSTimeInterval const PFEventuallyQueueDefaultTimeoutRetryInterval; + +@interface PFEventuallyQueue : NSObject + +@property (nonatomic, strong, readonly) id commandRunner; + +@property (nonatomic, assign, readonly) NSUInteger maxAttemptsCount; +@property (nonatomic, assign, readonly) NSTimeInterval retryInterval; + +@property (nonatomic, assign, readonly) NSUInteger commandCount; + +/*! + Controls whether the queue should monitor network reachability and pause itself when there is no connection. + Default: `YES`. + */ +@property (atomic, assign, readonly) BOOL monitorsReachability PF_WATCH_UNAVAILABLE; +@property (nonatomic, assign, readonly, getter=isConnected) BOOL connected; + +// Gets notifications of various events happening in the command cache, so that tests can be synchronized. +@property (nonatomic, strong, readonly) PFEventuallyQueueTestHelper *testHelper; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithCommandRunner:(id)commandRunner + maxAttemptsCount:(NSUInteger)attemptsCount + retryInterval:(NSTimeInterval)retryInterval NS_DESIGNATED_INITIALIZER; + +///-------------------------------------- +/// @name Running Commands +///-------------------------------------- + +- (BFTask *)enqueueCommandInBackground:(id)command; +- (BFTask *)enqueueCommandInBackground:(id)command withObject:(PFObject *)object; + +///-------------------------------------- +/// @name Controlling Queue +///-------------------------------------- + +- (void)start NS_REQUIRES_SUPER; +- (void)resume NS_REQUIRES_SUPER; +- (void)pause NS_REQUIRES_SUPER; + +- (void)removeAllCommands NS_REQUIRES_SUPER; + +@end + +typedef enum { + PFEventuallyQueueEventCommandEnqueued, // A command was placed into the queue. + PFEventuallyQueueEventCommandNotEnqueued, // A command could not be placed into the queue. + + PFEventuallyQueueEventCommandSucceded, // A command has successfully running on the server. + PFEventuallyQueueEventCommandFailed, // A command has failed on the server. + + PFEventuallyQueueEventObjectUpdated, // An object's data was updated after a command completed. + PFEventuallyQueueEventObjectRemoved, // An object was removed because it was deleted before creation. + + PFEventuallyQueueEventCount // The total number of items in this enum. +} PFEventuallyQueueTestHelperEvent; + +@interface PFEventuallyQueueTestHelper : NSObject { + dispatch_semaphore_t events[PFEventuallyQueueEventCount]; +} + +- (void)clear; +- (void)notify:(PFEventuallyQueueTestHelperEvent)event; +- (BOOL)waitFor:(PFEventuallyQueueTestHelperEvent)event; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFEventuallyQueue.m b/BreakingBad/Pods/Parse/Parse/Internal/PFEventuallyQueue.m new file mode 100644 index 0000000..80e025d --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFEventuallyQueue.m @@ -0,0 +1,503 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFEventuallyQueue.h" +#import "PFEventuallyQueue_Private.h" + +#import +#import + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFCommandResult.h" +#import "PFCommandRunning.h" +#import "PFErrorUtilities.h" +#import "PFLogging.h" +#import "PFMacros.h" +#import "PFRESTCommand.h" +#import "PFReachability.h" +#import "PFTaskQueue.h" + +NSUInteger const PFEventuallyQueueDefaultMaxAttemptsCount = 5; +NSTimeInterval const PFEventuallyQueueDefaultTimeoutRetryInterval = 600.0f; + +@interface PFEventuallyQueue () +#if !TARGET_OS_WATCH + +#endif + +@property (atomic, assign, readwrite) BOOL monitorsReachability; +@property (atomic, assign, getter=isRunning) BOOL running; + +@end + +@implementation PFEventuallyQueue + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithCommandRunner:(id)commandRunner + maxAttemptsCount:(NSUInteger)attemptsCount + retryInterval:(NSTimeInterval)retryInterval { + self = [super init]; + if (!self) return nil; + + _commandRunner = commandRunner; + _maxAttemptsCount = attemptsCount; + _retryInterval = retryInterval; + + // Set up all the queues + NSString *queueBaseLabel = [NSString stringWithFormat:@"com.parse.%@", NSStringFromClass([self class])]; + + _synchronizationQueue = dispatch_queue_create([[NSString stringWithFormat:@"%@.synchronization", + queueBaseLabel] UTF8String], + DISPATCH_QUEUE_SERIAL); + PFMarkDispatchQueue(_synchronizationQueue); + _synchronizationExecutor = [BFExecutor executorWithDispatchQueue:_synchronizationQueue]; + + _processingQueue = dispatch_queue_create([[NSString stringWithFormat:@"%@.processing", + queueBaseLabel] UTF8String], + DISPATCH_QUEUE_SERIAL); + PFMarkDispatchQueue(_processingQueue); + + _processingQueueSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_DATA_ADD, 0, 0, _processingQueue); + + _commandEnqueueTaskQueue = [[PFTaskQueue alloc] init]; + + _taskCompletionSources = [NSMutableDictionary dictionary]; + _testHelper = [[PFEventuallyQueueTestHelper alloc] init]; + + [self _startMonitoringNetworkReachability]; + + return self; +} + +- (void)dealloc { + [self _stopMonitoringNetworkReachability]; +} + +///-------------------------------------- +#pragma mark - Enqueueing Commands +///-------------------------------------- + +- (BFTask *)enqueueCommandInBackground:(id)command { + return [self enqueueCommandInBackground:command withObject:nil]; +} + +- (BFTask *)enqueueCommandInBackground:(id)command withObject:(PFObject *)object { + PFParameterAssert(command, @"Cannot enqueue nil command."); + + BFTaskCompletionSource *taskCompletionSource = [BFTaskCompletionSource taskCompletionSource]; + + @weakify(self); + [_commandEnqueueTaskQueue enqueue:^BFTask *(BFTask *toAwait) { + return [toAwait continueAsyncWithBlock:^id(BFTask *task) { + @strongify(self); + + NSString *identifier = [self _newIdentifierForCommand:command]; + return [[[self _enqueueCommandInBackground:command + object:object + identifier:identifier] continueWithBlock:^id(BFTask *task) { + if (task.error || task.exception || task.cancelled) { + [self.testHelper notify:PFEventuallyQueueEventCommandNotEnqueued]; + if (task.error) { + taskCompletionSource.error = task.error; + } else if (task.exception) { + taskCompletionSource.exception = task.exception; + } else if (task.cancelled) { + [taskCompletionSource cancel]; + } + } else { + [self.testHelper notify:PFEventuallyQueueEventCommandEnqueued]; + } + + return task; + }] continueWithExecutor:_synchronizationExecutor withSuccessBlock:^id(BFTask *task) { + [self _didEnqueueCommand:command withIdentifier:identifier taskCompletionSource:taskCompletionSource]; + return nil; + }]; + }]; + }]; + + return taskCompletionSource.task; +} + +- (BFTask *)_enqueueCommandInBackground:(id)command + object:(PFObject *)object + identifier:(NSString *)identifier { + // This enforces implementing this method in subclasses + [self doesNotRecognizeSelector:_cmd]; + return nil; +} + +- (void)_didEnqueueCommand:(id)command + withIdentifier:(NSString *)identifier + taskCompletionSource:(BFTaskCompletionSource *)taskCompletionSource { + PFAssertIsOnDispatchQueue(_synchronizationQueue); + + _taskCompletionSources[identifier] = taskCompletionSource; + dispatch_source_merge_data(_processingQueueSource, 1); + + if (_retryingSemaphore) { + dispatch_semaphore_signal(_retryingSemaphore); + } +} + +///-------------------------------------- +#pragma mark - Pending Commands +///-------------------------------------- + +- (NSArray *)_pendingCommandIdentifiers { + return nil; +} + +- (id)_commandWithIdentifier:(NSString *)identifier error:(NSError **)error { + return nil; +} + +- (NSString *)_newIdentifierForCommand:(id)command { + return nil; +} + +- (NSUInteger)commandCount { + return [[self _pendingCommandIdentifiers] count]; +} + +///-------------------------------------- +#pragma mark - Controlling Queue +///-------------------------------------- + +- (void)start { + dispatch_source_set_event_handler(_processingQueueSource, ^{ + [self _runCommands]; + }); + [self resume]; +} + +- (void)resume { + if (self.running) { + return; + } + self.running = YES; + dispatch_resume(_processingQueueSource); + dispatch_source_merge_data(_processingQueueSource, 1); +} + +- (void)pause { + if (!self.running) { + return; + } + self.running = NO; + dispatch_suspend(_processingQueueSource); +} + +- (void)removeAllCommands { + dispatch_sync(_synchronizationQueue, ^{ + [_taskCompletionSources removeAllObjects]; + }); +} + +///-------------------------------------- +#pragma mark - Running Commands +///-------------------------------------- + +- (void)_runCommands { + PFAssertIsOnDispatchQueue(_processingQueue); + + [self _runCommandsWithRetriesCount:self.maxAttemptsCount]; +} + +- (void)_runCommandsWithRetriesCount:(NSUInteger)retriesCount { + PFAssertIsOnDispatchQueue(_processingQueue); + + if (!self.running || !self.connected) { + return; + } + + // Expect sorted result from _pendingCommandIdentifiers + NSArray *commandIdentifiers = [self _pendingCommandIdentifiers]; + BOOL shouldRetry = NO; + for (NSString *identifier in commandIdentifiers) { + NSError *error = nil; + id command = [self _commandWithIdentifier:identifier error:&error]; + if (!command || error) { + if (!error) { + error = [PFErrorUtilities errorWithCode:kPFErrorInternalServer + message:@"Failed to dequeue an eventually command." + shouldLog:NO]; + } + BFTask *task = [BFTask taskWithError:error]; + [self _didFinishRunningCommand:command withIdentifier:identifier resultTask:task]; + continue; + } + + __block BFTaskCompletionSource *taskCompletionSource = nil; + dispatch_sync(_synchronizationQueue, ^{ + taskCompletionSource = _taskCompletionSources[identifier]; + }); + + BFTask *resultTask = nil; + PFCommandResult *result = nil; + @try { + resultTask = [self _runCommand:command withIdentifier:identifier]; + result = [resultTask waitForResult:&error]; + } + @catch (NSException *exception) { + error = [NSError errorWithDomain:PFParseErrorDomain + code:kPFErrorInvalidPointer + userInfo:@{ @"message" : @"Failed to run an eventually command.", + @"exception" : exception }]; + resultTask = [BFTask taskWithError:error]; + } + + if (error) { + BOOL permanent = (![error.userInfo[@"temporary"] boolValue] && + ([[error domain] isEqualToString:PFParseErrorDomain] || + [error code] != kPFErrorConnectionFailed)); + + if (!permanent) { + PFLogWarning(PFLoggingTagCommon, + @"Attempt at runEventually command timed out. Waiting %f seconds. %d retries remaining.", + self.retryInterval, + (int)retriesCount); + + __block dispatch_semaphore_t semaphore = NULL; + dispatch_sync(_synchronizationQueue, ^{ + _retryingSemaphore = dispatch_semaphore_create(0); + semaphore = _retryingSemaphore; + }); + + dispatch_time_t timeoutTime = dispatch_time(DISPATCH_TIME_NOW, + (int64_t)(self.retryInterval * NSEC_PER_SEC)); + + long waitResult = dispatch_semaphore_wait(semaphore, timeoutTime); + dispatch_sync(_synchronizationQueue, ^{ + _retryingSemaphore = NULL; + }); + + if (waitResult == 0) { + // We haven't waited long enough, but if we lost the connection, or should stop, just quit. + return; + } + + // We need to go out of the loop. + if (retriesCount > 0) { + shouldRetry = YES; + break; + } + } + + PFLogError(PFLoggingTagCommon, @"Failed to run command eventually with error: %@", error); + } + + // Post processing shouldn't make the queue retry the command. + resultTask = [self _didFinishRunningCommand:command withIdentifier:identifier resultTask:resultTask]; + [resultTask waitForResult:nil]; + + // Notify anyone waiting that the operation is completed. + if (resultTask.error) { + taskCompletionSource.error = resultTask.error; + } else if (resultTask.exception) { + taskCompletionSource.exception = resultTask.exception; + } else if (resultTask.cancelled) { + [taskCompletionSource cancel]; + } else { + taskCompletionSource.result = resultTask.result; + } + } + + // Retry here so that we're in cleaner state. + if (shouldRetry) { + return [self _runCommandsWithRetriesCount:(retriesCount - 1)]; + } +} + +- (BFTask *)_runCommand:(id)command withIdentifier:(NSString *)identifier { + if ([command isKindOfClass:[PFRESTCommand class]]) { + return [self.commandRunner runCommandAsync:(PFRESTCommand *)command withOptions:0]; + } + + NSString *reason = [NSString stringWithFormat:@"Can't find a compatible runner for command %@.", command]; + NSException *exception = [NSException exceptionWithName:NSInternalInconsistencyException + reason:reason + userInfo:nil]; + return [BFTask taskWithException:exception]; +} + +- (BFTask *)_didFinishRunningCommand:(id)command + withIdentifier:(NSString *)identifier + resultTask:(BFTask *)resultTask { + PFConsistencyAssert(resultTask.completed, @"Task should be completed."); + + dispatch_sync(_synchronizationQueue, ^{ + [_taskCompletionSources removeObjectForKey:identifier]; + }); + + if (resultTask.exception || resultTask.error || resultTask.cancelled) { + [self.testHelper notify:PFEventuallyQueueEventCommandFailed]; + } else { + [self.testHelper notify:PFEventuallyQueueEventCommandSucceded]; + } + + return resultTask; +} + +- (BFTask *)_waitForOperationSet:(PFOperationSet *)operationSet + eventuallyPin:(PFEventuallyPin *)eventuallyPin { + return [BFTask taskWithResult:nil]; +} + +///-------------------------------------- +#pragma mark - Reachability +///-------------------------------------- + +- (void)_startMonitoringNetworkReachability { +#if TARGET_OS_WATCH + self.connected = YES; +#else + if (self.monitorsReachability) { + return; + } + self.monitorsReachability = YES; + + [[PFReachability sharedParseReachability] addListener:self]; + + // Set the initial connected status + self.connected = ([PFReachability sharedParseReachability].currentState != PFReachabilityStateNotReachable); +#endif +} + +- (void)_stopMonitoringNetworkReachability { +#if !TARGET_OS_WATCH + if (!self.monitorsReachability) { + return; + } + + [[PFReachability sharedParseReachability] removeListener:self]; + + self.monitorsReachability = NO; + self.connected = YES; +#endif +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +/*! Manually sets the network connection status. */ +- (void)setConnected:(BOOL)connected { + BFTaskCompletionSource *barrier = [BFTaskCompletionSource taskCompletionSource]; + dispatch_async(_processingQueue, ^{ + dispatch_sync(_synchronizationQueue, ^{ + if (self.connected != connected) { + _connected = connected; + if (connected) { + dispatch_source_merge_data(_processingQueueSource, 1); + } + } + }); + barrier.result = nil; + }); + if (connected) { + dispatch_async(_synchronizationQueue, ^{ + if (_retryingSemaphore) { + dispatch_semaphore_signal(_retryingSemaphore); + } + }); + } + [barrier.task waitForResult:nil]; +} + +///-------------------------------------- +#pragma mark - Test Helper Method +///-------------------------------------- + +/*! Makes this command cache forget all the state it keeps during a single run of the app. */ +- (void)_simulateReboot { + // Make sure there is no command pending enqueuing + [[[[_commandEnqueueTaskQueue enqueue:^BFTask *(BFTask *toAwait) { + return toAwait; + }] continueWithExecutor:_synchronizationExecutor withBlock:^id(BFTask *task) { + // Remove all state task completion sources + [_taskCompletionSources removeAllObjects]; + return nil; + }] continueWithExecutor:[BFExecutor executorWithDispatchQueue:_processingQueue] withBlock:^id(BFTask *task) { + // Let all operations in the queue run at least once + return nil; + }] waitUntilFinished]; +} + +/*! Test helper to return how many commands are being retained in memory by the cache. */ +- (int)_commandsInMemory { + return (int)[_taskCompletionSources count]; +} + +/*! Called by PFObject whenever an object has been updated after a saveEventually. */ +- (void)_notifyTestHelperObjectUpdated { + [self.testHelper notify:PFEventuallyQueueEventObjectUpdated]; +} + +- (void)_setMaxAttemptsCount:(NSUInteger)attemptsCount { + _maxAttemptsCount = attemptsCount; +} + +- (void)_setRetryInterval:(NSTimeInterval)retryInterval { + _retryInterval = retryInterval; +} + +#if !TARGET_OS_WATCH + +///-------------------------------------- +#pragma mark - Reachability +///-------------------------------------- + +- (void)reachability:(PFReachability *)reachability didChangeReachabilityState:(PFReachabilityState)state { + if (self.monitorsReachability) { + self.connected = (state != PFReachabilityStateNotReachable); + } +} + +#endif + +@end + +// PFEventuallyQueueTestHelper gets notifications of various events happening in the command cache, +// so that tests can be synchronized. See CommandTests.m for examples of how to use this. + +@implementation PFEventuallyQueueTestHelper + +- (instancetype)init { + self = [super init]; + if (self) { + [self clear]; + } + return self; +} + +- (void)clear { + for (int i = 0; i < PFEventuallyQueueEventCount; ++i) { + events[i] = dispatch_semaphore_create(0); + } +} + +- (void)notify:(PFEventuallyQueueTestHelperEvent)event { + dispatch_semaphore_signal(events[event]); +} + +- (BOOL)waitFor:(PFEventuallyQueueTestHelperEvent)event { + // Wait 1 second for a permit from the semaphore. + return (dispatch_semaphore_wait(events[event], dispatch_time(DISPATCH_TIME_NOW, 10LL * NSEC_PER_SEC)) == 0); +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFEventuallyQueue_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/PFEventuallyQueue_Private.h new file mode 100644 index 0000000..3e576f3 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFEventuallyQueue_Private.h @@ -0,0 +1,133 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFEventuallyQueue.h" + +@class BFExecutor; +@class PFEventuallyPin; +@class PFObject; +@class PFOperationSet; +@class PFTaskQueue; + +extern NSUInteger const PFEventuallyQueueDefaultMaxAttemptsCount; +extern NSTimeInterval const PFEventuallyQueueDefaultTimeoutRetryInterval; + +@class BFTaskCompletionSource; + +@interface PFEventuallyQueue () +{ +@protected + BFExecutor *_synchronizationExecutor; + dispatch_queue_t _synchronizationQueue; + +@private + dispatch_queue_t _processingQueue; + dispatch_source_t _processingQueueSource; + + dispatch_semaphore_t _retryingSemaphore; + + NSMutableDictionary *_taskCompletionSources; + + /*! + Task queue that will enqueue command enqueueing task so that we enqueue the command + one at a time. + */ + PFTaskQueue *_commandEnqueueTaskQueue; +} + +@property (nonatomic, assign, readwrite, getter=isConnected) BOOL connected; + +/*! + This method is used to do some work after the command is finished running and + either succeeded or dropped from queue with error/exception. + + @param command Command that was run. + @param identifier Unique identifier of the command + @param resultTask Task that represents the result of running a command. + @returns A continuation task in case the EventuallyQueue need to do something. + Typically this will return back given resultTask. + */ +- (BFTask *)_didFinishRunningCommand:(id)command + withIdentifier:(NSString *)identifier + resultTask:(BFTask *)resultTask; + +///-------------------------------------- +/// @name Reachability +///-------------------------------------- + +- (void)_startMonitoringNetworkReachability; +- (void)_stopMonitoringNetworkReachability; + +///-------------------------------------- +/// @name Test Helper +///-------------------------------------- + +- (void)_setMaxAttemptsCount:(NSUInteger)attemptsCount; + +- (void)_setRetryInterval:(NSTimeInterval)retryInterval; + +- (void)_simulateReboot NS_REQUIRES_SUPER; + +- (int)_commandsInMemory; + +- (void)_notifyTestHelperObjectUpdated; + +@end + +@protocol PFEventuallyQueueSubclass + +///-------------------------------------- +/// @name Pending Commands +///-------------------------------------- + + +/*! + Generates a new identifier for a command so that it can be sorted later by this identifier. + */ +- (NSString *)_newIdentifierForCommand:(id)command; + +/*! + This method is triggered on batch processing of the queue. + It will capture the identifiers and use them to execute commands. + + @returns An array of identifiers of all commands that are pending sorted by the order they're enqueued. + */ +- (NSArray *)_pendingCommandIdentifiers; + +/*! + This method should return a command for a given identifier. + + @param identifier An identifier of a command, that was in array returned by <_pendingCommandIdentifiers> + @param error Pointer to `NSError *` that should be set if the method failed to construct/retrieve a command. + + @returns A command that needs to be run, or `nil` if there was an error. + */ +- (id)_commandWithIdentifier:(NSString *)identifier error:(NSError **)error; + +///-------------------------------------- +/// @name Running Commands +///-------------------------------------- + +/*! + This method serves as a way to do any kind of work to enqueue a command properly. + If the task fails with an error/exception or is cancelled - execution won't start. + + @param command Command that needs to be enqueued + @param object The object on which the command is run against. + @param identifier Unique identifier used to represent a command. + @returns Task that is resolved when the command is complete enqueueing. + */ +- (BFTask *)_enqueueCommandInBackground:(id)command + object:(PFObject *)object + identifier:(NSString *)identifier; + +- (BFTask *)_waitForOperationSet:(PFOperationSet *)operationSet + eventuallyPin:(PFEventuallyPin *)eventuallyPin; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFFileManager.h b/BreakingBad/Pods/Parse/Parse/Internal/PFFileManager.h new file mode 100644 index 0000000..91e5700 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFFileManager.h @@ -0,0 +1,77 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFMacros.h" + +@class BFExecutor; +@class BFTask PF_GENERIC(__covariant BFGenericType); + +typedef NS_OPTIONS(uint8_t, PFFileManagerOptions) { + PFFileManagerOptionSkipBackup = 1 << 0, +}; + +@interface PFFileManager : NSObject + +///-------------------------------------- +/// @name Class +///-------------------------------------- + ++ (BOOL)isApplicationGroupContainerReachableForGroupIdentifier:(NSString *)applicationGroup; + ++ (BFTask *)createDirectoryIfNeededAsyncAtPath:(NSString *)path; ++ (BFTask *)createDirectoryIfNeededAsyncAtPath:(NSString *)path + withOptions:(PFFileManagerOptions)options + executor:(BFExecutor *)executor; + ++ (BFTask *)writeStringAsync:(NSString *)string toFile:(NSString *)filePath; ++ (BFTask *)writeDataAsync:(NSData *)data toFile:(NSString *)filePath; + ++ (BFTask *)copyItemAsyncAtPath:(NSString *)fromPath toPath:(NSString *)toPath; ++ (BFTask *)moveItemAsyncAtPath:(NSString *)fromPath toPath:(NSString *)toPath; + ++ (BFTask *)moveContentsOfDirectoryAsyncAtPath:(NSString *)fromPath + toDirectoryAtPath:(NSString *)toPath + executor:(BFExecutor *)executor; + ++ (BFTask *)removeItemAtPathAsync:(NSString *)path; ++ (BFTask *)removeItemAtPathAsync:(NSString *)path withFileLock:(BOOL)useFileLock; ++ (BFTask *)removeDirectoryContentsAsyncAtPath:(NSString *)path; + +///-------------------------------------- +/// @name Instance +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithApplicationIdentifier:(NSString *)applicationIdentifier + applicationGroupIdentifier:(NSString *)applicationGroupIdentifier NS_DESIGNATED_INITIALIZER; + +/*! + Returns /Library/Private Documents/Parse + for non-user generated data that shouldn't be deleted by iOS, such as "offline data". + + See https://developer.apple.com/library/ios/#qa/qa1699/_index.html + */ +- (NSString *)parseDefaultDataDirectoryPath; +- (NSString *)parseLocalSandboxDataDirectoryPath; +- (NSString *)parseDataDirectoryPath_DEPRECATED; + +/*! + The path including directories that we save data to for a given filename. + If the file isn't found in the new "Private Documents" location, but is in the old "Documents" location, + moves it and returns the new location. + */ +- (NSString *)parseDataItemPathForPathComponent:(NSString *)pathComponent; + +- (NSString *)parseCacheItemPathForPathComponent:(NSString *)component; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFFileManager.m b/BreakingBad/Pods/Parse/Parse/Internal/PFFileManager.m new file mode 100644 index 0000000..a48a6c8 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFFileManager.m @@ -0,0 +1,367 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFFileManager.h" + +#import + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFLogging.h" +#import "PFMultiProcessFileLockController.h" + +static NSString *const _PFFileManagerParseDirectoryName = @"Parse"; + +static NSDictionary *_PFFileManagerDefaultDirectoryFileAttributes() { +#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR + return @{ NSFileProtectionKey : NSFileProtectionCompleteUntilFirstUserAuthentication }; +#else + return nil; +#endif +} + +static NSDataWritingOptions _PFFileManagerDefaultDataWritingOptions() { + NSDataWritingOptions options = NSDataWritingAtomic; +#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR + options |= NSDataWritingFileProtectionCompleteUntilFirstUserAuthentication; +#endif + return options; +} + +@interface PFFileManager () + +@property (nonatomic, copy) NSString *applicationIdentifier; +@property (nonatomic, copy) NSString *applicationGroupIdentifier; + +@end + +@implementation PFFileManager + +///-------------------------------------- +#pragma mark - Class +///-------------------------------------- + ++ (BOOL)isApplicationGroupContainerReachableForGroupIdentifier:(NSString *)applicationGroup { + return ([[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:applicationGroup] != nil); +} + ++ (BFTask *)writeStringAsync:(NSString *)string toFile:(NSString *)filePath { + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; + return [self writeDataAsync:data toFile:filePath]; + }]; +} + ++ (BFTask *)writeDataAsync:(NSData *)data toFile:(NSString *)filePath { + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + NSError *error = nil; + [data writeToFile:filePath + options:_PFFileManagerDefaultDataWritingOptions() + error:&error]; + if (error) { + return [BFTask taskWithError:error]; + } + return nil; + }]; +} + ++ (BFTask *)createDirectoryIfNeededAsyncAtPath:(NSString *)path { + return [self createDirectoryIfNeededAsyncAtPath:path + withOptions:PFFileManagerOptionSkipBackup + executor:[BFExecutor defaultPriorityBackgroundExecutor]]; +} + ++ (BFTask *)createDirectoryIfNeededAsyncAtPath:(NSString *)path + withOptions:(PFFileManagerOptions)options + executor:(BFExecutor *)executor { + return [BFTask taskFromExecutor:executor withBlock:^id{ + if (![[NSFileManager defaultManager] fileExistsAtPath:path]) { + NSError *error = nil; + [[NSFileManager defaultManager] createDirectoryAtPath:path + withIntermediateDirectories:YES + attributes:_PFFileManagerDefaultDirectoryFileAttributes() + error:&error]; + if (error) { + return [BFTask taskWithError:error]; + } + } + +#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR + if (options & PFFileManagerOptionSkipBackup) { + [self _skipBackupOnPath:path]; + } +#endif + return nil; + }]; +} + ++ (BFTask *)copyItemAsyncAtPath:(NSString *)fromPath toPath:(NSString *)toPath { + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + NSError *error = nil; + [[NSFileManager defaultManager] copyItemAtPath:fromPath toPath:toPath error:&error]; + if (error) { + return [BFTask taskWithError:error]; + } + return nil; + }]; +} + ++ (BFTask *)moveItemAsyncAtPath:(NSString *)fromPath toPath:(NSString *)toPath { + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + NSError *error = nil; + [[NSFileManager defaultManager] moveItemAtPath:fromPath toPath:toPath error:&error]; + if (error) { + return [BFTask taskWithError:error]; + } + return nil; + }]; +} + ++ (BFTask *)moveContentsOfDirectoryAsyncAtPath:(NSString *)fromPath + toDirectoryAtPath:(NSString *)toPath + executor:(BFExecutor *)executor { + if ([fromPath isEqualToString:toPath]) { + return [BFTask taskWithResult:nil]; + } + + return [[[self createDirectoryIfNeededAsyncAtPath:toPath + withOptions:PFFileManagerOptionSkipBackup + executor:executor] continueWithSuccessBlock:^id(BFTask *task) { + NSError *error = nil; + NSArray *contents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:fromPath + error:&error]; + if (error) { + return [BFTask taskWithError:error]; + } + return contents; + }] continueWithSuccessBlock:^id(BFTask *task) { + NSArray *contents = task.result; + if ([contents count] == 0) { + return nil; + } + + NSMutableArray *tasks = [NSMutableArray arrayWithCapacity:[contents count]]; + for (NSString *path in contents) { + BFTask *task = [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + NSError *error = nil; + NSString *fromFilePath = [fromPath stringByAppendingPathComponent:path]; + NSString *toFilePath = [toPath stringByAppendingPathComponent:path]; + [[NSFileManager defaultManager] moveItemAtPath:fromFilePath + toPath:toFilePath + error:&error]; + if (error) { + return [BFTask taskWithError:error]; + } + return nil; + }]; + [tasks addObject:task]; + } + return [BFTask taskForCompletionOfAllTasks:tasks]; + }]; +} + ++ (BFTask *)removeDirectoryContentsAsyncAtPath:(NSString *)path { + return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:path]; + + NSFileManager *fileManager = [NSFileManager defaultManager]; + + NSError *error = nil; + NSArray *fileNames = [fileManager contentsOfDirectoryAtPath:path error:&error]; + if (error) { + PFLogError(PFLoggingTagCommon, @"Failed to list directory: %@", path); + return [BFTask taskWithError:error]; + } + + NSMutableArray *fileTasks = [NSMutableArray array]; + for (NSString *fileName in fileNames) { + NSString *filePath = [path stringByAppendingPathComponent:fileName]; + BFTask *fileTask = [[self removeItemAtPathAsync:filePath withFileLock:NO] continueWithBlock:^id(BFTask *task) { + if (task.faulted) { + PFLogError(PFLoggingTagCommon, @"Failed to delete file: %@ with error: %@", filePath, task.error); + } + return task; + }]; + [fileTasks addObject:fileTask]; + } + return [BFTask taskForCompletionOfAllTasks:fileTasks]; + }] continueWithBlock:^id(BFTask *task) { + [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:path]; + return task; + }]; +} + ++ (BFTask *)removeItemAtPathAsync:(NSString *)path { + return [self removeItemAtPathAsync:path withFileLock:YES]; +} + ++ (BFTask *)removeItemAtPathAsync:(NSString *)path withFileLock:(BOOL)useFileLock { + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + if (useFileLock) { + [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:path]; + } + NSFileManager *fileManager = [NSFileManager defaultManager]; + if ([fileManager fileExistsAtPath:path]) { + NSError *error = nil; + [[NSFileManager defaultManager] removeItemAtPath:path error:&error]; + if (error) { + if (useFileLock) { + [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:path]; + } + return [BFTask taskWithError:error]; + } + } + if (useFileLock) { + [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:path]; + } + return nil; + }]; +} + +///-------------------------------------- +#pragma mark - Instance +///-------------------------------------- + +#pragma mark Init + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithApplicationIdentifier:(NSString *)applicationIdentifier + applicationGroupIdentifier:(NSString *)applicationGroupIdentifier { + self = [super init]; + if (!self) return nil; + + _applicationIdentifier = [applicationIdentifier copy]; + _applicationGroupIdentifier = [applicationGroupIdentifier copy]; + + return self; +} + +#pragma mark Public + +- (NSString *)parseDefaultDataDirectoryPath { + // NSHomeDirectory: Returns the path to either the user's or application's + // home directory, depending on the platform. Sandboxed by default on iOS. +#if PARSE_IOS_ONLY + NSString *directoryPath = nil; + if (self.applicationGroupIdentifier) { + NSURL *containerPath = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:self.applicationGroupIdentifier]; + directoryPath = [[containerPath path] stringByAppendingPathComponent:_PFFileManagerParseDirectoryName]; + directoryPath = [directoryPath stringByAppendingPathComponent:self.applicationIdentifier]; + } else { + return [self parseLocalSandboxDataDirectoryPath]; + } +#else + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES); + NSString *directoryPath = [paths firstObject]; + directoryPath = [directoryPath stringByAppendingPathComponent:_PFFileManagerParseDirectoryName]; + directoryPath = [directoryPath stringByAppendingPathComponent:self.applicationIdentifier]; +#endif + + BFTask *createDirectoryTask = [[self class] createDirectoryIfNeededAsyncAtPath:directoryPath + withOptions:PFFileManagerOptionSkipBackup + executor:[BFExecutor immediateExecutor]]; + [createDirectoryTask waitForResult:nil withMainThreadWarning:NO]; + + return directoryPath; +} + +- (NSString *)parseLocalSandboxDataDirectoryPath { +#if TARGET_OS_IPHONE + NSString *library = [NSHomeDirectory() stringByAppendingPathComponent:@"Library"]; + NSString *privateDocuments = [library stringByAppendingPathComponent:@"Private Documents"]; + NSString *directoryPath = [privateDocuments stringByAppendingPathComponent:_PFFileManagerParseDirectoryName]; + BFTask *createDirectoryTask = [[self class] createDirectoryIfNeededAsyncAtPath:directoryPath + withOptions:PFFileManagerOptionSkipBackup + executor:[BFExecutor immediateExecutor]]; + [createDirectoryTask waitForResult:nil withMainThreadWarning:NO]; + + return directoryPath; +#else + return [self parseDefaultDataDirectoryPath]; +#endif +} + +- (NSString *)parseDataDirectoryPath_DEPRECATED { + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); + NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder + NSString *parseDirPath = [documentsDirectory stringByAppendingPathComponent:_PFFileManagerParseDirectoryName]; + + // If this old directory is still on disk, but empty, delete it. + if ([[NSFileManager defaultManager] fileExistsAtPath:parseDirPath]) { + NSError *error = nil; + NSArray *contents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:parseDirPath error:&error]; + if (error == nil && [contents count] == 0) { + [[NSFileManager defaultManager] removeItemAtPath:parseDirPath error:nil]; + } + } + + return parseDirPath; +} + +- (NSString *)parseDataItemPathForPathComponent:(NSString *)pathComponent { + NSFileManager *fileManager = [NSFileManager defaultManager]; + + NSString *currentLocation = [[self parseDefaultDataDirectoryPath] stringByAppendingPathComponent:pathComponent]; + if (![fileManager fileExistsAtPath:currentLocation]) { + NSString *deprecatedDir = [self parseDataDirectoryPath_DEPRECATED]; + NSString *deprecatedLocation = [deprecatedDir stringByAppendingPathComponent:pathComponent]; + if ([fileManager fileExistsAtPath:deprecatedLocation]) { + [fileManager moveItemAtPath:deprecatedLocation toPath:currentLocation error:nil]; + // If the deprecated dir is still on disk, delete it. + if ([fileManager fileExistsAtPath:deprecatedDir]) { + NSError *error = nil; + NSArray *contents = [fileManager contentsOfDirectoryAtPath:deprecatedDir error:&error]; + if (!error && [contents count] == 0) { + [fileManager removeItemAtPath:deprecatedDir error:nil]; + } + } + } + } + return currentLocation; +} + +- (NSString *)parseCacheItemPathForPathComponent:(NSString *)component { + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); + NSString *folderPath = [paths firstObject]; + folderPath = [folderPath stringByAppendingPathComponent:_PFFileManagerParseDirectoryName]; +#if !TARGET_OS_IPHONE + // We append the applicationId in case the OS X application isn't sandboxed, + // to avoid collisions in the generic ~/Library/Caches/Parse/------ dir. + folderPath = [folderPath stringByAppendingPathComponent:self.applicationIdentifier]; +#endif + folderPath = [folderPath stringByAppendingPathComponent:component]; + return [folderPath stringByStandardizingPath]; +} + +///-------------------------------------- +#pragma mark - Private +///-------------------------------------- + +// Skips all backups on the provided path. ++ (BOOL)_skipBackupOnPath:(NSString *)path { + if (path == nil) { + return NO; + } + + NSError *error = nil; + + NSURL *url = [NSURL fileURLWithPath:path]; + BOOL success = [url setResourceValue:@YES forKey:NSURLIsExcludedFromBackupKey error:&error]; + if (!success) { + PFLogError(PFLoggingTagCommon, + @"Unable to exclude %@ from backup with error: %@", [url lastPathComponent], error); + } + + return success; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFGeoPointPrivate.h b/BreakingBad/Pods/Parse/Parse/Internal/PFGeoPointPrivate.h new file mode 100644 index 0000000..7883ef9 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFGeoPointPrivate.h @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +# import + +extern const double EARTH_RADIUS_MILES; +extern const double EARTH_RADIUS_KILOMETERS; + +@class PFGeoPoint; + +@interface PFGeoPoint (Private) + +// Internal commands + +/* + Gets the encoded format for an GeoPoint. + */ +- (NSDictionary *)encodeIntoDictionary; + +/*! + Creates an GeoPoint from its encoded format. + */ ++ (instancetype)geoPointWithDictionary:(NSDictionary *)dictionary; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFHash.h b/BreakingBad/Pods/Parse/Parse/Internal/PFHash.h new file mode 100644 index 0000000..e97af69 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFHash.h @@ -0,0 +1,21 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +extern NSUInteger PFIntegerPairHash(NSUInteger a, NSUInteger b); + +extern NSUInteger PFDoublePairHash(double a, double b); + +extern NSUInteger PFDoubleHash(double d); + +extern NSUInteger PFLongHash(unsigned long long l); + +extern NSString *PFMD5HashFromData(NSData *data); +extern NSString *PFMD5HashFromString(NSString *string); diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFHash.m b/BreakingBad/Pods/Parse/Parse/Internal/PFHash.m new file mode 100644 index 0000000..4fb33f8 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFHash.m @@ -0,0 +1,76 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFHash.h" + +#import + +// +// Thank you Thomas Wang for 32/64 bit mix hash +// http://www.concentric.net/~Ttwang/tech/inthash.htm +// +// Above link is now dead, please visit +// http://web.archive.org/web/20121102023700/http://www.concentric.net/~Ttwang/tech/inthash.htm +// + +extern NSUInteger PFIntegerPairHash(NSUInteger a, NSUInteger b) { + return PFLongHash(((unsigned long long)a) << 32 | b); +} + +extern NSUInteger PFDoublePairHash(double a, double b) { + return PFIntegerPairHash(PFDoubleHash(a), PFDoubleHash(b)); +} + +extern NSUInteger PFDoubleHash(double d) { + union { + double key; + uint64_t bits; + } u; + u.key = d; + return PFLongHash(u.bits); +} + +extern NSUInteger PFLongHash(unsigned long long l) { + l = (~l) + (l << 18); // key = (key << 18) - key - 1; + l ^= (l >> 31); + l *= 21; // key = (key + (key << 2)) + (key << 4); + l ^= (l >> 11); + l += (l << 6); + l ^= (l >> 22); + return (NSUInteger)l; +} + +extern NSString *PFMD5HashFromData(NSData *data) { + unsigned char md[CC_MD5_DIGEST_LENGTH]; + + // NOTE: `__block` variables of a struct type seem to be bugged. The compiler emits instructions to read + // from the stack past where they're supposed to exist. This fixes that, by only using a traditional pointer. + CC_MD5_CTX ctx_val = { 0 }; + CC_MD5_CTX *ctx_ptr = &ctx_val; + CC_MD5_Init(ctx_ptr); + [data enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) { + CC_MD5_Update(ctx_ptr , bytes, (CC_LONG)byteRange.length); + }]; + CC_MD5_Final(md, ctx_ptr); + + NSString *string = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", + md[0], md[1], + md[2], md[3], + md[4], md[5], + md[6], md[7], + md[8], md[9], + md[10], md[11], + md[12], md[13], + md[14], md[15]]; + return string; +} + +extern NSString *PFMD5HashFromString(NSString *string) { + return PFMD5HashFromData([string dataUsingEncoding:NSUTF8StringEncoding]); +} diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFInternalUtils.h b/BreakingBad/Pods/Parse/Parse/Internal/PFInternalUtils.h new file mode 100644 index 0000000..eedf09e --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFInternalUtils.h @@ -0,0 +1,76 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFEncoder.h" + +@class PFFileManager; +@class PFKeychainStore; +@class PFNetworkCommand; + +@interface PFInternalUtils : NSObject + ++ (NSString *)parseServerURLString; ++ (void)setParseServer:(NSString *)server; + ++ (NSNumber *)fileSizeOfFileAtPath:(NSString *)filePath error:(NSError **)error; + +/** + Clears system time zone cache, gets the name of the time zone + and caches it. This method is completely thread-safe. + */ ++ (NSString *)currentSystemTimeZoneName; + +/** + * Performs selector on the target, only if the target and selector are non-nil, + * as well as target responds to selector + */ ++ (void)safePerformSelector:(SEL)selector withTarget:(id)target object:(id)object object:(id)anotherObject; + ++ (NSNumber *)addNumber:(NSNumber *)first withNumber:(NSNumber *)second; + +// +// Given an NSDictionary/NSArray/NSNumber/NSString even nested ones +// Generates a cache key that can be used to identify this object ++ (NSString *)cacheKeyForObject:(id)object; + +/**! + * Does a deep traversal of every item in object, calling block on every one. + * @param object The object or array to traverse deeply. + * @param block The block to call for every item. It will be passed the item + * as an argument. If it returns a truthy value, that value will replace the + * item in its parent container. + * @return The result of calling block on the top-level object itself. + **/ ++ (id)traverseObject:(id)object usingBlock:(id (^)(id object))block; + +/*! + This method will split an array into multiple arrays, each with up to maximum components count. + + @param array Array to split. + @param components Number of components that should be used as a max per each subarray. + + @return Array of arrays constructed by splitting the array. + */ ++ (NSArray *)arrayBySplittingArray:(NSArray *)array withMaximumComponentsPerSegment:(NSUInteger)components; + ++ (id)_stringWithFormat:(NSString *)format arguments:(NSArray *)arguments; +@end + +@interface PFJSONCacheItem : NSObject + +@property (nonatomic, copy, readonly) NSString *hashValue; + +- (instancetype)initWithObject:(id)object; ++ (PFJSONCacheItem *)cacheFromObject:(id)object; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFInternalUtils.m b/BreakingBad/Pods/Parse/Parse/Internal/PFInternalUtils.m new file mode 100644 index 0000000..0b585bb --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFInternalUtils.m @@ -0,0 +1,298 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFInternalUtils.h" + +#include +#include + +#import + +#import "PFACLPrivate.h" +#import "PFAssert.h" +#import "PFDateFormatter.h" +#import "BFTask+Private.h" +#import "PFFieldOperation.h" +#import "PFFile_Private.h" +#import "PFGeoPointPrivate.h" +#import "PFKeyValueCache.h" +#import "PFKeychainStore.h" +#import "PFLogging.h" +#import "PFEncoder.h" +#import "PFObjectPrivate.h" +#import "PFRelationPrivate.h" +#import "PFUserPrivate.h" +#import "Parse.h" +#import "PFFileManager.h" +#import "PFJSONSerialization.h" +#import "PFMultiProcessFileLockController.h" +#import "PFHash.h" + +#if TARGET_OS_IOS +#import "PFProduct.h" +#endif + +static NSString *parseServer_; + +@implementation PFInternalUtils + ++ (void)initialize { + if (self == [PFInternalUtils class]) { + [self setParseServer:kPFParseServer]; + } +} + ++ (NSString *)parseServerURLString { + return parseServer_; +} + +// Useful for testing. +// Beware of race conditions if you call setParseServer while something else may be using +// httpClient. ++ (void)setParseServer:(NSString *)server { + parseServer_ = [server copy]; +} + ++ (NSString *)currentSystemTimeZoneName { + static NSLock *methodLock; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + methodLock = [[NSLock alloc] init]; + }); + + [methodLock lock]; + [NSTimeZone resetSystemTimeZone]; + NSString *systemTimeZoneName = [[NSTimeZone systemTimeZone].name copy]; + [methodLock unlock]; + + return systemTimeZoneName; +} + ++ (void)safePerformSelector:(SEL)selector withTarget:(id)target object:(id)object object:(id)anotherObject { + if (target == nil || selector == nil || ![target respondsToSelector:selector]) { + return; + } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + [target performSelector:selector withObject:object withObject:anotherObject]; +#pragma clang diagnostic pop +} + ++ (NSNumber *)fileSizeOfFileAtPath:(NSString *)filePath error:(NSError **)error { + NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath + error:error]; + return attributes[NSFileSize]; +} + +///-------------------------------------- +#pragma mark - Serialization +///-------------------------------------- + ++ (NSNumber *)addNumber:(NSNumber *)first withNumber:(NSNumber *)second { + const char *objcType = [first objCType]; + + if (strcmp(objcType, @encode(BOOL)) == 0) { + return @([first boolValue] + [second boolValue]); + } else if (strcmp(objcType, @encode(char)) == 0) { + return @([first charValue] + [second charValue]); + } else if (strcmp(objcType, @encode(double)) == 0) { + return @([first doubleValue] + [second doubleValue]); + } else if (strcmp(objcType, @encode(float)) == 0) { + return @([first floatValue] + [second floatValue]); + } else if (strcmp(objcType, @encode(int)) == 0) { + return @([first intValue] + [second intValue]); + } else if (strcmp(objcType, @encode(long)) == 0) { + return @([first longValue] + [second longValue]); + } else if (strcmp(objcType, @encode(long long)) == 0) { + return @([first longLongValue] + [second longLongValue]); + } else if (strcmp(objcType, @encode(short)) == 0) { + return @([first shortValue] + [second shortValue]); + } else if (strcmp(objcType, @encode(unsigned char)) == 0) { + return @([first unsignedCharValue] + [second unsignedCharValue]); + } else if (strcmp(objcType, @encode(unsigned int)) == 0) { + return @([first unsignedIntValue] + [second unsignedIntValue]); + } else if (strcmp(objcType, @encode(unsigned long)) == 0) { + return @([first unsignedLongValue] + [second unsignedLongValue]); + } else if (strcmp(objcType, @encode(unsigned long long)) == 0) { + return @([first unsignedLongLongValue] + [second unsignedLongLongValue]); + } else if (strcmp(objcType, @encode(unsigned short)) == 0) { + return @([first unsignedShortValue] + [second unsignedShortValue]); + } + + // Fall back to int? + return @([first intValue] + [second intValue]); +} + +///-------------------------------------- +#pragma mark - CacheKey +///-------------------------------------- + +#pragma mark Public + ++ (NSString *)cacheKeyForObject:(id)object { + NSMutableString *string = [NSMutableString string]; + [self appendObject:object toString:string]; + return string; +} + +#pragma mark Private + ++ (void)appendObject:(id)object toString:(NSMutableString *)string { + if ([object isKindOfClass:[NSDictionary class]]) { + [self appendDictionary:object toString:string]; + } else if ([object isKindOfClass:[NSArray class]]) { + [self appendArray:object toString:string]; + } else if ([object isKindOfClass:[NSString class]]) { + [string appendFormat:@"\"%@\"", object]; + } else if ([object isKindOfClass:[NSNumber class]]) { + [self appendNumber:object toString:string]; + } else if ([object isKindOfClass:[NSNull class]]) { + [self appendNullToString:string]; + } else { + [NSException raise:NSInvalidArgumentException + format:@"Couldn't create cache key from %@", object]; + } +} + ++ (void)appendDictionary:(NSDictionary *)dictionary toString:(NSMutableString *)string { + [string appendString:@"{"]; + + NSArray *keys = [[dictionary allKeys] sortedArrayUsingSelector:@selector(compare:)]; + for (NSString *key in keys) { + [string appendFormat:@"%@:", key]; + + id value = [dictionary objectForKey:key]; + [self appendObject:value toString:string]; + + [string appendString:@","]; + } + + [string appendString:@"}"]; +} + ++ (void)appendArray:(NSArray *)array toString:(NSMutableString *)string { + [string appendString:@"["]; + for (id object in array) { + [self appendObject:object toString:string]; + [string appendString:@","]; + } + [string appendString:@"]"]; +} + ++ (void)appendNumber:(NSNumber *)number toString:(NSMutableString *)string { + [string appendFormat:@"%@", [number stringValue]]; +} + ++ (void)appendNullToString:(NSMutableString *)string { + [string appendString:@"null"]; +} + ++ (id)traverseObject:(id)object usingBlock:(id (^)(id object))block seenObjects:(NSMutableSet *)seen { + if ([object isKindOfClass:[PFObject class]]) { + if ([seen containsObject:object]) { + // We've already visited this object in this call. + return object; + } + [seen addObject:object]; + + for (NSString *key in [(PFObject *)object allKeys]) { + [self traverseObject:object[key] usingBlock:block seenObjects:seen]; + } + + return block(object); + } else if ([object isKindOfClass:[NSArray class]]) { + NSMutableArray *newArray = [object mutableCopy]; + [object enumerateObjectsUsingBlock:^(id child, NSUInteger idx, BOOL *stop) { + id newChild = [self traverseObject:child usingBlock:block seenObjects:seen]; + if (newChild) { + newArray[idx] = newChild; + } + }]; + return block(newArray); + } else if ([object isKindOfClass:[NSDictionary class]]) { + NSMutableDictionary *newDictionary = [object mutableCopy]; + [object enumerateKeysAndObjectsUsingBlock:^(id key, id child, BOOL *stop) { + id newChild = [self traverseObject:child usingBlock:block seenObjects:seen]; + if (newChild) { + newDictionary[key] = newChild; + } + }]; + return block(newDictionary); + } + + return block(object); +} + ++ (id)traverseObject:(id)object usingBlock:(id (^)(id object))block { + NSMutableSet *seen = [[NSMutableSet alloc] init]; + id result = [self traverseObject:object usingBlock:block seenObjects:seen]; + return result; +} + ++ (NSArray *)arrayBySplittingArray:(NSArray *)array withMaximumComponentsPerSegment:(NSUInteger)components { + if ([array count] <= components) { + return @[ array ]; + } + + NSMutableArray *splitArray = [NSMutableArray array]; + NSInteger index = 0; + + while (index < [array count]) { + NSInteger length = MIN([array count] - index, components); + + NSArray *subarray = [array subarrayWithRange:NSMakeRange(index, length)]; + [splitArray addObject:subarray]; + + index += length; + } + + return splitArray; +} + ++ (id)_stringWithFormat:(NSString *)format arguments:(NSArray *)arguments { + // We cannot reliably construct a va_list for 64-bit, so hard code up to N args. + const int maxNumArgs = 10; + PFRangeAssert(arguments.count <= maxNumArgs, @"Maximum of %d format args allowed", maxNumArgs); + NSMutableArray *args = [arguments mutableCopy]; + for (NSUInteger i = arguments.count; i < maxNumArgs; i++) { + [args addObject:@""]; + } + return [NSString stringWithFormat:format, + args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]]; +} + +@end + +// A PFJSONCacheItem is a pairing of a json string with its hash value. +// This is used by our mutable container checking. +@implementation PFJSONCacheItem + +- (instancetype)initWithObject:(id)object { + if (self = [super init]) { + NSObject *encoded = [[PFPointerOrLocalIdObjectEncoder objectEncoder] encodeObject:object]; + NSData *jsonData = [PFJSONSerialization dataFromJSONObject:encoded]; + _hashValue = PFMD5HashFromData(jsonData); + } + return self; +} + +- (BOOL)isEqual:(id)otherCache { + if (![otherCache isKindOfClass:[PFJSONCacheItem class]]) { + return NO; + } + + return [self.hashValue isEqualToString:[otherCache hashValue]]; +} + ++ (PFJSONCacheItem *)cacheFromObject:(id)object { + return [[PFJSONCacheItem alloc] initWithObject:object]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFJSONSerialization.h b/BreakingBad/Pods/Parse/Parse/Internal/PFJSONSerialization.h new file mode 100644 index 0000000..e6fb16c --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFJSONSerialization.h @@ -0,0 +1,65 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface PFJSONSerialization : NSObject + +/*! + The object passed in must be one of: + * NSString + * NSNumber + * NSDictionary + * NSArray + * NSNull + + @returns NSData of JSON representing the passed in object. + */ ++ (nullable NSData *)dataFromJSONObject:(id)object; + +/*! + The object passed in must be one of: + * NSString + * NSNumber + * NSDictionary + * NSArray + * NSNull + + @returns NSString of JSON representing the passed in object. + */ ++ (nullable NSString *)stringFromJSONObject:(id)object; + +/*! + Takes a JSON string and returns the NSDictionaries and NSArrays in it. + You should still call decodeObject if you want Parse types. + */ ++ (nullable id)JSONObjectFromData:(NSData *)data; + +/*! + Takes a JSON string and returns the NSDictionaries and NSArrays in it. + You should still call decodeObject if you want Parse types. + */ ++ (nullable id)JSONObjectFromString:(NSString *)string; + +/*! + @abstract Takes a file path to json file and returns the NSDictionaries and NSArrays in it. + + @description You should still call decodeObject if you want Parse types. + + @param filePath File path to a file. + + @return Decoded object. + */ ++ (nullable id)JSONObjectFromFileAtPath:(NSString *)filePath; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFJSONSerialization.m b/BreakingBad/Pods/Parse/Parse/Internal/PFJSONSerialization.m new file mode 100644 index 0000000..c2c72fe --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFJSONSerialization.m @@ -0,0 +1,72 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFJSONSerialization.h" + +#import "PFAssert.h" +#import "PFLogging.h" + +@implementation PFJSONSerialization + ++ (NSData *)dataFromJSONObject:(id)object { + NSError *error = nil; + NSData *data = [NSJSONSerialization dataWithJSONObject:object options:0 error:&error]; + PFParameterAssert(data && !error, @"PFObject values must be serializable to JSON"); + + return data; +} + ++ (NSString *)stringFromJSONObject:(id)object { + NSData *data = [self dataFromJSONObject:object]; + return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; +} + ++ (id)JSONObjectFromData:(NSData *)data { + NSError *error = nil; + id object = [NSJSONSerialization JSONObjectWithData:data + options:0 + error:&error]; + if (!object || error != nil) { + PFLogError(PFLoggingTagCommon, @"JSON deserialization failed with error: %@", [error description]); + } + + return object; +} + ++ (id)JSONObjectFromString:(NSString *)string { + return [self JSONObjectFromData:[string dataUsingEncoding:NSUTF8StringEncoding]]; +} + ++ (id)JSONObjectFromFileAtPath:(NSString *)filePath { + NSInputStream *stream = [NSInputStream inputStreamWithFileAtPath:filePath]; + if (!stream) { + return nil; + } + + [stream open]; + + NSError *streamError = stream.streamError; + // Check if stream failed to open, because there is no such file. + if (streamError && [streamError.domain isEqualToString:NSPOSIXErrorDomain] && streamError.code == ENOENT) { + [stream close]; // Still close the stream. + return nil; + } + + NSError *error = nil; + id object = [NSJSONSerialization JSONObjectWithStream:stream options:0 error:&error]; + if (!object || error) { + PFLogError(PFLoggingTagCommon, @"JSON deserialization failed with error: %@", error.description); + } + + [stream close]; + + return object; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFKeychainStore.h b/BreakingBad/Pods/Parse/Parse/Internal/PFKeychainStore.h new file mode 100644 index 0000000..3d7c06e --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFKeychainStore.h @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +extern NSString *const PFKeychainStoreDefaultService; + +/*! + PFKeychainStore is NSUserDefaults-like wrapper on top of Keychain. + It supports any object, with NSCoding support. Every object is serialized using NSKeyedArchiver. + + All objects are available after the first device unlock and are not backed up. + */ +@interface PFKeychainStore : NSObject + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithService:(NSString *)service NS_DESIGNATED_INITIALIZER; + +- (nullable id)objectForKey:(NSString *)key; +- (nullable id)objectForKeyedSubscript:(NSString *)key; + +- (BOOL)setObject:(nullable id)object forKey:(NSString *)key; +- (BOOL)setObject:(nullable id)object forKeyedSubscript:(NSString *)key; +- (BOOL)removeObjectForKey:(NSString *)key; +- (BOOL)removeAllObjects; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFKeychainStore.m b/BreakingBad/Pods/Parse/Parse/Internal/PFKeychainStore.m new file mode 100644 index 0000000..747ff10 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFKeychainStore.m @@ -0,0 +1,200 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFKeychainStore.h" + +#import "PFAssert.h" +#import "PFLogging.h" +#import "PFMacros.h" +#import "Parse.h" + +NSString *const PFKeychainStoreDefaultService = @"com.parse.sdk"; + +@interface PFKeychainStore () { + dispatch_queue_t _synchronizationQueue; +} + +@property (nonatomic, copy, readonly) NSString *service; +@property (nonatomic, copy, readonly) NSDictionary *keychainQueryTemplate; + +@end + +@implementation PFKeychainStore + +///-------------------------------------- +#pragma mark - Class +///-------------------------------------- + ++ (NSDictionary *)_keychainQueryTemplateForService:(NSString *)service { + NSMutableDictionary *query = [NSMutableDictionary dictionary]; + if ([service length]) { + query[(__bridge NSString *)kSecAttrService] = service; + } + query[(__bridge NSString *)kSecClass] = (__bridge id)kSecClassGenericPassword; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wtautological-pointer-compare" + if (&kSecAttrAccessible != nil) { + query[(__bridge id)kSecAttrAccessible] = (__bridge id)kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly; + } +#pragma clang diagnostic pop + + return [query copy]; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithService:(NSString *)service { + self = [super init]; + if (!self) return nil; + + _service = service; + _keychainQueryTemplate = [[self class] _keychainQueryTemplateForService:service]; + + NSString *queueLabel = [NSString stringWithFormat:@"com.parse.keychain.%@", service]; + _synchronizationQueue = dispatch_queue_create([queueLabel UTF8String], DISPATCH_QUEUE_CONCURRENT); + PFMarkDispatchQueue(_synchronizationQueue); + + return self; +} + +///-------------------------------------- +#pragma mark - Read +///-------------------------------------- + +- (id)objectForKey:(NSString *)key { + __block NSData *data = nil; + dispatch_sync(_synchronizationQueue, ^{ + data = [self _dataForKey:key]; + }); + + if (data) { + id object = nil; + @try { + object = [NSKeyedUnarchiver unarchiveObjectWithData:data]; + } + @catch (NSException *exception) {} + + return object; + } + return nil; +} + +- (id)objectForKeyedSubscript:(NSString *)key { + return [self objectForKey:key]; +} + +- (NSData *)_dataForKey:(NSString *)key { + NSMutableDictionary *query = [self.keychainQueryTemplate mutableCopy]; + + query[(__bridge NSString *)kSecAttrAccount] = key; + query[(__bridge NSString *)kSecMatchLimit] = (__bridge id)kSecMatchLimitOne; + query[(__bridge NSString *)kSecReturnData] = (__bridge id)kCFBooleanTrue; + + //recover data + CFDataRef data = NULL; + OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&data); + if (status != errSecSuccess && status != errSecItemNotFound) { + PFLogError(PFLoggingTagCommon, + @"PFKeychainStore failed to get object for key '%@', with error: %ld", key, (long)status); + } + return CFBridgingRelease(data); +} + +///-------------------------------------- +#pragma mark - Write +///-------------------------------------- + +- (BOOL)setObject:(id)object forKey:(NSString *)key { + NSParameterAssert(key != nil); + + if (!object) { + return [self removeObjectForKey:key]; + } + + NSData *data = [NSKeyedArchiver archivedDataWithRootObject:object]; + if (!data) { + return NO; + } + + NSMutableDictionary *query = [self.keychainQueryTemplate mutableCopy]; + query[(__bridge NSString *)kSecAttrAccount] = key; + + NSDictionary *update = @{ (__bridge NSString *)kSecValueData : data }; + + __block OSStatus status = errSecSuccess; + dispatch_barrier_sync(_synchronizationQueue,^{ + if ([self _dataForKey:key]) { + status = SecItemUpdate((__bridge CFDictionaryRef)query, (__bridge CFDictionaryRef)update); + } else { + [query addEntriesFromDictionary:update]; + status = SecItemAdd((__bridge CFDictionaryRef)query, NULL); + } + }); + + if (status != errSecSuccess) { + PFLogError(PFLoggingTagCommon, + @"PFKeychainStore failed to set object for key '%@', with error: %ld", key, (long)status); + } + + return (status == errSecSuccess); +} + +- (BOOL)setObject:(id)object forKeyedSubscript:(NSString *)key { + return [self setObject:object forKey:key]; +} + +- (BOOL)removeObjectForKey:(NSString *)key { + __block BOOL value = NO; + dispatch_barrier_sync(_synchronizationQueue, ^{ + value = [self _removeObjectForKey:key]; + }); + return value; +} + +- (BOOL)_removeObjectForKey:(NSString *)key { + PFAssertIsOnDispatchQueue(_synchronizationQueue); + NSMutableDictionary *query = [self.keychainQueryTemplate mutableCopy]; + query[(__bridge NSString *)kSecAttrAccount] = key; + + OSStatus status = SecItemDelete((__bridge CFDictionaryRef)query); + return (status == errSecSuccess); +} + +- (BOOL)removeAllObjects { + NSMutableDictionary *query = [self.keychainQueryTemplate mutableCopy]; + query[(__bridge id)kSecReturnAttributes] = (__bridge id)kCFBooleanTrue; + query[(__bridge id)kSecMatchLimit] = (__bridge id)kSecMatchLimitAll; + + __block BOOL value = YES; + dispatch_barrier_sync(_synchronizationQueue, ^{ + CFArrayRef result = NULL; + OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&result); + if (status != errSecSuccess) { + return; + } + + for (NSDictionary *item in CFBridgingRelease(result)) { + NSString *key = item[(__bridge id)kSecAttrAccount]; + value = [self _removeObjectForKey:key]; + if (!value) { + return; + } + } + }); + return value; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFLocationManager.h b/BreakingBad/Pods/Parse/Parse/Internal/PFLocationManager.h new file mode 100644 index 0000000..b1f115c --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFLocationManager.h @@ -0,0 +1,56 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@class CLLocation; +@class CLLocationManager; + +#if TARGET_OS_IPHONE + +@class UIApplication; + +#endif + +typedef void(^PFLocationManagerLocationUpdateBlock)(CLLocation *location, NSError *error); + +/*! + PFLocationManager is an internal class which wraps a CLLocationManager and + returns an updated CLLocation via the provided block. + + When -addBlockForCurrentLocation is called, the CLLocationManager's + -startUpdatingLocations is called, and upon CLLocationManagerDelegate callback + (either success or failure), any handlers that were passed to this class will + be called _once_ with the updated location, then removed. The CLLocationManager + stopsUpdatingLocation upon a single failure or success case, so that the next + location request is guaranteed a speedily returned CLLocation. + */ +@interface PFLocationManager : NSObject + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithSystemLocationManager:(CLLocationManager *)manager; + +#if TARGET_OS_IPHONE + +- (instancetype)initWithSystemLocationManager:(CLLocationManager *)manager + application:(UIApplication *)application + bundle:(NSBundle *)bundle NS_DESIGNATED_INITIALIZER; + +#endif + +///-------------------------------------- +#pragma mark - Current Location +///-------------------------------------- + +- (void)addBlockForCurrentLocation:(PFLocationManagerLocationUpdateBlock)handler; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFLocationManager.m b/BreakingBad/Pods/Parse/Parse/Internal/PFLocationManager.m new file mode 100644 index 0000000..82286bc --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFLocationManager.m @@ -0,0 +1,153 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFLocationManager.h" + +#import + +#import "PFConstants.h" +#import "PFGeoPoint.h" +#import "PFApplication.h" + +@interface PFLocationManager () + +@property (nonatomic, strong) CLLocationManager *locationManager; +@property (nonatomic, strong) NSBundle *bundle; +@property (nonatomic, strong) UIApplication *application; + +// We use blocks and not BFTasks because Tasks don't gain us much - we still +// have to manually hold onto them so that they can be resolved in the +// CLLocationManager callback. +@property (nonatomic, strong) NSMutableSet *blockSet; + +@end + +@implementation PFLocationManager + +///-------------------------------------- +#pragma mark - CLLocationManager +///-------------------------------------- + ++ (CLLocationManager *)_newSystemLocationManager { + __block CLLocationManager *manager = nil; + + // CLLocationManager should be created only on main thread, as it needs a run loop to serve delegate callbacks + dispatch_block_t block = ^{ + manager = [[CLLocationManager alloc] init]; + }; + if ([[NSThread currentThread] isMainThread]) { + block(); + } else { + dispatch_sync(dispatch_get_main_queue(), block); + } + return manager; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + CLLocationManager *manager = [[self class] _newSystemLocationManager]; + return [self initWithSystemLocationManager:manager]; +} + +- (instancetype)initWithSystemLocationManager:(CLLocationManager *)manager { + return [self initWithSystemLocationManager:manager + application:[PFApplication currentApplication].systemApplication + bundle:[NSBundle mainBundle]]; +} + +- (instancetype)initWithSystemLocationManager:(CLLocationManager *)manager + application:(UIApplication *)application + bundle:(NSBundle *)bundle { + self = [super init]; + if (!self) return nil; + + _blockSet = [NSMutableSet setWithCapacity:1]; + _locationManager = manager; + _locationManager.delegate = self; + _bundle = bundle; + _application = application; + + return self; +} + +///-------------------------------------- +#pragma mark - Dealloc +///-------------------------------------- + +- (void)dealloc { + _locationManager.delegate = nil; +} + +///-------------------------------------- +#pragma mark - Public +///-------------------------------------- + +- (void)addBlockForCurrentLocation:(PFLocationManagerLocationUpdateBlock)handler { + @synchronized (self.blockSet) { + [self.blockSet addObject:[handler copy]]; + } + +#if TARGET_OS_WATCH + if ([self.bundle objectForInfoDictionaryKey:@"NSLocationWhenInUseUsageDescription"] != nil) { + [self.locationManager requestWhenInUseAuthorization]; + } else { + [self.locationManager requestAlwaysAuthorization]; + } + [self.locationManager requestLocation]; +#elif TARGET_OS_IOS + if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) { + if (self.application.applicationState != UIApplicationStateBackground && + [self.bundle objectForInfoDictionaryKey:@"NSLocationWhenInUseUsageDescription"] != nil) { + [self.locationManager requestWhenInUseAuthorization]; + } else { + [self.locationManager requestAlwaysAuthorization]; + } + } + [self.locationManager startUpdatingLocation]; +#elif TARGET_OS_MAC + [self.locationManager startUpdatingLocation]; +#endif +} + +///-------------------------------------- +#pragma mark - CLLocationManagerDelegate +///-------------------------------------- + +- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { + CLLocation *location = [locations lastObject]; + + [manager stopUpdatingLocation]; + + NSMutableSet *callbacks = [NSMutableSet setWithCapacity:1]; + @synchronized (self.blockSet) { + [callbacks setSet:self.blockSet]; + [self.blockSet removeAllObjects]; + } + for (PFLocationManagerLocationUpdateBlock block in callbacks) { + block(location, nil); + } +} + +- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { + [manager stopUpdatingLocation]; + + NSMutableSet *callbacks = nil; + @synchronized (self.blockSet) { + callbacks = [self.blockSet copy]; + [self.blockSet removeAllObjects]; + } + for (PFLocationManagerLocationUpdateBlock block in callbacks) { + block(nil, error); + } +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFLogger.h b/BreakingBad/Pods/Parse/Parse/Internal/PFLogger.h new file mode 100644 index 0000000..2a8858e --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFLogger.h @@ -0,0 +1,47 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +# import + +typedef uint8_t PFLoggingTag; + +@interface PFLogger : NSObject + +@property (atomic, assign) PFLogLevel logLevel; + +///-------------------------------------- +/// @name Shared Logger +///-------------------------------------- + +/*! +A shared instance of `PFLogger` that should be used for all logging. + +@returns An shared singleton instance of `PFLogger`. +*/ ++ (instancetype)sharedLogger; //TODO: (nlutsenko) Convert to use an instance everywhere instead of a shared singleton. + +///-------------------------------------- +/// @name Logging Messages +///-------------------------------------- + +/*! + Logs a message at a specific level for a tag. + If current logging level doesn't include this level - this method does nothing. + + @param level Logging Level + @param tag Logging Tag + @param format Format to use for the log message. + */ +- (void)logMessageWithLevel:(PFLogLevel)level + tag:(PFLoggingTag)tag + format:(NSString *)format, ... NS_FORMAT_FUNCTION(3, 4); + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFLogger.m b/BreakingBad/Pods/Parse/Parse/Internal/PFLogger.m new file mode 100644 index 0000000..d309096 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFLogger.m @@ -0,0 +1,105 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFLogger.h" + +#import "PFApplication.h" +#import "PFLogging.h" + +@implementation PFLogger + +///-------------------------------------- +#pragma mark - Class +///-------------------------------------- + ++ (NSString *)_descriptionForLoggingTag:(PFLoggingTag)tag { + NSString *description = nil; + switch (tag) { + case PFLoggingTagCommon: + break; + case PFLoggingTagCrashReporting: + description = @"Crash Reporting"; + break; + default: + break; + } + return description; +} + ++ (NSString *)_descriptionForLogLevel:(PFLogLevel)logLevel { + NSString *description = nil; + switch (logLevel) { + case PFLogLevelNone: + break; + case PFLogLevelError: + description = @"Error"; + break; + case PFLogLevelWarning: + description = @"Warning"; + break; + case PFLogLevelInfo: + description = @"Info"; + break; + default: + break; + } + return description; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + ++ (instancetype)sharedLogger { + static PFLogger *logger; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + logger = [[PFLogger alloc] init]; + }); + return logger; +} + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _logLevel = ([PFApplication currentApplication].appStoreEnvironment ? PFLogLevelNone : PFLogLevelWarning); + + return self; +} + +///-------------------------------------- +#pragma mark - Logging Messages +///-------------------------------------- + +- (void)logMessageWithLevel:(PFLogLevel)level + tag:(PFLoggingTag)tag + format:(NSString *)format, ... NS_FORMAT_FUNCTION(3, 4) { + if (level > self.logLevel || level == PFLogLevelNone || !format) { + return; + } + + va_list args; + va_start(args, format); + + NSMutableString *message = [NSMutableString stringWithFormat:@"[%@]", [[self class] _descriptionForLogLevel:level]]; + + NSString *tagDescription = [[self class] _descriptionForLoggingTag:tag]; + if (tagDescription) { + [message appendFormat:@"[%@]", tagDescription]; + } + + [message appendFormat:@": %@", format]; + + NSLogv(message, args); + + va_end(args); +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFLogging.h b/BreakingBad/Pods/Parse/Parse/Internal/PFLogging.h new file mode 100644 index 0000000..90a4410 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFLogging.h @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#ifndef Parse_PFLogging_h +#define Parse_PFLogging_h + +# import + +#import "PFLogger.h" + +static const PFLoggingTag PFLoggingTagCommon = 0; +static const PFLoggingTag PFLoggingTagCrashReporting = 100; + +#define PFLog(level, loggingTag, frmt, ...) \ +[[PFLogger sharedLogger] logMessageWithLevel:level tag:loggingTag format:(frmt), ##__VA_ARGS__] + +#define PFLogError(tag, frmt, ...) \ +PFLog(PFLogLevelError, (tag), (frmt), ##__VA_ARGS__) + +#define PFLogWarning(tag, frmt, ...) \ +PFLog(PFLogLevelWarning, (tag), (frmt), ##__VA_ARGS__) + +#define PFLogInfo(tag, frmt, ...) \ +PFLog(PFLogLevelInfo, (tag), (frmt), ##__VA_ARGS__) + +#define PFLogDebug(tag, frmt, ...) \ +PFLog(PFLogLevelDebug, (tag), (frmt), ##__VA_ARGS__) + +#define PFLogException(exception) \ +PFLogError(PFLoggingTagCommon, @"Caught \"%@\" with reason \"%@\"%@", \ +exception.name, exception, \ +[exception callStackSymbols] ? [NSString stringWithFormat:@":\n%@.", [exception callStackSymbols]] : @"") + +#endif diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFMacros.h b/BreakingBad/Pods/Parse/Parse/Internal/PFMacros.h new file mode 100644 index 0000000..4f53214 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFMacros.h @@ -0,0 +1,137 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import +#import + +#ifndef Parse_PFMacros_h +#define Parse_PFMacros_h + +/*! + This macro allows to create NSSet via subscript. + */ +#define PF_SET(...) [NSSet setWithObjects:__VA_ARGS__, nil] + +/*! + This macro is a handy thing for converting libSystem objects to (void *) pointers. + If you are targeting OSX 10.8+ and iOS 6.0+ - this is no longer required. + */ +#if OS_OBJECT_USE_OBJC + #define PFOSObjectPointer(object) \ + (__bridge void *)(object) +#else + #define PFOSObjectPointer(object) \ + (void *)(object) +#endif + +/*! + Mark a queue in order to be able to check PFAssertIsOnMarkedQueue. + */ +#define PFMarkDispatchQueue(queue) \ +dispatch_queue_set_specific((queue), \ + PFOSObjectPointer(queue), \ + PFOSObjectPointer(queue), \ + NULL) + +///-------------------------------------- +/// @name Memory Management +/// +/// The following macros are influenced and include portions of libextobjc. +///-------------------------------------- + +/*! + Creates a __weak version of the variable provided, + which can later be safely used or converted into strong variable via @strongify. + */ +#define weakify(var) \ +try {} @catch (...) {} \ +__weak __typeof__(var) var ## _weak = var; + +/*! + Creates a strong shadow reference of the variable provided. + Variable must have previously been passed to @weakify. + */ +#define strongify(var) \ +try {} @catch (...) {} \ +__strong __typeof__(var) var = var ## _weak; + +///-------------------------------------- +/// @name KVC +///-------------------------------------- + +/*! + This macro ensures that object.key exists at compile time. + It can accept a chained key path. + */ +#define keypath(TYPE, PATH) \ +(((void)(NO && ((void)((TYPE *)(nil)).PATH, NO)), # PATH)) + +///-------------------------------------- +/// @name Runtime +///-------------------------------------- + +/*! + Using objc_msgSend directly is bad, very bad. Doing so without casting could result in stack-smashing on architectures + (*cough* x86 *cough*) that use strange methods of returning values of different types. + + The objc_msgSend_safe macro ensures that we properly cast the function call to use the right conventions when passing + parameters and getting return values. This also fixes some issues with ARC and objc_msgSend directly, though strange + things can happen when receiving values from NS_RETURNS_RETAINED methods. + */ +#define objc_msgSend(...) _Pragma("GCC error \"Use objc_msgSend_safe() instead!\"") +#define objc_msgSend_safe(returnType, argTypes...) ((returnType (*)(id, SEL, ##argTypes))(objc_msgSend)) + +/*! + This exists because if we throw an exception from dispatch_sync, it doesn't 'bubble up' to the calling thread. + This simply wraps dispatch_sync and properly throws the exception back to the calling thread, not the thread that + the exception was originally raised on. + + @param queue The queue to execute on + @param block The block to execute + + @see dispatch_sync + */ +#define pf_sync_with_throw(queue, block) \ + do { \ + __block NSException *caught = nil; \ + dispatch_sync(queue, ^{ \ + @try { block(); } \ + @catch (NSException *ex) { \ + caught = ex; \ + } \ + }); \ + if (caught) @throw caught; \ + } while (0) + +/*! + To prevent retain cycles by OCMock, this macro allows us to capture a weak reference to return from a stubbed method. + */ +#define andReturnWeak(variable) _andDo( \ + ({ \ + __weak typeof(variable) variable ## _weak = (variable); \ + ^(NSInvocation *invocation) { \ + __autoreleasing typeof(variable) variable ## _block = variable ## _weak; \ + [invocation setReturnValue:&(variable ## _block)]; \ + }; \ + }) \ +) + +/*! + This exists to use along with bolts generic tasks. Instead of returning a BFTask with no generic type, or a generic + type of 'NSNull' when there is no usable result from a task, we use the type 'PFVoid', which will always have a value + of 'nil'. + + This allows us to more easily descern between methods that have not yet updated the return type of their tasks, as well + as provide a more enforced API contract to the caller (as sending any message to PFVoid will result in a compile time + error). + */ +@class _PFVoid_Nonexistant; +typedef _PFVoid_Nonexistant *PFVoid; + +#endif diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFMulticastDelegate.h b/BreakingBad/Pods/Parse/Parse/Internal/PFMulticastDelegate.h new file mode 100644 index 0000000..7a54dc3 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFMulticastDelegate.h @@ -0,0 +1,31 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +/*! + Represents an event that can be subscribed to by multiple observers. + */ +@interface PFMulticastDelegate : NSObject { +@private + NSMutableArray *callbacks; +} + +/*! + Subscribes a block for callback. + + Important: if you ever plan to be able to unsubscribe the block, you must copy the block + before passing it to subscribe, and use the same instance for unsubscribe. + */ +- (void)subscribe:(void(^)(id result, NSError *error))block; +- (void)unsubscribe:(void(^)(id result, NSError *error))block; +- (void)invoke:(id)result error:(NSError *)error; +- (void)clear; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFMulticastDelegate.m b/BreakingBad/Pods/Parse/Parse/Internal/PFMulticastDelegate.m new file mode 100644 index 0000000..9d49fa8 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFMulticastDelegate.m @@ -0,0 +1,39 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFMulticastDelegate.h" + +@implementation PFMulticastDelegate + +- (instancetype)init { + if (self = [super init]) { + callbacks = [[NSMutableArray alloc] init]; + } + return self; +} + +- (void)subscribe:(void(^)(id result, NSError *error))block { + [callbacks addObject:block]; +} + +- (void)unsubscribe:(void(^)(id result, NSError *error))block { + [callbacks removeObject:block]; +} + +- (void)invoke:(id)result error:(NSError *)error { + NSArray *callbackCopy = [callbacks copy]; + for (void (^block)(id result, NSError *error) in callbackCopy) { + block(result, error); + } +} +- (void)clear { + [callbacks removeAllObjects]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFNetworkCommand.h b/BreakingBad/Pods/Parse/Parse/Internal/PFNetworkCommand.h new file mode 100644 index 0000000..6502923 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFNetworkCommand.h @@ -0,0 +1,47 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@protocol PFNetworkCommand + +///-------------------------------------- +/// @name Properties +///-------------------------------------- + +@property (nonatomic, copy, readonly) NSString *sessionToken; +@property (nonatomic, copy, readonly) NSString *operationSetUUID; + +// If this command creates an object that is referenced by some other command, +// then this localId will be updated with the new objectId that is returned. +@property (nonatomic, copy) NSString *localId; + +///-------------------------------------- +/// @name Encoding/Decoding +///-------------------------------------- + ++ (instancetype)commandFromDictionaryRepresentation:(NSDictionary *)dictionary; +- (NSDictionary *)dictionaryRepresentation; + ++ (BOOL)isValidDictionaryRepresentation:(NSDictionary *)dictionary; + +///-------------------------------------- +/// @name Local Identifiers +///-------------------------------------- + +/*! + Replaces all local ids in this command with the correct objectId for that object. + This should be called before sending the command over the network, so that there + are no local ids sent to the Parse Cloud. If any local id refers to an object that + has not yet been saved, and thus has no objectId, then this method raises an + exception. + */ +- (void)resolveLocalIds; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFPinningEventuallyQueue.h b/BreakingBad/Pods/Parse/Parse/Internal/PFPinningEventuallyQueue.h new file mode 100644 index 0000000..17a0499 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFPinningEventuallyQueue.h @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "PFEventuallyQueue.h" + +@interface PFPinningEventuallyQueue : PFEventuallyQueue + +///-------------------------------------- +/// @name Init +///-------------------------------------- + ++ (instancetype)newDefaultPinningEventuallyQueueWithCommandRunner:(id)commandRunner; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFPinningEventuallyQueue.m b/BreakingBad/Pods/Parse/Parse/Internal/PFPinningEventuallyQueue.m new file mode 100644 index 0000000..0d039d2 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFPinningEventuallyQueue.m @@ -0,0 +1,327 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFPinningEventuallyQueue.h" + +#import +#import + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFCommandResult.h" +#import "PFErrorUtilities.h" +#import "PFEventuallyPin.h" +#import "PFEventuallyQueue_Private.h" +#import "PFMacros.h" +#import "PFObjectPrivate.h" +#import "PFOperationSet.h" +#import "PFRESTCommand.h" +#import "PFTaskQueue.h" + +@interface PFPinningEventuallyQueue () { + /*! + Queue for reading/writing eventually operations from LDS. Makes all reads/writes atomic + operations. + */ + PFTaskQueue *_taskQueue; + + /*! + List of `PFEventuallyPin.uuid` that are currently queued in `_processingQueue`. This contains + uuid of PFEventuallyPin that's enqueued. + */ + NSMutableArray *_eventuallyPinUUIDQueue; + + /*! + Map of eventually operation UUID to matching PFEventuallyPin. This contains PFEventuallyPin + that's enqueued. + */ + NSMutableDictionary *_uuidToEventuallyPin; + + /*! + Map OperationSetUUID to PFOperationSet + */ + NSMutableDictionary *_operationSetUUIDToOperationSet; + + /*! + Map OperationSetUUID to PFEventuallyPin + */ + NSMutableDictionary *_operationSetUUIDToEventuallyPin; +} + +@end + +@implementation PFPinningEventuallyQueue + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + ++ (instancetype)newDefaultPinningEventuallyQueueWithCommandRunner:(id)commandRunner { + PFPinningEventuallyQueue *queue = [[self alloc] initWithCommandRunner:commandRunner + maxAttemptsCount:PFEventuallyQueueDefaultMaxAttemptsCount + retryInterval:PFEventuallyQueueDefaultTimeoutRetryInterval]; + [queue start]; + return queue; +} + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithCommandRunner:(id)commandRunner + maxAttemptsCount:(NSUInteger)attemptsCount + retryInterval:(NSTimeInterval)retryInterval { + self = [super initWithCommandRunner:commandRunner maxAttemptsCount:attemptsCount retryInterval:retryInterval]; + if (!self) return nil; + + _taskQueue = [[PFTaskQueue alloc] init]; + + dispatch_sync(_synchronizationQueue, ^{ + _eventuallyPinUUIDQueue = [NSMutableArray array]; + _uuidToEventuallyPin = [NSMutableDictionary dictionary]; + _operationSetUUIDToOperationSet = [NSMutableDictionary dictionary]; + _operationSetUUIDToEventuallyPin = [NSMutableDictionary dictionary]; + }); + + // Populate Eventually Pin to make sure we pre-loaded any existing data. + [self _populateEventuallyPinAsync]; + + return self; +} + +///-------------------------------------- +#pragma mark - Controlling Queue +///-------------------------------------- + +- (void)removeAllCommands { + [super removeAllCommands]; + + BFTask *removeTask = [_taskQueue enqueue:^BFTask *(BFTask *toAwait) { + return [toAwait continueWithBlock:^id(BFTask *task) { + return [[PFEventuallyPin findAllEventuallyPin] continueWithSuccessBlock:^id(BFTask *task) { + NSArray *eventuallyPins = task.result; + NSMutableArray *unpinTasks = [NSMutableArray array]; + + for (PFEventuallyPin *eventuallyPin in eventuallyPins) { + [unpinTasks addObject:[eventuallyPin unpinInBackgroundWithName:PFEventuallyPinPinName]]; + } + + return [BFTask taskForCompletionOfAllTasks:unpinTasks]; + }]; + }]; + }]; + + [removeTask waitForResult:nil]; + // Clear in-memory data + dispatch_sync(_synchronizationQueue, ^{ + [_eventuallyPinUUIDQueue removeAllObjects]; + [_uuidToEventuallyPin removeAllObjects]; + [_operationSetUUIDToEventuallyPin removeAllObjects]; + [_operationSetUUIDToOperationSet removeAllObjects]; + }); +} + +- (void)_simulateReboot { + [super _simulateReboot]; + + [_eventuallyPinUUIDQueue removeAllObjects]; + [_uuidToEventuallyPin removeAllObjects]; + [_operationSetUUIDToEventuallyPin removeAllObjects]; + [_operationSetUUIDToOperationSet removeAllObjects]; + + [self _populateEventuallyPinAsync]; +} + +///-------------------------------------- +#pragma mark - PFEventuallyQueueSubclass +///-------------------------------------- + +- (NSString *)_newIdentifierForCommand:(id)command { + return [[NSUUID UUID] UUIDString]; +} + +- (NSArray *)_pendingCommandIdentifiers { + [[self _populateEventuallyPinAsync] waitForResult:nil]; + + NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { + PFEventuallyPin *pin = _uuidToEventuallyPin[evaluatedObject]; + // Filter out all pins that don't have `operationSet` data ready yet + // to make sure we send the command with all the changes. + if (pin.operationSetUUID) { + return (_operationSetUUIDToEventuallyPin[pin.operationSetUUID] != nil); + } + return YES; + }]; + return [_eventuallyPinUUIDQueue filteredArrayUsingPredicate:predicate]; +} + +- (id)_commandWithIdentifier:(NSString *)identifier error:(NSError **)error { + // Should be populated by `_pendingCommandIdentifiers` + PFEventuallyPin *eventuallyPin = _uuidToEventuallyPin[identifier]; + + // TODO (hallucinogen): this is a temporary hack. We need to change this to match the Android one. + // We need to construct the command just right when we want to execute it. Or else it will ask for localId + // when there's unsaved child. + switch (eventuallyPin.type) { + case PFEventuallyPinTypeSave: { + PFOperationSet *operationSet = _operationSetUUIDToOperationSet[eventuallyPin.operationSetUUID]; + return [eventuallyPin.object _constructSaveCommandForChanges:operationSet + sessionToken:eventuallyPin.sessionToken + objectEncoder:[PFPointerObjectEncoder objectEncoder]]; + } + case PFEventuallyPinTypeDelete: + return [eventuallyPin.object _currentDeleteCommandWithSessionToken:eventuallyPin.sessionToken]; + default: + break; + } + + id command = eventuallyPin.command; + if (!command && error) { + *error = [PFErrorUtilities errorWithCode:kPFErrorInternalServer + message:@"Failed to construct eventually command from cache." + shouldLog:NO]; + } + return command; +} + +- (BFTask *)_enqueueCommandInBackground:(id)command + object:(PFObject *)object + identifier:(NSString *)identifier { + return [_taskQueue enqueue:^BFTask *(BFTask *toAwait) { + return [toAwait continueAsyncWithBlock:^id(BFTask *task){ + return [PFEventuallyPin pinEventually:object forCommand:command withUUID:identifier]; + }]; + }]; +} + +- (BFTask *)_didFinishRunningCommand:(id)command + withIdentifier:(NSString *)identifier + resultTask:(BFTask *)resultTask { + // Delete the commands regardless, even if it failed. Otherwise we'll just keep trying it forever. + // We don't need to wait for taskQueue since it will not be queued again since this + // PFEventuallyPin is still in `_eventuallyPinUUIDQueue` + PFEventuallyPin *eventuallyPin = _uuidToEventuallyPin[identifier]; + BFTask *unpinTask = [eventuallyPin unpinInBackgroundWithName:PFEventuallyPinPinName]; + unpinTask = [unpinTask continueWithBlock:^id(BFTask *task) { + // Remove data from memory. + dispatch_sync(_synchronizationQueue, ^{ + [_uuidToEventuallyPin removeObjectForKey:identifier]; + [_eventuallyPinUUIDQueue removeObject:identifier]; + }); + + if (resultTask.cancelled || resultTask.exception || resultTask.error) { + return resultTask; + } + + if (eventuallyPin.operationSetUUID) { + // Remove only if the operation succeeded + dispatch_sync(_synchronizationQueue, ^{ + [_operationSetUUIDToOperationSet removeObjectForKey:eventuallyPin.operationSetUUID]; + [_operationSetUUIDToEventuallyPin removeObjectForKey:eventuallyPin.operationSetUUID]; + }); + } + + PFCommandResult *commandResult = resultTask.result; + switch (eventuallyPin.type) { + case PFEventuallyPinTypeSave: { + + task = [task continueWithBlock:^id(BFTask *task) { + return [eventuallyPin.object handleSaveResultAsync:commandResult.result]; + }]; + break; + } + + case PFEventuallyPinTypeDelete: { + task = [task continueWithBlock:^id(BFTask *task) { + PFObject *object = eventuallyPin.object; + id controller = [[object class] objectController]; + return [controller processDeleteResultAsync:commandResult.result forObject:object]; + }]; + break; + } + + default:break; + } + + return task; + }]; + + // Notify event listener that we finished running. + return [[super _didFinishRunningCommand:command + withIdentifier:identifier + resultTask:resultTask] continueWithBlock:^id(BFTask *task) { + return unpinTask; + }]; +} + +/*! + Synchronizes PFObject taskQueue (Many) and PFPinningEventuallyQueue taskQueue (None). Each queue will be held + until both are ready, matched on operationSetUUID. Once both are ready, the eventually task will run. + */ +- (BFTask *)_waitForOperationSet:(PFOperationSet *)operationSet eventuallyPin:(PFEventuallyPin *)eventuallyPin { + if (eventuallyPin != nil && eventuallyPin.type != PFEventuallyPinTypeSave) { + // If not save, then we don't have to do anything special. + return [BFTask taskWithResult:nil]; + } + + // TODO (hallucinogen): actually wait for PFObject taskQueue and PFPinningEventually taskQueue + + __block NSString *uuid = nil; + dispatch_sync(_synchronizationQueue, ^{ + if (operationSet != nil) { + uuid = operationSet.uuid; + _operationSetUUIDToOperationSet[uuid] = operationSet; + } + if (eventuallyPin != nil) { + uuid = eventuallyPin.operationSetUUID; + _operationSetUUIDToEventuallyPin[uuid] = eventuallyPin; + } + }); + if (uuid == nil) { + NSException *exception = [NSException exceptionWithName:NSInternalInconsistencyException + reason:@"Either operationSet or eventuallyPin must be set" + userInfo:nil]; + return [BFTask taskWithException:exception]; + } + return [BFTask taskWithResult:nil]; +} + +///-------------------------------------- +#pragma mark - Eventually Pin +///-------------------------------------- + +- (BFTask *)_populateEventuallyPinAsync { + return [_taskQueue enqueue:^BFTask *(BFTask *toAwait) { + return [[toAwait continueWithBlock:^id(BFTask *task) { + return [PFEventuallyPin findAllEventuallyPinWithExcludeUUIDs:_eventuallyPinUUIDQueue]; + }] continueWithSuccessBlock:^id(BFTask *task) { + NSArray *eventuallyPins = task.result; + + for (PFEventuallyPin *eventuallyPin in eventuallyPins) { + // If it's enqueued already, we don't need to run it again. + if ([_eventuallyPinUUIDQueue containsObject:eventuallyPin.operationSetUUID]) { + continue; + } + + // Make sure the data is in memory. + dispatch_sync(_synchronizationQueue, ^{ + [_eventuallyPinUUIDQueue addObject:eventuallyPin.uuid]; + _uuidToEventuallyPin[eventuallyPin.uuid] = eventuallyPin; + }); + + // For now we don't care whether this will fail or not. + [[self _waitForOperationSet:nil eventuallyPin:eventuallyPin] waitForResult:nil]; + } + + return task; + }]; + }]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFReachability.h b/BreakingBad/Pods/Parse/Parse/Internal/PFReachability.h new file mode 100644 index 0000000..8e6242a --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFReachability.h @@ -0,0 +1,61 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +@class PFReachability; + +NS_ASSUME_NONNULL_BEGIN + +typedef NS_ENUM(uint8_t, PFReachabilityState) { + PFReachabilityStateNotReachable, + PFReachabilityStateReachableViaWiFi, + PFReachabilityStateReachableViaCell, +}; + +@protocol PFReachabilityListener + +- (void)reachability:(PFReachability *)reachability didChangeReachabilityState:(PFReachabilityState)state; + +@end + +PF_WATCH_UNAVAILABLE @interface PFReachability : NSObject + +@property (nonatomic, assign, readonly) PFReachabilityState currentState; + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithURL:(NSURL *)url NS_DESIGNATED_INITIALIZER; + +/* + Returns a shared singleton instance, + that could be used to check if Parse is reachable + */ ++ (instancetype)sharedParseReachability; + +/* + Adds a weak reference to the listener, + callbacks are executed on the main thread when status or flags change. + */ +- (void)addListener:(id)listener; + +/* + Removes weak reference to the listener. + */ +- (void)removeListener:(id)listener; + +/* + Removes all references to all listener objects. + */ +- (void)removeAllListeners; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFReachability.m b/BreakingBad/Pods/Parse/Parse/Internal/PFReachability.m new file mode 100644 index 0000000..b14c7e0 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFReachability.m @@ -0,0 +1,213 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFReachability.h" + +#import + +#import "PFAssert.h" +#import "PFConstants.h" +#import "PFLogging.h" +#import "PFMacros.h" +#import "PFWeakValue.h" + +@interface PFReachability () { + dispatch_queue_t _synchronizationQueue; + NSMutableArray *_listenersArray; + + SCNetworkReachabilityRef _networkReachability; +} + +@property (nonatomic, assign, readwrite) SCNetworkReachabilityFlags flags; + +@end + +static void _reachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void *info) { + NSCAssert(info != NULL, @"info was NULL in ReachabilityCallback"); + PFReachability *reachability = (__bridge PFReachability *)info; + reachability.flags = flags; +} + +@implementation PFReachability + +@synthesize flags = _flags; + +///-------------------------------------- +#pragma mark - Class +///-------------------------------------- + ++ (BOOL)_reachabilityStateForFlags:(SCNetworkConnectionFlags)flags { + PFReachabilityState reachabilityState = PFReachabilityStateNotReachable; + + if ((flags & kSCNetworkReachabilityFlagsReachable) == 0) { + // if target host is not reachable + return reachabilityState; + } + + if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0) { + // if target host is reachable and no connection is required + // then we'll assume (for now) that your on Wi-Fi + reachabilityState = PFReachabilityStateReachableViaWiFi; + } + if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) || + (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0)) { + // ... and the connection is on-demand (or on-traffic) if the + // calling application is using the CFSocketStream or higher APIs + if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0) { + // ... and no [user] intervention is needed + reachabilityState = PFReachabilityStateReachableViaWiFi; + } + } + +#if TARGET_OS_IPHONE + if (((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) && + ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0)) { + // ... but WWAN connections are OK if the calling application + // is using the CFNetwork (CFSocketStream?) APIs. + // ... and a network connection is not required (kSCNetworkReachabilityFlagsConnectionRequired) + // which could be et w/connection flag (e.g. IsWWAN) indicating type of connection required. + reachabilityState = PFReachabilityStateReachableViaCell; + } +#endif + + return reachabilityState; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithURL:(NSURL *)url { + self = [super init]; + if (!self) return nil; + + _synchronizationQueue = dispatch_queue_create("com.parse.reachability", DISPATCH_QUEUE_CONCURRENT); + _listenersArray = [NSMutableArray array]; + [self _startMonitoringReachabilityWithURL:url]; + + return self; +} + ++ (instancetype)sharedParseReachability { + static PFReachability *reachability; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSString *serverUrlAsString = [NSString stringWithFormat:@"%@/%ld", kPFParseServer, (long)PARSE_API_VERSION]; + NSURL *serverUrl = [NSURL URLWithString:serverUrlAsString]; + reachability = [[self alloc] initWithURL:serverUrl]; + }); + return reachability; +} + +///-------------------------------------- +#pragma mark - Dealloc +///-------------------------------------- + +- (void)dealloc { + if (_networkReachability != NULL) { + SCNetworkReachabilitySetCallback(_networkReachability, NULL, NULL); + SCNetworkReachabilitySetDispatchQueue(_networkReachability, NULL); + CFRelease(_networkReachability); + _networkReachability = NULL; + } +} + +///-------------------------------------- +#pragma mark - Listeners +///-------------------------------------- + +- (void)addListener:(id)listener { + PFWeakValue *value = [PFWeakValue valueWithWeakObject:listener]; + dispatch_barrier_sync(_synchronizationQueue, ^{ + [_listenersArray addObject:value]; + }); +} + +- (void)removeListener:(id)listener { + dispatch_barrier_sync(_synchronizationQueue, ^{ + [_listenersArray filterUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { + id weakObject = [evaluatedObject weakObject]; + return (weakObject == nil || weakObject == listener); + }]]; + }); +} + +- (void)removeAllListeners { + dispatch_barrier_sync(_synchronizationQueue, ^{ + [_listenersArray removeAllObjects]; + }); +} + +- (void)_notifyAllListeners { + @weakify(self); + dispatch_async(_synchronizationQueue, ^{ + @strongify(self); + PFReachabilityState state = [[self class] _reachabilityStateForFlags:_flags]; + for (PFWeakValue *value in _listenersArray) { + [value.weakObject reachability:self didChangeReachabilityState:state]; + } + + dispatch_barrier_async(_synchronizationQueue, ^{ + [_listenersArray filterUsingPredicate:[NSPredicate predicateWithFormat:@"SELf.weakObject != nil"]]; + }); + }); +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (void)setFlags:(SCNetworkReachabilityFlags)flags { + dispatch_barrier_async(_synchronizationQueue, ^{ + _flags = flags; + [self _notifyAllListeners]; + }); +} + +- (SCNetworkReachabilityFlags)flags { + __block SCNetworkReachabilityFlags flags; + dispatch_sync(_synchronizationQueue, ^{ + flags = _flags; + }); + return flags; +} + +- (PFReachabilityState)currentState { + return [[self class] _reachabilityStateForFlags:self.flags]; +} + +///-------------------------------------- +#pragma mark - Reachability +///-------------------------------------- + +- (void)_startMonitoringReachabilityWithURL:(NSURL *)url { + dispatch_barrier_async(_synchronizationQueue, ^{ + _networkReachability = SCNetworkReachabilityCreateWithName(NULL, [[url host] UTF8String]); + if (_networkReachability != NULL) { + // Set the initial flags + SCNetworkReachabilityFlags flags; + SCNetworkReachabilityGetFlags(_networkReachability, &flags); + self.flags = flags; + + // Set up notification for changes in reachability. + SCNetworkReachabilityContext context = {0, (__bridge void *)(self), NULL, NULL, NULL}; + if (SCNetworkReachabilitySetCallback(_networkReachability, _reachabilityCallback, &context)) { + if (!SCNetworkReachabilitySetDispatchQueue(_networkReachability, _synchronizationQueue)) { + PFLogError(PFLoggingTagCommon, @"Unable to start listening for network connectivity status."); + } + } + } + }); +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFTaskQueue.h b/BreakingBad/Pods/Parse/Parse/Internal/PFTaskQueue.h new file mode 100644 index 0000000..c2a9a3e --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFTaskQueue.h @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +@class BFTask PF_GENERIC(__covariant BFGenericType); + +@interface PFTaskQueue : NSObject + +// The lock for this task queue. +@property (nonatomic, strong, readonly) NSObject *mutex; + +/*! + Enqueues a task created by the given block. Then block is given a task to + await once state is snapshotted (e.g. after capturing session tokens at the + time of the save call. Awaiting this task will wait for the created task's + turn in the queue. + */ +- (BFTask *)enqueue:(BFTask *(^)(BFTask *toAwait))taskStart; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFTaskQueue.m b/BreakingBad/Pods/Parse/Parse/Internal/PFTaskQueue.m new file mode 100644 index 0000000..fb6d111 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFTaskQueue.m @@ -0,0 +1,50 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFTaskQueue.h" + +#import + +@interface PFTaskQueue () + +@property (nonatomic, strong, readwrite) BFTask *tail; +@property (nonatomic, strong, readwrite) NSObject *mutex; + +@end + +@implementation PFTaskQueue + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + self.mutex = [[NSObject alloc] init]; + + return self; +} + +- (BFTask *)enqueue:(BFTask *(^)(BFTask *toAwait))taskStart { + @synchronized (self.mutex) { + BFTask *oldTail = self.tail ?: [BFTask taskWithResult:nil]; + + // The task created by taskStart is responsible for waiting on the + // task passed to it before doing its work. This gives it an opportunity + // to do startup work or save state before waiting for its turn in the queue. + BFTask *task = taskStart(oldTail); + + // The tail task should be dependent on the old tail as well as the newly-created + // task. This prevents cancellation of the new task from causing the queue to run + // out of order. + self.tail = [BFTask taskForCompletionOfAllTasks:@[oldTail, task]]; + + return task; + } +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFWeakValue.h b/BreakingBad/Pods/Parse/Parse/Internal/PFWeakValue.h new file mode 100644 index 0000000..2ff1e47 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFWeakValue.h @@ -0,0 +1,18 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@interface PFWeakValue : NSObject + +@property (nonatomic, weak, readonly) id weakObject; + ++ (instancetype)valueWithWeakObject:(id)object; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PFWeakValue.m b/BreakingBad/Pods/Parse/Parse/Internal/PFWeakValue.m new file mode 100644 index 0000000..a129202 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PFWeakValue.m @@ -0,0 +1,26 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFWeakValue.h" + +@interface PFWeakValue () + +@property (nonatomic, weak, readwrite) id weakObject; + +@end + +@implementation PFWeakValue + ++ (instancetype)valueWithWeakObject:(id)object { + PFWeakValue *value = [[self alloc] init]; + value.weakObject = object; + return value; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/ParseInternal.h b/BreakingBad/Pods/Parse/Parse/Internal/ParseInternal.h new file mode 100644 index 0000000..58e17fc --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/ParseInternal.h @@ -0,0 +1,31 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +# import + +#import "PFAssert.h" +#import "PFCommandCache.h" +#import "PFEventuallyQueue.h" +#import "PFFieldOperation.h" +#import "PFGeoPointPrivate.h" +#import "PFInternalUtils.h" +#import "PFKeyValueCache.h" +#import "PFObjectPrivate.h" +#import "PFUserPrivate.h" +#import "ParseModule.h" + +@interface Parse (ParseModules) + ++ (void)enableParseModule:(id)module; ++ (void)disableParseModule:(id)module; ++ (BOOL)isModuleEnabled:(id)module; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/ParseManager.h b/BreakingBad/Pods/Parse/Parse/Internal/ParseManager.h new file mode 100644 index 0000000..67328ab --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/ParseManager.h @@ -0,0 +1,101 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFDataProvider.h" +#import "PFOfflineStore.h" +#import "PFMacros.h" + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFAnalyticsController; +@class PFCoreManager; +@class PFInstallationIdentifierStore; +@class PFKeychainStore; +@class PFPurchaseController; +@class PFPushManager; + +@interface ParseManager : NSObject + +@property (nonatomic, copy, readonly) NSString *applicationId; +@property (nonatomic, copy, readonly) NSString *clientKey; + +@property (nonatomic, copy, readonly) NSString *applicationGroupIdentifier; +@property (nonatomic, copy, readonly) NSString *containingApplicationIdentifier; + +@property (nonatomic, strong, readonly) PFCoreManager *coreManager; +@property (nonatomic, strong) PFPushManager *pushManager; + +@property (nonatomic, strong) PFAnalyticsController *analyticsController; + +#if TARGET_OS_IOS +@property (nonatomic, strong) PFPurchaseController *purchaseController; +#endif + +///-------------------------------------- +/// @name Initialization +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; + +/*! + Initializes an instance of ParseManager class. + + @param applicationId ApplicationId of Parse app. + @param clientKey ClientKey of Parse app. + + @returns `ParseManager` instance. + */ +- (instancetype)initWithApplicationId:(NSString *)applicationId + clientKey:(NSString *)clientKey NS_DESIGNATED_INITIALIZER; + +/*! + Configures ParseManager with specified properties. + + @param applicationGroupIdentifier Shared AppGroup container identifier. + @param containingApplicationIdentifier Containg application bundle identifier (for extensions). + @param localDataStoreEnabled `BOOL` flag to enable local datastore or not. + */ +- (void)configureWithApplicationGroupIdentifier:(NSString *)applicationGroupIdentifier + containingApplicationIdentifier:(NSString *)containingApplicationIdentifier + enabledLocalDataStore:(BOOL)localDataStoreEnabled; + +///-------------------------------------- +/// @name Offline Store +///-------------------------------------- + +- (void)loadOfflineStoreWithOptions:(PFOfflineStoreOptions)options; + +///-------------------------------------- +/// @name Eventually Queue +///-------------------------------------- + +- (void)clearEventuallyQueue; + +///-------------------------------------- +/// @name Core Manager +///-------------------------------------- + +- (void)unloadCoreManager; + +///-------------------------------------- +/// @name Preloading +///-------------------------------------- + +- (BFTask *)preloadDiskObjectsToMemoryAsync; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/ParseManager.m b/BreakingBad/Pods/Parse/Parse/Internal/ParseManager.m new file mode 100644 index 0000000..74756c3 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/ParseManager.m @@ -0,0 +1,466 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "ParseManager.h" + +#import + +#import "BFTask+Private.h" +#import "PFAnalyticsController.h" +#import "PFAssert.h" +#import "PFCommandCache.h" +#import "PFConfig.h" +#import "PFCoreManager.h" +#import "PFFileManager.h" +#import "PFInstallationIdentifierStore.h" +#import "PFKeyValueCache.h" +#import "PFKeychainStore.h" +#import "PFLogging.h" +#import "PFMultiProcessFileLockController.h" +#import "PFPinningEventuallyQueue.h" +#import "PFPushManager.h" +#import "PFUser.h" +#import "PFURLSessionCommandRunner.h" + +#if !TARGET_OS_WATCH +#import "PFInstallation.h" +#endif + +#if TARGET_OS_IOS +#import "PFPurchaseController.h" +#import "PFProduct.h" +#endif + +static NSString *const _ParseApplicationIdFileName = @"applicationId"; + +@interface ParseManager () +{ + dispatch_queue_t _offlineStoreAccessQueue; + dispatch_queue_t _eventuallyQueueAccessQueue; + dispatch_queue_t _keychainStoreAccessQueue; + dispatch_queue_t _fileManagerAccessQueue; + dispatch_queue_t _installationIdentifierStoreAccessQueue; + dispatch_queue_t _commandRunnerAccessQueue; + dispatch_queue_t _keyValueCacheAccessQueue; + dispatch_queue_t _coreManagerAccessQueue; + dispatch_queue_t _pushManagerAccessQueue; + dispatch_queue_t _controllerAccessQueue; + + dispatch_queue_t _preloadQueue; +} + +@end + +@implementation ParseManager + +@synthesize keychainStore = _keychainStore; +@synthesize fileManager = _fileManager; +@synthesize offlineStore = _offlineStore; +@synthesize eventuallyQueue = _eventuallyQueue; +@synthesize installationIdentifierStore = _installationIdentifierStore; +@synthesize commandRunner = _commandRunner; +@synthesize keyValueCache = _keyValueCache; +@synthesize coreManager = _coreManager; +@synthesize analyticsController = _analyticsController; +@synthesize pushManager = _pushManager; +#if TARGET_OS_IOS +@synthesize purchaseController = _purchaseController; +#endif + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithApplicationId:(NSString *)applicationId clientKey:(NSString *)clientKey { + self = [super init]; + if (!self) return nil; + + _offlineStoreAccessQueue = dispatch_queue_create("com.parse.offlinestore.access", DISPATCH_QUEUE_CONCURRENT); + _eventuallyQueueAccessQueue = dispatch_queue_create("com.parse.eventuallyqueue.access", DISPATCH_QUEUE_SERIAL); + _keychainStoreAccessQueue = dispatch_queue_create("com.parse.keychainstore.access", DISPATCH_QUEUE_SERIAL); + _fileManagerAccessQueue = dispatch_queue_create("com.parse.filemanager.access", DISPATCH_QUEUE_SERIAL); + _installationIdentifierStoreAccessQueue = dispatch_queue_create("com.parse.installationidentifierstore.access", + DISPATCH_QUEUE_SERIAL); + _commandRunnerAccessQueue = dispatch_queue_create("com.parse.commandrunner.access", DISPATCH_QUEUE_SERIAL); + _keyValueCacheAccessQueue = dispatch_queue_create("com.parse.keyvaluecache.access", DISPATCH_QUEUE_SERIAL); + _coreManagerAccessQueue = dispatch_queue_create("com.parse.coreManager.access", DISPATCH_QUEUE_SERIAL); + _pushManagerAccessQueue = dispatch_queue_create("com.parse.pushManager.access", DISPATCH_QUEUE_SERIAL); + _controllerAccessQueue = dispatch_queue_create("com.parse.controller.access", DISPATCH_QUEUE_SERIAL); + _preloadQueue = dispatch_queue_create("com.parse.preload", DISPATCH_QUEUE_SERIAL); + + _applicationId = [applicationId copy]; + _clientKey = [clientKey copy]; + + return self; +} + +- (void)configureWithApplicationGroupIdentifier:(NSString *)applicationGroupIdentifier + containingApplicationIdentifier:(NSString *)containingApplicationIdentifier + enabledLocalDataStore:(BOOL)localDataStoreEnabled { + _applicationGroupIdentifier = [applicationGroupIdentifier copy]; + _containingApplicationIdentifier = [containingApplicationIdentifier copy]; + + // Migrate any data if it's required. + [self _migrateSandboxDataToApplicationGroupContainerIfNeeded]; + + // Make sure the data on disk for Parse is for the current application. + [self _checkApplicationId]; + + if (localDataStoreEnabled) { + PFOfflineStoreOptions options = (_applicationGroupIdentifier ? + PFOfflineStoreOptionAlwaysFetchFromSQLite : 0); + [self loadOfflineStoreWithOptions:options]; + } +} + +///-------------------------------------- +#pragma mark - Offline Store +///-------------------------------------- + +- (void)loadOfflineStoreWithOptions:(PFOfflineStoreOptions)options { + PFConsistencyAssert(!_offlineStore, @"Can't load offline store more than once."); + dispatch_barrier_sync(_offlineStoreAccessQueue, ^{ + _offlineStore = [[PFOfflineStore alloc] initWithFileManager:self.fileManager options:options]; + }); +} + +- (void)setOfflineStore:(PFOfflineStore *)offlineStore { + dispatch_barrier_sync(_offlineStoreAccessQueue, ^{ + _offlineStore = offlineStore; + }); +} + +- (PFOfflineStore *)offlineStore { + __block PFOfflineStore *offlineStore = nil; + dispatch_sync(_offlineStoreAccessQueue, ^{ + offlineStore = _offlineStore; + }); + return offlineStore; +} + +- (BOOL)isOfflineStoreLoaded { + return (self.offlineStore != nil); +} + +///-------------------------------------- +#pragma mark - Eventually Queue +///-------------------------------------- + +- (PFEventuallyQueue *)eventuallyQueue { + __block PFEventuallyQueue *queue = nil; + dispatch_sync(_eventuallyQueueAccessQueue, ^{ + if (!_eventuallyQueue || + (self.offlineStoreLoaded && [_eventuallyQueue isKindOfClass:[PFCommandCache class]]) || + (!self.offlineStoreLoaded && [_eventuallyQueue isKindOfClass:[PFPinningEventuallyQueue class]])) { + + id commandRunner = self.commandRunner; + + PFCommandCache *commandCache = [self _newCommandCache]; + _eventuallyQueue = (self.offlineStoreLoaded ? + [PFPinningEventuallyQueue newDefaultPinningEventuallyQueueWithCommandRunner:commandRunner] + : + commandCache); + + // We still need to clear out the old command cache even if we're using Pinning in case + // anything is left over when the user upgraded. Checking number of pending and then + // clearing should be enough. + if (self.offlineStoreLoaded && commandCache.commandCount > 0) { + [commandCache removeAllCommands]; + } + } + queue = _eventuallyQueue; + }); + return queue; +} + +- (PFCommandCache *)_newCommandCache { + // Construct the path to the cache directory in /Library/Private Documents/Parse/Command Cache + // This isn't in the "Library/Caches" directory because we don't want the OS clearing it for us. + // It falls under the category of "offline data". + // See https://developer.apple.com/library/ios/#qa/qa1699/_index.html + NSString *folderPath = [self.fileManager parseDefaultDataDirectoryPath]; + return [PFCommandCache newDefaultCommandCacheWithCommandRunner:self.commandRunner cacheFolderPath:folderPath]; +} + +- (void)clearEventuallyQueue { + dispatch_sync(_preloadQueue, ^{ + dispatch_sync(_eventuallyQueueAccessQueue, ^{ + [_eventuallyQueue removeAllCommands]; + [_eventuallyQueue pause]; + _eventuallyQueue = nil; + }); + }); +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +#pragma mark KeychainStore + +- (PFKeychainStore *)keychainStore { + __block PFKeychainStore *store = nil; + dispatch_sync(_keychainStoreAccessQueue, ^{ + if (!_keychainStore) { + NSString *bundleIdentifier = (_containingApplicationIdentifier ?: [[NSBundle mainBundle] bundleIdentifier]); + NSString *service = [NSString stringWithFormat:@"%@.%@", bundleIdentifier, PFKeychainStoreDefaultService]; + _keychainStore = [[PFKeychainStore alloc] initWithService:service]; + } + store = _keychainStore; + }); + return store; +} + +#pragma mark FileManager + +- (PFFileManager *)fileManager { + __block PFFileManager *fileManager = nil; + dispatch_sync(_fileManagerAccessQueue, ^{ + if (!_fileManager) { + _fileManager = [[PFFileManager alloc] initWithApplicationIdentifier:self.applicationId + applicationGroupIdentifier:self.applicationGroupIdentifier]; + } + fileManager = _fileManager; + }); + return fileManager; +} + +#pragma mark InstallationIdentifierStore + +- (PFInstallationIdentifierStore *)installationIdentifierStore { + __block PFInstallationIdentifierStore *store = nil; + dispatch_sync(_installationIdentifierStoreAccessQueue, ^{ + if (!_installationIdentifierStore) { + _installationIdentifierStore = [[PFInstallationIdentifierStore alloc] initWithFileManager:self.fileManager]; + } + store = _installationIdentifierStore; + }); + return store; +} + +#pragma mark CommandRunner + +- (id)commandRunner { + __block id runner = nil; + dispatch_sync(_commandRunnerAccessQueue, ^{ + if (!_commandRunner) { + _commandRunner = [PFURLSessionCommandRunner commandRunnerWithDataSource:self + applicationId:self.applicationId + clientKey:self.clientKey]; + } + runner = _commandRunner; + }); + return runner; +} + +#pragma mark KeyValueCache + +- (PFKeyValueCache *)keyValueCache { + __block PFKeyValueCache *cache = nil; + dispatch_sync(_keyValueCacheAccessQueue, ^{ + if (!_keyValueCache) { + NSString *path = [self.fileManager parseCacheItemPathForPathComponent:@"../ParseKeyValueCache/"]; + _keyValueCache = [[PFKeyValueCache alloc] initWithCacheDirectoryPath:path]; + } + cache = _keyValueCache; + }); + return cache; +} + +#pragma mark CoreManager + +- (PFCoreManager *)coreManager { + __block PFCoreManager *manager = nil; + dispatch_sync(_coreManagerAccessQueue, ^{ + if (!_coreManager) { + _coreManager = [PFCoreManager managerWithDataSource:self]; + } + manager = _coreManager; + }); + return manager; +} + +- (void)unloadCoreManager { + dispatch_sync(_coreManagerAccessQueue, ^{ + _coreManager = nil; + }); +} + +#if !TARGET_OS_WATCH + +#pragma mark PushManager + +- (PFPushManager *)pushManager { + __block PFPushManager *manager = nil; + dispatch_sync(_pushManagerAccessQueue, ^{ + if (!_pushManager) { + _pushManager = [PFPushManager managerWithCommonDataSource:self coreDataSource:self.coreManager]; + } + manager = _pushManager; + }); + return manager; +} + +- (void)setPushManager:(PFPushManager *)pushManager { + dispatch_sync(_pushManagerAccessQueue, ^{ + _pushManager = pushManager; + }); +} + +#endif + +#pragma mark AnalyticsController + +- (PFAnalyticsController *)analyticsController { + __block PFAnalyticsController *controller = nil; + dispatch_sync(_controllerAccessQueue, ^{ + if (!_analyticsController) { + _analyticsController = [[PFAnalyticsController alloc] initWithDataSource:self]; + } + controller = _analyticsController; + }); + return controller; +} + +- (void)setAnalyticsController:(PFAnalyticsController *)analyticsController { + dispatch_sync(_controllerAccessQueue, ^{ + if (_analyticsController != analyticsController) { + _analyticsController = analyticsController; + } + }); +} + +#if TARGET_OS_IOS + +#pragma mark PurchaseController + +- (PFPurchaseController *)purchaseController { + __block PFPurchaseController *controller = nil; + dispatch_sync(_controllerAccessQueue, ^{ + if (!_purchaseController) { + _purchaseController = [PFPurchaseController controllerWithCommandRunner:self.commandRunner + fileManager:self.fileManager + bundle:[NSBundle mainBundle]]; + } + controller = _purchaseController; + }); + return controller; +} + +- (void)setPurchaseController:(PFPurchaseController *)purchaseController { + dispatch_sync(_controllerAccessQueue, ^{ + _purchaseController = purchaseController; + }); +} + +#endif + +///-------------------------------------- +#pragma mark - Preloading +///-------------------------------------- + +- (BFTask *)preloadDiskObjectsToMemoryAsync { + @weakify(self); + return [BFTask taskFromExecutor:[BFExecutor executorWithDispatchQueue:_preloadQueue] withBlock:^id{ + @strongify(self); + [PFUser currentUser]; + [PFConfig currentConfig]; +#if !TARGET_OS_WATCH + [PFInstallation currentInstallation]; +#endif + + [self eventuallyQueue]; + + return nil; + }]; +} + +///-------------------------------------- +#pragma mark - ApplicationId +///-------------------------------------- + +/*! + Verifies that the data stored on disk for Parse was generated using the same application that is running now. + */ +- (void)_checkApplicationId { + NSFileManager *systemFileManager = [NSFileManager defaultManager]; + + // Make sure the current version of the cache is for this application id. + NSString *applicationIdFile = [self.fileManager parseDataItemPathForPathComponent:_ParseApplicationIdFileName]; + [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:applicationIdFile]; + + if ([systemFileManager fileExistsAtPath:applicationIdFile]) { + NSError *error = nil; + NSString *applicationId = [NSString stringWithContentsOfFile:applicationIdFile + encoding:NSUTF8StringEncoding + error:&error]; + if (!error && ![applicationId isEqualToString:self.applicationId]) { + // The application id has changed, so everything on disk is invalid. + [self.keychainStore removeAllObjects]; + [self.keyValueCache removeAllObjects]; + + NSArray *tasks = @[ + // Remove the contents only, but don't delete the folder. + [PFFileManager removeDirectoryContentsAsyncAtPath:[self.fileManager parseDefaultDataDirectoryPath]], + // Completely remove everything in deprecated folder. + [PFFileManager removeItemAtPathAsync:[self.fileManager parseDataDirectoryPath_DEPRECATED]] + ]; + [[BFTask taskForCompletionOfAllTasks:tasks] waitForResult:nil withMainThreadWarning:NO]; + } + } + + if (![systemFileManager fileExistsAtPath:applicationIdFile]) { + NSError *error = nil; + BFTask *writeTask = [PFFileManager writeStringAsync:self.applicationId toFile:applicationIdFile]; + [writeTask waitForResult:&error withMainThreadWarning:NO]; + if (error) { + PFLogError(PFLoggingTagCommon, @"Unable to create applicationId file with error: %@", error); + } + } + + [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:applicationIdFile]; +} + +///-------------------------------------- +#pragma mark - Data Sharing +///-------------------------------------- + +- (void)_migrateSandboxDataToApplicationGroupContainerIfNeeded { + // There is no need to migrate anything on OSX, since we are using globally available folder. +#if TARGET_OS_IOS + // Do nothing if there is no application group container or containing application is specified. + if (!self.applicationGroupIdentifier || self.containingApplicationIdentifier) { + return; + } + + NSString *localSandboxDataPath = [self.fileManager parseLocalSandboxDataDirectoryPath]; + NSString *dataPath = [self.fileManager parseDefaultDataDirectoryPath]; + NSArray *contents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:localSandboxDataPath error:nil]; + if ([contents count] != 0) { + // If moving files fails - just log the error, but don't fail. + NSError *error = nil; + [[PFFileManager moveContentsOfDirectoryAsyncAtPath:localSandboxDataPath + toDirectoryAtPath:dataPath + executor:[BFExecutor immediateExecutor]] waitForResult:&error]; + if (error) { + PFLogError(PFLoggingTagCommon, + @"Failed to migrate local sandbox data to shared container with error %@", + [error localizedDescription]); + } else { + [[PFFileManager removeItemAtPathAsync:localSandboxDataPath withFileLock:NO] waitForResult:nil]; + } + } +#endif +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/ParseModule.h b/BreakingBad/Pods/Parse/Parse/Internal/ParseModule.h new file mode 100644 index 0000000..a9a1a49 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/ParseModule.h @@ -0,0 +1,26 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@protocol ParseModule + +- (void)parseDidInitializeWithApplicationId:(NSString *)applicationId clientKey:(NSString *)clientKey; + +@end + +@interface ParseModuleCollection : NSObject + +- (void)addParseModule:(id)module; +- (void)removeParseModule:(id)module; + +- (BOOL)containsModule:(id)module; +- (NSUInteger)modulesCount; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/ParseModule.m b/BreakingBad/Pods/Parse/Parse/Internal/ParseModule.m new file mode 100644 index 0000000..5167762 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/ParseModule.m @@ -0,0 +1,134 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "ParseModule.h" + +///-------------------------------------- +#pragma mark - ParseModuleCollection +///-------------------------------------- + +typedef void (^ParseModuleEnumerationBlock)(id module, BOOL *stop, BOOL *remove); + +@interface ParseModuleCollection () + +@property (atomic, strong) dispatch_queue_t collectionQueue; +@property (atomic, strong) NSPointerArray *modules; + +@end + +@implementation ParseModuleCollection + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + self = [super init]; + if (self) { + _collectionQueue = dispatch_queue_create("com.parse.ParseModuleCollection", DISPATCH_QUEUE_SERIAL); + _modules = [NSPointerArray weakObjectsPointerArray]; + } + return self; +} + +///-------------------------------------- +#pragma mark - Collection +///-------------------------------------- + +- (void)addParseModule:(id)module { + if (module == nil) { + return; + } + + [self performCollectionAccessBlock:^{ + [self.modules addPointer:(__bridge void *)module]; + }]; +} + +- (void)removeParseModule:(id)module { + if (module == nil) { + return; + } + + [self enumerateModulesWithBlock:^(id enumeratedModule, BOOL *stop, BOOL *remove) { + *remove = (module == enumeratedModule); + }]; +} + +- (BOOL)containsModule:(id)module { + __block BOOL retValue = NO; + [self enumerateModulesWithBlock:^(id enumeratedModule, BOOL *stop, BOOL *remove) { + if (module == enumeratedModule) { + retValue = YES; + *stop = YES; + } + }]; + return retValue; +} + +- (NSUInteger)modulesCount { + return [self.modules count]; +} + +///-------------------------------------- +#pragma mark - ParseModule +///-------------------------------------- + +- (void)parseDidInitializeWithApplicationId:(NSString *)applicationId clientKey:(NSString *)clientKey { + [self enumerateModulesWithBlock:^(id module, BOOL *stop, BOOL *remove) { + dispatch_async(dispatch_get_main_queue(), ^{ + [module parseDidInitializeWithApplicationId:applicationId clientKey:clientKey]; + }); + }]; +} + +///-------------------------------------- +#pragma mark - Private +///-------------------------------------- + +- (void)performCollectionAccessBlock:(dispatch_block_t)block { + dispatch_sync(self.collectionQueue, block); +} + +/*! + Enumerates all existing modules in this collection. + + NOTE: This **will modify the contents of the collection** if any of the modules were deallocated since last loop. + + @param block the block to enumerate with. + */ +- (void)enumerateModulesWithBlock:(ParseModuleEnumerationBlock)block { + [self performCollectionAccessBlock:^{ + NSMutableIndexSet *toRemove = [[NSMutableIndexSet alloc] init]; + + NSUInteger index = 0; + BOOL stop = NO; + + for (__strong id module in self.modules) { + BOOL remove = module == nil; + if (!remove) { + block(module, &stop, &remove); + } + + if (remove) { + [toRemove addIndex:index]; + } + + if (stop) break; + index++; + } + + // NSPointerArray doesn't have a -removeObjectsAtIndexes:... WHY!?!? + for (index = toRemove.firstIndex; index != NSNotFound; index = [toRemove indexGreaterThanIndex:index]) { + [self.modules removePointerAtIndex:index]; + } + }]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Parse_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/Parse_Private.h new file mode 100644 index 0000000..176dd1f --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Parse_Private.h @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "ParseManager.h" + +@class PFEventuallyQueue; + +@interface Parse () + ++ (void)_resetDataSharingIdentifiers; + ++ (ParseManager *)_currentManager; ++ (void)_clearCurrentManager; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Product/PFProduct+Private.h b/BreakingBad/Pods/Parse/Parse/Internal/Product/PFProduct+Private.h new file mode 100644 index 0000000..af69e41 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Product/PFProduct+Private.h @@ -0,0 +1,46 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFProduct.h" + +typedef enum { + PFProductDownloadStateStart, + PFProductDownloadStateDownloading, + PFProductDownloadStateDownloaded +} PFProductDownloadState; + +@interface PFProduct () { + NSDecimalNumber *price; + NSLocale *priceLocale; + NSInteger progress; + NSString *contentPath; +} + +/// The properties below are transient properties, not stored on Parse's server. +/*! + The price of the product, discovered via iTunes Connect. + */ +@property (nonatomic, strong) NSDecimalNumber *price; + +/*! + The price locale of the product. + */ +@property (nonatomic, strong) NSLocale *priceLocale; + +/*! + The progress of the download, if one is in progress. It's an integer between 0 and 100. + */ +@property (nonatomic, assign) NSInteger progress; + +/*! + The content path of the download. + */ +@property (nonatomic, strong) NSString *contentPath; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h b/BreakingBad/Pods/Parse/Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h new file mode 100644 index 0000000..2c9c3da --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import +#import + +#import + +@class BFTask PF_GENERIC(__covariant BFGenericType); + +PF_WATCH_UNAVAILABLE @interface PFProductsRequestResult : NSObject + +@property (nonatomic, copy, readonly) NSSet *validProducts; +@property (nonatomic, copy, readonly) NSSet *invalidProductIdentifiers; + +- (instancetype)initWithProductsResponse:(SKProductsResponse *)response; + +@end + +/*! + * This class is responsible for handling the first part of an IAP handshake. + * It sends a request to iTunes Connect with a set of product identifiers, and iTunes returns + * with a list of valid and invalid products. The class then proceeds to call the completion block passed in. + */ +@interface PFProductsRequestHandler : NSObject + +- (instancetype)initWithProductsRequest:(SKProductsRequest *)request; + +- (BFTask *)findProductsAsync; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m b/BreakingBad/Pods/Parse/Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m new file mode 100644 index 0000000..4dbce94 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m @@ -0,0 +1,92 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFProductsRequestHandler.h" + +#import +#import + +@implementation PFProductsRequestResult + +- (instancetype)initWithProductsResponse:(SKProductsResponse *)response { + self = [super init]; + if (!self) return nil; + + _validProducts = [NSSet setWithArray:response.products]; + _invalidProductIdentifiers = [NSSet setWithArray:response.invalidProductIdentifiers]; + + return self; +} + +@end + +@interface PFProductsRequestHandler () + +@property (nonatomic, strong) BFTaskCompletionSource *taskCompletionSource; +@property (nonatomic, strong) SKProductsRequest *productsRequest; + +@end + +@implementation PFProductsRequestHandler + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithProductsRequest:(SKProductsRequest *)request { + self = [super init]; + if (!self) return nil; + + _productsRequest = request; + _productsRequest.delegate = self; + + return self; +} + +///-------------------------------------- +#pragma mark - Dealloc +///-------------------------------------- + +- (void)dealloc { + // Clear the delegate, as it's still an `assign`, instead of `weak` + _productsRequest.delegate = nil; +} + +///-------------------------------------- +#pragma mark - Find +///-------------------------------------- + +- (BFTask *)findProductsAsync { + _taskCompletionSource = [BFTaskCompletionSource taskCompletionSource]; + [_productsRequest start]; + return _taskCompletionSource.task; +} + +///-------------------------------------- +#pragma mark - SKProductsRequestDelegate +///-------------------------------------- + +- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { + PFProductsRequestResult *result = [[PFProductsRequestResult alloc] initWithProductsResponse:response]; + [self.taskCompletionSource trySetResult:result]; +} + +- (void)request:(SKRequest *)request didFailWithError:(NSError *)error { + [self.taskCompletionSource trySetError:error]; + + // according to documentation, this method does not call requestDidFinish + request.delegate = nil; +} + +- (void)requestDidFinish:(SKRequest *)request { + // the documentation assures that this is the point safe to get rid of the request + request.delegate = nil; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo.h b/BreakingBad/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo.h new file mode 100644 index 0000000..efd4c17 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo.h @@ -0,0 +1,50 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "PFBaseState.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFPropertyInfo : NSObject + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithClass:(Class)kls + name:(NSString *)propertyName; + +- (instancetype)initWithClass:(Class)kls + name:(NSString *)propertyName + associationType:(PFPropertyInfoAssociationType)associationType NS_DESIGNATED_INITIALIZER; + ++ (instancetype)propertyInfoWithClass:(Class)kls + name:(NSString *)propertyName; + ++ (instancetype)propertyInfoWithClass:(Class)kls + name:(NSString *)propertyName + associationType:(PFPropertyInfoAssociationType)associationType; + +@property (nonatomic, copy, readonly) NSString *name; +@property (nonatomic, readonly) PFPropertyInfoAssociationType associationType; + +/*! + Returns the value of this property, + properly wrapped from the target object. + When possible, just invokes the property. + When not, uses -valueForKey:. + */ +- (nullable id)getWrappedValueFrom:(id)object; +- (void)setWrappedValue:(nullable id)value forObject:(id)object; + +// Moves the value from one object to the other, based on the association type given. +- (void)takeValueFrom:(id)one toObject:(id)two; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo.m b/BreakingBad/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo.m new file mode 100644 index 0000000..9d1273c --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo.m @@ -0,0 +1,212 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFPropertyInfo_Private.h" + +#import + +#import "PFAssert.h" +#import "PFMacros.h" +#import "PFPropertyInfo_Runtime.h" + +static inline NSString *safeStringWithPropertyAttributeValue(objc_property_t property, const char *attribute) { + char *value = property_copyAttributeValue(property, attribute); + if (!value) + return nil; + + // NSString initWithBytesNoCopy doesn't seem to work, so fall back to the CF counterpart. + return (__bridge_transfer NSString *)CFStringCreateWithCStringNoCopy(NULL, + value, + kCFStringEncodingUTF8, + kCFAllocatorMalloc); +} + +static inline NSString *stringByCapitalizingFirstCharacter(NSString *string) { + return [NSString stringWithFormat:@"%C%@", + (unichar)toupper([string characterAtIndex:0]), + [string substringFromIndex:1]]; +} + +@implementation PFPropertyInfo + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithClass:(Class)kls name:(NSString *)propertyName { + return [self initWithClass:kls name:propertyName associationType:_associationType]; +} + +- (instancetype)initWithClass:(Class)kls name:(NSString *)propertyName + associationType:(PFPropertyInfoAssociationType)associationType { + self = [super init]; + if (!self) return nil; + + _sourceClass = kls; + _name = [propertyName copy]; + _associationType = associationType; + + objc_property_t objcProperty = class_getProperty(kls, [_name UTF8String]); + + do { + _ivar = class_getInstanceVariable(kls, [safeStringWithPropertyAttributeValue(objcProperty, "V") UTF8String]); + if (_ivar) break; + + // Walk the superclass heirarchy for the property definition. Because property attributes are not inherited + // (but property definitions *are*), we must be careful to ensure that the variable was never actually + // implemented and synthesized in a superclass. Note if the same property is synthesized in multiple classes + // with different iVars, we take the class furthest from the root class as the 'source of truth'. + Class superClass = class_getSuperclass(kls); + while (superClass) { + objc_property_t superProperty = class_getProperty(superClass, [_name UTF8String]); + if (!superProperty) break; + + _ivar = class_getInstanceVariable(superClass, [safeStringWithPropertyAttributeValue(superProperty, "V") UTF8String]); + if (_ivar) break; + + superClass = class_getSuperclass(superClass); + } + + if (_ivar) break; + + // Attempt to infer the variable name. + _ivar = class_getInstanceVariable(kls, [[@"_" stringByAppendingString:_name] UTF8String]); + if (_ivar) break; + + _ivar = class_getInstanceVariable(kls, [_name UTF8String]); + } while (0); + + _typeEncoding = safeStringWithPropertyAttributeValue(objcProperty, "T"); + _object = [_typeEncoding hasPrefix:@"@"]; + + NSString *propertyGetter = safeStringWithPropertyAttributeValue(objcProperty, "G") ?: _name; + _getterSelector = NSSelectorFromString(propertyGetter); + + BOOL readonly = safeStringWithPropertyAttributeValue(objcProperty, "R") != nil; + NSString *propertySetter = safeStringWithPropertyAttributeValue(objcProperty, "S"); + if (propertySetter == nil && !readonly) { + propertySetter = [NSString stringWithFormat:@"set%@:", stringByCapitalizingFirstCharacter(_name)]; + } + + _setterSelector = NSSelectorFromString(propertySetter); + + if (_associationType == PFPropertyInfoAssociationTypeDefault) { + BOOL isCopy = safeStringWithPropertyAttributeValue(objcProperty, "C") != nil; + BOOL isWeak = safeStringWithPropertyAttributeValue(objcProperty, "W") != nil; + BOOL isRetain = safeStringWithPropertyAttributeValue(objcProperty, "&") != nil; + + if (isWeak) { + _associationType = PFPropertyInfoAssociationTypeWeak; + } else if (isCopy) { + _associationType = PFPropertyInfoAssociationTypeCopy; + } else if (isRetain) { + _associationType = PFPropertyInfoAssociationTypeStrong; + } else { + _associationType = PFPropertyInfoAssociationTypeAssign; + } + } + + return self; +} + ++ (instancetype)propertyInfoWithClass:(Class)kls name:(NSString *)propertyName { + return [[self alloc] initWithClass:kls name:propertyName]; +} + ++ (instancetype)propertyInfoWithClass:(Class)kls name:(NSString *)propertyName + associationType:(PFPropertyInfoAssociationType)associationType { + return [[self alloc] initWithClass:kls name:propertyName associationType:associationType]; +} + +///-------------------------------------- +#pragma mark - Wrapping +///-------------------------------------- + +- (id)getWrappedValueFrom:(id)object { + if (self.object) { + return objc_msgSend_safe(id)(object, self.getterSelector); + } + + return [object valueForKey:self.name]; +} + +- (void)setWrappedValue:(id)value forObject:(id)object { + if (self.object && self.setterSelector) { + objc_msgSend_safe(void, id)(object, self.setterSelector, value); + return; + } + + [object setValue:value forKey:self.name]; +} + +///-------------------------------------- +#pragma mark - Taking +///-------------------------------------- + +- (void)takeValueFrom:(id)one toObject:(id)two { + if (!self.ivar) { + id wrappedValue = [self getWrappedValueFrom:one]; + [self setWrappedValue:wrappedValue forObject:two]; + + return; + } + + NSUInteger size = 0; + NSGetSizeAndAlignment(ivar_getTypeEncoding(self.ivar), &size, NULL); + + char valuePtr[size]; + bzero(valuePtr, size); + + NSInvocation *invocation = nil; + + // TODO: (richardross) Cache the method signatures, as those are fairly slow to calculate. + if (one && [one respondsToSelector:self.getterSelector]) { + NSMethodSignature *methodSignature = [one methodSignatureForSelector:self.getterSelector]; + invocation = [NSInvocation invocationWithMethodSignature:methodSignature]; + + [invocation setTarget:one]; + [invocation setSelector:self.getterSelector]; + } + + [invocation invoke]; + [invocation getReturnValue:valuePtr]; + + object_setIvarValue_safe(two, self.ivar, valuePtr, self.associationType); +} + +///-------------------------------------- +#pragma mark - Equality +///-------------------------------------- + +- (NSUInteger)hash { + return 0; +} + +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + + if (![object isKindOfClass:[self class]]) { + return NO; + } + + PFPropertyInfo *other = object; + + // If they're the same property and one of them subclasses the other, do no further checking. + return [self.name isEqual:other.name] && + ([self.sourceClass isSubclassOfClass:other.sourceClass] || + [other.sourceClass isSubclassOfClass:self.sourceClass]); +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h new file mode 100644 index 0000000..db9ebea --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "PFPropertyInfo.h" + +@interface PFPropertyInfo () + +@property (atomic, assign, readonly) Class sourceClass; +@property (atomic, assign, readonly, getter=isObject) BOOL object; + +@property (atomic, copy, readonly) NSString *typeEncoding; +@property (atomic, assign, readonly) Ivar ivar; + +@property (atomic, assign, readonly) SEL getterSelector; +@property (atomic, assign, readonly) SEL setterSelector; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h b/BreakingBad/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h new file mode 100644 index 0000000..bc1b59e --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h @@ -0,0 +1,44 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFPropertyInfo.h" + +#import + +/*! + @abstract Safely sets an object's instance variable to the variable in the specified address. + @discussion The Objective-C runtime's built-in methods for setting instance variables (`object_setIvar`) and + (`object_setInstanceVariable`), are both terrible. They never read any more than a single pointer, so they + fail for structs, as well as 64 bit numbers on 32 bit platforms. Because of this, we need a solution to allow us to + safely set instance variable values whose sizes may be significantly more than a pointer. + + @note Like most Objective-C runtime methods, this WILL fail if you try and set a bitfield, so please don't do that. + + @param obj The object to operate on. + @param ivar The ivar to set the new value for. + @param fromMemory The **address** of the new value to set. + @param associationType The association type of the new value. One of PFPropertyInfoAssociationType. + */ +extern void object_setIvarValue_safe(__unsafe_unretained id obj, Ivar ivar, void *fromMemory, uint8_t associationType); + +/*! + @abstract Safely gets an object's instance variable and puts it into the specified address. + @discussion The Objective-C runtime's built-in methods for getting instance variables (`object_getIvar`) and + (`object_getInstanceVariable`), are both terrible. They never read any more than a single pointer, so they + fail for structs, as well as 64 bit numbers on 32 bit platforms. Because of this, we need a solution to allow us to + safely get instance variable values whose sizes may be significantly more than a pointer. + + @note Like most Objective-C runtime methods, this WILL fail if you try and set a bitfield, so please don't do that. + + @param obj The object to operate on. + @param ivar The ivar to get the value from. + @param toMemory The address to copy the value into. + @param associationType The assocation type of the new value. One of PFPrropertyInfoAssocationType. + */ +extern void object_getIvarValue_safe(__unsafe_unretained id obj, Ivar ivar, void *toMemory, uint8_t associationType); diff --git a/BreakingBad/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m b/BreakingBad/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m new file mode 100644 index 0000000..a2071f1 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m @@ -0,0 +1,122 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFPropertyInfo_Runtime.h" + +#import +#import + +/*! + This macro is really interesting. Because ARC will insert implicit retains, releases and other memory managment code + that we don't want here, we have to basically trick ARC into treating the functions we want as functions with type + `void *`. The way we do that is actually via the linker - instead of coming up with some crazy macro to forward all + arguments along to the correct function, especially when some of these functions aren't in any public headers. + + They are, however, well defined, according to the clang official ARC runtime support document: + http://clang.llvm.org/docs/AutomaticReferenceCounting.html#id55 + + That means this is unlikely to ever break. + + The weakref attribute is documented here: + https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#Common-Function-Attributes + + And we use this to make sure our type-invariant functions actually call the proper underlying ones. + */ +#define NO_TYPECHECK_SYMBOL(ret, fn, args...) static ret fn ## _noTypeCheck (args) __attribute__((weakref(#fn))); +#define OBJECT_GETOFFSET_PTR(obj, offset) (void *) ((uintptr_t)obj + offset) + +NO_TYPECHECK_SYMBOL(void *, objc_loadWeak, void **); + +NO_TYPECHECK_SYMBOL(void *, objc_storeWeak, void **, void *); +NO_TYPECHECK_SYMBOL(void *, objc_storeStrong, void **, void *); + +NO_TYPECHECK_SYMBOL(void *, objc_autorelease, void *); +NO_TYPECHECK_SYMBOL(void *, objc_retainAutorelease, void *); + +void object_getIvarValue_safe(__unsafe_unretained id obj, Ivar ivar, void *toMemory, uint8_t associationType) { + ptrdiff_t offset = ivar_getOffset(ivar); + void *location = OBJECT_GETOFFSET_PTR(obj, offset); + + switch (associationType) { + case PFPropertyInfoAssociationTypeDefault: + [NSException raise:NSInvalidArgumentException format:@"Invalid association type Default!"]; + break; + + case PFPropertyInfoAssociationTypeAssign: { + NSUInteger size = 0; + NSGetSizeAndAlignment(ivar_getTypeEncoding(ivar), &size, NULL); + + memcpy(toMemory, location, size); + break; + } + + case PFPropertyInfoAssociationTypeWeak: { + void *results = objc_loadWeak_noTypeCheck(location); + + memcpy(toMemory, &results, sizeof(id)); + break; + } + + case PFPropertyInfoAssociationTypeStrong: + case PFPropertyInfoAssociationTypeCopy: + case PFPropertyInfoAssociationTypeMutableCopy: { + void *objectValue = *(void **)location; + objectValue = objc_retainAutorelease_noTypeCheck(objectValue); + + memcpy(toMemory, &objectValue, sizeof(id)); + break; + } + } +} + +void object_setIvarValue_safe(__unsafe_unretained id obj, Ivar ivar, void *fromMemory, uint8_t associationType) { + ptrdiff_t offset = ivar_getOffset(ivar); + void *location = OBJECT_GETOFFSET_PTR(obj, offset); + + NSUInteger size = 0; + NSGetSizeAndAlignment(ivar_getTypeEncoding(ivar), &size, NULL); + + void *newValue = NULL; + + switch (associationType) { + case PFPropertyInfoAssociationTypeDefault: + [NSException raise:NSInvalidArgumentException format:@"Invalid association type Default!"]; + return; + + case PFPropertyInfoAssociationTypeAssign: { + memcpy(location, fromMemory, size); + return; + } + + case PFPropertyInfoAssociationTypeWeak: { + objc_storeWeak_noTypeCheck(location, *(void **)fromMemory); + return; + } + + case PFPropertyInfoAssociationTypeStrong: + newValue = *(void **)fromMemory; + break; + + case PFPropertyInfoAssociationTypeCopy: + case PFPropertyInfoAssociationTypeMutableCopy: { + SEL command = (associationType == PFPropertyInfoAssociationTypeCopy) ? @selector(copy) + : @selector(mutableCopy); + + + void *(*objc_msgSend_casted)(void *, SEL) = (void *)objc_msgSend; + void *oldValue = *(void **)fromMemory; + + newValue = objc_msgSend_casted(oldValue, command); + newValue = objc_autorelease_noTypeCheck(newValue); + break; + } + } + + objc_storeStrong_noTypeCheck(location, newValue); +} diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Purchase/Controller/PFPurchaseController.h b/BreakingBad/Pods/Parse/Parse/Internal/Purchase/Controller/PFPurchaseController.h new file mode 100644 index 0000000..dcd1e04 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Purchase/Controller/PFPurchaseController.h @@ -0,0 +1,62 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFMacros.h" + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFFileManager; +@class PFPaymentTransactionObserver; +@class PFProductsRequestResult; + +@protocol PFCommandRunning; +@class SKPaymentQueue; +@class SKPaymentTransaction; + +PF_WATCH_UNAVAILABLE @interface PFPurchaseController : NSObject + +@property (nonatomic, strong, readonly) id commandRunner; +@property (nonatomic, strong, readonly) PFFileManager *fileManager; +@property (nonatomic, strong, readonly) NSBundle *bundle; + +@property (nonatomic, strong) SKPaymentQueue *paymentQueue; +@property (nonatomic, strong, readonly) PFPaymentTransactionObserver *transactionObserver; + +@property (nonatomic, assign) Class productsRequestClass; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithCommandRunner:(id)commandRunner + fileManager:(PFFileManager *)fileManager + bundle:(NSBundle *)bundle NS_DESIGNATED_INITIALIZER; + ++ (instancetype)controllerWithCommandRunner:(id)commandRunner + fileManager:(PFFileManager *)fileManager + bundle:(NSBundle *)bundle; + +///-------------------------------------- +/// @name Products +///-------------------------------------- + +- (BFTask *)findProductsAsyncWithIdentifiers:(NSSet *)productIdentifiers; +- (BFTask *)buyProductAsyncWithIdentifier:(NSString *)productIdentifier; +- (BFTask *)downloadAssetAsyncForTransaction:(SKPaymentTransaction *)transaction + withProgressBlock:(PFProgressBlock)progressBlock + sessionToken:(NSString *)sessionToken; + +- (NSString *)assetContentPathForProductWithIdentifier:(NSString *)identifier fileName:(NSString *)fileName; +- (BOOL)canPurchase; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Purchase/Controller/PFPurchaseController.m b/BreakingBad/Pods/Parse/Parse/Internal/Purchase/Controller/PFPurchaseController.m new file mode 100644 index 0000000..58f2110 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Purchase/Controller/PFPurchaseController.m @@ -0,0 +1,241 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFPurchaseController.h" + +#import + +#import + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFCommandResult.h" +#import "PFCommandRunning.h" +#import "PFConstants.h" +#import "PFDecoder.h" +#import "PFFileManager.h" +#import "PFFile_Private.h" +#import "PFHTTPRequest.h" +#import "PFMacros.h" +#import "PFPaymentTransactionObserver.h" +#import "PFProductsRequestHandler.h" +#import "PFRESTCommand.h" + +@interface PFPurchaseController () { + PFProductsRequestHandler *_currentProductsRequestHandler; +} + +@end + +@implementation PFPurchaseController + +@synthesize paymentQueue = _paymentQueue; +@synthesize transactionObserver = _transactionObserver; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithCommandRunner:(id)commandRunner + fileManager:(PFFileManager *)fileManager + bundle:(NSBundle *)bundle { + self = [super init]; + if (!self) return nil; + + _commandRunner = commandRunner; + _fileManager = fileManager; + _bundle = bundle; + + return self; +} + ++ (instancetype)controllerWithCommandRunner:(id)commandRunner + fileManager:(PFFileManager *)fileManager + bundle:(NSBundle *)bundle { + return [[self alloc] initWithCommandRunner:commandRunner fileManager:fileManager bundle:bundle]; +} + +///-------------------------------------- +#pragma mark - Dealloc +///-------------------------------------- + +- (void)dealloc { + if (_paymentQueue && _transactionObserver) { + [_paymentQueue removeTransactionObserver:_transactionObserver]; + } +} + +///-------------------------------------- +#pragma mark - Products +///-------------------------------------- + +- (BFTask *)findProductsAsyncWithIdentifiers:(NSSet *)productIdentifiers { + @weakify(self); + return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id { + @strongify(self); + Class requestClass = self.productsRequestClass ?: [SKProductsRequest class]; + SKProductsRequest *request = [[requestClass alloc] initWithProductIdentifiers:productIdentifiers]; + _currentProductsRequestHandler = [[PFProductsRequestHandler alloc] initWithProductsRequest:request]; + return [_currentProductsRequestHandler findProductsAsync]; + }] continueWithSuccessBlock:^id(BFTask *task) { + _currentProductsRequestHandler = nil; + return task; + }]; +} + +- (BFTask *)buyProductAsyncWithIdentifier:(NSString *)productIdentifier { + PFParameterAssert(productIdentifier, @"You must pass in a valid product identifier."); + + if (![self canPurchase]) { + NSError *error = [NSError errorWithDomain:PFParseErrorDomain + code:kPFErrorPaymentDisabled + userInfo:nil]; + return [BFTask taskWithError:error]; + } + NSSet *identifiers = PF_SET(productIdentifier); + @weakify(self); + return [[self findProductsAsyncWithIdentifiers:identifiers] continueWithSuccessBlock:^id(BFTask *task) { + PFProductsRequestResult *result = task.result; + @strongify(self); + + for (NSString *invalidIdentifier in result.invalidProductIdentifiers) { + if ([invalidIdentifier isEqualToString:productIdentifier]) { + return [BFTask taskWithError:[NSError errorWithDomain:PFParseErrorDomain + code:kPFErrorInvalidProductIdentifier + userInfo:nil]]; + } + } + + for (SKProduct *product in result.validProducts) { + if ([product.productIdentifier isEqualToString:productIdentifier]) { + BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; + [self.transactionObserver handle:productIdentifier runOnceBlock:^(NSError *error) { + if (error) { + [source trySetError:error]; + } else { + [source trySetResult:nil]; + } + }]; + SKPayment *payment = [SKPayment paymentWithProduct:product]; + [self.paymentQueue addPayment:payment]; + return source.task; + } + } + + return [BFTask taskWithError:[NSError errorWithDomain:PFParseErrorDomain + code:kPFErrorProductNotFoundInAppStore + userInfo:nil]]; + }]; +} + +- (BFTask *)downloadAssetAsyncForTransaction:(SKPaymentTransaction *)transaction + withProgressBlock:(PFProgressBlock)progressBlock + sessionToken:(NSString *)sessionToken { + NSString *productIdentifier = transaction.payment.productIdentifier; + NSURL *appStoreReceiptURL = [self.bundle appStoreReceiptURL]; + if (!productIdentifier || !appStoreReceiptURL) { + return [BFTask taskWithError:[NSError errorWithDomain:PFParseErrorDomain + code:kPFErrorReceiptMissing + userInfo:nil]]; + } + + NSError *error = nil; + NSData *appStoreReceipt = [NSData dataWithContentsOfURL:appStoreReceiptURL + options:NSDataReadingMappedIfSafe + error:&error]; + if (!appStoreReceipt || error) { + NSDictionary *userInfo = nil; + if (error) { + userInfo = @{ NSUnderlyingErrorKey : error }; + } + return [BFTask taskWithError:[NSError errorWithDomain:PFParseErrorDomain + code:kPFErrorReceiptMissing + userInfo:userInfo]]; + } + + NSDictionary *params = [[PFEncoder objectEncoder] encodeObject:@{ @"receipt" : appStoreReceipt, + @"productIdentifier" : productIdentifier }]; + PFRESTCommand *command = [PFRESTCommand commandWithHTTPPath:@"validate_purchase" + httpMethod:PFHTTPRequestMethodPOST + parameters:params + sessionToken:sessionToken]; + BFTask *task = [self.commandRunner runCommandAsync:command withOptions:PFCommandRunningOptionRetryIfFailed]; + @weakify(self); + return [task continueWithSuccessBlock:^id(BFTask *task) { + @strongify(self); + + PFCommandResult *result = task.result; + PFFile *file = [[PFDecoder objectDecoder] decodeObject:result.result]; + if (![file isKindOfClass:[PFFile class]]) { + return [BFTask taskWithError:[NSError errorWithDomain:PFParseErrorDomain + code:kPFErrorInvalidPurchaseReceipt + userInfo:result.result]]; + } + + NSString *finalFilePath = [self assetContentPathForProductWithIdentifier:transaction.payment.productIdentifier + fileName:file.name]; + NSString *directoryPath = [finalFilePath stringByDeletingLastPathComponent]; + return [[[[[PFFileManager createDirectoryIfNeededAsyncAtPath:directoryPath] continueWithBlock:^id(BFTask *task) { + if (task.faulted) { + return [BFTask taskWithError:[NSError errorWithDomain:PFParseErrorDomain + code:kPFErrorProductDownloadFileSystemFailure + userInfo:nil]]; + } + return file; + }] continueWithSuccessBlock:^id(BFTask *task) { + return [file getDataStreamInBackgroundWithProgressBlock:progressBlock]; + }] continueWithSuccessBlock:^id(BFTask *task) { + NSString *cachedFilePath = [file _cachedFilePath]; + return [[PFFileManager copyItemAsyncAtPath:cachedFilePath + toPath:finalFilePath] continueWithBlock:^id(BFTask *task) { + // No-op file exists error. + if (task.error.code == NSFileWriteFileExistsError) { + return nil; + } + return task; + }]; + }] continueWithSuccessResult:finalFilePath]; + }]; +} + +- (NSString *)assetContentPathForProductWithIdentifier:(NSString *)identifier fileName:(NSString *)fileName { + // We store files locally at (ParsePrivateDir)/(ProductIdentifier)/filename + NSString *filePath = [self.fileManager parseDataItemPathForPathComponent:identifier]; + filePath = [filePath stringByAppendingPathComponent:fileName]; + return filePath; +} + +- (BOOL)canPurchase { + return [[self.paymentQueue class] canMakePayments]; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (SKPaymentQueue *)paymentQueue { + if (!_paymentQueue) { + _paymentQueue = [SKPaymentQueue defaultQueue]; + } + return _paymentQueue; +} + +- (PFPaymentTransactionObserver *)transactionObserver { + if (!_transactionObserver) { + _transactionObserver = [[PFPaymentTransactionObserver alloc] init]; + [self.paymentQueue addTransactionObserver:_transactionObserver]; + } + return _transactionObserver; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h b/BreakingBad/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h new file mode 100644 index 0000000..db0e43c --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import +#import + +#import + +/*! + * The PFPaymentTransactionObserver listens to the payment queue, processes a payment by running business logic, + * and completes the transaction. It's a complex interaction and best explained as follows: + * 1) an observer object is created and added to the payment queue, typically before IAP happens (but not necessarily), + * 2) PFPurchase creates a payment and adds it to the payment queue, + * 3) when the observer sees this payment, it runs the business logic associated with this payment, + * 4) when the business logic finishes, the observer completes the transaction. If the business logic does not finish, the transaction is not completed, which means the user does not get charged, + * 5) after the transaction finishes, custom UI logic is run. + */ +PF_WATCH_UNAVAILABLE @interface PFPaymentTransactionObserver : NSObject + +- (void)handle:(NSString *)productIdentifier block:(void (^)(SKPaymentTransaction *))block; +- (void)handle:(NSString *)productIdentifier runOnceBlock:(void (^)(NSError *))block; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m b/BreakingBad/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m new file mode 100644 index 0000000..100750d --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m @@ -0,0 +1,105 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFPaymentTransactionObserver_Private.h" + +#import "PFAssert.h" + +@implementation PFPaymentTransactionObserver + +@synthesize blocks; +@synthesize runOnceBlocks; +@synthesize lockObj; +@synthesize runOnceLockObj; + +///-------------------------------------- +#pragma mark - NSObject +///-------------------------------------- + +- (instancetype)init { + if (self = [super init]) { + blocks = [[NSMutableDictionary alloc] init]; + runOnceBlocks = [[NSMutableDictionary alloc] init]; + lockObj = [[NSObject alloc] init]; + runOnceLockObj = [[NSObject alloc] init]; + } + return self; +} + +///-------------------------------------- +#pragma mark - SKPaymentTransactionObserver +///-------------------------------------- + +- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { + for (SKPaymentTransaction *transaction in transactions) { + switch (transaction.transactionState) { + case SKPaymentTransactionStatePurchased: + case SKPaymentTransactionStateFailed: + case SKPaymentTransactionStateRestored: + [self completeTransaction:transaction fromPaymentQueue:queue]; + break; + default: + break; + } + } +} + +///-------------------------------------- +#pragma mark - PFPaymentTransactionObserver +///-------------------------------------- + +- (void)completeTransaction:(SKPaymentTransaction *)transaction fromPaymentQueue:(SKPaymentQueue *)queue { + NSString *productIdentifier = transaction.payment.productIdentifier; + + @synchronized(lockObj) { + void(^completion)(SKPaymentTransaction *) = self.blocks[productIdentifier]; + if (!transaction.error && completion) { + completion(transaction); + } + } + + @synchronized(runOnceLockObj) { + void(^runOnceBlock)(NSError *) = (void(^)(NSError *))[self.runOnceBlocks objectForKey:productIdentifier]; + if (runOnceBlock) { + runOnceBlock(transaction.error); + [self.runOnceBlocks removeObjectForKey:productIdentifier]; + } + } + + // Calling finish:transaction here prevents the user from registering another observer to handle this transaction. + [queue finishTransaction:transaction]; +} + +///-------------------------------------- +#pragma mark - Public +///-------------------------------------- + +- (void)handle:(NSString *)productIdentifier block:(void(^)(SKPaymentTransaction *))block { + @synchronized(lockObj) { + self.blocks[productIdentifier] = block; + } +} + +- (void)handle:(NSString *)productIdentifier runOnceBlock:(void(^)(NSError *))block { + @synchronized(runOnceLockObj) { + PFConsistencyAssert(self.runOnceBlocks[productIdentifier] == nil, + @"You cannot purchase a product that is in the process of being purchased."); + + if (!block) { + // Create a no-op action so that we can store it in the dictionary, + // this is useful because we use the existence of this block to test if + // the same product is being purchased at the time. + block = ^(NSError *error) { + }; + } + self.runOnceBlocks[productIdentifier] = block; + } +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h new file mode 100644 index 0000000..268af07 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFPaymentTransactionObserver.h" + +@interface PFPaymentTransactionObserver () + +@property (nonatomic, strong) NSMutableDictionary *blocks; +@property (nonatomic, strong) NSMutableDictionary *runOnceBlocks; +@property (nonatomic, strong) NSObject *lockObj; +@property (nonatomic, strong) NSObject *runOnceLockObj; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Push/ChannelsController/PFPushChannelsController.h b/BreakingBad/Pods/Parse/Parse/Internal/Push/ChannelsController/PFPushChannelsController.h new file mode 100644 index 0000000..95bea76 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Push/ChannelsController/PFPushChannelsController.h @@ -0,0 +1,47 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFCoreDataProvider.h" + +@class BFTask PF_GENERIC(__covariant BFGenericType); + +NS_ASSUME_NONNULL_BEGIN + +PF_WATCH_UNAVAILABLE @interface PFPushChannelsController : NSObject + +@property (nonatomic, weak, readonly) id dataSource; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; ++ (instancetype)controllerWithDataSource:(id)dataSource; + +///-------------------------------------- +/// @name Get +///-------------------------------------- + +- (BFTask *)getSubscribedChannelsAsync; + +///-------------------------------------- +/// @name Subscribe +///-------------------------------------- + +- (BFTask *)subscribeToChannelAsyncWithName:(NSString *)name; +- (BFTask *)unsubscribeFromChannelAsyncWithName:(NSString *)name; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Push/ChannelsController/PFPushChannelsController.m b/BreakingBad/Pods/Parse/Parse/Internal/Push/ChannelsController/PFPushChannelsController.m new file mode 100644 index 0000000..e8d3d8e --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Push/ChannelsController/PFPushChannelsController.m @@ -0,0 +1,120 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFPushChannelsController.h" + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFCurrentInstallationController.h" +#import "PFErrorUtilities.h" +#import "PFInstallation.h" + +@interface PFPushChannelsController () + +@property (nonatomic, strong, readonly) PFCurrentInstallationController *currentInstallationController; + +@end + +@implementation PFPushChannelsController + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithDataSource:(nonnull id)dataSource { + self = [super init]; + if (!self) return nil; + + _dataSource = dataSource; + + return self; +} + ++ (instancetype)controllerWithDataSource:(nonnull id)dataSource { + return [[self alloc] initWithDataSource:dataSource]; +} + +///-------------------------------------- +#pragma mark - Get +///-------------------------------------- + +- (BFTask *)getSubscribedChannelsAsync { + return [[self _getCurrentObjectAsync] continueWithSuccessBlock:^id(BFTask *task) { + PFInstallation *installation = task.result; + + BFTask *installationTask = (installation.objectId + ? (BFTask *)[installation fetchInBackground] + : (BFTask *)[installation saveInBackground]); + + return [installationTask continueWithSuccessBlock:^id(BFTask *task) { + return [NSSet setWithArray:installation.channels]; + }]; + }]; +} + +///-------------------------------------- +#pragma mark - Subscribe +///-------------------------------------- + +- (BFTask *)subscribeToChannelAsyncWithName:(nonnull NSString *)name { + return [[self _getCurrentObjectAsync] continueWithSuccessBlock:^id(BFTask *task) { + PFInstallation *installation = task.result; + if ([installation.channels containsObject:name] && + ![installation isDirtyForKey:@"channels"]) { + return @YES; + } + + [installation addUniqueObject:name forKey:@"channels"]; + return [installation saveInBackground]; + }]; +} + +- (BFTask *)unsubscribeFromChannelAsyncWithName:(nonnull NSString *)name { + return [[self _getCurrentObjectAsync] continueWithSuccessBlock:^id(BFTask *task) { + PFInstallation *installation = task.result; + if (name.length != 0 && + ![installation.channels containsObject:name] && + ![installation isDirtyForKey:@"channels"]) { + return @YES; + } + [installation removeObject:name forKey:@"channels"]; + return [installation saveInBackground]; + }]; +} + +///-------------------------------------- +#pragma mark - Private +///-------------------------------------- + +- (BFTask *)_getCurrentObjectAsync { + return [[self.currentInstallationController getCurrentObjectAsync] continueWithSuccessBlock:^id(BFTask *task) { + PFInstallation *installation = task.result; + if (!installation.deviceToken) { + NSError *error = [PFErrorUtilities errorWithCode:kPFErrorPushMisconfigured + message:@"There is no device token stored yet."]; + return [BFTask taskWithError:error]; + } + + return task; + }]; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (PFCurrentInstallationController *)currentInstallationController { + return self.dataSource.currentInstallationController; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Push/Controller/PFPushController.h b/BreakingBad/Pods/Parse/Parse/Internal/Push/Controller/PFPushController.h new file mode 100644 index 0000000..0f66b42 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Push/Controller/PFPushController.h @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFPushState; +@protocol PFCommandRunning; + +NS_ASSUME_NONNULL_BEGIN + +PF_WATCH_UNAVAILABLE @interface PFPushController : NSObject + +@property (nonatomic, strong, readonly) id commandRunner; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithCommandRunner:(id)commandRunner NS_DESIGNATED_INITIALIZER; + ++ (instancetype)controllerWithCommandRunner:(id)commandRunner; + +///-------------------------------------- +/// @name Sending Push +///-------------------------------------- + +/*! + Requests push notification to be sent for a given state. + + @param state State to use to send notifications. + @param sessionToken Current user session token. + + @returns `BFTask` with result set to `NSNumber` with `BOOL` identifying whether the request succeeded. + */ +- (BFTask *)sendPushNotificationAsyncWithState:(PFPushState *)state sessionToken:(nullable NSString *)sessionToken; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Push/Controller/PFPushController.m b/BreakingBad/Pods/Parse/Parse/Internal/Push/Controller/PFPushController.m new file mode 100644 index 0000000..36472de --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Push/Controller/PFPushController.m @@ -0,0 +1,57 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFPushController.h" + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFCommandRunning.h" +#import "PFMacros.h" +#import "PFRESTPushCommand.h" + +@implementation PFPushController + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithCommandRunner:(id)commandRunner { + self = [super init]; + if (!self) return nil; + + _commandRunner = commandRunner; + + return self; +} + ++ (instancetype)controllerWithCommandRunner:(id)commandRunner { + return [[self alloc] initWithCommandRunner:commandRunner]; +} + +///-------------------------------------- +#pragma mark - Sending Push +///-------------------------------------- + +- (BFTask *)sendPushNotificationAsyncWithState:(PFPushState *)state + sessionToken:(NSString *)sessionToken { + @weakify(self); + return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + @strongify(self); + PFRESTCommand *command = [PFRESTPushCommand sendPushCommandWithPushState:state sessionToken:sessionToken]; + return [self.commandRunner runCommandAsync:command withOptions:PFCommandRunningOptionRetryIfFailed]; + }] continueWithSuccessBlock:^id(BFTask *task) { + return @(task.result != nil); + }]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Push/Manager/PFPushManager.h b/BreakingBad/Pods/Parse/Parse/Internal/Push/Manager/PFPushManager.h new file mode 100644 index 0000000..9d2878a --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Push/Manager/PFPushManager.h @@ -0,0 +1,43 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFCoreDataProvider.h" +#import "PFDataProvider.h" + +@class PFPushChannelsController; +@class PFPushController; + +NS_ASSUME_NONNULL_BEGIN + +PF_WATCH_UNAVAILABLE @interface PFPushManager : NSObject + +@property (nonatomic, weak, readonly) id commonDataSource; +@property (nonatomic, weak, readonly) id coreDataSource; + +@property (nonatomic, strong) PFPushController *pushController; +@property (nonatomic, strong) PFPushChannelsController *channelsController; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithCommonDataSource:(id)commonDataSource + coreDataSource:(id)coreDataSource NS_DESIGNATED_INITIALIZER; + ++ (instancetype)managerWithCommonDataSource:(id)commonDataSource + coreDataSource:(id)coreDataSource; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Push/Manager/PFPushManager.m b/BreakingBad/Pods/Parse/Parse/Internal/Push/Manager/PFPushManager.m new file mode 100644 index 0000000..d02f681 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Push/Manager/PFPushManager.m @@ -0,0 +1,95 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFPushManager.h" + +#import "PFAssert.h" +#import "PFMacros.h" +#import "PFPushChannelsController.h" +#import "PFPushController.h" + +@interface PFPushManager () { + dispatch_queue_t _controllerAccessQueue; +} + +@end + +@implementation PFPushManager + +@synthesize pushController = _pushController; +@synthesize channelsController = _channelsController; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithCommonDataSource:(id)commonDataSource + coreDataSource:(id)coreDataSource { + self = [super init]; + if (!self) return nil; + + _commonDataSource = commonDataSource; + _coreDataSource = coreDataSource; + _controllerAccessQueue = dispatch_queue_create("com.parse.push.controller.accessQueue", DISPATCH_QUEUE_SERIAL); + + return self; +} + ++ (instancetype)managerWithCommonDataSource:(id)commonDataSource + coreDataSource:(id)coreDataSource { + return [[self alloc] initWithCommonDataSource:commonDataSource coreDataSource:coreDataSource]; +} + +///-------------------------------------- +#pragma mark - PushController +///-------------------------------------- + +- (PFPushController *)pushController { + __block PFPushController *controller; + dispatch_sync(_controllerAccessQueue, ^{ + if (!_pushController) { + _pushController = [PFPushController controllerWithCommandRunner:self.commonDataSource.commandRunner]; + } + controller = _pushController; + }); + return controller; +} + +- (void)setPushController:(PFPushController *)pushController { + dispatch_sync(_controllerAccessQueue, ^{ + _pushController = pushController; + }); +} + +///-------------------------------------- +#pragma mark - Channels Controller +///-------------------------------------- + +- (PFPushChannelsController *)channelsController { + __block PFPushChannelsController *controller; + dispatch_sync(_controllerAccessQueue, ^{ + if (!_channelsController) { + _channelsController = [PFPushChannelsController controllerWithDataSource:self.coreDataSource]; + } + controller = _channelsController; + }); + return controller; +} + +- (void)setChannelsController:(PFPushChannelsController *)channelsController { + dispatch_sync(_controllerAccessQueue, ^{ + _channelsController = channelsController; + }); +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Push/PFPushPrivate.h b/BreakingBad/Pods/Parse/Parse/Internal/Push/PFPushPrivate.h new file mode 100644 index 0000000..d45d114 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Push/PFPushPrivate.h @@ -0,0 +1,43 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFMacros.h" + +NS_ASSUME_NONNULL_BEGIN + +@protocol PFPushInternalUtils + +@optional ++ (NSString *)convertDeviceTokenToString:(id)deviceToken; ++ (nullable NSString *)getDeviceTokenFromKeychain; ++ (void)clearDeviceToken; + +#if TARGET_OS_IPHONE + ++ (void)showAlertViewWithTitle:(nullable NSString *)title message:(nullable NSString *)message NS_EXTENSION_UNAVAILABLE_IOS(""); ++ (void)playVibrate; ++ (void)playAudioWithName:(nullable NSString *)audioName; + +#endif + +@end + +@interface PFPush (Private) + +// For unit testability ++ (Class)pushInternalUtilClass; ++ (void)setPushInternalUtilClass:(nullable Class)utilClass; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Push/State/PFMutablePushState.h b/BreakingBad/Pods/Parse/Parse/Internal/Push/State/PFMutablePushState.h new file mode 100644 index 0000000..3adab09 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Push/State/PFMutablePushState.h @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFPushState.h" + +NS_ASSUME_NONNULL_BEGIN + +PF_WATCH_UNAVAILABLE @interface PFMutablePushState : PFPushState + +@property (nullable, nonatomic, copy, readwrite) NSSet *channels; +@property (nullable, nonatomic, copy, readwrite) PFQueryState *queryState; + +@property (nullable, nonatomic, strong, readwrite) NSDate *expirationDate; +@property (nullable, nonatomic, copy, readwrite) NSNumber *expirationTimeInterval; + +@property (nullable, nonatomic, copy, readwrite) NSDictionary *payload; + +///-------------------------------------- +/// @name Payload +///-------------------------------------- + +- (void)setPayloadWithMessage:(nullable NSString *)message; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Push/State/PFMutablePushState.m b/BreakingBad/Pods/Parse/Parse/Internal/Push/State/PFMutablePushState.m new file mode 100644 index 0000000..998f75b --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Push/State/PFMutablePushState.m @@ -0,0 +1,34 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFMutablePushState.h" + +#import "PFPushState_Private.h" + +@implementation PFMutablePushState + +@dynamic channels; +@dynamic queryState; +@dynamic expirationDate; +@dynamic expirationTimeInterval; +@dynamic payload; + +///-------------------------------------- +#pragma mark - Payload +///-------------------------------------- + +- (void)setPayloadWithMessage:(NSString *)message { + if (!message) { + self.payload = nil; + } else { + self.payload = @{ @"alert" : [message copy] }; + } +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Push/State/PFPushState.h b/BreakingBad/Pods/Parse/Parse/Internal/Push/State/PFPushState.h new file mode 100644 index 0000000..147756f --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Push/State/PFPushState.h @@ -0,0 +1,39 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFBaseState.h" + +@class PFQueryState; + +NS_ASSUME_NONNULL_BEGIN + +PF_WATCH_UNAVAILABLE @interface PFPushState : PFBaseState + +@property (nullable, nonatomic, copy, readonly) NSSet *channels; +@property (nullable, nonatomic, copy, readonly) PFQueryState *queryState; + +@property (nullable, nonatomic, strong, readonly) NSDate *expirationDate; +@property (nullable, nonatomic, copy, readonly) NSNumber *expirationTimeInterval; + +@property (nullable, nonatomic, copy, readonly) NSDictionary *payload; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)initWithState:(nullable PFPushState *)state; ++ (instancetype)stateWithState:(nullable PFPushState *)state; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Push/State/PFPushState.m b/BreakingBad/Pods/Parse/Parse/Internal/Push/State/PFPushState.m new file mode 100644 index 0000000..6eaa245 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Push/State/PFPushState.m @@ -0,0 +1,60 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFPushState.h" +#import "PFPushState_Private.h" + +#import "PFMutablePushState.h" +#import "PFQueryState.h" + +@implementation PFPushState + +///-------------------------------------- +#pragma mark - PFBaseStateSubclass +///-------------------------------------- + ++ (NSDictionary *)propertyAttributes { + return @{ + @"channels": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], + @"queryState": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], + @"expirationDate": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeStrong], + @"expirationTimeInterval": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeStrong], + @"payload": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy] + }; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithState:(PFPushState *)state { + return [super initWithState:state]; +} + ++ (instancetype)stateWithState:(PFPushState *)state { + return [super stateWithState:state]; +} + +///-------------------------------------- +#pragma mark - NSCopying +///-------------------------------------- + +- (id)copyWithZone:(NSZone *)zone { + return [[PFPushState allocWithZone:zone] initWithState:self]; +} + +///-------------------------------------- +#pragma mark - NSMutableCopying +///-------------------------------------- + +- (id)mutableCopyWithZone:(NSZone *)zone { + return [[PFMutablePushState allocWithZone:zone] initWithState:self]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Push/State/PFPushState_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/Push/State/PFPushState_Private.h new file mode 100644 index 0000000..33e1570 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Push/State/PFPushState_Private.h @@ -0,0 +1,26 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFPushState.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFPushState () + +@property (nullable, nonatomic, copy, readwrite) NSSet *channels; +@property (nullable, nonatomic, copy, readwrite) PFQueryState *queryState; + +@property (nullable, nonatomic, strong, readwrite) NSDate *expirationDate; +@property (nullable, nonatomic, copy, readwrite) NSNumber *expirationTimeInterval; + +@property (nullable, nonatomic, copy, readwrite) NSDictionary *payload; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Push/Utilites/PFPushUtilities.h b/BreakingBad/Pods/Parse/Parse/Internal/Push/Utilites/PFPushUtilities.h new file mode 100644 index 0000000..e47c90e --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Push/Utilites/PFPushUtilities.h @@ -0,0 +1,20 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "PFPushPrivate.h" + +NS_ASSUME_NONNULL_BEGIN + +PF_WATCH_UNAVAILABLE @interface PFPushUtilities : NSObject + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Push/Utilites/PFPushUtilities.m b/BreakingBad/Pods/Parse/Parse/Internal/Push/Utilites/PFPushUtilities.m new file mode 100644 index 0000000..39b3ba7 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Push/Utilites/PFPushUtilities.m @@ -0,0 +1,91 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFPushUtilities.h" + +#import + +#if TARGET_OS_IOS +#import + +#import "PFAlertView.h" +#endif + +#import "PFInstallationPrivate.h" +#import "PFKeychainStore.h" +#import "PFLogging.h" +#import "PFMacros.h" + +@implementation PFPushUtilities + +///-------------------------------------- +#pragma mark - PFPushInternalUtils +///-------------------------------------- + ++ (NSString *)convertDeviceTokenToString:(id)deviceToken { + if ([deviceToken isKindOfClass:[NSString class]]) { + return deviceToken; + } else { + NSMutableString *hexString = [NSMutableString string]; + const unsigned char *bytes = [deviceToken bytes]; + for (int i = 0; i < [deviceToken length]; i++) { + [hexString appendFormat:@"%02x", bytes[i]]; + } + return [NSString stringWithString:hexString]; + } +} + ++ (NSString *)getDeviceTokenFromKeychain { + // Used the first time we construct the currentInstallation, + // for backward compability with older SDKs. + PFKeychainStore *store = [[PFKeychainStore alloc] initWithService:@"ParsePush"]; + return store[@"ParsePush"]; +} + ++ (void)clearDeviceToken { + // Used in test case setup. + [[PFInstallation currentInstallation] _clearDeviceToken]; + [[[PFKeychainStore alloc] initWithService:@"ParsePush"] removeObjectForKey:@"ParsePush"]; +} + +#if TARGET_OS_IPHONE + ++ (void)showAlertViewWithTitle:(NSString *)title message:(NSString *)message { + NSString *cancelButtonTitle = NSLocalizedStringFromTableInBundle(@"OK", @"Parse", + [NSBundle bundleForClass:[self class]], + @"Default alert view cancel button title."); + [PFAlertView showAlertWithTitle:title + message:message + cancelButtonTitle:cancelButtonTitle + otherButtonTitles:nil + completion:nil]; +} + ++ (void)playAudioWithName:(NSString *)audioFileName { + SystemSoundID soundId = -1; + + if (audioFileName) { + NSURL *bundlePath = [[NSBundle mainBundle] URLForResource:[audioFileName stringByDeletingPathExtension] + withExtension:[audioFileName pathExtension]]; + + AudioServicesCreateSystemSoundID((__bridge CFURLRef)bundlePath, &soundId); + } + + if (soundId != -1) { + AudioServicesPlaySystemSound(soundId); + } +} + ++ (void)playVibrate { + AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); +} + +#endif + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFCachedQueryController.h b/BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFCachedQueryController.h new file mode 100644 index 0000000..db0c057 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFCachedQueryController.h @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "PFQueryController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFCachedQueryController : PFQueryController + +@property (nonatomic, weak, readonly) id commonDataSource; + +- (instancetype)initWithCommonDataSource:(id)dataSource; ++ (instancetype)controllerWithCommonDataSource:(id)dataSource; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFCachedQueryController.m b/BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFCachedQueryController.m new file mode 100644 index 0000000..d89a928 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFCachedQueryController.m @@ -0,0 +1,208 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFCachedQueryController.h" + +#import + +#import "PFAssert.h" +#import "PFCommandResult.h" +#import "PFCommandRunning.h" +#import "PFDecoder.h" +#import "PFErrorUtilities.h" +#import "PFJSONSerialization.h" +#import "PFKeyValueCache.h" +#import "PFMacros.h" +#import "PFQueryState.h" +#import "PFRESTCommand.h" +#import "PFRESTQueryCommand.h" +#import "PFUser.h" + +@implementation PFCachedQueryController + +@dynamic commonDataSource; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithCommonDataSource:(id)dataSource { + return [super initWithCommonDataSource:dataSource]; +} + ++ (instancetype)controllerWithCommonDataSource:(id)dataSource { + return [super controllerWithCommonDataSource:dataSource]; +} + +///-------------------------------------- +#pragma mark - PFQueryControllerSubclass +///-------------------------------------- + +- (BFTask *)runNetworkCommandAsync:(PFRESTCommand *)command + withCancellationToken:(BFCancellationToken *)cancellationToken + forQueryState:(PFQueryState *)queryState { + if (cancellationToken.cancellationRequested) { + return [BFTask cancelledTask]; + } + + switch (queryState.cachePolicy) { + case kPFCachePolicyIgnoreCache: + { + return [self _runNetworkCommandAsync:command + withCancellationToken:cancellationToken + forQueryState:queryState]; + } + break; + case kPFCachePolicyNetworkOnly: + { + return [[self _runNetworkCommandAsync:command + withCancellationToken:cancellationToken + forQueryState:queryState] continueWithSuccessBlock:^id(BFTask *task) { + return [self _saveCommandResultAsync:task.result forCommandCacheKey:command.cacheKey]; + } cancellationToken:cancellationToken]; + } + break; + case kPFCachePolicyCacheOnly: + { + return [self _runNetworkCommandAsyncFromCache:command + withCancellationToken:cancellationToken + forQueryState:queryState]; + } + break; + case kPFCachePolicyNetworkElseCache: { + // Don't retry for network-else-cache, because it just slows things down. + BFTask *networkTask = [self _runNetworkCommandAsync:command + withCancellationToken:cancellationToken + forQueryState:queryState]; + @weakify(self); + return [networkTask continueWithBlock:^id(BFTask *task) { + @strongify(self); + if (task.cancelled || task.exception) { + return task; + } else if (task.error) { + return [self _runNetworkCommandAsyncFromCache:command + withCancellationToken:cancellationToken + forQueryState:queryState]; + } + return [self _saveCommandResultAsync:task.result forCommandCacheKey:command.cacheKey]; + } cancellationToken:cancellationToken]; + } + break; + case kPFCachePolicyCacheElseNetwork: + { + BFTask *cacheTask = [self _runNetworkCommandAsyncFromCache:command + withCancellationToken:cancellationToken + forQueryState:queryState]; + @weakify(self); + return [cacheTask continueWithBlock:^id(BFTask *task) { + @strongify(self); + if (task.error) { + return [self _runNetworkCommandAsync:command + withCancellationToken:cancellationToken + forQueryState:queryState]; + } + return task; + } cancellationToken:cancellationToken]; + } + break; + case kPFCachePolicyCacheThenNetwork: + PFConsistencyAssert(NO, @"kPFCachePolicyCacheThenNetwork is not implemented as a runner."); + break; + default: + PFConsistencyAssert(NO, @"Unrecognized cache policy: %d", queryState.cachePolicy); + break; + } + return nil; +} + +- (BFTask *)_runNetworkCommandAsync:(PFRESTCommand *)command + withCancellationToken:(BFCancellationToken *)cancellationToken + forQueryState:(PFQueryState *)queryState { + PFCommandRunningOptions options = 0; + // We don't want retries on NetworkElseCache, but rather instantly back-off to cache. + if (queryState.cachePolicy != kPFCachePolicyNetworkElseCache) { + options = PFCommandRunningOptionRetryIfFailed; + } + BFTask *networkTask = [self.commonDataSource.commandRunner runCommandAsync:command + withOptions:options + cancellationToken:cancellationToken]; + return [networkTask continueWithSuccessBlock:^id(BFTask *task) { + if (queryState.cachePolicy == kPFCachePolicyNetworkOnly || + queryState.cachePolicy == kPFCachePolicyNetworkElseCache || + queryState.cachePolicy == kPFCachePolicyCacheElseNetwork) { + return [self _saveCommandResultAsync:task.result forCommandCacheKey:command.cacheKey]; + } + // Roll-forward the original result. + return task; + } cancellationToken:cancellationToken]; +} + +///-------------------------------------- +#pragma mark - Cache +///-------------------------------------- + +- (NSString *)cacheKeyForQueryState:(PFQueryState *)queryState sessionToken:(NSString *)sessionToken { + return [PFRESTQueryCommand findCommandForQueryState:queryState withSessionToken:sessionToken].cacheKey; +} + +- (BOOL)hasCachedResultForQueryState:(PFQueryState *)queryState sessionToken:(NSString *)sessionToken { + // TODO: (nlutsenko) Once there is caching for `count`, the results for that command should also be checked. + // TODO: (nlutsenko) We should cache this result. + + NSString *cacheKey = [self cacheKeyForQueryState:queryState sessionToken:sessionToken]; + return ([self.commonDataSource.keyValueCache objectForKey:cacheKey maxAge:queryState.maxCacheAge] != nil); +} + +- (void)clearCachedResultForQueryState:(PFQueryState *)queryState sessionToken:(NSString *)sessionToken { + // TODO: (nlutsenko) Once there is caching for `count`, the results for that command should also be cleared. + NSString *cacheKey = [self cacheKeyForQueryState:queryState sessionToken:sessionToken]; + [self.commonDataSource.keyValueCache removeObjectForKey:cacheKey]; +} + +- (void)clearAllCachedResults { + [self.commonDataSource.keyValueCache removeAllObjects]; +} + +- (BFTask *)_runNetworkCommandAsyncFromCache:(PFRESTCommand *)command + withCancellationToken:(BFCancellationToken *)cancellationToken + forQueryState:(PFQueryState *)queryState { + NSString *jsonString = [self.commonDataSource.keyValueCache objectForKey:command.cacheKey + maxAge:queryState.maxCacheAge]; + if (!jsonString) { + NSError *error = [PFErrorUtilities errorWithCode:kPFErrorCacheMiss + message:@"Cache miss." + shouldLog:NO]; + return [BFTask taskWithError:error]; + } + + NSDictionary *object = [PFJSONSerialization JSONObjectFromString:jsonString]; + if (!object) { + NSError *error = [PFErrorUtilities errorWithCode:kPFErrorCacheMiss + message:@"Cache contains corrupted JSON."]; + return [BFTask taskWithError:error]; + } + + NSDictionary *decodedObject = [[PFDecoder objectDecoder] decodeObject:object]; + + PFCommandResult *result = [PFCommandResult commandResultWithResult:decodedObject + resultString:jsonString + httpResponse:nil]; + return [BFTask taskWithResult:result]; +} + +- (BFTask *)_saveCommandResultAsync:(PFCommandResult *)result forCommandCacheKey:(NSString *)cacheKey { + NSString *resultString = result.resultString; + if (resultString) { + [self.commonDataSource.keyValueCache setObject:resultString forKey:cacheKey]; + } + // Roll-forward the original result. + return [BFTask taskWithResult:result]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFOfflineQueryController.h b/BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFOfflineQueryController.h new file mode 100644 index 0000000..a7f0241 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFOfflineQueryController.h @@ -0,0 +1,31 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "PFQueryController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFOfflineQueryController : PFQueryController + +@property (nonatomic, weak, readonly) id commonDataSource; +@property (nonatomic, weak, readonly) id coreDataSource; + +- (instancetype)initWithCommonDataSource:(id)dataSource NS_UNAVAILABLE; ++ (instancetype)controllerWithCommonDataSource:(id)dataSource NS_UNAVAILABLE; + +- (instancetype)initWithCommonDataSource:(id)dataSource + coreDataSource:(id)coreDataSource NS_DESIGNATED_INITIALIZER; ++ (instancetype)controllerWithCommonDataSource:(id)dataSource + coreDataSource:(id)coreDataSource; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFOfflineQueryController.m b/BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFOfflineQueryController.m new file mode 100644 index 0000000..edca5d5 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFOfflineQueryController.m @@ -0,0 +1,180 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFOfflineQueryController.h" + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFCommandRunning.h" +#import "PFObjectPrivate.h" +#import "PFOfflineStore.h" +#import "PFPin.h" +#import "PFPinningObjectStore.h" +#import "PFQueryState.h" +#import "PFRESTCommand.h" +#import "PFRelationPrivate.h" + +@interface PFOfflineQueryController () { + PFOfflineStore *_offlineStore; // TODO: (nlutsenko) Lazy-load this via self.dataSource. +} + +@end + +@implementation PFOfflineQueryController + +@dynamic commonDataSource; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithCommonDataSource:(id)dataSource { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithCommonDataSource:(id)dataSource + coreDataSource:(id)coreDataSource { + self = [super initWithCommonDataSource:dataSource]; + if (!self) return nil; + + _offlineStore = dataSource.offlineStore; + _coreDataSource = coreDataSource; + + return self; +} + ++ (instancetype)controllerWithCommonDataSource:(id)dataSource + coreDataSource:(id)coreDataSource { + return [[self alloc] initWithCommonDataSource:dataSource coreDataSource:coreDataSource]; +} + +///-------------------------------------- +#pragma mark - Find +///-------------------------------------- + +- (BFTask *)findObjectsAsyncForQueryState:(PFQueryState *)queryState + withCancellationToken:(BFCancellationToken *)cancellationToken + user:(PFUser *)user { + if (queryState.queriesLocalDatastore) { + return [self _findObjectsFromLocalDatastoreAsyncForQueryState:queryState + withCancellationToken:cancellationToken + user:user]; + } + + NSDictionary *relationCondition = queryState.conditions[@"$relatedTo"]; + if (relationCondition) { + PFObject *object = relationCondition[@"object"]; + NSString *key = relationCondition[@"key"]; + if ([object isDataAvailableForKey:key]) { + PFRelation *relation = object[key]; + return [self _findObjectsAsyncInRelation:relation + ofObject:object + forQueryState:queryState + withCancellationToken:cancellationToken + user:user]; + } + } + + return [super findObjectsAsyncForQueryState:queryState withCancellationToken:cancellationToken user:user]; +} + +- (BFTask *)_findObjectsAsyncInRelation:(PFRelation *)relation + ofObject:(PFObject *)parentObject + forQueryState:(PFQueryState *)queryState + withCancellationToken:(BFCancellationToken *)cancellationToken + user:(PFUser *)user { + return [[super findObjectsAsyncForQueryState:queryState + withCancellationToken:cancellationToken + user:user] continueWithSuccessBlock:^id(BFTask *fetchTask) { + + NSArray *objects = fetchTask.result; + for (PFObject *object in objects) { + [relation _addKnownObject:object]; + } + + return [[_offlineStore updateDataForObjectAsync:parentObject] continueWithBlock:^id(BFTask *task) { + // Roll-forward the result of find task instead of a result of update task. + return fetchTask; + } cancellationToken:cancellationToken]; + } cancellationToken:cancellationToken]; +} + + +- (BFTask *)_findObjectsFromLocalDatastoreAsyncForQueryState:(PFQueryState *)queryState + withCancellationToken:(BFCancellationToken *)cancellationToken + user:(PFUser *)user { + @weakify(self); + return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + @strongify(self); + if (cancellationToken.cancellationRequested) { + return [BFTask cancelledTask]; + } + + NSString *pinName = queryState.localDatastorePinName; + if (pinName) { + PFPinningObjectStore *objectStore = self.coreDataSource.pinningObjectStore; + return [objectStore fetchPinAsyncWithName:pinName]; + } + return nil; + }] continueWithSuccessBlock:^id(BFTask *task) { + PFPin *pin = task.result; + return [_offlineStore findAsyncForQueryState:queryState user:user pin:pin]; + } cancellationToken:cancellationToken]; +} + +///-------------------------------------- +#pragma mark - Count +///-------------------------------------- + +- (BFTask *)countObjectsAsyncForQueryState:(PFQueryState *)queryState + withCancellationToken:(BFCancellationToken *)cancellationToken + user:(PFUser *)user { + if (queryState.queriesLocalDatastore) { + return [self _countObjectsFromLocalDatastoreAsyncForQueryState:queryState + withCancellationToken:cancellationToken + user:user]; + } + return [super countObjectsAsyncForQueryState:queryState withCancellationToken:cancellationToken user:user]; +} + +- (BFTask *)_countObjectsFromLocalDatastoreAsyncForQueryState:(PFQueryState *)queryState + withCancellationToken:(BFCancellationToken *)cancellationToken + user:(PFUser *)user { + @weakify(self); + return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + @strongify(self); + if (cancellationToken.cancellationRequested) { + return [BFTask cancelledTask]; + } + + NSString *pinName = queryState.localDatastorePinName; + if (pinName) { + PFPinningObjectStore *controller = self.coreDataSource.pinningObjectStore; + return [controller fetchPinAsyncWithName:pinName]; + } + return nil; + }] continueWithSuccessBlock:^id(BFTask *task) { + PFPin *pin = task.result; + return [_offlineStore countAsyncForQueryState:queryState user:user pin:pin]; + } cancellationToken:cancellationToken]; +} + +///-------------------------------------- +#pragma mark - PFQueryControllerSubclass +///-------------------------------------- + +- (BFTask *)runNetworkCommandAsync:(PFRESTCommand *)command + withCancellationToken:(BFCancellationToken *)cancellationToken + forQueryState:(PFQueryState *)queryState { + return [self.commonDataSource.commandRunner runCommandAsync:command + withOptions:PFCommandRunningOptionRetryIfFailed + cancellationToken:cancellationToken]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFQueryController.h b/BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFQueryController.h new file mode 100644 index 0000000..8c95ecb --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFQueryController.h @@ -0,0 +1,104 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFDataProvider.h" + +@class BFCancellationToken; + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFQueryState; +@class PFRESTCommand; +@class PFCommandResult; +@class PFUser; + +NS_ASSUME_NONNULL_BEGIN + +@interface PFQueryController : NSObject + +@property (nonatomic, weak, readonly) id commonDataSource; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithCommonDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; + ++ (instancetype)controllerWithCommonDataSource:(id)dataSource; + +///-------------------------------------- +/// @name Find +///-------------------------------------- + +/*! + Finds objects from network or LDS for any given query state. + Supports cancellation and ACLed changes for a specific user. + + @param queryState Query state to use. + @param cancellationToken Cancellation token or `nil`. + @param user `user` to use for ACLs or `nil`. + + @returns Task that resolves to `NSArray` of `PFObject`s. + */ +- (BFTask *)findObjectsAsyncForQueryState:(PFQueryState *)queryState + withCancellationToken:(nullable BFCancellationToken *)cancellationToken + user:(nullable PFUser *)user; // TODO: (nlutsenko) Pass `PFUserState` instead of user. + +///-------------------------------------- +/// @name Count +///-------------------------------------- + +/*! + Counts objects from network or LDS for any given query state. + Supports cancellation and ACLed changes for a specific user. + + @param queryState Query state to use. + @param cancellationToken Cancellation token or `nil`. + @param user `user` to use for ACLs or `nil`. + + @returns Task that resolves to `NSNumber` with a count of results. + */ +- (BFTask *)countObjectsAsyncForQueryState:(PFQueryState *)queryState + withCancellationToken:(nullable BFCancellationToken *)cancellationToken + user:(nullable PFUser *)user; // TODO: (nlutsenko) Pass `PFUserState` instead of user. + +///-------------------------------------- +/// @name Caching +///-------------------------------------- + +- (NSString *)cacheKeyForQueryState:(PFQueryState *)queryState sessionToken:(nullable NSString *)sessionToken; +- (BOOL)hasCachedResultForQueryState:(PFQueryState *)queryState sessionToken:(nullable NSString *)sessionToken; + +- (void)clearCachedResultForQueryState:(PFQueryState *)queryState sessionToken:(nullable NSString *)sessionToken; +- (void)clearAllCachedResults; + +@end + +@protocol PFQueryControllerSubclass + +/*! + Implementation should run a command on a network runner. + + @param command Command to run. + @param cancellationToken Cancellation token. + @param queryState Query state to run command for. + + @returns `BFTask` instance with result of `PFCommandResult`. + */ +- (BFTask *)runNetworkCommandAsync:(PFRESTCommand *)command + withCancellationToken:(nullable BFCancellationToken *)cancellationToken + forQueryState:(PFQueryState *)queryState; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFQueryController.m b/BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFQueryController.m new file mode 100644 index 0000000..9b6c494 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Query/Controller/PFQueryController.m @@ -0,0 +1,160 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFQueryController.h" + +#import + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFCommandResult.h" +#import "PFCommandRunning.h" +#import "PFObjectPrivate.h" +#import "PFOfflineStore.h" +#import "PFPin.h" +#import "PFQueryState.h" +#import "PFRESTQueryCommand.h" +#import "PFUser.h" +#import "Parse_Private.h" + +@interface PFQueryController () + +@end + +@implementation PFQueryController + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithCommonDataSource:(id)dataSource { + self = [super init]; + if (!self) return nil; + + _commonDataSource = dataSource; + + return self; +} + ++ (instancetype)controllerWithCommonDataSource:(id)dataSource { + return [[self alloc] initWithCommonDataSource:dataSource]; +} + +///-------------------------------------- +#pragma mark - Find +///-------------------------------------- + +- (BFTask *)findObjectsAsyncForQueryState:(PFQueryState *)queryState + withCancellationToken:(BFCancellationToken *)cancellationToken + user:(PFUser *)user { + NSDate *queryStart = (queryState.trace ? [NSDate date] : nil); + __block NSDate *querySent = nil; + + NSString *sessionToken = user.sessionToken; + return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + if (cancellationToken.cancellationRequested) { + return [BFTask cancelledTask]; + } + + PFRESTCommand *command = [PFRESTQueryCommand findCommandForQueryState:queryState withSessionToken:sessionToken]; + querySent = (queryState.trace ? [NSDate date] : nil); + return [self runNetworkCommandAsync:command + withCancellationToken:cancellationToken + forQueryState:queryState]; + }] continueWithSuccessBlock:^id(BFTask *task) { + PFCommandResult *result = task.result; + NSDate *queryReceived = (queryState.trace ? [NSDate date] : nil); + + NSArray *resultObjects = result.result[@"results"]; + NSMutableArray *foundObjects = [NSMutableArray arrayWithCapacity:resultObjects.count]; + if (resultObjects != nil) { + NSString *resultClassName = result.result[@"className"]; + if (!resultClassName) { + resultClassName = queryState.parseClassName; + } + NSArray *selectedKeys = queryState.selectedKeys.allObjects; + for (NSDictionary *resultObject in resultObjects) { + PFObject *object = [PFObject _objectFromDictionary:resultObject + defaultClassName:resultClassName + selectedKeys:selectedKeys]; + [foundObjects addObject:object]; + } + } + + NSString *traceLog = [result.result objectForKey:@"trace"]; + if (traceLog != nil) { + NSLog(@"Pre-processing took %f seconds\n%@Client side parsing took %f seconds", + [querySent timeIntervalSinceDate:queryStart], traceLog, + [queryReceived timeIntervalSinceNow]); + } + + return foundObjects; + } cancellationToken:cancellationToken]; +} + +///-------------------------------------- +#pragma mark - Count +///-------------------------------------- + +- (BFTask *)countObjectsAsyncForQueryState:(PFQueryState *)queryState + withCancellationToken:(BFCancellationToken *)cancellationToken + user:(PFUser *)user { + NSString *sessionToken = user.sessionToken; + return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + if (cancellationToken.cancellationRequested) { + return [BFTask cancelledTask]; + } + + PFRESTQueryCommand *findCommand = [PFRESTQueryCommand findCommandForQueryState:queryState + withSessionToken:sessionToken]; + PFRESTCommand *countCommand = [PFRESTQueryCommand countCommandFromFindCommand:findCommand]; + return [self runNetworkCommandAsync:countCommand + withCancellationToken:cancellationToken + forQueryState:queryState]; + }] continueWithSuccessBlock:^id(BFTask *task) { + PFCommandResult *result = task.result; + return result.result[@"count"]; + } cancellationToken:cancellationToken]; +} + +///-------------------------------------- +#pragma mark - Caching +///-------------------------------------- + +- (NSString *)cacheKeyForQueryState:(PFQueryState *)queryState sessionToken:(NSString *)sessionToken { + return nil; +} + +- (BOOL)hasCachedResultForQueryState:(PFQueryState *)queryState sessionToken:(NSString *)sessionToken { + return NO; +} + +- (void)clearCachedResultForQueryState:(PFQueryState *)queryState sessionToken:(NSString *)sessionToken { +} + +- (void)clearAllCachedResults { +} + +///-------------------------------------- +#pragma mark - PFQueryControllerSubclass +///-------------------------------------- + +- (BFTask *)runNetworkCommandAsync:(PFRESTCommand *)command + withCancellationToken:(BFCancellationToken *)cancellationToken + forQueryState:(PFQueryState *)queryState { + return [self.commonDataSource.commandRunner runCommandAsync:command + withOptions:PFCommandRunningOptionRetryIfFailed + cancellationToken:cancellationToken]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Query/PFQueryPrivate.h b/BreakingBad/Pods/Parse/Parse/Internal/Query/PFQueryPrivate.h new file mode 100644 index 0000000..149386e --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Query/PFQueryPrivate.h @@ -0,0 +1,56 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFQueryState.h" + +extern NSString *const PFQueryKeyNotEqualTo; +extern NSString *const PFQueryKeyLessThan; +extern NSString *const PFQueryKeyLessThanEqualTo; +extern NSString *const PFQueryKeyGreaterThan; +extern NSString *const PFQueryKeyGreaterThanOrEqualTo; +extern NSString *const PFQueryKeyContainedIn; +extern NSString *const PFQueryKeyNotContainedIn; +extern NSString *const PFQueryKeyContainsAll; +extern NSString *const PFQueryKeyNearSphere; +extern NSString *const PFQueryKeyWithin; +extern NSString *const PFQueryKeyRegex; +extern NSString *const PFQueryKeyExists; +extern NSString *const PFQueryKeyInQuery; +extern NSString *const PFQueryKeyNotInQuery; +extern NSString *const PFQueryKeySelect; +extern NSString *const PFQueryKeyDontSelect; +extern NSString *const PFQueryKeyRelatedTo; +extern NSString *const PFQueryKeyOr; +extern NSString *const PFQueryKeyQuery; +extern NSString *const PFQueryKeyKey; +extern NSString *const PFQueryKeyObject; + +extern NSString *const PFQueryOptionKeyMaxDistance; +extern NSString *const PFQueryOptionKeyBox; +extern NSString *const PFQueryOptionKeyRegexOptions; + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFObject; + +@interface PFQuery () + +@property (nonatomic, strong, readonly) PFQueryState *state; + +@end + +@interface PFQuery (Private) + +- (instancetype)whereRelatedToObject:(PFObject *)parent fromKey:(NSString *)key; +- (void)redirectClassNameForKey:(NSString *)key; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Query/State/PFMutableQueryState.h b/BreakingBad/Pods/Parse/Parse/Internal/Query/State/PFMutableQueryState.h new file mode 100644 index 0000000..e54a13c --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Query/State/PFMutableQueryState.h @@ -0,0 +1,81 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFQueryState.h" + +@interface PFMutableQueryState : PFQueryState + +@property (nonatomic, copy, readwrite) NSString *parseClassName; + +@property (nonatomic, assign, readwrite) NSInteger limit; +@property (nonatomic, assign, readwrite) NSInteger skip; + +///-------------------------------------- +/// @name Remote + Caching Options +///-------------------------------------- + +@property (nonatomic, assign, readwrite) PFCachePolicy cachePolicy; +@property (nonatomic, assign, readwrite) NSTimeInterval maxCacheAge; + +@property (nonatomic, assign, readwrite) BOOL trace; + +///-------------------------------------- +/// @name Local Datastore Options +///-------------------------------------- + +@property (nonatomic, assign, readwrite) BOOL shouldIgnoreACLs; +@property (nonatomic, assign, readwrite) BOOL shouldIncludeDeletingEventually; +@property (nonatomic, assign, readwrite) BOOL queriesLocalDatastore; +@property (nonatomic, copy, readwrite) NSString *localDatastorePinName; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)initWithParseClassName:(NSString *)className; ++ (instancetype)stateWithParseClassName:(NSString *)className; + +///-------------------------------------- +/// @name Conditions +///-------------------------------------- + +- (void)setConditionType:(NSString *)type withObject:(id)object forKey:(NSString *)key; + +- (void)setEqualityConditionWithObject:(id)object forKey:(NSString *)key; +- (void)setRelationConditionWithObject:(id)object forKey:(NSString *)key; + +- (void)removeAllConditions; + +///-------------------------------------- +/// @name Sort +///-------------------------------------- + +- (void)sortByKey:(NSString *)key ascending:(BOOL)ascending; +- (void)addSortKey:(NSString *)key ascending:(BOOL)ascending; +- (void)addSortKeysFromSortDescriptors:(NSArray *)sortDescriptors; + +///-------------------------------------- +/// @name Includes +///-------------------------------------- + +- (void)includeKey:(NSString *)key; + +///-------------------------------------- +/// @name Selected Keys +///-------------------------------------- + +- (void)selectKeys:(NSArray *)keys; + +///-------------------------------------- +/// @name Redirect +///-------------------------------------- + +- (void)redirectClassNameForKey:(NSString *)key; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Query/State/PFMutableQueryState.m b/BreakingBad/Pods/Parse/Parse/Internal/Query/State/PFMutableQueryState.m new file mode 100644 index 0000000..3ac9be9 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Query/State/PFMutableQueryState.m @@ -0,0 +1,177 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFMutableQueryState.h" + +#import "PFQueryState_Private.h" + +@interface PFMutableQueryState () { + NSMutableDictionary *_conditions; + NSMutableArray *_sortKeys; + NSMutableSet *_includedKeys; + NSMutableDictionary *_extraOptions; +} + +@end + +@implementation PFMutableQueryState + +@synthesize conditions = _conditions; +@synthesize sortKeys = _sortKeys; +@synthesize includedKeys = _includedKeys; +@synthesize extraOptions = _extraOptions; + +@dynamic parseClassName; +@dynamic selectedKeys; +@dynamic limit; +@dynamic skip; +@dynamic cachePolicy; +@dynamic maxCacheAge; +@dynamic trace; +@dynamic shouldIgnoreACLs; +@dynamic shouldIncludeDeletingEventually; +@dynamic queriesLocalDatastore; +@dynamic localDatastorePinName; + +///-------------------------------------- +#pragma mark - Property Attributes +///-------------------------------------- + ++ (NSDictionary *)propertyAttributes { + NSMutableDictionary *attributes = [[super propertyAttributes] mutableCopy]; + + attributes[@"conditions"] = [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeMutableCopy]; + attributes[@"sortKeys"] = [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeMutableCopy]; + attributes[@"includedKeys"] = [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeMutableCopy]; + attributes[@"extraOptions"] = [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeMutableCopy]; + + return attributes; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithParseClassName:(NSString *)className { + self = [self init]; + if (!self) return nil; + + _parseClassName = [className copy]; + + return self; +} + ++ (instancetype)stateWithParseClassName:(NSString *)className { + return [[self alloc] initWithParseClassName:className]; +} + +///-------------------------------------- +#pragma mark - Conditions +///-------------------------------------- + +- (void)setConditionType:(NSString *)type withObject:(id)object forKey:(NSString *)key { + NSMutableDictionary *conditionObject = nil; + + // Check if we already have some sort of condition + id existingCondition = _conditions[key]; + if ([existingCondition isKindOfClass:[NSMutableDictionary class]]) { + conditionObject = existingCondition; + } + if (!conditionObject) { + conditionObject = [NSMutableDictionary dictionary]; + } + conditionObject[type] = object; + + [self setEqualityConditionWithObject:conditionObject forKey:key]; +} + +- (void)setEqualityConditionWithObject:(id)object forKey:(NSString *)key { + if (!_conditions) { + _conditions = [NSMutableDictionary dictionary]; + } + _conditions[key] = object; +} + +- (void)setRelationConditionWithObject:(id)object forKey:(NSString *)key { + // We need to force saved PFObject here. + NSMutableDictionary *condition = [NSMutableDictionary dictionaryWithCapacity:2]; + condition[@"object"] = object; + condition[@"key"] = key; + [self setEqualityConditionWithObject:condition forKey:@"$relatedTo"]; +} + +- (void)removeAllConditions { + [_conditions removeAllObjects]; +} + +///-------------------------------------- +#pragma mark - Sort +///-------------------------------------- + +- (void)sortByKey:(NSString *)key ascending:(BOOL)ascending { + [_sortKeys removeAllObjects]; + [self addSortKey:key ascending:ascending]; +} + +- (void)addSortKey:(NSString *)key ascending:(BOOL)ascending { + if (!key) { + return; + } + + NSString *sortKey = (ascending ? key : [NSString stringWithFormat:@"-%@", key]); + if (!_sortKeys) { + _sortKeys = [NSMutableArray arrayWithObject:sortKey]; + } else { + [_sortKeys addObject:sortKey]; + } +} + +- (void)addSortKeysFromSortDescriptors:(NSArray *)sortDescriptors { + [_sortKeys removeAllObjects]; + for (NSSortDescriptor *sortDescriptor in sortDescriptors) { + [self addSortKey:sortDescriptor.key ascending:sortDescriptor.ascending]; + } +} + +///-------------------------------------- +#pragma mark - Includes +///-------------------------------------- + +- (void)includeKey:(NSString *)key { + if (!_includedKeys) { + _includedKeys = [NSMutableSet setWithObject:key]; + } else { + [_includedKeys addObject:key]; + } +} + +///-------------------------------------- +#pragma mark - Selected Keys +///-------------------------------------- + +- (void)selectKeys:(NSArray *)keys { + if (keys) { + _selectedKeys = (_selectedKeys ? [_selectedKeys setByAddingObjectsFromArray:keys] : [NSSet setWithArray:keys]); + } else { + _selectedKeys = nil; + } +} + +///-------------------------------------- +#pragma mark - Redirect +///-------------------------------------- + +- (void)redirectClassNameForKey:(NSString *)key { + if (!_extraOptions) { + _extraOptions = [NSMutableDictionary dictionary]; + } + _extraOptions[@"redirectClassNameForKey"] = key; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Query/State/PFQueryState.h b/BreakingBad/Pods/Parse/Parse/Internal/Query/State/PFQueryState.h new file mode 100644 index 0000000..c97ff58 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Query/State/PFQueryState.h @@ -0,0 +1,65 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFBaseState.h" + +@interface PFQueryState : PFBaseState + +@property (nonatomic, copy, readonly) NSString *parseClassName; + +@property (nonatomic, copy, readonly) NSDictionary *conditions; + +@property (nonatomic, copy, readonly) NSArray *sortKeys; +@property (nonatomic, copy, readonly) NSString *sortOrderString; + +@property (nonatomic, copy, readonly) NSSet *includedKeys; +@property (nonatomic, copy, readonly) NSSet *selectedKeys; +@property (nonatomic, copy, readonly) NSDictionary *extraOptions; + +@property (nonatomic, assign, readonly) NSInteger limit; +@property (nonatomic, assign, readonly) NSInteger skip; + +///-------------------------------------- +/// @name Remote + Caching Options +///-------------------------------------- + +@property (nonatomic, assign, readonly) PFCachePolicy cachePolicy; +@property (nonatomic, assign, readonly) NSTimeInterval maxCacheAge; + +@property (nonatomic, assign, readonly) BOOL trace; + +///-------------------------------------- +/// @name Local Datastore Options +///-------------------------------------- + +/*! + If ignoreACLs is enabled, we don't check ACLs when querying from LDS. We also don't grab + `PFUser currentUser` since it's unnecessary when ignoring ACLs. + */ +@property (nonatomic, assign, readonly) BOOL shouldIgnoreACLs; +/*! + This is currently unused, but is here to allow future querying across objects that are in the + process of being deleted eventually. + */ +@property (nonatomic, assign, readonly) BOOL shouldIncludeDeletingEventually; +@property (nonatomic, assign, readonly) BOOL queriesLocalDatastore; +@property (nonatomic, copy, readonly) NSString *localDatastorePinName; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)initWithState:(PFQueryState *)state; ++ (instancetype)stateWithState:(PFQueryState *)state; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Query/State/PFQueryState.m b/BreakingBad/Pods/Parse/Parse/Internal/Query/State/PFQueryState.m new file mode 100644 index 0000000..d5da258 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Query/State/PFQueryState.m @@ -0,0 +1,88 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFQueryState.h" +#import "PFQueryState_Private.h" + +#import "PFMutableQueryState.h" +#import "PFPropertyInfo.h" + +@implementation PFQueryState + +///-------------------------------------- +#pragma mark - PFBaseStateSubclass +///-------------------------------------- + ++ (NSDictionary *)propertyAttributes { + return @{ + @"parseClassName": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], + @"conditions": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], + @"sortKeys": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], + @"includedKeys": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], + @"selectedKeys": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], + @"extraOptions": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], + + @"limit": [PFPropertyAttributes attributes], + @"skip": [PFPropertyAttributes attributes], + @"cachePolicy": [PFPropertyAttributes attributes], + @"maxCacheAge": [PFPropertyAttributes attributes], + + @"trace": [PFPropertyAttributes attributes], + @"shouldIgnoreACLs": [PFPropertyAttributes attributes], + @"shouldIncludeDeletingEventually": [PFPropertyAttributes attributes], + @"queriesLocalDatastore": [PFPropertyAttributes attributes], + + @"localDatastorePinName": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy] + }; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _cachePolicy = kPFCachePolicyIgnoreCache; + _maxCacheAge = INFINITY; + _limit = -1; + + return self; +} + +- (instancetype)initWithState:(PFQueryState *)state { + return [super initWithState:state]; +} + ++ (instancetype)stateWithState:(PFQueryState *)state { + return [super stateWithState:state]; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (NSString *)sortOrderString { + return [self.sortKeys componentsJoinedByString:@","]; +} + +///-------------------------------------- +#pragma mark - Mutable Copying +///-------------------------------------- + +- (id)copyWithZone:(NSZone *)zone { + return [[PFQueryState allocWithZone:zone] initWithState:self]; +} + +- (instancetype)mutableCopyWithZone:(NSZone *)zone { + return [[PFMutableQueryState allocWithZone:zone] initWithState:self]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Query/State/PFQueryState_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/Query/State/PFQueryState_Private.h new file mode 100644 index 0000000..006d3c2 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Query/State/PFQueryState_Private.h @@ -0,0 +1,61 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFQueryState.h" + +@interface PFQueryState () { +@protected + NSString *_parseClassName; + + NSDictionary *_conditions; + + NSArray *_sortKeys; + + NSSet *_includedKeys; + NSSet *_selectedKeys; + NSDictionary *_extraOptions; + + NSInteger _limit; + NSInteger _skip; + + PFCachePolicy _cachePolicy; + NSTimeInterval _maxCacheAge; + + BOOL _trace; + + BOOL _shouldIgnoreACLs; + BOOL _shouldIncludeDeletingEventually; + BOOL _queriesLocalDatastore; + NSString *_localDatastorePinName; +} + +@property (nonatomic, copy, readwrite) NSString *parseClassName; + +@property (nonatomic, assign, readwrite) NSInteger limit; +@property (nonatomic, assign, readwrite) NSInteger skip; + +///-------------------------------------- +/// @name Remote + Caching Options +///-------------------------------------- + +@property (nonatomic, assign, readwrite) PFCachePolicy cachePolicy; +@property (nonatomic, assign, readwrite) NSTimeInterval maxCacheAge; + +@property (nonatomic, assign, readwrite) BOOL trace; + +///-------------------------------------- +/// @name Local Datastore Options +///-------------------------------------- + +@property (nonatomic, assign, readwrite) BOOL shouldIgnoreACLs; +@property (nonatomic, assign, readwrite) BOOL shouldIncludeDeletingEventually; +@property (nonatomic, assign, readwrite) BOOL queriesLocalDatastore; +@property (nonatomic, copy, readwrite) NSString *localDatastorePinName; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Query/Utilities/PFQueryUtilities.h b/BreakingBad/Pods/Parse/Parse/Internal/Query/Utilities/PFQueryUtilities.h new file mode 100644 index 0000000..59276df --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Query/Utilities/PFQueryUtilities.h @@ -0,0 +1,42 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@interface PFQueryUtilities : NSObject + +///-------------------------------------- +/// @name Predicate +///-------------------------------------- + +/*! + Takes an arbitrary predicate and normalizes it to a form that can easily be converted to a `PFQuery`. + */ ++ (NSPredicate *)predicateByNormalizingPredicate:(NSPredicate *)predicate; + +///-------------------------------------- +/// @name Regex +///-------------------------------------- + +/*! + Converts a string into a regex that matches it. + + @param string String to convert from. + + @returns Query regex string from a string. + */ ++ (NSString *)regexStringForString:(NSString *)string; + +///-------------------------------------- +/// @name Errors +///-------------------------------------- + ++ (NSError *)objectNotFoundError; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Query/Utilities/PFQueryUtilities.m b/BreakingBad/Pods/Parse/Parse/Internal/Query/Utilities/PFQueryUtilities.m new file mode 100644 index 0000000..5e9b717 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Query/Utilities/PFQueryUtilities.m @@ -0,0 +1,530 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFQueryUtilities.h" + +#import "PFAssert.h" +#import "PFConstants.h" +#import "PFErrorUtilities.h" + +@implementation PFQueryUtilities + +///-------------------------------------- +#pragma mark - Predicate +///-------------------------------------- + ++ (NSPredicate *)predicateByNormalizingPredicate:(NSPredicate *)predicate { + return [self _hoistCommonPredicates:[self _normalizeToDNF:predicate]]; +} + +/*! + Traverses over all of the subpredicates in the given predicate, calling the given blocks to + transform any instances of NSPredicate. + */ ++ (NSPredicate *)_mapPredicate:(NSPredicate *)predicate + compoundBlock:(NSPredicate *(^)(NSCompoundPredicate *))compoundBlock + comparisonBlock:(NSPredicate *(^)(NSComparisonPredicate *predicate))comparisonBlock { + if ([predicate isKindOfClass:[NSCompoundPredicate class]]) { + if (compoundBlock) { + return compoundBlock((NSCompoundPredicate *)predicate); + } else { + NSCompoundPredicate *compound = (NSCompoundPredicate *)predicate; + + NSMutableArray *newSubpredicates = [NSMutableArray arrayWithCapacity:compound.subpredicates.count]; + for (NSPredicate *subPredicate in compound.subpredicates) { + [newSubpredicates addObject:[self _mapPredicate:subPredicate + compoundBlock:compoundBlock + comparisonBlock:comparisonBlock]]; + } + + NSCompoundPredicateType type = compound.compoundPredicateType; + return [[NSCompoundPredicate alloc] initWithType:type subpredicates:newSubpredicates]; + } + } + + if ([predicate isKindOfClass:[NSComparisonPredicate class]]) { + if (comparisonBlock) { + return comparisonBlock((NSComparisonPredicate *)predicate); + } else { + return predicate; + } + } + + [NSException raise:NSInternalInconsistencyException format:@"NSExpression predicates are not supported."]; + return nil; +} + +/*! + Returns a predicate that is the negation of the input predicate, or throws on error. + */ ++ (NSPredicate *)_negatePredicate:(NSPredicate *)predicate { + return [self _mapPredicate:predicate + compoundBlock:^NSPredicate *(NSCompoundPredicate *compound) { + switch (compound.compoundPredicateType) { + case NSNotPredicateType: { + return [compound.subpredicates objectAtIndex:0]; + } + case NSAndPredicateType: { + NSMutableArray *newSubpredicates = + [NSMutableArray arrayWithCapacity:compound.subpredicates.count]; + for (NSPredicate *subpredicate in compound.subpredicates) { + [newSubpredicates addObject:[self _negatePredicate:subpredicate]]; + } + return [NSCompoundPredicate orPredicateWithSubpredicates:newSubpredicates]; + } + case NSOrPredicateType: { + NSMutableArray *newSubpredicates = + [NSMutableArray arrayWithCapacity:compound.subpredicates.count]; + for (NSPredicate *subpredicate in compound.subpredicates) { + [newSubpredicates addObject:[self _negatePredicate:subpredicate]]; + } + return [NSCompoundPredicate andPredicateWithSubpredicates:newSubpredicates]; + } + default: { + [NSException raise:NSInternalInconsistencyException + format:@"This compound predicate cannot be negated. (%zd)", + compound.compoundPredicateType]; + return nil; + } + } + } comparisonBlock:^NSPredicate *(NSComparisonPredicate *comparison) { + NSPredicateOperatorType newType; + NSComparisonPredicateModifier newModifier = comparison.comparisonPredicateModifier; + SEL customSelector; + + switch (comparison.predicateOperatorType) { + case NSEqualToPredicateOperatorType: { + newType = NSNotEqualToPredicateOperatorType; + break; + } + case NSNotEqualToPredicateOperatorType: { + newType = NSEqualToPredicateOperatorType; + break; + } + case NSInPredicateOperatorType: { + newType = NSCustomSelectorPredicateOperatorType; + customSelector = NSSelectorFromString(@"notContainedIn:"); + break; + } + case NSLessThanPredicateOperatorType: { + newType = NSGreaterThanOrEqualToPredicateOperatorType; + break; + } + case NSLessThanOrEqualToPredicateOperatorType: { + newType = NSGreaterThanPredicateOperatorType; + break; + } + case NSGreaterThanPredicateOperatorType: { + newType = NSLessThanOrEqualToPredicateOperatorType; + break; + } + case NSGreaterThanOrEqualToPredicateOperatorType: { + newType = NSLessThanPredicateOperatorType; + break; + } + case NSBetweenPredicateOperatorType: { + [NSException raise:NSInternalInconsistencyException + format:@"A BETWEEN predicate was found after they should have been removed."]; + } + case NSMatchesPredicateOperatorType: + case NSLikePredicateOperatorType: + case NSBeginsWithPredicateOperatorType: + case NSEndsWithPredicateOperatorType: + case NSContainsPredicateOperatorType: + case NSCustomSelectorPredicateOperatorType: + default: { + [NSException raise:NSInternalInconsistencyException + format:@"This comparison predicate cannot be negated. (%@)", comparison]; + return nil; + } + } + + if (newType == NSCustomSelectorPredicateOperatorType) { + return [NSComparisonPredicate predicateWithLeftExpression:comparison.leftExpression + rightExpression:comparison.rightExpression + customSelector:customSelector]; + } else { + return [NSComparisonPredicate predicateWithLeftExpression:comparison.leftExpression + rightExpression:comparison.rightExpression + modifier:newModifier + type:newType + options:comparison.options]; + } + }]; +} + +/*! + Returns a version of the given predicate that contains no NSNotPredicateType compound predicates. + This greatly simplifies the diversity of predicates we have to handle later in the pipeline. + */ ++ (NSPredicate *)removeNegation:(NSPredicate *)predicate { + return [self _mapPredicate:predicate + compoundBlock:^NSPredicate *(NSCompoundPredicate *compound) { + // Remove negation from any subpredicates. + NSMutableArray *newSubpredicates = + [NSMutableArray arrayWithCapacity:compound.subpredicates.count]; + for (NSPredicate *subPredicate in [compound subpredicates]) { + [newSubpredicates addObject:[self removeNegation:subPredicate]]; + } + + // If this is a NOT predicate, return the negation of the subpredicate. + // Otherwise, just pass it on. + if (compound.compoundPredicateType == NSNotPredicateType) { + return [self _negatePredicate:[newSubpredicates objectAtIndex:0]]; + } else { + return [[NSCompoundPredicate alloc] initWithType:compound.compoundPredicateType + subpredicates:newSubpredicates]; + } + } comparisonBlock:nil]; +} + +/*! + Returns a version of the given predicate that contains no NSBetweenPredicateOperatorType predicates. + (A BETWEEN {C, D}) gets converted to (A >= C AND A <= D). + */ ++ (NSPredicate *)removeBetween:(NSPredicate *)predicate { + return [self _mapPredicate:predicate + compoundBlock:nil + comparisonBlock:^NSPredicate *(NSComparisonPredicate *predicate) { + if ([predicate predicateOperatorType] == NSBetweenPredicateOperatorType) { + NSComparisonPredicate *between = (NSComparisonPredicate *)predicate; + NSExpression *rhs = between.rightExpression; + + PFConsistencyAssert(rhs.expressionType == NSConstantValueExpressionType || + rhs.expressionType == NSAggregateExpressionType, + @"The right-hand side of a BETWEEN operation must be a value or literal."); + + PFConsistencyAssert([rhs.constantValue isKindOfClass:[NSArray class]], + @"The right-hand side of a BETWEEN operation must be an array."); + + NSArray *array = rhs.constantValue; + PFConsistencyAssert(array.count == 2, @"The right-hand side of a BETWEEN operation must have 2 items."); + + id minValue = array[0]; + id maxValue = array[1]; + + NSExpression *minExpression = ([minValue isKindOfClass:[NSExpression class]] + ? minValue + : [NSExpression expressionForConstantValue:minValue]); + NSExpression *maxExpression = ([maxValue isKindOfClass:[NSExpression class]] + ? maxValue + : [NSExpression expressionForConstantValue:maxValue]); + + return [NSCompoundPredicate andPredicateWithSubpredicates: + @[ [NSComparisonPredicate predicateWithLeftExpression:between.leftExpression + rightExpression:minExpression + modifier:between.comparisonPredicateModifier + type:NSGreaterThanOrEqualToPredicateOperatorType + options:between.options], + [NSComparisonPredicate predicateWithLeftExpression:between.leftExpression + rightExpression:maxExpression + modifier:between.comparisonPredicateModifier + type:NSLessThanOrEqualToPredicateOperatorType + options:between.options] + ]]; + } + return predicate; + }]; +} + +/*! + Returns a version of the given predicate that contains no Yoda conditions. + A Yoda condition is one where there's a constant on the LHS, such as (3 <= X). + The predicate returned by this method will instead have (X >= 3). + */ ++ (NSPredicate *)reverseYodaConditions:(NSPredicate *)predicate { + return [self _mapPredicate:predicate + compoundBlock:nil + comparisonBlock:^NSPredicate *(NSComparisonPredicate *comparison) { + if (comparison.leftExpression.expressionType == NSConstantValueExpressionType && + comparison.rightExpression.expressionType == NSKeyPathExpressionType) { + // This is a Yoda condition. + NSPredicateOperatorType newType; + switch ([comparison predicateOperatorType]) { + case NSEqualToPredicateOperatorType: { + newType = NSEqualToPredicateOperatorType; + break; + } + case NSNotEqualToPredicateOperatorType: { + newType = NSNotEqualToPredicateOperatorType; + break; + } + case NSLessThanPredicateOperatorType: { + newType = NSGreaterThanPredicateOperatorType; + break; + } + case NSLessThanOrEqualToPredicateOperatorType: { + newType = NSGreaterThanOrEqualToPredicateOperatorType; + break; + } + case NSGreaterThanPredicateOperatorType: { + newType = NSLessThanPredicateOperatorType; + break; + } + case NSGreaterThanOrEqualToPredicateOperatorType: { + newType = NSLessThanOrEqualToPredicateOperatorType; + break; + } + case NSInPredicateOperatorType: { + // This is like "5 IN X" where X is an array. + // Mongo handles this with syntax like "X = 5". + newType = NSEqualToPredicateOperatorType; + break; + } + case NSContainsPredicateOperatorType: + case NSMatchesPredicateOperatorType: + case NSLikePredicateOperatorType: + case NSBeginsWithPredicateOperatorType: + case NSEndsWithPredicateOperatorType: + case NSCustomSelectorPredicateOperatorType: + case NSBetweenPredicateOperatorType: + default: { + // We don't know how to reverse this Yoda condition, but maybe that's okay. + return predicate; + } + } + return [NSComparisonPredicate predicateWithLeftExpression:comparison.rightExpression + rightExpression:comparison.leftExpression + modifier:comparison.comparisonPredicateModifier + type:newType + options:comparison.options]; + } + return comparison; + }]; +} + +/*! + Returns a version of the given predicate converted to disjunctive normal form (DNF). + Unlike normalizeToDNF:error:, this method only accepts compound predicates, and assumes that + removeNegation:error: has already been applied to the given predicate. + */ ++ (NSPredicate *)asOrOfAnds:(NSCompoundPredicate *)compound { + // Convert the sub-predicates to DNF. + NSMutableArray *dnfSubpredicates = [NSMutableArray arrayWithCapacity:compound.subpredicates.count]; + for (NSPredicate *subpredicate in compound.subpredicates) { + if ([subpredicate isKindOfClass:[NSCompoundPredicate class]]) { + [dnfSubpredicates addObject:[self asOrOfAnds:(NSCompoundPredicate *)subpredicate]]; + } else { + [dnfSubpredicates addObject:subpredicate]; + } + } + + if (compound.compoundPredicateType == NSOrPredicateType) { + // We just need to flatten any child ORs into this OR. + NSMutableArray *newSubpredicates = [NSMutableArray arrayWithCapacity:dnfSubpredicates.count]; + for (NSPredicate *subpredicate in dnfSubpredicates) { + if ([subpredicate isKindOfClass:[NSCompoundPredicate class]] && + ((NSCompoundPredicate *)subpredicate).compoundPredicateType == NSOrPredicateType) { + for (NSPredicate *grandchild in ((NSCompoundPredicate *)subpredicate).subpredicates) { + [newSubpredicates addObject:grandchild]; + } + } else { + [newSubpredicates addObject:subpredicate]; + } + } + // There's no reason to wrap a single predicate in an OR. + if (newSubpredicates.count == 1) { + return newSubpredicates.lastObject; + } + return [NSCompoundPredicate orPredicateWithSubpredicates:newSubpredicates]; + } + + if (compound.compoundPredicateType == NSAndPredicateType) { + // This is tough. We need to take the cross product of all the subpredicates. + NSMutableArray *disjunction = [NSMutableArray arrayWithObject:@[]]; + for (NSPredicate *subpredicate in dnfSubpredicates) { + NSMutableArray *newDisjunction = [NSMutableArray array]; + if ([subpredicate isKindOfClass:[NSCompoundPredicate class]]) { + NSCompoundPredicate *subcompound = (NSCompoundPredicate *)subpredicate; + if (subcompound.compoundPredicateType == NSOrPredicateType) { + // We have to add every item in the OR to every AND list we have. + for (NSArray *conjunction in disjunction) { + for (NSPredicate *grandchild in subcompound.subpredicates) { + [newDisjunction addObject:[conjunction arrayByAddingObject:grandchild]]; + } + } + + } else if (subcompound.compoundPredicateType == NSAndPredicateType) { + // Just add all these conditions to all the conjunctions in progress. + for (NSArray *conjunction in disjunction) { + NSArray *grandchildren = subcompound.subpredicates; + [newDisjunction addObject:[conjunction arrayByAddingObjectsFromArray:grandchildren]]; + } + + } else { + [NSException raise:NSInternalInconsistencyException + format:@"[PFQuery asOrOfAnds:] found a compound query that wasn't OR or AND."]; + } + } else { + // Just add this condition to all the conjunctions in progress. + for (NSArray *conjunction in disjunction) { + [newDisjunction addObject:[conjunction arrayByAddingObject:subpredicate]]; + } + } + disjunction = newDisjunction; + } + + // Now disjunction contains an OR of ANDs. We just need to convert it to NSPredicates. + NSMutableArray *andPredicates = [NSMutableArray arrayWithCapacity:disjunction.count]; + for (NSArray *conjunction in disjunction) { + if (conjunction.count > 0) { + if (conjunction.count == 1) { + [andPredicates addObject:conjunction.lastObject]; + } else { + [andPredicates addObject:[NSCompoundPredicate + andPredicateWithSubpredicates:conjunction]]; + } + } + } + if (andPredicates.count == 1) { + return andPredicates.lastObject; + } else { + return [NSCompoundPredicate orPredicateWithSubpredicates:andPredicates]; + } + } + + [NSException raise:NSInternalInconsistencyException + format:@"[PFQuery asOrOfAnds:] was passed a compound query that wasn't OR or AND."]; + + return nil; +} + +/*! + Throws an exception if any comparison predicate inside this predicate has any modifiers, such as ANY, EVERY, etc. + */ ++ (void)assertNoPredicateModifiers:(NSPredicate *)predicate { + [self _mapPredicate:predicate + compoundBlock:nil + comparisonBlock:^NSPredicate *(NSComparisonPredicate *comparison) { + PFConsistencyAssert(comparison.comparisonPredicateModifier == NSDirectPredicateModifier, + @"Unsupported comparison predicate modifier %zd.", + comparison.comparisonPredicateModifier); + return comparison; + }]; +} + +/*! + Returns a version of the given predicate converted to disjunctive normal form (DNF), + known colloqially as an "or of ands", the only form of query that PFQuery accepts. + */ ++ (NSPredicate *)_normalizeToDNF:(NSPredicate *)predicate { + // Make sure they didn't use ANY, EVERY, etc. + [self assertNoPredicateModifiers:predicate]; + + // Change any BETWEEN operators to a conjunction. + predicate = [self removeBetween:predicate]; + + // Change any backwards (3 <= X) to the standardized (X >= 3). + predicate = [self reverseYodaConditions:predicate]; + + // Push any negation into the leaves. + predicate = [self removeNegation:predicate]; + + // Any comparison predicate is trivially DNF. + if (![predicate isKindOfClass:[NSCompoundPredicate class]]) { + return predicate; + } + + // It must be a compound predicate. Convert it to an OR of ANDs. + return [self asOrOfAnds:(NSCompoundPredicate *)predicate]; +} + +/*! + Takes a predicate like ((A AND B) OR (A AND C)) and rewrites it as the more efficient (A AND (B OR C)). + Assumes the input predicate is already in DNF. + // TODO: (nlutsenko): Move this logic into the server and remove it from here. + */ ++ (NSPredicate *)_hoistCommonPredicates:(NSPredicate *)predicate { + // This only makes sense for queries with a top-level OR. + if (!([predicate isKindOfClass:[NSCompoundPredicate class]] && + ((NSCompoundPredicate *)predicate).compoundPredicateType == NSOrPredicateType)) { + return predicate; + } + + // Find the set of predicates that are included in every branch of this OR. + NSArray *andPredicates = ((NSCompoundPredicate *)predicate).subpredicates; + NSMutableSet *common = nil; + for (NSPredicate *andPredicate in andPredicates) { + NSMutableSet *comparisonPredicates = nil; + if ([andPredicate isKindOfClass:[NSComparisonPredicate class]]) { + comparisonPredicates = [NSMutableSet setWithObject:andPredicate]; + } else { + comparisonPredicates = + [NSMutableSet setWithArray:((NSCompoundPredicate *)andPredicate).subpredicates]; + } + + if (!common) { + common = comparisonPredicates; + } else { + [common intersectSet:comparisonPredicates]; + } + } + + if (!common.count) { + return predicate; + } + + NSMutableArray *newAndPredicates = [NSMutableArray array]; + + // Okay, there were common sub-predicates. Hoist them up to this one. + for (NSPredicate *andPredicate in andPredicates) { + NSMutableSet *comparisonPredicates = nil; + if ([andPredicate isKindOfClass:[NSComparisonPredicate class]]) { + comparisonPredicates = [NSMutableSet setWithObject:andPredicate]; + } else { + comparisonPredicates = + [NSMutableSet setWithArray:((NSCompoundPredicate *)andPredicate).subpredicates]; + } + + for (NSPredicate *comparisonPredicate in common) { + [comparisonPredicates removeObject:comparisonPredicate]; + } + + if (comparisonPredicates.count == 0) { + // One of the OR predicates reduces to TRUE, so just return the hoisted part. + return [NSCompoundPredicate andPredicateWithSubpredicates:common.allObjects]; + } else if (comparisonPredicates.count == 1) { + [newAndPredicates addObject:comparisonPredicates.allObjects.lastObject]; + } else { + NSPredicate *newAndPredicate = + [NSCompoundPredicate andPredicateWithSubpredicates:comparisonPredicates.allObjects]; + [newAndPredicates addObject:newAndPredicate]; + } + } + + // Make an AND of the hoisted predicates and the OR of the modified subpredicates. + NSPredicate *newOrPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:newAndPredicates]; + NSArray *newPredicates = [@[ newOrPredicate ] arrayByAddingObjectsFromArray:common.allObjects]; + return [NSCompoundPredicate andPredicateWithSubpredicates:newPredicates]; +} + +///-------------------------------------- +#pragma mark - Regex +///-------------------------------------- + +/*! + This is used to create a regex string to match the input string. By using Q and E flags to match, we can do this + without requiring super expensive rewrites, but me must be careful to escape existing \E flags in the input string. + By replacing it with `\E\\E\Q`, the regex engine will end the old literal block, put in the user's `\E` string, and + Begin another literal block. + */ ++ (NSString *)regexStringForString:(NSString *)string { + return [NSString stringWithFormat:@"\\Q%@\\E", [string stringByReplacingOccurrencesOfString:@"\\E" + withString:@"\\E\\\\E\\Q"]]; +} + +///-------------------------------------- +#pragma mark - Errors +///-------------------------------------- + ++ (NSError *)objectNotFoundError { + return [PFErrorUtilities errorWithCode:kPFErrorObjectNotFound message:@"No results matched the query."]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Relation/PFRelationPrivate.h b/BreakingBad/Pods/Parse/Parse/Internal/Relation/PFRelationPrivate.h new file mode 100644 index 0000000..26d26fd --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Relation/PFRelationPrivate.h @@ -0,0 +1,27 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +@class PFDecoder; + +@interface PFRelation (Private) + ++ (PFRelation *)relationForObject:(PFObject *)parent forKey:(NSString *)key; ++ (PFRelation *)relationWithTargetClass:(NSString *)targetClass; ++ (PFRelation *)relationFromDictionary:(NSDictionary *)dictionary withDecoder:(PFDecoder *)decoder; +- (void)ensureParentIs:(PFObject *)someParent andKeyIs:(NSString *)someKey; +- (NSDictionary *)encodeIntoDictionary; +- (BOOL)_hasKnownObject:(PFObject *)object; +- (void)_addKnownObject:(PFObject *)object; +- (void)_removeKnownObject:(PFObject *)object; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Relation/State/PFMutableRelationState.h b/BreakingBad/Pods/Parse/Parse/Internal/Relation/State/PFMutableRelationState.h new file mode 100644 index 0000000..3fd99ed --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Relation/State/PFMutableRelationState.h @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRelationState.h" + +@interface PFMutableRelationState : PFRelationState + +@property (nonatomic, weak, readwrite) PFObject *parent; +@property (nonatomic, copy, readwrite) NSString *targetClass; +@property (nonatomic, copy, readwrite) NSMutableSet *knownObjects; +@property (nonatomic, copy, readwrite) NSString *key; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Relation/State/PFMutableRelationState.m b/BreakingBad/Pods/Parse/Parse/Internal/Relation/State/PFMutableRelationState.m new file mode 100644 index 0000000..6a92279 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Relation/State/PFMutableRelationState.m @@ -0,0 +1,62 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFMutableRelationState.h" + +#import "PFObject.h" +#import "PFRelationState_Private.h" + +@implementation PFMutableRelationState + +@dynamic parent; +@dynamic parentObjectId; +@dynamic parentClassName; +@dynamic targetClass; +@dynamic knownObjects; +@dynamic key; + +///-------------------------------------- +#pragma mark - PFBaseStateSubclass +///-------------------------------------- + ++ (NSDictionary *)propertyAttributes { + NSMutableDictionary *parentAttributes = [[super propertyAttributes] mutableCopy]; + + parentAttributes[@"knownObjects"] = [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeMutableCopy]; + + return parentAttributes; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _knownObjects = [[NSMutableSet alloc] init]; + + return self; +} + +///-------------------------------------- +#pragma mark - Properties +///-------------------------------------- + +- (void)setParent:(PFObject *)parent { + if (_parent != parent || ![self.parentClassName isEqualToString:parent.parseClassName] || + ![self.parentObjectId isEqualToString:parent.objectId]) { + _parent = parent; + _parentClassName = [[parent parseClassName] copy]; + _parentObjectId = [[parent objectId] copy]; + } +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Relation/State/PFRelationState.h b/BreakingBad/Pods/Parse/Parse/Internal/Relation/State/PFRelationState.h new file mode 100644 index 0000000..3ce8e80 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Relation/State/PFRelationState.h @@ -0,0 +1,30 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFBaseState.h" + +@class PFObject; + +@interface PFRelationState : PFBaseState + +@property (nonatomic, weak, readonly) PFObject *parent; +@property (nonatomic, copy, readonly) NSString *parentClassName; +@property (nonatomic, copy, readonly) NSString *parentObjectId; +@property (nonatomic, copy, readonly) NSString *targetClass; +@property (nonatomic, copy, readonly) NSSet *knownObjects; +@property (nonatomic, copy, readonly) NSString *key; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithState:(PFRelationState *)otherState; ++ (instancetype)stateWithState:(PFRelationState *)otherState; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Relation/State/PFRelationState.m b/BreakingBad/Pods/Parse/Parse/Internal/Relation/State/PFRelationState.m new file mode 100644 index 0000000..bdf36c6 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Relation/State/PFRelationState.m @@ -0,0 +1,65 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRelationState.h" +#import "PFRelationState_Private.h" + +#import "PFMutableRelationState.h" + +@implementation PFRelationState + +///-------------------------------------- +#pragma mark - PFBaseStateSubclass +///-------------------------------------- + ++ (NSDictionary *)propertyAttributes { + return @{ + @"parent": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeWeak], + @"parentClassName": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], + @"parentObjectId": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], + @"targetClass": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], + @"knownObjects": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], + @"key": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], + }; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _knownObjects = [[NSSet alloc] init]; + + return self; +} + +- (instancetype)initWithState:(PFRelationState *)otherState { + return [super initWithState:otherState]; +} + ++ (instancetype)stateWithState:(PFRelationState *)otherState { + return [super stateWithState:otherState]; +} + +///-------------------------------------- +#pragma mark - Copying +///-------------------------------------- + +- (instancetype)copyWithZone:(NSZone *)zone { + return [[PFRelationState allocWithZone:zone] initWithState:self]; +} + +- (instancetype)mutableCopyWithZone:(NSZone *)zone { + return [[PFMutableRelationState allocWithZone:zone] initWithState:self]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Relation/State/PFRelationState_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/Relation/State/PFRelationState_Private.h new file mode 100644 index 0000000..bf13b9e --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Relation/State/PFRelationState_Private.h @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRelationState.h" + +@interface PFRelationState() { +@protected + __weak PFObject *_parent; + NSString *_parentClassName; + NSString *_parentObjectId; + NSSet *_knownObjects; + NSString *_key; +} + +@property (nonatomic, weak, readwrite) PFObject *parent; +@property (nonatomic, copy, readwrite) NSString *parentClassName; +@property (nonatomic, copy, readwrite) NSString *parentObjectId; +@property (nonatomic, copy, readwrite) NSString *targetClass; +@property (nonatomic, copy, readwrite) NSSet *knownObjects; +@property (nonatomic, copy, readwrite) NSString *key; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Session/Controller/PFSessionController.h b/BreakingBad/Pods/Parse/Parse/Internal/Session/Controller/PFSessionController.h new file mode 100644 index 0000000..83d06e4 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Session/Controller/PFSessionController.h @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFDataProvider.h" + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFSession; + +NS_ASSUME_NONNULL_BEGIN + +@interface PFSessionController : NSObject + +@property (nonatomic, weak, readonly) id dataSource; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)initWithDataSource:(id)dataSource; ++ (instancetype)controllerWithDataSource:(id)dataSource; + +///-------------------------------------- +/// @name Current Session +///-------------------------------------- + +- (BFTask *)getCurrentSessionAsyncWithSessionToken:(nullable NSString *)sessionToken; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Session/Controller/PFSessionController.m b/BreakingBad/Pods/Parse/Parse/Internal/Session/Controller/PFSessionController.m new file mode 100644 index 0000000..7abe535 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Session/Controller/PFSessionController.m @@ -0,0 +1,60 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFSessionController.h" + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFCommandResult.h" +#import "PFCommandRunning.h" +#import "PFObjectPrivate.h" +#import "PFRESTSessionCommand.h" +#import "PFSession.h" + +@implementation PFSessionController + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithDataSource:(id)dataSource { + self = [super init]; + if (!self) return nil; + + _dataSource = dataSource; + + return self; +} + ++ (instancetype)controllerWithDataSource:(id)dataSource { + return [[self alloc] initWithDataSource:dataSource]; +} + +///-------------------------------------- +#pragma mark - Current Session +///-------------------------------------- + +- (BFTask *)getCurrentSessionAsyncWithSessionToken:(NSString *)sessionToken { + @weakify(self); + return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + @strongify(self); + PFRESTCommand *command = [PFRESTSessionCommand getCurrentSessionCommandWithSessionToken:sessionToken]; + return [self.dataSource.commandRunner runCommandAsync:command + withOptions:PFCommandRunningOptionRetryIfFailed]; + }] continueWithSuccessBlock:^id(BFTask *task) { + PFCommandResult *result = task.result; + NSDictionary *dictionary = result.result; + PFSession *session = [PFSession _objectFromDictionary:dictionary + defaultClassName:[PFSession parseClassName] + completeData:YES]; + return session; + }]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Session/PFSession_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/Session/PFSession_Private.h new file mode 100644 index 0000000..b647585 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Session/PFSession_Private.h @@ -0,0 +1,24 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +@class PFSessionController; + +@interface PFSession () + +///-------------------------------------- +/// @name Session Controller +///-------------------------------------- + ++ (PFSessionController *)sessionController; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Session/Utilities/PFSessionUtilities.h b/BreakingBad/Pods/Parse/Parse/Internal/Session/Utilities/PFSessionUtilities.h new file mode 100644 index 0000000..806d7da --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Session/Utilities/PFSessionUtilities.h @@ -0,0 +1,24 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface PFSessionUtilities : NSObject + +///-------------------------------------- +/// @name Session Token +///-------------------------------------- + ++ (BOOL)isSessionTokenRevocable:(nullable NSString *)sessionToken; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/Session/Utilities/PFSessionUtilities.m b/BreakingBad/Pods/Parse/Parse/Internal/Session/Utilities/PFSessionUtilities.m new file mode 100644 index 0000000..4dff476 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/Session/Utilities/PFSessionUtilities.m @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFSessionUtilities.h" + +@implementation PFSessionUtilities + +///-------------------------------------- +#pragma mark - Session Token +///-------------------------------------- + ++ (BOOL)isSessionTokenRevocable:(NSString *)sessionToken { + return (sessionToken && [sessionToken rangeOfString:@"r:"].location != NSNotFound); +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/ThreadSafety/PFThreadsafety.h b/BreakingBad/Pods/Parse/Parse/Internal/ThreadSafety/PFThreadsafety.h new file mode 100644 index 0000000..7ca2a64 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/ThreadSafety/PFThreadsafety.h @@ -0,0 +1,13 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +extern dispatch_queue_t PFThreadsafetyCreateQueueForObject(id object); +extern void PFThreadsafetySafeDispatchSync(dispatch_queue_t queue, dispatch_block_t block); diff --git a/BreakingBad/Pods/Parse/Parse/Internal/ThreadSafety/PFThreadsafety.m b/BreakingBad/Pods/Parse/Parse/Internal/ThreadSafety/PFThreadsafety.m new file mode 100644 index 0000000..e78f547 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/ThreadSafety/PFThreadsafety.m @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFThreadsafety.h" + +static void *const PFThreadsafetyQueueIDKey = (void *)&PFThreadsafetyQueueIDKey; + +dispatch_queue_t PFThreadsafetyCreateQueueForObject(id object) { + NSString *label = [NSStringFromClass([object class]) stringByAppendingString:@".synchronizationQueue"]; + dispatch_queue_t queue = dispatch_queue_create([label UTF8String], DISPATCH_QUEUE_SERIAL); + + void *uuid = calloc(1, sizeof(uuid)); + dispatch_queue_set_specific(queue, PFThreadsafetyQueueIDKey, uuid, free); + + return queue; +} + +void PFThreadsafetySafeDispatchSync(dispatch_queue_t queue, dispatch_block_t block) { + void *uuidMine = dispatch_get_specific(PFThreadsafetyQueueIDKey); + void *uuidOther = dispatch_queue_get_specific(queue, PFThreadsafetyQueueIDKey); + + if (uuidMine == uuidOther) { + block(); + } else { + dispatch_sync(queue, block); + } +} diff --git a/BreakingBad/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h b/BreakingBad/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h new file mode 100644 index 0000000..746c247 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h @@ -0,0 +1,61 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import +#import + +#import "PFCoreDataProvider.h" + +NS_ASSUME_NONNULL_BEGIN + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFUser; + +@interface PFUserAuthenticationController : NSObject + +@property (nonatomic, weak, readonly) id dataSource; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +- (instancetype)initWithDataSource:(id)dataSource; ++ (instancetype)controllerWithDataSource:(id)dataSource; + +///-------------------------------------- +/// @name Authentication Providers +///-------------------------------------- + +- (void)registerAuthenticationDelegate:(id)delegate forAuthType:(NSString *)authType; +- (void)unregisterAuthenticationDelegateForAuthType:(NSString *)authType; + +- (id)authenticationDelegateForAuthType:(NSString *)authType; + +///-------------------------------------- +/// @name Authentication +///-------------------------------------- + +- (BFTask PF_GENERIC(NSNumber *) *)restoreAuthenticationAsyncWithAuthData:(nullable NSDictionary *)authData + forAuthType:(NSString *)authType; +- (BFTask PF_GENERIC(NSNumber *) *)deauthenticateAsyncWithAuthType:(NSString *)authType; + +///-------------------------------------- +/// @name Log In +///-------------------------------------- + +- (BFTask *)logInUserAsyncWithAuthType:(NSString *)authType authData:(NSDictionary *)authData; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m b/BreakingBad/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m new file mode 100644 index 0000000..2f50838 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m @@ -0,0 +1,171 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFUserAuthenticationController.h" + +#import "BFTask+Private.h" +#import "PFMacros.h" +#import "PFUserPrivate.h" +#import "PFObjectPrivate.h" +#import "PFAnonymousUtils.h" +#import "PFAnonymousAuthenticationProvider.h" +#import "PFUserController.h" +#import "PFCurrentUserController.h" +#import "PFAssert.h" + +@interface PFUserAuthenticationController () { + dispatch_queue_t _dataAccessQueue; + NSMutableDictionary PF_GENERIC(NSString *, id) *_authenticationDelegates; +} + +@end + +@implementation PFUserAuthenticationController + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithDataSource:(id)dataSource { + self = [super init]; + if (!self) return nil; + + _dataSource = dataSource; + _dataAccessQueue = dispatch_queue_create("com.parse.user.authenticationManager", DISPATCH_QUEUE_SERIAL); + _authenticationDelegates = [NSMutableDictionary dictionary]; + + return self; +} + ++ (instancetype)controllerWithDataSource:(id)dataSource { + return [[self alloc] initWithDataSource:dataSource]; +} + +///-------------------------------------- +#pragma mark - Authentication Providers +///-------------------------------------- + +- (void)registerAuthenticationDelegate:(id)delegate forAuthType:(NSString *)authType { + PFParameterAssert(delegate, @"Authentication delegate can't be `nil`."); + PFParameterAssert(authType, @"`authType` can't be `nil`."); + PFConsistencyAssert(![self authenticationDelegateForAuthType:authType], + @"Authentication delegate already registered for authType `%@`.", authType); + + dispatch_sync(_dataAccessQueue, ^{ + _authenticationDelegates[authType] = delegate; + }); + + // TODO: (nlutsenko) Decouple this further. + [[self.dataSource.currentUserController getCurrentUserAsyncWithOptions:0] continueWithSuccessBlock:^id(BFTask *task) { + PFUser *user = task.result; + [user synchronizeAuthDataWithAuthType:authType]; + return nil; + }]; +} + +- (void)unregisterAuthenticationDelegateForAuthType:(NSString *)authType { + if (!authType) { + return; + } + dispatch_sync(_dataAccessQueue, ^{ + [_authenticationDelegates removeObjectForKey:authType]; + }); +} + +- (id)authenticationDelegateForAuthType:(NSString *)authType { + if (!authType) { + return nil; + } + + __block id delegate = nil; + dispatch_sync(_dataAccessQueue, ^{ + delegate = _authenticationDelegates[authType]; + }); + return delegate; +} + +///-------------------------------------- +#pragma mark - Authentication +///-------------------------------------- + +- (BFTask PF_GENERIC(NSNumber *)*)restoreAuthenticationAsyncWithAuthData:(nullable NSDictionary *)authData + forAuthType:(NSString *)authType { + id provider = [self authenticationDelegateForAuthType:authType]; + if (!provider) { + return [BFTask taskWithResult:@YES]; + } + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id { + return [BFTask taskWithResult:@([provider restoreAuthenticationWithAuthData:authData])]; + }]; +} + +- (BFTask PF_GENERIC(NSNumber *)*)deauthenticateAsyncWithAuthType:(NSString *)authType { + return [self restoreAuthenticationAsyncWithAuthData:nil forAuthType:authType]; +} + +///-------------------------------------- +#pragma mark - Log In +///-------------------------------------- + +- (BFTask *)logInUserAsyncWithAuthType:(NSString *)authType authData:(NSDictionary *)authData { + //TODO: (nlutsenko) Make it fully async. + //TODO: (nlutsenko) Inject `PFUserController` here. + PFUser *currentUser = [PFUser currentUser]; + if (currentUser && [PFAnonymousUtils isLinkedWithUser:currentUser]) { + if ([currentUser isLazy]) { + PFUser *user = currentUser; + BFTask *resolveLaziness = nil; + NSDictionary *oldAnonymousData = nil; + @synchronized(user.lock) { + oldAnonymousData = user.authData[PFAnonymousUserAuthenticationType]; + + // Replace any anonymity with the new linked authData + [user stripAnonymity]; + + [user.authData setObject:authData forKey:authType]; + [user.linkedServiceNames addObject:authType]; + + resolveLaziness = [user resolveLazinessAsync:[BFTask taskWithResult:nil]]; + } + + return [resolveLaziness continueAsyncWithBlock:^id(BFTask *task) { + if (task.isCancelled || task.exception || task.error) { + [user.authData removeObjectForKey:authType]; + [user.linkedServiceNames removeObject:authType]; + [user restoreAnonymity:oldAnonymousData]; + return task; + } + return task.result; + }]; + } else { + return [[currentUser linkWithAuthTypeInBackground:authType + authData:authData] continueAsyncWithBlock:^id(BFTask *task) { + NSError *error = task.error; + if (error) { + if (error.code == kPFErrorAccountAlreadyLinked) { + // An account that's linked to the given authData already exists, + // so log in instead of trying to claim. + return [[PFUser userController] logInCurrentUserAsyncWithAuthType:authType + authData:authData + revocableSession:[PFUser _isRevocableSessionEnabled]]; + } else { + return task; + } + } + + return [BFTask taskWithResult:currentUser]; + }]; + } + } + return [[PFUser userController] logInCurrentUserAsyncWithAuthType:authType + authData:authData + revocableSession:[PFUser _isRevocableSessionEnabled]]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h b/BreakingBad/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h new file mode 100644 index 0000000..d906dd1 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h @@ -0,0 +1,27 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +extern NSString *const PFAnonymousUserAuthenticationType; + +@interface PFAnonymousAuthenticationProvider : NSObject + +/*! + Gets auth data with a fresh UUID. + */ +@property (nonatomic, copy, readonly) NSDictionary *authData; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m b/BreakingBad/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m new file mode 100644 index 0000000..e338151 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFAnonymousAuthenticationProvider.h" + +#import + +NSString *const PFAnonymousUserAuthenticationType = @"anonymous"; + +@implementation PFAnonymousAuthenticationProvider + +///-------------------------------------- +#pragma mark - PFAnonymousAuthenticationProvider +///-------------------------------------- + +- (BOOL)restoreAuthenticationWithAuthData:(NSDictionary *)authData { + return YES; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (NSDictionary *)authData { + NSString *uuidString = [NSUUID UUID].UUIDString; + uuidString = [uuidString lowercaseString]; + return @{ @"id" : uuidString }; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h new file mode 100644 index 0000000..6d966f3 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@class PFAnonymousAuthenticationProvider; +@class PFUser; + +@interface PFAnonymousUtils (Private) + ++ (PFAnonymousAuthenticationProvider *)_authenticationProvider; ++ (void)_clearAuthenticationProvider; + ++ (PFUser *)_lazyLogIn; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h b/BreakingBad/Pods/Parse/Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h new file mode 100644 index 0000000..4ccbf77 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h @@ -0,0 +1,18 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFObjectFileCodingLogic.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFUserFileCodingLogic : PFObjectFileCodingLogic + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m b/BreakingBad/Pods/Parse/Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m new file mode 100644 index 0000000..d459bc2 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m @@ -0,0 +1,60 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFUserFileCodingLogic.h" + +#import "PFDecoder.h" +#import "PFMutableUserState.h" +#import "PFObjectPrivate.h" +#import "PFUserConstants.h" +#import "PFUserPrivate.h" + +@interface PFUserFileCodingLogic () + +@end + +@implementation PFUserFileCodingLogic + +///-------------------------------------- +#pragma mark - Coding +///-------------------------------------- + +- (void)updateObject:(PFObject *)object fromDictionary:(NSDictionary *)dictionary usingDecoder:(PFDecoder *)decoder { + PFUser *user = (PFUser *)object; + + NSString *newSessionToken = dictionary[@"session_token"] ?: dictionary[PFUserSessionTokenRESTKey]; + if (newSessionToken) { + PFMutableUserState *state = [user._state mutableCopy]; + state.sessionToken = newSessionToken; + user._state = state; + } + + // Merge the linked service metadata + NSDictionary *newAuthData = dictionary[@"auth_data"] ?: dictionary[PFUserAuthDataRESTKey]; + newAuthData = [decoder decodeObject:newAuthData]; + if (newAuthData) { + [user.authData removeAllObjects]; + [user.linkedServiceNames removeAllObjects]; + [newAuthData enumerateKeysAndObjectsUsingBlock:^(id key, id linkData, BOOL *stop) { + if (linkData != [NSNull null]) { + user.authData[key] = linkData; + [user.linkedServiceNames addObject:key]; + [user synchronizeAuthDataWithAuthType:key]; + } else { + [user.authData removeObjectForKey:key]; + [user.linkedServiceNames removeObject:key]; + [user synchronizeAuthDataWithAuthType:key]; + } + }]; + } + + [super updateObject:user fromDictionary:dictionary usingDecoder:decoder]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/User/Constants/PFUserConstants.h b/BreakingBad/Pods/Parse/Parse/Internal/User/Constants/PFUserConstants.h new file mode 100644 index 0000000..f8da41e --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/User/Constants/PFUserConstants.h @@ -0,0 +1,15 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +extern NSString *const PFUserUsernameRESTKey; +extern NSString *const PFUserPasswordRESTKey; +extern NSString *const PFUserSessionTokenRESTKey; +extern NSString *const PFUserAuthDataRESTKey; diff --git a/BreakingBad/Pods/Parse/Parse/Internal/User/Constants/PFUserConstants.m b/BreakingBad/Pods/Parse/Parse/Internal/User/Constants/PFUserConstants.m new file mode 100644 index 0000000..ecccaf1 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/User/Constants/PFUserConstants.m @@ -0,0 +1,15 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFUserConstants.h" + +NSString *const PFUserUsernameRESTKey = @"username"; +NSString *const PFUserPasswordRESTKey = @"password"; +NSString *const PFUserSessionTokenRESTKey = @"sessionToken"; +NSString *const PFUserAuthDataRESTKey = @"authData"; diff --git a/BreakingBad/Pods/Parse/Parse/Internal/User/Controller/PFUserController.h b/BreakingBad/Pods/Parse/Parse/Internal/User/Controller/PFUserController.h new file mode 100644 index 0000000..4ff2208 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/User/Controller/PFUserController.h @@ -0,0 +1,61 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "PFCoreDataProvider.h" +#import "PFDataProvider.h" +#import "PFObjectControlling.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface PFUserController : NSObject + +@property (nonatomic, weak, readonly) id commonDataSource; +@property (nonatomic, weak, readonly) id coreDataSource; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithCommonDataSource:(id)commonDataSource + coreDataSource:(id)coreDataSource; ++ (instancetype)controllerWithCommonDataSource:(id)commonDataSource + coreDataSource:(id)coreDataSource; + +///-------------------------------------- +/// @name Log In +///-------------------------------------- + +- (BFTask *)logInCurrentUserAsyncWithSessionToken:(NSString *)sessionToken; +- (BFTask *)logInCurrentUserAsyncWithUsername:(NSString *)username + password:(NSString *)password + revocableSession:(BOOL)revocableSession; + +//TODO: (nlutsenko) Move this method into PFUserAuthenticationController after PFUser is decoupled further. +- (BFTask *)logInCurrentUserAsyncWithAuthType:(NSString *)authType + authData:(NSDictionary *)authData + revocableSession:(BOOL)revocableSession; + +///-------------------------------------- +/// @name Reset Password +///-------------------------------------- + +- (BFTask *)requestPasswordResetAsyncForEmail:(NSString *)email; + +///-------------------------------------- +/// @name Log Out +///-------------------------------------- + +- (BFTask *)logOutUserAsyncWithSessionToken:(NSString *)sessionToken; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Internal/User/Controller/PFUserController.m b/BreakingBad/Pods/Parse/Parse/Internal/User/Controller/PFUserController.m new file mode 100644 index 0000000..cebeb52 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/User/Controller/PFUserController.m @@ -0,0 +1,164 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFUserController.h" + +#import "BFTask+Private.h" +#import "PFCommandResult.h" +#import "PFCommandRunning.h" +#import "PFCurrentUserController.h" +#import "PFErrorUtilities.h" +#import "PFMacros.h" +#import "PFObjectPrivate.h" +#import "PFRESTUserCommand.h" +#import "PFUserPrivate.h" + +@implementation PFUserController + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithCommonDataSource:(id)commonDataSource + coreDataSource:(id)coreDataSource { + self = [super init]; + if (!self) return nil; + + _commonDataSource = commonDataSource; + _coreDataSource = coreDataSource; + + return self; +} + ++ (instancetype)controllerWithCommonDataSource:(id)commonDataSource + coreDataSource:(id)coreDataSource { + return [[self alloc] initWithCommonDataSource:commonDataSource + coreDataSource:coreDataSource]; +} + +///-------------------------------------- +#pragma mark - Log In +///-------------------------------------- + +- (BFTask *)logInCurrentUserAsyncWithSessionToken:(NSString *)sessionToken { + @weakify(self); + return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + @strongify(self); + PFRESTCommand *command = [PFRESTUserCommand getCurrentUserCommandWithSessionToken:sessionToken]; + return [self.commonDataSource.commandRunner runCommandAsync:command + withOptions:PFCommandRunningOptionRetryIfFailed]; + }] continueWithSuccessBlock:^id(BFTask *task) { + @strongify(self); + PFCommandResult *result = task.result; + NSDictionary *dictionary = result.result; + + // We test for a null object, if it isn't, we can use the response to create a PFUser. + if ([dictionary isKindOfClass:[NSNull class]] || !dictionary) { + return [BFTask taskWithError:[PFErrorUtilities errorWithCode:kPFErrorObjectNotFound + message:@"Invalid Session Token."]]; + } + + PFUser *user = [PFUser _objectFromDictionary:dictionary + defaultClassName:[PFUser parseClassName] + completeData:YES]; + // Serialize the object to disk so we can later access it via currentUser + PFCurrentUserController *controller = self.coreDataSource.currentUserController; + return [[controller saveCurrentObjectAsync:user] continueWithBlock:^id(BFTask *task) { + return user; + }]; + }]; +} + +- (BFTask *)logInCurrentUserAsyncWithUsername:(NSString *)username + password:(NSString *)password + revocableSession:(BOOL)revocableSession { + @weakify(self); + return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + PFRESTCommand *command = [PFRESTUserCommand logInUserCommandWithUsername:username + password:password + revocableSession:revocableSession]; + return [self.commonDataSource.commandRunner runCommandAsync:command + withOptions:PFCommandRunningOptionRetryIfFailed]; + }] continueWithSuccessBlock:^id(BFTask *task) { + @strongify(self); + PFCommandResult *result = task.result; + NSDictionary *dictionary = result.result; + + // We test for a null object, if it isn't, we can use the response to create a PFUser. + if ([dictionary isKindOfClass:[NSNull class]] || !dictionary) { + return [BFTask taskWithError:[PFErrorUtilities errorWithCode:kPFErrorObjectNotFound + message:@"Invalid login credentials."]]; + } + + PFUser *user = [PFUser _objectFromDictionary:dictionary + defaultClassName:[PFUser parseClassName] + completeData:YES]; + + // Serialize the object to disk so we can later access it via currentUser + PFCurrentUserController *controller = self.coreDataSource.currentUserController; + return [[controller saveCurrentObjectAsync:user] continueWithBlock:^id(BFTask *task) { + return user; + }]; + }]; +} + +- (BFTask *)logInCurrentUserAsyncWithAuthType:(NSString *)authType + authData:(NSDictionary *)authData + revocableSession:(BOOL)revocableSession { + @weakify(self); + return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + @strongify(self); + PFRESTCommand *command = [PFRESTUserCommand serviceLoginUserCommandWithAuthenticationType:authType + authenticationData:authData + revocableSession:revocableSession]; + return [self.commonDataSource.commandRunner runCommandAsync:command + withOptions:PFCommandRunningOptionRetryIfFailed]; + }] continueWithSuccessBlock:^id(BFTask *task) { + PFCommandResult *result = task.result; + PFUser *user = [PFUser _objectFromDictionary:result.result + defaultClassName:[PFUser parseClassName] + completeData:YES]; + @synchronized ([user lock]) { + user.authData[authType] = authData; + [user.linkedServiceNames addObject:authType]; + [user startSave]; + return [user _handleServiceLoginCommandResult:result]; + } + }]; +} + +///-------------------------------------- +#pragma mark - Reset Password +///-------------------------------------- + +- (BFTask *)requestPasswordResetAsyncForEmail:(NSString *)email { + @weakify(self); + return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + @strongify(self); + PFRESTCommand *command = [PFRESTUserCommand resetPasswordCommandForUserWithEmail:email]; + return [self.commonDataSource.commandRunner runCommandAsync:command + withOptions:PFCommandRunningOptionRetryIfFailed]; + }] continueWithSuccessResult:nil]; +} + +///-------------------------------------- +#pragma mark - Log Out +///-------------------------------------- + +- (BFTask *)logOutUserAsyncWithSessionToken:(NSString *)sessionToken { + @weakify(self); + return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + @strongify(self); + PFRESTCommand *command = [PFRESTUserCommand logOutUserCommandWithSessionToken:sessionToken]; + return [self.commonDataSource.commandRunner runCommandAsync:command + withOptions:PFCommandRunningOptionRetryIfFailed]; + }] continueWithSuccessResult:nil]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/User/CurrentUserController/PFCurrentUserController.h b/BreakingBad/Pods/Parse/Parse/Internal/User/CurrentUserController/PFCurrentUserController.h new file mode 100644 index 0000000..15b8e99 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/User/CurrentUserController/PFCurrentUserController.h @@ -0,0 +1,59 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFCoreDataProvider.h" +#import "PFCurrentObjectControlling.h" +#import "PFDataProvider.h" +#import "PFMacros.h" + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFUser; + +typedef NS_OPTIONS(NSUInteger, PFCurrentUserLoadingOptions) { + PFCurrentUserLoadingOptionCreateLazyIfNotAvailable = 1 << 0, +}; + +@interface PFCurrentUserController : NSObject + +@property (nonatomic, weak, readonly) id commonDataSource; +@property (nonatomic, weak, readonly) id coreDataSource; + +@property (atomic, assign) BOOL automaticUsersEnabled; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithStorageType:(PFCurrentObjectStorageType)storageType + commonDataSource:(id)commonDataSource + coreDataSource:(id)coreDataSource NS_DESIGNATED_INITIALIZER; ++ (instancetype)controllerWithStorageType:(PFCurrentObjectStorageType)storageType + commonDataSource:(id)commonDataSource + coreDataSource:(id)coreDataSource; + +///-------------------------------------- +/// @name User +///-------------------------------------- + +- (BFTask *)getCurrentUserAsyncWithOptions:(PFCurrentUserLoadingOptions)options; + +- (BFTask *)logOutCurrentUserAsync; + +///-------------------------------------- +/// @name Session Token +///-------------------------------------- + +- (BFTask *)getCurrentUserSessionTokenAsync; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/User/CurrentUserController/PFCurrentUserController.m b/BreakingBad/Pods/Parse/Parse/Internal/User/CurrentUserController/PFCurrentUserController.m new file mode 100644 index 0000000..098b4e6 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/User/CurrentUserController/PFCurrentUserController.m @@ -0,0 +1,364 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFCurrentUserController.h" + +#import + +#import "BFTask+Private.h" +#import "PFAnonymousUtils_Private.h" +#import "PFAssert.h" +#import "PFAsyncTaskQueue.h" +#import "PFFileManager.h" +#import "PFKeychainStore.h" +#import "PFMutableUserState.h" +#import "PFObjectFilePersistenceController.h" +#import "PFObjectPrivate.h" +#import "PFQuery.h" +#import "PFUserConstants.h" +#import "PFUserPrivate.h" + +@interface PFCurrentUserController () { + dispatch_queue_t _dataQueue; + PFAsyncTaskQueue *_dataTaskQueue; + + PFUser *_currentUser; + BOOL _currentUserMatchesDisk; +} + +@end + +@implementation PFCurrentUserController + +@synthesize storageType = _storageType; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + PFNotDesignatedInitializer(); +} + +- (instancetype)initWithStorageType:(PFCurrentObjectStorageType)storageType + commonDataSource:(id)commonDataSource + coreDataSource:(id)coreDataSource { + self = [super init]; + if (!self) return nil; + + _dataQueue = dispatch_queue_create("com.parse.currentUser.controller", DISPATCH_QUEUE_CONCURRENT); + _dataTaskQueue = [PFAsyncTaskQueue taskQueue]; + + _storageType = storageType; + _commonDataSource = commonDataSource; + _coreDataSource = coreDataSource; + + return self; +} + ++ (instancetype)controllerWithStorageType:(PFCurrentObjectStorageType)dataStorageType + commonDataSource:(id)commonDataSource + coreDataSource:(id)coreDataSource { + return [[self alloc] initWithStorageType:dataStorageType + commonDataSource:commonDataSource + coreDataSource:coreDataSource]; +} + +///-------------------------------------- +#pragma mark - PFCurrentObjectControlling +///-------------------------------------- + +- (BFTask *)getCurrentObjectAsync { + PFCurrentUserLoadingOptions options = 0; + if (self.automaticUsersEnabled) { + options |= PFCurrentUserLoadingOptionCreateLazyIfNotAvailable; + } + return [self getCurrentUserAsyncWithOptions:options]; +} + +- (BFTask *)saveCurrentObjectAsync:(PFUser *)object { + return [_dataTaskQueue enqueue:^id(BFTask *task) { + return [self _saveCurrentUserAsync:object]; + }]; +} + +///-------------------------------------- +#pragma mark - User +///-------------------------------------- + +- (BFTask *)getCurrentUserAsyncWithOptions:(PFCurrentUserLoadingOptions)options { + return [_dataTaskQueue enqueue:^id(BFTask *task) { + return [self _getCurrentUserAsyncWithOptions:options]; + }]; +} + +- (BFTask *)_getCurrentUserAsyncWithOptions:(PFCurrentUserLoadingOptions)options { + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + __block BOOL matchesDisk = NO; + __block PFUser *currentUser = nil; + dispatch_sync(_dataQueue, ^{ + matchesDisk = _currentUserMatchesDisk; + currentUser = _currentUser; + }); + if (currentUser) { + return currentUser; + } + + if (matchesDisk) { + if (options & PFCurrentUserLoadingOptionCreateLazyIfNotAvailable) { + return [self _lazyLogInUser]; + } + return nil; + } + + return [[[[self _loadCurrentUserFromDiskAsync] continueWithSuccessBlock:^id(BFTask *task) { + PFUser *user = task.result; + // If the object was not yet saved, but is already linked with AnonymousUtils - it means it is lazy. + // So mark it's state as `isLazy` and make it `dirty` + if (!user.objectId && [PFAnonymousUtils isLinkedWithUser:user]) { + user.isLazy = YES; + [user _setDirty:YES]; + } + return user; + }] continueWithBlock:^id(BFTask *task) { + dispatch_barrier_sync(_dataQueue, ^{ + _currentUser = task.result; + _currentUserMatchesDisk = !task.faulted; + }); + return task; + }] continueWithBlock:^id(BFTask *task) { + // If there's no user and automatic user is enabled, do lazy login. + if (!task.result && (options & PFCurrentUserLoadingOptionCreateLazyIfNotAvailable)) { + return [self _lazyLogInUser]; + } + return task; + }]; + }]; +} + +- (BFTask *)_saveCurrentUserAsync:(PFUser *)user { + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + __block PFUser *currentUser = nil; + dispatch_sync(_dataQueue, ^{ + currentUser = _currentUser; + }); + + BFTask *task = [BFTask taskWithResult:nil]; + // Check for objectId equality to not logout in case we are saving another instance of the same user. + if (currentUser != nil && currentUser != user && ![user.objectId isEqualToString:currentUser.objectId]) { + task = [task continueWithBlock:^id(BFTask *task) { + return [currentUser _logOutAsync]; + }]; + } + return [[task continueWithBlock:^id(BFTask *task) { + @synchronized (user.lock) { + [user setIsCurrentUser:YES]; + [user synchronizeAllAuthData]; + } + return [self _saveCurrentUserToDiskAsync:user]; + }] continueWithBlock:^id(BFTask *task) { + dispatch_barrier_sync(_dataQueue, ^{ + _currentUser = user; + _currentUserMatchesDisk = !task.faulted && !task.cancelled; + }); + return user; + }]; + }]; +} + +- (BFTask *)logOutCurrentUserAsync { + return [_dataTaskQueue enqueue:^id(BFTask *task) { + return [[self _getCurrentUserAsyncWithOptions:0] continueWithBlock:^id(BFTask *task) { + BFTask *userLogoutTask = nil; + + PFUser *user = task.result; + if (user) { + userLogoutTask = [user _logOutAsync]; + } else { + userLogoutTask = [BFTask taskWithResult:nil]; + } + + NSString *filePath = [self.commonDataSource.fileManager parseDataItemPathForPathComponent:PFUserCurrentUserFileName]; + BFTask *fileTask = [PFFileManager removeItemAtPathAsync:filePath]; + BFTask *unpinTask = nil; + + if (self.storageType == PFCurrentObjectStorageTypeOfflineStore) { + unpinTask = [PFObject unpinAllObjectsInBackgroundWithName:PFUserCurrentUserPinName]; + } else { + unpinTask = [BFTask taskWithResult:nil]; + } + + [self _deleteSensitiveUserDataFromKeychainWithItemName:PFUserCurrentUserFileName]; + + BFTask *logoutTask = [[BFTask taskForCompletionOfAllTasks:@[ fileTask, unpinTask ]] continueWithBlock:^id(BFTask *task) { + dispatch_barrier_sync(_dataQueue, ^{ + _currentUser = nil; + _currentUserMatchesDisk = YES; + }); + return nil; + }]; + return [BFTask taskForCompletionOfAllTasks:@[ userLogoutTask, logoutTask ]]; + }]; + }]; +} + +///-------------------------------------- +#pragma mark - Data Storage +///-------------------------------------- + +- (BFTask *)_loadCurrentUserFromDiskAsync { + BFTask *task = nil; + if (self.storageType == PFCurrentObjectStorageTypeOfflineStore) { + // Try loading from OfflineStore + PFQuery *query = [[[PFQuery queryWithClassName:[PFUser parseClassName]] + fromPinWithName:PFUserCurrentUserPinName] + // We need to ignoreACLs here because right now we don't have currentUser. + ignoreACLs]; + + // Silence the warning if we are loading from LDS + task = [[query findObjectsInBackground] continueWithSuccessBlock:^id(BFTask *task) { + NSArray *results = task.result; + if ([results count] == 1) { + return [BFTask taskWithResult:results.firstObject]; + } else if ([results count] != 0) { + return [[PFObject unpinAllObjectsInBackgroundWithName:PFUserCurrentUserPinName] + continueWithSuccessResult:nil]; + } + + // Backward compatibility if we previously have non-LDS currentUser. + return [PFObject _migrateObjectInBackgroundFromFile:PFUserCurrentUserFileName toPin:PFUserCurrentUserPinName usingMigrationBlock:^id(BFTask *task) { + PFUser *user = task.result; + // Only migrate session token to Keychain if it was loaded from Data File. + if (user.sessionToken) { + return [self _saveSensitiveUserDataAsync:user + toKeychainItemWithName:PFUserCurrentUserKeychainItemName]; + } + return nil; + }]; + }]; + } else { + PFObjectFilePersistenceController *controller = self.coreDataSource.objectFilePersistenceController; + task = [controller loadPersistentObjectAsyncForKey:PFUserCurrentUserFileName]; + } + return [task continueWithSuccessBlock:^id(BFTask *task) { + PFUser *user = task.result; + [user setIsCurrentUser:YES]; + return [[self _loadSensitiveUserDataAsync:user + fromKeychainItemWithName:PFUserCurrentUserKeychainItemName] continueWithSuccessResult:user]; + }]; +} + +- (BFTask *)_saveCurrentUserToDiskAsync:(PFUser *)user { + if (self.storageType == PFCurrentObjectStorageTypeOfflineStore) { + return [[[PFObject unpinAllObjectsInBackgroundWithName:PFUserCurrentUserPinName] continueWithSuccessBlock:^id(BFTask *task) { + return [self _saveSensitiveUserDataAsync:user toKeychainItemWithName:PFUserCurrentUserKeychainItemName]; + }] continueWithSuccessBlock:^id(BFTask *task) { + // We don't want to include children of `currentUser` automatically. + return [user _pinInBackgroundWithName:PFUserCurrentUserPinName includeChildren:NO]; + }]; + } + + return [[self _saveSensitiveUserDataAsync:user + toKeychainItemWithName:PFUserCurrentUserKeychainItemName] continueWithBlock:^id(BFTask *task) { + PFObjectFilePersistenceController *controller = self.coreDataSource.objectFilePersistenceController; + return [controller persistObjectAsync:user forKey:PFUserCurrentUserFileName]; + }]; +} + +///-------------------------------------- +#pragma mark - Sensitive Data +///-------------------------------------- + +- (BFTask *)_loadSensitiveUserDataAsync:(PFUser *)user fromKeychainItemWithName:(NSString *)itemName { + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + NSDictionary *userData = self.commonDataSource.keychainStore[itemName]; + @synchronized (user.lock) { + if (userData) { + PFMutableUserState *state = [user._state mutableCopy]; + + NSString *sessionToken = userData[PFUserSessionTokenRESTKey] ?: userData[@"session_token"]; + if (sessionToken) { + state.sessionToken = sessionToken; + } + + user._state = state; + + NSDictionary *newAuthData = userData[PFUserAuthDataRESTKey] ?: userData[@"auth_data"]; + [newAuthData enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + user.authData[key] = obj; + if (obj != nil) { + [user.linkedServiceNames addObject:key]; + } + [user synchronizeAuthDataWithAuthType:key]; + }]; + } + } + return nil; + }]; +} + +- (BFTask *)_saveSensitiveUserDataAsync:(PFUser *)user toKeychainItemWithName:(NSString *)itemName { + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + NSMutableDictionary *userData = [NSMutableDictionary dictionaryWithCapacity:2]; + @synchronized (user.lock) { + if (user.sessionToken) { + userData[PFUserSessionTokenRESTKey] = [user.sessionToken copy]; + } + if ([user.authData count]) { + userData[PFUserAuthDataRESTKey] = [user.authData copy]; + } + } + self.commonDataSource.keychainStore[itemName] = userData; + + return nil; + }]; +} + +- (void)_deleteSensitiveUserDataFromKeychainWithItemName:(NSString *)itemName { + [self.commonDataSource.keychainStore removeObjectForKey:itemName]; +} + +///-------------------------------------- +#pragma mark - Session Token +///-------------------------------------- + +- (BFTask *)getCurrentUserSessionTokenAsync { + return [[self getCurrentUserAsyncWithOptions:0] continueWithSuccessBlock:^id(BFTask *task) { + PFUser *user = task.result; + return user.sessionToken; + }]; +} + +///-------------------------------------- +#pragma mark - Lazy Login +///-------------------------------------- + +- (BFTask *)_lazyLogInUser { + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + PFUser *user = [PFAnonymousUtils _lazyLogIn]; + + // When LDS is enabled, we will immediately save the anon user to LDS. When LDS is disabled, we + // will create the anon user, but will lazily save it to Parse on an object save that has this + // user in its ACL. + // The main differences here would be that non-LDS may have different anon users in different + // sessions until an object is saved and LDS will persist the same anon user. This shouldn't be a + // big deal... + if (self.storageType == PFCurrentObjectStorageTypeOfflineStore) { + return [[self _saveCurrentUserAsync:user] continueWithSuccessResult:user]; + } + + dispatch_barrier_sync(_dataQueue, ^{ + _currentUser = user; + _currentUserMatchesDisk = YES; + }); + return user; + }]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/User/PFUserPrivate.h b/BreakingBad/Pods/Parse/Parse/Internal/User/PFUserPrivate.h new file mode 100644 index 0000000..4dfebd4 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/User/PFUserPrivate.h @@ -0,0 +1,79 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "PFMacros.h" + +extern NSString *const PFUserCurrentUserFileName; +extern NSString *const PFUserCurrentUserPinName; +extern NSString *const PFUserCurrentUserKeychainItemName; + +@class BFTask PF_GENERIC(__covariant BFGenericType); +@class PFCommandResult; +@class PFUserController; + +@interface PFUser (Private) + +///-------------------------------------- +/// @name Current User +///-------------------------------------- ++ (BFTask *)_getCurrentUserSessionTokenAsync; ++ (NSString *)currentSessionToken; + +- (void)synchronizeAllAuthData; + +- (BFTask *)_handleServiceLoginCommandResult:(PFCommandResult *)result; + +- (void)synchronizeAuthDataWithAuthType:(NSString *)authType; + ++ (PFUser *)logInLazyUserWithAuthType:(NSString *)authType authData:(NSDictionary *)authData; +- (BFTask *)resolveLazinessAsync:(BFTask *)toAwait; +- (void)stripAnonymity; +- (void)restoreAnonymity:(id)data; + +///-------------------------------------- +/// @name Revocable Session +///-------------------------------------- ++ (BOOL)_isRevocableSessionEnabled; ++ (void)_setRevocableSessionEnabled:(BOOL)enabled; + ++ (PFUserController *)userController; + +@end + +// Private Properties +@interface PFUser () { + BOOL isCurrentUser; + NSMutableDictionary *authData; + NSMutableSet *linkedServiceNames; + BOOL isLazy; +} + +// This earmarks the user as being an "identity" user. This will make saves write through +// to the currentUser singleton and disk object +@property (nonatomic, assign) BOOL isCurrentUser; + +@property (nonatomic, strong, readonly) NSMutableDictionary *authData; +@property (nonatomic, strong, readonly) NSMutableSet *linkedServiceNames; +@property (nonatomic, assign) BOOL isLazy; + +- (BOOL)_isAuthenticatedWithCurrentUser:(PFUser *)currentUser; + +- (BFTask *)_logOutAsync; + +///-------------------------------------- +/// @name Third-party Authentication (Private) +///-------------------------------------- + ++ (void)_unregisterAuthenticationDelegateForAuthType:(NSString *)authType; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/User/State/PFMutableUserState.h b/BreakingBad/Pods/Parse/Parse/Internal/User/State/PFMutableUserState.h new file mode 100644 index 0000000..43e8f2d --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/User/State/PFMutableUserState.h @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFUserState.h" + +@interface PFMutableUserState : PFUserState + +@property (nonatomic, copy, readwrite) NSString *sessionToken; +@property (nonatomic, copy, readwrite) NSDictionary *authData; + +@property (nonatomic, assign, readwrite) BOOL isNew; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/User/State/PFMutableUserState.m b/BreakingBad/Pods/Parse/Parse/Internal/User/State/PFMutableUserState.m new file mode 100644 index 0000000..255265b --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/User/State/PFMutableUserState.m @@ -0,0 +1,20 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFMutableUserState.h" + +#import "PFUserState_Private.h" + +@implementation PFMutableUserState + +@dynamic sessionToken; +@dynamic authData; +@dynamic isNew; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/User/State/PFUserState.h b/BreakingBad/Pods/Parse/Parse/Internal/User/State/PFUserState.h new file mode 100644 index 0000000..72fa098 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/User/State/PFUserState.h @@ -0,0 +1,26 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFObjectState.h" + +@interface PFUserState : PFObjectState + +@property (nonatomic, copy, readonly) NSString *sessionToken; +@property (nonatomic, copy, readonly) NSDictionary *authData; + +@property (nonatomic, assign, readonly) BOOL isNew; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)initWithState:(PFUserState *)state; ++ (instancetype)stateWithState:(PFUserState *)state; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/User/State/PFUserState.m b/BreakingBad/Pods/Parse/Parse/Internal/User/State/PFUserState.m new file mode 100644 index 0000000..2c50485 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/User/State/PFUserState.m @@ -0,0 +1,64 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFUserState.h" +#import "PFUserState_Private.h" + +#import "PFMutableUserState.h" +#import "PFObjectState_Private.h" +#import "PFUserConstants.h" + +@implementation PFUserState + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithState:(PFUserState *)state { + self = [super initWithState:state]; + if (!self) return nil; + + _sessionToken = [state.sessionToken copy]; + _authData = [state.authData copy]; + _isNew = state.isNew; + + return self; +} + ++ (instancetype)stateWithState:(PFUserState *)state { + return [super stateWithState:state]; +} + +///-------------------------------------- +#pragma mark - Serialization +///-------------------------------------- + +- (NSDictionary *)dictionaryRepresentationWithObjectEncoder:(PFEncoder *)objectEncoder { + NSMutableDictionary *dictionary = [[super dictionaryRepresentationWithObjectEncoder:objectEncoder] mutableCopy]; + [dictionary removeObjectForKey:PFUserPasswordRESTKey]; + return dictionary; +} + +///-------------------------------------- +#pragma mark - NSCopying +///-------------------------------------- + +- (id)copyWithZone:(NSZone *)zone { + return [[PFUserState allocWithZone:zone] initWithState:self]; +} + +///-------------------------------------- +#pragma mark - NSMutableCopying +///-------------------------------------- + +- (id)mutableCopyWithZone:(NSZone *)zone { + return [[PFMutableUserState allocWithZone:zone] initWithState:self]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Internal/User/State/PFUserState_Private.h b/BreakingBad/Pods/Parse/Parse/Internal/User/State/PFUserState_Private.h new file mode 100644 index 0000000..c305f76 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Internal/User/State/PFUserState_Private.h @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFUserState.h" + +@interface PFUserState () { +@protected + NSString *_sessionToken; + NSDictionary *_authData; + + BOOL _isNew; +} + +@property (nonatomic, copy, readwrite) NSString *sessionToken; +@property (nonatomic, copy, readwrite) NSDictionary *authData; + +@property (nonatomic, assign, readwrite) BOOL isNew; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/PFACL.h b/BreakingBad/Pods/Parse/Parse/PFACL.h new file mode 100644 index 0000000..a952585 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFACL.h @@ -0,0 +1,264 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +PF_ASSUME_NONNULL_BEGIN + +@class PFRole; +@class PFUser; + +/*! + The `PFACL` class is used to control which users can access or modify a particular object. + Each can have its own `PFACL`. You can grant read and write permissions separately to specific users, + to groups of users that belong to roles, or you can grant permissions to "the public" so that, + for example, any user could read a particular object but only a particular set of users could write to that object. + */ +@interface PFACL : NSObject + +///-------------------------------------- +/// @name Creating an ACL +///-------------------------------------- + +/*! + @abstract Creates an ACL with no permissions granted. + + @returns Returns a new `PFACL`. + */ ++ (instancetype)ACL; + +/*! + @abstract Creates an ACL where only the provided user has access. + + @param user The user to assign access. + */ ++ (instancetype)ACLWithUser:(PFUser *)user; + +///-------------------------------------- +/// @name Controlling Public Access +///-------------------------------------- + +/*! + @abstract Set whether the public is allowed to read this object. + + @param allowed Whether the public can read this object. + */ +- (void)setPublicReadAccess:(BOOL)allowed; + +/*! + @abstract Gets whether the public is allowed to read this object. + + @returns `YES` if the public read access is enabled, otherwise `NO`. + */ +- (BOOL)getPublicReadAccess; + +/*! + @abstract Set whether the public is allowed to write this object. + + @param allowed Whether the public can write this object. + */ +- (void)setPublicWriteAccess:(BOOL)allowed; + +/*! + @abstract Gets whether the public is allowed to write this object. + + @returns `YES` if the public write access is enabled, otherwise `NO`. + */ +- (BOOL)getPublicWriteAccess; + +///-------------------------------------- +/// @name Controlling Access Per-User +///-------------------------------------- + +/*! + @abstract Set whether the given user id is allowed to read this object. + + @param allowed Whether the given user can write this object. + @param userId The <[PFObject objectId]> of the user to assign access. + */ +- (void)setReadAccess:(BOOL)allowed forUserId:(NSString *)userId; + +/*! + @abstract Gets whether the given user id is *explicitly* allowed to read this object. + Even if this returns `NO`, the user may still be able to access it if returns `YES` + or if the user belongs to a role that has access. + + @param userId The <[PFObject objectId]> of the user for which to retrive access. + + @returns `YES` if the user with this `objectId` has *explicit* read access, otherwise `NO`. + */ +- (BOOL)getReadAccessForUserId:(NSString *)userId; + +/*! + @abstract Set whether the given user id is allowed to write this object. + + @param allowed Whether the given user can read this object. + @param userId The `objectId` of the user to assign access. + */ +- (void)setWriteAccess:(BOOL)allowed forUserId:(NSString *)userId; + +/*! + @abstract Gets whether the given user id is *explicitly* allowed to write this object. + Even if this returns NO, the user may still be able to write it if returns `YES` + or if the user belongs to a role that has access. + + @param userId The <[PFObject objectId]> of the user for which to retrive access. + + @returns `YES` if the user with this `objectId` has *explicit* write access, otherwise `NO`. + */ +- (BOOL)getWriteAccessForUserId:(NSString *)userId; + +/*! + @abstract Set whether the given user is allowed to read this object. + + @param allowed Whether the given user can read this object. + @param user The user to assign access. + */ +- (void)setReadAccess:(BOOL)allowed forUser:(PFUser *)user; + +/*! + @abstract Gets whether the given user is *explicitly* allowed to read this object. + Even if this returns `NO`, the user may still be able to access it if returns `YES` + or if the user belongs to a role that has access. + + @param user The user for which to retrive access. + + @returns `YES` if the user has *explicit* read access, otherwise `NO`. + */ +- (BOOL)getReadAccessForUser:(PFUser *)user; + +/*! + @abstract Set whether the given user is allowed to write this object. + + @param allowed Whether the given user can write this object. + @param user The user to assign access. + */ +- (void)setWriteAccess:(BOOL)allowed forUser:(PFUser *)user; + +/*! + @abstract Gets whether the given user is *explicitly* allowed to write this object. + Even if this returns `NO`, the user may still be able to write it if returns `YES` + or if the user belongs to a role that has access. + + @param user The user for which to retrive access. + + @returns `YES` if the user has *explicit* write access, otherwise `NO`. + */ +- (BOOL)getWriteAccessForUser:(PFUser *)user; + +///-------------------------------------- +/// @name Controlling Access Per-Role +///-------------------------------------- + +/*! + @abstract Get whether users belonging to the role with the given name are allowed to read this object. + Even if this returns `NO`, the role may still be able to read it if a parent role has read access. + + @param name The name of the role. + + @returns `YES` if the role has read access, otherwise `NO`. + */ +- (BOOL)getReadAccessForRoleWithName:(NSString *)name; + +/*! + @abstract Set whether users belonging to the role with the given name are allowed to read this object. + + @param allowed Whether the given role can read this object. + @param name The name of the role. + */ +- (void)setReadAccess:(BOOL)allowed forRoleWithName:(NSString *)name; + +/*! + @abstract Get whether users belonging to the role with the given name are allowed to write this object. + Even if this returns `NO`, the role may still be able to write it if a parent role has write access. + + @param name The name of the role. + + @returns `YES` if the role has read access, otherwise `NO`. + */ +- (BOOL)getWriteAccessForRoleWithName:(NSString *)name; + +/*! + @abstract Set whether users belonging to the role with the given name are allowed to write this object. + + @param allowed Whether the given role can write this object. + @param name The name of the role. + */ +- (void)setWriteAccess:(BOOL)allowed forRoleWithName:(NSString *)name; + +/*! + @abstract Get whether users belonging to the given role are allowed to read this object. + Even if this returns `NO`, the role may still be able to read it if a parent role has read access. + + @discussion The role must already be saved on the server and + it's data must have been fetched in order to use this method. + + @param role The name of the role. + + @returns `YES` if the role has read access, otherwise `NO`. + */ +- (BOOL)getReadAccessForRole:(PFRole *)role; + +/*! + @abstract Set whether users belonging to the given role are allowed to read this object. + + @discussion The role must already be saved on the server and + it's data must have been fetched in order to use this method. + + @param allowed Whether the given role can read this object. + @param role The role to assign access. + */ +- (void)setReadAccess:(BOOL)allowed forRole:(PFRole *)role; + +/*! + @abstract Get whether users belonging to the given role are allowed to write this object. + Even if this returns `NO`, the role may still be able to write it if a parent role has write access. + + @discussion The role must already be saved on the server and + it's data must have been fetched in order to use this method. + + @param role The name of the role. + + @returns `YES` if the role has write access, otherwise `NO`. + */ +- (BOOL)getWriteAccessForRole:(PFRole *)role; + +/*! + @abstract Set whether users belonging to the given role are allowed to write this object. + + @discussion The role must already be saved on the server and + it's data must have been fetched in order to use this method. + + @param allowed Whether the given role can write this object. + @param role The role to assign access. + */ +- (void)setWriteAccess:(BOOL)allowed forRole:(PFRole *)role; + +///-------------------------------------- +/// @name Setting Access Defaults +///-------------------------------------- + +/*! + @abstract Sets a default ACL that will be applied to all instances of when they are created. + + @param acl The ACL to use as a template for all instance of created after this method has been called. + This value will be copied and used as a template for the creation of new ACLs, so changes to the + instance after this method has been called will not be reflected in new instance of . + @param currentUserAccess - If `YES`, the `PFACL` that is applied to newly-created instance of will + provide read and write access to the <[PFUser currentUser]> at the time of creation. + - If `NO`, the provided `acl` will be used without modification. + - If `acl` is `nil`, this value is ignored. + */ ++ (void)setDefaultACL:(PF_NULLABLE PFACL *)acl withAccessForCurrentUser:(BOOL)currentUserAccess; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/PFACL.m b/BreakingBad/Pods/Parse/Parse/PFACL.m new file mode 100644 index 0000000..59190f9 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFACL.m @@ -0,0 +1,363 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFACL.h" +#import "PFACLPrivate.h" + +#import "BFTask+Private.h" +#import "PFACLState.h" +#import "PFAssert.h" +#import "PFDefaultACLController.h" +#import "PFMacros.h" +#import "PFMutableACLState.h" +#import "PFObjectPrivate.h" +#import "PFObjectUtilities.h" +#import "PFRole.h" +#import "PFUser.h" +#import "PFUserPrivate.h" + +static NSString *const PFACLPublicKey_ = @"*"; +static NSString *const PFACLUnresolvedKey_ = @"*unresolved"; +static NSString *const PFACLCodingDataKey_ = @"ACL"; + +@interface PFACL () + +@property (atomic, strong, readwrite) PFACLState *state; + +@end + +@implementation PFACL { + PFUser *unresolvedUser; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _state = [[PFACLState alloc] init]; + + return self; +} + +///-------------------------------------- +#pragma mark - Default ACL +///-------------------------------------- + ++ (instancetype)ACL { + return [[self alloc] init]; +} + ++ (instancetype)ACLWithUser:(PFUser *)user { + PFACL *acl = [self ACL]; + [acl setReadAccess:YES forUser:user]; + [acl setWriteAccess:YES forUser:user]; + return acl; +} + ++ (instancetype)ACLWithDictionary:(NSDictionary *)dictionary { + return [[self alloc] initWithDictionary:dictionary]; +} + ++ (PFACL *)defaultACL { + return [[[PFDefaultACLController defaultController] getDefaultACLAsync] waitForResult:NULL + withMainThreadWarning:NO]; +} + ++ (void)setDefaultACL:(PFACL *)acl withAccessForCurrentUser:(BOOL)currentUserAccess { + [[PFDefaultACLController defaultController] setDefaultACLAsync:acl withCurrentUserAccess:currentUserAccess]; +} + +- (void)setShared:(BOOL)newShared { + self.state = [self.state copyByMutatingWithBlock:^(PFMutableACLState *newState) { + newState.shared = newShared; + }]; +} + +- (BOOL)isShared { + return self.state.shared; +} + +- (instancetype)createUnsharedCopy { + PFACL *newACL = [[self class] ACLWithDictionary:self.state.permissions]; + if (unresolvedUser) { + [newACL setReadAccess:[self getReadAccessForUser:unresolvedUser] forUser:unresolvedUser]; + [newACL setWriteAccess:[self getWriteAccessForUser:unresolvedUser] forUser:unresolvedUser]; + } + return newACL; +} + +- (void)resolveUser:(PFUser *)user { + if (user != unresolvedUser) { + return; + } + NSMutableDictionary *unresolvedPermissions = self.state.permissions[PFACLUnresolvedKey_]; + if (unresolvedPermissions) { + self.state = [self.state copyByMutatingWithBlock:^(PFMutableACLState *newState) { + newState.permissions[user.objectId] = unresolvedPermissions; + [newState.permissions removeObjectForKey:PFACLUnresolvedKey_]; + }]; + } + unresolvedUser = nil; +} + +- (BOOL)hasUnresolvedUser { + return unresolvedUser != nil; +} + +- (void)setAccess:(NSString *)accessType to:(BOOL)allowed forUserId:(NSString *)userId { + NSDictionary *permissions = self.state.permissions[userId]; + + // No change needed. + if ([permissions[accessType] boolValue] == allowed) { + return; + } + + NSMutableDictionary *newPermissions = [NSMutableDictionary dictionaryWithDictionary:permissions]; + if (allowed) { + newPermissions[accessType] = @YES; + } else { + [newPermissions removeObjectForKey:accessType]; + } + + self.state = [self.state copyByMutatingWithBlock:^(PFMutableACLState *newState) { + if (newPermissions.count) { + newState.permissions[userId] = [newPermissions copy]; + } else { + [newState.permissions removeObjectForKey:userId]; + } + }]; +} + +- (BOOL)getAccess:(NSString *)accessType forUserId:(NSString *)userId { + return [self.state.permissions[userId][accessType] boolValue]; +} + +- (instancetype)initWithDictionary:(NSDictionary *)dictionary { + self = [self init]; + if (!self) return nil; + + // We iterate over the input ACL rather than just copying to + // permissionsById so that we can ensure it is the right format. + [dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *userId, NSDictionary *permissions, BOOL *stop) { + [permissions enumerateKeysAndObjectsUsingBlock:^(NSString *accessType, id obj, BOOL *stop) { + [self setAccess:accessType to:[obj boolValue] forUserId:userId]; + }]; + }]; + + return self; +} + +- (void)setReadAccess:(BOOL)allowed forUserId:(NSString *)userId { + PFParameterAssert(userId, @"Can't setReadAccess for nil userId."); + [self setAccess:@"read" to:allowed forUserId:userId]; +} + +- (BOOL)getReadAccessForUserId:(NSString *)userId { + PFParameterAssert(userId, @"Can't getReadAccessForUserId for nil userId."); + return [self getAccess:@"read" forUserId:userId]; +} + +- (void)setWriteAccess:(BOOL)allowed forUserId:(NSString *)userId { + PFParameterAssert(userId, @"Can't setWriteAccess for nil userId."); + [self setAccess:@"write" to:allowed forUserId:userId]; +} + +- (BOOL)getWriteAccessForUserId:(NSString *)userId { + PFParameterAssert(userId, @"Can't getWriteAccessForUserId for nil userId."); + return [self getAccess:@"write" forUserId:userId]; +} + +- (void)setPublicReadAccess:(BOOL)allowed { + [self setReadAccess:allowed forUserId:PFACLPublicKey_]; +} + +- (BOOL)getPublicReadAccess { + return [self getReadAccessForUserId:PFACLPublicKey_]; +} + +- (void)setPublicWriteAccess:(BOOL)allowed { + [self setWriteAccess:allowed forUserId:PFACLPublicKey_]; +} + +- (BOOL)getPublicWriteAccess { + return [self getWriteAccessForUserId:PFACLPublicKey_]; +} + +- (BOOL)getReadAccessForRoleWithName:(NSString *)name { + PFParameterAssert(name, @"Can't get read access for nil role name."); + return [self getReadAccessForUserId:[@"role:" stringByAppendingString:name]]; +} + +- (void)setReadAccess:(BOOL)allowed forRoleWithName:(NSString *)name { + PFParameterAssert(name, @"Can't set read access for nil role name."); + [self setReadAccess:allowed forUserId:[@"role:" stringByAppendingString:name]]; +} + +- (BOOL)getWriteAccessForRoleWithName:(NSString *)name { + PFParameterAssert(name, @"Can't get write access for nil role name."); + return [self getWriteAccessForUserId:[@"role:" stringByAppendingString:name]]; +} + +- (void)setWriteAccess:(BOOL)allowed forRoleWithName:(NSString *)name { + PFParameterAssert(name, @"Can't set write access for nil role name."); + [self setWriteAccess:allowed forUserId:[@"role:" stringByAppendingString:name]]; +} + +- (void)validateRoleState:(PFRole *)role { + // Validates that a role has already been saved to the server, and thus can be used in an ACL. + PFParameterAssert(role.objectId, @"Roles must be saved to the server before they can be used in an ACL."); +} + +- (BOOL)getReadAccessForRole:(PFRole *)role { + [self validateRoleState:role]; + return [self getReadAccessForRoleWithName:role.name]; +} + +- (void)setReadAccess:(BOOL)allowed forRole:(PFRole *)role { + [self validateRoleState:role]; + [self setReadAccess:allowed forRoleWithName:role.name]; +} + +- (BOOL)getWriteAccessForRole:(PFRole *)role { + [self validateRoleState:role]; + return [self getWriteAccessForRoleWithName:role.name]; +} + +- (void)setWriteAccess:(BOOL)allowed forRole:(PFRole *)role { + [self validateRoleState:role]; + [self setWriteAccess:allowed forRoleWithName:role.name]; +} + +- (void)prepareUnresolvedUser:(PFUser *)user { + // TODO: (nlutsenko) Consider making @synchronized. + if (unresolvedUser != user) { + // If the unresolved user changed, register the save listener on the new user. This listener + // will call resolveUser with the user. + self.state = [self.state copyByMutatingWithBlock:^(PFMutableACLState *newState) { + [newState.permissions removeObjectForKey:PFACLUnresolvedKey_]; + }]; + + unresolvedUser = user; + + // Note: callback is a reference back to the same block so that it can unregister itself. + @weakify(self); + __weak __block void (^weakCallback)(id result, NSError *error) = nil; + __block void (^callback)(id result, NSError *error) = [^(id result, NSError *error) { + @strongify(self); + [self resolveUser:result]; + [result unregisterSaveListener:weakCallback]; + } copy]; + weakCallback = callback; + [user registerSaveListener:callback]; + } +} + +- (void)setUnresolvedReadAccess:(BOOL)allowed forUser:(PFUser *)user { + [self prepareUnresolvedUser:user]; + [self setReadAccess:allowed forUserId:PFACLUnresolvedKey_]; +} + +- (void)setReadAccess:(BOOL)allowed forUser:(PFUser *)user { + NSString *objectId = user.objectId; + if (!objectId) { + if ([user isLazy]) { + [self setUnresolvedReadAccess:allowed forUser:user]; + return; + } + PFParameterAssert(objectId, @"Can't setReadAcccess for unsaved user."); + } + [self setReadAccess:allowed forUserId:objectId]; +} + +- (BOOL)getReadAccessForUser:(PFUser *)user { + if (user == unresolvedUser) { + return [self getReadAccessForUserId:PFACLUnresolvedKey_]; + } + NSString *objectId = user.objectId; + PFParameterAssert(objectId, @"Can't getReadAccessForUser who isn't saved."); + return [self getReadAccessForUserId:objectId]; +} + +- (void)setUnresolvedWriteAccess:(BOOL)allowed forUser:(PFUser *)user { + [self prepareUnresolvedUser:user]; + [self setWriteAccess:allowed forUserId:PFACLUnresolvedKey_]; +} + +- (void)setWriteAccess:(BOOL)allowed forUser:(PFUser *)user { + NSString *objectId = user.objectId; + if (!objectId) { + if ([user isLazy]) { + [self setUnresolvedWriteAccess:allowed forUser:user]; + return; + } + PFParameterAssert(objectId, @"Can't setWriteAccess for unsaved user."); + } + [self setWriteAccess:allowed forUserId:objectId]; +} + +- (BOOL)getWriteAccessForUser:(PFUser *)user { + if (user == unresolvedUser) { + return [self getWriteAccessForUserId:PFACLUnresolvedKey_]; + } + NSString *objectId = user.objectId; + PFParameterAssert(objectId, @"Can't getWriteAccessForUser who isn't saved."); + return [self getWriteAccessForUserId:objectId]; +} + +- (NSDictionary *)encodeIntoDictionary { + return self.state.permissions; +} + +///-------------------------------------- +#pragma mark - NSObject +///-------------------------------------- + +- (BOOL)isEqual:(id)object { + if (object == self) { + return YES; + } + if (![object isKindOfClass:[PFACL class]]) { + return NO; + } + + PFACL *acl = (PFACL *)object; + return [self.state isEqual:acl.state] && [PFObjectUtilities isObject:self->unresolvedUser + equalToObject:acl->unresolvedUser]; +} + +- (NSUInteger)hash { + return [self.state hash] ^ [unresolvedUser hash]; +} + +///-------------------------------------- +#pragma mark - NSCopying +///-------------------------------------- + +- (instancetype)copyWithZone:(NSZone *)zone { + return [[PFACL allocWithZone:zone] initWithDictionary:self.state.permissions]; +} + +///-------------------------------------- +#pragma mark - NSCoding +///-------------------------------------- + +- (instancetype)initWithCoder:(NSCoder *)coder { + NSDictionary *dictionary = [coder decodeObjectForKey:PFACLCodingDataKey_]; + return [self initWithDictionary:dictionary]; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:[self encodeIntoDictionary] forKey:PFACLCodingDataKey_]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/PFAnalytics.h b/BreakingBad/Pods/Parse/Parse/PFAnalytics.h new file mode 100644 index 0000000..7655e8f --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFAnalytics.h @@ -0,0 +1,167 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import + +PF_ASSUME_NONNULL_BEGIN + +/*! + `PFAnalytics` provides an interface to Parse's logging and analytics backend. + + Methods will return immediately and cache the request (+ timestamp) to be + handled "eventually." That is, the request will be sent immediately if possible + or the next time a network connection is available. + */ +@interface PFAnalytics : NSObject + +///-------------------------------------- +/// @name App-Open / Push Analytics +///-------------------------------------- + +/*! + @abstract Tracks this application being launched. If this happened as the result of the + user opening a push notification, this method sends along information to + correlate this open with that push. + + @discussion Pass in `nil` to track a standard "application opened" event. + + @param launchOptions The `NSDictionary` indicating the reason the application was + launched, if any. This value can be found as a parameter to various + `UIApplicationDelegate` methods, and can be empty or `nil`. + + @returns Returns the task encapsulating the work being done. + */ ++ (BFTask PF_GENERIC(NSNumber *)*)trackAppOpenedWithLaunchOptions:(PF_NULLABLE NSDictionary *)launchOptions; + +/*! + @abstract Tracks this application being launched. + If this happened as the result of the user opening a push notification, + this method sends along information to correlate this open with that push. + + @discussion Pass in `nil` to track a standard "application opened" event. + + @param launchOptions The dictionary indicating the reason the application was + launched, if any. This value can be found as a parameter to various + `UIApplicationDelegate` methods, and can be empty or `nil`. + @param block The block to execute on server response. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)` + */ ++ (void)trackAppOpenedWithLaunchOptionsInBackground:(PF_NULLABLE NSDictionary *)launchOptions + block:(PF_NULLABLE PFBooleanResultBlock)block; + +/*! + @abstract Tracks this application being launched. If this happened as the result of the + user opening a push notification, this method sends along information to + correlate this open with that push. + + @param userInfo The Remote Notification payload, if any. This value can be + found either under `UIApplicationLaunchOptionsRemoteNotificationKey` on `launchOptions`, + or as a parameter to `application:didReceiveRemoteNotification:`. + This can be empty or `nil`. + + @returns Returns the task encapsulating the work being done. + */ ++ (BFTask PF_GENERIC(NSNumber *)*)trackAppOpenedWithRemoteNotificationPayload:(PF_NULLABLE NSDictionary *)userInfo; + +/*! + @abstract Tracks this application being launched. If this happened as the result of the + user opening a push notification, this method sends along information to + correlate this open with that push. + + @param userInfo The Remote Notification payload, if any. This value can be + found either under `UIApplicationLaunchOptionsRemoteNotificationKey` on `launchOptions`, + or as a parameter to `application:didReceiveRemoteNotification:`. This can be empty or `nil`. + @param block The block to execute on server response. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)` + */ ++ (void)trackAppOpenedWithRemoteNotificationPayloadInBackground:(PF_NULLABLE NSDictionary *)userInfo + block:(PF_NULLABLE PFBooleanResultBlock)block; + +///-------------------------------------- +/// @name Custom Analytics +///-------------------------------------- + +/*! + @abstract Tracks the occurrence of a custom event. + + @discussion Parse will store a data point at the time of invocation with the given event name. + + @param name The name of the custom event to report to Parse as having happened. + + @returns Returns the task encapsulating the work being done. + */ ++ (BFTask PF_GENERIC(NSNumber *)*)trackEvent:(NSString *)name; + +/*! + @abstract Tracks the occurrence of a custom event. Parse will store a data point at the + time of invocation with the given event name. The event will be sent at some + unspecified time in the future, even if Parse is currently inaccessible. + + @param name The name of the custom event to report to Parse as having happened. + @param block The block to execute on server response. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)` + */ ++ (void)trackEventInBackground:(NSString *)name block:(PF_NULLABLE PFBooleanResultBlock)block; + +/*! + @abstract Tracks the occurrence of a custom event with additional dimensions. Parse will + store a data point at the time of invocation with the given event name. + + @discussion Dimensions will allow segmentation of the occurrences of this custom event. + Keys and values should be NSStrings, and will throw otherwise. + + To track a user signup along with additional metadata, consider the following: + + NSDictionary *dimensions = @{ @"gender": @"m", + @"source": @"web", + @"dayType": @"weekend" }; + [PFAnalytics trackEvent:@"signup" dimensions:dimensions]; + + @warning There is a default limit of 8 dimensions per event tracked. + + @param name The name of the custom event to report to Parse as having happened. + @param dimensions The `NSDictionary` of information by which to segment this event. + + @returns Returns the task encapsulating the work being done. + */ ++ (BFTask PF_GENERIC(NSNumber *)*)trackEvent:(NSString *)name + dimensions:(PF_NULLABLE NSDictionary PF_GENERIC(NSString *, NSString *)*)dimensions; + +/*! + @abstract Tracks the occurrence of a custom event with additional dimensions. Parse will + store a data point at the time of invocation with the given event name. The + event will be sent at some unspecified time in the future, even if Parse is currently inaccessible. + + @discussionDimensions will allow segmentation of the occurrences of this custom event. + Keys and values should be NSStrings, and will throw otherwise. + + To track a user signup along with additional metadata, consider the following: + NSDictionary *dimensions = @{ @"gender": @"m", + @"source": @"web", + @"dayType": @"weekend" }; + [PFAnalytics trackEvent:@"signup" dimensions:dimensions]; + + There is a default limit of 8 dimensions per event tracked. + + @param name The name of the custom event to report to Parse as having happened. + @param dimensions The `NSDictionary` of information by which to segment this event. + @param block The block to execute on server response. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)` + */ ++ (void)trackEventInBackground:(NSString *)name + dimensions:(PF_NULLABLE NSDictionary PF_GENERIC(NSString *, NSString *)*)dimensions + block:(PF_NULLABLE PFBooleanResultBlock)block; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/PFAnalytics.m b/BreakingBad/Pods/Parse/Parse/PFAnalytics.m new file mode 100644 index 0000000..514095a --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFAnalytics.m @@ -0,0 +1,91 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFAnalytics.h" +#import "PFAnalytics_Private.h" + +#import "BFTask+Private.h" +#import "PFAnalyticsController.h" +#import "PFAssert.h" +#import "PFEncoder.h" +#import "PFEventuallyQueue.h" +#import "PFUserPrivate.h" +#import "Parse_Private.h" + +@implementation PFAnalytics + +///-------------------------------------- +#pragma mark - App-Open / Push Analytics +///-------------------------------------- + ++ (BFTask PF_GENERIC(NSNumber *)*)trackAppOpenedWithLaunchOptions:(PF_NULLABLE NSDictionary *)launchOptions { +#if TARGET_OS_WATCH + NSDictionary *userInfo = nil; +#elif TARGET_OS_IOS + NSDictionary *userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]; +#elif PF_TARGET_OS_OSX + NSDictionary *userInfo = launchOptions[NSApplicationLaunchUserNotificationKey]; +#endif + + return [self trackAppOpenedWithRemoteNotificationPayload:userInfo]; +} + ++ (void)trackAppOpenedWithLaunchOptionsInBackground:(PF_NULLABLE NSDictionary *)launchOptions + block:(PF_NULLABLE PFBooleanResultBlock)block { + [[self trackAppOpenedWithLaunchOptions:launchOptions] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + ++ (BFTask PF_GENERIC(NSNumber *)*)trackAppOpenedWithRemoteNotificationPayload:(PF_NULLABLE NSDictionary *)userInfo { + return [[[PFUser _getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { + NSString *sessionToken = task.result; + PFAnalyticsController *controller = [Parse _currentManager].analyticsController; + return [controller trackAppOpenedEventAsyncWithRemoteNotificationPayload:userInfo sessionToken:sessionToken]; + }] continueWithSuccessResult:@YES]; +} + ++ (void)trackAppOpenedWithRemoteNotificationPayloadInBackground:(PF_NULLABLE NSDictionary *)userInfo + block:(PF_NULLABLE PFBooleanResultBlock)block { + [[self trackAppOpenedWithRemoteNotificationPayload:userInfo] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + +///-------------------------------------- +#pragma mark - Custom Analytics +///-------------------------------------- + ++ (BFTask PF_GENERIC(NSNumber *)*)trackEvent:(NSString *)name { + return [self trackEvent:name dimensions:nil]; +} + ++ (void)trackEventInBackground:(NSString *)name block:(PF_NULLABLE PFBooleanResultBlock)block { + [self trackEventInBackground:name dimensions:nil block:block]; +} + ++ (BFTask PF_GENERIC(NSNumber *)*)trackEvent:(NSString *)name + dimensions:(PF_NULLABLE NSDictionary PF_GENERIC(NSString *, NSString *) *)dimensions { + PFParameterAssert([[name stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length], + @"A name for the custom event must be provided."); + [dimensions enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + PFParameterAssert([key isKindOfClass:[NSString class]] && [obj isKindOfClass:[NSString class]], + @"trackEvent dimensions expect keys and values of type NSString."); + }]; + + return [[[PFUser _getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { + NSString *sessionToken = task.result; + PFAnalyticsController *controller = [Parse _currentManager].analyticsController; + return [controller trackEventAsyncWithName:name dimensions:dimensions sessionToken:sessionToken]; + }] continueWithSuccessResult:@YES]; +} + ++ (void)trackEventInBackground:(NSString *)name + dimensions:(PF_NULLABLE NSDictionary PF_GENERIC(NSString *, NSString *) *)dimensions + block:(PF_NULLABLE PFBooleanResultBlock)block { + [[self trackEvent:name dimensions:dimensions] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/PFAnonymousUtils.h b/BreakingBad/Pods/Parse/Parse/PFAnonymousUtils.h new file mode 100644 index 0000000..ff9ed8b --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFAnonymousUtils.h @@ -0,0 +1,82 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import +#import + +PF_ASSUME_NONNULL_BEGIN + +/*! + Provides utility functions for working with Anonymously logged-in users. + Anonymous users have some unique characteristics: + + - Anonymous users don't need a user name or password. + - Once logged out, an anonymous user cannot be recovered. + - When the current user is anonymous, the following methods can be used to switch + to a different user or convert the anonymous user into a regular one: + - signUp converts an anonymous user to a standard user with the given username and password. + Data associated with the anonymous user is retained. + - logIn switches users without converting the anonymous user. + Data associated with the anonymous user will be lost. + - Service logIn (e.g. Facebook, Twitter) will attempt to convert + the anonymous user into a standard user by linking it to the service. + If a user already exists that is linked to the service, it will instead switch to the existing user. + - Service linking (e.g. Facebook, Twitter) will convert the anonymous user + into a standard user by linking it to the service. + */ +@interface PFAnonymousUtils : NSObject + +///-------------------------------------- +/// @name Creating an Anonymous User +///-------------------------------------- + +/*! + @abstract Creates an anonymous user asynchronously and sets as a result to `BFTask`. + + @returns The task, that encapsulates the work being done. + */ ++ (BFTask PF_GENERIC(PFUser *)*)logInInBackground; + +/*! + @abstract Creates an anonymous user. + + @param block The block to execute when anonymous user creation is complete. + It should have the following argument signature: `^(PFUser *user, NSError *error)`. + */ ++ (void)logInWithBlock:(PF_NULLABLE PFUserResultBlock)block; + +/* + @abstract Creates an anonymous user. + + @param target Target object for the selector. + @param selector The selector that will be called when the asynchronous request is complete. + It should have the following signature: `(void)callbackWithUser:(PFUser *)user error:(NSError *)error`. + */ ++ (void)logInWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; + +///-------------------------------------- +/// @name Determining Whether a User is Anonymous +///-------------------------------------- + +/*! + @abstract Whether the object is logged in anonymously. + + @param user object to check for anonymity. The user must be logged in on this device. + + @returns `YES` if the user is anonymous. `NO` if the user is not the current user or is not anonymous. + */ ++ (BOOL)isLinkedWithUser:(PF_NULLABLE PFUser *)user; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/PFAnonymousUtils.m b/BreakingBad/Pods/Parse/Parse/PFAnonymousUtils.m new file mode 100644 index 0000000..073e525 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFAnonymousUtils.m @@ -0,0 +1,91 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFAnonymousUtils.h" +#import "PFAnonymousUtils_Private.h" + +#import "BFTask+Private.h" +#import "PFAnonymousAuthenticationProvider.h" +#import "PFInternalUtils.h" +#import "PFUserPrivate.h" + +@implementation PFAnonymousUtils + +///-------------------------------------- +#pragma mark - Log In +///-------------------------------------- + ++ (BFTask *)logInInBackground { + PFAnonymousAuthenticationProvider *provider = [self _authenticationProvider]; + return [PFUser logInWithAuthTypeInBackground:PFAnonymousUserAuthenticationType authData:provider.authData]; +} + ++ (void)logInWithBlock:(PFUserResultBlock)block { + [[self logInInBackground] thenCallBackOnMainThreadAsync:block]; +} + ++ (void)logInWithTarget:(id)target selector:(SEL)selector { + [self logInWithBlock:^(PFUser *user, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:user object:error]; + }]; +} + +///-------------------------------------- +#pragma mark - Link +///-------------------------------------- + ++ (BOOL)isLinkedWithUser:(PFUser *)user { + return [user isLinkedWithAuthType:PFAnonymousUserAuthenticationType]; +} + +///-------------------------------------- +#pragma mark - Private +///-------------------------------------- + +static PFAnonymousAuthenticationProvider *authenticationProvider_; + ++ (dispatch_queue_t)_providerAccessQueue { + static dispatch_queue_t queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + queue = dispatch_queue_create("com.parse.anonymousUtils.provider.access", DISPATCH_QUEUE_SERIAL); + }); + return queue; +} + ++ (PFAnonymousAuthenticationProvider *)_authenticationProvider { + __block PFAnonymousAuthenticationProvider *provider = nil; + dispatch_sync([self _providerAccessQueue], ^{ + provider = authenticationProvider_; + if (!provider) { + provider = [[PFAnonymousAuthenticationProvider alloc] init]; + [PFUser registerAuthenticationDelegate:provider forAuthType:PFAnonymousUserAuthenticationType]; + authenticationProvider_ = provider; + } + }); + return provider; +} + ++ (void)_clearAuthenticationProvider { + [PFUser _unregisterAuthenticationDelegateForAuthType:PFAnonymousUserAuthenticationType]; + dispatch_sync([self _providerAccessQueue], ^{ + authenticationProvider_ = nil; + }); +} + +///-------------------------------------- +#pragma mark - Lazy Login +///-------------------------------------- + ++ (PFUser *)_lazyLogIn { + PFAnonymousAuthenticationProvider *provider = [self _authenticationProvider]; + return [PFUser logInLazyUserWithAuthType:PFAnonymousUserAuthenticationType authData:provider.authData]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/PFCloud.h b/BreakingBad/Pods/Parse/Parse/PFCloud.h new file mode 100644 index 0000000..b807b75 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFCloud.h @@ -0,0 +1,91 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import + +PF_ASSUME_NONNULL_BEGIN + +/*! + The `PFCloud` class provides methods for interacting with Parse Cloud Functions. + */ +@interface PFCloud : NSObject + +/*! + @abstract Calls the given cloud function *synchronously* with the parameters provided. + + @param function The function name to call. + @param parameters The parameters to send to the function. + + @returns The response from the cloud function. + */ ++ (PF_NULLABLE_S id)callFunction:(NSString *)function + withParameters:(PF_NULLABLE NSDictionary *)parameters PF_SWIFT_UNAVAILABLE; + +/*! + @abstract Calls the given cloud function *synchronously* with the parameters provided and + sets the error if there is one. + + @param function The function name to call. + @param parameters The parameters to send to the function. + @param error Pointer to an `NSError` that will be set if necessary. + + @returns The response from the cloud function. + This result could be a `NSDictionary`, an `NSArray`, `NSNumber` or `NSString`. + */ ++ (PF_NULLABLE_S id)callFunction:(NSString *)function + withParameters:(PF_NULLABLE NSDictionary *)parameters + error:(NSError **)error; + +/*! + @abstract Calls the given cloud function *asynchronously* with the parameters provided. + + @param function The function name to call. + @param parameters The parameters to send to the function. + + @returns The task, that encapsulates the work being done. + */ ++ (BFTask PF_GENERIC(id) *)callFunctionInBackground:(NSString *)function + withParameters:(PF_NULLABLE NSDictionary *)parameters; + +/*! + @abstract Calls the given cloud function *asynchronously* with the parameters provided + and executes the given block when it is done. + + @param function The function name to call. + @param parameters The parameters to send to the function. + @param block The block to execute when the function call finished. + It should have the following argument signature: `^(id result, NSError *error)`. + */ ++ (void)callFunctionInBackground:(NSString *)function + withParameters:(PF_NULLABLE NSDictionary *)parameters + block:(PF_NULLABLE PFIdResultBlock)block; + +/* + @abstract Calls the given cloud function *asynchronously* with the parameters provided + and then executes the given selector when it is done. + + @param function The function name to call. + @param parameters The parameters to send to the function. + @param target The object to call the selector on. + @param selector The selector to call when the function call finished. + It should have the following signature: `(void)callbackWithResult:(id)result error:(NSError *)error`. + Result will be `nil` if error is set and vice versa. + */ ++ (void)callFunctionInBackground:(NSString *)function + withParameters:(PF_NULLABLE NSDictionary *)parameters + target:(PF_NULLABLE_S id)target + selector:(PF_NULLABLE_S SEL)selector; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/PFCloud.m b/BreakingBad/Pods/Parse/Parse/PFCloud.m new file mode 100644 index 0000000..bb019ae --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFCloud.m @@ -0,0 +1,58 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFCloud.h" + +#import "BFTask+Private.h" +#import "PFCloudCodeController.h" +#import "PFCommandResult.h" +#import "PFCoreManager.h" +#import "PFUserPrivate.h" +#import "Parse_Private.h" + +@implementation PFCloud + +///-------------------------------------- +#pragma mark - Public +///-------------------------------------- + ++ (id)callFunction:(NSString *)function withParameters:(NSDictionary *)parameters { + return [self callFunction:function withParameters:parameters error:nil]; +} + ++ (id)callFunction:(NSString *)function withParameters:(NSDictionary *)parameters error:(NSError **)error { + return [[self callFunctionInBackground:function withParameters:parameters] waitForResult:error]; +} + ++ (BFTask *)callFunctionInBackground:(NSString *)functionName withParameters:(NSDictionary *)parameters { + return [[PFUser _getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { + NSString *sessionToken = task.result; + PFCloudCodeController *controller = [Parse _currentManager].coreManager.cloudCodeController; + return [controller callCloudCodeFunctionAsync:functionName + withParameters:parameters + sessionToken:sessionToken]; + }]; +} + ++ (void)callFunctionInBackground:(NSString *)function + withParameters:(NSDictionary *)parameters + target:(id)target + selector:(SEL)selector { + [self callFunctionInBackground:function withParameters:parameters block:^(id results, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:results object:error]; + }]; +} + ++ (void)callFunctionInBackground:(NSString *)function + withParameters:(NSDictionary *)parameters + block:(PFIdResultBlock)block { + [[self callFunctionInBackground:function withParameters:parameters] thenCallBackOnMainThreadAsync:block]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/PFConfig.h b/BreakingBad/Pods/Parse/Parse/PFConfig.h new file mode 100644 index 0000000..7420692 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFConfig.h @@ -0,0 +1,106 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import +#import + +PF_ASSUME_NONNULL_BEGIN + +@class PFConfig; + +typedef void(^PFConfigResultBlock)(PFConfig *PF_NULLABLE_S config, NSError *PF_NULLABLE_S error); + +/*! + `PFConfig` is a representation of the remote configuration object. + It enables you to add things like feature gating, a/b testing or simple "Message of the day". + */ +@interface PFConfig : NSObject + +///-------------------------------------- +/// @name Current Config +///-------------------------------------- + +/*! + @abstract Returns the most recently fetched config. + + @discussion If there was no config fetched - this method will return an empty instance of `PFConfig`. + + @returns Current, last fetched instance of PFConfig. + */ ++ (PFConfig *)currentConfig; + +///-------------------------------------- +/// @name Retrieving Config +///-------------------------------------- + +/*! + @abstract Gets the `PFConfig` object *synchronously* from the server. + + @returns Instance of `PFConfig` if the operation succeeded, otherwise `nil`. + */ ++ (PF_NULLABLE PFConfig *)getConfig PF_SWIFT_UNAVAILABLE; + +/*! + @abstract Gets the `PFConfig` object *synchronously* from the server and sets an error if it occurs. + + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Instance of PFConfig if the operation succeeded, otherwise `nil`. + */ ++ (PF_NULLABLE PFConfig *)getConfig:(NSError **)error; + +/*! + @abstract Gets the `PFConfig` *asynchronously* and sets it as a result of a task. + + @returns The task, that encapsulates the work being done. + */ ++ (BFTask PF_GENERIC(PFConfig *)*)getConfigInBackground; + +/*! + @abstract Gets the `PFConfig` *asynchronously* and executes the given callback block. + + @param block The block to execute. + It should have the following argument signature: `^(PFConfig *config, NSError *error)`. + */ ++ (void)getConfigInBackgroundWithBlock:(PF_NULLABLE PFConfigResultBlock)block; + +///-------------------------------------- +/// @name Parameters +///-------------------------------------- + +/*! + @abstract Returns the object associated with a given key. + + @param key The key for which to return the corresponding configuration value. + + @returns The value associated with `key`, or `nil` if there is no such value. + */ +- (PF_NULLABLE_S id)objectForKey:(NSString *)key; + +/*! + @abstract Returns the object associated with a given key. + + @discussion This method enables usage of literal syntax on `PFConfig`. + E.g. `NSString *value = config[@"key"];` + + @see objectForKey: + + @param keyedSubscript The keyed subscript for which to return the corresponding configuration value. + + @returns The value associated with `key`, or `nil` if there is no such value. + */ +- (PF_NULLABLE_S id)objectForKeyedSubscript:(NSString *)keyedSubscript; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/PFConfig.m b/BreakingBad/Pods/Parse/Parse/PFConfig.m new file mode 100644 index 0000000..b4d1655 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFConfig.m @@ -0,0 +1,113 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFConfig.h" + +#import "BFTask+Private.h" +#import "PFConfigController.h" +#import "PFCoreManager.h" +#import "PFCurrentConfigController.h" +#import "PFCurrentUserController.h" +#import "PFInternalUtils.h" +#import "PFUserPrivate.h" +#import "Parse_Private.h" + +NSString *const PFConfigParametersRESTKey = @"params"; + +@interface PFConfig () + +@property (atomic, copy, readwrite) NSDictionary *parametersDictionary; + +@end + +@implementation PFConfig + +///-------------------------------------- +#pragma mark - Class +///-------------------------------------- + ++ (PFConfigController *)_configController { + return [Parse _currentManager].coreManager.configController; +} + +#pragma mark Public + ++ (PFConfig *)currentConfig { + return [[[self _configController].currentConfigController getCurrentConfigAsync] waitForResult:nil + withMainThreadWarning:NO]; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithFetchedConfig:(NSDictionary *)resultDictionary { + self = [self init]; + if (!self) return nil; + + _parametersDictionary = resultDictionary[PFConfigParametersRESTKey]; + + return self; +} + +///-------------------------------------- +#pragma mark - Fetch +///-------------------------------------- + ++ (PFConfig *)getConfig { + return [self getConfig:nil]; +} + ++ (PFConfig *)getConfig:(NSError **)error { + return [[self getConfigInBackground] waitForResult:error]; +} + ++ (BFTask *)getConfigInBackground { + PFCurrentUserController *controller = [Parse _currentManager].coreManager.currentUserController; + return [[controller getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { + NSString *sessionToken = task.result; + return [[self _configController] fetchConfigAsyncWithSessionToken:sessionToken]; + }]; +} + ++ (void)getConfigInBackgroundWithBlock:(PFConfigResultBlock)block { + [[self getConfigInBackground] thenCallBackOnMainThreadAsync:block]; +} + +///-------------------------------------- +#pragma mark - Getting Values +///-------------------------------------- + +- (id)objectForKey:(NSString *)key { + return _parametersDictionary[key]; +} + +- (id)objectForKeyedSubscript:(NSString *)keyedSubscript { + return _parametersDictionary[keyedSubscript]; +} + +#pragma mark Equality Testing + +- (NSUInteger)hash { + return [_parametersDictionary hash]; +} + +- (BOOL)isEqual:(id)object { + if ([object isKindOfClass:[PFConfig class]]) { + PFConfig *other = object; + + // Compare pointers first, to account for nil dictionary + return self.parametersDictionary == other.parametersDictionary || + [self.parametersDictionary isEqual:other.parametersDictionary]; + } + + return NO; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/PFConstants.h b/BreakingBad/Pods/Parse/Parse/PFConstants.h new file mode 100644 index 0000000..c46eab0 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFConstants.h @@ -0,0 +1,509 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +@class PFObject; +@class PFUser; + +///-------------------------------------- +/// @name Version +///-------------------------------------- + +#define PARSE_VERSION @"1.9.0" + +extern NSInteger const PARSE_API_VERSION; + +///-------------------------------------- +/// @name Platform +///-------------------------------------- + +#define PARSE_IOS_ONLY (TARGET_OS_IPHONE) +#define PARSE_OSX_ONLY (TARGET_OS_MAC && !(TARGET_OS_IPHONE)) + +extern NSString *const PF_NONNULL_S kPFDeviceType; + +#if PARSE_IOS_ONLY +#import +#else +#import +#endif + +///-------------------------------------- +/// @name Server +///-------------------------------------- + +extern NSString *const PF_NONNULL_S kPFParseServer; + +///-------------------------------------- +/// @name Cache Policies +///-------------------------------------- + +/*! + `PFCachePolicy` specifies different caching policies that could be used with . + + This lets you show data when the user's device is offline, + or when the app has just started and network requests have not yet had time to complete. + Parse takes care of automatically flushing the cache when it takes up too much space. + + @warning Cache policy could only be set when Local Datastore is not enabled. + + @see PFQuery + */ +typedef NS_ENUM(uint8_t, PFCachePolicy) { + /*! + @abstract The query does not load from the cache or save results to the cache. + This is the default cache policy. + */ + kPFCachePolicyIgnoreCache = 0, + /*! + @abstract The query only loads from the cache, ignoring the network. + If there are no cached results, this causes a `NSError` with `kPFErrorCacheMiss` code. + */ + kPFCachePolicyCacheOnly, + /*! + @abstract The query does not load from the cache, but it will save results to the cache. + */ + kPFCachePolicyNetworkOnly, + /*! + @abstract The query first tries to load from the cache, but if that fails, it loads results from the network. + If there are no cached results, this causes a `NSError` with `kPFErrorCacheMiss` code. + */ + kPFCachePolicyCacheElseNetwork, + /*! + @abstract The query first tries to load from the network, but if that fails, it loads results from the cache. + If there are no cached results, this causes a `NSError` with `kPFErrorCacheMiss` code. + */ + kPFCachePolicyNetworkElseCache, + /*! + @abstract The query first loads from the cache, then loads from the network. + The callback will be called twice - first with the cached results, then with the network results. + Since it returns two results at different times, this cache policy cannot be used with synchronous or task methods. + */ + kPFCachePolicyCacheThenNetwork +}; + +///-------------------------------------- +/// @name Logging Levels +///-------------------------------------- + +/*! + `PFLogLevel` enum specifies different levels of logging that could be used to limit or display more messages in logs. + + @see [Parse setLogLevel:] + @see [Parse logLevel] + */ +typedef NS_ENUM(uint8_t, PFLogLevel) { + /*! + Log level that disables all logging. + */ + PFLogLevelNone = 0, + /*! + Log level that if set is going to output error messages to the log. + */ + PFLogLevelError = 1, + /*! + Log level that if set is going to output the following messages to log: + - Errors + - Warnings + */ + PFLogLevelWarning = 2, + /*! + Log level that if set is going to output the following messages to log: + - Errors + - Warnings + - Informational messages + */ + PFLogLevelInfo = 3, + /*! + Log level that if set is going to output the following messages to log: + - Errors + - Warnings + - Informational messages + - Debug messages + */ + PFLogLevelDebug = 4 +}; + +///-------------------------------------- +/// @name Errors +///-------------------------------------- + +extern NSString *const PF_NONNULL_S PFParseErrorDomain; + +/*! + `PFErrorCode` enum contains all custom error codes that are used as `code` for `NSError` for callbacks on all classes. + + These codes are used when `domain` of `NSError` that you receive is set to `PFParseErrorDomain`. + */ +typedef NS_ENUM(NSInteger, PFErrorCode) { + /*! + @abstract Internal server error. No information available. + */ + kPFErrorInternalServer = 1, + /*! + @abstract The connection to the Parse servers failed. + */ + kPFErrorConnectionFailed = 100, + /*! + @abstract Object doesn't exist, or has an incorrect password. + */ + kPFErrorObjectNotFound = 101, + /*! + @abstract You tried to find values matching a datatype that doesn't + support exact database matching, like an array or a dictionary. + */ + kPFErrorInvalidQuery = 102, + /*! + @abstract Missing or invalid classname. Classnames are case-sensitive. + They must start with a letter, and `a-zA-Z0-9_` are the only valid characters. + */ + kPFErrorInvalidClassName = 103, + /*! + @abstract Missing object id. + */ + kPFErrorMissingObjectId = 104, + /*! + @abstract Invalid key name. Keys are case-sensitive. + They must start with a letter, and `a-zA-Z0-9_` are the only valid characters. + */ + kPFErrorInvalidKeyName = 105, + /*! + @abstract Malformed pointer. Pointers must be arrays of a classname and an object id. + */ + kPFErrorInvalidPointer = 106, + /*! + @abstract Malformed json object. A json dictionary is expected. + */ + kPFErrorInvalidJSON = 107, + /*! + @abstract Tried to access a feature only available internally. + */ + kPFErrorCommandUnavailable = 108, + /*! + @abstract Field set to incorrect type. + */ + kPFErrorIncorrectType = 111, + /*! + @abstract Invalid channel name. A channel name is either an empty string (the broadcast channel) + or contains only `a-zA-Z0-9_` characters and starts with a letter. + */ + kPFErrorInvalidChannelName = 112, + /*! + @abstract Invalid device token. + */ + kPFErrorInvalidDeviceToken = 114, + /*! + @abstract Push is misconfigured. See details to find out how. + */ + kPFErrorPushMisconfigured = 115, + /*! + @abstract The object is too large. + */ + kPFErrorObjectTooLarge = 116, + /*! + @abstract That operation isn't allowed for clients. + */ + kPFErrorOperationForbidden = 119, + /*! + @abstract The results were not found in the cache. + */ + kPFErrorCacheMiss = 120, + /*! + @abstract Keys in `NSDictionary` values may not include `$` or `.`. + */ + kPFErrorInvalidNestedKey = 121, + /*! + @abstract Invalid file name. + A file name can contain only `a-zA-Z0-9_.` characters and should be between 1 and 36 characters. + */ + kPFErrorInvalidFileName = 122, + /*! + @abstract Invalid ACL. An ACL with an invalid format was saved. This should not happen if you use . + */ + kPFErrorInvalidACL = 123, + /*! + @abstract The request timed out on the server. Typically this indicates the request is too expensive. + */ + kPFErrorTimeout = 124, + /*! + @abstract The email address was invalid. + */ + kPFErrorInvalidEmailAddress = 125, + /*! + A unique field was given a value that is already taken. + */ + kPFErrorDuplicateValue = 137, + /*! + @abstract Role's name is invalid. + */ + kPFErrorInvalidRoleName = 139, + /*! + @abstract Exceeded an application quota. Upgrade to resolve. + */ + kPFErrorExceededQuota = 140, + /*! + @abstract Cloud Code script had an error. + */ + kPFScriptError = 141, + /*! + @abstract Cloud Code validation failed. + */ + kPFValidationError = 142, + /*! + @abstract Product purchase receipt is missing. + */ + kPFErrorReceiptMissing = 143, + /*! + @abstract Product purchase receipt is invalid. + */ + kPFErrorInvalidPurchaseReceipt = 144, + /*! + @abstract Payment is disabled on this device. + */ + kPFErrorPaymentDisabled = 145, + /*! + @abstract The product identifier is invalid. + */ + kPFErrorInvalidProductIdentifier = 146, + /*! + @abstract The product is not found in the App Store. + */ + kPFErrorProductNotFoundInAppStore = 147, + /*! + @abstract The Apple server response is not valid. + */ + kPFErrorInvalidServerResponse = 148, + /*! + @abstract Product fails to download due to file system error. + */ + kPFErrorProductDownloadFileSystemFailure = 149, + /*! + @abstract Fail to convert data to image. + */ + kPFErrorInvalidImageData = 150, + /*! + @abstract Unsaved file. + */ + kPFErrorUnsavedFile = 151, + /*! + @abstract Fail to delete file. + */ + kPFErrorFileDeleteFailure = 153, + /*! + @abstract Application has exceeded its request limit. + */ + kPFErrorRequestLimitExceeded = 155, + /*! + @abstract Invalid event name. + */ + kPFErrorInvalidEventName = 160, + /*! + @abstract Username is missing or empty. + */ + kPFErrorUsernameMissing = 200, + /*! + @abstract Password is missing or empty. + */ + kPFErrorUserPasswordMissing = 201, + /*! + @abstract Username has already been taken. + */ + kPFErrorUsernameTaken = 202, + /*! + @abstract Email has already been taken. + */ + kPFErrorUserEmailTaken = 203, + /*! + @abstract The email is missing, and must be specified. + */ + kPFErrorUserEmailMissing = 204, + /*! + @abstract A user with the specified email was not found. + */ + kPFErrorUserWithEmailNotFound = 205, + /*! + @abstract The user cannot be altered by a client without the session. + */ + kPFErrorUserCannotBeAlteredWithoutSession = 206, + /*! + @abstract Users can only be created through sign up. + */ + kPFErrorUserCanOnlyBeCreatedThroughSignUp = 207, + /*! + @abstract An existing Facebook account already linked to another user. + */ + kPFErrorFacebookAccountAlreadyLinked = 208, + /*! + @abstract An existing account already linked to another user. + */ + kPFErrorAccountAlreadyLinked = 208, + /*! + Error code indicating that the current session token is invalid. + */ + kPFErrorInvalidSessionToken = 209, + kPFErrorUserIdMismatch = 209, + /*! + @abstract Facebook id missing from request. + */ + kPFErrorFacebookIdMissing = 250, + /*! + @abstract Linked id missing from request. + */ + kPFErrorLinkedIdMissing = 250, + /*! + @abstract Invalid Facebook session. + */ + kPFErrorFacebookInvalidSession = 251, + /*! + @abstract Invalid linked session. + */ + kPFErrorInvalidLinkedSession = 251, +}; + +///-------------------------------------- +/// @name Blocks +///-------------------------------------- + +typedef void (^PFBooleanResultBlock)(BOOL succeeded, NSError *PF_NULLABLE_S error); +typedef void (^PFIntegerResultBlock)(int number, NSError *PF_NULLABLE_S error); +typedef void (^PFArrayResultBlock)(NSArray *PF_NULLABLE_S objects, NSError *PF_NULLABLE_S error); +typedef void (^PFObjectResultBlock)(PFObject *PF_NULLABLE_S object, NSError *PF_NULLABLE_S error); +typedef void (^PFSetResultBlock)(NSSet *PF_NULLABLE_S channels, NSError *PF_NULLABLE_S error); +typedef void (^PFUserResultBlock)(PFUser *PF_NULLABLE_S user, NSError *PF_NULLABLE_S error); +typedef void (^PFDataResultBlock)(NSData *PF_NULLABLE_S data, NSError *PF_NULLABLE_S error); +typedef void (^PFDataStreamResultBlock)(NSInputStream *PF_NULLABLE_S stream, NSError *PF_NULLABLE_S error); +typedef void (^PFFilePathResultBlock)(NSString *PF_NULLABLE_S filePath, NSError *PF_NULLABLE_S error); +typedef void (^PFStringResultBlock)(NSString *PF_NULLABLE_S string, NSError *PF_NULLABLE_S error); +typedef void (^PFIdResultBlock)(PF_NULLABLE_S id object, NSError *PF_NULLABLE_S error); +typedef void (^PFProgressBlock)(int percentDone); + +///-------------------------------------- +/// @name Network Notifications +///-------------------------------------- + +/*! + @abstract The name of the notification that is going to be sent before any URL request is sent. + */ +extern NSString *const PF_NONNULL_S PFNetworkWillSendURLRequestNotification; + +/*! + @abstract The name of the notification that is going to be sent after any URL response is received. + */ +extern NSString *const PF_NONNULL_S PFNetworkDidReceiveURLResponseNotification; + +/*! + @abstract The key of request(NSURLRequest) in the userInfo dictionary of a notification. + @note This key is populated in userInfo, only if `PFLogLevel` on `Parse` is set to `PFLogLevelDebug`. + */ +extern NSString *const PF_NONNULL_S PFNetworkNotificationURLRequestUserInfoKey; + +/*! + @abstract The key of response(NSHTTPURLResponse) in the userInfo dictionary of a notification. + @note This key is populated in userInfo, only if `PFLogLevel` on `Parse` is set to `PFLogLevelDebug`. + */ +extern NSString *const PF_NONNULL_S PFNetworkNotificationURLResponseUserInfoKey; + +/*! + @abstract The key of repsonse body (usually `NSString` with JSON) in the userInfo dictionary of a notification. + @note This key is populated in userInfo, only if `PFLogLevel` on `Parse` is set to `PFLogLevelDebug`. + */ +extern NSString *const PF_NONNULL_S PFNetworkNotificationURLResponseBodyUserInfoKey; + + +///-------------------------------------- +/// @name Deprecated Macros +///-------------------------------------- + +#ifndef PARSE_DEPRECATED +# ifdef __deprecated_msg +# define PARSE_DEPRECATED(_MSG) __deprecated_msg(_MSG) +# else +# ifdef __deprecated +# define PARSE_DEPRECATED(_MSG) __attribute__((deprecated)) +# else +# define PARSE_DEPRECATED(_MSG) +# endif +# endif +#endif + +///-------------------------------------- +/// @name Extensions Macros +///-------------------------------------- + +#ifndef PF_EXTENSION_UNAVAILABLE +# if PARSE_IOS_ONLY +# ifdef NS_EXTENSION_UNAVAILABLE_IOS +# define PF_EXTENSION_UNAVAILABLE(_msg) NS_EXTENSION_UNAVAILABLE_IOS(_msg) +# else +# define PF_EXTENSION_UNAVAILABLE(_msg) +# endif +# else +# ifdef NS_EXTENSION_UNAVAILABLE_MAC +# define PF_EXTENSION_UNAVAILABLE(_msg) NS_EXTENSION_UNAVAILABLE_MAC(_msg) +# else +# define PF_EXTENSION_UNAVAILABLE(_msg) +# endif +# endif +#endif + +///-------------------------------------- +/// @name Swift Macros +///-------------------------------------- + +#ifndef PF_SWIFT_UNAVAILABLE +# ifdef NS_SWIFT_UNAVAILABLE +# define PF_SWIFT_UNAVAILABLE NS_SWIFT_UNAVAILABLE("") +# else +# define PF_SWIFT_UNAVAILABLE +# endif +#endif + +///-------------------------------------- +/// @name Obj-C Generics Macros +///-------------------------------------- + +#if __has_feature(objc_generics) || __has_extension(objc_generics) +# define PF_GENERIC(...) <__VA_ARGS__> +#else +# define PF_GENERIC(...) +# define PFGenericObject PFObject * +#endif + +///-------------------------------------- +/// @name Platform Availability Defines +///-------------------------------------- + +#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 + +#ifndef PF_TARGET_OS_OSX +# define PF_TARGET_OS_OSX TARGET_OS_MAC && !TARGET_OS_IOS && !TARGET_OS_WATCH && !TARGET_OS_TV +#endif + +///-------------------------------------- +/// @name Avaiability Macros +///-------------------------------------- + +#ifndef PF_WATCH_UNAVAILABLE +# ifdef __WATCHOS_UNAVAILABLE +# define PF_WATCH_UNAVAILABLE __WATCHOS_UNAVAILABLE +# else +# define PF_WATCH_UNAVAILABLE +# endif +#endif diff --git a/BreakingBad/Pods/Parse/Parse/PFConstants.m b/BreakingBad/Pods/Parse/Parse/PFConstants.m new file mode 100644 index 0000000..174b5a7 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFConstants.m @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFConstants.h" + +NSInteger const PARSE_API_VERSION = 2; + +#if PARSE_IOS_ONLY +NSString *const kPFDeviceType = @"ios"; +#else +NSString *const kPFDeviceType = @"osx"; +#endif + +NSString *const kPFParseServer = @"https://api.parse.com"; + +NSString *const PFParseErrorDomain = @"Parse"; + +///-------------------------------------- +#pragma mark - Network Notifications +///-------------------------------------- + +NSString *const PFNetworkWillSendURLRequestNotification = @"PFNetworkWillSendURLRequestNotification"; +NSString *const PFNetworkDidReceiveURLResponseNotification = @"PFNetworkDidReceiveURLResponseNotification"; +NSString *const PFNetworkNotificationURLRequestUserInfoKey = @"PFNetworkNotificationURLRequestUserInfoKey"; +NSString *const PFNetworkNotificationURLResponseUserInfoKey = @"PFNetworkNotificationURLResponseUserInfoKey"; +NSString *const PFNetworkNotificationURLResponseBodyUserInfoKey = @"PFNetworkNotificationURLResponseBodyUserInfoKey"; diff --git a/BreakingBad/Pods/Parse/Parse/PFFile.h b/BreakingBad/Pods/Parse/Parse/PFFile.h new file mode 100644 index 0000000..c2313cc --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFFile.h @@ -0,0 +1,446 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import + +PF_ASSUME_NONNULL_BEGIN + +/*! + `PFFile` representes a file of binary data stored on the Parse servers. + This can be a image, video, or anything else that an application needs to reference in a non-relational way. + */ +@interface PFFile : NSObject + +///-------------------------------------- +/// @name Creating a PFFile +///-------------------------------------- + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/*! + @abstract Creates a file with given data. A name will be assigned to it by the server. + + @param data The contents of the new `PFFile`. + + @returns A new `PFFile`. + */ ++ (PF_NULLABLE instancetype)fileWithData:(NSData *)data; + +/*! + @abstract Creates a file with given data and name. + + @param name The name of the new PFFile. The file name must begin with and + alphanumeric character, and consist of alphanumeric characters, periods, + spaces, underscores, or dashes. + @param data The contents of the new `PFFile`. + + @returns A new `PFFile` object. + */ ++ (PF_NULLABLE instancetype)fileWithName:(PF_NULLABLE NSString *)name data:(NSData *)data; + +/*! + @abstract Creates a file with the contents of another file. + + @warning This method raises an exception if the file at path is not accessible + or if there is not enough disk space left. + + @param name The name of the new `PFFile`. The file name must begin with and alphanumeric character, + and consist of alphanumeric characters, periods, spaces, underscores, or dashes. + @param path The path to the file that will be uploaded to Parse. + + @returns A new `PFFile` instance. + */ ++ (PF_NULLABLE instancetype)fileWithName:(PF_NULLABLE NSString *)name + contentsAtPath:(NSString *)path PF_SWIFT_UNAVAILABLE; + +/*! + @abstract Creates a file with the contents of another file. + + @param name The name of the new `PFFile`. The file name must begin with and alphanumeric character, + and consist of alphanumeric characters, periods, spaces, underscores, or dashes. + @param path The path to the file that will be uploaded to Parse. + @param error On input, a pointer to an error object. + If an error occurs, this pointer is set to an actual error object containing the error information. + You may specify `nil` for this parameter if you do not want the error information. + + @returns A new `PFFile` instance or `nil` if the error occured. + */ ++ (PF_NULLABLE instancetype)fileWithName:(PF_NULLABLE NSString *)name + contentsAtPath:(NSString *)path + error:(NSError **)error; + +/*! + @abstract Creates a file with given data, name and content type. + + @warning This method raises an exception if the data supplied is not accessible or could not be saved. + + @param name The name of the new `PFFile`. The file name must begin with and alphanumeric character, + and consist of alphanumeric characters, periods, spaces, underscores, or dashes. + @param data The contents of the new `PFFile`. + @param contentType Represents MIME type of the data. + + @returns A new `PFFile` instance. + */ ++ (PF_NULLABLE instancetype)fileWithName:(PF_NULLABLE NSString *)name + data:(NSData *)data + contentType:(PF_NULLABLE NSString *)contentType PF_SWIFT_UNAVAILABLE; + +/*! + @abstract Creates a file with given data, name and content type. + + @param name The name of the new `PFFile`. The file name must begin with and alphanumeric character, + and consist of alphanumeric characters, periods, spaces, underscores, or dashes. + @param data The contents of the new `PFFile`. + @param contentType Represents MIME type of the data. + @param error On input, a pointer to an error object. + If an error occurs, this pointer is set to an actual error object containing the error information. + You may specify `nil` for this parameter if you do not want the error information. + + @returns A new `PFFile` instance or `nil` if the error occured. + */ ++ (PF_NULLABLE instancetype)fileWithName:(PF_NULLABLE NSString *)name + data:(NSData *)data + contentType:(PF_NULLABLE NSString *)contentType + error:(NSError **)error; + +/*! + @abstract Creates a file with given data and content type. + + @param data The contents of the new `PFFile`. + @param contentType Represents MIME type of the data. + + @returns A new `PFFile` object. + */ ++ (instancetype)fileWithData:(NSData *)data contentType:(PF_NULLABLE NSString *)contentType; + +///-------------------------------------- +/// @name File Properties +///-------------------------------------- + +/*! + @abstract The name of the file. + + @discussion Before the file is saved, this is the filename given by + the user. After the file is saved, that name gets prefixed with a unique + identifier. + */ +@property (nonatomic, copy, readonly) NSString *name; + +/*! + @abstract The url of the file. + */ +@property (PF_NULLABLE_PROPERTY nonatomic, copy, readonly) NSString *url; + +/*! + @abstract Whether the file has been uploaded for the first time. + */ +@property (nonatomic, assign, readonly) BOOL isDirty; + +///-------------------------------------- +/// @name Storing Data with Parse +///-------------------------------------- + +/*! + @abstract Saves the file *synchronously*. + + @returns Returns whether the save succeeded. + */ +- (BOOL)save PF_SWIFT_UNAVAILABLE; + +/*! + @abstract Saves the file *synchronously* and sets an error if it occurs. + + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns whether the save succeeded. + */ +- (BOOL)save:(NSError **)error; + +/*! + @abstract Saves the file *asynchronously*. + + @returns The task, that encapsulates the work being done. + */ +- (BFTask PF_GENERIC(NSNumber *)*)saveInBackground; + +/*! + @abstract Saves the file *asynchronously* + + @param progressBlock The block should have the following argument signature: `^(int percentDone)` + + @returns The task, that encapsulates the work being done. + */ +- (BFTask PF_GENERIC(NSNumber *)*)saveInBackgroundWithProgressBlock:(PF_NULLABLE PFProgressBlock)progressBlock; + +/*! + @abstract Saves the file *asynchronously* and executes the given block. + + @param block The block should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + */ +- (void)saveInBackgroundWithBlock:(PF_NULLABLE PFBooleanResultBlock)block; + +/*! + @abstract Saves the file *asynchronously* and executes the given block. + + @discussion This method will execute the progressBlock periodically with the percent progress. + `progressBlock` will get called with `100` before `resultBlock` is called. + + @param block The block should have the following argument signature: `^(BOOL succeeded, NSError *error)` + @param progressBlock The block should have the following argument signature: `^(int percentDone)` + */ +- (void)saveInBackgroundWithBlock:(PF_NULLABLE PFBooleanResultBlock)block + progressBlock:(PF_NULLABLE PFProgressBlock)progressBlock; + +/* + @abstract Saves the file *asynchronously* and calls the given callback. + + @param target The object to call selector on. + @param selector The selector to call. + It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. + `error` will be `nil` on success and set if there was an error. + `[result boolValue]` will tell you whether the call succeeded or not. + */ +- (void)saveInBackgroundWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; + +///-------------------------------------- +/// @name Getting Data from Parse +///-------------------------------------- + +/*! + @abstract Whether the data is available in memory or needs to be downloaded. + */ +@property (assign, readonly) BOOL isDataAvailable; + +/*! + @abstract *Synchronously* gets the data from cache if available or fetches its contents from the network. + + @returns The `NSData` object containing file data. Returns `nil` if there was an error in fetching. + */ +- (PF_NULLABLE NSData *)getData PF_SWIFT_UNAVAILABLE; + +/*! + @abstract This method is like but avoids ever holding the entire `PFFile` contents in memory at once. + + @discussion This can help applications with many large files avoid memory warnings. + + @returns A stream containing the data. Returns `nil` if there was an error in fetching. + */ +- (PF_NULLABLE NSInputStream *)getDataStream PF_SWIFT_UNAVAILABLE; + +/*! + @abstract *Synchronously* gets the data from cache if available or fetches its contents from the network. + Sets an error if it occurs. + + @param error Pointer to an `NSError` that will be set if necessary. + + @returns The `NSData` object containing file data. Returns `nil` if there was an error in fetching. + */ +- (PF_NULLABLE NSData *)getData:(NSError **)error; + +/*! + @abstract This method is like but avoids ever holding the entire `PFFile` contents in memory at once. + + @param error Pointer to an `NSError` that will be set if necessary. + + @returns A stream containing the data. Returns nil if there was an error in + fetching. + */ +- (PF_NULLABLE NSInputStream *)getDataStream:(NSError **)error; + +/*! + @abstract This method is like but it fetches asynchronously to avoid blocking the current thread. + + @see getData + + @returns The task, that encapsulates the work being done. + */ +- (BFTask PF_GENERIC(NSData *)*)getDataInBackground; + +/*! + @abstract This method is like but it fetches asynchronously to avoid blocking the current thread. + + @discussion This can help applications with many large files avoid memory warnings. + + @see getData + + @param progressBlock The block should have the following argument signature: ^(int percentDone) + + @returns The task, that encapsulates the work being done. + */ +- (BFTask PF_GENERIC(NSData *)*)getDataInBackgroundWithProgressBlock:(PF_NULLABLE PFProgressBlock)progressBlock; + +/*! + @abstract This method is like but avoids + ever holding the entire `PFFile` contents in memory at once. + + @discussion This can help applications with many large files avoid memory warnings. + + @returns The task, that encapsulates the work being done. + */ +- (BFTask PF_GENERIC(NSInputStream *)*)getDataStreamInBackground; + +/*! + @abstract This method is like , but yields a live-updating stream. + + @discussion Instead of , which yields a stream that can be read from only after the request has + completed, this method gives you a stream directly written to by the HTTP session. As this stream is not pre-buffered, + it is strongly advised to use the `NSStreamDelegate` methods, in combination with a run loop, to consume the data in + the stream, to do proper async file downloading. + + @note You MUST open this stream before reading from it. + @note Do NOT call on this task from the main thread. It may result in a deadlock. + + @returns A task that produces a *live* stream that is being written to with the data from the server. + */ +- (BFTask PF_GENERIC(NSInputStream *)*)getDataDownloadStreamInBackground; + +/*! + @abstract This method is like but avoids + ever holding the entire `PFFile` contents in memory at once. + + @discussion This can help applications with many large files avoid memory warnings. + @param progressBlock The block should have the following argument signature: ^(int percentDone) + + @returns The task, that encapsulates the work being done. + */ +- (BFTask PF_GENERIC(NSInputStream *)*)getDataStreamInBackgroundWithProgressBlock:(PF_NULLABLE PFProgressBlock)progressBlock; + +/*! + @abstract This method is like , but yields a live-updating stream. + + @discussion Instead of , which yields a stream that can be read from only after the request has + completed, this method gives you a stream directly written to by the HTTP session. As this stream is not pre-buffered, + it is strongly advised to use the `NSStreamDelegate` methods, in combination with a run loop, to consume the data in + the stream, to do proper async file downloading. + + @note You MUST open this stream before reading from it. + @note Do NOT call on this task from the main thread. It may result in a deadlock. + + @param progressBlock The block should have the following argument signature: `^(int percentDone)` + + @returns A task that produces a *live* stream that is being written to with the data from the server. + */ +- (BFTask PF_GENERIC(NSInputStream *)*)getDataDownloadStreamInBackgroundWithProgressBlock:(PF_NULLABLE PFProgressBlock)progressBlock; + +/*! + @abstract *Asynchronously* gets the data from cache if available or fetches its contents from the network. + + @param block The block should have the following argument signature: `^(NSData *result, NSError *error)` + */ +- (void)getDataInBackgroundWithBlock:(PF_NULLABLE PFDataResultBlock)block; + +/*! + @abstract This method is like but avoids + ever holding the entire `PFFile` contents in memory at once. + + @discussion This can help applications with many large files avoid memory warnings. + + @param block The block should have the following argument signature: `(NSInputStream *result, NSError *error)` + */ +- (void)getDataStreamInBackgroundWithBlock:(PF_NULLABLE PFDataStreamResultBlock)block; + +/*! + @abstract *Asynchronously* gets the data from cache if available or fetches its contents from the network. + + @discussion This method will execute the progressBlock periodically with the percent progress. + `progressBlock` will get called with `100` before `resultBlock` is called. + + @param resultBlock The block should have the following argument signature: ^(NSData *result, NSError *error) + @param progressBlock The block should have the following argument signature: ^(int percentDone) + */ +- (void)getDataInBackgroundWithBlock:(PF_NULLABLE PFDataResultBlock)resultBlock + progressBlock:(PF_NULLABLE PFProgressBlock)progressBlock; + +/*! + @abstract This method is like but avoids + ever holding the entire `PFFile` contents in memory at once. + + @discussion This can help applications with many large files avoid memory warnings. + + @param resultBlock The block should have the following argument signature: `^(NSInputStream *result, NSError *error)`. + @param progressBlock The block should have the following argument signature: `^(int percentDone)`. + */ +- (void)getDataStreamInBackgroundWithBlock:(PF_NULLABLE PFDataStreamResultBlock)resultBlock + progressBlock:(PF_NULLABLE PFProgressBlock)progressBlock; + +/* + @abstract *Asynchronously* gets the data from cache if available or fetches its contents from the network. + + @param target The object to call selector on. + @param selector The selector to call. + It should have the following signature: `(void)callbackWithResult:(NSData *)result error:(NSError *)error`. + `error` will be `nil` on success and set if there was an error. + */ +- (void)getDataInBackgroundWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; + +/*! + @abstract *Asynchronously* gets the file path for file from cache if available or fetches its contents from the network. + + @note The file path may change between versions of SDK. + @note If you overwrite the contents of the file at returned path it will persist those change + until the file cache is cleared. + + @returns The task, with the result set to `NSString` representation of a file path. + */ +- (BFTask PF_GENERIC(NSString *)*)getFilePathInBackground; + +/*! + @abstract *Asynchronously* gets the file path for file from cache if available or fetches its contents from the network. + + @note The file path may change between versions of SDK. + @note If you overwrite the contents of the file at returned path it will persist those change + until the file cache is cleared. + + @param progressBlock The block should have the following argument signature: `^(int percentDone)`. + + @returns The task, with the result set to `NSString` representation of a file path. + */ +- (BFTask PF_GENERIC(NSString *)*)getFilePathInBackgroundWithProgressBlock:(PF_NULLABLE PFProgressBlock)progressBlock; + +/*! + @abstract *Asynchronously* gets the file path for file from cache if available or fetches its contents from the network. + + @note The file path may change between versions of SDK. + @note If you overwrite the contents of the file at returned path it will persist those change + until the file cache is cleared. + + @param block The block should have the following argument signature: `^(NSString *filePath, NSError *error)`. + */ +- (void)getFilePathInBackgroundWithBlock:(PF_NULLABLE PFFilePathResultBlock)block; + +/*! + @abstract *Asynchronously* gets the file path for file from cache if available or fetches its contents from the network. + + @note The file path may change between versions of SDK. + @note If you overwrite the contents of the file at returned path it will persist those change + until the file cache is cleared. + + @param block The block should have the following argument signature: `^(NSString *filePath, NSError *error)`. + @param progressBlock The block should have the following argument signature: `^(int percentDone)`. + */ +- (void)getFilePathInBackgroundWithBlock:(PF_NULLABLE PFFilePathResultBlock)block + progressBlock:(PF_NULLABLE PFProgressBlock)progressBlock; + +///-------------------------------------- +/// @name Interrupting a Transfer +///-------------------------------------- + +/*! + @abstract Cancels the current request (upload or download of file). + */ +- (void)cancel; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/PFFile.m b/BreakingBad/Pods/Parse/Parse/PFFile.m new file mode 100644 index 0000000..26fcda3 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFFile.m @@ -0,0 +1,546 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFFile.h" +#import "PFFile_Private.h" + +#import + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFAsyncTaskQueue.h" +#import "PFCommandResult.h" +#import "PFCoreManager.h" +#import "PFErrorUtilities.h" +#import "PFFileController.h" +#import "PFFileManager.h" +#import "PFFileStagingController.h" +#import "PFInternalUtils.h" +#import "PFMacros.h" +#import "PFMutableFileState.h" +#import "PFRESTFileCommand.h" +#import "PFThreadsafety.h" +#import "PFUserPrivate.h" +#import "Parse_Private.h" + +static const unsigned long long PFFileMaxFileSize = 10 * 1024 * 1024; // 10 MB + +@interface PFFile () { + dispatch_queue_t _synchronizationQueue; +} + +@property (nonatomic, strong, readwrite) PFFileState *state; +@property (nonatomic, copy, readonly) NSString *stagedFilePath; +@property (nonatomic, assign, readonly, getter=isDirty) BOOL dirty; + +// +// Private +@property (nonatomic, strong) PFAsyncTaskQueue *taskQueue; +@property (nonatomic, strong) BFCancellationTokenSource *cancellationTokenSource; + +@end + +@implementation PFFile + +@synthesize stagedFilePath = _stagedFilePath; + +///-------------------------------------- +#pragma mark - Public +///-------------------------------------- + +#pragma mark Init + ++ (instancetype)fileWithData:(NSData *)data { + return [self fileWithName:nil data:data contentType:nil]; +} + ++ (instancetype)fileWithName:(NSString *)name data:(NSData *)data { + return [self fileWithName:name data:data contentType:nil]; +} + ++ (instancetype)fileWithName:(NSString *)name contentsAtPath:(NSString *)path { + NSError *error = nil; + PFFile *file = [self fileWithName:name contentsAtPath:path error:&error]; + PFParameterAssert(!error, @"Could not access file at %@: %@", path, error); + return file; +} + ++ (instancetype)fileWithName:(NSString *)name contentsAtPath:(NSString *)path error:(NSError **)error { + NSFileManager *fileManager = [NSFileManager defaultManager]; + BOOL directory = NO; + + if (![fileManager fileExistsAtPath:path isDirectory:&directory] || directory) { + NSString *message = [NSString stringWithFormat:@"Failed to create PFFile at path '%@': " + "file does not exist.", path]; + if (error) { + *error = [NSError errorWithDomain:NSCocoaErrorDomain + code:NSFileNoSuchFileError + userInfo:@{ NSLocalizedDescriptionKey: message }]; + } + return nil; + } + + NSDictionary *attributes = [fileManager attributesOfItemAtPath:path error:nil]; + unsigned long long length = [attributes[NSFileSize] unsignedLongValue]; + if (length > PFFileMaxFileSize) { + NSString *message = [NSString stringWithFormat:@"Failed to create PFFile at path '%@': " + "file is larger than %lluMB.", path, (PFFileMaxFileSize >> 20)]; + if (error) { + *error = [NSError errorWithDomain:NSCocoaErrorDomain + code:NSFileReadTooLargeError + userInfo:@{ NSLocalizedDescriptionKey: message }]; + } + return nil; + } + + PFFile *file = [self fileWithName:name url:nil]; + if (![file _stageWithPath:path error:error]) { + return nil; + } + return file; +} + ++ (instancetype)fileWithName:(NSString *)name + data:(NSData *)data + contentType:(NSString *)contentType { + NSError *error = nil; + PFFile *file = [self fileWithName:name data:data contentType:contentType error:&error]; + PFConsistencyAssert(!error, @"Could not save file data for %@ : %@", name, error); + return file; +} + ++ (instancetype)fileWithName:(NSString *)name + data:(NSData *)data + contentType:(NSString *)contentType + error:(NSError **)error { + if (!data) { + NSString *message = @"Cannot create a PFFile with nil data."; + if (error) { + *error = [NSError errorWithDomain:NSCocoaErrorDomain + code:NSFileNoSuchFileError + userInfo:@{ NSLocalizedDescriptionKey: message }]; + } + return nil; + } + + if ([data length] > PFFileMaxFileSize) { + NSString *message = [NSString stringWithFormat:@"Failed to create PFFile with data: " + "data is larger than %lluMB.", (PFFileMaxFileSize >> 20)]; + if (error) { + *error = [NSError errorWithDomain:NSCocoaErrorDomain + code:NSFileReadTooLargeError + userInfo:@{ NSLocalizedDescriptionKey: message }]; + } + return nil; + } + + PFFile *file = [[self alloc] initWithName:name urlString:nil mimeType:contentType]; + if (![file _stageWithData:data error:error]) { + return nil; + } + return file; +} + ++ (instancetype)fileWithData:(NSData *)data contentType:(NSString *)contentType { + return [self fileWithName:nil data:data contentType:contentType]; +} + +#pragma mark Uploading + +- (BOOL)save { + return [self save:nil]; +} + +- (BOOL)save:(NSError **)error { + return [[[self saveInBackground] waitForResult:error] boolValue]; +} + +- (BFTask *)saveInBackground { + return [self _uploadAsyncWithProgressBlock:nil]; +} + +- (BFTask *)saveInBackgroundWithProgressBlock:(PFProgressBlock)progressBlock { + return [self _uploadAsyncWithProgressBlock:progressBlock]; +} + +- (void)saveInBackgroundWithBlock:(PFBooleanResultBlock)block { + [[self saveInBackground] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + +- (void)saveInBackgroundWithBlock:(PFBooleanResultBlock)block + progressBlock:(PFProgressBlock)progressBlock { + [[self _uploadAsyncWithProgressBlock:progressBlock] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + +- (void)saveInBackgroundWithTarget:(id)target selector:(SEL)selector { + [self saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; + }]; +} + +#pragma mark Downloading + +- (NSData *)getData { + return [self getData:nil]; +} + +- (NSInputStream *)getDataStream { + return [self getDataStream:nil]; +} + +- (NSData *)getData:(NSError **)error { + return [[self getDataInBackground] waitForResult:error]; +} + +- (NSInputStream *)getDataStream:(NSError **)error { + return [[self getDataStreamInBackground] waitForResult:error]; +} + +- (BFTask *)getDataInBackground { + return [self _getDataAsyncWithProgressBlock:nil]; +} + +- (BFTask *)getDataInBackgroundWithProgressBlock:(PFProgressBlock)progressBlock { + return [self _getDataAsyncWithProgressBlock:progressBlock]; +} + +- (BFTask *)getDataStreamInBackground { + return [self _getDataStreamAsyncWithProgressBlock:nil]; +} + +- (BFTask *)getDataStreamInBackgroundWithProgressBlock:(PFProgressBlock)progressBlock { + return [self _getDataStreamAsyncWithProgressBlock:progressBlock]; +} + +- (BFTask *)getDataDownloadStreamInBackground { + return [self getDataDownloadStreamInBackgroundWithProgressBlock:nil]; +} + +- (BFTask *)getDataDownloadStreamInBackgroundWithProgressBlock:(PFProgressBlock)progressBlock { + return [self _downloadStreamAsyncWithProgressBlock:progressBlock]; +} + +- (void)getDataInBackgroundWithBlock:(PFDataResultBlock)block { + [self getDataInBackgroundWithBlock:block progressBlock:nil]; +} + +- (void)getDataStreamInBackgroundWithBlock:(PFDataStreamResultBlock)block { + [self getDataStreamInBackgroundWithBlock:block progressBlock:nil]; +} + +- (void)getDataInBackgroundWithBlock:(PFDataResultBlock)resultBlock + progressBlock:(PFProgressBlock)progressBlock { + [[self _getDataAsyncWithProgressBlock:progressBlock] thenCallBackOnMainThreadAsync:resultBlock]; +} + +- (void)getDataStreamInBackgroundWithBlock:(PFDataStreamResultBlock)resultBlock + progressBlock:(PFProgressBlock)progressBlock { + [[self _getDataStreamAsyncWithProgressBlock:progressBlock] thenCallBackOnMainThreadAsync:resultBlock]; +} + +- (void)getDataInBackgroundWithTarget:(id)target selector:(SEL)selector { + [self getDataInBackgroundWithBlock:^(NSData *data, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:data object:error]; + }]; +} + +- (BFTask PF_GENERIC(NSString *) *)getFilePathInBackground { + return [self getFilePathInBackgroundWithProgressBlock:nil]; +} + +- (BFTask PF_GENERIC(NSString *)*)getFilePathInBackgroundWithProgressBlock:(PFProgressBlock)progressBlock { + return [[self _downloadAsyncWithProgressBlock:progressBlock] continueWithSuccessBlock:^id(BFTask *task) { + if (self.dirty) { + return self.stagedFilePath; + } + return [[[self class] fileController] cachedFilePathForFileState:self.state]; + }]; +} + +- (void)getFilePathInBackgroundWithBlock:(PF_NULLABLE PFFilePathResultBlock)block { + [[self getFilePathInBackground] thenCallBackOnMainThreadAsync:block]; +} + +- (void)getFilePathInBackgroundWithBlock:(PF_NULLABLE PFFilePathResultBlock)block + progressBlock:(PF_NULLABLE PFProgressBlock)progressBlock { + [[self getFilePathInBackgroundWithProgressBlock:progressBlock] thenCallBackOnMainThreadAsync:block]; +} + +#pragma mark Interrupting + +- (void)cancel { + [self _performDataAccessBlock:^{ + [self.cancellationTokenSource cancel]; + self.cancellationTokenSource = nil; + }]; +} + +///-------------------------------------- +#pragma mark - Private +///-------------------------------------- + +#pragma mark Init + +- (instancetype)initWithName:(NSString *)name urlString:(NSString *)url mimeType:(NSString *)mimeType { + self = [super init]; + if (!self) return nil; + + _taskQueue = [[PFAsyncTaskQueue alloc] init]; + _synchronizationQueue = PFThreadsafetyCreateQueueForObject(self); + + _state = [[PFFileState alloc] initWithName:name urlString:url mimeType:mimeType]; + + return self; +} + ++ (instancetype)fileWithName:(NSString *)name url:(NSString *)url { + return [[self alloc] initWithName:name urlString:url mimeType:nil]; +} + +#pragma mark Upload + +- (BFTask *)_uploadAsyncWithProgressBlock:(PFProgressBlock)progressBlock { + @weakify(self); + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id { + @strongify(self); + + __block BFCancellationToken *cancellationToken = nil; + [self _performDataAccessBlock:^{ + if (!self.cancellationTokenSource || self.cancellationTokenSource.cancellationRequested) { + self.cancellationTokenSource = [BFCancellationTokenSource cancellationTokenSource]; + } + cancellationToken = self.cancellationTokenSource.token; + }]; + + return [[[PFUser _getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { + NSString *sessionToken = task.result; + return [self.taskQueue enqueue:^id(BFTask *task) { + if (!self.dirty) { + [self _performProgressBlockAsync:progressBlock withProgress:100]; + return [BFTask taskWithResult:nil]; + } + + return [self _uploadFileAsyncWithSessionToken:sessionToken + cancellationToken:cancellationToken + progressBlock:progressBlock]; + }]; + }] continueWithSuccessResult:@YES]; + }]; +} + +- (BFTask *)_uploadFileAsyncWithSessionToken:(NSString *)sessionToken + cancellationToken:(BFCancellationToken *)cancellationToken + progressBlock:(PFProgressBlock)progressBlock { + if (cancellationToken.cancellationRequested) { + return [BFTask cancelledTask]; + } + + PFFileController *controller = [[self class] fileController]; + NSString *sourceFilePath = self.stagedFilePath; + @weakify(self); + return [[[controller uploadFileAsyncWithState:[self _fileState] + sourceFilePath:sourceFilePath + sessionToken:sessionToken + cancellationToken:cancellationToken + progressBlock:progressBlock] continueWithSuccessBlock:^id(BFTask *task) { + @strongify(self); + [self _performDataAccessBlock:^{ + self.state = [task.result copy]; + }]; + return nil; + } cancellationToken:cancellationToken] continueWithBlock:^id(BFTask *task) { + @strongify(self); + [self _performDataAccessBlock:^{ + self.cancellationTokenSource = nil; + }]; + return task; + }]; +} + +#pragma mark Download + +- (BFTask *)_getDataAsyncWithProgressBlock:(PFProgressBlock)progressBlock { + return [[self _downloadAsyncWithProgressBlock:progressBlock] continueWithSuccessBlock:^id(BFTask *task) { + return [self _cachedData]; + }]; +} + +- (BFTask *)_getDataStreamAsyncWithProgressBlock:(PFProgressBlock)progressBlock { + return [[self _downloadAsyncWithProgressBlock:progressBlock] continueWithSuccessBlock:^id(BFTask *task) { + return [self _cachedDataStream]; + }]; +} + +- (BFTask *)_downloadAsyncWithProgressBlock:(PFProgressBlock)progressBlock { + __block BFCancellationToken *cancellationToken = nil; + [self _performDataAccessBlock:^{ + if (!self.cancellationTokenSource || self.cancellationTokenSource.cancellationRequested) { + self.cancellationTokenSource = [BFCancellationTokenSource cancellationTokenSource]; + } + cancellationToken = self.cancellationTokenSource.token; + }]; + + @weakify(self); + return [self.taskQueue enqueue:^id(BFTask *task) { + @strongify(self); + if (self.isDataAvailable) { + [self _performProgressBlockAsync:progressBlock withProgress:100]; + return [BFTask taskWithResult:nil]; + } + + PFFileController *controller = [[self class] fileController]; + return [[controller downloadFileAsyncWithState:[self _fileState] + cancellationToken:cancellationToken + progressBlock:progressBlock] continueWithBlock:^id(BFTask *task) { + [self _performDataAccessBlock:^{ + self.cancellationTokenSource = nil; + }]; + return task; + }]; + }]; +} + +- (BFTask *)_downloadStreamAsyncWithProgressBlock:(PFProgressBlock)progressBlock { + __block BFCancellationToken *cancellationToken = nil; + [self _performDataAccessBlock:^{ + if (!self.cancellationTokenSource || self.cancellationTokenSource.cancellationRequested) { + self.cancellationTokenSource = [BFCancellationTokenSource cancellationTokenSource]; + } + cancellationToken = self.cancellationTokenSource.token; + }]; + + @weakify(self); + return [self.taskQueue enqueue:^id(BFTask *task) { + @strongify(self); + if (self.isDataAvailable) { + [self _performProgressBlockAsync:progressBlock withProgress:100]; + return [self _cachedDataStream]; + } + + PFFileController *controller = [[self class] fileController]; + return [[controller downloadFileStreamAsyncWithState:[self _fileState] + cancellationToken:cancellationToken + progressBlock:progressBlock] continueWithBlock:^id(BFTask *task) { + [self _performDataAccessBlock:^{ + self.cancellationTokenSource = nil; + }]; + return task; + }]; + }]; +} + +#pragma mark Caching + +- (NSString *)_cachedFilePath { + return [[[self class] fileController] cachedFilePathForFileState:self.state]; +} + +- (NSData *)_cachedData { + NSString *filePath = (self.dirty ? self.stagedFilePath : [self _cachedFilePath]); + return [NSData dataWithContentsOfFile:filePath options:NSDataReadingMappedIfSafe error:NULL]; +} + +- (NSInputStream *)_cachedDataStream { + NSString *filePath = (self.dirty ? self.stagedFilePath : [[[self class] fileController] cachedFilePathForFileState:self.state]); + return [NSInputStream inputStreamWithFileAtPath:filePath]; +} + +///-------------------------------------- +#pragma mark - Staging +///-------------------------------------- + +- (BOOL)_stageWithData:(NSData *)data error:(NSError **)error { + __block BOOL result = NO; + [self _performDataAccessBlock:^{ + _stagedFilePath = [[[[self class] fileController].fileStagingController stageFileAsyncWithData:data + name:self.state.name + uniqueId:(uintptr_t)self] + waitForResult:error withMainThreadWarning:NO]; + + result = (_stagedFilePath != nil); + }]; + return result; +} + +- (BOOL)_stageWithPath:(NSString *)path error:(NSError **)error { + __block BOOL result = NO; + [self _performDataAccessBlock:^{ + _stagedFilePath = [[[[self class] fileController].fileStagingController stageFileAsyncAtPath:path + name:self.state.name + uniqueId:(uintptr_t)self] + waitForResult:error withMainThreadWarning:NO]; + + result = (_stagedFilePath != nil); + }]; + return result; +} + +#pragma mark Data Access + +- (NSString *)name { + __block NSString *name = nil; + [self _performDataAccessBlock:^{ + name = self.state.name; + }]; + return name; +} + +- (NSString *)url { + __block NSString *url = nil; + [self _performDataAccessBlock:^{ + url = self.state.secureURLString; + }]; + return url; +} + +- (BOOL)isDirty { + return !self.url; +} + +- (BOOL)isDataAvailable { + __block BOOL available = NO; + [self _performDataAccessBlock:^{ + available = self.dirty || [[NSFileManager defaultManager] fileExistsAtPath:[self _cachedFilePath]]; + }]; + return available; +} + +- (void)_performDataAccessBlock:(dispatch_block_t)block { + PFThreadsafetySafeDispatchSync(_synchronizationQueue, block); +} + +- (PFFileState *)_fileState { + __block PFFileState *state = nil; + [self _performDataAccessBlock:^{ + state = self.state; + }]; + return state; +} + +#pragma mark Progress + +- (void)_performProgressBlockAsync:(PFProgressBlock)block withProgress:(int)progress { + if (!block) { + return; + } + + dispatch_async(dispatch_get_main_queue(), ^{ + block(progress); + }); +} + +///-------------------------------------- +#pragma mark - FileController +///-------------------------------------- + ++ (PFFileController *)fileController { + return [Parse _currentManager].coreManager.fileController; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/PFGeoPoint.h b/BreakingBad/Pods/Parse/Parse/PFGeoPoint.h new file mode 100644 index 0000000..37d3bb0 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFGeoPoint.h @@ -0,0 +1,114 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import +#import + +#import + +PF_ASSUME_NONNULL_BEGIN + +@class PFGeoPoint; + +typedef void(^PFGeoPointResultBlock)(PFGeoPoint *PF_NULLABLE_S geoPoint, NSError *PF_NULLABLE_S error); + +/*! + `PFGeoPoint` may be used to embed a latitude / longitude point as the value for a key in a . + It could be used to perform queries in a geospatial manner using <[PFQuery whereKey:nearGeoPoint:]>. + + Currently, instances of may only have one key associated with a `PFGeoPoint` type. + */ +@interface PFGeoPoint : NSObject + +///-------------------------------------- +/// @name Creating a Geo Point +///-------------------------------------- + +/*! + @abstract Create a PFGeoPoint object. Latitude and longitude are set to `0.0`. + + @returns Returns a new `PFGeoPoint`. + */ ++ (instancetype)geoPoint; + +/*! + @abstract Creates a new `PFGeoPoint` object for the given `CLLocation`, set to the location's coordinates. + + @param location Instace of `CLLocation`, with set latitude and longitude. + + @returns Returns a new PFGeoPoint at specified location. + */ ++ (instancetype)geoPointWithLocation:(PF_NULLABLE CLLocation *)location; + +/*! + @abstract Create a new `PFGeoPoint` object with the specified latitude and longitude. + + @param latitude Latitude of point in degrees. + @param longitude Longitude of point in degrees. + + @returns New point object with specified latitude and longitude. + */ ++ (instancetype)geoPointWithLatitude:(double)latitude longitude:(double)longitude; + +/*! + @abstract Fetches the current device location and executes a block with a new `PFGeoPoint` object. + + @param resultBlock A block which takes the newly created `PFGeoPoint` as an argument. + It should have the following argument signature: `^(PFGeoPoint *geoPoint, NSError *error)` + */ ++ (void)geoPointForCurrentLocationInBackground:(PF_NULLABLE PFGeoPointResultBlock)resultBlock; + +///-------------------------------------- +/// @name Controlling Position +///-------------------------------------- + +/*! + @abstract Latitude of point in degrees. Valid range is from `-90.0` to `90.0`. + */ +@property (nonatomic, assign) double latitude; + +/*! + @abstract Longitude of point in degrees. Valid range is from `-180.0` to `180.0`. + */ +@property (nonatomic, assign) double longitude; + +///-------------------------------------- +/// @name Calculating Distance +///-------------------------------------- + +/*! + @abstract Get distance in radians from this point to specified point. + + @param point `PFGeoPoint` that represents the location of other point. + + @returns Distance in radians between the receiver and `point`. + */ +- (double)distanceInRadiansTo:(PF_NULLABLE PFGeoPoint *)point; + +/*! + @abstract Get distance in miles from this point to specified point. + + @param point `PFGeoPoint` that represents the location of other point. + + @returns Distance in miles between the receiver and `point`. + */ +- (double)distanceInMilesTo:(PF_NULLABLE PFGeoPoint *)point; + +/*! + @abstract Get distance in kilometers from this point to specified point. + + @param point `PFGeoPoint` that represents the location of other point. + + @returns Distance in kilometers between the receiver and `point`. + */ +- (double)distanceInKilometersTo:(PF_NULLABLE PFGeoPoint *)point; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/PFGeoPoint.m b/BreakingBad/Pods/Parse/Parse/PFGeoPoint.m new file mode 100644 index 0000000..5912bff --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFGeoPoint.m @@ -0,0 +1,193 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFGeoPoint.h" + +#import + +#import "PFAssert.h" +#import "PFCoreManager.h" +#import "PFHash.h" +#import "PFLocationManager.h" +#import "Parse_Private.h" + +const double EARTH_RADIUS_MILES = 3958.8; +const double EARTH_RADIUS_KILOMETERS = 6371.0; + +@implementation PFGeoPoint + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + ++ (instancetype)geoPoint { + return [[self alloc] init]; +} + ++ (instancetype)geoPointWithLocation:(CLLocation *)location { + return [self geoPointWithLatitude:location.coordinate.latitude + longitude:location.coordinate.longitude]; +} + ++ (instancetype)geoPointWithLatitude:(double)latitude longitude:(double)longitude { + PFGeoPoint *gpt = [self geoPoint]; + gpt.latitude = latitude; + gpt.longitude = longitude; + return gpt; +} + ++ (void)geoPointForCurrentLocationInBackground:(PFGeoPointResultBlock)resultBlock { + if (!resultBlock) { + return; + } + + void(^locationHandler)(CLLocation *, NSError *) = ^(CLLocation *location, NSError *error) { + PFGeoPoint *newGeoPoint = [PFGeoPoint geoPointWithLocation:location]; + resultBlock(newGeoPoint, error); + }; + [[Parse _currentManager].coreManager.locationManager addBlockForCurrentLocation:locationHandler]; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (void)setLatitude:(double)latitude { + PFParameterAssert(latitude >= -90.0 && latitude <= 90.0, + @"`latitude` is out of range [-90.0, 90.0]: %f", latitude); + _latitude = latitude; +} + +- (void)setLongitude:(double)longitude { + PFParameterAssert(longitude >= -180.0 && longitude <= 180.0, + @"`longitude` is out of range [-180.0, 180.0]: %f", longitude); + _longitude = longitude; +} + +- (double)distanceInRadiansTo:(PFGeoPoint *)point { + double d2r = M_PI / 180.0; // radian conversion factor + double lat1rad = self.latitude * d2r; + double long1rad = self.longitude * d2r; + double lat2rad = [point latitude] * d2r; + double long2rad = [point longitude] * d2r; + double deltaLat = lat1rad - lat2rad; + double deltaLong = long1rad - long2rad; + double sinDeltaLatDiv2 = sin(deltaLat / 2.); + double sinDeltaLongDiv2 = sin(deltaLong / 2.); + // Square of half the straight line chord distance between both points. [0.0, 1.0] + double a = sinDeltaLatDiv2 * sinDeltaLatDiv2 + + cos(lat1rad) * cos(lat2rad) * sinDeltaLongDiv2 * sinDeltaLongDiv2; + a = fmin(1.0, a); + return 2. * asin(sqrt(a)); +} + +- (double)distanceInMilesTo:(PFGeoPoint *)point { + return [self distanceInRadiansTo:point] * EARTH_RADIUS_MILES; +} + +- (double)distanceInKilometersTo:(PFGeoPoint *)point { + return [self distanceInRadiansTo:point] * EARTH_RADIUS_KILOMETERS; +} + +///-------------------------------------- +#pragma mark - Encoding +///-------------------------------------- + +static NSString *const PFGeoPointCodingTypeKey = @"__type"; +static NSString *const PFGeoPointCodingLatitudeKey = @"latitude"; +static NSString *const PFGeoPointCodingLongitudeKey = @"longitude"; + +- (NSDictionary *)encodeIntoDictionary { + return @{ + PFGeoPointCodingTypeKey : @"GeoPoint", + PFGeoPointCodingLatitudeKey : @(self.latitude), + PFGeoPointCodingLongitudeKey : @(self.longitude) + }; +} + ++ (instancetype)geoPointWithDictionary:(NSDictionary *)dictionary { + return [[self alloc] initWithEncodedDictionary:dictionary]; +} + +- (instancetype)initWithEncodedDictionary:(NSDictionary *)dictionary { + self = [self init]; + if (!self) return nil; + + id latObj = dictionary[PFGeoPointCodingLatitudeKey]; + PFParameterAssert([latObj isKindOfClass:[NSNumber class]], @"Invalid latitude type passed: %@", latObj); + + id longObj = dictionary[PFGeoPointCodingLongitudeKey]; + PFParameterAssert([longObj isKindOfClass:[NSNumber class]], @"Invalid longitude type passed: %@", longObj); + + _latitude = [latObj doubleValue]; + _longitude = [longObj doubleValue]; + + return self; +} + +///-------------------------------------- +#pragma mark - NSObject +///-------------------------------------- + +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + + if (![object isKindOfClass:[PFGeoPoint class]]) { + return NO; + } + + PFGeoPoint *geoPoint = object; + + return (self.latitude == geoPoint.latitude && + self.longitude == geoPoint.longitude); +} + +- (NSUInteger)hash { + return PFDoublePairHash(self.latitude, self.longitude); +} + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p, latitude: %f, longitude: %f>", + [self class], + self, + self.latitude, + self.longitude]; +} + +///-------------------------------------- +#pragma mark - NSCopying +///-------------------------------------- + +- (instancetype)copyWithZone:(NSZone *)zone { + PFGeoPoint *geoPoint = [[self class] geoPointWithLatitude:self.latitude longitude:self.longitude]; + return geoPoint; +} + +///-------------------------------------- +#pragma mark - NSCoding +///-------------------------------------- + +- (instancetype)initWithCoder:(NSCoder *)coder { + NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; + dictionary[PFGeoPointCodingTypeKey] = [coder decodeObjectForKey:PFGeoPointCodingTypeKey]; + dictionary[PFGeoPointCodingLatitudeKey] = [coder decodeObjectForKey:PFGeoPointCodingLatitudeKey]; + dictionary[PFGeoPointCodingLongitudeKey] = [coder decodeObjectForKey:PFGeoPointCodingLongitudeKey]; + return [self initWithEncodedDictionary:dictionary]; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + NSDictionary *dictionary = [self encodeIntoDictionary]; + [dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + [coder encodeObject:obj forKey:key]; + }]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/PFInstallation.h b/BreakingBad/Pods/Parse/Parse/PFInstallation.h new file mode 100644 index 0000000..3b1c042 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFInstallation.h @@ -0,0 +1,113 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import +#import +#import + +PF_ASSUME_NONNULL_BEGIN + +/*! + A Parse Framework Installation Object that is a local representation of an + installation persisted to the Parse cloud. This class is a subclass of a + , and retains the same functionality of a PFObject, but also extends + it with installation-specific fields and related immutability and validity + checks. + + A valid `PFInstallation` can only be instantiated via + <[PFInstallation currentInstallation]> because the required identifier fields + are readonly. The and fields are also readonly properties which + are automatically updated to match the device's time zone and application badge + when the `PFInstallation` is saved, thus these fields might not reflect the + latest device state if the installation has not recently been saved. + + `PFInstallation` objects which have a valid and are saved to + the Parse cloud can be used to target push notifications. + */ + +PF_WATCH_UNAVAILABLE @interface PFInstallation : PFObject + +///-------------------------------------- +/// @name Accessing the Current Installation +///-------------------------------------- + +/*! + @abstract Gets the currently-running installation from disk and returns an instance of it. + + @discussion If this installation is not stored on disk, returns a `PFInstallation` + with and fields set to those of the + current installation. + + @result Returns a `PFInstallation` that represents the currently-running installation. + */ ++ (instancetype)currentInstallation; + +///-------------------------------------- +/// @name Installation Properties +///-------------------------------------- + +/*! + @abstract The device type for the `PFInstallation`. + */ +@property (nonatomic, copy, readonly) NSString *deviceType; + +/*! + @abstract The installationId for the `PFInstallation`. + */ +@property (nonatomic, copy, readonly) NSString *installationId; + +/*! + @abstract The device token for the `PFInstallation`. + */ +@property (PF_NULLABLE_PROPERTY nonatomic, copy) NSString *deviceToken; + +/*! + @abstract The badge for the `PFInstallation`. + */ +@property (nonatomic, assign) NSInteger badge; + +/*! + @abstract The name of the time zone for the `PFInstallation`. + */ +@property (PF_NULLABLE_PROPERTY nonatomic, copy, readonly) NSString *timeZone; + +/*! + @abstract The channels for the `PFInstallation`. + */ +@property (PF_NULLABLE_PROPERTY nonatomic, copy) NSArray *channels; + +/*! + @abstract Sets the device token string property from an `NSData`-encoded token. + + @param deviceTokenData A token that identifies the device. + */ +- (void)setDeviceTokenFromData:(PF_NULLABLE NSData *)deviceTokenData; + +///-------------------------------------- +/// @name Querying for Installations +///-------------------------------------- + +/*! + @abstract Creates a for `PFInstallation` objects. + + @discussion Only the following types of queries are allowed for installations: + + - `[query getObjectWithId:]` + - `[query whereKey:@"installationId" equalTo:]` + - `[query whereKey:@"installationId" matchesKey: inQuery:]` + + You can add additional query conditions, but one of the above must appear as a top-level `AND` clause in the query. + */ ++ (PF_NULLABLE PFQuery *)query; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/PFInstallation.m b/BreakingBad/Pods/Parse/Parse/PFInstallation.m new file mode 100644 index 0000000..2536d64 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFInstallation.m @@ -0,0 +1,342 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFInstallation.h" +#import "PFInstallationPrivate.h" + +#import "BFTask+Private.h" +#import "PFApplication.h" +#import "PFAssert.h" +#import "PFCoreManager.h" +#import "PFCurrentInstallationController.h" +#import "PFFileManager.h" +#import "PFInstallationConstants.h" +#import "PFInstallationController.h" +#import "PFInstallationIdentifierStore.h" +#import "PFInternalUtils.h" +#import "PFObject+Subclass.h" +#import "PFObjectEstimatedData.h" +#import "PFObjectPrivate.h" +#import "PFOfflineStore.h" +#import "PFPushPrivate.h" +#import "PFQueryPrivate.h" +#import "Parse_Private.h" +#import "PFErrorUtilities.h" + +@implementation PFInstallation (Private) + +static NSSet *protectedKeys; + ++ (void)initialize { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + protectedKeys = PF_SET(PFInstallationKeyDeviceType, + PFInstallationKeyInstallationId, + PFInstallationKeyTimeZone, + PFInstallationKeyLocaleIdentifier, + PFInstallationKeyParseVersion, + PFInstallationKeyAppVersion, + PFInstallationKeyAppName, + PFInstallationKeyAppIdentifier); + }); +} + +// Clear device token. Used for testing. +- (void)_clearDeviceToken { + [super removeObjectForKey:PFInstallationKeyDeviceToken]; +} + +- (BFTask PF_GENERIC(PFVoid) *)_validateDeleteAsync { + return [[super _validateDeleteAsync] continueWithSuccessBlock:^id(BFTask PF_GENERIC(PFVoid) *task) { + NSError *error = [PFErrorUtilities errorWithCode:kPFErrorCommandUnavailable + message:@"Installation cannot be deleted"]; + return [BFTask taskWithError:error]; + }]; +} + +// Validates a class name. We override this to only allow the installation class name. ++ (void)_assertValidInstanceClassName:(NSString *)className { + PFParameterAssert([className isEqualToString:[PFInstallation parseClassName]], + @"Cannot initialize a PFInstallation with a custom class name."); +} + +- (BOOL)_isCurrentInstallation { + return (self == [[self class] _currentInstallationController].memoryCachedCurrentInstallation); +} + +- (void)_markAllFieldsDirty { + @synchronized(self.lock) { + NSDictionary *estimatedData = self._estimatedData.dictionaryRepresentation; + [estimatedData enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + [super setObject:obj forKey:key]; + }]; + } +} + +- (NSString *)displayClassName { + return NSStringFromClass([PFInstallation class]); +} + +///-------------------------------------- +#pragma mark - Command Handlers +///-------------------------------------- + +- (BFTask *)handleSaveResultAsync:(NSDictionary *)result { + @weakify(self); + return [[super handleSaveResultAsync:result] continueWithBlock:^id(BFTask *task) { + @strongify(self); + BFTask *saveTask = [[[self class] _currentInstallationController] saveCurrentObjectAsync:self]; + return [saveTask continueWithResult:task]; + }]; +} + +///-------------------------------------- +#pragma mark - Current Installation Controller +///-------------------------------------- + ++ (PFCurrentInstallationController *)_currentInstallationController { + return [Parse _currentManager].coreManager.currentInstallationController; +} + +@end + +@implementation PFInstallation + +@dynamic deviceType; +@dynamic installationId; +@dynamic deviceToken; +@dynamic timeZone; +@dynamic channels; +@dynamic badge; + +///-------------------------------------- +#pragma mark - PFSubclassing +///-------------------------------------- + ++ (NSString *)parseClassName { + return @"_Installation"; +} + ++ (PFQuery *)query { + return [super query]; +} + +///-------------------------------------- +#pragma mark - Current Installation +///-------------------------------------- + ++ (instancetype)currentInstallation { + BFTask *task = [[self _currentInstallationController] getCurrentObjectAsync]; + return [task waitForResult:nil withMainThreadWarning:NO]; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (id)objectForKey:(NSString *)key { + if ([key isEqualToString:PFInstallationKeyBadge] && [self _isCurrentInstallation]) { + // Update the data dictionary badge value from the device. + [self _updateBadgeFromDevice]; + } + + return [super objectForKey:key]; +} + +- (void)setObject:(id)object forKey:(NSString *)key { + PFParameterAssert(![protectedKeys containsObject:key], + @"Can't change the '%@' field of a PFInstallation.", key); + + if ([key isEqualToString:PFInstallationKeyBadge]) { + // Set the application badge and update the badge value in the data dictionary. + NSInteger badge = [object integerValue]; + PFParameterAssert(badge >= 0, @"Can't set the badge to less than zero."); + + [PFApplication currentApplication].iconBadgeNumber = badge; + [super setObject:@(badge) forKey:PFInstallationKeyBadge]; + } + + [super setObject:object forKey:key]; +} + +- (void)incrementKey:(NSString *)key byAmount:(NSNumber *)amount { + PFParameterAssert(![key isEqualToString:PFInstallationKeyBadge], + @"Can't atomically increment the 'badge' field of a PFInstallation."); + + [super incrementKey:key byAmount:amount]; +} + +- (void)removeObjectForKey:(NSString *)key { + PFParameterAssert(![protectedKeys containsObject:key], + @"Can't remove the '%@' field of a PFInstallation.", key); + PFParameterAssert(![key isEqualToString:PFInstallationKeyBadge], + @"Can't remove the 'badge' field of a PFInstallation."); + [super removeObjectForKey:key]; +} + +// Internal mutators override the dynamic accessor and use super to avoid +// read-only checks on automatic fields. +- (void)setDeviceType:(NSString *)deviceType { + [self _setObject:deviceType forKey:PFInstallationKeyDeviceType onlyIfDifferent:YES]; +} + +- (void)setInstallationId:(NSString *)installationId { + [self _setObject:installationId forKey:PFInstallationKeyInstallationId onlyIfDifferent:YES]; +} + +- (void)setDeviceToken:(NSString *)deviceToken { + [self _setObject:deviceToken forKey:PFInstallationKeyDeviceToken onlyIfDifferent:YES]; +} + +- (void)setDeviceTokenFromData:(NSData *)deviceTokenData { + [self _setObject:[[PFPush pushInternalUtilClass] convertDeviceTokenToString:deviceTokenData] + forKey:PFInstallationKeyDeviceToken + onlyIfDifferent:YES]; +} + +- (void)setTimeZone:(NSString *)timeZone { + [self _setObject:timeZone forKey:PFInstallationKeyTimeZone onlyIfDifferent:YES]; +} + +- (void)setLocaleIdentifier:(NSString *)localeIdentifier { + [self _setObject:localeIdentifier + forKey:PFInstallationKeyLocaleIdentifier + onlyIfDifferent:YES]; +} + +- (void)setChannels:(NSArray *)channels { + [self _setObject:channels forKey:PFInstallationKeyChannels onlyIfDifferent:YES]; +} + +///-------------------------------------- +#pragma mark - PFObject +///-------------------------------------- + +- (BFTask *)saveAsync:(BFTask *)toAwait { + return [[super saveAsync:toAwait] continueWithBlock:^id(BFTask *task) { + // Do not attempt to resave an object if LDS is enabled, since changing objectId is not allowed. + if ([Parse _currentManager].offlineStoreLoaded) { + return task; + } + + if (task.error.code == kPFErrorObjectNotFound) { + @synchronized (self.lock) { + // Retry the fetch as a save operation because this Installation was deleted on the server. + // We always want [currentInstallation save] to succeed. + self.objectId = nil; + [self _markAllFieldsDirty]; + return [super saveAsync:nil]; + } + } + return task; + }]; +} + +- (BOOL)needsDefaultACL { + return NO; +} + +///-------------------------------------- +#pragma mark - Automatic Info +///-------------------------------------- + +- (void)_objectWillSave { + if ([self _isCurrentInstallation]) { + @synchronized(self.lock) { + [self _updateTimeZoneFromDevice]; + [self _updateBadgeFromDevice]; + [self _updateVersionInfoFromDevice]; + [self _updateLocaleIdentifierFromDevice]; + } + } +} + +- (void)_updateTimeZoneFromDevice { + // Get the system time zone (after clearing the cached value) and update + // the installation if necessary. + NSString *systemTimeZoneName = [PFInternalUtils currentSystemTimeZoneName]; + if (![systemTimeZoneName isEqualToString:self.timeZone]) { + self.timeZone = systemTimeZoneName; + } +} + +- (void)_updateBadgeFromDevice { + // Get the application icon and update the installation if necessary. + NSNumber *applicationBadge = @([PFApplication currentApplication].iconBadgeNumber); + NSNumber *installationBadge = [super objectForKey:PFInstallationKeyBadge]; + if (installationBadge == nil || ![applicationBadge isEqualToNumber:installationBadge]) { + [super setObject:applicationBadge forKey:PFInstallationKeyBadge]; + } +} + +- (void)_updateVersionInfoFromDevice { + NSDictionary *appInfo = [[NSBundle mainBundle] infoDictionary]; + NSString *appName = appInfo[(__bridge NSString *)kCFBundleNameKey]; + NSString *appVersion = appInfo[(__bridge NSString *)kCFBundleVersionKey]; + NSString *appIdentifier = appInfo[(__bridge NSString *)kCFBundleIdentifierKey]; + // It's possible that the app was created without an info.plist and we just + // cannot get the data we need. + // Note: it's important to make the possibly nil string the message receptor for + // nil propegation instead of a BAD_ACCESS + if (appName && ![self[PFInstallationKeyAppName] isEqualToString:appName]) { + [super setObject:appName forKey:PFInstallationKeyAppName]; + } + if (appVersion && ![self[PFInstallationKeyAppVersion] isEqualToString:appVersion]) { + [super setObject:appVersion forKey:PFInstallationKeyAppVersion]; + } + if (appIdentifier && ![self[PFInstallationKeyAppIdentifier] isEqualToString:appIdentifier]) { + [super setObject:appIdentifier forKey:PFInstallationKeyAppIdentifier]; + } + if (![self[PFInstallationKeyParseVersion] isEqualToString:PARSE_VERSION]) { + [super setObject:PARSE_VERSION forKey:PFInstallationKeyParseVersion]; + } +} + +/*! + @abstract Save localeIdentifier in the following format: [language code]-[COUNTRY CODE]. + + @discussion The language codes are two-letter lowercase ISO language codes (such as "en") as defined by + ISO 639-1. + The country codes are two-letter uppercase ISO country codes (such as "US") as defined by + ISO 3166-1. + + Many iOS locale identifiers don't contain the country code -> inconsistencies with Android/Windows Phone. + */ +- (void)_updateLocaleIdentifierFromDevice { + NSLocale *currentLocale = [NSLocale currentLocale]; + NSString *language = [currentLocale objectForKey:NSLocaleLanguageCode]; + NSString *countryCode = [currentLocale objectForKey:NSLocaleCountryCode]; + + if (language.length == 0) { + return; + } + + NSString *localeIdentifier = nil; + if (countryCode.length > 0) { + localeIdentifier = [NSString stringWithFormat:@"%@-%@", language, countryCode]; + } else { + localeIdentifier = language; + } + + NSString *currentLocaleIdentifier = self[PFInstallationKeyLocaleIdentifier]; + if (localeIdentifier.length > 0 && ![localeIdentifier isEqualToString:currentLocaleIdentifier]) { + // Call into super to avoid checking on protected keys. + [super setObject:localeIdentifier forKey:PFInstallationKeyLocaleIdentifier]; + } +} + +///-------------------------------------- +#pragma mark - Data Source +///-------------------------------------- + ++ (id)objectController { + return [Parse _currentManager].coreManager.installationController; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/PFNetworkActivityIndicatorManager.h b/BreakingBad/Pods/Parse/Parse/PFNetworkActivityIndicatorManager.h new file mode 100644 index 0000000..d5b376a --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFNetworkActivityIndicatorManager.h @@ -0,0 +1,70 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import +#import + +#import + +PF_ASSUME_NONNULL_BEGIN + +/*! + `PFNetworkActivityIndicatorManager` manages the state of the network activity indicator in the status bar. + When enabled, it will start managing the network activity indicator in the status bar, + according to the network operations that are performed by Parse SDK. + + The number of active requests is incremented or decremented like a stack or a semaphore, + the activity indicator will animate, as long as the number is greater than zero. + */ +@interface PFNetworkActivityIndicatorManager : NSObject + +/*! + A Boolean value indicating whether the manager is enabled. + If `YES` - the manager will start managing the status bar network activity indicator, + according to the network operations that are performed by Parse SDK. + The default value is `YES`. + */ +@property (nonatomic, assign, getter = isEnabled) BOOL enabled; + +/*! + A Boolean value indicating whether the network activity indicator is currently displayed in the status bar. + */ +@property (nonatomic, assign, readonly, getter = isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible; + +/*! + The value that indicates current network activities count. + */ +@property (nonatomic, assign, readonly) NSUInteger networkActivityCount; + +/*! + @abstract Returns the shared network activity indicator manager object for the system. + + @returns The systemwide network activity indicator manager. + */ ++ (instancetype)sharedManager; + +/*! + @abstract Increments the number of active network requests. + + @discussion If this number was zero before incrementing, + this will start animating network activity indicator in the status bar. + */ +- (void)incrementActivityCount; + +/*! + @abstract Decrements the number of active network requests. + + @discussion If this number becomes zero after decrementing, + this will stop animating network activity indicator in the status bar. + */ +- (void)decrementActivityCount; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/PFNetworkActivityIndicatorManager.m b/BreakingBad/Pods/Parse/Parse/PFNetworkActivityIndicatorManager.m new file mode 100644 index 0000000..c8d9e6a --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFNetworkActivityIndicatorManager.m @@ -0,0 +1,165 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFNetworkActivityIndicatorManager.h" + +#import + +#import "PFApplication.h" +#import "PFCommandRunningConstants.h" + +static NSTimeInterval const PFNetworkActivityIndicatorVisibilityDelay = 0.17; + +@interface PFNetworkActivityIndicatorManager () { + dispatch_queue_t _networkActivityAccessQueue; +} + +@property (nonatomic, assign, readwrite) NSUInteger networkActivityCount; + +@property (nonatomic, strong) NSTimer *activityIndicatorVisibilityTimer; + +@end + +@implementation PFNetworkActivityIndicatorManager + +@synthesize enabled = _enabled; +@synthesize networkActivityCount = _networkActivityCount; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + ++ (instancetype)sharedManager { + static PFNetworkActivityIndicatorManager *manager; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + manager = [[self alloc] init]; + manager.enabled = YES; + }); + return manager; +} + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _networkActivityAccessQueue = dispatch_queue_create("com.parse.networkActivityIndicatorManager", + DISPATCH_QUEUE_SERIAL); + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(_handleWillSendURLRequestNotification:) + name:PFNetworkWillSendURLRequestNotification + object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(_handleDidReceiveURLResponseNotification:) + name:PFNetworkDidReceiveURLResponseNotification + object:nil]; + + return self; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; + [_activityIndicatorVisibilityTimer invalidate]; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (void)setNetworkActivityCount:(NSUInteger)networkActivityCount { + dispatch_sync(_networkActivityAccessQueue, ^{ + _networkActivityCount = networkActivityCount; + }); + dispatch_async(dispatch_get_main_queue(), ^{ + [self _updateNetworkActivityIndicatorVisibilityAfterDelay]; + }); +} + +- (NSUInteger)networkActivityCount { + __block NSUInteger count = 0; + dispatch_sync(_networkActivityAccessQueue, ^{ + count = _networkActivityCount; + }); + return count; +} + +- (BOOL)isNetworkActivityIndicatorVisible { + return self.networkActivityCount > 0; +} + +///-------------------------------------- +#pragma mark - Counts +///-------------------------------------- + +- (void)incrementActivityCount { + dispatch_sync(_networkActivityAccessQueue, ^{ + _networkActivityCount++; + }); + dispatch_async(dispatch_get_main_queue(), ^{ + [self _updateNetworkActivityIndicatorVisibilityAfterDelay]; + }); +} + +- (void)decrementActivityCount { + dispatch_sync(_networkActivityAccessQueue, ^{ + _networkActivityCount = MAX(_networkActivityCount - 1, 0); + }); + dispatch_async(dispatch_get_main_queue(), ^{ + [self _updateNetworkActivityIndicatorVisibilityAfterDelay]; + }); +} + +///-------------------------------------- +#pragma mark - Network Activity Indicator +///-------------------------------------- + +- (void)_updateNetworkActivityIndicatorVisibilityAfterDelay { + if (self.enabled) { + // Delay hiding of activity indicator for a short interval, to avoid flickering + if (![self isNetworkActivityIndicatorVisible]) { + [self.activityIndicatorVisibilityTimer invalidate]; + + NSTimeInterval timeInterval = PFNetworkActivityIndicatorVisibilityDelay; + SEL selector = @selector(_updateNetworkActivityIndicatorVisibility); + self.activityIndicatorVisibilityTimer = [NSTimer timerWithTimeInterval:timeInterval + target:self + selector:selector + userInfo:nil + repeats:NO]; + [[NSRunLoop mainRunLoop] addTimer:self.activityIndicatorVisibilityTimer + forMode:NSRunLoopCommonModes]; + } else { + [self performSelectorOnMainThread:@selector(_updateNetworkActivityIndicatorVisibility) + withObject:nil + waitUntilDone:NO + modes:@[ NSRunLoopCommonModes ]]; + } + } +} + +- (void)_updateNetworkActivityIndicatorVisibility NS_EXTENSION_UNAVAILABLE_IOS("") { + if (![PFApplication currentApplication].extensionEnvironment) { + [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:self.networkActivityIndicatorVisible]; + } +} + +///-------------------------------------- +#pragma mark - Command Running +///-------------------------------------- + +- (void)_handleWillSendURLRequestNotification:(NSNotification *)notification { + [self incrementActivityCount]; +} + +- (void)_handleDidReceiveURLResponseNotification:(NSNotification *)notification { + [self decrementActivityCount]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/PFNullability.h b/BreakingBad/Pods/Parse/Parse/PFNullability.h new file mode 100644 index 0000000..8c1b958 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFNullability.h @@ -0,0 +1,47 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#ifndef Parse_PFNullability_h +#define Parse_PFNullability_h + +///-------------------------------------- +/// @name Nullability Annotation Support +///-------------------------------------- + +#if __has_feature(nullability) +# define PF_NONNULL nonnull +# define PF_NONNULL_S __nonnull +# define PF_NULLABLE nullable +# define PF_NULLABLE_S __nullable +# define PF_NULLABLE_PROPERTY nullable, +#else +# define PF_NONNULL +# define PF_NONNULL_S +# define PF_NULLABLE +# define PF_NULLABLE_S +# define PF_NULLABLE_PROPERTY +#endif + +#if __has_feature(assume_nonnull) +# ifdef NS_ASSUME_NONNULL_BEGIN +# define PF_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN +# else +# define PF_ASSUME_NONNULL_BEGIN _Pragma("clang assume_nonnull begin") +# endif +# ifdef NS_ASSUME_NONNULL_END +# define PF_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END +# else +# define PF_ASSUME_NONNULL_END _Pragma("clang assume_nonnull end") +# endif +#else +# define PF_ASSUME_NONNULL_BEGIN +# define PF_ASSUME_NONNULL_END +#endif + +#endif diff --git a/BreakingBad/Pods/Parse/Parse/PFObject+Subclass.h b/BreakingBad/Pods/Parse/Parse/PFObject+Subclass.h new file mode 100644 index 0000000..585d5c1 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFObject+Subclass.h @@ -0,0 +1,125 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import +#import + +@class PFQuery PF_GENERIC(PFGenericObject : PFObject *); + +PF_ASSUME_NONNULL_BEGIN + +/*! + ### Subclassing Notes + + Developers can subclass `PFObject` for a more native object-oriented class structure. + Strongly-typed subclasses of `PFObject` must conform to the protocol + and must call before <[Parse setApplicationId:clientKey:]> is called. + After this it will be returned by and other `PFObject` factories. + + All methods in except for <[PFSubclassing parseClassName]> + are already implemented in the `PFObject+Subclass` category. + + Including `PFObject+Subclass.h` in your implementation file provides these implementations automatically. + + Subclasses support simpler initializers, query syntax, and dynamic synthesizers. + The following shows an example subclass: + + \@interface MYGame : PFObject + + // Accessing this property is the same as objectForKey:@"title" + @property (nonatomic, copy) NSString *title; + + + (NSString *)parseClassName; + + @end + + + @implementation MYGame + + @dynamic title; + + + (NSString *)parseClassName { + return @"Game"; + } + + @end + + + MYGame *game = [[MYGame alloc] init]; + game.title = @"Bughouse"; + [game saveInBackground]; + */ +@interface PFObject (Subclass) + +///-------------------------------------- +/// @name Methods for Subclasses +///-------------------------------------- + +/*! + @abstract Creates an instance of the registered subclass with this class's . + + @discussion This helps a subclass ensure that it can be subclassed itself. + For example, `[PFUser object]` will return a `MyUser` object if `MyUser` is a registered subclass of `PFUser`. + For this reason, `[MyClass object]` is preferred to `[[MyClass alloc] init]`. + This method can only be called on subclasses which conform to `PFSubclassing`. + A default implementation is provided by `PFObject` which should always be sufficient. + */ ++ (instancetype)object; + +/*! + @abstract Creates a reference to an existing `PFObject` for use in creating associations between `PFObjects`. + + @discussion Calling on this object will return `NO` until or has been called. + This method can only be called on subclasses which conform to . + A default implementation is provided by `PFObject` which should always be sufficient. + No network request will be made. + + @param objectId The object id for the referenced object. + + @returns An instance of `PFObject` without data. + */ ++ (instancetype)objectWithoutDataWithObjectId:(PF_NULLABLE NSString *)objectId; + +/*! + @abstract Registers an Objective-C class for Parse to use for representing a given Parse class. + + @discussion Once this is called on a `PFObject` subclass, any `PFObject` Parse creates with a class name + that matches `[self parseClassName]` will be an instance of subclass. + This method can only be called on subclasses which conform to . + A default implementation is provided by `PFObject` which should always be sufficient. + */ ++ (void)registerSubclass; + +/*! + @abstract Returns a query for objects of type . + + @discussion This method can only be called on subclasses which conform to . + A default implementation is provided by which should always be sufficient. + */ ++ (PF_NULLABLE PFQuery *)query; + +/*! + @abstract Returns a query for objects of type with a given predicate. + + @discussion A default implementation is provided by which should always be sufficient. + @warning This method can only be called on subclasses which conform to . + + @param predicate The predicate to create conditions from. + + @returns An instance of . + + @see [PFQuery queryWithClassName:predicate:] + */ ++ (PF_NULLABLE PFQuery *)queryWithPredicate:(PF_NULLABLE NSPredicate *)predicate; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/PFObject.h b/BreakingBad/Pods/Parse/Parse/PFObject.h new file mode 100644 index 0000000..aeb51c7 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFObject.h @@ -0,0 +1,1429 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import +#import + +PF_ASSUME_NONNULL_BEGIN + +@protocol PFSubclassing; +@class PFRelation; + +/*! + The name of the default pin that for PFObject local data store. + */ +extern NSString *const PFObjectDefaultPin; + +/*! + The `PFObject` class is a local representation of data persisted to the Parse cloud. + This is the main class that is used to interact with objects in your app. + */ +NS_REQUIRES_PROPERTY_DEFINITIONS +@interface PFObject : NSObject { + BOOL dirty; + + // An array of NSDictionary of NSString -> PFFieldOperation. + // Each dictionary has a subset of the object's keys as keys, and the + // changes to the value for that key as its value. + // There is always at least one dictionary of pending operations. + // Every time a save is started, a new dictionary is added to the end. + // Whenever a save completes, the new data is put into fetchedData, and + // a dictionary is removed from the start. + NSMutableArray *PF_NULLABLE_S operationSetQueue; +} + +///-------------------------------------- +/// @name Creating a PFObject +///-------------------------------------- + +/*! + @abstract Initializes a new empty `PFObject` instance with a class name. + + @param newClassName A class name can be any alphanumeric string that begins with a letter. + It represents an object in your app, like a 'User' or a 'Document'. + + @returns Returns the object that is instantiated with the given class name. + */ +- (instancetype)initWithClassName:(NSString *)newClassName; + +/*! + @abstract Creates a new PFObject with a class name. + + @param className A class name can be any alphanumeric string that begins with a letter. + It represents an object in your app, like a 'User' or a 'Document'. + + @returns Returns the object that is instantiated with the given class name. + */ ++ (instancetype)objectWithClassName:(NSString *)className; + +/*! + @abstract Creates a new `PFObject` with a class name, initialized with data + constructed from the specified set of objects and keys. + + @param className The object's class. + @param dictionary An `NSDictionary` of keys and objects to set on the new `PFObject`. + + @returns A PFObject with the given class name and set with the given data. + */ ++ (instancetype)objectWithClassName:(NSString *)className dictionary:(PF_NULLABLE NSDictionary PF_GENERIC(NSString *, id)*)dictionary; + +/*! + @abstract Creates a reference to an existing PFObject for use in creating associations between PFObjects. + + @discussion Calling on this object will return `NO` until has been called. + No network request will be made. + + @param className The object's class. + @param objectId The object id for the referenced object. + + @returns A `PFObject` instance without data. + */ ++ (instancetype)objectWithoutDataWithClassName:(NSString *)className objectId:(PF_NULLABLE NSString *)objectId; + +///-------------------------------------- +/// @name Managing Object Properties +///-------------------------------------- + +/*! + @abstract The class name of the object. + */ +@property (strong, readonly) NSString *parseClassName; + +/*! + @abstract The id of the object. + */ +@property (PF_NULLABLE_PROPERTY nonatomic, strong) NSString *objectId; + +/*! + @abstract When the object was last updated. + */ +@property (PF_NULLABLE_PROPERTY nonatomic, strong, readonly) NSDate *updatedAt; + +/*! + @abstract When the object was created. + */ +@property (PF_NULLABLE_PROPERTY nonatomic, strong, readonly) NSDate *createdAt; + +/*! + @abstract The ACL for this object. + */ +@property (PF_NULLABLE_PROPERTY nonatomic, strong) PFACL *ACL; + +/*! + @abstract Returns an array of the keys contained in this object. + + @discussion This does not include `createdAt`, `updatedAt`, `authData`, or `objectId`. + It does include things like username and ACL. + */ +- (NSArray PF_GENERIC(NSString *)*)allKeys; + +///-------------------------------------- +/// @name Accessors +///-------------------------------------- + +/*! + @abstract Returns the value associated with a given key. + + @param key The key for which to return the corresponding value. + */ +- (PF_NULLABLE_S id)objectForKey:(NSString *)key; + +/*! + @abstract Sets the object associated with a given key. + + @param object The object for `key`. A strong reference to the object is maintained by PFObject. + Raises an `NSInvalidArgumentException` if `object` is `nil`. + If you need to represent a `nil` value - use `NSNull`. + @param key The key for `object`. + Raises an `NSInvalidArgumentException` if `key` is `nil`. + + @see setObject:forKeyedSubscript: + */ +- (void)setObject:(id)object forKey:(NSString *)key; + +/*! + @abstract Unsets a key on the object. + + @param key The key. + */ +- (void)removeObjectForKey:(NSString *)key; + +/*! + @abstract Returns the value associated with a given key. + + @discussion This method enables usage of literal syntax on `PFObject`. + E.g. `NSString *value = object[@"key"];` + + @param key The key for which to return the corresponding value. + + @see objectForKey: + */ +- (PF_NULLABLE_S id)objectForKeyedSubscript:(NSString *)key; + +/*! + @abstract Returns the value associated with a given key. + + @discussion This method enables usage of literal syntax on `PFObject`. + E.g. `object[@"key"] = @"value";` + + @param object The object for `key`. A strong reference to the object is maintained by PFObject. + Raises an `NSInvalidArgumentException` if `object` is `nil`. + If you need to represent a `nil` value - use `NSNull`. + @param key The key for `object`. + Raises an `NSInvalidArgumentException` if `key` is `nil`. + + @see setObject:forKey: + */ +- (void)setObject:(id)object forKeyedSubscript:(NSString *)key; + +/*! + @abstract Returns the relation object associated with the given key. + + @param key The key that the relation is associated with. + */ +- (PFRelation *)relationForKey:(NSString *)key; + +/*! + @abstract Returns the relation object associated with the given key. + + @param key The key that the relation is associated with. + + @deprecated Please use `[PFObject relationForKey:]` instead. + */ +- (PFRelation *)relationforKey:(NSString *)key PARSE_DEPRECATED("Please use -relationForKey: instead."); + +/*! + @abstract Clears any changes to this object made since the last call to save and sets it back to the server state. + */ +- (void)revert; + +/*! + @abstract Clears any changes to this object's key that were done after last successful save and sets it back to the + server state. + + @param key The key to revert changes for. + */ +- (void)revertObjectForKey:(NSString *)key; + +///-------------------------------------- +/// @name Array Accessors +///-------------------------------------- + +/*! + @abstract Adds an object to the end of the array associated with a given key. + + @param object The object to add. + @param key The key. + */ +- (void)addObject:(id)object forKey:(NSString *)key; + +/*! + @abstract Adds the objects contained in another array to the end of the array associated with a given key. + + @param objects The array of objects to add. + @param key The key. + */ +- (void)addObjectsFromArray:(NSArray *)objects forKey:(NSString *)key; + +/*! + @abstract Adds an object to the array associated with a given key, only if it is not already present in the array. + + @discussion The position of the insert is not guaranteed. + + @param object The object to add. + @param key The key. + */ +- (void)addUniqueObject:(id)object forKey:(NSString *)key; + +/*! + @abstract Adds the objects contained in another array to the array associated with a given key, + only adding elements which are not already present in the array. + + @dicsussion The position of the insert is not guaranteed. + + @param objects The array of objects to add. + @param key The key. + */ +- (void)addUniqueObjectsFromArray:(NSArray *)objects forKey:(NSString *)key; + +/*! + @abstract Removes all occurrences of an object from the array associated with a given key. + + @param object The object to remove. + @param key The key. + */ +- (void)removeObject:(id)object forKey:(NSString *)key; + +/*! + @abstract Removes all occurrences of the objects contained in another array from the array associated with a given key. + + @param objects The array of objects to remove. + @param key The key. + */ +- (void)removeObjectsInArray:(NSArray *)objects forKey:(NSString *)key; + +///-------------------------------------- +/// @name Increment +///-------------------------------------- + +/*! + @abstract Increments the given key by `1`. + + @param key The key. + */ +- (void)incrementKey:(NSString *)key; + +/*! + @abstract Increments the given key by a number. + + @param key The key. + @param amount The amount to increment. + */ +- (void)incrementKey:(NSString *)key byAmount:(NSNumber *)amount; + +///-------------------------------------- +/// @name Saving Objects +///-------------------------------------- + +/*! + @abstract *Synchronously* saves the `PFObject`. + + @returns Returns whether the save succeeded. + */ +- (BOOL)save PF_SWIFT_UNAVAILABLE; + +/*! + @abstract *Synchronously* saves the `PFObject` and sets an error if it occurs. + + @param error Pointer to an NSError that will be set if necessary. + + @returns Returns whether the save succeeded. + */ +- (BOOL)save:(NSError **)error; + +/*! + @abstract Saves the `PFObject` *asynchronously*. + + @returns The task that encapsulates the work being done. + */ +- (BFTask PF_GENERIC(NSNumber *)*)saveInBackground; + +/*! + @abstract Saves the `PFObject` *asynchronously* and executes the given callback block. + + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + */ +- (void)saveInBackgroundWithBlock:(PF_NULLABLE PFBooleanResultBlock)block; + +/* + @abstract Saves the `PFObject` asynchronously and calls the given callback. + + @param target The object to call selector on. + @param selector The selector to call. + It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. + `error` will be `nil` on success and set if there was an error. + `[result boolValue]` will tell you whether the call succeeded or not. + */ +- (void)saveInBackgroundWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; + +/*! + @abstract Saves this object to the server at some unspecified time in the future, + even if Parse is currently inaccessible. + + @discussion Use this when you may not have a solid network connection, and don't need to know when the save completes. + If there is some problem with the object such that it can't be saved, it will be silently discarded. If the save + completes successfully while the object is still in memory, then callback will be called. + + Objects saved with this method will be stored locally in an on-disk cache until they can be delivered to Parse. + They will be sent immediately if possible. Otherwise, they will be sent the next time a network connection is + available. Objects saved this way will persist even after the app is closed, in which case they will be sent the + next time the app is opened. If more than 10MB of data is waiting to be sent, subsequent calls to + will cause old saves to be silently discarded until the connection can be re-established, and the queued objects + can be saved. + + @returns The task that encapsulates the work being done. + */ +- (BFTask PF_GENERIC(NSNumber *)*)saveEventually PF_WATCH_UNAVAILABLE; + +/*! + @abstract Saves this object to the server at some unspecified time in the future, + even if Parse is currently inaccessible. + + @discussion Use this when you may not have a solid network connection, and don't need to know when the save completes. + If there is some problem with the object such that it can't be saved, it will be silently discarded. If the save + completes successfully while the object is still in memory, then callback will be called. + + Objects saved with this method will be stored locally in an on-disk cache until they can be delivered to Parse. + They will be sent immediately if possible. Otherwise, they will be sent the next time a network connection is + available. Objects saved this way will persist even after the app is closed, in which case they will be sent the + next time the app is opened. If more than 10MB of data is waiting to be sent, subsequent calls to + will cause old saves to be silently discarded until the connection can be re-established, and the queued objects + can be saved. + + @param callback The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + */ +- (void)saveEventually:(PF_NULLABLE PFBooleanResultBlock)callback PF_WATCH_UNAVAILABLE; + +///-------------------------------------- +/// @name Saving Many Objects +///-------------------------------------- + +/*! + @abstract Saves a collection of objects *synchronously all at once. + + @param objects The array of objects to save. + + @returns Returns whether the save succeeded. + */ ++ (BOOL)saveAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects PF_SWIFT_UNAVAILABLE; + +/*! + @abstract Saves a collection of objects *synchronously* all at once and sets an error if necessary. + + @param objects The array of objects to save. + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns whether the save succeeded. + */ ++ (BOOL)saveAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects error:(NSError **)error; + +/*! + @abstract Saves a collection of objects all at once *asynchronously*. + + @param objects The array of objects to save. + + @returns The task that encapsulates the work being done. + */ ++ (BFTask PF_GENERIC(NSNumber *)*)saveAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects; + +/*! + @abstract Saves a collection of objects all at once `asynchronously` and executes the block when done. + + @param objects The array of objects to save. + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + */ ++ (void)saveAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects + block:(PF_NULLABLE PFBooleanResultBlock)block; + +/* + @abstract Saves a collection of objects all at once *asynchronously* and calls a callback when done. + + @param objects The array of objects to save. + @param target The object to call selector on. + @param selector The selector to call. + It should have the following signature: `(void)callbackWithResult:(NSNumber *)number error:(NSError *)error`. + `error` will be `nil` on success and set if there was an error. + `[result boolValue]` will tell you whether the call succeeded or not. + */ ++ (void)saveAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects + target:(PF_NULLABLE_S id)target + selector:(PF_NULLABLE_S SEL)selector; + +///-------------------------------------- +/// @name Deleting Many Objects +///-------------------------------------- + +/*! + @abstract *Synchronously* deletes a collection of objects all at once. + + @param objects The array of objects to delete. + + @returns Returns whether the delete succeeded. + */ ++ (BOOL)deleteAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects PF_SWIFT_UNAVAILABLE; + +/*! + @abstract *Synchronously* deletes a collection of objects all at once and sets an error if necessary. + + @param objects The array of objects to delete. + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns whether the delete succeeded. + */ ++ (BOOL)deleteAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects error:(NSError **)error; + +/*! + @abstract Deletes a collection of objects all at once asynchronously. + @param objects The array of objects to delete. + @returns The task that encapsulates the work being done. + */ ++ (BFTask PF_GENERIC(NSNumber *)*)deleteAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects; + +/*! + @abstract Deletes a collection of objects all at once *asynchronously* and executes the block when done. + + @param objects The array of objects to delete. + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + */ ++ (void)deleteAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects + block:(PF_NULLABLE PFBooleanResultBlock)block; + +/* + @abstract Deletes a collection of objects all at once *asynchronously* and calls a callback when done. + + @param objects The array of objects to delete. + @param target The object to call selector on. + @param selector The selector to call. + It should have the following signature: `(void)callbackWithResult:(NSNumber *)number error:(NSError *)error`. + `error` will be `nil` on success and set if there was an error. + `[result boolValue]` will tell you whether the call succeeded or not. + */ ++ (void)deleteAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects + target:(PF_NULLABLE_S id)target + selector:(PF_NULLABLE_S SEL)selector; + +///-------------------------------------- +/// @name Getting an Object +///-------------------------------------- + +/*! + @abstract Gets whether the `PFObject` has been fetched. + + @returns `YES` if the PFObject is new or has been fetched or refreshed, otherwise `NO`. + */ +- (BOOL)isDataAvailable; + +#if PARSE_IOS_ONLY + +/*! + @abstract Refreshes the PFObject with the current data from the server. + + @deprecated Please use `-fetch` instead. + */ +- (PF_NULLABLE instancetype)refresh PF_SWIFT_UNAVAILABLE PARSE_DEPRECATED("Please use `-fetch` instead."); + +/*! + @abstract *Synchronously* refreshes the `PFObject` with the current data from the server and sets an error if it occurs. + + @param error Pointer to an `NSError` that will be set if necessary. + + @deprecated Please use `-fetch:` instead. + */ +- (PF_NULLABLE instancetype)refresh:(NSError **)error PARSE_DEPRECATED("Please use `-fetch:` instead."); + +/*! + @abstract *Asynchronously* refreshes the `PFObject` and executes the given callback block. + + @param block The block to execute. + The block should have the following argument signature: `^(PFObject *object, NSError *error)` + + @deprecated Please use `-fetchInBackgroundWithBlock:` instead. + */ +- (void)refreshInBackgroundWithBlock:(PF_NULLABLE PFObjectResultBlock)block PARSE_DEPRECATED("Please use `-fetchInBackgroundWithBlock:` instead."); + +/* + @abstract *Asynchronously* refreshes the `PFObject` and calls the given callback. + + @param target The target on which the selector will be called. + @param selector The selector to call. + It should have the following signature: `(void)callbackWithResult:(PFObject *)refreshedObject error:(NSError *)error`. + `error` will be `nil` on success and set if there was an error. + `refreshedObject` will be the `PFObject` with the refreshed data. + + @deprecated Please use `fetchInBackgroundWithTarget:selector:` instead. + */ +- (void)refreshInBackgroundWithTarget:(PF_NULLABLE_S id)target + selector:(PF_NULLABLE_S SEL)selector PARSE_DEPRECATED("Please use `fetchInBackgroundWithTarget:selector:` instead."); + +#endif + +/*! + @abstract *Synchronously* fetches the PFObject with the current data from the server. + */ +- (PF_NULLABLE instancetype)fetch PF_SWIFT_UNAVAILABLE; +/*! + @abstract *Synchronously* fetches the PFObject with the current data from the server and sets an error if it occurs. + + @param error Pointer to an `NSError` that will be set if necessary. + */ +- (PF_NULLABLE instancetype)fetch:(NSError **)error; + +/*! + @abstract *Synchronously* fetches the `PFObject` data from the server if is `NO`. + */ +- (PF_NULLABLE instancetype)fetchIfNeeded PF_SWIFT_UNAVAILABLE; + +/*! + @abstract *Synchronously* fetches the `PFObject` data from the server if is `NO`. + + @param error Pointer to an `NSError` that will be set if necessary. + */ +- (PF_NULLABLE instancetype)fetchIfNeeded:(NSError **)error; + +/*! + @abstract Fetches the `PFObject` *asynchronously* and sets it as a result for the task. + + @returns The task that encapsulates the work being done. + */ +- (BFTask PF_GENERIC(__kindof PFObject *)*)fetchInBackground; + +/*! + @abstract Fetches the PFObject *asynchronously* and executes the given callback block. + + @param block The block to execute. + It should have the following argument signature: `^(PFObject *object, NSError *error)`. + */ +- (void)fetchInBackgroundWithBlock:(PF_NULLABLE PFObjectResultBlock)block; + +/* + @abstract Fetches the `PFObject *asynchronously* and calls the given callback. + + @param target The target on which the selector will be called. + @param selector The selector to call. + It should have the following signature: `(void)callbackWithResult:(PFObject *)refreshedObject error:(NSError *)error`. + `error` will be `nil` on success and set if there was an error. + `refreshedObject` will be the `PFObject` with the refreshed data. + */ +- (void)fetchInBackgroundWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; + +/*! + @abstract Fetches the `PFObject` data *asynchronously* if isDataAvailable is `NO`, + then sets it as a result for the task. + + @returns The task that encapsulates the work being done. + */ +- (BFTask PF_GENERIC(__kindof PFObject *)*)fetchIfNeededInBackground; + +/*! + @abstract Fetches the `PFObject` data *asynchronously* if is `NO`, then calls the callback block. + + @param block The block to execute. + It should have the following argument signature: `^(PFObject *object, NSError *error)`. + */ +- (void)fetchIfNeededInBackgroundWithBlock:(PF_NULLABLE PFObjectResultBlock)block; + +/* + @abstract Fetches the PFObject's data asynchronously if isDataAvailable is false, then calls the callback. + + @param target The target on which the selector will be called. + @param selector The selector to call. + It should have the following signature: `(void)callbackWithResult:(PFObject *)fetchedObject error:(NSError *)error`. + `error` will be `nil` on success and set if there was an error. + `refreshedObject` will be the `PFObject` with the refreshed data. + */ +- (void)fetchIfNeededInBackgroundWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; + +///-------------------------------------- +/// @name Getting Many Objects +///-------------------------------------- + +/*! + @abstract *Synchronously* fetches all of the `PFObject` objects with the current data from the server. + + @param objects The list of objects to fetch. + */ ++ (PF_NULLABLE NSArray PF_GENERIC(__kindof PFObject *)*)fetchAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects PF_SWIFT_UNAVAILABLE; + +/*! + @abstract *Synchronously* fetches all of the `PFObject` objects with the current data from the server + and sets an error if it occurs. + + @param objects The list of objects to fetch. + @param error Pointer to an `NSError` that will be set if necessary. + */ ++ (PF_NULLABLE NSArray PF_GENERIC(__kindof PFObject *)*)fetchAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects + error:(NSError **)error; + +/*! + @abstract *Synchronously* fetches all of the `PFObject` objects with the current data from the server. + @param objects The list of objects to fetch. + */ ++ (PF_NULLABLE NSArray PF_GENERIC(__kindof PFObject *)*)fetchAllIfNeeded:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects PF_SWIFT_UNAVAILABLE; + +/*! + @abstract *Synchronously* fetches all of the `PFObject` objects with the current data from the server + and sets an error if it occurs. + + @param objects The list of objects to fetch. + @param error Pointer to an `NSError` that will be set if necessary. + */ ++ (PF_NULLABLE NSArray PF_GENERIC(__kindof PFObject *)*)fetchAllIfNeeded:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects + error:(NSError **)error; + +/*! + @abstract Fetches all of the `PFObject` objects with the current data from the server *asynchronously*. + + @param objects The list of objects to fetch. + + @returns The task that encapsulates the work being done. + */ ++ (BFTask PF_GENERIC(NSArray<__kindof PFObject *> *)*)fetchAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects; + +/*! + @abstract Fetches all of the `PFObject` objects with the current data from the server *asynchronously* + and calls the given block. + + @param objects The list of objects to fetch. + @param block The block to execute. + It should have the following argument signature: `^(NSArray *objects, NSError *error)`. + */ ++ (void)fetchAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects + block:(PF_NULLABLE PFArrayResultBlock)block; + +/* + @abstract Fetches all of the `PFObject` objects with the current data from the server *asynchronously* + and calls the given callback. + + @param objects The list of objects to fetch. + @param target The target on which the selector will be called. + @param selector The selector to call. + It should have the following signature: `(void)callbackWithResult:(NSArray *)fetchedObjects error:(NSError *)error`. + `error` will be `nil` on success and set if there was an error. + `fetchedObjects` will the array of `PFObject` objects that were fetched. + */ ++ (void)fetchAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects + target:(PF_NULLABLE_S id)target + selector:(PF_NULLABLE_S SEL)selector; + +/*! + @abstract Fetches all of the `PFObject` objects with the current data from the server *asynchronously*. + + @param objects The list of objects to fetch. + + @returns The task that encapsulates the work being done. + */ ++ (BFTask PF_GENERIC(NSArray<__kindof PFObject *> *)*)fetchAllIfNeededInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects; + +/*! + @abstract Fetches all of the PFObjects with the current data from the server *asynchronously* + and calls the given block. + + @param objects The list of objects to fetch. + @param block The block to execute. + It should have the following argument signature: `^(NSArray *objects, NSError *error)`. + */ ++ (void)fetchAllIfNeededInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects + block:(PF_NULLABLE PFArrayResultBlock)block; + +/* + @abstract Fetches all of the PFObjects with the current data from the server *asynchronously* + and calls the given callback. + + @param objects The list of objects to fetch. + @param target The target on which the selector will be called. + @param selector The selector to call. + It should have the following signature: `(void)callbackWithResult:(NSArray *)fetchedObjects error:(NSError *)error`. + `error` will be `nil` on success and set if there was an error. + `fetchedObjects` will the array of `PFObject` objects that were fetched. + */ ++ (void)fetchAllIfNeededInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects + target:(PF_NULLABLE_S id)target + selector:(PF_NULLABLE_S SEL)selector; + +///-------------------------------------- +/// @name Fetching From Local Datastore +///-------------------------------------- + +/*! + @abstract *Synchronously* loads data from the local datastore into this object, + if it has not been fetched from the server already. + */ +- (PF_NULLABLE instancetype)fetchFromLocalDatastore PF_SWIFT_UNAVAILABLE; + +/*! + @abstract *Synchronously* loads data from the local datastore into this object, if it has not been fetched + from the server already. + + @discussion If the object is not stored in the local datastore, this `error` will be set to + return kPFErrorCacheMiss. + + @param error Pointer to an `NSError` that will be set if necessary. + */ +- (PF_NULLABLE instancetype)fetchFromLocalDatastore:(NSError **)error; + +/*! + @abstract *Asynchronously* loads data from the local datastore into this object, + if it has not been fetched from the server already. + + @returns The task that encapsulates the work being done. + */ +- (BFTask PF_GENERIC(__kindof PFObject *)*)fetchFromLocalDatastoreInBackground; + +/*! + @abstract *Asynchronously* loads data from the local datastore into this object, + if it has not been fetched from the server already. + + @param block The block to execute. + It should have the following argument signature: `^(PFObject *object, NSError *error)`. + */ +- (void)fetchFromLocalDatastoreInBackgroundWithBlock:(PF_NULLABLE PFObjectResultBlock)block; + +///-------------------------------------- +/// @name Deleting an Object +///-------------------------------------- + +/*! + @abstract *Synchronously* deletes the `PFObject`. + + @returns Returns whether the delete succeeded. + */ +- (BOOL)delete PF_SWIFT_UNAVAILABLE; + +/*! + @abstract *Synchronously* deletes the `PFObject` and sets an error if it occurs. + + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns whether the delete succeeded. + */ +- (BOOL)delete:(NSError **)error; + +/*! + @abstract Deletes the `PFObject` *asynchronously*. + + @returns The task that encapsulates the work being done. + */ +- (BFTask PF_GENERIC(NSNumber *)*)deleteInBackground; + +/*! + @abstract Deletes the `PFObject` *asynchronously* and executes the given callback block. + + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + */ +- (void)deleteInBackgroundWithBlock:(PF_NULLABLE PFBooleanResultBlock)block; + +/* + @abstract Deletes the `PFObject` *asynchronously* and calls the given callback. + + @param target The object to call selector on. + @param selector The selector to call. + It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. + `error` will be `nil` on success and set if there was an error. + `[result boolValue]` will tell you whether the call succeeded or not. + */ +- (void)deleteInBackgroundWithTarget:(PF_NULLABLE_S id)target + selector:(PF_NULLABLE_S SEL)selector; + +/*! + @abstract Deletes this object from the server at some unspecified time in the future, + even if Parse is currently inaccessible. + + @discussion Use this when you may not have a solid network connection, + and don't need to know when the delete completes. If there is some problem with the object + such that it can't be deleted, the request will be silently discarded. + + Delete instructions made with this method will be stored locally in an on-disk cache until they can be transmitted + to Parse. They will be sent immediately if possible. Otherwise, they will be sent the next time a network connection + is available. Delete requests will persist even after the app is closed, in which case they will be sent the + next time the app is opened. If more than 10MB of or commands are waiting + to be sent, subsequent calls to or will cause old requests to be silently discarded + until the connection can be re-established, and the queued requests can go through. + + @returns The task that encapsulates the work being done. + */ +- (BFTask PF_GENERIC(NSNumber *)*)deleteEventually PF_WATCH_UNAVAILABLE; + +///-------------------------------------- +/// @name Dirtiness +///-------------------------------------- + +/*! + @abstract Gets whether any key-value pair in this object (or its children) + has been added/updated/removed and not saved yet. + + @returns Returns whether this object has been altered and not saved yet. + */ +- (BOOL)isDirty; + +/*! + @abstract Get whether a value associated with a key has been added/updated/removed and not saved yet. + + @param key The key to check for + + @returns Returns whether this key has been altered and not saved yet. + */ +- (BOOL)isDirtyForKey:(NSString *)key; + +///-------------------------------------- +/// @name Pinning +///-------------------------------------- + +/*! + @abstract *Synchronously* stores the object and every object it points to in the local datastore, recursively, + using a default pin name: `PFObjectDefaultPin`. + + @discussion If those other objects have not been fetched from Parse, they will not be stored. However, + if they have changed data, all the changes will be retained. To get the objects back later, you can + use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with + <[PFObject objectWithoutDataWithClassName:objectId:]> and then call on it. + + @returns Returns whether the pin succeeded. + + @see unpin: + @see PFObjectDefaultPin + */ +- (BOOL)pin PF_SWIFT_UNAVAILABLE; + +/*! + @abstract *Synchronously* stores the object and every object it points to in the local datastore, recursively, + using a default pin name: `PFObjectDefaultPin`. + + @discussion If those other objects have not been fetched from Parse, they will not be stored. However, + if they have changed data, all the changes will be retained. To get the objects back later, you can + use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with + <[PFObject objectWithoutDataWithClassName:objectId:]> and then call on it. + + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns whether the pin succeeded. + + @see unpin: + @see PFObjectDefaultPin + */ +- (BOOL)pin:(NSError **)error; + +/*! + @abstract *Synchronously* stores the object and every object it points to in the local datastore, recursively. + + @discussion If those other objects have not been fetched from Parse, they will not be stored. However, + if they have changed data, all the changes will be retained. To get the objects back later, you can + use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with + <[PFObject objectWithoutDataWithClassName:objectId:]> and then call on it. + + @param name The name of the pin. + + @returns Returns whether the pin succeeded. + + @see unpinWithName: + */ +- (BOOL)pinWithName:(NSString *)name PF_SWIFT_UNAVAILABLE; + +/*! + @abstract *Synchronously* stores the object and every object it points to in the local datastore, recursively. + + @discussion If those other objects have not been fetched from Parse, they will not be stored. However, + if they have changed data, all the changes will be retained. To get the objects back later, you can + use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with + <[PFObject objectWithoutDataWithClassName:objectId:]> and then call on it. + + @param name The name of the pin. + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns whether the pin succeeded. + + @see unpinWithName: + */ +- (BOOL)pinWithName:(NSString *)name + error:(NSError **)error; + +/*! + @abstract *Asynchronously* stores the object and every object it points to in the local datastore, recursively, + using a default pin name: `PFObjectDefaultPin`. + + @discussion If those other objects have not been fetched from Parse, they will not be stored. However, + if they have changed data, all the changes will be retained. To get the objects back later, you can + use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with + <[PFObject objectWithoutDataWithClassName:objectId:]> and then call on it. + + @returns The task that encapsulates the work being done. + + @see unpinInBackground + @see PFObjectDefaultPin + */ +- (BFTask PF_GENERIC(NSNumber *)*)pinInBackground; + +/*! + @abstract *Asynchronously* stores the object and every object it points to in the local datastore, recursively, + using a default pin name: `PFObjectDefaultPin`. + + @discussion If those other objects have not been fetched from Parse, they will not be stored. However, + if they have changed data, all the changes will be retained. To get the objects back later, you can + use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with + <[PFObject objectWithoutDataWithClassName:objectId:]> and then call on it. + + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + + @see unpinInBackgroundWithBlock: + @see PFObjectDefaultPin + */ +- (void)pinInBackgroundWithBlock:(PF_NULLABLE PFBooleanResultBlock)block; + +/*! + @abstract *Asynchronously* stores the object and every object it points to in the local datastore, recursively. + + @discussion If those other objects have not been fetched from Parse, they will not be stored. However, + if they have changed data, all the changes will be retained. To get the objects back later, you can + use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with + <[PFObject objectWithoutDataWithClassName:objectId:]> and then call on it. + + @param name The name of the pin. + + @returns The task that encapsulates the work being done. + + @see unpinInBackgroundWithName: + */ +- (BFTask PF_GENERIC(NSNumber *)*)pinInBackgroundWithName:(NSString *)name; + +/*! + @abstract *Asynchronously* stores the object and every object it points to in the local datastore, recursively. + + @discussion If those other objects have not been fetched from Parse, they will not be stored. However, + if they have changed data, all the changes will be retained. To get the objects back later, you can + use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with + <[PFObject objectWithoutDataWithClassName:objectId:]> and then call on it. + + @param name The name of the pin. + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + + @see unpinInBackgroundWithName:block: + */ +- (void)pinInBackgroundWithName:(NSString *)name block:(PF_NULLABLE PFBooleanResultBlock)block; + +///-------------------------------------- +/// @name Pinning Many Objects +///-------------------------------------- + +/*! + @abstract *Synchronously* stores the objects and every object they point to in the local datastore, recursively, + using a default pin name: `PFObjectDefaultPin`. + + @discussion If those other objects have not been fetched from Parse, they will not be stored. However, + if they have changed data, all the changes will be retained. To get the objects back later, you can + use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with + `[PFObject objectWithoutDataWithClassName:objectId:]` and then call `fetchFromLocalDatastore:` on it. + + @param objects The objects to be pinned. + + @returns Returns whether the pin succeeded. + + @see unpinAll: + @see PFObjectDefaultPin + */ ++ (BOOL)pinAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects PF_SWIFT_UNAVAILABLE; + +/*! + @abstract *Synchronously* stores the objects and every object they point to in the local datastore, recursively, + using a default pin name: `PFObjectDefaultPin`. + + @discussion If those other objects have not been fetched from Parse, they will not be stored. However, + if they have changed data, all the changes will be retained. To get the objects back later, you can + use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with + `[PFObject objectWithoutDataWithClassName:objectId:]` and then call `fetchFromLocalDatastore:` on it. + + @param objects The objects to be pinned. + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns whether the pin succeeded. + + @see unpinAll:error: + @see PFObjectDefaultPin + */ ++ (BOOL)pinAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects error:(NSError **)error; + +/*! + @abstract *Synchronously* stores the objects and every object they point to in the local datastore, recursively. + + @discussion If those other objects have not been fetched from Parse, they will not be stored. However, + if they have changed data, all the changes will be retained. To get the objects back later, you can + use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with + `[PFObject objectWithoutDataWithClassName:objectId:]` and then call `fetchFromLocalDatastore:` on it. + + @param objects The objects to be pinned. + @param name The name of the pin. + + @returns Returns whether the pin succeeded. + + @see unpinAll:withName: + */ ++ (BOOL)pinAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects withName:(NSString *)name PF_SWIFT_UNAVAILABLE; + +/*! + @abstract *Synchronously* stores the objects and every object they point to in the local datastore, recursively. + + @discussion If those other objects have not been fetched from Parse, they will not be stored. However, + if they have changed data, all the changes will be retained. To get the objects back later, you can + use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with + `[PFObject objectWithoutDataWithClassName:objectId:]` and then call `fetchFromLocalDatastore:` on it. + + @param objects The objects to be pinned. + @param name The name of the pin. + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns whether the pin succeeded. + + @see unpinAll:withName:error: + */ ++ (BOOL)pinAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects + withName:(NSString *)name + error:(NSError **)error; + +/*! + @abstract *Asynchronously* stores the objects and every object they point to in the local datastore, recursively, + using a default pin name: `PFObjectDefaultPin`. + + @discussion If those other objects have not been fetched from Parse, they will not be stored. However, + if they have changed data, all the changes will be retained. To get the objects back later, you can + use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with + `[PFObject objectWithoutDataWithClassName:objectId:]` and then call `fetchFromLocalDatastore:` on it. + + @param objects The objects to be pinned. + + @returns The task that encapsulates the work being done. + + @see unpinAllInBackground: + @see PFObjectDefaultPin + */ ++ (BFTask PF_GENERIC(NSNumber *)*)pinAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects; + +/*! + @abstract *Asynchronously* stores the objects and every object they point to in the local datastore, recursively, + using a default pin name: `PFObjectDefaultPin`. + + @discussion If those other objects have not been fetched from Parse, they will not be stored. However, + if they have changed data, all the changes will be retained. To get the objects back later, you can + use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with + `[PFObject objectWithoutDataWithClassName:objectId:]` and then call `fetchFromLocalDatastore:` on it. + + @param objects The objects to be pinned. + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + + @see unpinAllInBackground:block: + @see PFObjectDefaultPin + */ ++ (void)pinAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects block:(PF_NULLABLE PFBooleanResultBlock)block; + +/*! + @abstract *Asynchronously* stores the objects and every object they point to in the local datastore, recursively. + + @discussion If those other objects have not been fetched from Parse, they will not be stored. However, + if they have changed data, all the changes will be retained. To get the objects back later, you can + use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with + `[PFObject objectWithoutDataWithClassName:objectId:]` and then call `fetchFromLocalDatastore:` on it. + + @param objects The objects to be pinned. + @param name The name of the pin. + + @returns The task that encapsulates the work being done. + + @see unpinAllInBackground:withName: + */ ++ (BFTask PF_GENERIC(NSNumber *)*)pinAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects withName:(NSString *)name; + +/*! + @abstract *Asynchronously* stores the objects and every object they point to in the local datastore, recursively. + + @discussion If those other objects have not been fetched from Parse, they will not be stored. However, + if they have changed data, all the changes will be retained. To get the objects back later, you can + use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with + `[PFObject objectWithoutDataWithClassName:objectId:]` and then call `fetchFromLocalDatastore:` on it. + + @param objects The objects to be pinned. + @param name The name of the pin. + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + + @see unpinAllInBackground:withName:block: + */ ++ (void)pinAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects + withName:(NSString *)name + block:(PF_NULLABLE PFBooleanResultBlock)block; + +///-------------------------------------- +/// @name Unpinning +///-------------------------------------- + +/*! + @abstract *Synchronously* removes the object and every object it points to in the local datastore, recursively, + using a default pin name: `PFObjectDefaultPin`. + + @returns Returns whether the unpin succeeded. + + @see pin: + @see PFObjectDefaultPin + */ +- (BOOL)unpin PF_SWIFT_UNAVAILABLE; + +/*! + @abstract *Synchronously* removes the object and every object it points to in the local datastore, recursively, + using a default pin name: `PFObjectDefaultPin`. + + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns whether the unpin succeeded. + + @see pin: + @see PFObjectDefaultPin + */ +- (BOOL)unpin:(NSError **)error; + +/*! + @abstract *Synchronously* removes the object and every object it points to in the local datastore, recursively. + + @param name The name of the pin. + + @returns Returns whether the unpin succeeded. + + @see pinWithName: + */ +- (BOOL)unpinWithName:(NSString *)name PF_SWIFT_UNAVAILABLE; + +/*! + @abstract *Synchronously* removes the object and every object it points to in the local datastore, recursively. + + @param name The name of the pin. + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns whether the unpin succeeded. + + @see pinWithName:error: + */ +- (BOOL)unpinWithName:(NSString *)name + error:(NSError **)error; + +/*! + @abstract *Asynchronously* removes the object and every object it points to in the local datastore, recursively, + using a default pin name: `PFObjectDefaultPin`. + + @returns The task that encapsulates the work being done. + + @see pinInBackground + @see PFObjectDefaultPin + */ +- (BFTask PF_GENERIC(NSNumber *)*)unpinInBackground; + +/*! + @abstract *Asynchronously* removes the object and every object it points to in the local datastore, recursively, + using a default pin name: `PFObjectDefaultPin`. + + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + + @see pinInBackgroundWithBlock: + @see PFObjectDefaultPin + */ +- (void)unpinInBackgroundWithBlock:(PF_NULLABLE PFBooleanResultBlock)block; + +/*! + @abstract *Asynchronously* removes the object and every object it points to in the local datastore, recursively. + + @param name The name of the pin. + + @returns The task that encapsulates the work being done. + + @see pinInBackgroundWithName: + */ +- (BFTask PF_GENERIC(NSNumber *)*)unpinInBackgroundWithName:(NSString *)name; + +/*! + @abstract *Asynchronously* removes the object and every object it points to in the local datastore, recursively. + + @param name The name of the pin. + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + + @see pinInBackgroundWithName:block: + */ +- (void)unpinInBackgroundWithName:(NSString *)name block:(PF_NULLABLE PFBooleanResultBlock)block; + +///-------------------------------------- +/// @name Unpinning Many Objects +///-------------------------------------- + +/*! + @abstract *Synchronously* removes all objects in the local datastore + using a default pin name: `PFObjectDefaultPin`. + + @returns Returns whether the unpin succeeded. + + @see PFObjectDefaultPin + */ ++ (BOOL)unpinAllObjects PF_SWIFT_UNAVAILABLE; + +/*! + @abstract *Synchronously* removes all objects in the local datastore + using a default pin name: `PFObjectDefaultPin`. + + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns whether the unpin succeeded. + + @see PFObjectDefaultPin + */ ++ (BOOL)unpinAllObjects:(NSError **)error; + +/*! + @abstract *Synchronously* removes all objects with the specified pin name. + + @param name The name of the pin. + + @returns Returns whether the unpin succeeded. + */ ++ (BOOL)unpinAllObjectsWithName:(NSString *)name PF_SWIFT_UNAVAILABLE; + +/*! + @abstract *Synchronously* removes all objects with the specified pin name. + + @param name The name of the pin. + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns whether the unpin succeeded. + */ ++ (BOOL)unpinAllObjectsWithName:(NSString *)name + error:(NSError **)error; + +/*! + @abstract *Asynchronously* removes all objects in the local datastore + using a default pin name: `PFObjectDefaultPin`. + + @returns The task that encapsulates the work being done. + + @see PFObjectDefaultPin + */ ++ (BFTask PF_GENERIC(NSNumber *)*)unpinAllObjectsInBackground; + +/*! + @abstract *Asynchronously* removes all objects in the local datastore + using a default pin name: `PFObjectDefaultPin`. + + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + + @see PFObjectDefaultPin + */ ++ (void)unpinAllObjectsInBackgroundWithBlock:(PF_NULLABLE PFBooleanResultBlock)block; + +/*! + @abstract *Asynchronously* removes all objects with the specified pin name. + + @param name The name of the pin. + + @returns The task that encapsulates the work being done. + */ ++ (BFTask PF_GENERIC(NSNumber *)*)unpinAllObjectsInBackgroundWithName:(NSString *)name; + +/*! + @abstract *Asynchronously* removes all objects with the specified pin name. + + @param name The name of the pin. + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + */ ++ (void)unpinAllObjectsInBackgroundWithName:(NSString *)name block:(PF_NULLABLE PFBooleanResultBlock)block; + +/*! + @abstract *Synchronously* removes the objects and every object they point to in the local datastore, recursively, + using a default pin name: `PFObjectDefaultPin`. + + @param objects The objects. + + @returns Returns whether the unpin succeeded. + + @see pinAll: + @see PFObjectDefaultPin + */ ++ (BOOL)unpinAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects PF_SWIFT_UNAVAILABLE; + +/*! + @abstract *Synchronously* removes the objects and every object they point to in the local datastore, recursively, + using a default pin name: `PFObjectDefaultPin`. + + @param objects The objects. + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns whether the unpin succeeded. + + @see pinAll:error: + @see PFObjectDefaultPin + */ ++ (BOOL)unpinAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects error:(NSError **)error; + +/*! + @abstract *Synchronously* removes the objects and every object they point to in the local datastore, recursively. + + @param objects The objects. + @param name The name of the pin. + + @returns Returns whether the unpin succeeded. + + @see pinAll:withName: + */ ++ (BOOL)unpinAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects withName:(NSString *)name PF_SWIFT_UNAVAILABLE; + +/*! + @abstract *Synchronously* removes the objects and every object they point to in the local datastore, recursively. + + @param objects The objects. + @param name The name of the pin. + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns whether the unpin succeeded. + + @see pinAll:withName:error: + */ ++ (BOOL)unpinAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects + withName:(NSString *)name + error:(NSError **)error; + +/*! + @abstract *Asynchronously* removes the objects and every object they point to in the local datastore, recursively, + using a default pin name: `PFObjectDefaultPin`. + + @param objects The objects. + + @returns The task that encapsulates the work being done. + + @see pinAllInBackground: + @see PFObjectDefaultPin + */ ++ (BFTask PF_GENERIC(NSNumber *)*)unpinAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects; + +/*! + @abstract *Asynchronously* removes the objects and every object they point to in the local datastore, recursively, + using a default pin name: `PFObjectDefaultPin`. + + @param objects The objects. + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + + @see pinAllInBackground:block: + @see PFObjectDefaultPin + */ ++ (void)unpinAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects block:(PF_NULLABLE PFBooleanResultBlock)block; + +/*! + @abstract *Asynchronously* removes the objects and every object they point to in the local datastore, recursively. + + @param objects The objects. + @param name The name of the pin. + + @returns The task that encapsulates the work being done. + + @see pinAllInBackground:withName: + */ ++ (BFTask PF_GENERIC(NSNumber *)*)unpinAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects withName:(NSString *)name; + +/*! + @abstract *Asynchronously* removes the objects and every object they point to in the local datastore, recursively. + + @param objects The objects. + @param name The name of the pin. + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + + @see pinAllInBackground:withName:block: + */ ++ (void)unpinAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects + withName:(NSString *)name + block:(PF_NULLABLE PFBooleanResultBlock)block; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/PFObject.m b/BreakingBad/Pods/Parse/Parse/PFObject.m new file mode 100644 index 0000000..b403694 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFObject.m @@ -0,0 +1,2770 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFObject.h" +#import "PFObject+Subclass.h" +#import "PFObjectSubclassingController.h" + +#import +#import +#import + +#import + +#import "BFTask+Private.h" +#import "PFACLPrivate.h" +#import "PFCommandResult.h" +#import "PFCommandRunning.h" +#import "PFConstants.h" +#import "PFCoreManager.h" +#import "PFCurrentUserController.h" +#import "PFDateFormatter.h" +#import "PFDecoder.h" +#import "PFEncoder.h" +#import "PFErrorUtilities.h" +#import "PFEventuallyQueue_Private.h" +#import "PFFileManager.h" +#import "PFFile_Private.h" +#import "PFJSONSerialization.h" +#import "PFLogging.h" +#import "PFMacros.h" +#import "PFMultiProcessFileLockController.h" +#import "PFMutableObjectState.h" +#import "PFObjectBatchController.h" +#import "PFObjectConstants.h" +#import "PFObjectController.h" +#import "PFObjectEstimatedData.h" +#import "PFObjectFileCodingLogic.h" +#import "PFObjectFilePersistenceController.h" +#import "PFObjectLocalIdStore.h" +#import "PFObjectUtilities.h" +#import "PFOfflineStore.h" +#import "PFOperationSet.h" +#import "PFPin.h" +#import "PFPinningObjectStore.h" +#import "PFQueryPrivate.h" +#import "PFRESTObjectBatchCommand.h" +#import "PFRESTObjectCommand.h" +#import "PFRelation.h" +#import "PFRelationPrivate.h" +#import "PFSubclassing.h" +#import "PFTaskQueue.h" +#import "ParseInternal.h" +#import "Parse_Private.h" + +/*! + Checks if an object can be used as a value for PFObject. + */ +static void PFObjectAssertValueIsKindOfValidClass(id object) { + static NSArray *classes; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + classes = @[ [NSDictionary class], [NSArray class], + [NSString class], [NSNumber class], [NSNull class], [NSDate class], [NSData class], + [PFObject class], [PFFile class], [PFACL class], [PFGeoPoint class] ]; + }); + + for (Class class in classes) { + if ([object isKindOfClass:class]) { + return; + } + } + + PFParameterAssert(NO, @"PFObject values may not have class: %@", [object class]); +} + +/*! + Checks if a class is a of container kind to be used as a value for PFObject. + */ +static BOOL PFObjectValueIsKindOfMutableContainerClass(id object) { + static NSArray *classes; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + classes = @[ [NSDictionary class], [NSArray class], [PFACL class], [PFGeoPoint class] ]; + }); + + for (Class class in classes) { + if ([object isKindOfClass:class]) { + return YES; + } + } + + return NO; +} + +@interface PFObject () { + // A lock for accessing any of the internal state of this object. + // Guards basically all of the variables below. + NSObject *lock; + + PFObjectState *_pfinternal_state; + + PFObjectEstimatedData *_estimatedData; + NSMutableSet *_availableKeys; // TODO: (nlutsenko) Maybe decouple this further. + + // TODO (grantland): Derive this off the EventuallyPins as opposed to +/- count. + int _deletingEventually; + + // A dictionary that maps id (objects) => PFJSONCache + NSMutableDictionary *hashedObjectsCache; + + NSString *localId; + + // This queue is used to guarantee the order of *Eventually commands + // and offload all the work to the background thread + PFTaskQueue *_eventuallyTaskQueue; +} + +@property (nonatomic, strong, readwrite) NSString *localId; + +@property (nonatomic, strong, readwrite) PFTaskQueue *taskQueue; + ++ (void)assertSubclassIsRegistered:(Class)subclass; + +@end + +@implementation PFObject (Private) + ++ (void)unregisterSubclass:(Class)subclass { + [[self subclassingController] unregisterSubclass:subclass]; +} + +/*! + Returns the object that should be used to synchronize all internal data access. + */ +- (NSObject *)lock { + return lock; +} + +/*! + Blocks until all outstanding operations have completed. + */ +- (void)waitUntilFinished { + [[self.taskQueue enqueue:^BFTask *(BFTask *toAwait) { + return toAwait; + }] waitForResult:nil]; +} + +/*! + For operations that need to be put into multiple objects queues, like saveAll + and fetchAll, this method does the nasty work. + @param taskStart - A block that is called when all of the objects are ready. + It can return a promise that all of the queues will then wait on. + @param objects - The objects that this operation affects. + @returns - Returns a promise that is fulfilled once the promise returned by the + block is fulfilled. + */ ++ (BFTask *)_enqueue:(BFTask *(^)(BFTask *toAwait))taskStart forObjects:(NSArray *)objects { + // The task that will be complete when all of the child queues indicate they're ready to start. + BFTaskCompletionSource *readyToStart = [BFTaskCompletionSource taskCompletionSource]; + + // First, we need to lock the mutex for the queue for every object. We have to hold this + // from at least when taskStart() is called to when obj.taskQueue enqueue is called, so + // that saves actually get executed in the order they were setup by taskStart(). + // The locks have to be sorted so that we always acquire them in the same order. + // Otherwise, there's some risk of deadlock. + NSMutableArray *mutexes = [NSMutableArray array]; + for (PFObject *obj in objects) { + [mutexes addObject:obj.taskQueue.mutex]; + } + [mutexes sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { + void *lock1 = (__bridge void *)obj1; + void *lock2 = (__bridge void *)obj2; + return lock1 - lock2; + }]; + for (NSObject *lock in mutexes) { + objc_sync_enter(lock); + } + + @try { + // The task produced by taskStart. By running this immediately, we allow everything prior + // to toAwait to run before waiting for all of the queues on all of the objects. + BFTask *fullTask = taskStart(readyToStart.task); + + // Add fullTask to each of the objects' queues. + NSMutableArray *childTasks = [NSMutableArray array]; + for (PFObject *obj in objects) { + [obj.taskQueue enqueue:^BFTask *(BFTask *toAwait) { + [childTasks addObject:toAwait]; + return fullTask; + }]; + } + + // When all of the objects' queues are ready, signal fullTask that it's ready to go on. + [[BFTask taskForCompletionOfAllTasks:childTasks] continueWithBlock:^id(BFTask *task) { + readyToStart.result = nil; + return nil; + }]; + + return fullTask; + + } @finally { + for (NSObject *lock in mutexes) { + objc_sync_exit(lock); + } + } +} + +///-------------------------------------- +#pragma mark - Children helpers +///-------------------------------------- + +/*! + Finds all of the objects that are reachable from child, including child itself, + and adds them to the given mutable array. It traverses arrays and json objects. + @param node An kind object to search for children. + @param dirtyChildren The array to collect the result into. + @param seen The set of all objects that have already been seen. + @param seenNew The set of new objects that have already been seen since the + last existing object. + */ ++ (void)collectDirtyChildren:(id)node + children:(NSMutableSet *)dirtyChildren + files:(NSMutableSet *)dirtyFiles + seen:(NSSet *)seen + seenNew:(NSSet *)seenNew + currentUser:(PFUser *)currentUser { + if ([node isKindOfClass:[NSArray class]]) { + for (id elem in node) { + @autoreleasepool { + [self collectDirtyChildren:elem + children:dirtyChildren + files:dirtyFiles + seen:seen + seenNew:seenNew + currentUser:currentUser]; + } + } + } else if ([node isKindOfClass:[NSDictionary class]]) { + [node enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + [self collectDirtyChildren:obj + children:dirtyChildren + files:dirtyFiles + seen:seen + seenNew:seenNew + currentUser:currentUser]; + }]; + } else if ([node isKindOfClass:[PFACL class]]) { + PFACL *acl = (PFACL *)node; + if ([acl hasUnresolvedUser]) { + [self collectDirtyChildren:currentUser + children:dirtyChildren + files:dirtyFiles + seen:seen + seenNew:seenNew + currentUser:currentUser]; + } + + } else if ([node isKindOfClass:[PFObject class]]) { + PFObject *object = (PFObject *)node; + NSDictionary *toSearch = nil; + + @synchronized ([object lock]) { + // Check for cycles of new objects. Any such cycle means it will be + // impossible to save this collection of objects, so throw an exception. + if (object.objectId) { + seenNew = [NSSet set]; + } else { + if ([seenNew containsObject:object]) { + [NSException raise:NSInternalInconsistencyException + format:@"Found a circular dependency when saving."]; + } + seenNew = [seenNew setByAddingObject:object]; + } + + // Check for cycles of any object. If this occurs, then there's no + // problem, but we shouldn't recurse any deeper, because it would be + // an infinite recursion. + if ([seen containsObject:object]) { + return; + } + seen = [seen setByAddingObject:object]; + + // Recurse into this object's children looking for dirty children. + // We only need to look at the child object's current estimated data, + // because that's the only data that might need to be saved now. + toSearch = [object->_estimatedData.dictionaryRepresentation copy]; + } + + [self collectDirtyChildren:toSearch + children:dirtyChildren + files:dirtyFiles + seen:seen + seenNew:seenNew + currentUser:currentUser]; + + if ([object isDirty:NO]) { + [dirtyChildren addObject:object]; + } + } else if ([node isKindOfClass:[PFFile class]]) { + PFFile *file = (PFFile *)node; + if (!file.url) { + [dirtyFiles addObject:node]; + } + } +} + +// Helper version of collectDirtyChildren:children:seen:seenNew so that callers +// don't have to add the internally used parameters. ++ (void)collectDirtyChildren:(id)child + children:(NSMutableSet *)dirtyChildren + files:(NSMutableSet *)dirtyFiles + currentUser:(PFUser *)currentUser { + [self collectDirtyChildren:child + children:dirtyChildren + files:dirtyFiles + seen:[NSSet set] + seenNew:[NSSet set] + currentUser:currentUser]; +} + +// Returns YES if the given object can be serialized for saving as a value +// that is pointed to by a PFObject. +// @param value The object we want to serialize as a value. +// @param saved The set of all objects we can assume will be saved before this one. +// @param error The reason why it can't be serialized. ++ (BOOL)canBeSerializedAsValue:(id)value + afterSaving:(NSMutableArray *)saved + error:(NSError **)error { + if ([value isKindOfClass:[PFObject class]]) { + PFObject *object = (PFObject *)value; + if (!object.objectId && ![saved containsObject:object]) { + if (error) { + *error = [PFErrorUtilities errorWithCode:kPFErrorInvalidPointer + message:@"Pointer to an unsaved object."]; + } + return NO; + } + + } else if ([value isKindOfClass:[NSDictionary class]]) { + __block BOOL retValue = YES; + [value enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + if (![[self class] canBeSerializedAsValue:obj + afterSaving:saved + error:error]) { + retValue = NO; + *stop = YES; + } + }]; + return retValue; + } else if ([value isKindOfClass:[NSArray class]]) { + NSArray *array = (NSArray *)value; + for (NSString *item in array) { + if (![[self class] canBeSerializedAsValue:item + afterSaving:saved + error:error]) { + return NO; + } + } + } + + return YES; +} + +// Returns YES if this object can be serialized for saving. +// @param saved A set of objects that we can assume will have been saved. +// @param error The reason why it can't be serialized. +- (BOOL)canBeSerializedAfterSaving:(NSMutableArray *)saved withCurrentUser:(PFUser *)user error:(NSError **)error { + @synchronized (lock) { + // This method is only used for batching sets of objects for saveAll + // and when saving children automatically. Since it's only used to + // determine whether or not save should be called on them, it only + // needs to examine their current values, so we use estimatedData. + if (![[self class] canBeSerializedAsValue:_estimatedData.dictionaryRepresentation + afterSaving:saved + error:error]) { + return NO; + } + + if ([self isDataAvailableForKey:@"ACL"] && + [[self ACLWithoutCopying] hasUnresolvedUser] && + ![saved containsObject:user]) { + if (error) { + *error = [PFErrorUtilities errorWithCode:kPFErrorInvalidACL + message:@"User associated with ACL must be signed up."]; + } + return NO; + } + + return YES; + } +} + +// This saves all of the objects and files reachable from the given object. +// It does its work in multiple waves, saving as many as possible in each wave. +// If there's ever an error, it just gives up, sets error, and returns NO; ++ (BFTask *)_deepSaveAsync:(id)object withCurrentUser:(PFUser *)currentUser sessionToken:(NSString *)sessionToken { + BFTask *task = [BFTask taskWithResult:@YES]; + + NSMutableSet *uniqueObjects = [NSMutableSet set]; + NSMutableSet *uniqueFiles = [NSMutableSet set]; + [self collectDirtyChildren:object children:uniqueObjects files:uniqueFiles currentUser:currentUser]; + for (PFFile *file in uniqueFiles) { + task = [task continueAsyncWithSuccessBlock:^id(BFTask *task) { + return [[file saveInBackground] continueAsyncWithBlock:^id(BFTask *task) { + // This is a stupid hack because our current behavior is to fail file + // saves with an error when a file save inside it is cancelled. + if (task.isCancelled) { + NSError *newError = [PFErrorUtilities errorWithCode:kPFErrorUnsavedFile + message:@"A file save was cancelled."]; + return [BFTask taskWithError:newError]; + } + return task; + }]; + }]; + } + + // TODO: (nlutsenko) Get rid of this once we allow localIds in batches. + NSArray *remaining = [uniqueObjects allObjects]; + NSMutableArray *finished = [NSMutableArray array]; + while ([remaining count] > 0) { + // Partition the objects into two sets: those that can be save immediately, + // and those that rely on other objects to be created first. + NSMutableArray *current = [NSMutableArray array]; + NSMutableArray *nextBatch = [NSMutableArray array]; + for (PFObject *object in remaining) { + if ([object canBeSerializedAfterSaving:finished withCurrentUser:currentUser error:nil]) { + [current addObject:object]; + } else { + [nextBatch addObject:object]; + } + } + remaining = nextBatch; + + if (current.count == 0) { + // We do cycle-detection when building the list of objects passed to this + // function, so this should never get called. But we should check for it + // anyway, so that we get an exception instead of an infinite loop. + [NSException raise:NSInternalInconsistencyException + format:@"Unable to save a PFObject with a relation to a cycle."]; + } + + // If a lazy user is one of the objects in the array, resolve its laziness now and + // remove it from the list of things to save. + // + // This has to happen separately from everything else because there [PFUser save] + // is special-cased to work for lazy users, but new users can't be created by + // PFMultiCommand's regular save. + if ([currentUser isLazy] && [current containsObject:currentUser]) { + task = [task continueAsyncWithSuccessBlock:^id(BFTask *task) { + return [currentUser saveInBackground]; + }]; + + [finished addObject:currentUser]; + [current removeObject:currentUser]; + if (current.count == 0) { + continue; + } + } + + task = [task continueAsyncWithSuccessBlock:^id(BFTask *task) { + // Batch requests have currently a limit of 50 packaged requests per single request + // This splitting will split the overall array into segments of upto 50 requests + // and execute them concurrently with a wrapper task for all of them. + NSArray *objectBatches = [PFInternalUtils arrayBySplittingArray:current + withMaximumComponentsPerSegment:PFRESTObjectBatchCommandSubcommandsLimit]; + NSMutableArray *tasks = [NSMutableArray arrayWithCapacity:[objectBatches count]]; + + for (NSArray *objectBatch in objectBatches) { + BFTask *batchTask = [self _enqueue:^BFTask *(BFTask *toAwait) { + return [toAwait continueAsyncWithBlock:^id(BFTask *task) { + NSMutableArray *commands = [NSMutableArray arrayWithCapacity:[objectBatch count]]; + for (PFObject *object in objectBatch) { + PFRESTCommand *command = nil; + @synchronized ([object lock]) { + [object _objectWillSave]; + [object _checkSaveParametersWithCurrentUser:currentUser]; + command = [object _constructSaveCommandForChanges:[object unsavedChanges] + sessionToken:sessionToken + objectEncoder:[PFPointerObjectEncoder objectEncoder]]; + [object startSave]; + } + [commands addObject:command]; + } + + PFRESTCommand *batchCommand = [PFRESTObjectBatchCommand batchCommandWithCommands:commands + sessionToken:sessionToken]; + return [[[Parse _currentManager].commandRunner runCommandAsync:batchCommand withOptions:0] + continueAsyncWithBlock:^id(BFTask *commandRunnerTask) { + NSArray *results = [commandRunnerTask.result result]; + + NSMutableArray *handleSaveTasks = [NSMutableArray arrayWithCapacity:[objectBatch count]]; + + __block NSError *error = task.error; + [objectBatch enumerateObjectsUsingBlock:^(PFObject *object, NSUInteger idx, BOOL *stop) { + // If the task resulted in an error - don't even bother looking into + // the result of the command, just roll the error further + + BFTask *task = nil; + if (commandRunnerTask.error) { + task = [object handleSaveResultAsync:nil]; + } else { + NSDictionary *commandResult = results[idx]; + + NSDictionary *errorResult = commandResult[@"error"]; + if (errorResult) { + error = [PFErrorUtilities errorFromResult:errorResult]; + task = [[object handleSaveResultAsync:nil] continueWithBlock:^id(BFTask *task) { + return [BFTask taskWithError:error]; + }]; + } else { + NSDictionary *successfulResult = commandResult[@"success"]; + task = [object handleSaveResultAsync:successfulResult]; + } + } + [handleSaveTasks addObject:task]; + }]; + + return [[BFTask taskForCompletionOfAllTasks:handleSaveTasks] continueAsyncWithBlock:^id(BFTask *task) { + if (commandRunnerTask.error || commandRunnerTask.cancelled || commandRunnerTask.exception) { + return commandRunnerTask; + } + + // Reiterate saveAll tasks, return first error. + for (BFTask *handleSaveTask in handleSaveTasks) { + if (handleSaveTask.error || handleSaveTask.exception) { + return handleSaveTask; + } + } + + return @YES; + }]; + }]; + }]; + } forObjects:objectBatch]; + [tasks addObject:batchTask]; + } + + return [[BFTask taskForCompletionOfAllTasks:tasks] continueWithBlock:^id(BFTask *task) { + // Return the first exception, instead of the aggregated one + // for the sake of compatability with old versions + + if ([task.exception.name isEqualToString:BFTaskMultipleExceptionsException]) { + NSException *firstException = [task.exception.userInfo[@"exceptions"] firstObject]; + if (firstException) { + return [BFTask taskWithException:firstException]; + } + } + + if (task.error || task.cancelled || task.exception) { + return task; + } + + return @YES; + }]; + }]; + + [finished addObjectsFromArray:current]; + } + + return task; +} + +// Just like deepSaveAsync, but uses saveEventually instead of saveAsync. +// Because you shouldn't wait for saveEventually calls to complete, this +// does not return any operation. ++ (BFTask *)_enqueueSaveEventuallyChildrenOfObject:(PFObject *)object + currentUser:(PFUser *)currentUser { + return [BFTask taskFromExecutor:[BFExecutor defaultExecutor] withBlock:^id{ + NSMutableSet *uniqueObjects = [NSMutableSet set]; + NSMutableSet *uniqueFiles = [NSMutableSet set]; + [self collectDirtyChildren:object children:uniqueObjects files:uniqueFiles currentUser:currentUser]; + for (PFFile *file in uniqueFiles) { + if (!file.url) { + NSException *exception = [NSException exceptionWithName:NSInternalInconsistencyException + reason:@"Unable to saveEventually a PFObject with a relation to a new, unsaved PFFile." + userInfo:nil]; + return [BFTask taskWithException:exception]; + } + } + + // Remove object from the queue of objects to save as this method should only save children. + [uniqueObjects removeObject:object]; + + NSArray *remaining = [uniqueObjects allObjects]; + NSMutableArray *finished = [NSMutableArray array]; + NSMutableArray *enqueueTasks = [NSMutableArray array]; + while ([remaining count] > 0) { + // Partition the objects into two sets: those that can be save immediately, + // and those that rely on other objects to be created first. + NSMutableArray *current = [NSMutableArray array]; + NSMutableArray *nextBatch = [NSMutableArray array]; + for (PFObject *object in remaining) { + if ([object canBeSerializedAfterSaving:finished withCurrentUser:currentUser error:nil]) { + [current addObject:object]; + } else { + [nextBatch addObject:object]; + } + } + remaining = nextBatch; + + if (current.count == 0) { + // We do cycle-detection when building the list of objects passed to this + // function, so this should never get called. But we should check for it + // anyway, so that we get an exception instead of an infinite loop. + [NSException raise:NSInternalInconsistencyException + format:@"Unable to save a PFObject with a relation to a cycle."]; + } + + // If a lazy user is one of the objects in the array, resolve its laziness now and + // remove it from the list of things to save. + // + // This has to happen separately from everything else because there [PFUser save] + // is special-cased to work for lazy users, but new users can't be created by + // PFMultiCommand's regular save. + // + // Unfortunately, ACLs with lazy users still cannot be saved, because the ACL does + // does not get updated after the user save completes. + // TODO: (nlutsenko) Make the ACL update after the user is saved. + if ([currentUser isLazy] && [current containsObject:currentUser]) { + [enqueueTasks addObject:[currentUser _enqueueSaveEventuallyWithChildren:NO]]; + [finished addObject:currentUser]; + [current removeObject:currentUser]; + if (current.count == 0) { + continue; + } + } + + // TODO: (nlutsenko) Allow batching with saveEventually. + for (PFObject *object in current) { + [enqueueTasks addObject:[object _enqueueSaveEventuallyWithChildren:NO]]; + } + + [finished addObjectsFromArray:current]; + } + return [BFTask taskForCompletionOfAllTasks:enqueueTasks]; + }]; +} + +- (BFTask *)_saveChildrenInBackgroundWithCurrentUser:(PFUser *)currentUser sessionToken:(NSString *)sessionToken { + @synchronized (lock) { + return [[self class] _deepSaveAsync:_estimatedData.dictionaryRepresentation + withCurrentUser:currentUser + sessionToken:sessionToken]; + } +} + +///-------------------------------------- +#pragma mark - Dirtiness helper +///-------------------------------------- + +- (BOOL)isDirty:(BOOL)considerChildren { + @synchronized (lock) { + [self checkForChangesToMutableContainers]; + if (self._state.deleted || dirty || [self _hasChanges]) { + return YES; + } + + if (considerChildren) { + NSMutableSet *seen = [NSMutableSet set]; + return [self _areChildrenDirty:seen]; + } + + return NO; + } +} + +- (void)_setDirty:(BOOL)aDirty { + @synchronized (lock) { + dirty = aDirty; + } +} + +- (BOOL)_areChildrenDirty:(NSMutableSet *)seenObjects { + if ([seenObjects containsObject:self]) { + return NO; + } + [seenObjects addObject:self]; + + @synchronized(lock) { + [self checkpointAllMutableContainers]; + if (self._state.deleted || dirty || [self _hasChanges]) { + return YES; + } + + // We only need to consider the currently estimated children here, + // because they're the only ones that might need to be saved in a + // subsequent call to save, which is the meaning of "dirtiness". + __block BOOL retValue = NO; + [_estimatedData enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) { + if ([obj isKindOfClass:[PFObject class]] && [obj _areChildrenDirty:seenObjects]) { + retValue = YES; + *stop = YES; + } + }]; + return retValue; + } +} + +///-------------------------------------- +#pragma mark - Mutable container management +///-------------------------------------- + +- (void)checkpointAllMutableContainers { + @synchronized (lock) { + [_estimatedData enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) { + [self checkpointMutableContainer:obj]; + }]; + } +} + +- (void)checkpointMutableContainer:(id)object { + @synchronized (lock) { + if (PFObjectValueIsKindOfMutableContainerClass(object)) { + [hashedObjectsCache setObject:[PFJSONCacheItem cacheFromObject:object] + forKey:[NSValue valueWithNonretainedObject:object]]; + } + } +} + +- (void)checkForChangesToMutableContainer:(id)object forKey:(NSString *)key { + @synchronized (lock) { + // If this is a mutable container, we should check its contents. + if (PFObjectValueIsKindOfMutableContainerClass(object)) { + PFJSONCacheItem *oldCacheItem = [hashedObjectsCache objectForKey:[NSValue valueWithNonretainedObject:object]]; + if (!oldCacheItem) { + [NSException raise:NSInternalInconsistencyException + format:@"PFObject contains container item that isn't cached."]; + } else { + PFJSONCacheItem *newCacheItem = [PFJSONCacheItem cacheFromObject:object]; + if (![oldCacheItem isEqual:newCacheItem]) { + // A mutable container changed out from under us. Treat it as a set operation. + [self setObject:object forKey:key]; + } + } + } else { + [hashedObjectsCache removeObjectForKey:[NSValue valueWithNonretainedObject:object]]; + } + } +} + +- (void)checkForChangesToMutableContainers { + @synchronized (lock) { + NSMutableArray *unexaminedCacheKeys = [[hashedObjectsCache allKeys] mutableCopy]; + NSDictionary *reachableData = _estimatedData.dictionaryRepresentation; + [reachableData enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + [unexaminedCacheKeys removeObject:[NSValue valueWithNonretainedObject:obj]]; + [self checkForChangesToMutableContainer:obj forKey:key]; + }]; + + // Remove unchecked cache entries. + [hashedObjectsCache removeObjectsForKeys:unexaminedCacheKeys]; + } +} + +///-------------------------------------- +#pragma mark - Data Availability +///-------------------------------------- + +// TODO: (nlutsenko) Remove this when rest of PFObject is decoupled. +- (void)setHasBeenFetched:(BOOL)fetched { + @synchronized (lock) { + if (self._state.complete != fetched) { + PFMutableObjectState *state = [_pfinternal_state mutableCopy]; + state.complete = fetched; + self._state = state; + } + } +} + +- (void)_setDeleted:(BOOL)deleted { + @synchronized (lock) { + if (self._state.deleted != deleted) { + PFMutableObjectState *state = [_pfinternal_state mutableCopy]; + state.deleted = deleted; + self._state = state; + } + } +} + +- (BOOL)isDataAvailableForKey:(NSString *)key { + if (!key) { + return NO; + } + + @synchronized (lock) { + if ([self isDataAvailable]) { + return YES; + } + return [_availableKeys containsObject:key]; + } +} + +///-------------------------------------- +#pragma mark - Validations +///-------------------------------------- + +// Validations that are done on save. For now, there is nothing. +- (void)_checkSaveParametersWithCurrentUser:(PFUser *)currentUser { + return; +} + +/*! + Checks if Parse class name could be used to initialize a given instance of PFObject or it's subclass. + */ ++ (void)_assertValidInstanceClassName:(NSString *)className { + PFParameterAssert(className, @"Class name can't be 'nil'."); + PFParameterAssert(![className hasPrefix:@"_"], @"Invalid class name. Class names cannot start with an underscore."); +} + +///-------------------------------------- +#pragma mark - Serialization helpers +///-------------------------------------- + +- (NSString *)getOrCreateLocalId { + @synchronized(lock) { + if (!self.localId) { + PFConsistencyAssert(!self._state.objectId, + @"A localId should not be created for an object with an objectId."); + self.localId = [[Parse _currentManager].coreManager.objectLocalIdStore createLocalId]; + } + } + return self.localId; +} + +- (void)resolveLocalId { + @synchronized (lock) { + PFConsistencyAssert(self.localId, @"Tried to resolve a localId for an object with no localId."); + NSString *newObjectId = [[Parse _currentManager].coreManager.objectLocalIdStore objectIdForLocalId:self.localId]; + + // If we are resolving local ids, then this object is about to go over the network. + // But if it has local ids that haven't been resolved yet, then that's not going to + // be possible. + if (!newObjectId) { + [NSException raise:NSInternalInconsistencyException + format:@"Tried to save an object with a pointer to a new, unsaved object."]; + } + + // Nil out the localId so that the new objectId won't be saved back to the PFObjectLocalIdStore. + self.localId = nil; + self.objectId = newObjectId; + } +} + ++ (id)_objectFromDictionary:(NSDictionary *)dictionary + defaultClassName:(NSString *)defaultClassName + completeData:(BOOL)completeData { + return [self _objectFromDictionary:dictionary + defaultClassName:defaultClassName + completeData:completeData + decoder:[PFDecoder objectDecoder]]; +} + +// When merging results from a query, ensure that any supplied `selectedKeys` are marked as available. This special +// handling is necessary because keys with an `undefined` value are not guaranteed to be included in the server's +// response data. +// +// See T3336562 ++ (id)_objectFromDictionary:(NSDictionary *)dictionary + defaultClassName:(NSString *)defaultClassName + selectedKeys:(NSArray *)selectedKeys { + PFObject *result = [self _objectFromDictionary:dictionary + defaultClassName:defaultClassName + completeData:(selectedKeys == nil) + decoder:[PFDecoder objectDecoder]]; + [result->_availableKeys addObjectsFromArray:selectedKeys]; + return result; +} + +/*! + Creates a PFObject from a dictionary object. + + @param dictionary Undecoded dictionary. + @param defaultClassName The className of the resulting object if none is given by the dictionary. + @param completeData Whether to use complete data. + @param decoder Decoder used to decode the dictionary. + */ ++ (id)_objectFromDictionary:(NSDictionary *)dictionary + defaultClassName:(NSString *)defaultClassName + completeData:(BOOL)completeData + decoder:(PFDecoder *)decoder { + NSString *objectId = nil; + NSString *className = nil; + if (dictionary != nil) { + objectId = dictionary[@"objectId"]; + className = dictionary[@"className"] ?: defaultClassName; + } + PFObject *object = [PFObject objectWithoutDataWithClassName:className objectId:objectId]; + [object _mergeAfterFetchWithResult:dictionary decoder:decoder completeData:completeData]; + return object; +} + +/*! + When the app was previously a non-LDS app and want to enable LDS, currentUser and currentInstallation + will be discarded if we don't migrate them. This is a helper method to migrate user/installation + from disk to pin. + + @param fileName the file in which the object was saved. + @param pinName the name of the pin in which the object should be stored. + */ ++ (BFTask *)_migrateObjectInBackgroundFromFile:(NSString *)fileName + toPin:(NSString *)pinName { + return [self _migrateObjectInBackgroundFromFile:fileName toPin:pinName usingMigrationBlock:nil]; +} + +/*! + When the app was previously a non-LDS app and want to enable LDS, currentUser and currentInstallation + will be discarded if we don't migrate them. This is a helper method to migrate user/installation + from disk to pin. + + @param fileName the file in which the object was saved. + @param pinName the name of the pin in which the object should be stored. + @param migrationBlock The block that will be called if there is an object on disk and before the object is pinned. + */ ++ (BFTask *)_migrateObjectInBackgroundFromFile:(NSString *)fileName + toPin:(NSString *)pinName + usingMigrationBlock:(BFContinuationBlock)migrationBlock { + PFObjectFilePersistenceController *controller = [Parse _currentManager].coreManager.objectFilePersistenceController; + BFTask *task = [controller loadPersistentObjectAsyncForKey:fileName]; + if (migrationBlock) { + task = [task continueWithSuccessBlock:^id(BFTask *task) { + PFObject *object = task.result; + if (object) { + return [[task continueWithBlock:migrationBlock] continueWithResult:object]; + } + return task; + }]; + } + return [task continueWithSuccessBlock:^id(BFTask *task) { + PFObject *object = task.result; + return [[object _pinInBackgroundWithName:pinName includeChildren:NO] continueWithBlock:^id(BFTask *task) { + BFTask *resultTask = [BFTask taskWithResult:object]; + + // Only delete if we successfully pin it so that it retries the migration next time. + if (!task.error && !task.exception && !task.cancelled) { + NSString *path = [[Parse _currentManager].fileManager parseDataItemPathForPathComponent:fileName]; + return [[PFFileManager removeItemAtPathAsync:path] continueWithBlock:^id(BFTask *task) { + // We don't care if it fails to delete the file, so return the + return resultTask; + }]; + } + return resultTask; + }]; + }]; +} + +///-------------------------------------- +#pragma mark - REST operations +///-------------------------------------- + +/*! + Encodes parse object into NSDictionary suitable for persisting into LDS. + */ +- (NSDictionary *)RESTDictionaryWithObjectEncoder:(PFEncoder *)objectEncoder + operationSetUUIDs:(NSArray **)operationSetUUIDs { + @synchronized (lock) { + [self checkForChangesToMutableContainers]; + PFObjectState *state = self._state; + return [self RESTDictionaryWithObjectEncoder:objectEncoder + operationSetUUIDs:operationSetUUIDs + state:state + operationSetQueue:operationSetQueue]; + } +} + +- (NSDictionary *)RESTDictionaryWithObjectEncoder:(PFEncoder *)objectEncoder + operationSetUUIDs:(NSArray **)operationSetUUIDs + state:(PFObjectState *)state + operationSetQueue:(NSArray *)queue { + NSMutableDictionary *result = [[state dictionaryRepresentationWithObjectEncoder:objectEncoder] mutableCopy]; + result[PFObjectClassNameRESTKey] = state.parseClassName; + result[PFObjectCompleteRESTKey] = @(state.complete); + + result[PFObjectIsDeletingEventuallyRESTKey] = @(_deletingEventually); + + // TODO (hallucinogen): based on some note from Android's toRest, we'll need to put this + // stuff somewhere else + NSMutableArray *operations = [NSMutableArray array]; + NSMutableArray *mutableOperationSetUUIDs = [NSMutableArray array]; + for (PFOperationSet *operation in queue) { + NSArray *ooSetUUIDs = nil; + [operations addObject:[operation RESTDictionaryUsingObjectEncoder:objectEncoder + operationSetUUIDs:&ooSetUUIDs]]; + [mutableOperationSetUUIDs addObjectsFromArray:ooSetUUIDs]; + } + + *operationSetUUIDs = mutableOperationSetUUIDs; + + result[PFObjectOperationsRESTKey] = operations; + return result; +} + +- (void)mergeFromRESTDictionary:(NSDictionary *)object withDecoder:(PFDecoder *)decoder { + @synchronized (lock) { + BOOL mergeServerData = NO; + + PFMutableObjectState *state = [self._state mutableCopy]; + + // If LDS has `updatedAt` and we have it - compare, then if stuff is newer - merge. + // If LDS doesn't have `updatedAt` and we don't have it - merge anyway. + NSString *updatedAtString = object[PFObjectUpdatedAtRESTKey]; + if (updatedAtString) { + NSDate *updatedDate = [[PFDateFormatter sharedFormatter] dateFromString:updatedAtString]; + mergeServerData = ([state.updatedAt compare:updatedDate] != NSOrderedDescending); + } else if (!state.updatedAt) { + mergeServerData = YES; + } + [object enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + if ([key isEqualToString:PFObjectOperationsRESTKey]) { + PFOperationSet *remoteOperationSet = nil; + NSArray *operations = (NSArray *)obj; + if ([operations count] > 0) { + // Add and enqueue any saveEventually operations, roll forward any other + // operations sets (operations sets here are generally failed/incomplete saves). + PFOperationSet *current = nil; + for (id rawOperationSet in operations) { + PFOperationSet *operationSet = [PFOperationSet operationSetFromRESTDictionary:rawOperationSet + usingDecoder:decoder]; + if (operationSet.saveEventually) { + if (current != nil) { + [[self unsavedChanges] mergeOperationSet:current]; + current = nil; + } + + // Check if queue already contains this operation set and discard it if does + if (![self _containsOperationSet:operationSet]) { + // Insert the `saveEventually` operationSet before the last operation set at all times. + NSUInteger index = ([operationSetQueue count] == 0 ? 0 : [operationSetQueue count] - 1); + [operationSetQueue insertObject:operationSet atIndex:index]; + [self _enqueueSaveEventuallyOperationAsync:operationSet]; + } + + continue; + } + + if (current != nil) { + [operationSet mergeOperationSet:current]; + } + current = operationSet; + } + if (current != nil) { + remoteOperationSet = current; + } + } + + PFOperationSet *localOperationSet = [self unsavedChanges]; + if (localOperationSet.updatedAt != nil && + [localOperationSet.updatedAt compare:remoteOperationSet.updatedAt] != NSOrderedAscending) { + [localOperationSet mergeOperationSet:remoteOperationSet]; + } else { + PFConsistencyAssert(remoteOperationSet, @"'remoteOperationSet' should not be nil."); + NSUInteger index = [operationSetQueue indexOfObject:localOperationSet]; + [remoteOperationSet mergeOperationSet:localOperationSet]; + [operationSetQueue replaceObjectAtIndex:index withObject:remoteOperationSet]; + } + + return; + } + + if ([key isEqualToString:PFObjectCompleteRESTKey]) { + // If server data is complete, consider this object to be fetched + state.complete = state.complete || [obj boolValue]; + return; + } + if ([key isEqualToString:PFObjectIsDeletingEventuallyRESTKey]) { + _deletingEventually = [obj intValue]; + return; + } + + [_availableKeys addObject:key]; + + // If server data in dictionary is older - don't merge it. + if (!mergeServerData) { + return; + } + + if ([key isEqualToString:PFObjectTypeRESTKey] || [key isEqualToString:PFObjectClassNameRESTKey]) { + return; + } + if ([key isEqualToString:PFObjectObjectIdRESTKey]) { + state.objectId = obj; + return; + } + if ([key isEqualToString:PFObjectCreatedAtRESTKey]) { + [state setCreatedAtFromString:obj]; + return; + } + if ([key isEqualToString:PFObjectUpdatedAtRESTKey]) { + [state setUpdatedAtFromString:obj]; + return; + } + + if ([key isEqualToString:PFObjectACLRESTKey]) { + PFACL *acl = [PFACL ACLWithDictionary:obj]; + [state setServerDataObject:acl forKey:PFObjectACLRESTKey]; + [self checkpointMutableContainer:acl]; + return; + } + + // Should be decoded + id decodedObject = [decoder decodeObject:obj]; + if (PFObjectValueIsKindOfMutableContainerClass(decodedObject)) { + [self checkpointMutableContainer:decodedObject]; + } + [state setServerDataObject:decodedObject forKey:key]; + }]; + if (state.updatedAt == nil && state.createdAt != nil) { + state.updatedAt = state.createdAt; + } + BOOL previousDirtyState = dirty; + self._state = state; + dirty = previousDirtyState; + + if (mergeServerData) { + if ([object[PFObjectCompleteRESTKey] boolValue]) { + [self removeOldKeysAfterFetch:object]; + } else { + // Unmark the object as fetched, because we merged from incomplete new data. + [self setHasBeenFetched:NO]; + } + } + [self rebuildEstimatedData]; + [self checkpointAllMutableContainers]; + } +} + +///-------------------------------------- +#pragma mark - Eventually Helper +///-------------------------------------- + +/*! + Enqueues saveEventually operation asynchronously. + + @returns A task which result is a saveEventually task. + */ +- (BFTask *)_enqueueSaveEventuallyWithChildren:(BOOL)saveChildren { + return [_eventuallyTaskQueue enqueue:^BFTask *(BFTask *toAwait) { + PFUser *currentUser = [PFUser currentUser]; + NSString *sessionToken = currentUser.sessionToken; + return [[toAwait continueAsyncWithBlock:^id(BFTask *task) { + return [self _validateSaveEventuallyAsync]; + }] continueWithSuccessBlock:^id(BFTask *task) { + @synchronized (lock) { + [self _objectWillSave]; + if (![self isDirty:NO]) { + return [BFTask taskWithResult:@YES]; + } + } + + BFTask *saveChildrenTask = nil; + if (saveChildren) { + saveChildrenTask = [[self class] _enqueueSaveEventuallyChildrenOfObject:self currentUser:currentUser]; + } else { + saveChildrenTask = [BFTask taskWithResult:nil]; + } + + return [saveChildrenTask continueWithSuccessBlock:^id(BFTask *task) { + BFTask *saveTask = nil; + @synchronized (lock) { + // Snapshot the current set of changes, and push a new changeset into the queue. + PFOperationSet *changes = [self unsavedChanges]; + changes.saveEventually = YES; + [self startSave]; + [self _checkSaveParametersWithCurrentUser:currentUser]; + PFRESTCommand *command = [self _constructSaveCommandForChanges:changes + sessionToken:sessionToken + objectEncoder:[PFPointerOrLocalIdObjectEncoder objectEncoder]]; + + // Enqueue the eventually operation! + saveTask = [[Parse _currentManager].eventuallyQueue enqueueCommandInBackground:command withObject:self]; + [self _enqueueSaveEventuallyOperationAsync:changes]; + } + saveTask = [saveTask continueWithBlock:^id(BFTask *task) { + @try { + if (!task.isCancelled && !task.exception && !task.error) { + PFCommandResult *result = task.result; + // PFPinningEventuallyQueue handle save result directly. + if (![Parse _currentManager].offlineStoreLoaded) { + return [self handleSaveResultAsync:result.result]; + } + } + return task; + } @finally { + [[Parse _currentManager].eventuallyQueue _notifyTestHelperObjectUpdated]; + } + }]; + return [BFTask taskWithResult:saveTask]; + }]; + }]; + }]; +} + + +/*! + Enqueues the saveEventually PFOperationSet in PFObject taskQueue + */ +- (BFTask *)_enqueueSaveEventuallyOperationAsync:(PFOperationSet *)operationSet { + if (!operationSet.isSaveEventually) { + NSString *message = @"This should only be used to enqueue saveEventually operation sets"; + NSException *exception = [NSException exceptionWithName:NSInternalInconsistencyException + reason:message + userInfo:nil]; + return [BFTask taskWithException:exception]; + } + + return [self.taskQueue enqueue:^BFTask *(BFTask *toAwait) { + // Use default priority background to break a chain and make sure this operation is truly asynchronous + return [toAwait continueWithExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id(BFTask *task) { + PFEventuallyQueue *queue = [Parse _currentManager].eventuallyQueue; + id queueSubClass = (id)queue; + return [queueSubClass _waitForOperationSet:operationSet eventuallyPin:nil]; + }]; + }]; +} + +///-------------------------------------- +#pragma mark - Data model manipulation +///-------------------------------------- + +- (NSMutableDictionary *)_convertToDictionaryForSaving:(PFOperationSet *)changes + withObjectEncoder:(PFEncoder *)encoder { + @synchronized (lock) { + [self checkForChangesToMutableContainers]; + + NSMutableDictionary *serialized = [NSMutableDictionary dictionary]; + [changes enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + serialized[key] = obj; + }]; + return [encoder encodeObject:serialized]; + } +} + +/*! + performOperation:forKey: is like setObject:forKey, but instead of just taking a + new value, it takes a PFFieldOperation that modifies the value. + */ +- (void)performOperation:(PFFieldOperation *)operation forKey:(NSString *)key { + @synchronized (lock) { + id newValue = [_estimatedData applyFieldOperation:operation forKey:key]; + + PFFieldOperation *oldOperation = [[self unsavedChanges] objectForKey:key]; + PFFieldOperation *newOperation = [operation mergeWithPrevious:oldOperation]; + [[self unsavedChanges] setObject:newOperation forKey:key]; + [self checkpointMutableContainer:newValue]; + [_availableKeys addObject:key]; + } +} + +- (BOOL)_containsOperationSet:(PFOperationSet *)operationSet { + @synchronized (lock) { + for (PFOperationSet *existingOperationSet in operationSetQueue) { + if (existingOperationSet == operationSet || + [existingOperationSet.uuid isEqualToString:operationSet.uuid]) { + return YES; + } + } + } + return NO; +} + +/*! + Returns the set of PFFieldOperations that will be sent in the next save. + */ +- (PFOperationSet *)unsavedChanges { + @synchronized (lock) { + return [operationSetQueue lastObject]; + } +} + +/*! + @returns YES if there's unsaved changes in this object. This complements ivar `dirty` for `isDirty` check. + */ +- (BOOL)_hasChanges { + @synchronized (lock) { + return [[self unsavedChanges] count] > 0; + } +} + +/*! + @returns YES if this PFObject has operations in operationSetQueue that haven't been completed yet, + NO if there are no operations in the operationSetQueue. + */ +- (BOOL)_hasOutstandingOperations { + @synchronized (lock) { + // > 1 since 1 is unsaved changes. + return [operationSetQueue count] > 1; + } +} + +- (void)rebuildEstimatedData { + @synchronized (lock) { + _estimatedData = [PFObjectEstimatedData estimatedDataFromServerData:self._state.serverData + operationSetQueue:operationSetQueue]; + } +} + +- (PFObject *)mergeFromObject:(PFObject *)other { + @synchronized (lock) { + if (self == other) { + // If they point to the same instance, then don't merge. + return self; + } + + PFMutableObjectState *state = [self._state mutableCopy]; + state.objectId = other.objectId; + state.createdAt = other.createdAt; + state.updatedAt = other.updatedAt; + state.serverData = [other._state.serverData mutableCopy]; + self._state = state; + [self checkpointAllMutableContainers]; + + dirty = NO; + + [self rebuildEstimatedData]; + return self; + } +} + +- (void)_mergeAfterFetchWithResult:(NSDictionary *)result decoder:(PFDecoder *)decoder completeData:(BOOL)completeData { + @synchronized (lock) { + [self checkForChangesToMutableContainers]; + [self _mergeFromServerWithResult:result decoder:decoder completeData:completeData]; + if (completeData) { + [self removeOldKeysAfterFetch:result]; + } + [self rebuildEstimatedData]; + [self checkpointAllMutableContainers]; + } +} + +- (void)removeOldKeysAfterFetch:(NSDictionary *)result { + @synchronized (lock) { + PFMutableObjectState *state = [self._state mutableCopy]; + + NSMutableDictionary *removedDictionary = [NSMutableDictionary dictionaryWithDictionary:state.serverData]; + [removedDictionary removeObjectsForKeys:[result allKeys]]; + + NSArray *removedKeys = [removedDictionary allKeys]; + [state removeServerDataObjectsForKeys:removedKeys]; + [_availableKeys minusSet:[NSSet setWithArray:removedKeys]]; + + self._state = state; + } +} + +- (void)_mergeAfterSaveWithResult:(NSDictionary *)result decoder:(PFDecoder *)decoder { + @synchronized (lock) { + PFOperationSet *operationsBeforeSave = operationSetQueue[0]; + [operationSetQueue removeObjectAtIndex:0]; + + if (!result) { + // Merge the data from the failed save into the next save. + PFOperationSet *operationsForNextSave = operationSetQueue[0]; + [operationsForNextSave mergeOperationSet:operationsBeforeSave]; + } else { + // Merge the data from the save and the data from the server into serverData. + [self checkForChangesToMutableContainers]; + + PFMutableObjectState *state = [self._state mutableCopy]; + [state applyOperationSet:operationsBeforeSave]; + self._state = state; + + [self _mergeFromServerWithResult:result decoder:decoder completeData:NO]; + [self rebuildEstimatedData]; + [self checkpointAllMutableContainers]; + } + } +} + +- (void)_mergeFromServerWithResult:(NSDictionary *)result decoder:(PFDecoder *)decoder completeData:(BOOL)completeData { + @synchronized (lock) { + PFMutableObjectState *state = [self._state mutableCopy]; + + // If the server's data is complete, consider this object to be fetched. + state.complete |= completeData; + + [result enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + if ([key isEqualToString:PFObjectObjectIdRESTKey]) { + state.objectId = obj; + } else if ([key isEqualToString:PFObjectCreatedAtRESTKey]) { + // These dates can be passed in as NSDate or as NSString, + // depending on whether they were wrapped inside JSONObject with __type: Date or not. + if ([obj isKindOfClass:[NSDate class]]) { + state.createdAt = obj; + } else { + [state setCreatedAtFromString:obj]; + } + } else if ([key isEqualToString:PFObjectUpdatedAtRESTKey]) { + // These dates can be passed in as NSDate or as NSString, + // depending on whether they were wrapped inside JSONObject with __type: Date or not. + if ([obj isKindOfClass:[NSDate class]]) { + state.updatedAt = obj; + } else { + [state setUpdatedAtFromString:obj]; + } + } else if ([key isEqualToString:PFObjectACLRESTKey]) { + PFACL *acl = [PFACL ACLWithDictionary:obj]; + [state setServerDataObject:acl forKey:key]; + [self checkpointMutableContainer:acl]; + } else { + [state setServerDataObject:[decoder decodeObject:obj] forKey:key]; + } + }]; + if (state.updatedAt == nil && state.createdAt != nil) { + state.updatedAt = state.createdAt; + } + self._state = state; + [_availableKeys addObjectsFromArray:[result allKeys]]; + + dirty = NO; + } +} + +///-------------------------------------- +#pragma mark - Command handlers +///-------------------------------------- + +// We can't get rid of these handlers, because subclasses override them +// to add special actions after operations. + +- (BFTask *)handleSaveResultAsync:(NSDictionary *)result { + BFTask *task = [BFTask taskWithResult:nil]; + + NSDictionary *fetchedObjects = [self _collectFetchedObjects]; + + [task continueWithBlock:^id(BFTask *task) { + PFKnownParseObjectDecoder *decoder = [PFKnownParseObjectDecoder decoderWithFetchedObjects:fetchedObjects]; + @synchronized (self.lock) { + // TODO (hallucinogen): t5611821 we need to make mergeAfterSave that accepts decoder and operationBeforeSave + [self _mergeAfterSaveWithResult:result decoder:decoder]; + } + return nil; + }]; + + PFOfflineStore *store = [Parse _currentManager].offlineStore; + if (store != nil) { + task = [task continueWithBlock:^id(BFTask *task) { + return [store updateDataForObjectAsync:self]; + }]; + } + + return [task continueWithBlock:^id(BFTask *task) { + @synchronized (lock) { + if (self.saveDelegate) { + [self.saveDelegate invoke:self error:nil]; + } + return [BFTask taskWithResult:@(!!result)]; + } + }]; +} + +///-------------------------------------- +#pragma mark - Asynchronous operations +///-------------------------------------- + +- (void)startSave { + @synchronized (lock) { + [operationSetQueue addObject:[[PFOperationSet alloc] init]]; + } +} + +- (BFTask *)saveAsync:(BFTask *)toAwait { + PFCurrentUserController *controller = [[self class] currentUserController]; + return [[controller getCurrentObjectAsync] continueWithBlock:^id(BFTask *task) { + PFUser *currentUser = task.result; + NSString *sessionToken = currentUser.sessionToken; + + BFTask *await = toAwait ?: [BFTask taskWithResult:nil]; + return [[await continueAsyncWithBlock:^id(BFTask *task) { + PFOfflineStore *offlineStore = [Parse _currentManager].offlineStore; + if (offlineStore != nil) { + return [offlineStore fetchObjectLocallyAsync:self]; + } + return nil; + }] continueWithBlock:^id(BFTask *task) { + @synchronized (lock) { + if (![self isDirty:YES]) { + return [BFTask taskWithResult:@YES]; + } + + [self _objectWillSave]; + + // Snapshot the current set of changes, and push a new changeset into the queue. + PFOperationSet *changes = [self unsavedChanges]; + + [self startSave]; + BFTask *childrenTask = [self _saveChildrenInBackgroundWithCurrentUser:currentUser + sessionToken:sessionToken]; + if (!dirty && ![changes count]) { + return childrenTask; + } + return [[childrenTask continueWithSuccessBlock:^id(BFTask *task) { + [self _checkSaveParametersWithCurrentUser:currentUser]; + PFRESTCommand *command = [self _constructSaveCommandForChanges:changes + sessionToken:sessionToken + objectEncoder:[PFPointerObjectEncoder objectEncoder]]; + return [[Parse _currentManager].commandRunner runCommandAsync:command + withOptions:PFCommandRunningOptionRetryIfFailed]; + }] continueAsyncWithBlock:^id(BFTask *task) { + if (task.isCancelled || task.exception || task.error) { + // If there was an error, we want to roll forward the save changes before rethrowing. + BFTask *commandRunnerTask = task; + return [[self handleSaveResultAsync:nil] continueWithBlock:^id(BFTask *task) { + return commandRunnerTask; + }]; + } + PFCommandResult *result = task.result; + return [self handleSaveResultAsync:result.result]; + }]; + } + }]; + }]; +} + +- (BFTask *)fetchAsync:(BFTask *)toAwait { + PFCurrentUserController *controller = [[self class] currentUserController]; + return [[controller getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { + NSString *sessionToken = task.result; + return [toAwait continueAsyncWithBlock:^id(BFTask *task) { + return [[[self class] objectController] fetchObjectAsync:self withSessionToken:sessionToken]; + }]; + }]; +} + +- (BFTask *)deleteAsync:(BFTask *)toAwait { + PFCurrentUserController *controller = [[self class] currentUserController]; + return [[controller getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { + NSString *sessionToken = task.result; + return [toAwait continueAsyncWithBlock:^id(BFTask *task) { + return [[[self class] objectController] deleteObjectAsync:self withSessionToken:sessionToken]; + }]; + }]; +} + +///-------------------------------------- +#pragma mark - Command constructors +///-------------------------------------- + +- (PFRESTCommand *)_constructSaveCommandForChanges:(PFOperationSet *)changes + sessionToken:(NSString *)sessionToken + objectEncoder:(PFEncoder *)encoder { + @synchronized (lock) { + NSDictionary *parameters = [self _convertToDictionaryForSaving:changes withObjectEncoder:encoder]; + + if (self._state.objectId) { + return [PFRESTObjectCommand updateObjectCommandForObjectState:self._state + changes:parameters + operationSetUUID:changes.uuid + sessionToken:sessionToken]; + } + + return [PFRESTObjectCommand createObjectCommandForObjectState:self._state + changes:parameters + operationSetUUID:changes.uuid + sessionToken:sessionToken]; + + } +} + +- (PFRESTCommand *)_currentDeleteCommandWithSessionToken:(NSString *)sessionToken { + return [PFRESTObjectCommand deleteObjectCommandForObjectState:self._state withSessionToken:sessionToken]; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (void)_setObject:(id)object forKey:(NSString *)key onlyIfDifferent:(BOOL)onlyIfDifferent { + PFParameterAssert(object != nil && key != nil, + @"Can't use nil for keys or values on PFObject. Use NSNull for values."); + PFParameterAssert([key isKindOfClass:[NSString class]], @"PFObject keys must be NSStrings."); + + if (onlyIfDifferent) { + id currentObject = self[key]; + if (currentObject == object || + [currentObject isEqual:object]) { + return; + } + } + + @synchronized (lock) { + if ([object isKindOfClass:[PFFieldOperation class]]) { + [self performOperation:object forKey:key]; + return; + } + + PFObjectAssertValueIsKindOfValidClass(object); + [self performOperation:[PFSetOperation setWithValue:object] forKey:key]; + } +} + +///-------------------------------------- +#pragma mark - Misc helpers +///-------------------------------------- + +- (NSString *)displayObjectId { + return self._state.objectId ?: @"new"; +} + +- (NSString *)displayClassName { + return self._state.parseClassName; +} + +- (void)registerSaveListener:(void (^)(id result, NSError *error))callback { + @synchronized (lock) { + if (!self.saveDelegate) { + self.saveDelegate = [[PFMulticastDelegate alloc] init]; + } + [self.saveDelegate subscribe:callback]; + } +} + +- (void)unregisterSaveListener:(void (^)(id result, NSError *error))callback { + @synchronized (lock) { + if (!self.saveDelegate) { + self.saveDelegate = [[PFMulticastDelegate alloc] init]; + } + [self.saveDelegate unsubscribe:callback]; + } +} + +- (PFACL *)ACLWithoutCopying { + @synchronized (lock) { + return _estimatedData[@"ACL"]; + } +} + +// Overriden by classes which want to ignore the default ACL. +- (void)setDefaultValues { + if ([self needsDefaultACL]) { + PFACL *defaultACL = [PFACL defaultACL]; + if (defaultACL) { + self.ACL = defaultACL; + } + } +} + +- (BOOL)needsDefaultACL { + return YES; +} + +- (NSDictionary *)_collectFetchedObjects { + NSMutableDictionary *fetchedObjects = [NSMutableDictionary dictionary]; + @synchronized (lock) { + NSDictionary *dictionary = _estimatedData.dictionaryRepresentation; + [PFInternalUtils traverseObject:dictionary usingBlock:^id(id obj) { + if ([obj isKindOfClass:[PFObject class]]) { + PFObject *object = obj; + NSString *objectId = object.objectId; + if (objectId && [object isDataAvailable]) { + fetchedObjects[objectId] = object; + } + } + return obj; + }]; + } + return fetchedObjects; +} + +@end + +@implementation PFObject + +@synthesize _availableKeys = _availableKeys; + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + if (!_pfinternal_state) { + PFConsistencyAssert([self conformsToProtocol:@protocol(PFSubclassing)], + @"Can only call -[PFObject init] on subclasses conforming to PFSubclassing."); + [PFObject assertSubclassIsRegistered:[self class]]; + _pfinternal_state = [[self class] _newObjectStateWithParseClassName:[[self class] parseClassName] + objectId:nil + isComplete:YES]; + } + [[self class] _assertValidInstanceClassName:_pfinternal_state.parseClassName]; + + lock = [[NSObject alloc] init]; + operationSetQueue = [NSMutableArray arrayWithObject:[[PFOperationSet alloc] init]]; + _estimatedData = [PFObjectEstimatedData estimatedDataFromServerData:_pfinternal_state.serverData + operationSetQueue:operationSetQueue]; + _availableKeys = [NSMutableSet set]; + hashedObjectsCache = [[NSMutableDictionary alloc] init]; + self.taskQueue = [[PFTaskQueue alloc] init]; + _eventuallyTaskQueue = [[PFTaskQueue alloc] init]; + + if (_pfinternal_state.complete) { + dirty = YES; + [self setDefaultValues]; + } + + return self; +} + +- (instancetype)initWithClassName:(NSString *)className { + PFObjectState *state = [[self class] _newObjectStateWithParseClassName:className objectId:nil isComplete:YES]; + return [self initWithObjectState:state]; +} + +- (instancetype)initWithObjectState:(PFObjectState *)state { + _pfinternal_state = state; + return [self init]; +} + ++ (instancetype)objectWithClassName:(NSString *)className + objectId:(NSString *)objectId + completeData:(BOOL)completeData { + Class class = [[[self class] subclassingController] subclassForParseClassName:className] ?: [PFObject class]; + PFObjectState *state = [class _newObjectStateWithParseClassName:className objectId:objectId isComplete:completeData]; + PFObject *object = [[class alloc] initWithObjectState:state]; + if (!completeData) { + PFConsistencyAssert(![object _hasChanges], + @"The init method of %@ set values on the object, which is not allowed.", class); + } + return object; +} + ++ (instancetype)objectWithClassName:(NSString *)className { + return [self objectWithClassName:className objectId:nil completeData:YES]; +} + ++ (instancetype)objectWithClassName:(NSString *)className dictionary:(NSDictionary *)dictionary { + PFObject *object = [self objectWithClassName:className]; + [dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + object[key] = obj; + }]; + return object; +} + ++ (instancetype)objectWithoutDataWithClassName:(NSString *)className objectId:(NSString *)objectId { + // Try get single instance from OfflineStore + PFOfflineStore *store = [Parse _currentManager].offlineStore; + if (store != nil && objectId != nil) { + PFObject *singleObject = [store getOrCreateObjectWithoutDataWithClassName:className objectId:objectId]; + if (singleObject) { + return singleObject; + } + } + + // Local Datastore is not enabled or cannot found the single instance using objectId, let's use the old way + return [self objectWithClassName:className objectId:objectId completeData:NO]; +} + +#pragma mark Subclassing + ++ (instancetype)object { + PFConsistencyAssert([self conformsToProtocol:@protocol(PFSubclassing)], + @"Can only call +object on subclasses conforming to PFSubclassing"); + NSString *className = [(id)self parseClassName]; + Class class = [[self subclassingController] subclassForParseClassName:className] ?: [PFObject class]; + return [class objectWithClassName:className]; +} + ++ (instancetype)objectWithoutDataWithObjectId:(NSString *)objectId { + PFConsistencyAssert([self conformsToProtocol:@protocol(PFSubclassing)], + @"Can only call objectWithoutDataWithObjectId: on subclasses conforming to PFSubclassing"); + return [self objectWithoutDataWithClassName:[(id)self parseClassName] objectId:objectId]; +} + +#pragma mark Private + ++ (instancetype)objectWithoutDataWithClassName:(NSString *)className localId:(NSString *)localId { + PFObject *object = [self objectWithoutDataWithClassName:className objectId:nil]; + object.localId = localId; + return object; +} + +///-------------------------------------- +#pragma mark - PFObjectPrivateSubclass +///-------------------------------------- + +#pragma mark State + ++ (PFObjectState *)_newObjectStateWithParseClassName:(NSString *)className + objectId:(NSString *)objectId + isComplete:(BOOL)complete { + return [PFObjectState stateWithParseClassName:className objectId:objectId isComplete:complete]; +} + +///-------------------------------------- +#pragma mark - Validation +///-------------------------------------- + +- (BFTask PF_GENERIC(PFVoid) *)_validateFetchAsync { + if (!self._state.objectId) { + NSError *error = [PFErrorUtilities errorWithCode:kPFErrorMissingObjectId + message:@"Can't fetch an object that hasn't been saved to the server."]; + return [BFTask taskWithError:error]; + } + return [BFTask taskWithResult:nil]; +} + +- (BFTask PF_GENERIC(PFVoid) *)_validateDeleteAsync { + return [BFTask taskWithResult:nil]; +} + +- (BFTask PF_GENERIC(PFVoid) *)_validateSaveEventuallyAsync { + return [BFTask taskWithResult:nil]; +} + +#pragma mark Object Will Save + +- (void)_objectWillSave { + // Do nothing. +} + +///-------------------------------------- +#pragma mark - Properties +///-------------------------------------- + +- (void)set_state:(PFObjectState *)state { + @synchronized(lock) { + NSString *oldObjectId = _pfinternal_state.objectId; + if (self._state != state) { + _pfinternal_state = [state copy]; + } + + NSString *newObjectId = _pfinternal_state.objectId; + if (![PFObjectUtilities isObject:oldObjectId equalToObject:newObjectId]) { + [self _notifyObjectIdChangedFrom:oldObjectId toObjectId:newObjectId]; + } + } +} + +- (PFObjectState *)_state { + @synchronized(lock) { + return _pfinternal_state; + } +} + +- (PFObjectEstimatedData *)_estimatedData { + @synchronized (lock) { + return _estimatedData; + } +} + +- (void)setObjectId:(NSString *)objectId { + @synchronized (lock) { + NSString *oldObjectId = self._state.objectId; + if ([PFObjectUtilities isObject:oldObjectId equalToObject:objectId]) { + return; + } + + dirty = YES; + + PFMutableObjectState *state = [self._state mutableCopy]; + state.objectId = objectId; + _pfinternal_state = state; + + [self _notifyObjectIdChangedFrom:oldObjectId toObjectId:objectId]; + } +} + +- (NSString *)objectId { + return self._state.objectId; +} + +- (void)_notifyObjectIdChangedFrom:(NSString *)fromObjectId toObjectId:(NSString *)toObjectId { + @synchronized (self.lock) { + // The OfflineStore might raise exception if this object already had a different objectId. + PFOfflineStore *store = [Parse _currentManager].offlineStore; + if (store != nil) { + [store updateObjectIdForObject:self oldObjectId:fromObjectId newObjectId:toObjectId]; + } + if (self.localId) { + [[Parse _currentManager].coreManager.objectLocalIdStore setObjectId:toObjectId forLocalId:self.localId]; + self.localId = nil; + } + } +} + +- (NSString *)parseClassName { + return self._state.parseClassName; +} + +- (NSDate *)updatedAt { + return self._state.updatedAt; +} + +- (NSDate *)createdAt { + return self._state.createdAt; +} + +- (PFACL *)ACL { + return self[@"ACL"]; +} + +- (void)setACL:(PFACL *)ACL { + if (!ACL) { + [self removeObjectForKey:@"ACL"]; + } else { + self[@"ACL"] = ACL; + } +} + +// PFObject(): +@synthesize localId; +@synthesize taskQueue; + +// PFObject(Private): +@synthesize saveDelegate; + +///-------------------------------------- +#pragma mark - PFObject factory methods for Subclassing +///-------------------------------------- + +// Reverse compatibility note: many people may have built PFObject subclasses before +// we officially supported them. Our implementation can do cool stuff, but requires +// the parseClassName class method. ++ (void)registerSubclass { + [[self subclassingController] registerSubclass:self]; +} + ++ (PFQuery *)query { + PFConsistencyAssert([self conformsToProtocol:@protocol(PFSubclassing)], + @"+[PFObject query] can only be called on subclasses conforming to PFSubclassing."); + [PFObject assertSubclassIsRegistered:self]; + return [PFQuery queryWithClassName:[(id)self parseClassName]]; +} + ++ (PFQuery *)queryWithPredicate:(NSPredicate *)predicate { + PFConsistencyAssert([self conformsToProtocol:@protocol(PFSubclassing)], + @"+[PFObject queryWithPredicate:] can only be called on subclasses conforming to PFSubclassing."); + [PFObject assertSubclassIsRegistered:[self class]]; + return [PFQuery queryWithClassName:[(id)self parseClassName] predicate:predicate]; +} + ++ (void)assertSubclassIsRegistered:(Class)subclass { + // If people hacked their own subclass together before we supported it officially, we shouldn't break their app. + if ([subclass conformsToProtocol:@protocol(PFSubclassing)]) { + Class registration = [[self subclassingController] subclassForParseClassName:[subclass parseClassName]]; + + // It's OK to subclass a subclass (i.e. custom PFUser implementation) + PFConsistencyAssert(registration && (registration == subclass || [registration isSubclassOfClass:subclass]), + @"The class %@ must be registered with registerSubclass before using Parse.", subclass); + } +} + +///-------------------------------------- +#pragma mark - Delete commands +///-------------------------------------- + +- (BOOL)delete { + return [self delete:nil]; +} + +- (BOOL)delete:(NSError **)error { + return [[[self deleteInBackground] waitForResult:error] boolValue]; +} + +- (BFTask *)deleteInBackground { + return [self.taskQueue enqueue:^BFTask *(BFTask *toAwait) { + return [[self deleteAsync:toAwait] continueWithSuccessResult:@YES]; + }]; +} + +- (void)deleteInBackgroundWithTarget:(id)target selector:(SEL)selector { + [self deleteInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; + }]; +} + +- (void)deleteInBackgroundWithBlock:(PFBooleanResultBlock)block { + [[self deleteInBackground] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + +///-------------------------------------- +#pragma mark - Save commands +///-------------------------------------- + +- (BOOL)save { + return [self save:nil]; +} + +- (BOOL)save:(NSError **)error { + return [[[self saveInBackground] waitForResult:error] boolValue]; +} + +- (BFTask *)saveInBackground { + return [self.taskQueue enqueue:^BFTask *(BFTask *toAwait) { + return [self saveAsync:toAwait]; + }]; +} + +- (void)saveInBackgroundWithTarget:(id)target selector:(SEL)selector { + [self saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; + }]; +} + +- (void)saveInBackgroundWithBlock:(PFBooleanResultBlock)block { + [[self saveInBackground] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + +- (BFTask *)saveEventually { + return [[self _enqueueSaveEventuallyWithChildren:YES] continueWithSuccessBlock:^id(BFTask *task) { + // The result of the previous task will be an instance of BFTask. + // Returning it here will trigger the whole task stack become an actual save task. + return task.result; + }]; +} + +- (void)saveEventually:(PFBooleanResultBlock)block { + [[self saveEventually] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + +- (BFTask *)deleteEventually { + return [[[_eventuallyTaskQueue enqueue:^BFTask *(BFTask *toAwait) { + NSString *sessionToken = [PFUser currentSessionToken]; + return [[toAwait continueAsyncWithBlock:^id(BFTask *task) { + return [self _validateDeleteAsync]; + }] continueWithSuccessBlock:^id(BFTask *task) { + @synchronized (lock) { + _deletingEventually += 1; + + PFOfflineStore *store = [Parse _currentManager].offlineStore; + BFTask *updateDataTask = store ? [store updateDataForObjectAsync:self] : [BFTask taskWithResult:nil]; + + PFRESTCommand *command = [self _currentDeleteCommandWithSessionToken:sessionToken]; + BFTask *deleteTask = [updateDataTask continueWithBlock:^id(BFTask *task) { + return [[Parse _currentManager].eventuallyQueue enqueueCommandInBackground:command withObject:self]; + }]; + deleteTask = [deleteTask continueWithSuccessBlock:^id(BFTask *task) { + // PFPinningEventuallyQueue handles delete result directly. + if (![Parse _currentManager].offlineStoreLoaded) { + PFCommandResult *result = task.result; + return [[[self class] objectController] processDeleteResultAsync:result.result forObject:self]; + } + return task; + }]; + return deleteTask; + } + }]; + }] continueWithSuccessBlock:^id(BFTask *task) { + // The result of the previous task will be an instance of BFTask. + // Returning it here will trigger the whole task stack become an actual save task. + return task.result; + }] continueWithSuccessResult:@YES]; +} + +///-------------------------------------- +#pragma mark - Dirtiness +///-------------------------------------- + +- (BOOL)isDirty { + return [self isDirty:YES]; +} + +- (BOOL)isDirtyForKey:(NSString *)key { + @synchronized (lock) { + [self checkForChangesToMutableContainer:_estimatedData[key] forKey:key]; + return !![[self unsavedChanges] objectForKey:key]; + } +} + +///-------------------------------------- +#pragma mark - Fetch +///-------------------------------------- + +- (BOOL)isDataAvailable { + return self._state.complete; +} + +- (instancetype)refresh { + return [self fetch]; +} + +- (instancetype)refresh:(NSError **)error { + return [self fetch:error]; +} + +- (void)refreshInBackgroundWithTarget:(id)target selector:(SEL)selector { + [self fetchInBackgroundWithTarget:target selector:selector]; +} + +- (void)refreshInBackgroundWithBlock:(PFObjectResultBlock)block { + [self fetchInBackgroundWithBlock:block]; +} + +- (instancetype)fetch { + return [self fetch:nil]; +} + +- (instancetype)fetch:(NSError **)error { + return [[self fetchInBackground] waitForResult:error]; +} + +- (BFTask *)fetchInBackground { + if (!self._state.objectId) { + NSError *error = [PFErrorUtilities errorWithCode:kPFErrorMissingObjectId + message:@"Can't refresh an object that hasn't been saved to the server."]; + return [BFTask taskWithError:error]; + } + return [self.taskQueue enqueue:^BFTask *(BFTask *toAwait) { + return [self fetchAsync:toAwait]; + }]; +} + +- (void)fetchInBackgroundWithBlock:(PFObjectResultBlock)block { + [[self fetchInBackground] thenCallBackOnMainThreadAsync:block]; +} + +- (void)fetchInBackgroundWithTarget:(id)target selector:(SEL)selector { + [self fetchInBackgroundWithBlock:^(PFObject *object, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:object object:error]; + }]; +} + +- (instancetype)fetchIfNeeded { + return [self fetchIfNeeded:nil]; +} + +- (instancetype)fetchIfNeeded:(NSError **)error { + return [[self fetchIfNeededInBackground] waitForResult:error]; +} + +- (BFTask *)fetchIfNeededInBackground { + if ([self isDataAvailable]) { + return [BFTask taskWithResult:self]; + } + return [self fetchInBackground]; +} + +- (void)fetchIfNeededInBackgroundWithBlock:(PFObjectResultBlock)block { + [[self fetchIfNeededInBackground] thenCallBackOnMainThreadAsync:block]; +} + +- (void)fetchIfNeededInBackgroundWithTarget:(id)target selector:(SEL)selector { + [self fetchIfNeededInBackgroundWithBlock:^(PFObject *object, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:object object:error]; + }]; +} + +///-------------------------------------- +#pragma mark - Fetching Many Objects +///-------------------------------------- + ++ (NSArray *)fetchAll:(NSArray *)objects { + return [self fetchAll:objects error:nil]; +} + ++ (NSArray *)fetchAllIfNeeded:(NSArray *)objects { + return [self fetchAllIfNeeded:objects error:nil]; +} + ++ (NSArray *)fetchAll:(NSArray *)objects error:(NSError **)error { + return [[self fetchAllInBackground:objects] waitForResult:error]; +} + ++ (NSArray *)fetchAllIfNeeded:(NSArray *)objects error:(NSError **)error { + return [[self fetchAllIfNeededInBackground:objects] waitForResult:error]; +} + ++ (BFTask *)fetchAllInBackground:(NSArray *)objects { + // Snapshot the objects array. + NSArray *fetchObjects = [objects copy]; + + if (fetchObjects.count == 0) { + return [BFTask taskWithResult:fetchObjects]; + } + NSArray *uniqueObjects = [PFObjectBatchController uniqueObjectsArrayFromArray:fetchObjects omitObjectsWithData:NO]; + return [[[[self currentUserController] getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { + NSString *sessionToken = task.result; + return [PFObject _enqueue:^BFTask *(BFTask *toAwait) { + return [toAwait continueAsyncWithBlock:^id(BFTask *task) { + return [[self objectBatchController] fetchObjectsAsync:uniqueObjects withSessionToken:sessionToken]; + }]; + } forObjects:uniqueObjects]; + }] continueWithSuccessResult:fetchObjects]; +} + ++ (void)fetchAllInBackground:(NSArray *)objects target:(id)target selector:(SEL)selector { + [self fetchAllInBackground:objects block:^(NSArray *objects, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:objects object:error]; + }]; +} + ++ (void)fetchAllInBackground:(NSArray *)objects block:(PFArrayResultBlock)block { + [[self fetchAllInBackground:objects] thenCallBackOnMainThreadAsync:block]; +} + ++ (BFTask *)fetchAllIfNeededInBackground:(NSArray *)objects { + NSArray *fetchObjects = [objects copy]; + if (fetchObjects.count == 0) { + return [BFTask taskWithResult:fetchObjects]; + } + NSArray *uniqueObjects = [PFObjectBatchController uniqueObjectsArrayFromArray:fetchObjects omitObjectsWithData:YES]; + return [[[[self currentUserController] getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { + NSString *sessionToken = task.result; + return [PFObject _enqueue:^BFTask *(BFTask *toAwait) { + return [toAwait continueAsyncWithBlock:^id(BFTask *task) { + return [[self objectBatchController] fetchObjectsAsync:uniqueObjects withSessionToken:sessionToken]; + }]; + } forObjects:uniqueObjects]; + }] continueWithSuccessResult:fetchObjects]; +} + ++ (void)fetchAllIfNeededInBackground:(NSArray *)objects target:(id)target selector:(SEL)selector { + [self fetchAllIfNeededInBackground:objects block:^(NSArray *objects, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:objects object:error]; + }]; +} + ++ (void)fetchAllIfNeededInBackground:(NSArray *)objects block:(PFArrayResultBlock)block { + [[self fetchAllIfNeededInBackground:objects] thenCallBackOnMainThreadAsync:block]; +} + +///-------------------------------------- +#pragma mark - Fetch From Local Datastore +///-------------------------------------- + +- (instancetype)fetchFromLocalDatastore { + return [self fetchFromLocalDatastore:nil]; +} + +- (instancetype)fetchFromLocalDatastore:(NSError **)error { + return [[self fetchFromLocalDatastoreInBackground] waitForResult:error]; +} + +- (void)fetchFromLocalDatastoreInBackgroundWithBlock:(PFObjectResultBlock)block { + [[self fetchFromLocalDatastoreInBackground] thenCallBackOnMainThreadAsync:block]; +} + +- (BFTask *)fetchFromLocalDatastoreInBackground { + PFOfflineStore *store = [Parse _currentManager].offlineStore; + PFConsistencyAssert(store != nil, @"You must enable the local datastore before calling fetchFromLocalDatastore()."); + return [store fetchObjectLocallyAsync:self]; +} + +///-------------------------------------- +#pragma mark - Key/Value Accessors +///-------------------------------------- + +- (void)setObject:(id)object forKey:(NSString *)key { + [self _setObject:object forKey:key onlyIfDifferent:NO]; +} + +- (void)setObject:(id)object forKeyedSubscript:(NSString *)key { + [self setObject:object forKey:key]; +} + +- (id)objectForKey:(NSString *)key { + @synchronized (lock) { + PFConsistencyAssert([self isDataAvailableForKey:key], + @"Key \"%@\" has no data. Call fetchIfNeeded before getting its value.", key); + + id result = _estimatedData[key]; + if ([key isEqualToString:PFObjectACLRESTKey] && [result isKindOfClass:[PFACL class]]) { + PFACL *acl = result; + if ([acl isShared]) { + PFACL *copy = [acl createUnsharedCopy]; + self[PFObjectACLRESTKey] = copy; + return copy; + } + } + + // A relation may be deserialized without a parent or key. Either way, make sure it's consistent. + // TODO: (nlutsenko) This should be removable after we clean up the serialization code. + if ([result isKindOfClass:[PFRelation class]]) { + [result ensureParentIs:self andKeyIs:key]; + } + + return result; + } +} + +- (id)objectForKeyedSubscript:(NSString *)key { + return [self objectForKey:key]; +} + +- (void)removeObjectForKey:(NSString *)key { + @synchronized (lock) { + if ([self objectForKey:key]) { + PFDeleteOperation *operation = [[PFDeleteOperation alloc] init]; + [self performOperation:operation forKey:key]; + } + } +} + +- (void)revert { + @synchronized (self.lock) { + if ([self isDirty]) { + NSMutableSet *persistentKeys = [NSMutableSet setWithArray:[self._state.serverData allKeys]]; + + PFOperationSet *unsavedChanges = [self unsavedChanges]; + for (PFOperationSet *operationSet in operationSetQueue) { + if (operationSet != unsavedChanges) { + [persistentKeys addObjectsFromArray:[operationSet.keyEnumerator allObjects]]; + } + } + + [unsavedChanges removeAllObjects]; + [_availableKeys intersectSet:persistentKeys]; + + [self rebuildEstimatedData]; + [self checkpointAllMutableContainers]; + } + } +} + +- (void)revertObjectForKey:(NSString *)key { + @synchronized (self.lock) { + if ([self isDirtyForKey:key]) { + [[self unsavedChanges] removeObjectForKey:key]; + [self rebuildEstimatedData]; + [_availableKeys removeObject:key]; + [self checkpointAllMutableContainers]; + } + } +} + +#pragma mark Relations + +- (PFRelation *)relationforKey:(NSString *)key { + return [self relationForKey:key]; +} + +- (PFRelation *)relationForKey:(NSString *)key { + @synchronized (lock) { + // All the sanity checking is done when addObject or + // removeObject is called on the relation. + PFRelation *relation = [PFRelation relationForObject:self forKey:key]; + + id object = _estimatedData[key]; + if ([object isKindOfClass:[PFRelation class]]) { + relation.targetClass = ((PFRelation *)object).targetClass; + } + return relation; + } +} + +#pragma mark Array + +- (void)addObject:(id)object forKey:(NSString *)key { + [self addObjectsFromArray:@[ object ] forKey:key]; +} + +- (void)addObjectsFromArray:(NSArray *)objects forKey:(NSString *)key { + [self performOperation:[PFAddOperation addWithObjects:objects] forKey:key]; +} + +- (void)addUniqueObject:(id)object forKey:(NSString *)key { + [self addUniqueObjectsFromArray:@[ object ] forKey:key]; +} + +- (void)addUniqueObjectsFromArray:(NSArray *)objects forKey:(NSString *)key { + [self performOperation:[PFAddUniqueOperation addUniqueWithObjects:objects] forKey:key]; +} + +- (void)removeObject:(id)object forKey:(NSString *)key { + [self removeObjectsInArray:@[ object ] forKey:key]; +} + +- (void)removeObjectsInArray:(NSArray *)objects forKey:(NSString *)key { + [self performOperation:[PFRemoveOperation removeWithObjects:objects] forKey:key]; +} + +#pragma mark Increment + +- (void)incrementKey:(NSString *)key { + [self incrementKey:key byAmount:@1]; +} + +- (void)incrementKey:(NSString *)key byAmount:(NSNumber *)amount { + [self performOperation:[PFIncrementOperation incrementWithAmount:amount] forKey:key]; +} + +///-------------------------------------- +#pragma mark - Key Value Coding +///-------------------------------------- + +- (id)valueForUndefinedKey:(NSString *)key { + return self[key]; +} + +- (void)setValue:(id)value forUndefinedKey:(NSString *)key { + self[key] = value; +} + +///-------------------------------------- +#pragma mark - Misc +///-------------------------------------- + +- (NSArray *)allKeys { + @synchronized (lock) { + return [_estimatedData allKeys]; + } +} + +- (NSString *)description { + static NSString *descriptionKey = @"PFObject-PrintingDescription"; + + NSMutableDictionary *threadDictionary = [NSThread currentThread].threadDictionary; + if ([threadDictionary[descriptionKey] boolValue]) { + return [self _flatDescription]; + } + threadDictionary[descriptionKey] = @YES; + NSString *description = [self _recursiveDescription]; + [threadDictionary removeObjectForKey:descriptionKey]; + return description; +} + +- (NSString *)_recursiveDescription { + @synchronized (lock) { + return [NSString stringWithFormat:@"%@ %@", + [self _flatDescription], [_estimatedData.dictionaryRepresentation description]]; + } +} + +- (NSString *)_flatDescription { + @synchronized (lock) { + return [NSString stringWithFormat:@"<%@: %p, objectId: %@, localId: %@>", + self.displayClassName, self, [self displayObjectId], localId]; + } +} + +///-------------------------------------- +#pragma mark - Save all +///-------------------------------------- + ++ (BOOL)saveAll:(NSArray *)objects { + return [PFObject saveAll:objects error:nil]; +} + ++ (BOOL)saveAll:(NSArray *)objects error:(NSError **)error { + return [[[self saveAllInBackground:objects] waitForResult:error] boolValue]; +} + ++ (BFTask *)saveAllInBackground:(NSArray *)objects { + PFCurrentUserController *controller = [[self class] currentUserController]; + return [[controller getCurrentObjectAsync] continueWithBlock:^id(BFTask *task) { + PFUser *currentUser = task.result; + NSString *sessionToken = currentUser.sessionToken; + return [PFObject _deepSaveAsync:objects withCurrentUser:currentUser sessionToken:sessionToken]; + }]; +} + ++ (void)saveAllInBackground:(NSArray *)objects target:(id)target selector:(SEL)selector { + [PFObject saveAllInBackground:objects block:^(BOOL succeeded, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; + }]; +} + ++ (void)saveAllInBackground:(NSArray *)objects block:(PFBooleanResultBlock)block { + [[PFObject saveAllInBackground:objects] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + +///-------------------------------------- +#pragma mark - Delete all +///-------------------------------------- + ++ (BOOL)deleteAll:(NSArray *)objects { + return [PFObject deleteAll:objects error:nil]; +} + ++ (BOOL)deleteAll:(NSArray *)objects error:(NSError **)error { + return [[[self deleteAllInBackground:objects] waitForResult:error] boolValue]; +} + ++ (BFTask PF_GENERIC(NSNumber *) *)deleteAllInBackground:(NSArray *)objects { + NSArray *deleteObjects = [objects copy]; // Snapshot the objects. + if (deleteObjects.count == 0) { + return [BFTask PF_GENERIC(NSNumber *) taskWithResult:@YES]; + } + return [[[[self currentUserController] getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { + NSString *sessionToken = task.result; + + NSArray *uniqueObjects = [PFObjectBatchController uniqueObjectsArrayFromArray:deleteObjects usingFilter:^BOOL(PFObject *object) { + return (object.objectId != nil); + }]; + NSMutableArray PF_GENERIC(BFTask *) *validationTasks = [NSMutableArray array]; + for (PFObject *object in uniqueObjects) { + [validationTasks addObject:[object _validateDeleteAsync]]; + } + return [[BFTask taskForCompletionOfAllTasks:validationTasks] continueWithSuccessBlock:^id(BFTask *task) { + return [self _enqueue:^BFTask *(BFTask *toAwait) { + return [toAwait continueAsyncWithBlock:^id(BFTask *task) { + return [[self objectBatchController] deleteObjectsAsync:uniqueObjects + withSessionToken:sessionToken]; + }]; + } forObjects:uniqueObjects]; + }]; + }] continueWithSuccessResult:@YES]; +} + ++ (void)deleteAllInBackground:(NSArray *)objects target:(id)target selector:(SEL)selector { + [PFObject deleteAllInBackground:objects block:^(BOOL succeeded, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; + }]; +} + ++ (void)deleteAllInBackground:(NSArray *)objects block:(PFBooleanResultBlock)block { + [[self deleteAllInBackground:objects] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + +///-------------------------------------- +#pragma mark - Dynamic synthesizers +///-------------------------------------- + +// NOTE: The ONLY reason this needs to exist is to support mocking PFObject subclasses. +// +// The reason mocking doesn't work is because OCMClassMock looks for methods that exist on the class already, and will +// not be able to use our dynamic instance-level method resolving. By implementing this, we give this method a signature +// once, and then tell the runtime to forward that message on from there. +// +// Note that by implementing it this way, we no longer need to implement -methodSignatureForSelector: or +// -respondsToSelector:, as the method will be dynamically resolved by the runtime when either of those methods is +// invoked. ++ (BOOL)resolveInstanceMethod:(SEL)sel { + if (self == [PFObject class]) { + return NO; + } + + NSMethodSignature *signature = [[self subclassingController] forwardingMethodSignatureForSelector:sel ofClass:self]; + if (!signature) { + return NO; + } + + // Convert the method signature *back* into a objc type string (sidenote, why isn't this a built in?). + NSMutableString *typeString = [NSMutableString stringWithFormat:@"%s", [signature methodReturnType]]; + for (NSUInteger argumentIndex = 0; argumentIndex < [signature numberOfArguments]; argumentIndex++) { + [typeString appendFormat:@"%s", [signature getArgumentTypeAtIndex:argumentIndex]]; + } + + // TODO: (richardross) Support stret return here (will need to introspect the method signature to do so). + class_addMethod(self, sel, _objc_msgForward, [typeString UTF8String]); + + return YES; +} + +- (void)forwardInvocation:(NSInvocation *)anInvocation { + if (![[[self class] subclassingController] forwardObjectInvocation:anInvocation + withObject:(PFObject *)self]) { + [self doesNotRecognizeSelector:anInvocation.selector]; + } +} + +///-------------------------------------- +#pragma mark - Pinning +///-------------------------------------- + +- (BOOL)pin { + return [self pin:nil]; +} + +- (BOOL)pin:(NSError **)error { + return [self pinWithName:PFObjectDefaultPin error:error]; +} + +- (BFTask *)pinInBackground { + return [self pinInBackgroundWithName:PFObjectDefaultPin]; +} + +- (void)pinInBackgroundWithBlock:(PFBooleanResultBlock)block { + [[self pinInBackground] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + +- (BOOL)pinWithName:(NSString *)name { + return [self pinWithName:name error:nil]; +} + +- (BOOL)pinWithName:(NSString *)name error:(NSError **)error { + return [[[self pinInBackgroundWithName:name] waitForResult:error] boolValue]; +} + +- (void)pinInBackgroundWithName:(NSString *)name block:(PFBooleanResultBlock)block { + [[self pinInBackgroundWithName:name] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + +- (BFTask *)pinInBackgroundWithName:(NSString *)name { + return [self _pinInBackgroundWithName:name includeChildren:YES]; +} + +- (BFTask *)_pinInBackgroundWithName:(NSString *)name includeChildren:(BOOL)includeChildren { + return [[self class] _pinAllInBackground:@[ self ] withName:name includeChildren:includeChildren]; +} + +///-------------------------------------- +#pragma mark - Pinning Many Objects +///-------------------------------------- + ++ (BOOL)pinAll:(NSArray *)objects { + return [self pinAll:objects error:nil]; +} + ++ (BOOL)pinAll:(NSArray *)objects error:(NSError **)error { + return [self pinAll:objects withName:PFObjectDefaultPin error:error]; +} + ++ (BFTask *)pinAllInBackground:(NSArray *)objects { + return [self pinAllInBackground:objects withName:PFObjectDefaultPin]; +} + ++ (void)pinAllInBackground:(NSArray *)objects + block:(PFBooleanResultBlock)block { + [[self pinAllInBackground:objects] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + ++ (BOOL)pinAll:(NSArray *)objects withName:(NSString *)name { + return [self pinAll:objects withName:name error:nil]; +} + ++ (BOOL)pinAll:(NSArray *)objects withName:(NSString *)name error:(NSError **)error { + return [[[self pinAllInBackground:objects withName:name] waitForResult:error] boolValue]; +} + ++ (BFTask *)pinAllInBackground:(NSArray *)objects withName:(NSString *)name { + return [self _pinAllInBackground:objects withName:name includeChildren:YES]; +} + ++ (void)pinAllInBackground:(NSArray *)objects + withName:(NSString *)name + block:(PFBooleanResultBlock)block { + [[self pinAllInBackground:objects withName:name] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + ++ (BFTask *)_pinAllInBackground:(NSArray *)objects + withName:(NSString *)name + includeChildren:(BOOL)includeChildren { + return [[self pinningObjectStore] pinObjectsAsync:objects + withPinName:name + includeChildren:includeChildren]; +} + +///-------------------------------------- +#pragma mark - Unpinning +///-------------------------------------- + +- (BOOL)unpin { + return [self unpinWithName:PFObjectDefaultPin]; +} + +- (BOOL)unpin:(NSError **)error { + return [self unpinWithName:PFObjectDefaultPin error:error]; +} + +- (BFTask *)unpinInBackground { + return [self unpinInBackgroundWithName:PFObjectDefaultPin]; +} + +- (void)unpinInBackgroundWithBlock:(PFBooleanResultBlock)block { + [[self unpinInBackground] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + +- (BOOL)unpinWithName:(NSString *)name { + return [self unpinWithName:name error:nil]; +} + +- (BOOL)unpinWithName:(NSString *)name error:(NSError **)error { + return [[[self unpinInBackgroundWithName:name] waitForResult:error] boolValue]; +} + +- (BFTask *)unpinInBackgroundWithName:(NSString *)name { + return [[self class] unpinAllInBackground:@[ self ] withName:name]; +} + +- (void)unpinInBackgroundWithName:(NSString *)name block:(PFBooleanResultBlock)block { + [[self unpinInBackgroundWithName:name] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + +///-------------------------------------- +#pragma mark - Unpinning Many Objects +///-------------------------------------- + ++ (BOOL)unpinAllObjects { + return [self unpinAllObjects:nil]; +} + ++ (BOOL)unpinAllObjects:(NSError **)error { + return [self unpinAllObjectsWithName:PFObjectDefaultPin error:error]; +} + ++ (BFTask *)unpinAllObjectsInBackground { + return [self unpinAllObjectsInBackgroundWithName:PFObjectDefaultPin]; +} + ++ (void)unpinAllObjectsInBackgroundWithBlock:(PFBooleanResultBlock)block { + [[self unpinAllObjectsInBackground] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + ++ (BOOL)unpinAllObjectsWithName:(NSString *)name { + return [self unpinAllObjectsWithName:name error:nil]; +} + ++ (BOOL)unpinAllObjectsWithName:(NSString *)name error:(NSError **)error { + return [[[self unpinAllObjectsInBackgroundWithName:name] waitForResult:error] boolValue]; +} + ++ (void)unpinAllObjectsInBackgroundWithName:(NSString *)name block:(PFBooleanResultBlock)block { + [[self unpinAllObjectsInBackgroundWithName:name] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + ++ (BFTask *)unpinAllObjectsInBackgroundWithName:(NSString *)name { + return [[self pinningObjectStore] unpinAllObjectsAsyncWithPinName:name]; +} + ++ (BOOL)unpinAll:(NSArray *)objects { + return [self unpinAll:objects error:nil]; +} + ++ (BOOL)unpinAll:(NSArray *)objects error:(NSError **)error { + return [self unpinAll:objects withName:PFObjectDefaultPin error:error]; +} + ++ (BFTask *)unpinAllInBackground:(NSArray *)objects { + return [self unpinAllInBackground:objects withName:PFObjectDefaultPin]; +} + ++ (void)unpinAllInBackground:(NSArray *)objects block:(PFBooleanResultBlock)block { + [[self unpinAllInBackground:objects] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + ++ (BOOL)unpinAll:(NSArray *)objects withName:(NSString *)name { + return [self unpinAll:objects withName:name error:nil]; +} + ++ (BOOL)unpinAll:(NSArray *)objects withName:(NSString *)name error:(NSError **)error { + return [[[self unpinAllInBackground:objects withName:name] waitForResult:error] boolValue]; +} + ++ (BFTask *)unpinAllInBackground:(NSArray *)objects withName:(NSString *)name { + return [[self pinningObjectStore] unpinObjectsAsync:objects withPinName:name]; +} + ++ (void)unpinAllInBackground:(NSArray *)objects + withName:(NSString *)name + block:(PFBooleanResultBlock)block { + [[self unpinAllInBackground:objects withName:name] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + +///-------------------------------------- +#pragma mark - Data Source +///-------------------------------------- + ++ (id)objectController { + return [Parse _currentManager].coreManager.objectController; +} + ++ (PFObjectFileCodingLogic *)objectFileCodingLogic { + return [PFObjectFileCodingLogic codingLogic]; +} + ++ (PFObjectBatchController *)objectBatchController { + return [Parse _currentManager].coreManager.objectBatchController; +} + ++ (PFPinningObjectStore *)pinningObjectStore { + return [Parse _currentManager].coreManager.pinningObjectStore; +} + ++ (PFCurrentUserController *)currentUserController { + return [Parse _currentManager].coreManager.currentUserController; +} + ++ (PFObjectSubclassingController *)subclassingController { + return [PFObjectSubclassingController defaultController]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/PFProduct.h b/BreakingBad/Pods/Parse/Parse/PFProduct.h new file mode 100644 index 0000000..e895d6b --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFProduct.h @@ -0,0 +1,70 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import +#import +#import +#import + +PF_ASSUME_NONNULL_BEGIN + +/*! + The `PFProduct` class represents an in-app purchase product on the Parse server. + By default, products can only be created via the Data Browser. Saving a `PFProduct` will result in error. + However, the products' metadata information can be queried and viewed. + + This class is currently for iOS only. + */ +PF_WATCH_UNAVAILABLE @interface PFProduct : PFObject + +///-------------------------------------- +/// @name Product-specific Properties +///-------------------------------------- + +/*! + @abstract The product identifier of the product. + + @discussion This should match the product identifier in iTunes Connect exactly. + */ +@property (PF_NULLABLE_PROPERTY nonatomic, strong) NSString *productIdentifier; + +/*! + @abstract The icon of the product. + */ +@property (PF_NULLABLE_PROPERTY nonatomic, strong) PFFile *icon; + +/*! + @abstract The title of the product. + */ +@property (PF_NULLABLE_PROPERTY nonatomic, strong) NSString *title; + +/*! + @abstract The subtitle of the product. + */ +@property (PF_NULLABLE_PROPERTY nonatomic, strong) NSString *subtitle; + +/*! + @abstract The order in which the product information is displayed in . + + @discussion The product with a smaller order is displayed earlier in the . + */ +@property (PF_NULLABLE_PROPERTY nonatomic, strong) NSNumber *order; + +/*! + @abstract The name of the associated download. + + @discussion If there is no downloadable asset, it should be `nil`. + */ +@property (PF_NULLABLE_PROPERTY nonatomic, strong, readonly) NSString *downloadName; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/PFProduct.m b/BreakingBad/Pods/Parse/Parse/PFProduct.m new file mode 100644 index 0000000..4eb2f2b --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFProduct.m @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFProduct.h" +#import "PFProduct+Private.h" + +#import "PFAssert.h" +#import "PFObject+Subclass.h" + +@implementation PFProduct + +@dynamic productIdentifier; +@dynamic icon; +@dynamic title; +@dynamic subtitle; +@dynamic order; +@dynamic downloadName; + +///-------------------------------------- +#pragma mark - PFSubclassing +///-------------------------------------- + +// Validates a class name. We override this to only allow the product class name. ++ (void)_assertValidInstanceClassName:(NSString *)className { + PFParameterAssert([className isEqualToString:[PFProduct parseClassName]], + @"Cannot initialize a PFProduct with a custom class name."); +} + ++ (NSString *)parseClassName { + return @"_Product"; +} + +///-------------------------------------- +#pragma mark - Private +///-------------------------------------- + +@dynamic price; +@dynamic priceLocale; +@dynamic contentPath; +@dynamic progress; + +@end diff --git a/BreakingBad/Pods/Parse/Parse/PFPurchase.h b/BreakingBad/Pods/Parse/Parse/PFPurchase.h new file mode 100644 index 0000000..b681cc1 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFPurchase.h @@ -0,0 +1,98 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import +#import + +#import +#import + +@class PFProduct; + +PF_ASSUME_NONNULL_BEGIN + +typedef void (^PFPurchaseProductObservationBlock)(SKPaymentTransaction *transaction); +typedef void (^PFPurchaseBuyProductResultBlock)(NSError *PF_NULLABLE_S error); +typedef void (^PFPurchaseDownloadAssetResultBlock)(NSString *PF_NULLABLE_S filePath, NSError *PF_NULLABLE_S error); + +/*! + `PFPurchase` provides a set of APIs for working with in-app purchases. + + This class is currently for iOS only. + */ +@interface PFPurchase : NSObject + +/*! + @abstract Add application logic block which is run when buying a product. + + @discussion This method should be called once for each product, and should be called before + calling . All invocations to should happen within + the same method, and on the main thread. It is recommended to place all invocations of this method + in `application:didFinishLaunchingWithOptions:`. + + @param productIdentifier the product identifier + @param block The block to be run when buying a product. + */ ++ (void)addObserverForProduct:(NSString *)productIdentifier block:(PFPurchaseProductObservationBlock)block; + +/*! + @abstract *Asynchronously* initiates the purchase for the product. + + @param productIdentifier the product identifier + @param block the completion block. + */ ++ (void)buyProduct:(NSString *)productIdentifier block:(PFPurchaseBuyProductResultBlock)block; + +/*! + @abstract *Asynchronously* download the purchased asset, which is stored on Parse's server. + + @discussion Parse verifies the receipt with Apple and delivers the content only if the receipt is valid. + + @param transaction the transaction, which contains the receipt. + @param completion the completion block. + */ ++ (void)downloadAssetForTransaction:(SKPaymentTransaction *)transaction + completion:(PFPurchaseDownloadAssetResultBlock)completion; + +/*! + @abstract *Asynchronously* download the purchased asset, which is stored on Parse's server. + + @discussion Parse verifies the receipt with Apple and delivers the content only if the receipt is valid. + + @param transaction the transaction, which contains the receipt. + @param completion the completion block. + @param progress the progress block, which is called multiple times to reveal progress of the download. + */ ++ (void)downloadAssetForTransaction:(SKPaymentTransaction *)transaction + completion:(PFPurchaseDownloadAssetResultBlock)completion + progress:(PF_NULLABLE PFProgressBlock)progress; + +/*! + @abstract *Asynchronously* restore completed transactions for the current user. + + @discussion Only nonconsumable purchases are restored. If observers for the products have been added before + calling this method, invoking the method reruns the application logic associated with the purchase. + + @warning This method is only important to developers who want to preserve purchase states across + different installations of the same app. + */ ++ (void)restore; + +/*! + @abstract Returns a content path of the asset of a product, if it was purchased and downloaded. + + @discussion To download and verify purchases use . + + @warning This method will return `nil`, if the purchase wasn't verified or if the asset was not downloaded. + */ ++ (PF_NULLABLE NSString *)assetContentPathForProduct:(PFProduct *)product; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/PFPurchase.m b/BreakingBad/Pods/Parse/Parse/PFPurchase.m new file mode 100644 index 0000000..52ee0f8 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFPurchase.m @@ -0,0 +1,89 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFPurchase.h" + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFConstants.h" +#import "PFPaymentTransactionObserver.h" +#import "PFProduct.h" +#import "PFPurchaseController.h" +#import "PFUserPrivate.h" +#import "Parse_Private.h" + +@implementation PFPurchase + +///-------------------------------------- +#pragma mark - Public +///-------------------------------------- + ++ (void)addObserverForProduct:(NSString *)productIdentifier block:(PFPurchaseProductObservationBlock)block { + // We require the following method to run on the main thread because we want to add the observer + // *after* all products handlers have been added. Developers might be calling this method multiple + // times; and if the observer is added after the first call, the observer might not know how to + // handle some purchases. + + PFConsistencyAssert([NSThread isMainThread], @"%@ must be called on the main thread.", NSStringFromSelector(_cmd)); + PFParameterAssert(productIdentifier, @"You must pass in a valid product identifier."); + PFParameterAssert(block, @"You must pass in a valid block for the product."); + + [[Parse _currentManager].purchaseController.transactionObserver handle:productIdentifier block:block]; +} + ++ (void)buyProduct:(NSString *)productIdentifier block:(PFPurchaseBuyProductResultBlock)completion { + [[[self _purchaseController] buyProductAsyncWithIdentifier:productIdentifier] continueWithBlock:^id(BFTask *task) { + if (completion) { + completion(task.error); + } + return nil; + }]; +} + ++ (void)restore { + [[self _purchaseController].paymentQueue restoreCompletedTransactions]; +} + ++ (void)downloadAssetForTransaction:(SKPaymentTransaction *)transaction + completion:(PFPurchaseDownloadAssetResultBlock)completion { + [self downloadAssetForTransaction:transaction completion:completion progress:nil]; +} + ++ (void)downloadAssetForTransaction:(SKPaymentTransaction *)transaction + completion:(PFPurchaseDownloadAssetResultBlock)completion + progress:(PFProgressBlock)progress { + @weakify(self); + [[[PFUser _getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { + @strongify(self); + NSString *sessionToken = task.result; + return [[self _purchaseController] downloadAssetAsyncForTransaction:transaction + withProgressBlock:progress + sessionToken:sessionToken]; + }] continueWithMainThreadResultBlock:completion executeIfCancelled:YES]; +} + ++ (NSString *)assetContentPathForProduct:(PFProduct *)product { + NSString *path = [[self _purchaseController] assetContentPathForProductWithIdentifier:product.productIdentifier + fileName:product.downloadName]; + if ([[NSFileManager defaultManager] fileExistsAtPath:path]) { + return path; + } + + return nil; +} + +///-------------------------------------- +#pragma mark - Purchase Controller +///-------------------------------------- + ++ (PFPurchaseController *)_purchaseController { + return [Parse _currentManager].purchaseController; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/PFPush.h b/BreakingBad/Pods/Parse/Parse/PFPush.h new file mode 100644 index 0000000..6cff85b --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFPush.h @@ -0,0 +1,532 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import +#import + +@class PFQuery PF_GENERIC(PFGenericObject : PFObject *); + +PF_ASSUME_NONNULL_BEGIN + +/*! + The `PFPush` class defines a push notification that can be sent from a client device. + + The preferred way of modifying or retrieving channel subscriptions is to use + the class, instead of the class methods in `PFPush`. + */ +@interface PFPush : NSObject + +///-------------------------------------- +/// @name Creating a Push Notification +///-------------------------------------- + ++ (instancetype)push; + +///-------------------------------------- +/// @name Configuring a Push Notification +///-------------------------------------- + +/*! + @abstract Sets the channel on which this push notification will be sent. + + @param channel The channel to set for this push. + The channel name must start with a letter and contain only letters, numbers, dashes, and underscores. + */ +- (void)setChannel:(PF_NULLABLE NSString *)channel; + +/*! + @abstract Sets the array of channels on which this push notification will be sent. + + @param channels The array of channels to set for this push. + Each channel name must start with a letter and contain only letters, numbers, dashes, and underscores. + */ +- (void)setChannels:(PF_NULLABLE NSArray PF_GENERIC(NSString *) *)channels; + +/*! + @abstract Sets an installation query to which this push notification will be sent. + + @discussion The query should be created via <[PFInstallation query]> and should not specify a skip, limit, or order. + + @param query The installation query to set for this push. + */ +- (void)setQuery:(PF_NULLABLE PFQuery PF_GENERIC(PFInstallation *) *)query; + +/*! + @abstract Sets an alert message for this push notification. + + @warning This will overwrite any data specified in setData. + + @param message The message to send in this push. + */ +- (void)setMessage:(PF_NULLABLE NSString *)message; + +/*! + @abstract Sets an arbitrary data payload for this push notification. + + @discussion See the guide for information about the dictionary structure. + + @warning This will overwrite any data specified in setMessage. + + @param data The data to send in this push. + */ +- (void)setData:(PF_NULLABLE NSDictionary *)data; + +/*! + @abstract Sets whether this push will go to Android devices. + + @param pushToAndroid Whether this push will go to Android devices. + + @deprecated Please use a `[PFInstallation query]` with a constraint on deviceType instead. + */ +- (void)setPushToAndroid:(BOOL)pushToAndroid PARSE_DEPRECATED("Please use a [PFInstallation query] with a constraint on deviceType. This method is deprecated and won't do anything."); + +/*! + @abstract Sets whether this push will go to iOS devices. + + @param pushToIOS Whether this push will go to iOS devices. + + @deprecated Please use a `[PFInstallation query]` with a constraint on deviceType instead. + */ +- (void)setPushToIOS:(BOOL)pushToIOS PARSE_DEPRECATED("Please use a [PFInstallation query] with a constraint on deviceType. This method is deprecated and won't do anything."); + +/*! + @abstract Sets the expiration time for this notification. + + @discussion The notification will be sent to devices which are either online + at the time the notification is sent, or which come online before the expiration time is reached. + Because device clocks are not guaranteed to be accurate, + most applications should instead use . + + @see expireAfterTimeInterval: + + @param date The time at which the notification should expire. + */ +- (void)expireAtDate:(PF_NULLABLE NSDate *)date; + +/*! + @abstract Sets the time interval after which this notification should expire. + + @discussion This notification will be sent to devices which are either online at + the time the notification is sent, or which come online within the given + time interval of the notification being received by Parse's server. + An interval which is less than or equal to zero indicates that the + message should only be sent to devices which are currently online. + + @param timeInterval The interval after which the notification should expire. + */ +- (void)expireAfterTimeInterval:(NSTimeInterval)timeInterval; + +/*! + @abstract Clears both expiration values, indicating that the notification should never expire. + */ +- (void)clearExpiration; + +///-------------------------------------- +/// @name Sending Push Notifications +///-------------------------------------- + +/*! + @abstract *Synchronously* send a push message to a channel. + + @param channel The channel to send to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param message The message to send. + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns whether the send succeeded. + */ ++ (BOOL)sendPushMessageToChannel:(NSString *)channel + withMessage:(NSString *)message + error:(NSError **)error; + +/*! + @abstract *Asynchronously* send a push message to a channel. + + @param channel The channel to send to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param message The message to send. + + @returns The task, that encapsulates the work being done. + */ ++ (BFTask PF_GENERIC(NSNumber *)*)sendPushMessageToChannelInBackground:(NSString *)channel + withMessage:(NSString *)message; + +/*! + @abstract *Asynchronously* sends a push message to a channel and calls the given block. + + @param channel The channel to send to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param message The message to send. + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)` + */ ++ (void)sendPushMessageToChannelInBackground:(NSString *)channel + withMessage:(NSString *)message + block:(PF_NULLABLE PFBooleanResultBlock)block; + +/* + @abstract *Asynchronously* send a push message to a channel. + + @param channel The channel to send to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param message The message to send. + @param target The object to call selector on. + @param selector The selector to call. + It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. + `error` will be `nil` on success and set if there was an error. + `[result boolValue]` will tell you whether the call succeeded or not. + */ ++ (void)sendPushMessageToChannelInBackground:(NSString *)channel + withMessage:(NSString *)message + target:(PF_NULLABLE_S id)target + selector:(PF_NULLABLE_S SEL)selector; + +/*! + @abstract Send a push message to a query. + + @param query The query to send to. The query must be a query created with <[PFInstallation query]>. + @param message The message to send. + @param error Pointer to an NSError that will be set if necessary. + + @returns Returns whether the send succeeded. + */ ++ (BOOL)sendPushMessageToQuery:(PFQuery PF_GENERIC(PFInstallation *) *)query + withMessage:(NSString *)message + error:(NSError **)error; + +/*! + @abstract *Asynchronously* send a push message to a query. + + @param query The query to send to. The query must be a query created with <[PFInstallation query]>. + @param message The message to send. + + @returns The task, that encapsulates the work being done. + */ ++ (BFTask PF_GENERIC(NSNumber *)*)sendPushMessageToQueryInBackground:(PFQuery PF_GENERIC(PFInstallation *) *)query + withMessage:(NSString *)message; + +/*! + @abstract *Asynchronously* sends a push message to a query and calls the given block. + + @param query The query to send to. The query must be a PFInstallation query + created with [PFInstallation query]. + @param message The message to send. + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)` + */ ++ (void)sendPushMessageToQueryInBackground:(PFQuery PF_GENERIC(PFInstallation *) *)query + withMessage:(NSString *)message + block:(PF_NULLABLE PFBooleanResultBlock)block; + +/*! + @abstract *Synchronously* send this push message. + + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns whether the send succeeded. + */ +- (BOOL)sendPush:(NSError **)error; + +/*! + @abstract *Asynchronously* send this push message. + @returns The task, that encapsulates the work being done. + */ +- (BFTask PF_GENERIC(NSNumber *)*)sendPushInBackground; + +/*! + @abstract *Asynchronously* send this push message and executes the given callback block. + + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + */ +- (void)sendPushInBackgroundWithBlock:(PF_NULLABLE PFBooleanResultBlock)block; + +/* + @abstract *Asynchronously* send this push message and calls the given callback. + + @param target The object to call selector on. + @param selector The selector to call. + It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. + `error` will be `nil` on success and set if there was an error. + `[result boolValue]` will tell you whether the call succeeded or not. + */ +- (void)sendPushInBackgroundWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; + +/*! + @abstract *Synchronously* send a push message with arbitrary data to a channel. + + @discussion See the guide for information about the dictionary structure. + + @param channel The channel to send to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param data The data to send. + @param error Pointer to an NSError that will be set if necessary. + + @returns Returns whether the send succeeded. + */ ++ (BOOL)sendPushDataToChannel:(NSString *)channel + withData:(NSDictionary *)data + error:(NSError **)error; + +/*! + @abstract *Asynchronously* send a push message with arbitrary data to a channel. + + @discussion See the guide for information about the dictionary structure. + + @param channel The channel to send to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param data The data to send. + + @returns The task, that encapsulates the work being done. + */ ++ (BFTask PF_GENERIC(NSNumber *)*)sendPushDataToChannelInBackground:(NSString *)channel + withData:(NSDictionary *)data; + +/*! + @abstract Asynchronously sends a push message with arbitrary data to a channel and calls the given block. + + @discussion See the guide for information about the dictionary structure. + + @param channel The channel to send to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param data The data to send. + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + */ ++ (void)sendPushDataToChannelInBackground:(NSString *)channel + withData:(NSDictionary *)data + block:(PF_NULLABLE PFBooleanResultBlock)block; + +/* + @abstract *Asynchronously* send a push message with arbitrary data to a channel. + + @discussion See the guide for information about the dictionary structure. + + @param channel The channel to send to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param data The data to send. + @param target The object to call selector on. + @param selector The selector to call. + It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. + `error` will be `nil` on success and set if there was an error. + `[result boolValue]` will tell you whether the call succeeded or not. + */ ++ (void)sendPushDataToChannelInBackground:(NSString *)channel + withData:(NSDictionary *)data + target:(PF_NULLABLE_S id)target + selector:(PF_NULLABLE_S SEL)selector; + +/*! + @abstract *Synchronously* send a push message with arbitrary data to a query. + + @discussion See the guide for information about the dictionary structure. + + @param query The query to send to. The query must be a query + created with <[PFInstallation query]>. + @param data The data to send. + @param error Pointer to an NSError that will be set if necessary. + + @returns Returns whether the send succeeded. + */ ++ (BOOL)sendPushDataToQuery:(PFQuery PF_GENERIC(PFInstallation *) *)query + withData:(NSDictionary *)data + error:(NSError **)error; + +/*! + @abstract Asynchronously send a push message with arbitrary data to a query. + + @discussion See the guide for information about the dictionary structure. + + @param query The query to send to. The query must be a query + created with <[PFInstallation query]>. + @param data The data to send. + + @returns The task, that encapsulates the work being done. + */ ++ (BFTask PF_GENERIC(NSNumber *)*)sendPushDataToQueryInBackground:(PFQuery PF_GENERIC(PFInstallation *) *)query + withData:(NSDictionary *)data; + +/*! + @abstract *Asynchronously* sends a push message with arbitrary data to a query and calls the given block. + + @discussion See the guide for information about the dictionary structure. + + @param query The query to send to. The query must be a query + created with <[PFInstallation query]>. + @param data The data to send. + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + */ ++ (void)sendPushDataToQueryInBackground:(PFQuery PF_GENERIC(PFInstallation *) *)query + withData:(NSDictionary *)data + block:(PF_NULLABLE PFBooleanResultBlock)block; + +///-------------------------------------- +/// @name Handling Notifications +///-------------------------------------- + +/*! + @abstract A default handler for push notifications while the app is active that + could be used to mimic the behavior of iOS push notifications while the app is backgrounded or not running. + + @discussion Call this from `application:didReceiveRemoteNotification:`. + If push has a dictionary containing loc-key and loc-args in the alert, + we support up to 10 items in loc-args (`NSRangeException` if limit exceeded). + + @warning This method is available only on iOS. + + @param userInfo The userInfo dictionary you get in `appplication:didReceiveRemoteNotification:`. + */ ++ (void)handlePush:(PF_NULLABLE NSDictionary *)userInfo NS_AVAILABLE_IOS(3_0) PF_EXTENSION_UNAVAILABLE(""); + +///-------------------------------------- +/// @name Managing Channel Subscriptions +///-------------------------------------- + +/*! + @abstract Store the device token locally for push notifications. + + @discussion Usually called from you main app delegate's `didRegisterForRemoteNotificationsWithDeviceToken:`. + + @param deviceToken Either as an `NSData` straight from `application:didRegisterForRemoteNotificationsWithDeviceToken:` + or as an `NSString` if you converted it yourself. + */ ++ (void)storeDeviceToken:(id)deviceToken; + +/*! + @abstract *Synchronously* get all the channels that this device is subscribed to. + + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns an `NSSet` containing all the channel names this device is subscribed to. + */ ++ (PF_NULLABLE NSSet *)getSubscribedChannels:(NSError **)error; + +/*! + @abstract *Asynchronously* get all the channels that this device is subscribed to. + + @returns The task, that encapsulates the work being done. + */ ++ (BFTask PF_GENERIC(NSSet *)*)getSubscribedChannelsInBackground; + +/*! + @abstract *Asynchronously* get all the channels that this device is subscribed to. + @param block The block to execute. + It should have the following argument signature: `^(NSSet *channels, NSError *error)`. + */ ++ (void)getSubscribedChannelsInBackgroundWithBlock:(PFSetResultBlock)block; + +/* + @abstract *Asynchronously* get all the channels that this device is subscribed to. + + @param target The object to call selector on. + @param selector The selector to call. + It should have the following signature: `(void)callbackWithResult:(NSSet *)result error:(NSError *)error`. + `error` will be `nil` on success and set if there was an error. + */ ++ (void)getSubscribedChannelsInBackgroundWithTarget:(id)target + selector:(SEL)selector; + +/*! + @abstract *Synchrnously* subscribes the device to a channel of push notifications. + + @param channel The channel to subscribe to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns whether the subscribe succeeded. + */ ++ (BOOL)subscribeToChannel:(NSString *)channel error:(NSError **)error; + +/*! + @abstract *Asynchronously* subscribes the device to a channel of push notifications. + + @param channel The channel to subscribe to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + + @returns The task, that encapsulates the work being done. + */ ++ (BFTask PF_GENERIC(NSNumber *)*)subscribeToChannelInBackground:(NSString *)channel; + +/*! + @abstract *Asynchronously* subscribes the device to a channel of push notifications and calls the given block. + + @param channel The channel to subscribe to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)` + */ ++ (void)subscribeToChannelInBackground:(NSString *)channel + block:(PF_NULLABLE PFBooleanResultBlock)block; + +/* + @abstract *Asynchronously* subscribes the device to a channel of push notifications and calls the given callback. + + @param channel The channel to subscribe to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param target The object to call selector on. + @param selector The selector to call. + It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. + `error` will be `nil` on success and set if there was an error. + `[result boolValue]` will tell you whether the call succeeded or not. + */ ++ (void)subscribeToChannelInBackground:(NSString *)channel + target:(PF_NULLABLE_S id)target + selector:(PF_NULLABLE_S SEL)selector; + +/*! + @abstract *Synchronously* unsubscribes the device to a channel of push notifications. + + @param channel The channel to unsubscribe from. + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns whether the unsubscribe succeeded. + */ ++ (BOOL)unsubscribeFromChannel:(NSString *)channel error:(NSError **)error; + +/*! + @abstract *Asynchronously* unsubscribes the device from a channel of push notifications. + + @param channel The channel to unsubscribe from. + + @returns The task, that encapsulates the work being done. + */ ++ (BFTask PF_GENERIC(NSNumber *)*)unsubscribeFromChannelInBackground:(NSString *)channel; + +/*! + @abstract *Asynchronously* unsubscribes the device from a channel of push notifications and calls the given block. + + @param channel The channel to unsubscribe from. + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + */ ++ (void)unsubscribeFromChannelInBackground:(NSString *)channel + block:(PF_NULLABLE PFBooleanResultBlock)block; + +/* + @abstract *Asynchronously* unsubscribes the device from a channel of push notifications and calls the given callback. + + @param channel The channel to unsubscribe from. + @param target The object to call selector on. + @param selector The selector to call. + It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. + `error` will be `nil` on success and set if there was an error. + `[result boolValue]` will tell you whether the call succeeded or not. + */ ++ (void)unsubscribeFromChannelInBackground:(NSString *)channel + target:(PF_NULLABLE_S id)target + selector:(PF_NULLABLE_S SEL)selector; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/PFPush.m b/BreakingBad/Pods/Parse/Parse/PFPush.m new file mode 100644 index 0000000..e5101dd --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFPush.m @@ -0,0 +1,464 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFPush.h" +#import "PFPushPrivate.h" + +#import + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFEncoder.h" +#import "PFHash.h" +#import "PFInstallationPrivate.h" +#import "PFKeychainStore.h" +#import "PFMacros.h" +#import "PFMutablePushState.h" +#import "PFMutableQueryState.h" +#import "PFPushChannelsController.h" +#import "PFPushController.h" +#import "PFPushManager.h" +#import "PFPushUtilities.h" +#import "PFQueryPrivate.h" +#import "PFUserPrivate.h" +#import "Parse_Private.h" + +static Class _pushInternalUtilClass = nil; + +@interface PFPush () + +@property (nonatomic, strong) PFMutablePushState *state; +@property (nonatomic, strong) PFQuery PF_GENERIC(PFInstallation *) *query; + +@end + +@implementation PFPush (Private) + ++ (Class)pushInternalUtilClass { + return _pushInternalUtilClass ?: [PFPushUtilities class]; +} + ++ (void)setPushInternalUtilClass:(Class)utilClass { + if (utilClass) { + PFParameterAssert([utilClass conformsToProtocol:@protocol(PFPushInternalUtils)], + @"utilClass must conform to PFPushInternalUtils protocol"); + } + _pushInternalUtilClass = utilClass; +} + +@end + +@implementation PFPush + +///-------------------------------------- +#pragma mark - Instance +///-------------------------------------- + +#pragma mark Init + ++ (instancetype)push { + return [[self alloc] init]; +} + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _state = [[PFMutablePushState alloc] init]; + + return self; +} + +#pragma mark Accessors + +- (void)setQuery:(PFQuery *)query { + PFParameterAssert(!self.state.channels || !query, @"Can't set both the query and channel(s) properties."); + _query = query; +} + +- (void)setChannelSet:(NSSet *)channelSet { + PFParameterAssert(!self.query || !channelSet, @"Can't set both the query and channel(s) properties."); + self.state.channels = channelSet; +} + +- (void)setChannel:(NSString *)channel { + self.channelSet = PF_SET(channel); +} + +- (void)setChannels:(NSArray *)channels { + self.channelSet = [NSSet setWithArray:channels]; +} + +- (void)setMessage:(NSString *)message { + [self.state setPayloadWithMessage:message]; +} + +- (void)expireAtDate:(NSDate *)date { + self.state.expirationDate = date; + self.state.expirationTimeInterval = nil; +} + +- (void)expireAfterTimeInterval:(NSTimeInterval)timeInterval { + self.state.expirationDate = nil; + self.state.expirationTimeInterval = @(timeInterval); +} + +- (void)clearExpiration { + self.state.expirationDate = nil; + self.state.expirationTimeInterval = nil; +} + +- (void)setData:(NSDictionary *)data { + self.state.payload = data; +} + +#pragma mark Sending + +- (BOOL)sendPush:(NSError **)error { + return [[[self sendPushInBackground] waitForResult:error] boolValue]; +} + +- (BFTask *)sendPushInBackground { + if (self.query) { + PFParameterAssert(!self.query.state.sortKeys, @"Cannot send push notifications to an ordered query."); + PFParameterAssert(self.query.state.limit == -1, @"Cannot send push notifications to a limit query."); + PFParameterAssert(self.query.state.skip == 0, @"Cannot send push notifications to a skip query."); + } + + // Capture state first. + PFPushController *pushController = [[self class] pushController]; + PFPushState *state = [self _currentStateCopy]; + return [[PFUser _getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { + NSString *sessionToken = task.result; + return [pushController sendPushNotificationAsyncWithState:state sessionToken:sessionToken]; + }]; +} + +- (void)sendPushInBackgroundWithTarget:(id)target selector:(SEL)selector { + [self sendPushInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; + }]; +} + +- (void)sendPushInBackgroundWithBlock:(PFBooleanResultBlock)block { + [[self sendPushInBackground] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + +#pragma mark Command + +- (PFPushState *)_currentStateCopy { + if (self.query) { + PFMutablePushState *state = [self.state mutableCopy]; + state.queryState = self.query.state; + return [state copy]; + } + return [self.state copy]; +} + +///-------------------------------------- +#pragma mark - NSCopying +///-------------------------------------- + +- (instancetype)copyWithZone:(NSZone *)zone { + PFPush *push = [[PFPush allocWithZone:zone] init]; + push.state = [self.state mutableCopy]; + return push; +} + +///-------------------------------------- +#pragma mark - NSObject +///-------------------------------------- + +- (NSUInteger)hash { + return PFIntegerPairHash([self.query hash], [self.state hash]); +} + +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + + if (![object isKindOfClass:[PFPush class]]) { + return NO; + } + + PFPush *push = (PFPush *)object; + return (((self.query == nil && push.query == nil) || + [self.query isEqual:push.query]) && + [self.state isEqual:push.state]); +} + +///-------------------------------------- +#pragma mark - Sending Push Notifications +///-------------------------------------- + +#pragma mark To Channel + ++ (BOOL)sendPushMessageToChannel:(NSString *)channel + withMessage:(NSString *)message + error:(NSError **)error { + return [[[self sendPushMessageToChannelInBackground:channel withMessage:message] waitForResult:error] boolValue]; +} + ++ (BFTask *)sendPushMessageToChannelInBackground:(NSString *)channel + withMessage:(NSString *)message { + NSDictionary *data = @{ @"alert" : message }; + return [self sendPushDataToChannelInBackground:channel withData:data]; +} + ++ (void)sendPushMessageToChannelInBackground:(NSString *)channel + withMessage:(NSString *)message + block:(PFBooleanResultBlock)block { + [[self sendPushMessageToChannelInBackground:channel + withMessage:message] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + ++ (void)sendPushMessageToChannelInBackground:(NSString *)channel + withMessage:(NSString *)message + target:(id)target + selector:(SEL)selector { + [self sendPushMessageToChannelInBackground:channel withMessage:message block:^(BOOL succeeded, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; + }]; +} + ++ (BOOL)sendPushDataToChannel:(NSString *)channel + withData:(NSDictionary *)data + error:(NSError **)error { + return [[[PFPush sendPushDataToChannelInBackground:channel withData:data] waitForResult:error] boolValue]; +} + ++ (BFTask *)sendPushDataToChannelInBackground:(NSString *)channel withData:(NSDictionary *)data { + PFPush *push = [self push]; + [push setChannel:channel]; + [push setData:data]; + return [push sendPushInBackground]; +} + ++ (void)sendPushDataToChannelInBackground:(NSString *)channel + withData:(NSDictionary *)data + block:(PFBooleanResultBlock)block { + [[self sendPushDataToChannelInBackground:channel withData:data] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + ++ (void)sendPushDataToChannelInBackground:(NSString *)channel + withData:(NSDictionary *)data + target:(id)target + selector:(SEL)selector { + [self sendPushDataToChannelInBackground:channel withData:data block:^(BOOL succeeded, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; + }]; +} + +#pragma mark To Query + ++ (BOOL)sendPushMessageToQuery:(PFQuery *)query + withMessage:(NSString *)message + error:(NSError **)error { + PFPush *push = [PFPush push]; + push.query = query; + push.message = message; + return [push sendPush:error]; +} + ++ (BFTask *)sendPushMessageToQueryInBackground:(PFQuery *)query + withMessage:(NSString *)message { + PFPush *push = [PFPush push]; + push.query = query; + push.message = message; + return [push sendPushInBackground]; +} + ++ (void)sendPushMessageToQueryInBackground:(PFQuery *)query + withMessage:(NSString *)message + block:(PFBooleanResultBlock)block { + PFPush *push = [PFPush push]; + push.query = query; + push.message = message; + [push sendPushInBackgroundWithBlock:block]; +} + + ++ (BOOL)sendPushDataToQuery:(PFQuery *)query + withData:(NSDictionary *)data + error:(NSError **)error { + PFPush *push = [PFPush push]; + push.query = query; + push.data = data; + return [push sendPush:error]; +} + ++ (BFTask *)sendPushDataToQueryInBackground:(PFQuery *)query + withData:(NSDictionary *)data { + PFPush *push = [PFPush push]; + push.query = query; + push.data = data; + return [push sendPushInBackground]; +} + ++ (void)sendPushDataToQueryInBackground:(PFQuery *)query + withData:(NSDictionary *)data + block:(PFBooleanResultBlock)block { + PFPush *push = [PFPush push]; + push.query = query; + push.data = data; + [push sendPushInBackgroundWithBlock:block]; +} + +///-------------------------------------- +#pragma mark - Channels +///-------------------------------------- + +#pragma mark Get + ++ (NSSet *)getSubscribedChannels:(NSError **)error { + return [[self getSubscribedChannelsInBackground] waitForResult:error]; +} + ++ (BFTask *)getSubscribedChannelsInBackground { + return [[self channelsController] getSubscribedChannelsAsync]; +} + ++ (void)getSubscribedChannelsInBackgroundWithBlock:(PFSetResultBlock)block { + [[self getSubscribedChannelsInBackground] thenCallBackOnMainThreadAsync:block]; +} + ++ (void)getSubscribedChannelsInBackgroundWithTarget:(id)target selector:(SEL)selector { + [self getSubscribedChannelsInBackgroundWithBlock:^(NSSet *channels, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:channels object:error]; + }]; +} + +#pragma mark Subscribe + ++ (BOOL)subscribeToChannel:(NSString *)channel error:(NSError **)error { + return [[[self subscribeToChannelInBackground:channel] waitForResult:error] boolValue]; +} + ++ (BFTask *)subscribeToChannelInBackground:(NSString *)channel { + return [[self channelsController] subscribeToChannelAsyncWithName:channel]; +} + ++ (void)subscribeToChannelInBackground:(NSString *)channel block:(PFBooleanResultBlock)block { + [[self subscribeToChannelInBackground:channel] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + ++ (void)subscribeToChannelInBackground:(NSString *)channel target:(id)target selector:(SEL)selector { + [self subscribeToChannelInBackground:channel block:^(BOOL succeeded, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; + }]; +} + +#pragma mark Unsubscribe + ++ (BOOL)unsubscribeFromChannel:(NSString *)channel error:(NSError **)error { + return [[[self unsubscribeFromChannelInBackground:channel] waitForResult:error] boolValue]; +} + ++ (BFTask *)unsubscribeFromChannelInBackground:(NSString *)channel { + return [[self channelsController] unsubscribeFromChannelAsyncWithName:channel]; +} + ++ (void)unsubscribeFromChannelInBackground:(NSString *)channel block:(PFBooleanResultBlock)block { + [[self unsubscribeFromChannelInBackground:channel] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + ++ (void)unsubscribeFromChannelInBackground:(NSString *)channel target:(id)target selector:(SEL)selector { + [self unsubscribeFromChannelInBackground:channel block:^(BOOL succeeded, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; + }]; +} + +///-------------------------------------- +#pragma mark - Handling Notifications +///-------------------------------------- + +#if PARSE_IOS_ONLY ++ (void)handlePush:(NSDictionary *)userInfo { + UIApplication *application = [UIApplication sharedApplication]; + if ([application applicationState] != UIApplicationStateActive) { + return; + } + + NSDictionary *aps = userInfo[@"aps"]; + id alert = aps[@"alert"]; + + if (alert) { + NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:(__bridge NSString *)kCFBundleNameKey]; + NSString *message = nil; + if ([alert isKindOfClass:[NSString class]]) { + message = alert; + } else if ([alert isKindOfClass:[NSDictionary class]]) { + NSDictionary *alertDict = alert; + NSString *locKey = alertDict[@"loc-key"]; + if (locKey) { + NSString *format = [[NSBundle mainBundle] localizedStringForKey:locKey value:@"" table:nil]; + message = [PFInternalUtils _stringWithFormat:format arguments:alertDict[@"loc-args"]]; + } + } + if (message) { + [[self pushInternalUtilClass] showAlertViewWithTitle:appName message:message]; + } + } + + NSNumber *badgeNumber = aps[@"badge"]; + if (badgeNumber) { + NSInteger number = [aps[@"badge"] integerValue]; + [application setApplicationIconBadgeNumber:number]; + } + + NSString *soundName = aps[@"sound"]; + + // Vibrate or play sound only if `sound` is specified. + if ([soundName isKindOfClass:[NSString class]] && soundName.length != 0) { + // Vibrate if the sound is `default`, otherwise - play the sound name. + if ([soundName isEqualToString:@"default"]) { + [[self pushInternalUtilClass] playVibrate]; + } else { + [[self pushInternalUtilClass] playAudioWithName:soundName]; + } + } +} +#endif + +///-------------------------------------- +#pragma mark - Store Token +///-------------------------------------- + ++ (void)storeDeviceToken:(id)deviceToken { + NSString *deviceTokenString = [[self pushInternalUtilClass] convertDeviceTokenToString:deviceToken]; + [PFInstallation currentInstallation].deviceToken = deviceTokenString; +} + +///-------------------------------------- +#pragma mark - Deprecated +///-------------------------------------- + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +- (void)setPushToIOS:(BOOL)pushToIOS { +} + +- (void)setPushToAndroid:(BOOL)pushToAndroid { +} +#pragma clang diagnostic pop + +///-------------------------------------- +#pragma mark - Push Manager +///-------------------------------------- + ++ (PFPushController *)pushController { + return [Parse _currentManager].pushManager.pushController; +} + ++ (PFPushChannelsController *)channelsController { + return [Parse _currentManager].pushManager.channelsController; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/PFQuery.h b/BreakingBad/Pods/Parse/Parse/PFQuery.h new file mode 100644 index 0000000..661399a --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFQuery.h @@ -0,0 +1,892 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import +#import +#import +#import + +PF_ASSUME_NONNULL_BEGIN + +/*! + The `PFQuery` class defines a query that is used to query for s. + */ +@interface PFQuery PF_GENERIC(PFGenericObject : PFObject *) : NSObject + +///-------------------------------------- +/// @name Blocks +///-------------------------------------- + +typedef void (^PFQueryArrayResultBlock)(NSArray PF_GENERIC(PFGenericObject) * PF_NULLABLE_S objects, NSError * PF_NULLABLE_S error); + +///-------------------------------------- +/// @name Creating a Query for a Class +///-------------------------------------- + +/*! + @abstract Initializes the query with a class name. + + @param className The class name. + */ +- (instancetype)initWithClassName:(NSString *)className; + +/*! + @abstract Returns a `PFQuery` for a given class. + + @param className The class to query on. + + @returns A `PFQuery` object. + */ ++ (instancetype)queryWithClassName:(NSString *)className; + +/*! + @abstract Creates a PFQuery with the constraints given by predicate. + + @discussion The following types of predicates are supported: + + - Simple comparisons such as `=`, `!=`, `<`, `>`, `<=`, `>=`, and `BETWEEN` with a key and a constant. + - Containment predicates, such as `x IN {1, 2, 3}`. + - Key-existence predicates, such as `x IN SELF`. + - BEGINSWITH expressions. + - Compound predicates with `AND`, `OR`, and `NOT`. + - SubQueries with `key IN %@`, subquery. + + The following types of predicates are NOT supported: + + - Aggregate operations, such as `ANY`, `SOME`, `ALL`, or `NONE`. + - Regular expressions, such as `LIKE`, `MATCHES`, `CONTAINS`, or `ENDSWITH`. + - Predicates comparing one key to another. + - Complex predicates with many ORed clauses. + + @param className The class to query on. + @param predicate The predicate to create conditions from. + */ ++ (instancetype)queryWithClassName:(NSString *)className predicate:(PF_NULLABLE NSPredicate *)predicate; + +/*! + The class name to query for. + */ +@property (nonatomic, strong) NSString *parseClassName; + +///-------------------------------------- +/// @name Adding Basic Constraints +///-------------------------------------- + +/*! + @abstract Make the query include PFObjects that have a reference stored at the provided key. + + @discussion This has an effect similar to a join. You can use dot notation to specify which fields in + the included object are also fetch. + + @param key The key to load child s for. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)includeKey:(NSString *)key; + +/*! + @abstract Make the query restrict the fields of the returned s to include only the provided keys. + + @discussion If this is called multiple times, then all of the keys specified in each of the calls will be included. + + @param keys The keys to include in the result. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)selectKeys:(NSArray PF_GENERIC(NSString *) *)keys; + +/*! + @abstract Add a constraint that requires a particular key exists. + + @param key The key that should exist. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKeyExists:(NSString *)key; + +/*! + @abstract Add a constraint that requires a key not exist. + + @param key The key that should not exist. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKeyDoesNotExist:(NSString *)key; + +/*! + @abstract Add a constraint to the query that requires a particular key's object to be equal to the provided object. + + @param key The key to be constrained. + @param object The object that must be equalled. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key equalTo:(id)object; + +/*! + @abstract Add a constraint to the query that requires a particular key's object to be less than the provided object. + + @param key The key to be constrained. + @param object The object that provides an upper bound. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key lessThan:(id)object; + +/*! + @abstract Add a constraint to the query that requires a particular key's object + to be less than or equal to the provided object. + + @param key The key to be constrained. + @param object The object that must be equalled. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key lessThanOrEqualTo:(id)object; + +/*! + @abstract Add a constraint to the query that requires a particular key's object + to be greater than the provided object. + + @param key The key to be constrained. + @param object The object that must be equalled. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key greaterThan:(id)object; + +/*! + @abstract Add a constraint to the query that requires a particular key's + object to be greater than or equal to the provided object. + + @param key The key to be constrained. + @param object The object that must be equalled. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key greaterThanOrEqualTo:(id)object; + +/*! + @abstract Add a constraint to the query that requires a particular key's object + to be not equal to the provided object. + + @param key The key to be constrained. + @param object The object that must not be equalled. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key notEqualTo:(id)object; + +/*! + @abstract Add a constraint to the query that requires a particular key's object + to be contained in the provided array. + + @param key The key to be constrained. + @param array The possible values for the key's object. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key containedIn:(NSArray *)array; + +/*! + @abstract Add a constraint to the query that requires a particular key's object + not be contained in the provided array. + + @param key The key to be constrained. + @param array The list of values the key's object should not be. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key notContainedIn:(NSArray *)array; + +/*! + @abstract Add a constraint to the query that requires a particular key's array + contains every element of the provided array. + + @param key The key to be constrained. + @param array The array of values to search for. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key containsAllObjectsInArray:(NSArray *)array; + +///-------------------------------------- +/// @name Adding Location Constraints +///-------------------------------------- + +/*! + @abstract Add a constraint to the query that requires a particular key's coordinates (specified via ) + be near a reference point. + + @discussion Distance is calculated based on angular distance on a sphere. Results will be sorted by distance + from reference point. + + @param key The key to be constrained. + @param geopoint The reference point represented as a . + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key nearGeoPoint:(PFGeoPoint *)geopoint; + +/*! + @abstract Add a constraint to the query that requires a particular key's coordinates (specified via ) + be near a reference point and within the maximum distance specified (in miles). + + @discussion Distance is calculated based on a spherical coordinate system. + Results will be sorted by distance (nearest to farthest) from the reference point. + + @param key The key to be constrained. + @param geopoint The reference point represented as a . + @param maxDistance Maximum distance in miles. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key + nearGeoPoint:(PFGeoPoint *)geopoint + withinMiles:(double)maxDistance; + +/*! + @abstract Add a constraint to the query that requires a particular key's coordinates (specified via ) + be near a reference point and within the maximum distance specified (in kilometers). + + @discussion Distance is calculated based on a spherical coordinate system. + Results will be sorted by distance (nearest to farthest) from the reference point. + + @param key The key to be constrained. + @param geopoint The reference point represented as a . + @param maxDistance Maximum distance in kilometers. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key + nearGeoPoint:(PFGeoPoint *)geopoint + withinKilometers:(double)maxDistance; + +/*! + Add a constraint to the query that requires a particular key's coordinates (specified via ) be near + a reference point and within the maximum distance specified (in radians). Distance is calculated based on + angular distance on a sphere. Results will be sorted by distance (nearest to farthest) from the reference point. + + @param key The key to be constrained. + @param geopoint The reference point as a . + @param maxDistance Maximum distance in radians. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key + nearGeoPoint:(PFGeoPoint *)geopoint + withinRadians:(double)maxDistance; + +/*! + @abstract Add a constraint to the query that requires a particular key's coordinates (specified via ) be + contained within a given rectangular geographic bounding box. + + @param key The key to be constrained. + @param southwest The lower-left inclusive corner of the box. + @param northeast The upper-right inclusive corner of the box. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key withinGeoBoxFromSouthwest:(PFGeoPoint *)southwest toNortheast:(PFGeoPoint *)northeast; + +///-------------------------------------- +/// @name Adding String Constraints +///-------------------------------------- + +/*! + @abstract Add a regular expression constraint for finding string values that match the provided regular expression. + + @warning This may be slow for large datasets. + + @param key The key that the string to match is stored in. + @param regex The regular expression pattern to match. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key matchesRegex:(NSString *)regex; + +/*! + @abstract Add a regular expression constraint for finding string values that match the provided regular expression. + + @warning This may be slow for large datasets. + + @param key The key that the string to match is stored in. + @param regex The regular expression pattern to match. + @param modifiers Any of the following supported PCRE modifiers: + - `i` - Case insensitive search + - `m` - Search across multiple lines of input + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key + matchesRegex:(NSString *)regex + modifiers:(PF_NULLABLE NSString *)modifiers; + +/*! + @abstract Add a constraint for finding string values that contain a provided substring. + + @warning This will be slow for large datasets. + + @param key The key that the string to match is stored in. + @param substring The substring that the value must contain. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key containsString:(PF_NULLABLE NSString *)substring; + +/*! + @abstract Add a constraint for finding string values that start with a provided prefix. + + @discussion This will use smart indexing, so it will be fast for large datasets. + + @param key The key that the string to match is stored in. + @param prefix The substring that the value must start with. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key hasPrefix:(PF_NULLABLE NSString *)prefix; + +/*! + @abstract Add a constraint for finding string values that end with a provided suffix. + + @warning This will be slow for large datasets. + + @param key The key that the string to match is stored in. + @param suffix The substring that the value must end with. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key hasSuffix:(PF_NULLABLE NSString *)suffix; + +///-------------------------------------- +/// @name Adding Subqueries +///-------------------------------------- + +/*! + Returns a `PFQuery` that is the `or` of the passed in queries. + + @param queries The list of queries to or together. + + @returns An instance of `PFQuery` that is the `or` of the passed in queries. + */ ++ (instancetype)orQueryWithSubqueries:(NSArray PF_GENERIC(PFQuery *) *)queries; + +/*! + @abstract Adds a constraint that requires that a key's value matches a value in another key + in objects returned by a sub query. + + @param key The key that the value is stored. + @param otherKey The key in objects in the returned by the sub query whose value should match. + @param query The query to run. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key + matchesKey:(NSString *)otherKey + inQuery:(PFQuery *)query; + +/*! + @abstract Adds a constraint that requires that a key's value `NOT` match a value in another key + in objects returned by a sub query. + + @param key The key that the value is stored. + @param otherKey The key in objects in the returned by the sub query whose value should match. + @param query The query to run. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key + doesNotMatchKey:(NSString *)otherKey + inQuery:(PFQuery *)query; + +/*! + @abstract Add a constraint that requires that a key's value matches a `PFQuery` constraint. + + @warning This only works where the key's values are s or arrays of s. + + @param key The key that the value is stored in + @param query The query the value should match + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key matchesQuery:(PFQuery *)query; + +/*! + @abstract Add a constraint that requires that a key's value to not match a `PFQuery` constraint. + + @warning This only works where the key's values are s or arrays of s. + + @param key The key that the value is stored in + @param query The query the value should not match + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)whereKey:(NSString *)key doesNotMatchQuery:(PFQuery *)query; + +///-------------------------------------- +/// @name Sorting +///-------------------------------------- + +/*! + @abstract Sort the results in *ascending* order with the given key. + + @param key The key to order by. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)orderByAscending:(NSString *)key; + +/*! + @abstract Additionally sort in *ascending* order by the given key. + + @discussion The previous keys provided will precedence over this key. + + @param key The key to order by. + */ +- (instancetype)addAscendingOrder:(NSString *)key; + +/*! + @abstract Sort the results in *descending* order with the given key. + + @param key The key to order by. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)orderByDescending:(NSString *)key; + +/*! + @abstract Additionally sort in *descending* order by the given key. + + @discussion The previous keys provided will precedence over this key. + + @param key The key to order by. + */ +- (instancetype)addDescendingOrder:(NSString *)key; + +/*! + @abstract Sort the results using a given sort descriptor. + + @warning If a `sortDescriptor` has custom `selector` or `comparator` - they aren't going to be used. + + @param sortDescriptor The `NSSortDescriptor` to use to sort the results of the query. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)orderBySortDescriptor:(NSSortDescriptor *)sortDescriptor; + +/*! + @abstract Sort the results using a given array of sort descriptors. + + @warning If a `sortDescriptor` has custom `selector` or `comparator` - they aren't going to be used. + + @param sortDescriptors An array of `NSSortDescriptor` objects to use to sort the results of the query. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)orderBySortDescriptors:(PF_NULLABLE NSArray PF_GENERIC(NSSortDescriptor *) *)sortDescriptors; + +///-------------------------------------- +/// @name Getting Objects by ID +///-------------------------------------- + +/*! + @abstract Returns a with a given class and id. + + @param objectClass The class name for the object that is being requested. + @param objectId The id of the object that is being requested. + + @returns The if found. Returns `nil` if the object isn't found, or if there was an error. + */ ++ (PF_NULLABLE PFGenericObject)getObjectOfClass:(NSString *)objectClass + objectId:(NSString *)objectId PF_SWIFT_UNAVAILABLE; + +/*! + @abstract Returns a with a given class and id and sets an error if necessary. + + @param objectClass The class name for the object that is being requested. + @param objectId The id of the object that is being requested. + @param error Pointer to an `NSError` that will be set if necessary. + + @returns The if found. Returns `nil` if the object isn't found, or if there was an `error`. + */ ++ (PF_NULLABLE PFGenericObject)getObjectOfClass:(NSString *)objectClass + objectId:(NSString *)objectId + error:(NSError **)error; + +/*! + @abstract Returns a with the given id. + + @warning This method mutates the query. + It will reset limit to `1`, skip to `0` and remove all conditions, leaving only `objectId`. + + @param objectId The id of the object that is being requested. + + @returns The if found. Returns nil if the object isn't found, or if there was an error. + */ +- (PF_NULLABLE PFGenericObject)getObjectWithId:(NSString *)objectId PF_SWIFT_UNAVAILABLE; + +/*! + @abstract Returns a with the given id and sets an error if necessary. + + @warning This method mutates the query. + It will reset limit to `1`, skip to `0` and remove all conditions, leaving only `objectId`. + + @param objectId The id of the object that is being requested. + @param error Pointer to an `NSError` that will be set if necessary. + + @returns The if found. Returns nil if the object isn't found, or if there was an error. + */ +- (PF_NULLABLE PFGenericObject)getObjectWithId:(NSString *)objectId error:(NSError **)error; + +/*! + @abstract Gets a asynchronously and calls the given block with the result. + + @warning This method mutates the query. + It will reset limit to `1`, skip to `0` and remove all conditions, leaving only `objectId`. + + @param objectId The id of the object that is being requested. + + @returns The task, that encapsulates the work being done. + */ +- (BFTask PF_GENERIC(PFGenericObject) *)getObjectInBackgroundWithId:(NSString *)objectId; + +/*! + @abstract Gets a asynchronously and calls the given block with the result. + + @warning This method mutates the query. + It will reset limit to `1`, skip to `0` and remove all conditions, leaving only `objectId`. + + @param objectId The id of the object that is being requested. + @param block The block to execute. + The block should have the following argument signature: `^(NSArray *object, NSError *error)` + */ +- (void)getObjectInBackgroundWithId:(NSString *)objectId + block:(PF_NULLABLE void(^)(PFGenericObject PF_NULLABLE_S object, NSError *PF_NULLABLE_S error))block; + +/* + @abstract Gets a asynchronously. + + This mutates the PFQuery. It will reset limit to `1`, skip to `0` and remove all conditions, leaving only `objectId`. + + @param objectId The id of the object being requested. + @param target The target for the callback selector. + @param selector The selector for the callback. + It should have the following signature: `(void)callbackWithResult:(id)result error:(NSError *)error`. + Result will be `nil` if error is set and vice versa. + */ +- (void)getObjectInBackgroundWithId:(NSString *)objectId + target:(PF_NULLABLE_S id)target + selector:(PF_NULLABLE_S SEL)selector; + +///-------------------------------------- +/// @name Getting User Objects +///-------------------------------------- + +/*! + @abstract Returns a with a given id. + + @param objectId The id of the object that is being requested. + + @returns The PFUser if found. Returns nil if the object isn't found, or if there was an error. + */ ++ (PF_NULLABLE PFUser *)getUserObjectWithId:(NSString *)objectId PF_SWIFT_UNAVAILABLE; + +/*! + Returns a PFUser with a given class and id and sets an error if necessary. + @param objectId The id of the object that is being requested. + @param error Pointer to an NSError that will be set if necessary. + @result The PFUser if found. Returns nil if the object isn't found, or if there was an error. + */ ++ (PF_NULLABLE PFUser *)getUserObjectWithId:(NSString *)objectId error:(NSError **)error; + +/*! + @deprecated Please use [PFUser query] instead. + */ ++ (instancetype)queryForUser PARSE_DEPRECATED("Use [PFUser query] instead."); + +///-------------------------------------- +/// @name Getting all Matches for a Query +///-------------------------------------- + +/*! + @abstract Finds objects *synchronously* based on the constructed query. + + @returns Returns an array of objects that were found. + */ +- (PF_NULLABLE NSArray PF_GENERIC(PFGenericObject) *)findObjects PF_SWIFT_UNAVAILABLE; + +/*! + @abstract Finds objects *synchronously* based on the constructed query and sets an error if there was one. + + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns an array of objects that were found. + */ +- (PF_NULLABLE NSArray PF_GENERIC(PFGenericObject) *)findObjects:(NSError **)error; + +/*! + @abstract Finds objects *asynchronously* and sets the `NSArray` of objects as a result of the task. + + @returns The task, that encapsulates the work being done. + */ +- (BFTask PF_GENERIC(NSArray *)*)findObjectsInBackground; + +/*! + @abstract Finds objects *asynchronously* and calls the given block with the results. + + @param block The block to execute. + It should have the following argument signature: `^(NSArray *objects, NSError *error)` + */ +- (void)findObjectsInBackgroundWithBlock:(PF_NULLABLE PFQueryArrayResultBlock)block; + +/* + @abstract Finds objects *asynchronously* and calls the given callback with the results. + + @param target The object to call the selector on. + @param selector The selector to call. + It should have the following signature: `(void)callbackWithResult:(id)result error:(NSError *)error`. + Result will be `nil` if error is set and vice versa. + */ +- (void)findObjectsInBackgroundWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; + +///-------------------------------------- +/// @name Getting the First Match in a Query +///-------------------------------------- + +/*! + @abstract Gets an object *synchronously* based on the constructed query. + + @warning This method mutates the query. It will reset the limit to `1`. + + @returns Returns a , or `nil` if none was found. + */ +- (PF_NULLABLE PFGenericObject)getFirstObject PF_SWIFT_UNAVAILABLE; + +/*! + @abstract Gets an object *synchronously* based on the constructed query and sets an error if any occurred. + + @warning This method mutates the query. It will reset the limit to `1`. + + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns a , or `nil` if none was found. + */ +- (PF_NULLABLE PFGenericObject)getFirstObject:(NSError **)error; + +/*! + @abstract Gets an object *asynchronously* and sets it as a result of the task. + + @warning This method mutates the query. It will reset the limit to `1`. + + @returns The task, that encapsulates the work being done. + */ +- (BFTask PF_GENERIC(PFGenericObject) *)getFirstObjectInBackground; + +/*! + @abstract Gets an object *asynchronously* and calls the given block with the result. + + @warning This method mutates the query. It will reset the limit to `1`. + + @param block The block to execute. + It should have the following argument signature: `^(PFObject *object, NSError *error)`. + `result` will be `nil` if `error` is set OR no object was found matching the query. + `error` will be `nil` if `result` is set OR if the query succeeded, but found no results. + */ +- (void)getFirstObjectInBackgroundWithBlock:(PF_NULLABLE void(^)(PFGenericObject PF_NULLABLE_S object, NSError *PF_NULLABLE_S error))block; + +/* + @abstract Gets an object *asynchronously* and calls the given callback with the results. + + @warning This method mutates the query. It will reset the limit to `1`. + + @param target The object to call the selector on. + @param selector The selector to call. + It should have the following signature: `(void)callbackWithResult:(PFObject *)result error:(NSError *)error`. + `result` will be `nil` if `error` is set OR no object was found matching the query. + `error` will be `nil` if `result` is set OR if the query succeeded, but found no results. + */ +- (void)getFirstObjectInBackgroundWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; + +///-------------------------------------- +/// @name Counting the Matches in a Query +///-------------------------------------- + +/*! + @abstract Counts objects *synchronously* based on the constructed query. + + @returns Returns the number of objects that match the query, or `-1` if there is an error. + */ +- (NSInteger)countObjects PF_SWIFT_UNAVAILABLE; + +/*! + @abstract Counts objects *synchronously* based on the constructed query and sets an error if there was one. + + @param error Pointer to an `NSError` that will be set if necessary. + + @returns Returns the number of objects that match the query, or `-1` if there is an error. + */ +- (NSInteger)countObjects:(NSError **)error; + +/*! + @abstract Counts objects *asynchronously* and sets `NSNumber` with count as a result of the task. + + @returns The task, that encapsulates the work being done. + */ +- (BFTask PF_GENERIC(NSNumber *)*)countObjectsInBackground; + +/*! + @abstract Counts objects *asynchronously* and calls the given block with the counts. + + @param block The block to execute. + It should have the following argument signature: `^(int count, NSError *error)` + */ +- (void)countObjectsInBackgroundWithBlock:(PF_NULLABLE PFIntegerResultBlock)block; + +/* + @abstract Counts objects *asynchronously* and calls the given callback with the count. + + @param target The object to call the selector on. + @param selector The selector to call. + It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. + */ +- (void)countObjectsInBackgroundWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; + +///-------------------------------------- +/// @name Cancelling a Query +///-------------------------------------- + +/*! + @abstract Cancels the current network request (if any). Ensures that callbacks won't be called. + */ +- (void)cancel; + +///-------------------------------------- +/// @name Paginating Results +///-------------------------------------- + +/*! + @abstract A limit on the number of objects to return. The default limit is `100`, with a + maximum of 1000 results being returned at a time. + + @warning If you are calling `findObjects` with `limit = 1`, you may find it easier to use `getFirst` instead. + */ +@property (nonatomic, assign) NSInteger limit; + +/*! + @abstract The number of objects to skip before returning any. + */ +@property (nonatomic, assign) NSInteger skip; + +///-------------------------------------- +/// @name Controlling Caching Behavior +///-------------------------------------- + +/*! + @abstract The cache policy to use for requests. + + Not allowed when Pinning is enabled. + + @see fromLocalDatastore + @see fromPin + @see fromPinWithName: + */ +@property (assign, readwrite) PFCachePolicy cachePolicy; + +/*! + @abstract The age after which a cached value will be ignored + */ +@property (assign, readwrite) NSTimeInterval maxCacheAge; + +/*! + @abstract Returns whether there is a cached result for this query. + + @result `YES` if there is a cached result for this query, otherwise `NO`. + */ +- (BOOL)hasCachedResult; + +/*! + @abstract Clears the cached result for this query. If there is no cached result, this is a noop. + */ +- (void)clearCachedResult; + +/*! + @abstract Clears the cached results for all queries. + */ ++ (void)clearAllCachedResults; + +///-------------------------------------- +/// @name Query Source +///-------------------------------------- + +/*! + @abstract Change the source of this query to all pinned objects. + + @warning Requires Local Datastore to be enabled. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + + @see cachePolicy + */ +- (instancetype)fromLocalDatastore; + +/*! + @abstract Change the source of this query to the default group of pinned objects. + + @warning Requires Local Datastore to be enabled. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + + @see PFObjectDefaultPin + @see cachePolicy + */ +- (instancetype)fromPin; + +/*! + @abstract Change the source of this query to a specific group of pinned objects. + + @warning Requires Local Datastore to be enabled. + + @param name The pinned group. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + + @see PFObjectDefaultPin + @see cachePolicy + */ +- (instancetype)fromPinWithName:(PF_NULLABLE NSString *)name; + +/*! + @abstract Ignore ACLs when querying from the Local Datastore. + + @discussion This is particularly useful when querying for objects with Role based ACLs set on them. + + @warning Requires Local Datastore to be enabled. + + @returns The same instance of `PFQuery` as the receiver. This allows method chaining. + */ +- (instancetype)ignoreACLs; + +///-------------------------------------- +/// @name Advanced Settings +///-------------------------------------- + +/*! + @abstract Whether or not performance tracing should be done on the query. + + @warning This should not be set to `YES` in most cases. + */ +@property (nonatomic, assign) BOOL trace; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/PFQuery.m b/BreakingBad/Pods/Parse/Parse/PFQuery.m new file mode 100644 index 0000000..0fb3995 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFQuery.m @@ -0,0 +1,1136 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFQuery.h" + +#import +#import + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFCommandResult.h" +#import "PFCoreManager.h" +#import "PFCurrentUserController.h" +#import "PFGeoPointPrivate.h" +#import "PFInternalUtils.h" +#import "PFKeyValueCache.h" +#import "PFMutableQueryState.h" +#import "PFObject.h" +#import "PFObjectPrivate.h" +#import "PFOfflineStore.h" +#import "PFPin.h" +#import "PFQueryController.h" +#import "PFQueryUtilities.h" +#import "PFRESTQueryCommand.h" +#import "PFUserPrivate.h" +#import "ParseInternal.h" +#import "Parse_Private.h" + +NSString *const PFQueryKeyNotEqualTo = @"$ne"; +NSString *const PFQueryKeyLessThan = @"$lt"; +NSString *const PFQueryKeyLessThanEqualTo = @"$lte"; +NSString *const PFQueryKeyGreaterThan = @"$gt"; +NSString *const PFQueryKeyGreaterThanOrEqualTo = @"$gte"; +NSString *const PFQueryKeyContainedIn = @"$in"; +NSString *const PFQueryKeyNotContainedIn = @"$nin"; +NSString *const PFQueryKeyContainsAll = @"$all"; +NSString *const PFQueryKeyNearSphere = @"$nearSphere"; +NSString *const PFQueryKeyWithin = @"$within"; +NSString *const PFQueryKeyRegex = @"$regex"; +NSString *const PFQueryKeyExists = @"$exists"; +NSString *const PFQueryKeyInQuery = @"$inQuery"; +NSString *const PFQueryKeyNotInQuery = @"$notInQuery"; +NSString *const PFQueryKeySelect = @"$select"; +NSString *const PFQueryKeyDontSelect = @"$dontSelect"; +NSString *const PFQueryKeyRelatedTo = @"$relatedTo"; +NSString *const PFQueryKeyOr = @"$or"; +NSString *const PFQueryKeyQuery = @"query"; +NSString *const PFQueryKeyKey = @"key"; +NSString *const PFQueryKeyObject = @"object"; + +NSString *const PFQueryOptionKeyMaxDistance = @"$maxDistance"; +NSString *const PFQueryOptionKeyBox = @"$box"; +NSString *const PFQueryOptionKeyRegexOptions = @"$options"; + +/*! + Checks if an object can be used as value for query equality clauses. + */ +static void PFQueryAssertValidEqualityClauseClass(id object) { + static NSArray *classes; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + classes = @[ [NSString class], [NSNumber class], [NSDate class], [NSNull class], + [PFObject class], [PFGeoPoint class] ]; + }); + + for (Class class in classes) { + if ([object isKindOfClass:class]) { + return; + } + } + + PFParameterAssert(NO, @"Cannot do a comparison query for type: %@", [object class]); +} + +/*! + Checks if an object can be used as value for query ordering clauses. + */ +static void PFQueryAssertValidOrderingClauseClass(id object) { + static NSArray *classes; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + classes = @[ [NSString class], [NSNumber class], [NSDate class] ]; + }); + + for (Class class in classes) { + if ([object isKindOfClass:class]) { + return; + } + } + + PFParameterAssert(NO, @"Cannot do a query that requires ordering for type: %@", [object class]); +} + +@interface PFQuery () { + BFCancellationTokenSource *_cancellationTokenSource; +} + +@property (nonatomic, strong, readwrite) PFMutableQueryState *state; + +@end + +@implementation PFQuery + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithState:(PFQueryState *)state { + self = [super init]; + if (!self) return nil; + + _state = [state mutableCopy]; + + return self; +} + +- (instancetype)initWithClassName:(NSString *)className { + self = [super init]; + if (!self) return nil; + + _state = [PFMutableQueryState stateWithParseClassName:className]; + + return self; +} + +///-------------------------------------- +#pragma mark - Public Accessors +///-------------------------------------- + +#pragma mark Basic + +- (NSString *)parseClassName { + return self.state.parseClassName; +} + +- (void)setParseClassName:(NSString *)parseClassName { + [self checkIfCommandIsRunning]; + self.state.parseClassName = parseClassName; +} + +#pragma mark Limit + +- (void)setLimit:(NSInteger)limit { + self.state.limit = limit; +} + +- (NSInteger)limit { + return self.state.limit; +} + +#pragma mark Skip + +- (void)setSkip:(NSInteger)skip { + self.state.skip = skip; +} + +- (NSInteger)skip { + return self.state.skip; +} + +#pragma mark Cache Policy + +- (void)setCachePolicy:(PFCachePolicy)cachePolicy { + [self _checkPinningEnabled:NO]; + [self checkIfCommandIsRunning]; + + self.state.cachePolicy = cachePolicy; +} + +- (PFCachePolicy)cachePolicy { + [self _checkPinningEnabled:NO]; + [self checkIfCommandIsRunning]; + + return self.state.cachePolicy; +} + +#pragma mark Cache Policy + +- (void)setMaxCacheAge:(NSTimeInterval)maxCacheAge { + self.state.maxCacheAge = maxCacheAge; +} + +- (NSTimeInterval)maxCacheAge { + return self.state.maxCacheAge; +} + +#pragma mark Trace + +- (void)setTrace:(BOOL)trace { + self.state.trace = trace; +} + +- (BOOL)trace { + return self.state.trace; +} + +///-------------------------------------- +#pragma mark - Order +///-------------------------------------- + +- (instancetype)orderByAscending:(NSString *)key { + [self checkIfCommandIsRunning]; + [self.state sortByKey:key ascending:YES]; + return self; +} + +- (instancetype)addAscendingOrder:(NSString *)key { + [self checkIfCommandIsRunning]; + [self.state addSortKey:key ascending:YES]; + return self; +} + +- (instancetype)orderByDescending:(NSString *)key { + [self checkIfCommandIsRunning]; + [self.state sortByKey:key ascending:NO]; + return self; +} + +- (instancetype)addDescendingOrder:(NSString *)key { + [self checkIfCommandIsRunning]; + [self.state addSortKey:key ascending:NO]; + return self; +} + +- (instancetype)orderBySortDescriptor:(NSSortDescriptor *)sortDescriptor { + NSString *key = sortDescriptor.key; + if (key) { + if (sortDescriptor.ascending) { + [self orderByAscending:key]; + } else { + [self orderByDescending:key]; + } + } + return self; +} + +- (instancetype)orderBySortDescriptors:(NSArray *)sortDescriptors { + [self.state addSortKeysFromSortDescriptors:sortDescriptors]; + return self; +} + +///-------------------------------------- +#pragma mark - Conditions +///-------------------------------------- + +// Helper for condition queries. +- (instancetype)whereKey:(NSString *)key condition:(NSString *)condition object:(id)object { + [self checkIfCommandIsRunning]; + [self.state setConditionType:condition withObject:object forKey:key]; + return self; +} + +- (instancetype)whereKey:(NSString *)key equalTo:(id)object { + [self checkIfCommandIsRunning]; + PFQueryAssertValidEqualityClauseClass(object); + [self.state setEqualityConditionWithObject:object forKey:key]; + return self; +} + +- (instancetype)whereKey:(NSString *)key greaterThan:(id)object { + PFQueryAssertValidOrderingClauseClass(object); + return [self whereKey:key condition:PFQueryKeyGreaterThan object:object]; +} + +- (instancetype)whereKey:(NSString *)key greaterThanOrEqualTo:(id)object { + PFQueryAssertValidOrderingClauseClass(object); + return [self whereKey:key condition:PFQueryKeyGreaterThanOrEqualTo object:object]; +} + +- (instancetype)whereKey:(NSString *)key lessThan:(id)object { + PFQueryAssertValidOrderingClauseClass(object); + return [self whereKey:key condition:PFQueryKeyLessThan object:object]; +} + +- (instancetype)whereKey:(NSString *)key lessThanOrEqualTo:(id)object { + PFQueryAssertValidOrderingClauseClass(object); + return [self whereKey:key condition:PFQueryKeyLessThanEqualTo object:object]; +} + +- (instancetype)whereKey:(NSString *)key notEqualTo:(id)object { + PFQueryAssertValidEqualityClauseClass(object); + return [self whereKey:key condition:PFQueryKeyNotEqualTo object:object]; +} + +- (instancetype)whereKey:(NSString *)key containedIn:(NSArray *)inArray { + return [self whereKey:key condition:PFQueryKeyContainedIn object:inArray]; +} + +- (instancetype)whereKey:(NSString *)key notContainedIn:(NSArray *)inArray { + return [self whereKey:key condition:PFQueryKeyNotContainedIn object:inArray]; +} + +- (instancetype)whereKey:(NSString *)key containsAllObjectsInArray:(NSArray *)array { + return [self whereKey:key condition:PFQueryKeyContainsAll object:array]; +} + +- (instancetype)whereKey:(NSString *)key nearGeoPoint:(PFGeoPoint *)geopoint { + return [self whereKey:key condition:PFQueryKeyNearSphere object:geopoint]; +} + +- (instancetype)whereKey:(NSString *)key nearGeoPoint:(PFGeoPoint *)geopoint withinRadians:(double)maxDistance { + return [[self whereKey:key condition:PFQueryKeyNearSphere object:geopoint] + whereKey:key condition:PFQueryOptionKeyMaxDistance object:@(maxDistance)]; +} + +- (instancetype)whereKey:(NSString *)key nearGeoPoint:(PFGeoPoint *)geopoint withinMiles:(double)maxDistance { + return [self whereKey:key nearGeoPoint:geopoint withinRadians:(maxDistance/EARTH_RADIUS_MILES)]; +} + +- (instancetype)whereKey:(NSString *)key nearGeoPoint:(PFGeoPoint *)geopoint withinKilometers:(double)maxDistance { + return [self whereKey:key nearGeoPoint:geopoint withinRadians:(maxDistance/EARTH_RADIUS_KILOMETERS)]; +} + +- (instancetype)whereKey:(NSString *)key withinGeoBoxFromSouthwest:(PFGeoPoint *)southwest toNortheast:(PFGeoPoint *)northeast { + NSArray *array = @[ southwest, northeast ]; + NSDictionary *dictionary = @{ PFQueryOptionKeyBox : array }; + return [self whereKey:key condition:PFQueryKeyWithin object:dictionary]; +} + +- (instancetype)whereKey:(NSString *)key matchesRegex:(NSString *)regex { + return [self whereKey:key condition:PFQueryKeyRegex object:regex]; +} + +- (instancetype)whereKey:(NSString *)key matchesRegex:(NSString *)regex modifiers:(NSString *)modifiers { + [self checkIfCommandIsRunning]; + NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithCapacity:2]; + dictionary[PFQueryKeyRegex] = regex; + if ([modifiers length]) { + dictionary[PFQueryOptionKeyRegexOptions] = modifiers; + } + [self.state setEqualityConditionWithObject:dictionary forKey:key]; + return self; +} + +- (instancetype)whereKey:(NSString *)key containsString:(NSString *)substring { + NSString *regex = [PFQueryUtilities regexStringForString:substring]; + return [self whereKey:key matchesRegex:regex]; +} + +- (instancetype)whereKey:(NSString *)key hasPrefix:(NSString *)prefix { + NSString *regex = [NSString stringWithFormat:@"^%@", [PFQueryUtilities regexStringForString:prefix]]; + return [self whereKey:key matchesRegex:regex]; +} + +- (instancetype)whereKey:(NSString *)key hasSuffix:(NSString *)suffix { + NSString *regex = [NSString stringWithFormat:@"%@$", [PFQueryUtilities regexStringForString:suffix]]; + return [self whereKey:key matchesRegex:regex]; +} + +- (instancetype)whereKeyExists:(NSString *)key { + return [self whereKey:key condition:PFQueryKeyExists object:@YES]; +} + +- (instancetype)whereKeyDoesNotExist:(NSString *)key { + return [self whereKey:key condition:PFQueryKeyExists object:@NO]; +} + +- (instancetype)whereKey:(NSString *)key matchesQuery:(PFQuery *)query { + return [self whereKey:key condition:PFQueryKeyInQuery object:query]; +} + +- (instancetype)whereKey:(NSString *)key doesNotMatchQuery:(PFQuery *)query { + return [self whereKey:key condition:PFQueryKeyNotInQuery object:query]; +} + +- (instancetype)whereKey:(NSString *)key matchesKey:(NSString *)otherKey inQuery:(PFQuery *)query { + NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:2]; + dict[PFQueryKeyQuery] = query; + dict[PFQueryKeyKey] = otherKey; + return [self whereKey:key condition:PFQueryKeySelect object:dict]; +} + +- (instancetype)whereKey:(NSString *)key doesNotMatchKey:(NSString *)otherKey inQuery:(PFQuery *)query { + NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:2]; + dict[PFQueryKeyQuery] = query; + dict[PFQueryKeyKey] = otherKey; + return [self whereKey:key condition:PFQueryKeyDontSelect object:dict]; +} + +- (instancetype)whereRelatedToObject:(PFObject *)parent fromKey:(NSString *)key { + [self.state setRelationConditionWithObject:parent forKey:key]; + return self; +} + +- (void)redirectClassNameForKey:(NSString *)key { + [self.state redirectClassNameForKey:key]; +} + +///-------------------------------------- +#pragma mark - Include +///-------------------------------------- + +- (instancetype)includeKey:(NSString *)key { + [self checkIfCommandIsRunning]; + [self.state includeKey:key]; + return self; +} + +///-------------------------------------- +#pragma mark - Select +///-------------------------------------- + +- (instancetype)selectKeys:(NSArray *)keys { + [self checkIfCommandIsRunning]; + [self.state selectKeys:keys]; + return self; +} + +///-------------------------------------- +#pragma mark - NSPredicate helper methods +///-------------------------------------- + ++ (void)assertKeyPathConstant:(NSComparisonPredicate *)predicate { + PFConsistencyAssert(predicate.leftExpression.expressionType == NSKeyPathExpressionType && + predicate.rightExpression.expressionType == NSConstantValueExpressionType, + @"This predicate must have a key path and a constant. %@", predicate); +} + +// Adds the conditions from an NSComparisonPredicate to a PFQuery. +- (void)whereComparisonPredicate:(NSComparisonPredicate *)predicate { + NSExpression *left = predicate.leftExpression; + NSExpression *right = predicate.rightExpression; + + switch (predicate.predicateOperatorType) { + case NSEqualToPredicateOperatorType: { + [[self class] assertKeyPathConstant:predicate]; + [self whereKey:left.keyPath equalTo:(right.constantValue ?: [NSNull null])]; + return; + } + case NSNotEqualToPredicateOperatorType: { + [[self class] assertKeyPathConstant:predicate]; + [self whereKey:left.keyPath notEqualTo:(right.constantValue ?: [NSNull null])]; + return; + } + case NSLessThanPredicateOperatorType: { + [[self class] assertKeyPathConstant:predicate]; + [self whereKey:left.keyPath lessThan:right.constantValue]; + return; + } + case NSLessThanOrEqualToPredicateOperatorType: { + [[self class] assertKeyPathConstant:predicate]; + [self whereKey:left.keyPath lessThanOrEqualTo:right.constantValue]; + return; + } + case NSGreaterThanPredicateOperatorType: { + [[self class] assertKeyPathConstant:predicate]; + [self whereKey:left.keyPath greaterThan:right.constantValue]; + return; + } + case NSGreaterThanOrEqualToPredicateOperatorType: { + [[self class] assertKeyPathConstant:predicate]; + [self whereKey:left.keyPath greaterThanOrEqualTo:right.constantValue]; + return; + } + case NSInPredicateOperatorType: { + if (left.expressionType == NSKeyPathExpressionType && + right.expressionType == NSConstantValueExpressionType) { + if ([right.constantValue isKindOfClass:[PFQuery class]]) { + // Like "value IN subquery + [self whereKey:left.keyPath matchesQuery:right.constantValue]; + } else { + // Like "value IN %@", @{@1, @2, @3, @4} + [self whereKey:left.keyPath containedIn:right.constantValue]; + } + } else if (left.expressionType == NSKeyPathExpressionType && + right.expressionType == NSAggregateExpressionType && + [right.constantValue isKindOfClass:[NSArray class]]) { + // Like "value IN {1, 2, 3, 4}" + NSArray *constants = right.constantValue; + NSMutableArray *values = [NSMutableArray arrayWithCapacity:constants.count]; + for (NSExpression *expression in constants) { + [values addObject:expression.constantValue]; + } + [self whereKey:left.keyPath containedIn:values]; + } else if (right.expressionType == NSEvaluatedObjectExpressionType && + left.expressionType == NSKeyPathExpressionType) { + // Like "value IN SELF" + [self whereKeyExists:left.keyPath]; + } else { + [NSException raise:NSInternalInconsistencyException + format:@"An IN predicate must have a key path and a constant."]; + } + return; + } + case NSCustomSelectorPredicateOperatorType: { + if (predicate.customSelector != NSSelectorFromString(@"notContainedIn:")) { + [NSException raise:NSInternalInconsistencyException + format:@"Predicates with custom selectors are not supported."]; + } + + if (right.expressionType == NSConstantValueExpressionType && + left.expressionType == NSKeyPathExpressionType) { + if ([right.constantValue isKindOfClass:[PFQuery class]]) { + // Like "NOT (value IN subquery)" + [self whereKey:left.keyPath doesNotMatchQuery:right.constantValue]; + } else { + // Like "NOT (value in %@)", @{@1, @2, @3} + [self whereKey:left.keyPath notContainedIn:right.constantValue]; + } + } else if (left.expressionType == NSKeyPathExpressionType && + right.expressionType == NSAggregateExpressionType && + [right.constantValue isKindOfClass:[NSArray class]]) { + // Like "NOT (value IN {1, 2, 3, 4})" + NSArray *constants = right.constantValue; + NSMutableArray *values = [NSMutableArray arrayWithCapacity:constants.count]; + for (NSExpression *expression in constants) { + [values addObject:expression.constantValue]; + } + [self whereKey:left.keyPath notContainedIn:values]; + } else if (right.expressionType == NSEvaluatedObjectExpressionType && + left.expressionType == NSKeyPathExpressionType) { + // Like "NOT (value IN SELF)" + [self whereKeyDoesNotExist:left.keyPath]; + } else { + [NSException raise:NSInternalInconsistencyException + format:@"A NOT IN predicate must have a key path and a constant array."]; + } + return; + } + case NSBeginsWithPredicateOperatorType: { + [[self class] assertKeyPathConstant:predicate]; + [self whereKey:left.keyPath hasPrefix:right.constantValue]; + return; + } + case NSContainsPredicateOperatorType: { + [NSException raise:NSInternalInconsistencyException + format:@"Regex queries are not supported with " + "[PFQuery queryWithClassName:predicate:]. Please try to structure your " + "data so that you can use an equalTo or containedIn query."]; + } + case NSEndsWithPredicateOperatorType: { + [NSException raise:NSInternalInconsistencyException + format:@"Regex queries are not supported with " + "[PFQuery queryWithClassName:predicate:]. Please try to structure your " + "data so that you can use an equalTo or containedIn query."]; + } + case NSMatchesPredicateOperatorType: { + [NSException raise:NSInternalInconsistencyException + format:@"Regex queries are not supported with " + "[PFQuery queryWithClassName:predicate:]. Please try to structure your " + "data so that you can use an equalTo or containedIn query."]; + } + case NSLikePredicateOperatorType: { + [NSException raise:NSInternalInconsistencyException + format:@"LIKE is not supported by PFQuery."]; + } + default: { + [NSException raise:NSInternalInconsistencyException + format:@"This comparison predicate is not supported. (%zd)", predicate.predicateOperatorType]; + } + } +} + +/*! + Creates a PFQuery with the constraints given by predicate. + This method assumes the predicate has already been normalized. + */ ++ (instancetype)queryWithClassName:(NSString *)className normalizedPredicate:(NSPredicate *)predicate { + if ([predicate isKindOfClass:[NSComparisonPredicate class]]) { + PFQuery *query = [self queryWithClassName:className]; + [query whereComparisonPredicate:(NSComparisonPredicate *)predicate]; + return query; + } else if ([predicate isKindOfClass:[NSCompoundPredicate class]]) { + NSCompoundPredicate *compound = (NSCompoundPredicate *)predicate; + switch (compound.compoundPredicateType) { + case NSAndPredicateType: { + PFQuery *query = nil; + NSMutableArray *subpredicates = [NSMutableArray array]; + // If there's an OR query in here, we'll start with it. + for (NSPredicate *subpredicate in compound.subpredicates) { + if ([subpredicate isKindOfClass:[NSCompoundPredicate class]] && + ((NSCompoundPredicate *)subpredicate).compoundPredicateType == NSOrPredicateType) { + if (query) { + [NSException raise:NSInternalInconsistencyException + format:@"A query had 2 ORs in an AND after normalization. %@", + predicate]; + } + query = [self queryWithClassName:className normalizedPredicate:subpredicate]; + } else { + [subpredicates addObject:subpredicate]; + } + } + // If there was no OR query, then start with an empty query. + if (!query) { + query = [self queryWithClassName:className]; + } + for (NSPredicate *subpredicate in subpredicates) { + if (![subpredicate isKindOfClass:[NSComparisonPredicate class]]) { + // This should never happen. + [NSException raise:NSInternalInconsistencyException + format:@"A predicate had a non-comparison predicate inside an AND " + "after normalization. %@", predicate]; + } + NSComparisonPredicate *comparison = (NSComparisonPredicate *)subpredicate; + [query whereComparisonPredicate:comparison]; + } + return query; + } + case NSOrPredicateType: { + NSMutableArray *subqueries = [NSMutableArray arrayWithCapacity:compound.subpredicates.count]; + if (compound.subpredicates.count > 4) { + [NSException raise:NSInternalInconsistencyException + format:@"This query is too complex. It had an OR with >4 subpredicates " + "after normalization."]; + } + for (NSPredicate *subpredicate in compound.subpredicates) { + [subqueries addObject:[self queryWithClassName:className normalizedPredicate:subpredicate]]; + } + return [self orQueryWithSubqueries:subqueries]; + } + default: { + // This should never happen. + [NSException raise:NSInternalInconsistencyException + format:@"A predicate had a NOT after normalization. %@", predicate]; + return nil; + } + } + } else { + [NSException raise:NSInternalInconsistencyException format:@"Unknown predicate type."]; + return nil; + } +} + +///-------------------------------------- +#pragma mark - Helpers +///-------------------------------------- + +- (void)checkIfCommandIsRunning { + @synchronized (self) { + if (_cancellationTokenSource) { + [NSException raise:NSInternalInconsistencyException + format:@"This query has an outstanding network connection. You have to wait until it's done."]; + } + } +} + +- (void)markAsRunning:(BFCancellationTokenSource *)source { + [self checkIfCommandIsRunning]; + @synchronized (self) { + _cancellationTokenSource = source; + } +} + +///-------------------------------------- +#pragma mark - Constructors +///-------------------------------------- + ++ (instancetype)queryWithClassName:(NSString *)className { + return [[self alloc] initWithClassName:className]; +} + ++ (instancetype)queryWithClassName:(NSString *)className predicate:(NSPredicate *)predicate { + if (!predicate) { + return [self queryWithClassName:className]; + } + + NSPredicate *normalizedPredicate = [PFQueryUtilities predicateByNormalizingPredicate:predicate]; + return [self queryWithClassName:className normalizedPredicate:normalizedPredicate]; +} + ++ (instancetype)orQueryWithSubqueries:(NSArray *)queries { + NSMutableArray *array = [NSMutableArray array]; + NSString *className = nil; + for (id object in queries) { + PFParameterAssert([object isKindOfClass:[PFQuery class]], + @"All elements should be instances of `PFQuery` class."); + + PFQuery *query = (PFQuery *)object; + if (!className) { + className = query.parseClassName; + } else { + PFParameterAssert([query.parseClassName isEqualToString:className], + @"All sub queries of an `or` query should be on the same class."); + } + + [array addObject:query]; + } + PFQuery *query = [self queryWithClassName:className]; + [query.state setEqualityConditionWithObject:array forKey:PFQueryKeyOr]; + return query; +} + +///-------------------------------------- +#pragma mark - Get with objectId +///-------------------------------------- + ++ (PFObject *)getObjectOfClass:(NSString *)objectClass objectId:(NSString *)objectId { + return [self getObjectOfClass:objectClass objectId:objectId error:nil]; +} + ++ (PFObject *)getObjectOfClass:(NSString *)objectClass + objectId:(NSString *)objectId + error:(NSError **)error { + PFQuery *query = [self queryWithClassName:objectClass]; + return [query getObjectWithId:objectId error:error]; +} + +// TODO (hallucinogen): we may want to remove this in 2.0 since we can just use the static counterpart +- (PFObject *)getObjectWithId:(NSString *)objectId { + return [self getObjectWithId:objectId error:nil]; +} + +- (PFObject *)getObjectWithId:(NSString *)objectId error:(NSError **)error { + return [[self getObjectInBackgroundWithId:objectId] waitForResult:error]; +} + +- (BFTask *)getObjectInBackgroundWithId:(NSString *)objectId { + if ([objectId length] == 0) { + return [BFTask taskWithResult:nil]; + } + + PFConsistencyAssert(self.state.cachePolicy != kPFCachePolicyCacheThenNetwork, + @"kPFCachePolicyCacheThenNetwork can only be used with methods that have a callback."); + return [self _getObjectWithIdAsync:objectId cachePolicy:self.state.cachePolicy after:nil]; +} + +- (void)getObjectInBackgroundWithId:(NSString *)objectId block:(PFObjectResultBlock)block { + @synchronized (self) { + if (!self.state.queriesLocalDatastore && self.state.cachePolicy == kPFCachePolicyCacheThenNetwork) { + BFTask *cacheTask = [[self _getObjectWithIdAsync:objectId + cachePolicy:kPFCachePolicyCacheOnly + after:nil] thenCallBackOnMainThreadAsync:block]; + [[self _getObjectWithIdAsync:objectId + cachePolicy:kPFCachePolicyNetworkOnly + after:cacheTask] thenCallBackOnMainThreadAsync:block]; + } else { + [[self getObjectInBackgroundWithId:objectId] thenCallBackOnMainThreadAsync:block]; + } + } +} + +- (void)getObjectInBackgroundWithId:(NSString *)objectId target:(id)target selector:(SEL)selector { + [self getObjectInBackgroundWithId:objectId block:^(PFObject *object, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:object object:error]; + }]; +} + +- (BFTask *)_getObjectWithIdAsync:(NSString *)objectId cachePolicy:(PFCachePolicy)cachePolicy after:(BFTask *)task { + self.limit = 1; + self.skip = 0; + [self.state removeAllConditions]; + [self.state setEqualityConditionWithObject:objectId forKey:@"objectId"]; + + PFQueryState *state = [self _queryStateCopyWithCachePolicy:cachePolicy]; + return [[self _findObjectsAsyncForQueryState:state + after:task] continueWithSuccessBlock:^id(BFTask *task) { + NSArray *objects = task.result; + if (objects.count == 0) { + return [BFTask taskWithError:[PFQueryUtilities objectNotFoundError]]; + } + + return [BFTask taskWithResult:objects.lastObject]; + }]; +} + +///-------------------------------------- +#pragma mark - Get Users (Deprecated) +///-------------------------------------- + ++ (PFUser *)getUserObjectWithId:(NSString *)objectId { + return [self getUserObjectWithId:objectId error:nil]; +} + ++ (PFUser *)getUserObjectWithId:(NSString *)objectId error:(NSError **)error { + PFQuery *query = [PFUser query]; + PFUser *object = (PFUser *)[query getObjectWithId:objectId error:error]; + + return object; +} + ++ (instancetype)queryForUser { + return [PFUser query]; +} + +///-------------------------------------- +#pragma mark - Find Objects +///-------------------------------------- + +- (NSArray *)findObjects { + return [self findObjects:nil]; +} + +- (NSArray *)findObjects:(NSError **)error { + return [[self findObjectsInBackground] waitForResult:error]; +} + +- (BFTask *)findObjectsInBackground { + PFQueryState *state = [self _queryStateCopy]; + + PFConsistencyAssert(state.cachePolicy != kPFCachePolicyCacheThenNetwork, + @"kPFCachePolicyCacheThenNetwork can only be used with methods that have a callback."); + return [self _findObjectsAsyncForQueryState:state after:nil]; +} + +- (void)findObjectsInBackgroundWithBlock:(PFQueryArrayResultBlock)block { + @synchronized (self) { + if (!self.state.queriesLocalDatastore && self.state.cachePolicy == kPFCachePolicyCacheThenNetwork) { + PFQueryState *cacheQueryState = [self _queryStateCopyWithCachePolicy:kPFCachePolicyCacheOnly]; + BFTask *cacheTask = [[self _findObjectsAsyncForQueryState:cacheQueryState + after:nil] thenCallBackOnMainThreadAsync:block]; + + PFQueryState *remoteQueryState = [self _queryStateCopyWithCachePolicy:kPFCachePolicyNetworkOnly]; + [[self _findObjectsAsyncForQueryState:remoteQueryState + after:cacheTask] thenCallBackOnMainThreadAsync:block]; + } else { + [[self findObjectsInBackground] thenCallBackOnMainThreadAsync:block]; + } + } +} + +- (void)findObjectsInBackgroundWithTarget:(id)target selector:(SEL)selector { + [self findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:objects object:error]; + }]; +} + +- (BFTask *)_findObjectsAsyncForQueryState:(PFQueryState *)queryState after:(BFTask *)previous { + BFCancellationTokenSource *cancellationTokenSource = _cancellationTokenSource; + if (!previous) { + cancellationTokenSource = [BFCancellationTokenSource cancellationTokenSource]; + [self markAsRunning:cancellationTokenSource]; + } + + BFTask *start = (previous ?: [BFTask taskWithResult:nil]); + + [self _validateQueryState]; + @weakify(self); + return [[[start continueWithBlock:^id(BFTask *task) { + @strongify(self); + return [[self class] _getCurrentUserForQueryState:queryState]; + }] continueWithBlock:^id(BFTask *task) { + @strongify(self); + PFUser *user = task.result; + return [[[self class] queryController] findObjectsAsyncForQueryState:queryState + withCancellationToken:cancellationTokenSource.token + user:user]; + }] continueWithBlock:^id(BFTask *task) { + @strongify(self); + if (!self) { + return task; + } + @synchronized (self) { + if (_cancellationTokenSource == cancellationTokenSource) { + _cancellationTokenSource = nil; + } + } + return task; + }]; +} + +///-------------------------------------- +#pragma mark - Get Object +///-------------------------------------- + +- (PFObject *)getFirstObject { + return [self getFirstObject:nil]; +} + +- (PFObject *)getFirstObject:(NSError **)error { + return [[self getFirstObjectInBackground] waitForResult:error]; +} + +- (BFTask *)getFirstObjectInBackground { + PFConsistencyAssert(self.state.cachePolicy != kPFCachePolicyCacheThenNetwork, + @"kPFCachePolicyCacheThenNetwork can only be used with methods that have a callback."); + return [self _getFirstObjectAsyncWithCachePolicy:self.state.cachePolicy after:nil]; +} + +- (void)getFirstObjectInBackgroundWithBlock:(PFObjectResultBlock)block { + @synchronized (self) { + if (!self.state.queriesLocalDatastore && self.state.cachePolicy == kPFCachePolicyCacheThenNetwork) { + BFTask *cacheTask = [[self _getFirstObjectAsyncWithCachePolicy:kPFCachePolicyCacheOnly + after:nil] thenCallBackOnMainThreadAsync:block]; + [[self _getFirstObjectAsyncWithCachePolicy:kPFCachePolicyNetworkOnly + after:cacheTask] thenCallBackOnMainThreadAsync:block]; + } else { + [[self getFirstObjectInBackground] thenCallBackOnMainThreadAsync:block]; + } + } +} + +- (void)getFirstObjectInBackgroundWithTarget:(id)target selector:(SEL)selector { + [self getFirstObjectInBackgroundWithBlock:^(PFObject *result, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:result object:error]; + }]; +} + +- (BFTask *)_getFirstObjectAsyncWithCachePolicy:(PFCachePolicy)cachePolicy after:(BFTask *)task { + self.limit = 1; + + PFQueryState *state = [self _queryStateCopyWithCachePolicy:cachePolicy]; + return [[self _findObjectsAsyncForQueryState:state after:task] continueWithSuccessBlock:^id(BFTask *task) { + NSArray *objects = task.result; + if (objects.count == 0) { + return [BFTask taskWithError:[PFQueryUtilities objectNotFoundError]]; + } + + return [BFTask taskWithResult:objects.lastObject]; + }]; +} + +///-------------------------------------- +#pragma mark - Count Objects +///-------------------------------------- + +- (NSInteger)countObjects { + return [self countObjects:nil]; +} + +- (NSInteger)countObjects:(NSError **)error { + NSNumber *count = [[self countObjectsInBackground] waitForResult:error]; + if (!count) { + // TODO: (nlutsenko) It's really weird that we are inconsistent in sync vs async methods. + // Leaving for now since some devs might be relying on this. + return -1; + } + + return [count integerValue]; +} + +- (BFTask *)countObjectsInBackground { + PFConsistencyAssert(self.state.cachePolicy != kPFCachePolicyCacheThenNetwork, + @"kPFCachePolicyCacheThenNetwork can only be used with methods that have a callback."); + return [self _countObjectsAsyncForQueryState:[self _queryStateCopy] after:nil]; +} + +- (void)countObjectsInBackgroundWithTarget:(id)target selector:(SEL)selector { + [self countObjectsInBackgroundWithBlock:^(int number, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:@(number) object:error]; + }]; +} + +- (void)countObjectsInBackgroundWithBlock:(PFIntegerResultBlock)block { + PFIdResultBlock callback = nil; + if (block) { + callback = ^(id result, NSError *error) { + block([result intValue], error); + }; + } + + @synchronized (self) { + if (!self.state.queriesLocalDatastore && self.state.cachePolicy == kPFCachePolicyCacheThenNetwork) { + PFQueryState *cacheQueryState = [self _queryStateCopyWithCachePolicy:kPFCachePolicyCacheOnly]; + BFTask *cacheTask = [[self _countObjectsAsyncForQueryState:cacheQueryState + after:nil] thenCallBackOnMainThreadAsync:callback]; + + PFQueryState *remoteQueryState = [self _queryStateCopyWithCachePolicy:kPFCachePolicyNetworkOnly]; + [[self _countObjectsAsyncForQueryState:remoteQueryState + after:cacheTask] thenCallBackOnMainThreadAsync:callback]; + } else { + [[self countObjectsInBackground] thenCallBackOnMainThreadAsync:callback]; + } + } +} + +- (BFTask *)_countObjectsAsyncForQueryState:(PFQueryState *)queryState after:(BFTask *)previousTask { + BFCancellationTokenSource *cancellationTokenSource = _cancellationTokenSource; + if (!previousTask) { + cancellationTokenSource = [BFCancellationTokenSource cancellationTokenSource]; + [self markAsRunning:cancellationTokenSource]; + } + + BFTask *start = (previousTask ?: [BFTask taskWithResult:nil]); + + [self _validateQueryState]; + @weakify(self); + return [[[start continueWithBlock:^id(BFTask *task) { + return [[self class] _getCurrentUserForQueryState:queryState]; + }] continueWithBlock:^id(BFTask *task) { + @strongify(self); + PFUser *user = task.result; + return [[[self class] queryController] countObjectsAsyncForQueryState:queryState + withCancellationToken:cancellationTokenSource.token + user:user]; + }] continueWithBlock:^id(BFTask *task) { + @synchronized(self) { + if (_cancellationTokenSource == cancellationTokenSource) { + _cancellationTokenSource = nil; + } + } + return task; + }]; +} + +///-------------------------------------- +#pragma mark - Cancel +///-------------------------------------- + +- (void)cancel { + @synchronized (self) { + if (_cancellationTokenSource) { + [_cancellationTokenSource cancel]; + _cancellationTokenSource = nil; + } + } +} + +///-------------------------------------- +#pragma mark - NSCopying +///-------------------------------------- + +- (instancetype)copyWithZone:(NSZone *)zone { + return [[[self class] allocWithZone:zone] initWithState:self.state]; +} + +///-------------------------------------- +#pragma mark NSObject +///-------------------------------------- + +- (NSUInteger)hash { + return [self.state hash]; +} + +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + + if (![object isKindOfClass:[PFQuery class]]) { + return NO; + } + + return [self.state isEqual:((PFQuery *)object).state]; +} + +///-------------------------------------- +#pragma mark - Caching +///-------------------------------------- + +- (BOOL)hasCachedResult { + return [[[self class] queryController] hasCachedResultForQueryState:self.state + sessionToken:[PFUser currentSessionToken]]; +} + +- (void)clearCachedResult { + [[[self class] queryController] clearCachedResultForQueryState:self.state + sessionToken:[PFUser currentSessionToken]]; +} + ++ (void)clearAllCachedResults { + [[self queryController] clearAllCachedResults]; +} + +///-------------------------------------- +#pragma mark - Check Pinning Status +///-------------------------------------- + +/*! + If `enabled` is YES, raise an exception if OfflineStore is not enabled. If `enabled` is NO, raise + an exception if OfflineStore is enabled. + */ +- (void)_checkPinningEnabled:(BOOL)enabled { + BOOL loaded = [Parse _currentManager].offlineStoreLoaded; + if (enabled) { + PFConsistencyAssert(loaded, @"Method requires Pinning enabled."); + } else { + PFConsistencyAssert(!loaded, @"Method not allowed when Pinning is enabled."); + } +} + +///-------------------------------------- +#pragma mark - Query Source +///-------------------------------------- + +- (instancetype)fromLocalDatastore { + return [self fromPinWithName:nil]; +} + +- (instancetype)fromPin { + return [self fromPinWithName:PFObjectDefaultPin]; +} + +- (instancetype)fromPinWithName:(NSString *)name { + [self _checkPinningEnabled:YES]; + [self checkIfCommandIsRunning]; + + self.state.queriesLocalDatastore = YES; + self.state.localDatastorePinName = [name copy]; + + return self; +} + +- (instancetype)ignoreACLs { + [self _checkPinningEnabled:YES]; + [self checkIfCommandIsRunning]; + + self.state.shouldIgnoreACLs = YES; + + return self; +} + +///-------------------------------------- +#pragma mark - Query State +///-------------------------------------- + +- (PFQueryState *)_queryStateCopy { + return [self.state copy]; +} + +- (PFQueryState *)_queryStateCopyWithCachePolicy:(PFCachePolicy)cachePolicy { + PFMutableQueryState *state = [self.state mutableCopy]; + state.cachePolicy = cachePolicy; + return state; +} + +- (void)_validateQueryState { + PFConsistencyAssert(self.state.queriesLocalDatastore || !self.state.shouldIgnoreACLs, + @"`ignoreACLs` can only be used with Local Datastore queries."); +} + +///-------------------------------------- +#pragma mark - Query Controller +///-------------------------------------- + ++ (PFQueryController *)queryController { + return [Parse _currentManager].coreManager.queryController; +} + +///-------------------------------------- +#pragma mark - User +///-------------------------------------- + ++ (BFTask *)_getCurrentUserForQueryState:(PFQueryState *)state { + if (state.shouldIgnoreACLs) { + return [BFTask taskWithResult:nil]; + } + return [[Parse _currentManager].coreManager.currentUserController getCurrentObjectAsync]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/PFRelation.h b/BreakingBad/Pods/Parse/Parse/PFRelation.h new file mode 100644 index 0000000..af64ff9 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFRelation.h @@ -0,0 +1,58 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import +#import +#import + +PF_ASSUME_NONNULL_BEGIN + +/*! + The `PFRelation` class that is used to access all of the children of a many-to-many relationship. + Each instance of `PFRelation` is associated with a particular parent object and key. + */ +@interface PFRelation : NSObject + +/*! + @abstract The name of the class of the target child objects. + */ +@property (PF_NULLABLE_PROPERTY nonatomic, copy) NSString *targetClass; + +///-------------------------------------- +/// @name Accessing Objects +///-------------------------------------- + +/*! + @abstract Returns a object that can be used to get objects in this relation. + */ +- (PF_NULLABLE PFQuery *)query; + +///-------------------------------------- +/// @name Modifying Relations +///-------------------------------------- + +/*! + @abstract Adds a relation to the passed in object. + + @param object A object to add relation to. + */ +- (void)addObject:(PFObject *)object; + +/*! + @abstract Removes a relation to the passed in object. + + @param object A object to add relation to. + */ +- (void)removeObject:(PFObject *)object; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/PFRelation.m b/BreakingBad/Pods/Parse/Parse/PFRelation.m new file mode 100644 index 0000000..a6fdb68 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFRelation.m @@ -0,0 +1,236 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRelation.h" +#import "PFRelationPrivate.h" + +#import + +#import "PFAssert.h" +#import "PFFieldOperation.h" +#import "PFInternalUtils.h" +#import "PFMacros.h" +#import "PFMutableRelationState.h" +#import "PFObjectPrivate.h" +#import "PFQueryPrivate.h" + +NSString *const PFRelationKeyClassName = @"className"; +NSString *const PFRelationKeyType = @"__type"; +NSString *const PFRelationKeyObjects = @"objects"; + +@interface PFRelation () { + // + // Use this queue as follows: + // Because state is defined as an atomic property, there's no need to use the queue if you're only reading from + // self.state once during the method. + // + // If you ever need to use self.state more than once, either take a copy at the top of the function, or use a + // dispatch_sync block. + // + // If you are ever changing the state variable, you should use dispatch_sync. + // + dispatch_queue_t _stateAccessQueue; +} + +@property (atomic, copy) PFMutableRelationState *state; + +@end + +@implementation PFRelation + +@dynamic targetClass; + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _stateAccessQueue = dispatch_queue_create("com.parse.relation.state.access", DISPATCH_QUEUE_SERIAL); + _state = [[PFMutableRelationState alloc] init]; + + return self; +} + +- (instancetype)initWithParent:(PFObject *)newParent key:(NSString *)newKey { + self = [self init]; + if (!self) return nil; + + _state.parent = newParent; + _state.key = newKey; + + return self; +} + +- (instancetype)initWithTargetClass:(NSString *)newTargetClass { + self = [self init]; + if (!self) return nil; + + _state.targetClass = newTargetClass; + + return self; +} + +- (instancetype)initFromDictionary:(NSDictionary *)dictionary withDecoder:(PFDecoder *)decoder { + self = [self init]; + if (!self) return nil; + + NSArray *array = dictionary[PFRelationKeyObjects]; + NSMutableSet *known = [[NSMutableSet alloc] initWithCapacity:array.count]; + + // Decode the result + for (id encodedObject in array) { + [known addObject:[decoder decodeObject:encodedObject]]; + } + + _state.targetClass = dictionary[PFRelationKeyClassName]; + [_state.knownObjects setSet:known]; + + return self; +} + ++ (PFRelation *)relationForObject:(PFObject *)parent forKey:(NSString *)key { + return [[PFRelation alloc] initWithParent:parent key:key]; +} + ++ (PFRelation *)relationWithTargetClass:(NSString *)targetClass { + return [[PFRelation alloc] initWithTargetClass:targetClass]; +} + ++ (PFRelation *)relationFromDictionary:(NSDictionary *)dictionary withDecoder:(PFDecoder *)decoder { + return [[PFRelation alloc] initFromDictionary:dictionary withDecoder:decoder]; +} + +- (void)ensureParentIs:(PFObject *)someParent andKeyIs:(NSString *)someKey { + pf_sync_with_throw(_stateAccessQueue, ^{ + __strong PFObject *sparent = self.state.parent; + + if (!sparent) { + sparent = self.state.parent = someParent; + } + + if (!self.state.key) { + self.state.key = someKey; + } + + PFConsistencyAssert(sparent == someParent, + @"Internal error. One PFRelation retrieved from two different PFObjects."); + + PFConsistencyAssert([self.state.key isEqualToString:someKey], + @"Internal error. One PFRelation retrieved from two different keys."); + }); +} + +- (NSString *)description { + PFRelationState *state = [self.state copy]; + + return [NSString stringWithFormat:@"<%@: %p, %p.%@ -> %@>", + [self class], + self, + state.parent, + state.key, + state.targetClass]; +} + +- (PFQuery *)query { + PFRelationState *state = [self.state copy]; + __strong PFObject *sparent = state.parent; + + PFQuery *query = nil; + if (state.targetClass) { + query = [PFQuery queryWithClassName:state.targetClass]; + } else { + query = [PFQuery queryWithClassName:state.parentClassName]; + [query redirectClassNameForKey:state.key]; + } + if (sparent) { + [query whereRelatedToObject:sparent fromKey:state.key]; + } else if (state.parentClassName) { + PFObject *object = [PFObject objectWithoutDataWithClassName:state.parentClassName + objectId:state.parentObjectId]; + [query whereRelatedToObject:object fromKey:state.key]; + } + + return query; +} + +- (NSString *)targetClass { + return self.state.targetClass; +} + +- (void)setTargetClass:(NSString *)targetClass { + dispatch_sync(_stateAccessQueue, ^{ + self.state.targetClass = targetClass; + }); +} + +- (void)addObject:(PFObject *)object { + pf_sync_with_throw(_stateAccessQueue, ^{ + PFRelationState *state = self.state; + + PFRelationOperation *op = [PFRelationOperation addRelationToObjects:@[ object ]]; + [state.parent performOperation:op forKey:state.key]; + + self.state.targetClass = op.targetClass; + [self.state.knownObjects addObject:object]; + }); +} + +- (void)removeObject:(PFObject *)object { + pf_sync_with_throw(_stateAccessQueue, ^{ + PFRelationState *state = self.state; + + PFRelationOperation *op = [PFRelationOperation removeRelationToObjects:@[ object ]]; + [state.parent performOperation:op forKey:state.key]; + + self.state.targetClass = op.targetClass; + [self.state.knownObjects removeObject:object]; + }); +} + +- (NSDictionary *)encodeIntoDictionary { + PFRelationState *state = [self.state copy]; + NSMutableArray *encodedObjects = [NSMutableArray arrayWithCapacity:state.knownObjects.count]; + + for (PFObject *knownObject in state.knownObjects) { + [encodedObjects addObject:[[PFPointerObjectEncoder objectEncoder] encodeObject:knownObject]]; + } + + return @{ + PFRelationKeyType : @"Relation", + PFRelationKeyClassName : state.targetClass, + PFRelationKeyObjects : encodedObjects + }; +} + +/*! + Returns true if and only if this object was ever known to be in the relation. + This is used for offline caching. + */ +- (BOOL)_hasKnownObject:(PFObject *)object { + __block BOOL results = NO; + + dispatch_sync(_stateAccessQueue, ^{ + results = [self.state.knownObjects containsObject:object]; + }); + + return results; +} + +- (void)_addKnownObject:(PFObject *)object { + dispatch_sync(_stateAccessQueue, ^{ + [self.state.knownObjects addObject:object]; + }); +} + +- (void)_removeKnownObject:(PFObject *)object { + dispatch_sync(_stateAccessQueue, ^{ + [self.state.knownObjects removeObject:object]; + }); +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/PFRole.h b/BreakingBad/Pods/Parse/Parse/PFRole.h new file mode 100644 index 0000000..18d21c9 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFRole.h @@ -0,0 +1,100 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import +#import +#import + +PF_ASSUME_NONNULL_BEGIN + +/*! + The `PFRole` class represents a Role on the Parse server. + `PFRoles` represent groupings of objects for the purposes of granting permissions + (e.g. specifying a for a ). + Roles are specified by their sets of child users and child roles, + all of which are granted any permissions that the parent role has. + + Roles must have a name (which cannot be changed after creation of the role), and must specify an ACL. + */ +@interface PFRole : PFObject + +///-------------------------------------- +/// @name Creating a New Role +///-------------------------------------- + +/*! + @abstract Constructs a new `PFRole` with the given name. + If no default ACL has been specified, you must provide an ACL for the role. + + @param name The name of the Role to create. + */ +- (instancetype)initWithName:(NSString *)name; + +/*! + @abstract Constructs a new `PFRole` with the given name. + + @param name The name of the Role to create. + @param acl The ACL for this role. Roles must have an ACL. + */ +- (instancetype)initWithName:(NSString *)name acl:(PF_NULLABLE PFACL *)acl; + +/*! + @abstract Constructs a new `PFRole` with the given name. + + @discussion If no default ACL has been specified, you must provide an ACL for the role. + + @param name The name of the Role to create. + */ ++ (instancetype)roleWithName:(NSString *)name; + +/*! + @abstract Constructs a new `PFRole` with the given name. + + @param name The name of the Role to create. + @param acl The ACL for this role. Roles must have an ACL. + */ ++ (instancetype)roleWithName:(NSString *)name acl:(PF_NULLABLE PFACL *)acl; + +///-------------------------------------- +/// @name Role-specific Properties +///-------------------------------------- + +/*! + @abstract Gets or sets the name for a role. + + @discussion This value must be set before the role has been saved to the server, + and cannot be set once the role has been saved. + + @warning A role's name can only contain alphanumeric characters, `_`, `-`, and spaces. + */ +@property (nonatomic, copy) NSString *name; + +/*! + @abstract Gets the for the objects that are direct children of this role. + + @discussion These users are granted any privileges that this role has been granted + (e.g. read or write access through ACLs). You can add or remove users from + the role through this relation. + */ +@property (nonatomic, strong, readonly) PFRelation *users; + +/*! + @abstract Gets the for the `PFRole` objects that are direct children of this role. + + @discussion These roles' users are granted any privileges that this role has been granted + (e.g. read or write access through ACLs). You can add or remove child roles + from this role through this relation. + */ +@property (nonatomic, strong, readonly) PFRelation *roles; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/PFRole.m b/BreakingBad/Pods/Parse/Parse/PFRole.m new file mode 100644 index 0000000..bceec77 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFRole.m @@ -0,0 +1,91 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFRole.h" + +#import + +#import "PFAssert.h" +#import "PFObject+Subclass.h" +#import "PFObjectPrivate.h" +#import "PFQuery.h" + +@implementation PFRole + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithName:(NSString *)name { + return [self initWithName:name acl:nil]; +} + +- (instancetype)initWithName:(NSString *)name acl:(PFACL *)acl { + self = [super init]; + if (!self) return nil; + + self.name = name; + self.ACL = acl; + + return self; +} + ++ (instancetype)roleWithName:(NSString *)name { + return [[self alloc] initWithName:name]; +} + ++ (instancetype)roleWithName:(NSString *)name acl:(PFACL *)acl { + return [[self alloc] initWithName:name acl:acl]; +} + +///-------------------------------------- +#pragma mark - Role-specific Properties +///-------------------------------------- + +@dynamic name; + +// Dynamic synthesizers would use objectForKey, not relationForKey +- (PFRelation *)roles { + return [self relationForKey:@keypath(PFRole, roles)]; +} + +- (PFRelation *)users { + return [self relationForKey:@keypath(PFRole, users)]; +} + +///-------------------------------------- +#pragma mark - PFObject Overrides +///-------------------------------------- + +- (void)setObject:(id)object forKey:(NSString *)key { + if ([key isEqualToString:@keypath(PFRole, name)]) { + PFConsistencyAssert(!self.objectId, @"A role's name can only be set before it has been saved."); + PFParameterAssert([object isKindOfClass:[NSString class]], @"A role's name must be an NSString."); + PFParameterAssert([object rangeOfString:@"^[0-9a-zA-Z_\\- ]+$" options:NSRegularExpressionSearch].location != NSNotFound, + @"A role's name can only contain alphanumeric characters, _, -, and spaces."); + } + [super setObject:object forKey:key]; +} + +- (BFTask *)saveInBackground { + PFConsistencyAssert(self.objectId || self.name, @"New roles must specify a name."); + return [super saveInBackground]; +} + +// Validates a class name. We override this to only allow the role class name. ++ (void)_assertValidInstanceClassName:(NSString *)className { + PFParameterAssert([className isEqualToString:[self parseClassName]], + @"Cannot initialize a PFRole with a custom class name."); +} + ++ (NSString *)parseClassName { + return @"_Role"; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/PFSession.h b/BreakingBad/Pods/Parse/Parse/PFSession.h new file mode 100644 index 0000000..3b5c00c --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFSession.h @@ -0,0 +1,52 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import +#import + +PF_ASSUME_NONNULL_BEGIN + +@class PFSession; + +typedef void(^PFSessionResultBlock)(PFSession *PF_NULLABLE_S session, NSError *PF_NULLABLE_S error); + +/*! + `PFSession` is a local representation of a session. + This class is a subclass of a , + and retains the same functionality as any other subclass of . + */ +@interface PFSession : PFObject + +/*! + @abstract The session token string for this session. + */ +@property (PF_NULLABLE_PROPERTY nonatomic, copy, readonly) NSString *sessionToken; + +/*! + *Asynchronously* fetches a `PFSession` object related to the current user. + + @returns A task that is `completed` with an instance of `PFSession` class or is `faulted` if the operation fails. + */ ++ (BFTask PF_GENERIC(PFSession *)*)getCurrentSessionInBackground; + +/*! + *Asynchronously* fetches a `PFSession` object related to the current user. + + @param block The block to execute when the operation completes. + It should have the following argument signature: `^(PFSession *session, NSError *error)`. + */ ++ (void)getCurrentSessionInBackgroundWithBlock:(PF_NULLABLE PFSessionResultBlock)block; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/PFSession.m b/BreakingBad/Pods/Parse/Parse/PFSession.m new file mode 100644 index 0000000..a4af8e8 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFSession.m @@ -0,0 +1,106 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFSession.h" + +#import "BFTask+Private.h" +#import "PFAssert.h" +#import "PFCoreManager.h" +#import "PFCurrentUserController.h" +#import "PFObject+Subclass.h" +#import "PFObjectPrivate.h" +#import "PFSessionController.h" +#import "PFUserPrivate.h" +#import "Parse_Private.h" + +static BOOL _PFSessionIsWritablePropertyForKey(NSString *key) { + static NSSet *protectedKeys; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + protectedKeys = [NSSet setWithObjects: + @"sessionToken", + @"restricted", + @"createdWith", + @"installationId", + @"user", + @"expiresAt", nil]; + }); + return ![protectedKeys containsObject:key]; +} + +@implementation PFSession + +@dynamic sessionToken; + +///-------------------------------------- +#pragma mark - PFSubclassing +///-------------------------------------- + ++ (NSString *)parseClassName { + return @"_Session"; +} + +- (BOOL)needsDefaultACL { + return NO; +} + +///-------------------------------------- +#pragma mark - Class +///-------------------------------------- + ++ (void)_assertValidInstanceClassName:(NSString *)className { + PFParameterAssert([className isEqualToString:[PFSession parseClassName]], + @"Cannot initialize a PFSession with a custom class name."); +} + +#pragma mark Get Current Session + ++ (BFTask *)getCurrentSessionInBackground { + PFCurrentUserController *controller = [[self class] currentUserController]; + return [[controller getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { + NSString *sessionToken = task.result; + return [[self sessionController] getCurrentSessionAsyncWithSessionToken:sessionToken]; + }]; +} + ++ (void)getCurrentSessionInBackgroundWithBlock:(PFSessionResultBlock)block { + [[self getCurrentSessionInBackground] thenCallBackOnMainThreadAsync:block]; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (void)setObject:(id)object forKey:(NSString *)key { + PFParameterAssert(_PFSessionIsWritablePropertyForKey(key), + @"Can't change the '%@' field of a PFSession.", key); + [super setObject:object forKey:key]; +} + +- (void)removeObjectForKey:(NSString *)key { + PFParameterAssert(_PFSessionIsWritablePropertyForKey(key), + @"Can't remove the '%@' field of a PFSession.", key); + [super removeObjectForKey:key]; +} + +- (void)removeObjectsInArray:(NSArray *)objects forKey:(NSString *)key { + PFParameterAssert(_PFSessionIsWritablePropertyForKey(key), + @"Can't remove any object from '%@' field of a PFSession.", key); + [super removeObjectsInArray:objects forKey:key]; +} + +///-------------------------------------- +#pragma mark - Session Controller +///-------------------------------------- + ++ (PFSessionController *)sessionController { + return [Parse _currentManager].coreManager.sessionController; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/PFSubclassing.h b/BreakingBad/Pods/Parse/Parse/PFSubclassing.h new file mode 100644 index 0000000..c07743d --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFSubclassing.h @@ -0,0 +1,87 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +@class PFQuery PF_GENERIC(PFGenericObject : PFObject *); + +PF_ASSUME_NONNULL_BEGIN + +/*! + If a subclass of conforms to `PFSubclassing` and calls , + Parse framework will be able to use that class as the native class for a Parse cloud object. + + Classes conforming to this protocol should subclass and + include `PFObject+Subclass.h` in their implementation file. + This ensures the methods in the Subclass category of are exposed in its subclasses only. + */ +@protocol PFSubclassing + +/*! + @abstract Constructs an object of the most specific class known to implement . + + @discussion This method takes care to help subclasses be subclassed themselves. + For example, `[PFUser object]` returns a by default but will return an + object of a registered subclass instead if one is known. + A default implementation is provided by which should always be sufficient. + + @returns Returns the object that is instantiated. + */ ++ (instancetype)object; + +/*! + @abstract Creates a reference to an existing PFObject for use in creating associations between PFObjects. + + @discussion Calling <[PFObject isDataAvailable]> on this object will return `NO` + until <[PFObject fetchIfNeeded]> has been called. No network request will be made. + A default implementation is provided by PFObject which should always be sufficient. + + @param objectId The object id for the referenced object. + + @returns A new without data. + */ ++ (instancetype)objectWithoutDataWithObjectId:(PF_NULLABLE NSString *)objectId; + +/*! + @abstract The name of the class as seen in the REST API. + */ ++ (NSString *)parseClassName; + +/*! + @abstract Create a query which returns objects of this type. + + @discussion A default implementation is provided by which should always be sufficient. + */ ++ (PF_NULLABLE PFQuery *)query; + +/*! + @abstract Returns a query for objects of this type with a given predicate. + + @discussion A default implementation is provided by which should always be sufficient. + + @param predicate The predicate to create conditions from. + + @returns An instance of . + + @see [PFQuery queryWithClassName:predicate:] + */ ++ (PF_NULLABLE PFQuery *)queryWithPredicate:(PF_NULLABLE NSPredicate *)predicate; + +/*! + @abstract Lets Parse know this class should be used to instantiate all objects with class type . + + @warning This method must be called before <[Parse setApplicationId:clientKey:]> + */ ++ (void)registerSubclass; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/PFUser.h b/BreakingBad/Pods/Parse/Parse/PFUser.h new file mode 100644 index 0000000..3ae63f6 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFUser.h @@ -0,0 +1,519 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import +#import +#import + +PF_ASSUME_NONNULL_BEGIN + +typedef void(^PFUserSessionUpgradeResultBlock)(NSError *PF_NULLABLE_S error); +typedef void(^PFUserLogoutResultBlock)(NSError *PF_NULLABLE_S error); + +@class PFQuery PF_GENERIC(PFGenericObject : PFObject *); +@protocol PFUserAuthenticationDelegate; + +/*! + The `PFUser` class is a local representation of a user persisted to the Parse Data. + This class is a subclass of a , and retains the same functionality of a , + but also extends it with various user specific methods, like authentication, signing up, and validation uniqueness. + + Many APIs responsible for linking a `PFUser` with Facebook or Twitter have been deprecated in favor of dedicated + utilities for each social network. See , and for more information. + */ + +@interface PFUser : PFObject + +///-------------------------------------- +/// @name Accessing the Current User +///-------------------------------------- + +/*! + @abstract Gets the currently logged in user from disk and returns an instance of it. + + @returns Returns a `PFUser` that is the currently logged in user. If there is none, returns `nil`. + */ ++ (PF_NULLABLE instancetype)currentUser; + +/*! + @abstract The session token for the `PFUser`. + + @discussion This is set by the server upon successful authentication. + */ +@property (PF_NULLABLE_PROPERTY nonatomic, copy, readonly) NSString *sessionToken; + +/*! + @abstract Whether the `PFUser` was just created from a request. + + @discussion This is only set after a Facebook or Twitter login. + */ +@property (assign, readonly) BOOL isNew; + +/*! + @abstract Whether the user is an authenticated object for the device. + + @discussion An authenticated `PFUser` is one that is obtained via a or method. + An authenticated object is required in order to save (with altered values) or delete it. + + @returns Returns whether the user is authenticated. + */ +- (BOOL)isAuthenticated; + +///-------------------------------------- +/// @name Creating a New User +///-------------------------------------- + +/*! + @abstract Creates a new `PFUser` object. + + @returns Returns a new `PFUser` object. + */ ++ (instancetype)user; + +/*! + @abstract Enables automatic creation of anonymous users. + + @discussion After calling this method, will always have a value. + The user will only be created on the server once the user has been saved, + or once an object with a relation to that user or an ACL that refers to the user has been saved. + + @warning <[PFObject saveEventually]> will not work on if an item being saved has a relation + to an automatic user that has never been saved. + */ ++ (void)enableAutomaticUser; + +/*! + @abstract The username for the `PFUser`. + */ +@property (PF_NULLABLE_PROPERTY nonatomic, strong) NSString *username; + +/**! + @abstract The password for the `PFUser`. + + @discussion This will not be filled in from the server with the password. + It is only meant to be set. + */ +@property (PF_NULLABLE_PROPERTY nonatomic, strong) NSString *password; + +/*! + @abstract The email for the `PFUser`. + */ +@property (PF_NULLABLE_PROPERTY nonatomic, strong) NSString *email; + +/*! + @abstract Signs up the user *synchronously*. + + @discussion This will also enforce that the username isn't already taken. + + @warning Make sure that password and username are set before calling this method. + + @returns Returns `YES` if the sign up was successful, otherwise `NO`. + */ +- (BOOL)signUp PF_SWIFT_UNAVAILABLE; + +/*! + @abstract Signs up the user *synchronously*. + + @discussion This will also enforce that the username isn't already taken. + + @warning Make sure that password and username are set before calling this method. + + @param error Error object to set on error. + + @returns Returns whether the sign up was successful. + */ +- (BOOL)signUp:(NSError **)error; + +/*! + @abstract Signs up the user *asynchronously*. + + @discussion This will also enforce that the username isn't already taken. + + @warning Make sure that password and username are set before calling this method. + + @returns The task, that encapsulates the work being done. + */ +- (BFTask PF_GENERIC(NSNumber *)*)signUpInBackground; + +/*! + @abstract Signs up the user *asynchronously*. + + @discussion This will also enforce that the username isn't already taken. + + @warning Make sure that password and username are set before calling this method. + + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + */ +- (void)signUpInBackgroundWithBlock:(PF_NULLABLE PFBooleanResultBlock)block; + +/*! + @abstract Signs up the user *asynchronously*. + + @discussion This will also enforce that the username isn't already taken. + + @warning Make sure that password and username are set before calling this method. + + @param target Target object for the selector. + @param selector The selector that will be called when the asynchrounous request is complete. + It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. + `error` will be `nil` on success and set if there was an error. + `[result boolValue]` will tell you whether the call succeeded or not. + */ +- (void)signUpInBackgroundWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; + +///-------------------------------------- +/// @name Logging In +///-------------------------------------- + +/*! + @abstract Makes a *synchronous* request to login a user with specified credentials. + + @discussion Returns an instance of the successfully logged in `PFUser`. + This also caches the user locally so that calls to will use the latest logged in user. + + @param username The username of the user. + @param password The password of the user. + + @returns Returns an instance of the `PFUser` on success. + If login failed for either wrong password or wrong username, returns `nil`. + */ ++ (PF_NULLABLE instancetype)logInWithUsername:(NSString *)username + password:(NSString *)password PF_SWIFT_UNAVAILABLE; + +/*! + @abstract Makes a *synchronous* request to login a user with specified credentials. + + @discussion Returns an instance of the successfully logged in `PFUser`. + This also caches the user locally so that calls to will use the latest logged in user. + + @param username The username of the user. + @param password The password of the user. + @param error The error object to set on error. + + @returns Returns an instance of the `PFUser` on success. + If login failed for either wrong password or wrong username, returns `nil`. + */ ++ (PF_NULLABLE instancetype)logInWithUsername:(NSString *)username + password:(NSString *)password + error:(NSError **)error; + +/*! + @abstract Makes an *asynchronous* request to login a user with specified credentials. + + @discussion Returns an instance of the successfully logged in `PFUser`. + This also caches the user locally so that calls to will use the latest logged in user. + + @param username The username of the user. + @param password The password of the user. + + @returns The task, that encapsulates the work being done. + */ ++ (BFTask PF_GENERIC(__kindof PFUser *)*)logInWithUsernameInBackground:(NSString *)username + password:(NSString *)password; + +/*! + @abstract Makes an *asynchronous* request to login a user with specified credentials. + + @discussion Returns an instance of the successfully logged in `PFUser`. + This also caches the user locally so that calls to will use the latest logged in user. + + @param username The username of the user. + @param password The password of the user. + @param target Target object for the selector. + @param selector The selector that will be called when the asynchrounous request is complete. + It should have the following signature: `(void)callbackWithUser:(PFUser *)user error:(NSError *)error`. + */ ++ (void)logInWithUsernameInBackground:(NSString *)username + password:(NSString *)password + target:(PF_NULLABLE_S id)target + selector:(PF_NULLABLE_S SEL)selector; + +/*! + @abstract Makes an *asynchronous* request to log in a user with specified credentials. + + @discussion Returns an instance of the successfully logged in `PFUser`. + This also caches the user locally so that calls to will use the latest logged in user. + + @param username The username of the user. + @param password The password of the user. + @param block The block to execute. + It should have the following argument signature: `^(PFUser *user, NSError *error)`. + */ ++ (void)logInWithUsernameInBackground:(NSString *)username + password:(NSString *)password + block:(PF_NULLABLE PFUserResultBlock)block; + +///-------------------------------------- +/// @name Becoming a User +///-------------------------------------- + +/*! + @abstract Makes a *synchronous* request to become a user with the given session token. + + @discussion Returns an instance of the successfully logged in `PFUser`. + This also caches the user locally so that calls to will use the latest logged in user. + + @param sessionToken The session token for the user. + + @returns Returns an instance of the `PFUser` on success. + If becoming a user fails due to incorrect token, it returns `nil`. + */ ++ (PF_NULLABLE instancetype)become:(NSString *)sessionToken PF_SWIFT_UNAVAILABLE; + +/*! + @abstract Makes a *synchronous* request to become a user with the given session token. + + @discussion Returns an instance of the successfully logged in `PFUser`. + This will also cache the user locally so that calls to will use the latest logged in user. + + @param sessionToken The session token for the user. + @param error The error object to set on error. + + @returns Returns an instance of the `PFUser` on success. + If becoming a user fails due to incorrect token, it returns `nil`. + */ ++ (PF_NULLABLE instancetype)become:(NSString *)sessionToken error:(NSError **)error; + +/*! + @abstract Makes an *asynchronous* request to become a user with the given session token. + + @discussion Returns an instance of the successfully logged in `PFUser`. + This also caches the user locally so that calls to will use the latest logged in user. + + @param sessionToken The session token for the user. + + @returns The task, that encapsulates the work being done. + */ ++ (BFTask PF_GENERIC(__kindof PFUser *)*)becomeInBackground:(NSString *)sessionToken; + +/*! + @abstract Makes an *asynchronous* request to become a user with the given session token. + + @discussion Returns an instance of the successfully logged in `PFUser`. This also caches the user locally + so that calls to will use the latest logged in user. + + @param sessionToken The session token for the user. + @param block The block to execute. + The block should have the following argument signature: `^(PFUser *user, NSError *error)`. + */ ++ (void)becomeInBackground:(NSString *)sessionToken block:(PF_NULLABLE PFUserResultBlock)block; + +/*! + @abstract Makes an *asynchronous* request to become a user with the given session token. + + @discussion Returns an instance of the successfully logged in `PFUser`. This also caches the user locally + so that calls to will use the latest logged in user. + + @param sessionToken The session token for the user. + @param target Target object for the selector. + @param selector The selector that will be called when the asynchrounous request is complete. + It should have the following signature: `(void)callbackWithUser:(PFUser *)user error:(NSError *)error`. + */ ++ (void)becomeInBackground:(NSString *)sessionToken + target:(PF_NULLABLE_S id)target + selector:(PF_NULLABLE_S SEL)selector; + +///-------------------------------------- +/// @name Revocable Session +///-------------------------------------- + +/*! + @abstract Enables revocable sessions and migrates the currentUser session token to use revocable session if needed. + + @discussion This method is required if you want to use APIs + and you application's 'Require Revocable Session' setting is turned off on `http://parse.com` app settings. + After returned `BFTask` completes - class and APIs will be available for use. + + @returns An instance of `BFTask` that is completed when revocable + sessions are enabled and currentUser token is migrated. + */ ++ (BFTask *)enableRevocableSessionInBackground; + +/*! + @abstract Enables revocable sessions and upgrades the currentUser session token to use revocable session if needed. + + @discussion This method is required if you want to use APIs + and legacy sessions are enabled in your application settings on `http://parse.com/`. + After returned `BFTask` completes - class and APIs will be available for use. + + @param block Block that will be called when revocable sessions are enabled and currentUser token is migrated. + */ ++ (void)enableRevocableSessionInBackgroundWithBlock:(PF_NULLABLE PFUserSessionUpgradeResultBlock)block; + +///-------------------------------------- +/// @name Logging Out +///-------------------------------------- + +/*! + @abstract *Synchronously* logs out the currently logged in user on disk. + */ ++ (void)logOut; + +/*! + @abstract *Asynchronously* logs out the currently logged in user. + + @discussion This will also remove the session from disk, log out of linked services + and all future calls to will return `nil`. This is preferrable to using , + unless your code is already running from a background thread. + + @returns An instance of `BFTask`, that is resolved with `nil` result when logging out completes. + */ ++ (BFTask *)logOutInBackground; + +/*! + @abstract *Asynchronously* logs out the currently logged in user. + + @discussion This will also remove the session from disk, log out of linked services + and all future calls to will return `nil`. This is preferrable to using , + unless your code is already running from a background thread. + + @param block A block that will be called when logging out completes or fails. + */ ++ (void)logOutInBackgroundWithBlock:(PF_NULLABLE PFUserLogoutResultBlock)block; + +///-------------------------------------- +/// @name Requesting a Password Reset +///-------------------------------------- + +/*! + @abstract *Synchronously* Send a password reset request for a specified email. + + @discussion If a user account exists with that email, an email will be sent to that address + with instructions on how to reset their password. + + @param email Email of the account to send a reset password request. + + @returns Returns `YES` if the reset email request is successful. `NO` - if no account was found for the email address. + */ ++ (BOOL)requestPasswordResetForEmail:(NSString *)email PF_SWIFT_UNAVAILABLE; + +/*! + @abstract *Synchronously* send a password reset request for a specified email and sets an error object. + + @discussion If a user account exists with that email, an email will be sent to that address + with instructions on how to reset their password. + + @param email Email of the account to send a reset password request. + @param error Error object to set on error. + @returns Returns `YES` if the reset email request is successful. `NO` - if no account was found for the email address. + */ ++ (BOOL)requestPasswordResetForEmail:(NSString *)email error:(NSError **)error; + +/*! + @abstract Send a password reset request asynchronously for a specified email and sets an + error object. If a user account exists with that email, an email will be sent to + that address with instructions on how to reset their password. + @param email Email of the account to send a reset password request. + @returns The task, that encapsulates the work being done. + */ ++ (BFTask PF_GENERIC(NSNumber *)*)requestPasswordResetForEmailInBackground:(NSString *)email; + +/*! + @abstract Send a password reset request *asynchronously* for a specified email. + + @discussion If a user account exists with that email, an email will be sent to that address + with instructions on how to reset their password. + + @param email Email of the account to send a reset password request. + @param block The block to execute. + It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. + */ ++ (void)requestPasswordResetForEmailInBackground:(NSString *)email + block:(PF_NULLABLE PFBooleanResultBlock)block; + +/*! + @abstract Send a password reset request *asynchronously* for a specified email and sets an error object. + + @discussion If a user account exists with that email, an email will be sent to that address + with instructions on how to reset their password. + + @param email Email of the account to send a reset password request. + @param target Target object for the selector. + @param selector The selector that will be called when the asynchronous request is complete. + It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. + `error` will be `nil` on success and set if there was an error. + `[result boolValue]` will tell you whether the call succeeded or not. + */ ++ (void)requestPasswordResetForEmailInBackground:(NSString *)email + target:(PF_NULLABLE_S id)target + selector:(PF_NULLABLE_S SEL)selector; + +///-------------------------------------- +/// @name Third-party Authentication +///-------------------------------------- + +/*! + @abstract Registers a third party authentication delegate. + + @note This method shouldn't be invoked directly unless developing a third party authentication library. + @see PFUserAuthenticationDelegate + + @param delegate The third party authenticaiton delegate to be registered. + @param authType The name of the type of third party authentication source. + */ ++ (void)registerAuthenticationDelegate:(id)delegate forAuthType:(NSString *)authType; + +/*! + @abstract Logs in a user with third party authentication credentials. + + @note This method shouldn't be invoked directly unless developing a third party authentication library. + @see PFUserAuthenticationDelegate + + @param authType The name of the type of third party authentication source. + @param authData The user credentials of the third party authentication source. + + @returns A `BFTask` that is resolved to `PFUser` when logging in completes. + */ ++ (BFTask PF_GENERIC(PFUser *) *)logInWithAuthTypeInBackground:(NSString *)authType authData:(NSDictionary *)authData; + +/*! + @abstract Links this user to a third party authentication library. + + @note This method shouldn't be invoked directly unless developing a third party authentication library. + @see PFUserAuthenticationDelegate + + @param authType The name of the type of third party authentication source. + @param authData The user credentials of the third party authentication source. + + @returns A `BFTask` that is resolved to `@YES` if linking succeeds. + */ +- (BFTask PF_GENERIC(NSNumber *) *)linkWithAuthTypeInBackground:(NSString *)authType authData:(NSDictionary *)authData; + +/*! + @abstract Unlinks this user from a third party authentication library. + + @note This method shouldn't be invoked directly unless developing a third party authentication library. + @see PFUserAuthenticationDelegate + + @param authType The name of the type of third party authentication source. + + @returns A `BFTask` that is resolved to `@YES` if unlinking succeeds. + */ +- (BFTask PF_GENERIC(NSNumber *) *)unlinkWithAuthTypeInBackground:(NSString *)authType; + +/*! + @abstract Indicates whether this user is linked with a third party authentication library of a specific type. + + @note This method shouldn't be invoked directly unless developing a third party authentication library. + @see PFUserAuthenticationDelegate + + @param authType The name of the type of third party authentication source. + + @returns `YES` if the user is linked with a provider, otherwise `NO`. + */ +- (BOOL)isLinkedWithAuthType:(NSString *)authType; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/PFUser.m b/BreakingBad/Pods/Parse/Parse/PFUser.m new file mode 100644 index 0000000..d7a6eac --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFUser.m @@ -0,0 +1,1225 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "PFUser.h" +#import "PFUserPrivate.h" + +#import +#import + +#import "BFTask+Private.h" +#import "PFACLPrivate.h" +#import "PFAnonymousAuthenticationProvider.h" +#import "PFAnonymousUtils_Private.h" +#import "PFAssert.h" +#import "PFCommandResult.h" +#import "PFCommandRunning.h" +#import "PFCoreManager.h" +#import "PFCurrentUserController.h" +#import "PFDecoder.h" +#import "PFErrorUtilities.h" +#import "PFFileManager.h" +#import "PFKeychainStore.h" +#import "PFMultiProcessFileLockController.h" +#import "PFMutableUserState.h" +#import "PFObject+Subclass.h" +#import "PFObjectConstants.h" +#import "PFObjectFilePersistenceController.h" +#import "PFObjectPrivate.h" +#import "PFOfflineStore.h" +#import "PFOperationSet.h" +#import "PFQueryPrivate.h" +#import "PFRESTUserCommand.h" +#import "PFSessionUtilities.h" +#import "PFTaskQueue.h" +#import "PFUserAuthenticationController.h" +#import "PFUserConstants.h" +#import "PFUserController.h" +#import "PFUserFileCodingLogic.h" +#import "Parse_Private.h" + +NSString *const PFUserCurrentUserFileName = @"currentUser"; +NSString *const PFUserCurrentUserPinName = @"_currentUser"; +NSString *const PFUserCurrentUserKeychainItemName = @"currentUser"; + +static BOOL _PFUserIsWritablePropertyForKey(NSString *key) { + return ![PFUserSessionTokenRESTKey isEqualToString:key]; +} + +static BOOL _PFUserIsRemovablePropertyForKey(NSString *key) { + return _PFUserIsWritablePropertyForKey(key) && ![PFUserUsernameRESTKey isEqualToString:key]; +} + +@interface PFUser () + +@property (nonatomic, copy) PFUserState *_state; + +@end + +@implementation PFUser (Private) + +static BOOL revocableSessionEnabled_; + +- (void)setDefaultValues { + [super setDefaultValues]; + self.isCurrentUser = NO; +} + +- (BOOL)needsDefaultACL { + return NO; +} + +///-------------------------------------- +#pragma mark - Current User +///-------------------------------------- + +// Returns the session token for the current user. ++ (NSString *)currentSessionToken { + return [[self _getCurrentUserSessionTokenAsync] waitForResult:nil withMainThreadWarning:NO]; +} + ++ (BFTask *)_getCurrentUserSessionTokenAsync { + return [[self currentUserController] getCurrentUserSessionTokenAsync]; +} + +///-------------------------------------- +#pragma mark - PFObject +///-------------------------------------- + +#pragma mark Validation + +- (BFTask PF_GENERIC(PFVoid) *)_validateDeleteAsync { + return [[super _validateDeleteAsync] continueWithSuccessBlock:^id(BFTask PF_GENERIC(PFVoid) *task) { + if (!self.isAuthenticated) { + NSError *error = [PFErrorUtilities errorWithCode:kPFErrorUserCannotBeAlteredWithoutSession + message:@"User cannot be deleted unless they have been authenticated."]; + return [BFTask taskWithError:error]; + } + return nil; + }]; +} + +- (BFTask PF_GENERIC(PFVoid) *)_validateSaveEventuallyAsync { + return [[super _validateSaveEventuallyAsync] continueWithSuccessBlock:^id(BFTask PF_GENERIC(PFVoid) *task) { + if ([self isDirtyForKey:PFUserPasswordRESTKey]) { + NSError *error = [PFErrorUtilities errorWithCode:kPFErrorOperationForbidden + message:@"Unable to saveEventually a PFUser with dirty password."]; + return [BFTask taskWithError:error]; + } + return nil; + }]; +} + +#pragma mark Else + +- (NSString *)displayClassName { + if ([self isMemberOfClass:[PFUser class]]) { + return @"PFUser"; + } + return NSStringFromClass([self class]); +} + +// Validates a class name. We override this to only allow the user class name. ++ (void)_assertValidInstanceClassName:(NSString *)className { + PFParameterAssert([className isEqualToString:[PFUser parseClassName]], + @"Cannot initialize a PFUser with a custom class name."); +} + +// Checks the properties on the object before saving. +- (void)_checkSaveParametersWithCurrentUser:(PFUser *)currentUser { + @synchronized ([self lock]) { + PFConsistencyAssert(self.objectId || self.isLazy, + @"User cannot be saved unless they are already signed up. Call signUp first."); + + PFConsistencyAssert([self _isAuthenticatedWithCurrentUser:currentUser] || + [self.objectId isEqualToString:currentUser.objectId], + @"User cannot be saved unless they have been authenticated via logIn or signUp", nil); + } +} + +// Checks the properties on the object before signUp. +- (BFTask *)_validateSignUpAsync { + return [BFTask taskFromExecutor:[BFExecutor defaultExecutor] withBlock:^id{ + NSError *error = nil; + @synchronized (self.lock) { + if (!self.username) { + error = [PFErrorUtilities errorWithCode:kPFErrorUsernameMissing + message:@"Cannot sign up without a username."]; + } else if (!self.password) { + error = [PFErrorUtilities errorWithCode:kPFErrorUserPasswordMissing + message:@"Cannot sign up without a password."]; + } else if (![self isDirty:NO] || self.objectId) { + error = [PFErrorUtilities errorWithCode:kPFErrorUsernameTaken + message:@"Cannot sign up an existing user."]; + } + } + if (error) { + return [BFTask taskWithError:error]; + } + return nil; + }]; +} + +- (NSMutableDictionary *)_convertToDictionaryForSaving:(PFOperationSet *)changes + withObjectEncoder:(PFEncoder *)encoder { + @synchronized ([self lock]) { + NSMutableDictionary *serialized = [super _convertToDictionaryForSaving:changes withObjectEncoder:encoder]; + if ([self.authData count] > 0) { + serialized[PFUserAuthDataRESTKey] = [self.authData copy]; + } + return serialized; + } +} + +- (BFTask *)handleSaveResultAsync:(NSDictionary *)result { + return [[super handleSaveResultAsync:result] continueWithSuccessBlock:^id(BFTask *saveTask) { + if (self.isCurrentUser) { + [self cleanUpAuthData]; + PFCurrentUserController *controller = [[self class] currentUserController]; + return [[controller saveCurrentObjectAsync:self] continueWithBlock:^id(BFTask *task) { + return saveTask.result; + }]; + } + return saveTask; + }]; +} + +///-------------------------------------- +#pragma mark - Sign Up +///-------------------------------------- + +- (PFRESTCommand *)_currentSignUpCommandForChanges:(PFOperationSet *)changes { + @synchronized ([self lock]) { + NSDictionary *parameters = [self _convertToDictionaryForSaving:changes + withObjectEncoder:[PFPointerObjectEncoder objectEncoder]]; + return [PFRESTUserCommand signUpUserCommandWithParameters:parameters + revocableSession:[[self class] _isRevocableSessionEnabled] + sessionToken:self.sessionToken]; + } +} + +///-------------------------------------- +#pragma mark - Service Login +///-------------------------------------- + +// Constructs the command for user_signup_or_login. This is used for Facebook, Twitter, and other linking services. +- (PFRESTCommand *)_currentServiceLoginCommandForChanges:(PFOperationSet *)changes { + @synchronized ([self lock]) { + NSDictionary *parameters = [self _convertToDictionaryForSaving:changes + withObjectEncoder:[PFPointerObjectEncoder objectEncoder]]; + return [PFRESTUserCommand serviceLoginUserCommandWithParameters:parameters + revocableSession:[[self class] _isRevocableSessionEnabled] + sessionToken:self.sessionToken]; + } +} + +- (BFTask *)_handleServiceLoginCommandResult:(PFCommandResult *)result { + return [BFTask taskFromExecutor:[BFExecutor defaultExecutor] withBlock:^id{ + NSDictionary *resultDictionary = result.result; + return [[self handleSaveResultAsync:resultDictionary] continueWithBlock:^id(BFTask *task) { + BOOL new = (result.httpResponse.statusCode == 201); // 201 means Created + @synchronized (self.lock) { + if (self._state.isNew != new) { + PFMutableUserState *state = [self._state mutableCopy]; + state.isNew = new; + self._state = state; + } + if (resultDictionary) { + self.isLazy = NO; + + // Serialize the object to disk so we can later access it via currentUser + PFCurrentUserController *controller = [[self class] currentUserController]; + return [[controller saveCurrentObjectAsync:self] continueAsyncWithBlock:^id(BFTask *task) { + [self.saveDelegate invoke:self error:nil]; + return self; + }]; + } + return [BFTask taskWithResult:self]; + } + }]; + }]; +} + +// Override the save result handling with custom user functionality +- (BFTask *)handleSignUpResultAsync:(BFTask *)task { + @synchronized ([self lock]) { + PFCommandResult *commandResult = task.result; + NSDictionary *result = commandResult.result; + BFTask *signUpTask = task; + + // Bail-out early, but still make sure that super class handled the result + if (task.error || task.cancelled || task.exception) { + return [[super handleSaveResultAsync:nil] continueWithBlock:^id(BFTask *task) { + return signUpTask; + }]; + } + __block BOOL saveResult = NO; + return [[[super handleSaveResultAsync:result] continueWithBlock:^id(BFTask *task) { + saveResult = [task.result boolValue]; + if (saveResult) { + @synchronized (self.lock) { + // Save the session information + PFMutableUserState *state = [self._state mutableCopy]; + state.sessionToken = result[PFUserSessionTokenRESTKey]; + state.isNew = YES; + self._state = state; + self.isLazy = NO; + } + } + return signUpTask; + }] continueWithBlock:^id(BFTask *task) { + PFCurrentUserController *controller = [[self class] currentUserController]; + return [[controller saveCurrentObjectAsync:self] continueWithResult:@(saveResult)]; + }]; + } +} + +- (void)cleanUpAuthData { + @synchronized ([self lock]) { + for (NSString *key in [self.authData copy]) { + id linkData = [self.authData objectForKey:key]; + if (!linkData || linkData == [NSNull null]) { + [self.authData removeObjectForKey:key]; + [self.linkedServiceNames removeObject:key]; + + [[[[self class] authenticationController] restoreAuthenticationAsyncWithAuthData:nil + forAuthType:key] waitForResult:nil withMainThreadWarning:NO]; + } + } + } +} + +/*! + Copies special PFUser fields from another user. + */ +- (PFObject *)mergeFromObject:(PFUser *)other { + @synchronized ([self lock]) { + [super mergeFromObject:other]; + + if (self == other) { + // If they point to the same instance, then don't merge. + return self; + } + + PFMutableUserState *state = [self._state mutableCopy]; + state.sessionToken = other.sessionToken; + state.isNew = other._state.isNew; + self._state = state; + + [self.authData removeAllObjects]; + [self.authData addEntriesFromDictionary:other.authData]; + + [self.linkedServiceNames removeAllObjects]; + [self.linkedServiceNames unionSet:other.linkedServiceNames]; + + return self; + } +} + +/* + Merges custom fields from JSON associated with a PFUser: + { + "session_token": string, + "is_new": boolean, + "auth_data": { + "facebook": { + "id": string, + "access_token": string, + "expiration_date": string (represents date) + } + } + } + */ +- (void)_mergeFromServerWithResult:(NSDictionary *)result decoder:(PFDecoder *)decoder completeData:(BOOL)completeData { + @synchronized ([self lock]) { + // save the session token + + PFMutableUserState *state = [self._state mutableCopy]; + + NSString *newSessionToken = result[PFUserSessionTokenRESTKey]; + if (newSessionToken) { + // Save the session token + state.sessionToken = newSessionToken; + } + + self._state = state; + + // Merge the linked service metadata + NSDictionary *newAuthData = [decoder decodeObject:result[PFUserAuthDataRESTKey]]; + if (newAuthData) { + [self.authData removeAllObjects]; + [self.linkedServiceNames removeAllObjects]; + [newAuthData enumerateKeysAndObjectsUsingBlock:^(id key, id linkData, BOOL *stop) { + if (linkData != [NSNull null]) { + [self.authData setObject:linkData forKey:key]; + [self.linkedServiceNames addObject:key]; + [self synchronizeAuthDataWithAuthType:key]; + } else { + [self.authData removeObjectForKey:key]; + [self.linkedServiceNames removeObject:key]; + [self synchronizeAuthDataWithAuthType:key]; + } + }]; + } + + // Strip authData and sessionToken from the data, as those keys are saved in a custom way + NSMutableDictionary *serverData = [result mutableCopy]; + [serverData removeObjectForKey:PFUserSessionTokenRESTKey]; + [serverData removeObjectForKey:PFUserAuthDataRESTKey]; + + // The public fields are handled by the regular mergeFromServer + [super _mergeFromServerWithResult:serverData decoder:decoder completeData:completeData]; + } +} + +- (void)synchronizeAuthDataWithAuthType:(NSString *)authType { + @synchronized ([self lock]) { + if (!self.isCurrentUser) { + return; + } + + NSDictionary *data = self.authData[authType]; + BFTask *restoreTask = [[[self class] authenticationController] restoreAuthenticationAsyncWithAuthData:data + forAuthType:authType]; + [restoreTask waitForResult:nil withMainThreadWarning:NO]; + if (restoreTask.faulted || ![restoreTask.result boolValue]) { // TODO: (nlutsenko) Maybe chain this method? + [self unlinkWithAuthTypeInBackground:authType]; + } + } +} + +- (void)synchronizeAllAuthData { + @synchronized ([self lock]) { + // Ensures that all auth providers have auth data (e.g. access tokens, etc.) that matches this user. + if (self.authData) { + [self.authData enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + [self synchronizeAuthDataWithAuthType:key]; + }]; + } + } +} + +- (BFTask *)resolveLazinessAsync:(BFTask *)toAwait { + @synchronized ([self lock]) { + if (!self.isLazy) { + return [BFTask taskWithResult:self]; + } + if (self.linkedServiceNames.count == 0) { + // If there are no linked services, treat this like a sign-up. + return [[self signUpAsync:toAwait] continueAsyncWithSuccessBlock:^id(BFTask *task) { + self.isLazy = NO; + return self; + }]; + } + + // Otherwise, treat this as a SignUpOrLogIn + PFRESTCommand *command = [self _currentServiceLoginCommandForChanges:[self unsavedChanges]]; + [self startSave]; + + return [[toAwait continueAsyncWithBlock:^id(BFTask *task) { + return [[Parse _currentManager].commandRunner runCommandAsync:command withOptions:0]; + }] continueAsyncWithBlock:^id(BFTask *task) { + PFCommandResult *result = task.result; + + if (task.error || task.cancelled) { + // If there was an error, we want to roll forward the save changes, but return the original task. + return [[self _handleServiceLoginCommandResult:result] continueAsyncWithBlock:^id(BFTask *unused) { + // Return the original task, instead of the new one (in order to have a proper error) + return task; + }]; + } + + if ([result.httpResponse statusCode] == 201) { + return [self _handleServiceLoginCommandResult:result]; + } else { + // Otherwise, treat this as a fresh login, and switch the current user to the new user. + PFUser *newUser = [[self class] _objectFromDictionary:result.result + defaultClassName:[self parseClassName] + completeData:YES]; + @synchronized ([newUser lock]) { + [newUser startSave]; + return [newUser _handleServiceLoginCommandResult:result]; + } + } + }]; + } +} + +- (BFTask *)_logOutAsyncWithAuthType:(NSString *)authType { + return [[[self class] authenticationController] deauthenticateAsyncWithAuthType:authType]; +} + ++ (instancetype)logInLazyUserWithAuthType:(NSString *)authType authData:(NSDictionary *)authData { + PFUser *user = [self user]; + @synchronized ([user lock]) { + [user setIsCurrentUser:YES]; + user.isLazy = YES; + [user.authData setObject:authData forKey:authType]; + [user.linkedServiceNames addObject:authType]; + } + return user; +} + +- (BFTask *)signUpAsync:(BFTask *)toAwait { + PFUser *currentUser = [[self class] currentUser]; + NSString *token = currentUser.sessionToken; + @synchronized ([self lock]) { + if (self.objectId) { + // For anonymous users, there may be an objectId. Setting the userName + // will have removed the anonymous link and set the value in the authData + // object to [NSNull null], so we can just treat it like a save operation. + if (self.authData[PFAnonymousUserAuthenticationType] == [NSNull null]) { + return [self saveAsync:toAwait]; + } + + // Otherwise, return an error + NSError *error = [PFErrorUtilities errorWithCode:kPFErrorUsernameTaken + message:@"Cannot sign up a user that has already signed up."]; + return [BFTask taskWithError:error]; + } + + // If the operationSetQueue is has operation sets in it, then a save or signUp is in progress. + // If there is a signUp or save already in progress, don't allow another one to start. + if ([self _hasOutstandingOperations]) { + NSError *error = [PFErrorUtilities errorWithCode:kPFErrorUsernameTaken + message:@"Cannot sign up a user that is already signing up."]; + return [BFTask taskWithError:error]; + } + + return [[self _validateSignUpAsync] continueWithSuccessBlock:^id(BFTask *task) { + if (currentUser && [PFAnonymousUtils isLinkedWithUser:currentUser]) { + // self doesn't have any outstanding saves, so we can safely merge its operations + // into the current user. + + PFConsistencyAssert(!isCurrentUser, @"Attempt to merge currentUser with itself."); + + [self checkForChangesToMutableContainers]; + @synchronized ([currentUser lock]) { + NSString *oldUsername = [currentUser.username copy]; + NSString *oldPassword = [currentUser.password copy]; + NSArray *oldAnonymousData = currentUser.authData[PFAnonymousUserAuthenticationType]; + + [currentUser checkForChangesToMutableContainers]; + + // Move the changes to this object over to the currentUser object. + PFOperationSet *selfOperations = operationSetQueue[0]; + [operationSetQueue removeAllObjects]; + [operationSetQueue addObject:[[PFOperationSet alloc] init]]; + for (NSString *key in selfOperations) { + [currentUser setObject:[selfOperations objectForKey:key] forKey:key]; + } + + currentUser->dirty = YES; + currentUser.password = self.password; + currentUser.username = self.username; + + [self rebuildEstimatedData]; + [currentUser rebuildEstimatedData]; + + return [[[[currentUser saveInBackground] continueWithBlock:^id(BFTask *task) { + if (task.error || task.cancelled || task.exception) { + @synchronized ([currentUser lock]) { + if (oldUsername) { + currentUser.username = oldUsername; + } + currentUser.password = oldPassword; + [currentUser restoreAnonymity:oldAnonymousData]; + } + + @synchronized(self.lock) { + [operationSetQueue replaceObjectAtIndex:0 withObject:selfOperations]; + [self rebuildEstimatedData]; + } + } + return task; + }] continueWithSuccessBlock:^id(BFTask *task) { + if ([Parse _currentManager].offlineStoreLoaded) { + return [[Parse _currentManager].offlineStore deleteDataForObjectAsync:currentUser]; + } + return nil; + }] continueWithSuccessBlock:^id(BFTask *task) { + [self mergeFromObject:currentUser]; + PFCurrentUserController *controller = [[self class] currentUserController]; + return [[controller saveCurrentObjectAsync:self] continueWithResult:@YES]; + }]; + } + } + // Use a nil session token for objects saved during a signup. + BFTask *saveChildren = [self _saveChildrenInBackgroundWithCurrentUser:currentUser sessionToken:token]; + PFOperationSet *changes = [self unsavedChanges]; + [self startSave]; + + return [[[toAwait continueWithBlock:^id(BFTask *task) { + return saveChildren; + }] continueWithSuccessBlock:^id(BFTask *task) { + // We need to construct the signup command lazily, because saving the children + // may change the way the object itself is serialized. + PFRESTCommand *command = [self _currentSignUpCommandForChanges:changes]; + return [[Parse _currentManager].commandRunner runCommandAsync:command + withOptions:PFCommandRunningOptionRetryIfFailed]; + }] continueWithBlock:^id(BFTask *task) { + return [self handleSignUpResultAsync:task]; + }]; + }]; + } +} + +- (void)stripAnonymity { + @synchronized ([self lock]) { + if ([PFAnonymousUtils isLinkedWithUser:self]) { + NSString *authType = PFAnonymousUserAuthenticationType; + + [self.linkedServiceNames removeObject:authType]; + + if (self.objectId) { + self.authData[authType] = [NSNull null]; + } else { + [self.authData removeObjectForKey:authType]; + } + dirty = YES; + } + } +} + +- (void)restoreAnonymity:(id)anonymousData { + @synchronized ([self lock]) { + if (anonymousData && anonymousData != [NSNull null]) { + NSString *authType = PFAnonymousUserAuthenticationType; + [self.linkedServiceNames addObject:authType]; + self.authData[authType] = anonymousData; + } + } +} + +///-------------------------------------- +#pragma mark - Saving +///-------------------------------------- + +- (PFRESTCommand *)_constructSaveCommandForChanges:(PFOperationSet *)changes + sessionToken:(NSString *)token + objectEncoder:(PFEncoder *)encoder { + // If we are curent user - use the latest available session token, as it might have been changed since + // this command was enqueued. + if ([self isCurrentUser]) { + token = self.sessionToken; + } + return [super _constructSaveCommandForChanges:changes + sessionToken:token + objectEncoder:encoder]; +} + +///-------------------------------------- +#pragma mark - REST operations +///-------------------------------------- + +- (void)mergeFromRESTDictionary:(NSDictionary *)object withDecoder:(PFDecoder *)decoder { + @synchronized ([self lock]) { + NSMutableDictionary *restDictionary = [object mutableCopy]; + + PFMutableUserState *state = [self._state mutableCopy]; + if (object[PFUserSessionTokenRESTKey] != nil) { + state.sessionToken = object[PFUserSessionTokenRESTKey]; + [restDictionary removeObjectForKey:PFUserSessionTokenRESTKey]; + } + + if (object[PFUserAuthDataRESTKey] != nil) { + NSDictionary *newAuthData = object[PFUserAuthDataRESTKey]; + [newAuthData enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + self.authData[key] = obj; + if (obj != nil) { + [self.linkedServiceNames addObject:key]; + } + [self synchronizeAuthDataWithAuthType:key]; + }]; + + [restDictionary removeObjectForKey:PFUserAuthDataRESTKey]; + } + + self._state = state; + + [super mergeFromRESTDictionary:restDictionary withDecoder:decoder]; + } +} + +- (NSDictionary *)RESTDictionaryWithObjectEncoder:(PFEncoder *)objectEncoder + operationSetUUIDs:(NSArray **)operationSetUUIDs + state:(PFObjectState *)state + operationSetQueue:(NSArray *)queue { + @synchronized (self.lock) { + NSMutableArray *cleanQueue = [queue mutableCopy]; + [queue enumerateObjectsUsingBlock:^(PFOperationSet *operationSet, NSUInteger idx, BOOL *stop) { + // Remove operations for `password` field, to not let it persist to LDS. + if (operationSet[PFUserPasswordRESTKey]) { + operationSet = [operationSet copy]; + [operationSet removeObjectForKey:PFUserPasswordRESTKey]; + + cleanQueue[idx] = operationSet; + } + }]; + return [super RESTDictionaryWithObjectEncoder:objectEncoder + operationSetUUIDs:operationSetUUIDs + state:state + operationSetQueue:cleanQueue]; + } +} + +///-------------------------------------- +#pragma mark - Revocable Session +///-------------------------------------- + ++ (dispatch_queue_t)_revocableSessionSynchronizationQueue { + static dispatch_queue_t queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + queue = dispatch_queue_create("com.parse.user.revocableSession", DISPATCH_QUEUE_CONCURRENT); + }); + return queue; +} + ++ (BOOL)_isRevocableSessionEnabled { + __block BOOL value = NO; + dispatch_sync([self _revocableSessionSynchronizationQueue], ^{ + value = revocableSessionEnabled_; + }); + return value; +} + ++ (void)_setRevocableSessionEnabled:(BOOL)enabled { + dispatch_barrier_sync([self _revocableSessionSynchronizationQueue], ^{ + revocableSessionEnabled_ = enabled; + }); +} + ++ (BFTask *)_upgradeToRevocableSessionInBackground { + PFCurrentUserController *controller = [[self class] currentUserController]; + return [[controller getCurrentUserAsyncWithOptions:0] continueWithSuccessBlock:^id(BFTask *task) { + PFUser *currentUser = task.result; + NSString *sessionToken = currentUser.sessionToken; + + // Bail-out early if session token is already revocable. + if ([PFSessionUtilities isSessionTokenRevocable:sessionToken]) { + return [BFTask taskWithResult:currentUser]; + } + return [currentUser _upgradeToRevocableSessionInBackground]; + }]; +} + +- (BFTask *)_upgradeToRevocableSessionInBackground { + @weakify(self); + return [self.taskQueue enqueue:^BFTask *(BFTask *toAwait) { + return [toAwait continueAsyncWithBlock:^id(BFTask *task) { + @strongify(self); + + NSString *token = nil; + @synchronized(self.lock) { + token = self.sessionToken; + } + + // Check session token here as well, to make sure we didn't upgrade the token in between. + if ([PFSessionUtilities isSessionTokenRevocable:token]) { + return [BFTask taskWithResult:self]; + } + + PFRESTCommand *command = [PFRESTUserCommand upgradeToRevocableSessionCommandWithSessionToken:token]; + return [[[Parse _currentManager].commandRunner runCommandAsync:command + withOptions:0] continueWithSuccessBlock:^id(BFTask *task) { + NSDictionary *dictionary = [task.result result]; + PFSession *session = [PFSession _objectFromDictionary:dictionary + defaultClassName:[PFSession parseClassName] + completeData:YES]; + @synchronized(self.lock) { + PFMutableUserState *state = [self._state mutableCopy]; + state.sessionToken = session.sessionToken; + self._state = state; + } + PFCurrentUserController *controller = [[self class] currentUserController]; + return [controller saveCurrentObjectAsync:self]; + }]; + }]; + }]; +} + +///-------------------------------------- +#pragma mark - Data Source +///-------------------------------------- + ++ (PFObjectFileCodingLogic *)objectFileCodingLogic { + return [PFUserFileCodingLogic codingLogic]; +} + ++ (PFUserAuthenticationController *)authenticationController { + return [Parse _currentManager].coreManager.userAuthenticationController; +} + ++ (PFUserController *)userController { + return [Parse _currentManager].coreManager.userController; +} + +@end + +@implementation PFUser + +@dynamic _state; + +// PFUser: +@dynamic username; +@dynamic email; +@dynamic password; + +// PFUser (Private): +@dynamic authData; +@dynamic linkedServiceNames; +@dynamic isLazy; + ++ (NSString *)parseClassName { + return @"_User"; +} + ++ (instancetype)currentUser { + PFCurrentUserController *controller = [[self class] currentUserController]; + return [[controller getCurrentObjectAsync] waitForResult:nil withMainThreadWarning:NO]; +} + +- (BOOL)isCurrentUser { + @synchronized (self.lock) { + return isCurrentUser; + } +} + +- (void)setIsCurrentUser:(BOOL)aBool { + @synchronized (self.lock) { + isCurrentUser = aBool; + } +} + +///-------------------------------------- +#pragma mark - Log In +///-------------------------------------- + ++ (instancetype)logInWithUsername:(NSString *)username password:(NSString *)password { + return [self logInWithUsername:username password:password error:nil]; +} + ++ (instancetype)logInWithUsername:(NSString *)username password:(NSString *)password error:(NSError **)error { + return [[self logInWithUsernameInBackground:username password:password] waitForResult:error]; +} + ++ (BFTask *)logInWithUsernameInBackground:(NSString *)username password:(NSString *)password { + return [[self userController] logInCurrentUserAsyncWithUsername:username + password:password + revocableSession:[self _isRevocableSessionEnabled]]; +} + ++ (void)logInWithUsernameInBackground:(NSString *)username + password:(NSString *)password + block:(PFUserResultBlock)block { + [[self logInWithUsernameInBackground:username password:password] thenCallBackOnMainThreadAsync:block]; +} + ++ (void)logInWithUsernameInBackground:(NSString *)username + password:(NSString *)password + target:(id)target + selector:(SEL)selector { + [self logInWithUsernameInBackground:username password:password block:^(PFUser *user, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:user object:error]; + }]; +} + +///-------------------------------------- +#pragma mark - Third-party Authentication +///-------------------------------------- + ++ (void)registerAuthenticationDelegate:(id)delegate forAuthType:(NSString *)authType { + [[self authenticationController] registerAuthenticationDelegate:delegate forAuthType:authType]; +} + +#pragma mark Log In + ++ (BFTask *)logInWithAuthTypeInBackground:(NSString *)authType authData:(NSDictionary *)authData { + PFParameterAssert(authType, @"Can't log in without `authType`."); + PFParameterAssert(authData, @"Can't log in without `authData`."); + PFUserAuthenticationController *controller = [self authenticationController]; + PFConsistencyAssert([controller authenticationDelegateForAuthType:authType], + @"No registered authentication delegate found for `%@` authentication type. " + @"Register a delegate first via PFUser.registerAuthenticationDelegate(delegate, forAuthType:)", authType); + return [[self authenticationController] logInUserAsyncWithAuthType:authType authData:authData]; +} + +#pragma mark Link + +- (BFTask *)linkWithAuthTypeInBackground:(NSString *)authType authData:(NSDictionary *)newAuthData { + PFParameterAssert(authType, @"Can't link without `authType`."); + PFParameterAssert(authData, @"Can't link without `authData`."); + PFUserAuthenticationController *controller = [[self class] authenticationController]; + PFConsistencyAssert([controller authenticationDelegateForAuthType:authType], + @"No registered authentication delegate found for `%@` authentication type. " + @"Register a delegate first via PFUser.registerAuthenticationDelegate(delegate, forAuthType:)", authType); + + @weakify(self); + return [self.taskQueue enqueue:^BFTask *(BFTask *toAwait) { + return [toAwait continueWithBlock:^id(BFTask *task) { + @strongify(self); + + NSDictionary *oldAnonymousData = nil; + + @synchronized (self.lock) { + self.authData[authType] = newAuthData; + [self.linkedServiceNames addObject:authType]; + + oldAnonymousData = self.authData[PFAnonymousUserAuthenticationType]; + [self stripAnonymity]; + + dirty = YES; + } + + return [[self saveAsync:nil] continueAsyncWithBlock:^id(BFTask *task) { + if (task.result) { + [self synchronizeAuthDataWithAuthType:authType]; + } else { + @synchronized (self.lock) { + [self.authData removeObjectForKey:authType]; + [self.linkedServiceNames removeObject:authType]; + [self restoreAnonymity:oldAnonymousData]; + } + } + return task; + }]; + }]; + }]; +} + +#pragma mark Unlink + +- (BFTask *)unlinkWithAuthTypeInBackground:(NSString *)authType { + return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ + @synchronized (self.lock) { + if (self.authData[authType]) { + self.authData[authType] = [NSNull null]; + dirty = YES; + return [self saveInBackground]; + } + } + return @YES; + }]; +} + +#pragma mark Linked + +- (BOOL)isLinkedWithAuthType:(NSString *)authType { + PFParameterAssert(authType, @"Authentication type can't be `nil`."); + @synchronized(self.lock) { + return [self.linkedServiceNames containsObject:authType]; + } +} + +#pragma mark Private + ++ (void)_unregisterAuthenticationDelegateForAuthType:(NSString *)authType { + [[[self class] authenticationController] unregisterAuthenticationDelegateForAuthType:authType]; +} + +///-------------------------------------- +#pragma mark - Become +///-------------------------------------- + ++ (instancetype)become:(NSString *)sessionToken { + return [self become:sessionToken error:nil]; +} + ++ (instancetype)become:(NSString *)sessionToken error:(NSError **)error { + return [[self becomeInBackground:sessionToken] waitForResult:error]; +} + ++ (BFTask *)becomeInBackground:(NSString *)sessionToken { + PFParameterAssert(sessionToken, @"Session Token must be provided for login."); + return [[self userController] logInCurrentUserAsyncWithSessionToken:sessionToken]; +} + ++ (void)becomeInBackground:(NSString *)sessionToken block:(PFUserResultBlock)block { + [[self becomeInBackground:sessionToken] thenCallBackOnMainThreadAsync:block]; +} + ++ (void)becomeInBackground:(NSString *)sessionToken target:(id)target selector:(SEL)selector { + [self becomeInBackground:sessionToken block:^(PFUser *user, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:user object:error]; + }]; +} + +///-------------------------------------- +#pragma mark - Revocable Sessions +///-------------------------------------- + ++ (BFTask *)enableRevocableSessionInBackground { + if ([self _isRevocableSessionEnabled]) { + return [BFTask taskWithResult:nil]; + } + [self _setRevocableSessionEnabled:YES]; + return [self _upgradeToRevocableSessionInBackground]; +} + ++ (void)enableRevocableSessionInBackgroundWithBlock:(PFUserSessionUpgradeResultBlock)block { + [[self enableRevocableSessionInBackground] continueWithBlock:^id(BFTask *task) { + block(task.error); + return nil; + }]; +} + +///-------------------------------------- +#pragma mark - Request Password Reset +///-------------------------------------- + ++ (BOOL)requestPasswordResetForEmail:(NSString *)email { + return [self requestPasswordResetForEmail:email error:nil]; +} + ++ (BOOL)requestPasswordResetForEmail:(NSString *)email error:(NSError **)error { + return [[[self requestPasswordResetForEmailInBackground:email] waitForResult:error] boolValue]; +} + ++ (BFTask *)requestPasswordResetForEmailInBackground:(NSString *)email { + PFParameterAssert(email, @"Email should be provided to request password reset."); + return [[[self userController] requestPasswordResetAsyncForEmail:email] continueWithSuccessResult:@YES]; +} + ++ (void)requestPasswordResetForEmailInBackground:(NSString *)email block:(PFBooleanResultBlock)block { + [[self requestPasswordResetForEmailInBackground:email] thenCallBackOnMainThreadWithBoolValueAsync:block]; +} + ++ (void)requestPasswordResetForEmailInBackground:(NSString *)email target:(id)target selector:(SEL)selector { + [self requestPasswordResetForEmailInBackground:email block:^(BOOL succeeded, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; + }]; +} + +///-------------------------------------- +#pragma mark - Logging out +///-------------------------------------- + ++ (void)logOut { + [[self logOutInBackground] waitForResult:nil withMainThreadWarning:NO]; +} + ++ (BFTask *)logOutInBackground { + PFCurrentUserController *controller = [[self class] currentUserController]; + return [controller logOutCurrentUserAsync]; +} + ++ (void)logOutInBackgroundWithBlock:(PFUserLogoutResultBlock)block { + [[self logOutInBackground] continueWithExecutor:[BFExecutor mainThreadExecutor] withBlock:^id(BFTask *task) { + block(task.error); + return nil; + }]; +} + +- (BFTask *)_logOutAsync { + //TODO: (nlutsenko) Maybe add this to `taskQueue`? + + NSString *token = nil; + NSMutableArray *tasks = [NSMutableArray array]; + @synchronized(self.lock) { + [self.authData enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + BFTask *task = [self _logOutAsyncWithAuthType:key]; + [tasks addObject:task]; + }]; + + self.isCurrentUser = NO; + + token = [self.sessionToken copy]; + + PFMutableUserState *state = [self._state mutableCopy]; + state.sessionToken = nil; + self._state = state; + } + + BFTask *task = [BFTask taskForCompletionOfAllTasks:tasks]; + + if ([PFSessionUtilities isSessionTokenRevocable:token]) { + return [task continueWithExecutor:[BFExecutor defaultExecutor] withBlock:^id(BFTask *task) { + return [[[self class] userController] logOutUserAsyncWithSessionToken:token]; + }]; + } + return task; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (void)setObject:(id)object forKey:(NSString *)key { + PFParameterAssert(_PFUserIsWritablePropertyForKey(key), + @"Can't remove the '%@' field of a PFUser.", key); + if ([key isEqualToString:PFUserUsernameRESTKey]) { + [self stripAnonymity]; + } + [super setObject:object forKey:key]; +} + +- (void)removeObjectForKey:(NSString *)key { + PFParameterAssert(_PFUserIsRemovablePropertyForKey(key), + @"Can't remove the '%@' field of a PFUser.", key); + [super removeObjectForKey:key]; +} + +- (NSMutableDictionary *)authData { + @synchronized ([self lock]) { + if (!authData) { + authData = [[NSMutableDictionary alloc] init]; + } + } + return authData; +} + +- (NSMutableSet *)linkedServiceNames { + @synchronized ([self lock]) { + if (!linkedServiceNames) { + linkedServiceNames = [[NSMutableSet alloc] init]; + } + } + return linkedServiceNames; +} + ++ (instancetype)user { + return [self object]; +} + +- (BFTask *)saveAsync:(BFTask *)toAwait { + if (!toAwait) { + toAwait = [BFTask taskWithResult:nil]; + } + + // This breaks a rare deadlock scenario where on one thread, user.lock is acquired before taskQueue.lock sometimes, + // but not always. Using continueAsyncWithBlock unlocks from the taskQueue, and solves the proplem. + return [toAwait continueAsyncWithBlock:^id(BFTask *task) { + @synchronized ([self lock]) { + if (self.isLazy) { + return [[self resolveLazinessAsync:toAwait] continueAsyncWithSuccessBlock:^id(BFTask *task) { + return @(!!task.result); + }]; + } + } + + return [super saveAsync:toAwait]; + }]; +} + +- (BFTask *)fetchAsync:(BFTask *)toAwait { + if ([self isLazy]) { + return [BFTask taskWithResult:@YES]; + } + + return [[super fetchAsync:toAwait] continueAsyncWithSuccessBlock:^id(BFTask *fetchAsyncTask) { + if ([self isCurrentUser]) { + [self cleanUpAuthData]; + PFCurrentUserController *controller = [[self class] currentUserController]; + return [[controller saveCurrentObjectAsync:self] continueAsyncWithBlock:^id(BFTask *task) { + return fetchAsyncTask.result; + }]; + } + return fetchAsyncTask.result; + }]; +} + +- (instancetype)fetch:(NSError **)error { + if (self.isLazy) { + return self; + } + return [super fetch:error]; +} + +- (void)fetchInBackgroundWithBlock:(PFObjectResultBlock)block { + if (self.isLazy) { + if (block) { + block(self, nil); + return; + } + } + [super fetchInBackgroundWithBlock:^(PFObject *result, NSError *error) { + if (block) { + block(result, error); + } + }]; +} + +- (BOOL)signUp { + return [self signUp:nil]; +} + +- (BOOL)signUp:(NSError **)error { + return [[[self signUpInBackground] waitForResult:error] boolValue]; +} + +- (BFTask *)signUpInBackground { + return [self.taskQueue enqueue:^BFTask *(BFTask *toAwait) { + return [self signUpAsync:toAwait]; + }]; +} + +- (void)signUpInBackgroundWithTarget:(id)target selector:(SEL)selector { + [self signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { + [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; + }]; +} + +- (BOOL)isAuthenticated { + PFUser *currentUser = [[self class] currentUser]; + return [self _isAuthenticatedWithCurrentUser:currentUser]; +} + +- (BOOL)_isAuthenticatedWithCurrentUser:(PFUser *)currentUser { + @synchronized ([self lock]) { + BOOL authenticated = self.isLazy || self.sessionToken; + if (!authenticated && currentUser != nil) { + authenticated = [self.objectId isEqualToString:currentUser.objectId]; + } else { + authenticated = self.isCurrentUser; + } + return authenticated; + } +} + +- (BOOL)isNew { + return self._state.isNew; +} + +- (NSString *)sessionToken { + return self._state.sessionToken; +} + +- (void)signUpInBackgroundWithBlock:(PFBooleanResultBlock)block { + @synchronized ([self lock]) { + if (self.objectId) { + // For anonymous users, there may be an objectId. Setting the userName + // will have removed the anonymous link and set the value in the authData + // object to [NSNull null], so we can just treat it like a save operation. + if (authData[PFAnonymousUserAuthenticationType] == [NSNull null]) { + [self saveInBackgroundWithBlock:block]; + return; + } + } + [[self signUpInBackground] thenCallBackOnMainThreadWithBoolValueAsync:block]; + } +} + ++ (void)enableAutomaticUser { + [Parse _currentManager].coreManager.currentUserController.automaticUsersEnabled = YES; +} + +///-------------------------------------- +#pragma mark - PFObjectPrivateSubclass +///-------------------------------------- + +#pragma mark State + ++ (PFObjectState *)_newObjectStateWithParseClassName:(NSString *)className + objectId:(NSString *)objectId + isComplete:(BOOL)complete { + return [PFUserState stateWithParseClassName:className objectId:objectId isComplete:complete]; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/PFUserAuthenticationDelegate.h b/BreakingBad/Pods/Parse/Parse/PFUserAuthenticationDelegate.h new file mode 100644 index 0000000..d51c107 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/PFUserAuthenticationDelegate.h @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +PF_ASSUME_NONNULL_BEGIN + +/*! + Provides a general interface for delegation of third party authentication with s. + */ +@protocol PFUserAuthenticationDelegate + +/*! + @abstract Called when restoring third party authentication credentials that have been serialized, + such as session keys, user id, etc. + + @note This method will be executed on a background thread. + + @param authData The auth data for the provider. This value may be `nil` when unlinking an account. + + @returns `YES` - if the `authData` was succesfully synchronized, + or `NO` if user should not longer be associated because of bad `authData`. + */ +- (BOOL)restoreAuthenticationWithAuthData:(PF_NULLABLE NSDictionary PF_GENERIC(NSString *, NSString *) *)authData; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Parse.h b/BreakingBad/Pods/Parse/Parse/Parse.h new file mode 100644 index 0000000..52cd000 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Parse.h @@ -0,0 +1,195 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import + +#if !TARGET_OS_WATCH + +#import +#import + +#endif + +#if TARGET_OS_IOS + +#import +#import +#import + +#endif + +PF_ASSUME_NONNULL_BEGIN + +/*! + The `Parse` class contains static functions that handle global configuration for the Parse framework. + */ +@interface Parse : NSObject + +///-------------------------------------- +/// @name Connecting to Parse +///-------------------------------------- + +/*! + @abstract Sets the applicationId and clientKey of your application. + + @param applicationId The application id of your Parse application. + @param clientKey The client key of your Parse application. + */ ++ (void)setApplicationId:(NSString *)applicationId clientKey:(NSString *)clientKey; + +/*! + @abstract The current application id that was used to configure Parse framework. + */ ++ (NSString *)getApplicationId; + +/*! + @abstract The current client key that was used to configure Parse framework. + */ ++ (NSString *)getClientKey; + +///-------------------------------------- +/// @name Enabling Local Datastore +///-------------------------------------- + +/*! + @abstract Enable pinning in your application. This must be called before your application can use + pinning. The recommended way is to call this method before `setApplicationId:clientKey:`. + */ ++ (void)enableLocalDatastore; + +/*! + @abstract Flag that indicates whether Local Datastore is enabled. + + @returns `YES` if Local Datastore is enabled, otherwise `NO`. + */ ++ (BOOL)isLocalDatastoreEnabled; + +///-------------------------------------- +/// @name Enabling Extensions Data Sharing +///-------------------------------------- + +/*! + @abstract Enables data sharing with an application group identifier. + + @discussion After enabling - Local Datastore, `currentUser`, `currentInstallation` and all eventually commands + are going to be available to every application/extension in a group that have the same Parse applicationId. + + @warning This method is required to be called before . + + @param groupIdentifier Application Group Identifier to share data with. + */ ++ (void)enableDataSharingWithApplicationGroupIdentifier:(NSString *)groupIdentifier PF_EXTENSION_UNAVAILABLE("Use `enableDataSharingWithApplicationGroupIdentifier:containingApplication:`.") PF_WATCH_UNAVAILABLE; + +/*! + @abstract Enables data sharing with an application group identifier. + + @discussion After enabling - Local Datastore, `currentUser`, `currentInstallation` and all eventually commands + are going to be available to every application/extension in a group that have the same Parse applicationId. + + @warning This method is required to be called before . + This method can only be used by application extensions. + + @param groupIdentifier Application Group Identifier to share data with. + @param bundleIdentifier Bundle identifier of the containing application. + */ ++ (void)enableDataSharingWithApplicationGroupIdentifier:(NSString *)groupIdentifier + containingApplication:(NSString *)bundleIdentifier PF_WATCH_UNAVAILABLE; + +/*! + @abstract Application Group Identifier for Data Sharing + + @returns `NSString` value if data sharing is enabled, otherwise `nil`. + */ ++ (NSString *)applicationGroupIdentifierForDataSharing PF_WATCH_UNAVAILABLE; + +/*! + @abstract Containing application bundle identifier. + + @returns `NSString` value if data sharing is enabled, otherwise `nil`. + */ ++ (NSString *)containingApplicationBundleIdentifierForDataSharing PF_WATCH_UNAVAILABLE; + +#if PARSE_IOS_ONLY + +///-------------------------------------- +/// @name Configuring UI Settings +///-------------------------------------- + +/*! + @abstract Set whether to show offline messages when using a Parse view or view controller related classes. + + @param enabled Whether a `UIAlertView` should be shown when the device is offline + and network access is required from a view or view controller. + + @deprecated This method has no effect. + */ ++ (void)offlineMessagesEnabled:(BOOL)enabled PARSE_DEPRECATED("This method is deprecated and has no effect."); + +/*! + @abstract Set whether to show an error message when using a Parse view or view controller related classes + and a Parse error was generated via a query. + + @param enabled Whether a `UIAlertView` should be shown when an error occurs. + + @deprecated This method has no effect. + */ ++ (void)errorMessagesEnabled:(BOOL)enabled PARSE_DEPRECATED("This method is deprecated and has no effect."); + +#endif + +///-------------------------------------- +/// @name Logging +///-------------------------------------- + +/*! + @abstract Sets the level of logging to display. + + @discussion By default: + - If running inside an app that was downloaded from iOS App Store - it is set to + - All other cases - it is set to + + @param logLevel Log level to set. + @see PFLogLevel + */ ++ (void)setLogLevel:(PFLogLevel)logLevel; + +/*! + @abstract Log level that will be displayed. + + @discussion By default: + - If running inside an app that was downloaded from iOS App Store - it is set to + - All other cases - it is set to + + @returns A value. + @see PFLogLevel + */ ++ (PFLogLevel)logLevel; + +@end + +PF_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/Parse/Parse/Parse.m b/BreakingBad/Pods/Parse/Parse/Parse.m new file mode 100644 index 0000000..4bafd45 --- /dev/null +++ b/BreakingBad/Pods/Parse/Parse/Parse.m @@ -0,0 +1,235 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "BFTask+Private.h" +#import "Parse.h" +#import "ParseInternal.h" +#import "ParseManager.h" +#import "PFEventuallyPin.h" +#import "PFObject+Subclass.h" +#import "PFOfflineStore.h" +#import "PFPin.h" +#import "PFPinningEventuallyQueue.h" +#import "PFUserPrivate.h" +#import "PFLogger.h" +#import "PFSession.h" +#import "PFFileManager.h" +#import "PFApplication.h" +#import "PFKeychainStore.h" +#import "PFLogging.h" +#import "PFObjectSubclassingController.h" + +#if !TARGET_OS_WATCH +#import "PFInstallationPrivate.h" +#if TARGET_OS_IOS +#import "PFProduct+Private.h" +#endif +#endif + +#import "PFCategoryLoader.h" + +@implementation Parse + +static ParseManager *currentParseManager_; + +static BOOL shouldEnableLocalDatastore_; + +static NSString *applicationGroupIdentifier_; +static NSString *containingApplicationBundleIdentifier_; + ++ (void)initialize { + if (self == [Parse class]) { + // Load all private categories, that we have... + // Without this call - private categories - will require `-ObjC` in linker flags. + // By explicitly calling empty method - we can avoid that. + [PFCategoryLoader loadPrivateCategories]; + } +} + +///-------------------------------------- +#pragma mark - Connect +///-------------------------------------- + ++ (void)setApplicationId:(NSString *)applicationId clientKey:(NSString *)clientKey { + PFConsistencyAssert([applicationId length], @"'applicationId' should not be nil."); + PFConsistencyAssert([clientKey length], @"'clientKey' should not be nil."); + + // Setup new manager first, so it's 100% ready whenever someone sends a request for anything. + ParseManager *manager = [[ParseManager alloc] initWithApplicationId:applicationId clientKey:clientKey]; + [manager configureWithApplicationGroupIdentifier:applicationGroupIdentifier_ + containingApplicationIdentifier:containingApplicationBundleIdentifier_ + enabledLocalDataStore:shouldEnableLocalDatastore_]; + currentParseManager_ = manager; + + shouldEnableLocalDatastore_ = NO; + + PFObjectSubclassingController *subclassingController = [PFObjectSubclassingController defaultController]; + // Register built-in subclasses of PFObject so they get used. + // We're forced to register subclasses directly this way, in order to prevent a deadlock. + // If we ever switch to bundle scanning, this code can go away. + [subclassingController registerSubclass:[PFUser class]]; + [subclassingController registerSubclass:[PFSession class]]; + [subclassingController registerSubclass:[PFRole class]]; + [subclassingController registerSubclass:[PFPin class]]; + [subclassingController registerSubclass:[PFEventuallyPin class]]; +#if !TARGET_OS_WATCH + [subclassingController registerSubclass:[PFInstallation class]]; +#if TARGET_OS_IOS + [subclassingController registerSubclass:[PFProduct class]]; +#endif +#endif + +#if TARGET_OS_IOS + [PFNetworkActivityIndicatorManager sharedManager].enabled = YES; +#endif + + [currentParseManager_ preloadDiskObjectsToMemoryAsync]; + + [[self parseModulesCollection] parseDidInitializeWithApplicationId:applicationId clientKey:clientKey]; +} + ++ (NSString *)getApplicationId { + PFConsistencyAssert(currentParseManager_, + @"You have to call setApplicationId:clientKey: on Parse to configure Parse."); + return currentParseManager_.applicationId; +} + ++ (NSString *)getClientKey { + PFConsistencyAssert(currentParseManager_, + @"You have to call setApplicationId:clientKey: on Parse to configure Parse."); + return currentParseManager_.clientKey; +} + +///-------------------------------------- +#pragma mark - Extensions Data Sharing +///-------------------------------------- + ++ (void)enableDataSharingWithApplicationGroupIdentifier:(NSString *)groupIdentifier { + PFConsistencyAssert(!currentParseManager_, + @"'enableDataSharingWithApplicationGroupIdentifier:' must be called before 'setApplicationId:clientKey'"); + PFParameterAssert([groupIdentifier length], @"'groupIdentifier' should not be nil."); + PFConsistencyAssert(![PFApplication currentApplication].extensionEnvironment, @"This method cannot be used in application extensions."); + PFConsistencyAssert([PFFileManager isApplicationGroupContainerReachableForGroupIdentifier:groupIdentifier], + @"ApplicationGroupContainer is unreachable. Please double check your Xcode project settings."); + applicationGroupIdentifier_ = [groupIdentifier copy]; +} + ++ (void)enableDataSharingWithApplicationGroupIdentifier:(NSString *)groupIdentifier + containingApplication:(NSString *)bundleIdentifier { + PFConsistencyAssert(!currentParseManager_, + @"'enableDataSharingWithApplicationGroupIdentifier:containingApplication:' must be called before 'setApplicationId:clientKey'"); + PFParameterAssert([groupIdentifier length], @"'groupIdentifier' should not be nil."); + PFParameterAssert([bundleIdentifier length], @"Containing application bundle identifier should not be nil."); + PFConsistencyAssert([PFApplication currentApplication].extensionEnvironment, @"This method can only be used in application extensions."); + PFConsistencyAssert([PFFileManager isApplicationGroupContainerReachableForGroupIdentifier:groupIdentifier], + @"ApplicationGroupContainer is unreachable. Please double check your Xcode project settings."); + + applicationGroupIdentifier_ = groupIdentifier; + containingApplicationBundleIdentifier_ = bundleIdentifier; +} + ++ (NSString *)applicationGroupIdentifierForDataSharing { + return applicationGroupIdentifier_; +} + ++ (NSString *)containingApplicationBundleIdentifierForDataSharing { + return containingApplicationBundleIdentifier_; +} + ++ (void)_resetDataSharingIdentifiers { + applicationGroupIdentifier_ = nil; + containingApplicationBundleIdentifier_ = nil; +} + +///-------------------------------------- +#pragma mark - Local Datastore +///-------------------------------------- + ++ (void)enableLocalDatastore { + PFConsistencyAssert(!currentParseManager_, + @"'enableLocalDataStore' must be called before 'setApplicationId:clientKey:'"); + + // Lazily enableLocalDatastore after init. We can't use ParseModule because + // ParseModule isn't processed in main thread and may cause race condition. + shouldEnableLocalDatastore_ = YES; +} + ++ (BOOL)isLocalDatastoreEnabled { + if (!currentParseManager_) { + return shouldEnableLocalDatastore_; + } + return currentParseManager_.offlineStoreLoaded; +} + +///-------------------------------------- +#pragma mark - User Interface +///-------------------------------------- + +#if PARSE_IOS_ONLY + ++ (void)offlineMessagesEnabled:(BOOL)enabled { + // Deprecated method - shouldn't do anything. +} + ++ (void)errorMessagesEnabled:(BOOL)enabled { + // Deprecated method - shouldn't do anything. +} + +#endif + +///-------------------------------------- +#pragma mark - Logging +///-------------------------------------- + ++ (void)setLogLevel:(PFLogLevel)logLevel { + [PFLogger sharedLogger].logLevel = logLevel; +} + ++ (PFLogLevel)logLevel { + return [PFLogger sharedLogger].logLevel; +} + +///-------------------------------------- +#pragma mark - Private +///-------------------------------------- + ++ (ParseManager *)_currentManager { + return currentParseManager_; +} + ++ (void)_clearCurrentManager { + currentParseManager_ = nil; +} + +///-------------------------------------- +#pragma mark - Modules +///-------------------------------------- + ++ (void)enableParseModule:(id)module { + [[self parseModulesCollection] addParseModule:module]; +} + ++ (void)disableParseModule:(id)module { + [[self parseModulesCollection] removeParseModule:module]; +} + ++ (BOOL)isModuleEnabled:(id)module { + return [[self parseModulesCollection] containsModule:module]; +} + ++ (ParseModuleCollection *)parseModulesCollection { + static ParseModuleCollection *collection; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + collection = [[ParseModuleCollection alloc] init]; + }); + return collection; +} + +@end diff --git a/BreakingBad/Pods/Parse/Parse/Resources/en.lproj/Parse.strings b/BreakingBad/Pods/Parse/Parse/Resources/en.lproj/Parse.strings new file mode 100644 index 0000000000000000000000000000000000000000..c1c3414638244fb653c7afba152e4094c69d44b4 GIT binary patch literal 122 zcmXwwI|_g>5JX>{Q!JJ#^Z;UKXW<#5Lr#-Qu0S(TY~65g*;&Qswi=;_2pBmAyb<9GnI@e~XI literal 0 HcmV?d00001 diff --git a/BreakingBad/Pods/Parse/README.md b/BreakingBad/Pods/Parse/README.md new file mode 100644 index 0000000..c8e506b --- /dev/null +++ b/BreakingBad/Pods/Parse/README.md @@ -0,0 +1,106 @@ +# Parse SDK for iOS/OS X + +[![Build Status][build-status-svg]][build-status-link] +[![Coverage Status][coverage-status-svg]][coverage-status-link] +[![Podspec][podspec-svg]][podspec-link] +[![License][license-svg]][license-link] +![Platforms][platforms-svg] +[![Dependencies][dependencies-svg]][dependencies-link] +[![References][references-svg]][references-link] + +A library that gives you access to the powerful Parse cloud platform from your iOS or OS X app. +For more information Parse and its features, see [the website][parse.com] and [getting started][docs]. + +## Other Parse Projects + + - [ParseUI for iOS][parseui-ios-link] + - [Parse SDK for Android][android-sdk-link] + +## Getting Started + +To use parse, head on over to the [releases][releases] page, and download the latest build. +And you're off! Take a look at the public [documentation][docs] and start building. + +**Other Installation Options** + + 1. **CocoaPods** + + Add the following line to your podfile: + + pod 'Parse' + + Run pod install, and you should now have the latest parse release. + + 2. **Compiling for yourself** + + If you want to manually compile the SDK, clone it locally, and run the following commands in the root directory of the repository: + + # To pull in extra dependencies (Bolts and OCMock) + git submodule update --init --recursive + + # To install all the gems + bundle install + + # Build & Package the Frameworks + rake package:frameworks + + Compiled frameworks will be in 2 archives: `Parse-iOS.zip` and `Parse-OSX.zip` inside the `build/release` folder, and you can link them as you'd please. + + 3. **Using Parse as a sub-project** + + You can also include parse as a subproject inside of your application if you'd prefer, although we do not recommend this, as it will increase your indexing time significantly. To do so, just drag and drop the Parse.xcodeproj file into your workspace. Note that unit tests will be unavailable if you use Parse like this, as OCMock will be unable to be found. + +## How Do I Contribute? + +We want to make contributing to this project as easy and transparent as possible. Please refer to the [Contribution Guidelines][contributing]. + +## Dependencies + +We use the following libraries as dependencies inside of Parse: + + - [Bolts][bolts-framework], for task management. + - [OCMock][ocmock-framework], for unit testing. + +## License + +``` +Copyright (c) 2015-present, Parse, LLC. +All rights reserved. + +This source code is licensed under the BSD-style license found in the +LICENSE file in the root directory of this source tree. An additional grant +of patent rights can be found in the PATENTS file in the same directory. +``` + + [parse.com]: https://www.parse.com/products/ios + [docs]: https://www.parse.com/docs/ios/guide + [blog]: https://blog.parse.com/ + + [parseui-ios-link]: https://github.com/ParsePlatform/ParseUI-iOS + [android-sdk-link]: https://github.com/ParsePlatform/Parse-SDK-Android + + [releases]: https://github.com/ParsePlatform/Parse-SDK-iOS-OSX/releases + [contributing]: https://github.com/ParsePlatform/Parse-SDK-iOS-OSX/blob/master/CONTRIBUTING.md + + [bolts-framework]: https://github.com/BoltsFramework/Bolts-iOS + [ocmock-framework]: http://ocmock.org + + [build-status-svg]: https://travis-ci.org/ParsePlatform/Parse-SDK-iOS-OSX.svg + [build-status-link]: https://travis-ci.org/ParsePlatform/Parse-SDK-iOS-OSX/branches + + [coverage-status-svg]: https://codecov.io/github/ParsePlatform/Parse-SDK-iOS-OSX/coverage.svg?branch=master + [coverage-status-link]: https://codecov.io/github/ParsePlatform/Parse-SDK-iOS-OSX?branch=master + + [license-svg]: https://img.shields.io/badge/license-BSD-lightgrey.svg + [license-link]: https://github.com/ParsePlatform/Parse-SDK-iOS-OSX/blob/master/LICENSE + + [podspec-svg]: https://img.shields.io/cocoapods/v/Parse.svg + [podspec-link]: https://cocoapods.org/pods/Parse + + [platforms-svg]: https://img.shields.io/badge/platform-ios%20%7C%20osx-lightgrey.svg + + [dependencies-svg]: https://img.shields.io/badge/dependencies-2-yellowgreen.svg + [dependencies-link]: https://github.com/ParsePlatform/Parse-SDK-iOS-OSX/blob/master/Vendor + + [references-svg]: https://www.versioneye.com/objective-c/parse/reference_badge.svg + [references-link]: https://www.versioneye.com/objective-c/parse/references diff --git a/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj b/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 0000000..6a0d3e9 --- /dev/null +++ b/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,2051 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 00BBAAE70348655F087C8224D49C2CEE /* PFCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = FD0DC15BB1F34596371C48A1D117C62F /* PFCategoryLoader.m */; }; + 041C92E54A9D450BE74307E370BCA64A /* PFProduct+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A2A025CBCE13AF790C21EB33F3FDD8A /* PFProduct+Private.h */; }; + 04AA489AF75CF5DBF03E44F7650B5D1C /* PFRESTFileCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = BD53148FD3F25A5417B79C08A7EF6137 /* PFRESTFileCommand.h */; }; + 0564194E3B97B21F1FCE32E8FBA39D99 /* PFURLSessionCommandRunner_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B25F8AA5E0ACA8EF99E4B7A34CA08791 /* PFURLSessionCommandRunner_Private.h */; }; + 056A3EFE773E76873637A1F8700AC29C /* PFDefaultACLController.m in Sources */ = {isa = PBXBuildFile; fileRef = 333F24639C80887F8DA6A64132D3ACAD /* PFDefaultACLController.m */; }; + 05F0726A895F6B2D8AFEF330B4B269E8 /* PFFileDataStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 62B360F076B3422F6B95643A41DC7D58 /* PFFileDataStream.h */; }; + 062775547F6065E5DDF2DB74C3AE9398 /* PFCachedQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E1ABB16A7E7BC8AF7D9E1FE23ABE0E2 /* PFCachedQueryController.m */; }; + 06621C5B35D2D1E8F295BC88798706D0 /* PFCurrentObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B8FF73618A90330150849A195BFC2C /* PFCurrentObjectControlling.h */; }; + 066B02C56AFE460FE0DD07895E35A1C2 /* PFRESTAnalyticsCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F34B890143B7FF3F7E15109C866C70F /* PFRESTAnalyticsCommand.m */; }; + 0679713BBD5676BA778F5284E47BC116 /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E9EF0B3D7C46C13AFB293451E7F566A /* ParseModule.h */; }; + 069B84DC158EFE142B00669BD377F176 /* PFTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 65A6FE58C9C2C7E84B044607B8A5890A /* PFTaskQueue.m */; }; + 08398E64503CF57CE56D990E05392449 /* PFACLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1048C89864CA1BAAC39909E7EAF64FF7 /* PFACLPrivate.h */; }; + 088089DEBB2C6EE1ACE7A8BB4ADBD01E /* PFFileStagingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7301204FAFBEAE4CD3C43B6DAC1858 /* PFFileStagingController.h */; }; + 08FCFC00D0259854FA9A7F407CC0D87D /* PFURLSessionJSONDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 02237672394DCB6999F68D60FB362A3E /* PFURLSessionJSONDataTaskDelegate.m */; }; + 0A82F1C9FF3BF928D142AC862693E639 /* PFURLSessionDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F2F47F077C809F803E3BA42EAF9CC7 /* PFURLSessionDataTaskDelegate.m */; }; + 0AFACA416A2734131E89B51E7BF3EAB3 /* PFDefaultACLController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8824A59A418BB304F2D1B9623F26AE12 /* PFDefaultACLController.h */; }; + 0C377C0B4DB31197B927E1FE0026A2D0 /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = ED66C38BB696C6EBD5F689444DE5698B /* PFDecoder.h */; }; + 0CAD3D353992BC07FDA53F629A717372 /* PFOperationSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 374CEE0448D7C92E9F6B2F5B9987BBFA /* PFOperationSet.h */; }; + 0CBD94653A4DD93270DEBB19B785AD2A /* PFPaymentTransactionObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 87355840B3797E204A33EF21DD786865 /* PFPaymentTransactionObserver.h */; }; + 0CEEC78C1B5E4CD049664A581C8C874F /* PFPurchaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = D4D44451B9EF1D2AABB3727B5BE49E3A /* PFPurchaseController.m */; }; + 0CF319A4825731DBE4F3A2162455DE71 /* PFPushController.h in Headers */ = {isa = PBXBuildFile; fileRef = 208CE00C994794CE9B26AC6698B8198D /* PFPushController.h */; }; + 0D2B53E00E0068673FAC00A181888232 /* PFInstallationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = AB9B2C34BBD8FBC05AEB06BCA0F9C9CF /* PFInstallationConstants.h */; }; + 0E9E38A997E9084D66EEC8AE54FEA540 /* PFMutableUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 267DC6F7D82298ABF3C18C327FEDF275 /* PFMutableUserState.h */; }; + 0EFAD4E800EAB877281F5E75E06560CD /* PFInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EC3943147EE9557BE2120CF2329E38E /* PFInstallation.m */; }; + 0FE628F365C749D5976DFBAC5685E233 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = AE6FD11DD7C073D83C79EDA40A4CBE4C /* PFEncoder.m */; }; + 102197CBD5C0D38173A6379F7BBC7A67 /* PFCloudCodeController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2791960015A0E379245E5A0882B9DDCE /* PFCloudCodeController.h */; }; + 126E7184E4905EDE5378F90427D6E7FD /* PFObjectState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A180E3CC6A83C085262778CAE43767A /* PFObjectState_Private.h */; }; + 13007D2AE6F953592B6E205DDC593E3B /* PFEventuallyPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C189C08BBFF35A029515798AD989F10 /* PFEventuallyPin.h */; }; + 132B0FFAA237FFBC7BF8CEAE8B9B390D /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 883FBF6AC7D33CF1A604102A9D9779ED /* SystemConfiguration.framework */; }; + 13317E2C7CF2D0440D5D64361CEDBF6C /* PFAnonymousUtils_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CB0D33609AC2DEE7BF62A26950D3C062 /* PFAnonymousUtils_Private.h */; }; + 135DE9CF756235E0E52861599AAEA09B /* PFUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = ADAA3EE17CA0B38B1E402F112E0339B9 /* PFUserState.m */; }; + 140FB704C9541A4CE92C46E8462E11DE /* PFPushPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E1532E528C597C81417C9A6C2A3ECA1 /* PFPushPrivate.h */; }; + 14E265D7887A59D74A47FF98562E3CBA /* PFKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D9AD68ED9EE4D4DA10299E21D0CF8248 /* PFKeychainStore.m */; }; + 158DBF65062F50719446FBB5FE4CE6C7 /* PFSessionUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = DE0701939C6512E62807F0DEAC0B88C4 /* PFSessionUtilities.m */; }; + 16E72C605C22A982B542195139A79664 /* PFFileController.h in Headers */ = {isa = PBXBuildFile; fileRef = B8702C4718ECDE4EC13CAB9FEBD20A78 /* PFFileController.h */; }; + 16FA4C7C0D7D11EAFC06F70A3C3F01F9 /* PFConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C438131B9FF8C57DBDE42A1886182C1F /* PFConfig_Private.h */; }; + 17715103907773502F61FE2CFFDCE8C2 /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = BCF7D81BB8B3017FFCA5BFA657475191 /* PFJSONSerialization.m */; }; + 17805260D4C57811CA869B547BBC7597 /* PFFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D19D8F4E00BF286006CD6D68E92C105 /* PFFileState.m */; }; + 17AF383C6FF5BB229F3C1ABB5466FE5C /* PFQueryPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C31BD302E3DED84EC1289B2E8C260F4 /* PFQueryPrivate.h */; }; + 17DBCDA05E550DA75A0FB69CDA01C0F8 /* PFObjectPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 3140F8B22C96FA60AD48F660BFF7FCD2 /* PFObjectPrivate.h */; }; + 1820EC35E058913A1A4EEEF6295F0EB4 /* PFMutablePushState.m in Sources */ = {isa = PBXBuildFile; fileRef = B9559972A6331681B0BFCE99D4830D0C /* PFMutablePushState.m */; }; + 18FD81A45D18127CF60987033C24C650 /* PFDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 70327113CA3A1A88572E8F96D12041F4 /* PFDevice.h */; }; + 1905CE8117703296C87FBAA262C5CDC1 /* PFUserAuthenticationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 29E8D38657DDEFCFA5A73CAF48D523A7 /* PFUserAuthenticationDelegate.h */; }; + 19340871351B6225FEA0D50D11B4620C /* PFKeyValueCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 52763EB85FB6F54982F9F986750D041D /* PFKeyValueCache_Private.h */; }; + 19553ACB32B73C7E82C7305C0B993F21 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F5760F0DA7B30409A71D6E956AE9172B /* PFURLSessionFileDownloadTaskDelegate.m */; }; + 1A049CCED7F4111A63D20FE2E55D1582 /* PFURLSessionCommandRunner.h in Headers */ = {isa = PBXBuildFile; fileRef = BF85BDBB00B0B90C79842355DCCE5702 /* PFURLSessionCommandRunner.h */; }; + 1A1B4D722995A2B4458EFF67FBD775E4 /* PFACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = C8673179A0982B40E80A428E4FB775FE /* PFACLState.h */; }; + 1A1E8B82688D176C875964C659D90CB1 /* PFUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 14E52D110E94F845EFA54F1D5B716ADF /* PFUser.h */; }; + 1C07A61DDFBAF4EFD2F080F27B0780D6 /* PFUserAuthenticationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 10BF5DBDEACF811090B330EB5B9574DC /* PFUserAuthenticationController.h */; }; + 1C5D31895EC2B8A0CDB19F60381E4C09 /* PFURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = C2DE5E9C06AC71245804541B12D5F7B8 /* PFURLSession.m */; }; + 1D3F3115940F9BB052E81C37EB59E2CD /* PFPropertyInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 09FEBAB0B414EEEC06B7B89FD63280F5 /* PFPropertyInfo_Private.h */; }; + 1F77AE633D24816C73EE99C6743EFD06 /* PFURLConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 89095502D7357690CC6FC98B5D64DB76 /* PFURLConstructor.h */; }; + 1F838712E1B014E1BCF6E765D1F23D5C /* PFACL.h in Headers */ = {isa = PBXBuildFile; fileRef = 9423B92363C6078122A8D176B24507E2 /* PFACL.h */; }; + 200CBE166D201B143AF627A475AAC1FB /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44CF5AB5E34A9D3B7DBDB04076B71AA7 /* CFNetwork.framework */; }; + 210E594A5E64FBC160B3784AAE436D7E /* PFSQLiteDatabaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = B90CFF6D8D057714B5CB05B1EF6832E7 /* PFSQLiteDatabaseController.h */; }; + 232CF59D63E91DEE42D2CF6EEC1234AA /* PFLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 47F13D5EB10A23DB6E0A7FABF2E8CDBD /* PFLogger.m */; }; + 24328C4DD9FDF0DFFA52AE81C55021C4 /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EA388C394C5D9D428DB4F0C14EF97F7 /* BFCancellationToken.h */; }; + 24384C69CA18A097981135EFB1F8A9DE /* PFFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D3E8D70C7E8EB33159CDDA0AC7B6C9DC /* PFFileManager.h */; }; + 24BCCAC7F5B550F77B83000CE3BE9294 /* PFObjectSubclassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 03A98730119221482A511C33FBD4CBF9 /* PFObjectSubclassInfo.m */; }; + 26069A470A7BBB3C28AA132D40A070D2 /* PFAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 56DD772CBED2910C5B2E94ADABDD79F2 /* PFAnalytics.h */; }; + 2660301297C2EED30B00FD417F807C9A /* PFProduct.h in Headers */ = {isa = PBXBuildFile; fileRef = BE9304218DB27984F98075C9997693A9 /* PFProduct.h */; }; + 26A02D6DD8C496618A71E7947D16C689 /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = A0D7B54A478A38CB2BC90CD24EAB27B6 /* PFInternalUtils.m */; }; + 26DEA46C479EE0A23E151385A330AC65 /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FCB9CF92D4B7B99AABCC3E9837A6C8C /* PFCloud.m */; }; + 27C1E412046564AD607892E33F6C5FDD /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 78005460CA734997653B091EDC6EFBDF /* PFUser.m */; }; + 29486ED65C6DCE12A57B411EA98FF1B2 /* ParseModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CF5A1D517886292E9244E3BBBD29C2C /* ParseModule.m */; }; + 295B3A4A7AE94C2C193FB8C1FDD97064 /* PFObjectFilePersistenceController.m in Sources */ = {isa = PBXBuildFile; fileRef = ACB6900468A2F6CE7B3A606F3CA5F322 /* PFObjectFilePersistenceController.m */; }; + 2996CE38687B3C1F1695E1E2E914F45B /* PFCommandURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = CA8004D86110E800F8B66A6C52331804 /* PFCommandURLRequestConstructor.h */; }; + 2B013529BE9CB2318F21BED38C17BDCF /* PFDateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 23305A980DB3E4AED2259A74C9187B50 /* PFDateFormatter.m */; }; + 2C60229B7A7ABBA3B63AE0668E0121E4 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = A2E9FF3525464F62315EA0C2C8DBF089 /* BFCancellationTokenSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 2E4FFE1F43D213B25AF30BAB74039B8A /* PFQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = A963DD1D7B9750E8E9A817472714C113 /* PFQueryController.m */; }; + 2F3D46EE6FB1A34DF43A6F6F732A1960 /* PFCurrentUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = A46B35BACD7F1073E12FCEDE85E4B67C /* PFCurrentUserController.m */; }; + 2FE5E3D8578C1A52CFEAB60226AD06E8 /* PFPaymentTransactionObserver_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AF69A58E6F7EA86A79ACA49E961650A /* PFPaymentTransactionObserver_Private.h */; }; + 3009E31927F1B45BCAC0F1C0C9EB6BD3 /* PFRole.h in Headers */ = {isa = PBXBuildFile; fileRef = F482627CD4A818F68CA6022A4023CD7A /* PFRole.h */; }; + 300CF7EAA14707BA85CE473CD1F86EC2 /* Parse_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C397337C5959FB9CDCAAD05A78CD13AD /* Parse_Private.h */; }; + 30AE14165C4A728A3B8F7BDF887ECA3D /* ParseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 97E6788E626A2016CCFF03F7381911B8 /* ParseInternal.h */; }; + 3182683990079B507F559DC296595B26 /* PFUserFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A5E945E1EC907178171BF58D1F60131 /* PFUserFileCodingLogic.h */; }; + 318357AC7E8AC7D2B07F467B152F58A7 /* PFPushChannelsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A83EDAC97C7A74FA2625134D35D4560 /* PFPushChannelsController.h */; }; + 31DDFDB3A975FB3247EE6194755F3BAD /* PFDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = DC833CC54CC9FF49BF622887A836F451 /* PFDevice.m */; }; + 344A94378384BEC85479E8A1073A2085 /* PFRESTObjectCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 0539CEFD73A9E47FC3CF538787C89A88 /* PFRESTObjectCommand.h */; }; + 35BFF14A76CF6F25A95AD421B43D8863 /* PFRESTUserCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D8A0D5C7E7AAA06AD1719AF2C60C130 /* PFRESTUserCommand.h */; }; + 38452D68029BDCCC144FB09DFF2D6163 /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AF59E6E45FB90176198F0361D0B0430 /* PFURLSessionDataTaskDelegate_Private.h */; }; + 393DA00CD04EFE510C10F3ACBF8F8ED6 /* PFCloudCodeController.m in Sources */ = {isa = PBXBuildFile; fileRef = D83B31511109921F7A0625DCDA97EBD2 /* PFCloudCodeController.m */; }; + 39CA9738B472EA7A479C17082AD8EE91 /* PFUserConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A2DE58DBDFB1D72AF24F80D783EAE28 /* PFUserConstants.h */; }; + 3B3E0E9E5467CED5674DAC7481FCE583 /* PFOfflineObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CD9E69666E0F4D54D0539786BD3CBF7 /* PFOfflineObjectController.h */; }; + 3B89AB5631470E72F097A32531384ECB /* PFRole.m in Sources */ = {isa = PBXBuildFile; fileRef = 032A4A6705724272DE8FD9BC94C95C33 /* PFRole.m */; }; + 3CC530D484A2138C0D57D5BE9ED86E79 /* PFAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BB18584CF736AD36BCE6DE812088676 /* PFAlertView.h */; }; + 3DB8A0F752DA80375EADCCEE442C2446 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 272027943ACA52CB75F07D7619CCC3BF /* AudioToolbox.framework */; }; + 3FA490D070A74BE926B891C476B59967 /* PFRESTAnalyticsCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 5894A228B6F31F871749F0BC8C57560B /* PFRESTAnalyticsCommand.h */; }; + 407007B859EBDD5E2639CE8894D6801A /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 681A2BC7840EF1709F11E26C7EC3F202 /* QuartzCore.framework */; }; + 42096D610F30DDDB22DFD9A86C4FAA69 /* PFObjectFilePersistenceController.h in Headers */ = {isa = PBXBuildFile; fileRef = 860D0B9D3698F147687E070AD019DD1E /* PFObjectFilePersistenceController.h */; }; + 425992FEAC0F409D88949DA2A3C2B86B /* PFLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = B53A1E293DB4591CB07EB02181C2B192 /* PFLogger.h */; }; + 429DD447E17627BC672B4E0A4B98EE91 /* PFSubclassing.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D07888730F9C387835661F6975CE0CE /* PFSubclassing.h */; }; + 42D75578B2E43F1D8B8494305D0EDB9E /* PFSessionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2AE28A9117ECBD3FEA8A80E3592B9E /* PFSessionController.h */; }; + 432FD95ABE2FC0D2990EDBC7BBD168FB /* PFApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = E24E0BB42A1D0F93BEE886509C659AB6 /* PFApplication.h */; }; + 4470541EACA382A9DEC7F752A7BDB999 /* PFThreadsafety.m in Sources */ = {isa = PBXBuildFile; fileRef = 72AA7C1713DE26F7C83BC1BE68649977 /* PFThreadsafety.m */; }; + 44AF64800D581887F39C40E88E391253 /* PFProductsRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EE5B04D8D051799BEED324B493485A4 /* PFProductsRequestHandler.h */; }; + 4585A360814FA0879488B22436F9CA16 /* PFProductsRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E60CD03AB5997917F89A62109F51C1F /* PFProductsRequestHandler.m */; }; + 461897A21F97DAC9C115B89769E50E7E /* PFErrorUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 02841C3BEB92D4DAC26220C5C7CE9740 /* PFErrorUtilities.m */; }; + 46419B0E085E69C110E9F84F8CCFA001 /* PFObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = DC63634BA83D3D3CBCBA2E87AB311573 /* PFObjectState.h */; }; + 470023A9785141D46651C887666B9173 /* PFUserFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 43AED0C36A33D48DB75041D300713664 /* PFUserFileCodingLogic.m */; }; + 48F09476CAF8F148CF512A2D2682A596 /* PFPushChannelsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CDD3144250DCECB39F57A04B6C9A3F0 /* PFPushChannelsController.m */; }; + 4A4E9621F26A40396D4C3242080D9803 /* PFPropertyInfo_Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = E3F8B8B2001C10329EB9605C32C29711 /* PFPropertyInfo_Runtime.m */; }; + 4A8580CBD3EC7890B2BB820A585DE110 /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5983FC4B63B585E8A136F4AC664EEF0C /* PFMultiProcessFileLockController.m */; }; + 4BD387D16940CDE76B33FE40B7CB0FA0 /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 16936467CF16DCC6960896B5471D7C27 /* PFAssert.h */; }; + 4D0D958784EF1DA1869703056E662766 /* PFPushState.h in Headers */ = {isa = PBXBuildFile; fileRef = ABC73F2E99BCC42C0125231EAF7EDB15 /* PFPushState.h */; }; + 4D76D8AAEA4BAEF75A282A76C9322CF1 /* PFFileState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ADC119E201491E5146837A1ECDD27F1 /* PFFileState_Private.h */; }; + 4D9EA3669F6C10E1D70A06EA46CFF3DD /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = BB328A47E71DF5C9ED039046F3CF4E10 /* PFUserState.h */; }; + 4DBD9C3DAC7E9BAE6BCB77F49B96466E /* PFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 308E43BD885210D04C25609F7FFE572D /* PFObject.h */; }; + 50D85E92F384E1967781514345A9604A /* PFKeyValueCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A59FF425B4E22F00D5B693BF199C21E /* PFKeyValueCache.m */; }; + 50DCE2E9E236ABBDC809CA7464CB6A8A /* PFQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = C9CBCE0E34FCE6BCB16E3402C6CF887E /* PFQueryState.h */; }; + 5162C4FCE1176E51B1558ADBE61934ED /* PFJSONSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CEB98AB34541B47F2042CC509B89CD4 /* PFJSONSerialization.h */; }; + 528CF23C0419AC21A17EC4CAD913EF63 /* PFSQLiteDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D3318F94B3CCDF4EC509F49C45A27FC /* PFSQLiteDatabase.m */; }; + 537897E0B38AAE556EE0ED7FB16C0A2E /* PFMutablePushState.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FAE5FB0E717E5E066DB0DD19ED0679F /* PFMutablePushState.h */; }; + 53AC014B0B2DB4874BB9F4076CC2E221 /* PFACLState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1906D27D412A515912345F6C5D1138B3 /* PFACLState_Private.h */; }; + 541F0862E0F66FD9FECCFA8AAD76B112 /* PFOfflineStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B9972BBC14ADBA4A17A6CC1801DB183 /* PFOfflineStore.h */; }; + 5487F6ED1525917184D8704580A2F31F /* PFRESTFileCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 717C08EFA64F3FF8CD1383B57F8FFC0B /* PFRESTFileCommand.m */; }; + 54F51EBF1E07D6541A40613CD20E132A /* PFCommandResult.m in Sources */ = {isa = PBXBuildFile; fileRef = E6C1A7933C5A11D332D285F4E14D704B /* PFCommandResult.m */; }; + 55B57B48BA95F1DC9B74B1122CB59271 /* PFBase64Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F989773F048C2B6AA76E2F33AB85191 /* PFBase64Encoder.h */; }; + 56E6D6CE4ABEB58A8329737F0C5D4ED2 /* PFRESTPushCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = BB3CC31AB928B710A068EFE34F219D54 /* PFRESTPushCommand.m */; }; + 590D6E0012B4CB622BE58D14C1C26003 /* PFDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D4AD2E6C937B36339C0F9AFF8817BC6 /* PFDateFormatter.h */; }; + 5AC6B8062154D77214390C4A4374A47F /* PFFieldOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 03A69FDE3FBBA48FAFAB93667FC64A05 /* PFFieldOperation.h */; }; + 5B901F4B0D476676820AA5F33D2CD516 /* PFPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 6776A4FE81BCDB08946667E7FAF1A6C0 /* PFPin.m */; }; + 5BB763978F4F6234E52A11E4C74E3BFB /* PFMutableRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = A3ED374B51D528F113CC177E773492C6 /* PFMutableRelationState.m */; }; + 5BEA226EB7FA60D301D67500B4C43EB8 /* PFSQLiteDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F114EC7295D2D778ADAD06DAECFFDF6 /* PFSQLiteDatabase.h */; }; + 5CABBA2AF2A8EB39119AD52080FAD3D9 /* PFPushState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C4FC14EB432E641BAA43CE3A6CA50340 /* PFPushState_Private.h */; }; + 5D2BFBD651780F482A3A6F62AA40812E /* PFRESTPushCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C3A2002500C346E302092A2088A57A7 /* PFRESTPushCommand.h */; }; + 5E03E457F64858FF919B5E2CB8DCC7EA /* PFRelationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 159CCE347EF8F7907332612BF120B860 /* PFRelationPrivate.h */; }; + 5E544AAE965652FE43607F5674E254CB /* PFACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = B6230E95CC1C91D65E987B6F92071EE0 /* PFACLState.m */; }; + 5F96955752916BB5DD149D974B5D4C7D /* PFCoreDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DDA31CB23D7EDC55E267E8867ECC976 /* PFCoreDataProvider.h */; }; + 605BCEBC0D9F528F51C31172502DB1FC /* PFAnonymousUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = E0E0B5753859D0D0960D4F376D21CFBA /* PFAnonymousUtils.m */; }; + 60A0AEA1B304E722C64C9CA9A54AB2BB /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 047743A34224268FD55BB1875D8232CA /* PFURLSessionFileDownloadTaskDelegate.h */; }; + 610CCE14FB5BFC4F81E180BA33AF93AB /* PFKeyValueCache.h in Headers */ = {isa = PBXBuildFile; fileRef = AFCE9242FBE9C6F5B79A769A629C60CF /* PFKeyValueCache.h */; }; + 6137B532F11C53C32AB5B2BA890D9B77 /* PFEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = BAB69D923C8169E049A0B1F446DE3C22 /* PFEventuallyQueue.m */; }; + 62191196B306C291FCB4A144AF5F3651 /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = E1F0715F4D0AC569F9A80C8EE87A7678 /* PFURLConstructor.m */; }; + 63C96A61BEA3EFA6C400D8C2849E87B9 /* PFNetworkCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 72A213523367D0C4F848FD1542D0E1BB /* PFNetworkCommand.h */; }; + 646FA7A17A9454D7CE4582D8B417AED8 /* PFFileDataStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 76F588CFEC125CE47A5E75C49BC6E111 /* PFFileDataStream.m */; }; + 658F01AC667CC6284A60A997263EF9F9 /* PFCurrentInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C7D5E9E9338447002877586E4B453BC /* PFCurrentInstallationController.m */; }; + 65C20AD171485E53B52DB6DD49B0677C /* PFURLSessionUploadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C509F37C4504D78F4E60A46E053B08 /* PFURLSessionUploadTaskDelegate.m */; }; + 662C4CA41222FF80855AEAE39EBBCAC7 /* Parse.h in Headers */ = {isa = PBXBuildFile; fileRef = 08ED2E2E627F66EA8CC90121737CB747 /* Parse.h */; }; + 6790C6F9B9D786321E26B692638C7F53 /* PFHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 41EC4873567E5199115062D666B66648 /* PFHTTPRequest.h */; }; + 67B758B645B23761F9E6B11E1A6835EF /* PFMutableRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = F264AB25D4F485FB43C3C052444E57A8 /* PFMutableRelationState.h */; }; + 682C53E0D6BB021E639D6F725EE9526A /* PFMutableObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 905F084EAA67E29023FC7262EFF7C7FC /* PFMutableObjectState.m */; }; + 692C55AEA4AAA1FE5B0C18929330B10D /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 834AE8A8AE6F7F19DBF7A13695DA1EE9 /* PFObjectSubclassingController.m */; }; + 69462A41EAA562C09D454343B0FF4765 /* PFConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 5292287F5D3AE4EF5E74D76C6FDB81A2 /* PFConfig.h */; }; + 6AB0108D6EA80E95D713B920B6CEB2F7 /* PFCommandCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 27A3A55D0FC90475F63A86D2640BF7E4 /* PFCommandCache_Private.h */; }; + 6B58F035A3956AFC685275E16748C528 /* PFCommandCache.m in Sources */ = {isa = PBXBuildFile; fileRef = FCE8643D2CF10C59D3B13EED199470C3 /* PFCommandCache.m */; }; + 6B8C23AD6AB94D1A8D7A6FAD7CCCCBB8 /* PFAnonymousUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 32E9622FB277F31FF0ACE70A0E8C1B44 /* PFAnonymousUtils.h */; }; + 6BD97EEFCBD33367A998E6F61AE1B707 /* PFAnalytics_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C5E2765A6C6141C912C8C89927E5E59E /* PFAnalytics_Private.h */; }; + 6C02A803570CB8B1883BEF1B95527EDC /* PFOfflineStore.m in Sources */ = {isa = PBXBuildFile; fileRef = C6F8830B4BAD707ED99EB6DA023C7803 /* PFOfflineStore.m */; }; + 6C1004D0036BE3FD4D1ADA378E15E634 /* PFPaymentTransactionObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = C72B7C59C5C07C9D6873A101E4CD589F /* PFPaymentTransactionObserver.m */; }; + 6C1274F0B7A0DFA685607E820E1E00B8 /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 29F955AA1404AAE96344AAE5FB9ACCCE /* BFTask+Private.m */; }; + 6D203549B94FB9135A773B35858B7543 /* PFEventuallyQueue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A3BD59B59438D47928EBE062F284A88 /* PFEventuallyQueue_Private.h */; }; + 6D229602DF6335C2652BB3D405F5E539 /* PFCurrentUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C2FB0BE9C76624C1E01BB37C1DF3416 /* PFCurrentUserController.h */; }; + 6EA9EAE04A65D98295CA36A7EE64F032 /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AF5DF0C66469EF5555738D6E5627354 /* PFRESTConfigCommand.h */; }; + 70BBF7AAEFF4CFFCCDD1D3F5302DBCF8 /* PFKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 40F5313A31663C9C8E3E94C0B4789071 /* PFKeychainStore.h */; }; + 72564F530CFAD381D8A7CFD1B1B47D14 /* PFObjectFileCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2706634FB1F4B0C9210247AA1B420D73 /* PFObjectFileCoder.m */; }; + 733ED54DE313ABCD6329C5DA1FF971A3 /* PFConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = FA4D77F479BDDB7FCC802644C7B895D0 /* PFConfigController.m */; }; + 73B6479188603C72A53FB9FC421CA93F /* PFQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = C86658E5106D83528921871195EA7A25 /* PFQueryState.m */; }; + 740BEBCEE96550513F82009F6EC31FB2 /* PFRESTQueryCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = F4EBCD611EB0EB86EAF46AB78D6C9C9D /* PFRESTQueryCommand.h */; }; + 748A1772685C32F725BA2600ADE97D45 /* PFDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = BC4062E6A12C7F83FFAFD42283212C9A /* PFDataProvider.h */; }; + 74F9B9EE544827019AEE581B37594468 /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C6B7B3F0FCE545B7D965DEDF8ED4613 /* PFObjectFileCodingLogic.h */; }; + 757F100A35FB63BA1502DC805172F640 /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = EE062DC0F3E041826FDC9B1920238531 /* PFBaseState.m */; }; + 76D8001BD5AB652902CA1FC0DB707D9C /* PFPurchase.h in Headers */ = {isa = PBXBuildFile; fileRef = DCFD84DA41F7C585D9DC6E2088D8F8D3 /* PFPurchase.h */; }; + 778CD1498542F92CB6123208989067DE /* PFRESTSessionCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 81B7B344C875A3AB97E6C33C60A5F9BF /* PFRESTSessionCommand.m */; }; + 797F9DE6A96A3AA50F9F1905BEC4A423 /* PFAnalyticsUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 87310202CC115E0D59A56B46CE72FBD3 /* PFAnalyticsUtilities.m */; }; + 79EC922722642AB723AFCD1334D6FC8F /* PFMultiProcessFileLockController.h in Headers */ = {isa = PBXBuildFile; fileRef = D6A004354398DC71910DFA5EFAE2EE34 /* PFMultiProcessFileLockController.h */; }; + 7B95550B1E815BFCFE340A7F92CFA4EB /* ParseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E5BF16EBC1131EC1A8C8DF686217EDEF /* ParseManager.h */; }; + 7C5AF122E081CB9FC843FC60D91C6F94 /* PFInstallationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 025EFE1DD58EFDD344107DFA9F4AD477 /* PFInstallationConstants.m */; }; + 7E6015115360369B63B1A16ADB721B9E /* PFQueryUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 961B5EB24B86AAC41ED236D838A64A5C /* PFQueryUtilities.h */; }; + 7E990026C996B851DD9B64AC33E6E1E0 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F692090984F30582AD921FA0C5AF89E /* CoreLocation.framework */; }; + 7EEB09BD8675386B32149D4825B60BF3 /* PFRelation.m in Sources */ = {isa = PBXBuildFile; fileRef = CF97B19442AC920A6CD420C61B604C5A /* PFRelation.m */; }; + 7F12D30EC7D5E4D745FFAED681153D16 /* PFURLSessionCommandRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = 16E653F2F3740605E3A7745107A7C5DF /* PFURLSessionCommandRunner.m */; }; + 80927A64113E8537A162AC0A80D3C715 /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 4709648C670A81EACDB1DA9F808189F5 /* PFConfig.m */; }; + 80D966F69A8ABC2990F436A0B912F6DD /* PFObjectBatchController.m in Sources */ = {isa = PBXBuildFile; fileRef = E48021241236BB075308D3A946E88952 /* PFObjectBatchController.m */; }; + 80E90793223CC8EF9FFCAE92FFEDFF5A /* PFErrorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = EF3CEDC763708425D34FDAF2CD1194C5 /* PFErrorUtilities.h */; }; + 8177070BBD754F70104684D7C07BA968 /* PFCoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = ED136241C039AEF003B23EE29588B7DF /* PFCoreManager.h */; }; + 81FFB85F409642557D76727753156F5B /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 7046AB20AC12CE0D708ECF95F2C079BF /* BFCancellationTokenSource.h */; }; + 8201F53E30AFF0BEBE04A01B7D1B022B /* PFAnalyticsController.m in Sources */ = {isa = PBXBuildFile; fileRef = E7BE7DB2043BFD734996BA10DACD88D1 /* PFAnalyticsController.m */; }; + 83752150CB90EF43E3F8BE8AF9B919D1 /* PFObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BA78E8ED3B478FCE98D4154F24101BB /* PFObject.m */; }; + 839CECE9E0DF6BB8204EE4F8343213EA /* PFObjectLocalIdStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 362FACECEF69703BFA9C57ED74660D97 /* PFObjectLocalIdStore.h */; }; + 8446BA3BBA658BA82ED7F26D661D4064 /* PFMutableObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = 76730C16E6204729829FF1031310068D /* PFMutableObjectState.h */; }; + 84856F9EB910696DDA839ABDE36CB590 /* PFAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = B828EE160146AC71D96D74359D0B87D9 /* PFAlertView.m */; }; + 84933A33BD80139924D79100B6D929E2 /* PFCachedQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = EC05CE6C1335AF7439307E684A4A4658 /* PFCachedQueryController.h */; }; + 853F3B799C49A88B08934FE9C4288F79 /* PFProduct.m in Sources */ = {isa = PBXBuildFile; fileRef = AE99A29157A904C67890D7F7E49DDD80 /* PFProduct.m */; }; + 85BE00013EEAA089D5E198769CF5B7EF /* PFPurchase.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FBB8D23E11D288C6235C6730E4861BE /* PFPurchase.m */; }; + 85C00AEB98F752E4D8BB0569F8683105 /* PFAsyncTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 6285547694D0DE6096DB0174F62F8D57 /* PFAsyncTaskQueue.m */; }; + 85F5FE2F8C6718597B6C4E94CCE0D7BB /* PFCommandRunningConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 699EE24E208C84FB34AD727CE4B22B06 /* PFCommandRunningConstants.h */; }; + 860FC46193591C24CFB85207870A57EF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2BBD5A5E42C1E632BCED63C083AEA52 /* Foundation.framework */; }; + 868411E138047CFA6B4267A5DBF3025D /* PFAnonymousAuthenticationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 14C7CDE38DB399D405735FBBF03F2A7B /* PFAnonymousAuthenticationProvider.m */; }; + 86DC83CE56B98DB504E82439521B16CD /* PFPurchaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FF8D43BA53CAB9EC8CE2C3D9BB07585 /* PFPurchaseController.h */; }; + 86FC6A800E62791B570C07EDAD3F4000 /* PFObjectUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FFDBD38104590E7E7569E959BE85635 /* PFObjectUtilities.m */; }; + 877092E1B6D3E8C3C5F389CEE0053BCC /* PFURLSessionJSONDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E2EF54AD86CBB75239ED52C54FEE973 /* PFURLSessionJSONDataTaskDelegate.h */; }; + 87DB43D0F066BE9707FF38AEEEE7373D /* PFLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A061CE9E6A0CE32309E0356EB7DE8D9 /* PFLocationManager.m */; }; + 88617D3C42C91BF2F601AA3D1BD9E419 /* PFPushController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2758D4A6E71B967E09A910CF576817B1 /* PFPushController.m */; }; + 8919136675AD21F6E82FAFF82C3404B0 /* PFOfflineQueryLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 229A74FF17E8D46A86798DDFB3D12F02 /* PFOfflineQueryLogic.m */; }; + 8984D28B38584E5C904E13A53F5855A7 /* PFHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 48BA1E2ADC6C1A912806B4434C705899 /* PFHash.m */; }; + 8A962EB021D16BA9D5514AF20CD890BE /* PFObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 807B1D200CD50072E1017510EC7A3B8E /* PFObjectState.m */; }; + 8BB11F7A78DD3D2E36194C5BBB8B2A80 /* PFMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 04F603E8068EB055DB1098ED088FBC0B /* PFMulticastDelegate.m */; }; + 8BBC96F61D6C0A337739C2510B316483 /* PFCommandRunning.h in Headers */ = {isa = PBXBuildFile; fileRef = C09DCB3EF4CB0BAF12A22BD98B68BFAA /* PFCommandRunning.h */; }; + 8C753DE7AD359D4E643A13D21F559A03 /* PFCurrentConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = BFFD2763428584483FBC7980FDEE0319 /* PFCurrentConfigController.h */; }; + 8CF2F3C2B486F8EC6FE55E6A39462E4B /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 384135DE37094DB8E731205CBD17F72F /* PFURLSession_Private.h */; }; + 8E1E26EAE490E452B6660B761FDC52ED /* PFRESTCommand_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FF94702CE18ED34C2681EF97F7E85B40 /* PFRESTCommand_Private.h */; }; + 8E72527532872043FC285D78C338ECD7 /* PFPush.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA0FB7E1B7B3B44E19E9F459BDE3FC5 /* PFPush.m */; }; + 8F4D11CE5DAF8E38B689D107E29D8558 /* PFObjectLocalIdStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 769433A4610BC66862A645AA9FFF52CB /* PFObjectLocalIdStore.m */; }; + 8F50489FB2E08C672EEE767BC05F818E /* PFMutableFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = DDE9B6448BD79C26C031AB51DB767056 /* PFMutableFileState.m */; }; + 8F8455F10EEB3772AE588EA9E3A3F7AE /* PFHTTPURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E2405EA0846F25769ECD3AD50DE9EC2 /* PFHTTPURLRequestConstructor.m */; }; + 9093266F675B6073EA7E27CB8505C7A9 /* PFPushManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A327BF223427530CA8B748A9862FA426 /* PFPushManager.h */; }; + 90B7F7FD1811534484E2AF1BD75CD7CE /* PFWeakValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F9009C1FEECA9D4795590A5794DD2B1 /* PFWeakValue.h */; }; + 90EAC88772A18DD0737B15E7CDB2AE66 /* PFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F48BEB733DD91A7D53CF88B21A269709 /* PFNetworkActivityIndicatorManager.m */; }; + 91F3B9A8260A288980D16C63193281D7 /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = E7FA04FB8AE086B49BFBB161FB6C5A22 /* BFTaskCompletionSource.h */; }; + 92903FB655BADB2CA51988E598CDE90D /* PFRESTObjectBatchCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 68A4262C2B21FF46E63C3BB478773563 /* PFRESTObjectBatchCommand.h */; }; + 938B9E0D778946EB4A20DE22D925E0BA /* PFRelation.h in Headers */ = {isa = PBXBuildFile; fileRef = D74C3795282F4C34ABC6339CF12F14AA /* PFRelation.h */; }; + 93F07AF465A16197BDD89A01907DAF26 /* PFNullability.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E7CD5EAEAC1BC3148596E0F47F3CA74 /* PFNullability.h */; }; + 94E4771CB1CC8B24BAAB0FEDC0E8B302 /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB26C97146C83F5B87B7771DE7F29E0 /* BFTask.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 95F347CD382221D4B61BC52B4D0ECD99 /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A9EF3EDC4FDAFC57AB7D03F2B66F8398 /* Bolts-dummy.m */; }; + 9645F2C8D5B779635F7D999C448335D9 /* PFObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = BF48D0C85E7175A9594CACE087E1F8D3 /* PFObjectControlling.h */; }; + 96A1FACC2037256FAE41C1595CC5D5CB /* PFUserAuthenticationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B7919554958754AF6F15E6D978D43B0 /* PFUserAuthenticationController.m */; }; + 96C87B5E918E645F7D5A5D1E5FF9AB94 /* PFSQLiteDatabaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = FFC9A812BC50C9BE9A45E1BE4A59532D /* PFSQLiteDatabaseController.m */; }; + 972A00EFBCA4704A240530FE23B686E5 /* PFObjectFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ADCE9E163F3FCD8DF103AD6E0A2840B /* PFObjectFileCodingLogic.m */; }; + 9A329CA60FD01A9E79AD818D57C3E3C9 /* PFCoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 03E890753CE899F60DD6626F8404DF58 /* PFCoreManager.m */; }; + 9C50DCE43E19C07A531CAA9DAF92EC44 /* PFSQLiteStatement.h in Headers */ = {isa = PBXBuildFile; fileRef = 993C9598765F98AA0527D81D83D6DEE2 /* PFSQLiteStatement.h */; }; + 9D104866E774B46DE983ECE270A0BACB /* PFTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = AE1AF3237CA729A9AE65C24D5465EDB0 /* PFTaskQueue.h */; }; + 9D1D9ED97579645663CF95211A6FF5B6 /* PFLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 216E10883658EDAA1467BD1DDBDDC840 /* PFLogging.h */; }; + 9D22D569F427BC219F2223C416FE17D9 /* PFURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = B5F07D1F2661374F427EFA9F321E58A9 /* PFURLSession.h */; }; + 9D37DC879729E2F3E90B41F02A6B5424 /* PFRESTSessionCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA4F24522BCB8A666417FFCCCE66FAF /* PFRESTSessionCommand.h */; }; + 9DEE6CB63547C18B4C3BE6E8F6789704 /* PFApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 00853C35851DB9DCB92267B2F10343F6 /* PFApplication.m */; }; + 9E5114DC7AB77045B4AC2B1224CD4B84 /* PFPinningEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 44FB09F8C2981A2C9E4660E4FABC1F83 /* PFPinningEventuallyQueue.h */; }; + 9E8416764D2372D8E2DA93D9ECC89410 /* PFRESTCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 83D00AFB6C86BE198D122C01CC505FB9 /* PFRESTCommand.h */; }; + 9EFF52CB3098B8B01A216C3AC7AC7DB2 /* PFInstallationIdentifierStore.h in Headers */ = {isa = PBXBuildFile; fileRef = E6A7D84E1E43EC5B6384808B1B5E2C0D /* PFInstallationIdentifierStore.h */; }; + 9F4B0D8ED2F69D51C5B934D536578CBA /* PFQueryState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D2FD8C2062E42D035690B0D01AEA8DB /* PFQueryState_Private.h */; }; + 9FF8F72E67A6BD77BD9C17C285E8B543 /* PFConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 765B7A2AA534A8E804AE9123D59C9043 /* PFConstants.m */; }; + A0C41C9B793A9571B762B20575FABA97 /* PFMutableACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 88690FBD663956E84E2502DB50AB5408 /* PFMutableACLState.h */; }; + A19B0FD91C9C97E87E5B06DB621DF4FE /* PFFileStagingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 366813962B9A44F8160D7BCF13112B91 /* PFFileStagingController.m */; }; + A1BB2E8C1D3FCCBA44DFE673B60922CD /* PFCloud.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F51DFCB9E569CD5791CBA701D9AFE8C /* PFCloud.h */; }; + A2E5498B4A910CDD676173C8F3798B39 /* PFMultiProcessFileLock.m in Sources */ = {isa = PBXBuildFile; fileRef = B5045A6DC57A247B1BB14933FDCA672F /* PFMultiProcessFileLock.m */; }; + A2E97F94192C6D49A7381186A58DEA71 /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = C876DBA76406D0CD90D0A146D8241EB0 /* PFCommandRunning.m */; }; + A368D821FA95C5524EDBED8BCB084CE0 /* PFRESTCloudCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 77442B142F2E19A0A0521AFDCF58C91C /* PFRESTCloudCommand.h */; }; + A4477AAEC61E1731E8E2528161F6016A /* PFAnonymousAuthenticationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 68BF84CDE3833CC1EF16696ED2573967 /* PFAnonymousAuthenticationProvider.h */; }; + A4699E368ED73135E902037AC6F5EC66 /* PFACL.m in Sources */ = {isa = PBXBuildFile; fileRef = A1C2072D5B7941AF0CA6A45698E16D81 /* PFACL.m */; }; + A4A9994EC1B2B5FE681A95E532942577 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2BBD5A5E42C1E632BCED63C083AEA52 /* Foundation.framework */; }; + A5065060A9FAB79E3458CB76F4B1F180 /* PFObjectFileCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 81A6715334A0491BEE68AE8FEF91CA79 /* PFObjectFileCoder.h */; }; + A5F2F863073EF75443E528E22A276823 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2BBD5A5E42C1E632BCED63C083AEA52 /* Foundation.framework */; }; + A6131891A9A0A9C9F694D2B047CD3FA0 /* PFQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 00B8BB0329F997188B363E677BBB666E /* PFQuery.h */; }; + A7126EF0D19F750C84DED66110D9E154 /* PFObjectConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 0839D4C7AB14AABD676EF16D9D297FE7 /* PFObjectConstants.m */; }; + A9290983F7521930A41832FF52CDB240 /* PFFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 474A59362210E10E859CD9BA539B75D6 /* PFFile.m */; }; + A939FB79FC0655BC78AF111F85092FFA /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = E687834AAA233DAC2762507DAF840866 /* BFCancellationTokenRegistration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + A95C861682E0DF65260AD321E8EA8F50 /* Parse.m in Sources */ = {isa = PBXBuildFile; fileRef = D236BD308CB967D7FED84A202A4B215B /* Parse.m */; }; + AABDDA3F9EF9F5C4105849B0FA7D7B71 /* PFObjectEstimatedData.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BC6D066DB5DE208C19F3EF18D5033CF /* PFObjectEstimatedData.m */; }; + AB40902E23A9720B910155E68C5D1A5D /* PFCurrentInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = D1502154EA0D5A991A1D6B8B9EFCB52F /* PFCurrentInstallationController.h */; }; + AB487ACB6998FC1A5C71E553A2DDD1D5 /* PFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 45D0E44482F38FEEB37F4CE77B608864 /* PFNetworkActivityIndicatorManager.h */; }; + AB76D332CB4C250B0948C1742763F304 /* PFBaseState.h in Headers */ = {isa = PBXBuildFile; fileRef = 40001E702307C45CF85652D32E688A7A /* PFBaseState.h */; }; + ABD52D6EB2913FF8BAC14E669ECF1F89 /* PFGeoPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C9096CC3342212FFE41602D93C0C169 /* PFGeoPoint.m */; }; + ABDD20576F8BEF189B0826937FBFC9BF /* PFReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = F75EB19F28291BD31FAFD036CE9F9A61 /* PFReachability.h */; }; + AE97140D93D68F7179BC001727897BDF /* PFSessionController.m in Sources */ = {isa = PBXBuildFile; fileRef = BF600E65BDFE51829FB662904C48520F /* PFSessionController.m */; }; + B0246442FB3AD47E4FE651E20DFA0F12 /* PFMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 870CCACCA994D6092C3A667F1EC7EE38 /* PFMacros.h */; }; + B067DFF8D2A7CD44742F7AA7BFBE4DF5 /* PFPinningObjectStore.m in Sources */ = {isa = PBXBuildFile; fileRef = FA2438B1DDEB1848F5F5D82CB852583E /* PFPinningObjectStore.m */; }; + B0ACEE94E47398A49E87F2862B25479A /* PFObjectConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 85D8C47DFF7FF802AF326B4C6383AF35 /* PFObjectConstants.h */; }; + B11EC1B10A6BFC5C0589BA1D520B731D /* PFWeakValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E530CB9C9FCEEC48D0D6022A3B9E461 /* PFWeakValue.m */; }; + B19D62A8B55B539FC5B7B1D294EB91D0 /* PFSQLiteDatabaseResult.h in Headers */ = {isa = PBXBuildFile; fileRef = D60478F0E7C4D7B2ED83ECC80C4ED55C /* PFSQLiteDatabaseResult.h */; }; + B40DCDEA8223768D03C17C146CA9D833 /* PFInstallationIdentifierStore.m in Sources */ = {isa = PBXBuildFile; fileRef = F228BBFAF9E26128FBEF282FE73D477C /* PFInstallationIdentifierStore.m */; }; + B4B7577A1C0206DEB36F683B3B17452C /* PFCommandCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 41BEED2F8941DE9D36C4383DE2A005E4 /* PFCommandCache.h */; }; + B4E9270B79198BACEECBC96F4D246292 /* PFSQLiteDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A33DBA763E58A23158889AB7E55D1E8 /* PFSQLiteDatabase_Private.h */; }; + B5175724B04DB9C34B2F3EF3A7A51038 /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 671CEA32EB838EA2DB18154A0B781F41 /* BFExecutor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B551D2476C3AAD8B21C592D097C2292A /* PFFieldOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = F80064D5DEE86FA0C8D24134A843AFE1 /* PFFieldOperation.m */; }; + B5B3760EB16FD470D5A422411C53EDB2 /* PFInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = B60239EFD344C553851D340E46C88513 /* PFInstallationController.m */; }; + B6227EB171D030EE81F4D8D34D6C9439 /* PFMutableUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = 355562D77F7A3ECC89ADA55D047757BA /* PFMutableUserState.m */; }; + B6E585E0327BC1EB0EC7C0D4803C1CB7 /* PFPinningObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = D1C861FA6983C0DBEE507CDD33BA8714 /* PFPinningObjectStore.h */; }; + B7B8B9FADA4A622D966203776628003D /* PFEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = C52FA914AE60BC50812988E15670B2B0 /* PFEventuallyQueue.h */; }; + B7DFA8419CDB3F24CB17D7F079BDDDFF /* PFPropertyInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = BD59DB857ADCDA5EE20B1AF8286DC64E /* PFPropertyInfo.h */; }; + B8EE5009876838F73F966C879482E31E /* PFObjectSubclassingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 67597E3A5597B762BEC0ED0EC7E967FF /* PFObjectSubclassingController.h */; }; + B9475D22177552BAEB62F160856477B8 /* PFCurrentConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB5DEC6229F3BE36F1F514679A24AE3 /* PFCurrentConfigController.m */; }; + B9B9AF304C0403A3BAAACD98C5E8AFC0 /* PFRESTUserCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D283291B477D2080EBFC60E0CE5B3A3 /* PFRESTUserCommand.m */; }; + BA0F98005F9DABD84663A387BEF9F176 /* PFConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = CB2EB1A81CEF041251C51543CB93FA8B /* PFConfigController.h */; }; + BB42E917B4369EE6FC673DAF75718784 /* PFFieldOperationDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 7398989E9BACC2972DD360A682AB30D5 /* PFFieldOperationDecoder.h */; }; + BB4D992680D6BB33E5C968E33F7E3DE4 /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = A2053B7041E0633DF0F9AD94C7B1956F /* BFCancellationToken.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + BB506A2582FF02EF9A8878CED3067763 /* PFSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EB39D6AC1AE16A8B7C4F5DE8BB6C0A5 /* PFSession.h */; }; + BB5E92B3C27899346D398F1ECC11B87D /* PFCommandURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = DFC186001D6B517135B8C4D67EEC1DBA /* PFCommandURLRequestConstructor.m */; }; + BBE39348815CBF413FBEE01EA88DF139 /* PFUserPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = D66D14F7F2E3EBDC0A59BB7BA3788C3D /* PFUserPrivate.h */; }; + BBFD842A73C7E49063FED96A15941663 /* PFCommandRunningConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 83EF521AE88F3E4B58595E6C70734633 /* PFCommandRunningConstants.m */; }; + BCF97E49683310C768AD0DB174D953A6 /* PFOfflineObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = FEA99D72FAAF1C1CCB030F44B7765976 /* PFOfflineObjectController.m */; }; + BD57C1BBE4605BE1BAD1722EDD356DD3 /* PFHTTPURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = A4ACC59626D38782D3773A813251B790 /* PFHTTPURLRequestConstructor.h */; }; + BDC924266A1575B8E3D5B70544ABE0BB /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4339829EF9FC5B8B3459DBD79F65C0D6 /* CoreGraphics.framework */; }; + BE2A298EEBFCB48E5ECAD768415B6F7B /* PFOfflineQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = B32EAEBB2BF0E7999CBAA8BBC9844BB8 /* PFOfflineQueryController.m */; }; + BE6BE0E6CBF7800AD744FEAA941A3465 /* PFGeoPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = D2CC64D2FEDF6A4C762798A614A6AD05 /* PFGeoPoint.h */; }; + BEBD3B38DAA52881F9B5BC24981B374A /* PFRESTConfigCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 47D9BB43AF2C76037F90ECEAA05CFF01 /* PFRESTConfigCommand.m */; }; + BECA671768224F85FF36E96155A518AB /* PFUserState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 754F92799C47C441BC69A6DFCA0BE689 /* PFUserState_Private.h */; }; + BEF81BBCD4ED12BDE45EA7F15396016E /* PFHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EAC8A1F239CB9A07C89A445269755B3 /* PFHash.h */; }; + BF790169F293998D1D7E9C5A4772286A /* Parse-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5456C5EDD601EB1F4939A1ADFE7EB84F /* Parse-dummy.m */; }; + C1035BE9B7CD66D132D57EC819BEF1A2 /* BFDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 7865F2D426B0005FBA1C5220282DDBEE /* BFDefines.h */; }; + C3834A5D49775B2837F1AEDC533AA3B0 /* PFFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A95C008395C7EBC9844E3F003B06DC43 /* PFFileManager.m */; }; + C3E601B9D58FDA8A74543A1F61A6A9C2 /* PFAnalyticsController.h in Headers */ = {isa = PBXBuildFile; fileRef = E879D654F92A43EBF40100EDA8F4723B /* PFAnalyticsController.h */; }; + C424C8C02491EE32FE76D0E4163B9BBB /* PFPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D7EDE5ABF288993846E8BEA60CE324D /* PFPin.h */; }; + C462C51661AE5C5C699600115E6C3F7B /* PFPinningEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C3EB736F8A50220457120DE7F4E7DF7 /* PFPinningEventuallyQueue.m */; }; + C4E268B9B9161164425357E786164D39 /* PFURLSessionUploadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 31479B7C07EEF4712DEF1D01F7F10F31 /* PFURLSessionUploadTaskDelegate.h */; }; + C51B1034BD7B97F14B96174A22774353 /* PFOperationSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F4F40BD61DDB1C6011B29A82B9D4674 /* PFOperationSet.m */; }; + C5C0E8C288C12762154DCC0F340146BE /* PFRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E5C86338C3B23D609E0EF8581B094C1 /* PFRelationState.h */; }; + C62A65AC30EF279D3F45C8BCFE29CBB7 /* PFPush.h in Headers */ = {isa = PBXBuildFile; fileRef = 8ED3D96C01E8D4CCBEF611AC599F7C52 /* PFPush.h */; }; + C72908FECB9E74136372BCA3AD9EE391 /* PFThreadsafety.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FB342435842C135A1CE8351177875B1 /* PFThreadsafety.h */; }; + C7D5C0CCE8FED60316E097119AB85B71 /* PFRESTObjectBatchCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 16E2B74C340852FB7F8D0C347EE34F7F /* PFRESTObjectBatchCommand.m */; }; + C7DFB1EFA8D89E8D20B388A49EDD0469 /* PFMutableFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = FC5FEFC8C99E02AAEE60AEBC8FF0063B /* PFMutableFileState.h */; }; + C7F76403B814F07C1D00E11603582FED /* PFInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = C3021C35E215764D5CD8DA96BB1AF638 /* PFInstallationController.h */; }; + C8B565A5FAE25F356E3167DE8E552888 /* PFUserConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = AEFE2975AB948B5A15901ABF3D7C9456 /* PFUserConstants.m */; }; + C996FA0B2FD01FC4E184D94D099F80E4 /* PFRESTQueryCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = E748E925ED12231ECAFCA45289DC5651 /* PFRESTQueryCommand.m */; }; + C9B15BA38AA3376525875D51D613A23F /* PFMutableQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = 80356D4DBFA9C24B249DE3B4717F44B8 /* PFMutableQueryState.m */; }; + CA8CF4B0AC490B512098FDF3D38231C0 /* PFLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C0BDD882C72C66B96CB5D72117728F8 /* PFLocationManager.h */; }; + CADAF04325069E2ACD071E78464D5F01 /* PFUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = B71BDBAA3E5BDFECB4D5FA52A92DDE3C /* PFUserController.h */; }; + CC7E1C47F96A8CC0208D52813BCA5EFB /* PFRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = FE24B408A21AA65A2C6C5ECD3A88084D /* PFRelationState.m */; }; + CC94A8F427E66A8FA99D9055DA53B3EA /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 96AB7832E582A38AA7D72F9B8735C3BA /* PFGeoPointPrivate.h */; }; + CCAAFE317844FA11C6D10C4D45A3D3EA /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = B3F709284CED11CD6FFD287A21D7356C /* Bolts.h */; }; + CDBC70BDA28EE44ACC5E185B96CD173E /* PFUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = DCA2CF0514C165F17D511A7B9FA1A883 /* PFUserController.m */; }; + CEDBF7752568F29834130E179561EE36 /* PFObjectUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = A6604E156E00003CEF6AEA0518B9D55E /* PFObjectUtilities.h */; }; + CF4A07928EA83BE04E74752404C0901B /* PFBase64Encoder.m in Sources */ = {isa = PBXBuildFile; fileRef = D32CB47208011940CD4CC821E6C60F5F /* PFBase64Encoder.m */; }; + CF8AA88826DDEA177B316087418EF4C1 /* PFFile.h in Headers */ = {isa = PBXBuildFile; fileRef = ADF1886AF6A65E3EF655A0635E8875D4 /* PFFile.h */; }; + D29355C584330A8CA82B54F7FC0AAA6D /* PFObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DAB9F63DEB559E36F66611AC7532E7C /* PFObjectController.h */; }; + D2B62B011E42DBBBEB20DB5FA2BBC6CF /* PFSessionUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = A1EA7AD5E3D6B3D7DA51A46514ACC1B2 /* PFSessionUtilities.h */; }; + D38ACD0F5A751B876F12D485CC1A60C3 /* PFReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 147E2DE0E42F38E2305A44CF01419B5A /* PFReachability.m */; }; + D3E77F4136625007DED4F9DA91C4A6C6 /* ParseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 11275EB0053B04F601BEF4D31A1367BE /* ParseManager.m */; }; + D41850BD9C694569BC9A4A3DB7057035 /* PFObjectBatchController.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F7E58ACE9D749D100E04FECD569B45 /* PFObjectBatchController.h */; }; + D5D35F7A6872F3CADB7CF4376955901B /* PFPropertyInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 01E9E0D58701D7F6B1D72B98440AD9BA /* PFPropertyInfo.m */; }; + D653044CBFB6B5F7FFEFA8FB323DB9BB /* PFAnalyticsUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 17530FFB4F9A63C5FF114E86EC313B18 /* PFAnalyticsUtilities.h */; }; + D6662D0C2662EC0C464F1D964AF3C1DC /* PFPropertyInfo_Runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = BF7A6665C70BAC3FA8DEA15E402165E2 /* PFPropertyInfo_Runtime.h */; }; + D6AA4C7F8504A7E1044BC4BECDC527E7 /* PFAsyncTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C03418CCE96F211DA0F0C490AB018EE /* PFAsyncTaskQueue.h */; }; + D6C69595A3E8D1C76302D93579BC2E1A /* PFQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = A3E3489C8DBCB1ADB9C7893D90F60918 /* PFQuery.m */; }; + D7AB950DD05ED85D2D62ACE84D6766BB /* PFMulticastDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 23269D2652429AAB9E5717B42C4C40FB /* PFMulticastDelegate.h */; }; + D94A6B308D8C6D612A4AC46C06E39089 /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 18D995618F24B9FE1FA4F15699A5A8BA /* BFTaskCompletionSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + DA1218D74E032808445B74A57F7046AF /* PFRESTObjectCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DC7C863A91F293E7888686B75ADDA92 /* PFRESTObjectCommand.m */; }; + DBA40E524C6A1078E5E761DA1CF7E3F8 /* PFOfflineQueryLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = F9250F0F20E5E4ED980A30FE96202787 /* PFOfflineQueryLogic.h */; }; + DC30BA853B6702BC2982611F14FE4B6F /* PFFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BEF001B9410A4976104E85881DB3C58 /* PFFileState.h */; }; + DDF9E75DC117BAC673631EC5DA70A175 /* PFInstallationIdentifierStore_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 010221E298AB835936ED04C1B61B2889 /* PFInstallationIdentifierStore_Private.h */; }; + DE95C6570B92EB4D071564C49B075A58 /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F10C0434DDB383B055CF6CA6E41A4A1 /* PFDecoder.m */; }; + DE985311ADE8FDE921FEB4AFB9A89A5C /* PFObjectController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D9415A793D299204A98D83B774768B1 /* PFObjectController_Private.h */; }; + DEA88B8DD23B199712A1ABCFF5C4338F /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5964B03763EB227A79722D086B07AEB /* StoreKit.framework */; }; + E0384F193693CF247589281D002527EC /* PFObjectEstimatedData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5878493E65CFC3022C41DAF663AAD6DF /* PFObjectEstimatedData.h */; }; + E097C48262B95CD4859E7E97439EB0E2 /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = CF82FA8252D0DEF399D32F39A272A631 /* PFQueryController.h */; }; + E0B0A3870E5B217EB20F7CC49F37561C /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F0F73BA329E4FD6AA01176C7431EBFE4 /* Pods-dummy.m */; }; + E15F9A1D17C7A7EDB1CA1019E2B9FC40 /* PFRESTCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 6041A7EB33A2C8DBA16E95481F6E955A /* PFRESTCommand.m */; }; + E235199DDBB89E9541CDCB0F38C15E56 /* PFObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = CB26278765FDFC13590066F6B6BBE08C /* PFObjectController.m */; }; + E541D6BB943BF7613FB797ED4F7959A8 /* PFRelationState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EF48103F2FD65D41AC8CEF7D0FFAC5B /* PFRelationState_Private.h */; }; + E696825C17F655DBE6CDCA4DB750A0C5 /* PFFieldOperationDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 556C88BEC9C2F89C47B0E0710DA1127B /* PFFieldOperationDecoder.m */; }; + E73C2EF366DE82A709A6D65EEBE1328C /* PFInstallationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 765173C954A51B493E29F50B2D97732A /* PFInstallationPrivate.h */; }; + E847CDDB808B57C6B1CB83DB1FF883F3 /* PFRESTCloudCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = C182382BFBF1EE8F2E17E6E7DFCABA57 /* PFRESTCloudCommand.m */; }; + E91D0BF506F05FC556E93269A6A62288 /* PFQueryUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = E18313F9207DA8A940C45F4C6D3BE5A2 /* PFQueryUtilities.m */; }; + E9B4C4B574F58F61A14C2E6CDDC87FA9 /* PFURLSessionDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 61C33185F5BD57BDE3231949A2133ABF /* PFURLSessionDataTaskDelegate.h */; }; + E9BF687CA4B676BF9C0CAF6BBCD7B1C6 /* BFTask+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DCFFA9D9D3FD9AE7914C3CDBC03F386 /* BFTask+Private.h */; }; + E9EC843D6BF988766F5A9C48315B572A /* PFObject+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = 08D3D6F3DCED7306E944D33A3186C1AF /* PFObject+Subclass.h */; }; + EB1A21CE8A9D7D202B2B2F268CE0BBD0 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 50DC95668369AC8E5CF51D8FE228F223 /* PFEncoder.h */; }; + EC3E7E5D47C8C4485FABD0262AA04B0A /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27841483445CA9ABFA8CCFB3D503D752 /* Security.framework */; }; + EDA20A21CCE9BA77B2FA0E5BDEFFC85C /* PFConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = C3D50155B3D10EDC8634E8BCE3E2EC49 /* PFConstants.h */; }; + EF3044F21842A80CD8FD8C0FD2957126 /* PFMutableQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 23B01EE10487D2A55A89CF394A299B88 /* PFMutableQueryState.h */; }; + EF687C393CB8A31B06A885E88BAFF74A /* PFPushState.m in Sources */ = {isa = PBXBuildFile; fileRef = E0937DFD0BBDD358F01F54D3DF3EB180 /* PFPushState.m */; }; + EF7185106F1DA78162F656D8C8DA1B7A /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CCA791631F559F162C6A4858BB0E605 /* Bolts.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + EF91ACE6A4CFF1DA4621FB864B05C627 /* PFPushUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = BF1F7285450FFB765AE85728E98D3277 /* PFPushUtilities.h */; }; + F0072DAAA0B07AE29273FD1C342F4A5F /* PFSQLiteStatement.m in Sources */ = {isa = PBXBuildFile; fileRef = B82B704DB25FE99DA94E96510CA4115E /* PFSQLiteStatement.m */; }; + F057CC11EE9249F520F2B4C7F60DD936 /* PFCommandResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 1170CA07F5721584040D06438ECB2657 /* PFCommandResult.h */; }; + F0EB7E98687B60B2E02E3ECA44E650E5 /* BoltsVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A17244CCBF6923F4C1448B4C7F8259 /* BoltsVersion.h */; }; + F111957FFF0FDC2AD0F4BCCE1BFEA4E8 /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 023EEFF1E9891B8B0993596D706A7137 /* PFEventuallyPin.m */; }; + F13F4E6F88ED4165359AF317F66E33E1 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 17A2BDCAD5B27E331974A22F463E44CF /* BFCancellationTokenRegistration.h */; }; + F184E6760F65F61A5F0732CFE59C2217 /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 96273707C86B8C6EA8146C952F2EBE64 /* BFExecutor.h */; }; + F2B43B2AA76C12DA90E65116C8FBC517 /* PFSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 24DA2B1B50C58F417BC0F3413CC0937E /* PFSession.m */; }; + F347073B50A9BFFAB4F094C75C9FC502 /* PFInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = 152A294FCBAFB2F303701CC560D0CB9E /* PFInstallation.h */; }; + F3D2C0C8C3C2249EE1A03C9AF084946F /* PFFile_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 144A3BA47B4A9DFCE62E998D209A9844 /* PFFile_Private.h */; }; + F5BEC2186FCF846EC561939D9C1BD52F /* PFFileController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C366C40EE46E2189B1D2710D70DFAC4 /* PFFileController.m */; }; + F5CC151EF0B90D7A2BA370DE2C79CC38 /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D4C06D28A83DD5865841731DD2BB1C /* PFInternalUtils.h */; }; + F5F2E1B52DF9F451F9947CF1B9A3369A /* PFObjectSubclassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B30FD2D2BC16F38BEB58093ADF82B7A /* PFObjectSubclassInfo.h */; }; + F84261406724B9DE27CCBFA304B8CF92 /* PFAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 116F73992D0A8BEB52EB6FFCE76C5242 /* PFAnalytics.m */; }; + F90710408C3BD5A0958AD6C0B779B8E6 /* PFPushUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = CCE521672B33AE35219C0DBD9512A6E6 /* PFPushUtilities.m */; }; + F94D1E24CD4E2406DD6F9A7CE579CD49 /* PFOfflineQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = DA979320C889B93770A321587B8E4496 /* PFOfflineQueryController.h */; }; + FB6BCDEB8CB52625CB351ABCD809DE66 /* PFMutableACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = FDA614FFD9F4D7DF03E545167A1236CE /* PFMutableACLState.m */; }; + FBA47F7FD3DECFB1FAB1E0BF580D7E4F /* PFSQLiteDatabaseResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 95F2D7917180A966F3553DB814B47079 /* PFSQLiteDatabaseResult.m */; }; + FC440F2A2D5DA843204E46C17E101F89 /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A38E54B7ADBF7D1932DAF9BF6DB999 /* BFTask.h */; }; + FCD5921048744A9B9509182C12DC3B2E /* PFCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = B6483E9C28C9D90DBE19EE9FEA7C05BA /* PFCategoryLoader.h */; }; + FE046E97BCDE38C14F403CCDF301B12F /* PFSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 23D468ADFF594C052225A0543E3B6A56 /* PFSession_Private.h */; }; + FED49F2A0FC8765AB17492CD955D2A12 /* PFMultiProcessFileLock.h in Headers */ = {isa = PBXBuildFile; fileRef = BD7E295A2705B98E78F1230626724816 /* PFMultiProcessFileLock.h */; }; + FFD37837303F10D59626447CA527DDC7 /* PFPushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FF2D70E2A6BDA411BD8E96BE88717F8 /* PFPushManager.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 3F90957483AE8162292532A1129FE0C4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = A3CBE48EB714CEAD058125E015A71ACC; + remoteInfo = Bolts; + }; + 4896CFC37B685DBA38EF0D354BC28D0F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = E09D69912D3DE5D63052370034A0DDDC; + remoteInfo = Parse; + }; + 6AA41461EE8D58D339E66102A9A4877A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = A3CBE48EB714CEAD058125E015A71ACC; + remoteInfo = Bolts; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 00853C35851DB9DCB92267B2F10343F6 /* PFApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFApplication.m; path = Parse/Internal/PFApplication.m; sourceTree = ""; }; + 00B8BB0329F997188B363E677BBB666E /* PFQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQuery.h; path = Parse/PFQuery.h; sourceTree = ""; }; + 010221E298AB835936ED04C1B61B2889 /* PFInstallationIdentifierStore_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore_Private.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h; sourceTree = ""; }; + 01E9E0D58701D7F6B1D72B98440AD9BA /* PFPropertyInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo.m; sourceTree = ""; }; + 02237672394DCB6999F68D60FB362A3E /* PFURLSessionJSONDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionJSONDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m; sourceTree = ""; }; + 023EEFF1E9891B8B0993596D706A7137 /* PFEventuallyPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyPin.m; path = Parse/Internal/PFEventuallyPin.m; sourceTree = ""; }; + 025EFE1DD58EFDD344107DFA9F4AD477 /* PFInstallationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationConstants.m; path = Parse/Internal/Installation/Constants/PFInstallationConstants.m; sourceTree = ""; }; + 02841C3BEB92D4DAC26220C5C7CE9740 /* PFErrorUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFErrorUtilities.m; path = Parse/Internal/PFErrorUtilities.m; sourceTree = ""; }; + 032A4A6705724272DE8FD9BC94C95C33 /* PFRole.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRole.m; path = Parse/PFRole.m; sourceTree = ""; }; + 03A69FDE3FBBA48FAFAB93667FC64A05 /* PFFieldOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperation.h; path = Parse/Internal/FieldOperation/PFFieldOperation.h; sourceTree = ""; }; + 03A98730119221482A511C33FBD4CBF9 /* PFObjectSubclassInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassInfo.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m; sourceTree = ""; }; + 03E890753CE899F60DD6626F8404DF58 /* PFCoreManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCoreManager.m; path = Parse/Internal/PFCoreManager.m; sourceTree = ""; }; + 047743A34224268FD55BB1875D8232CA /* PFURLSessionFileDownloadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionFileDownloadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h; sourceTree = ""; }; + 04F603E8068EB055DB1098ED088FBC0B /* PFMulticastDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMulticastDelegate.m; path = Parse/Internal/PFMulticastDelegate.m; sourceTree = ""; }; + 0539CEFD73A9E47FC3CF538787C89A88 /* PFRESTObjectCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectCommand.h; path = Parse/Internal/Commands/PFRESTObjectCommand.h; sourceTree = ""; }; + 0839D4C7AB14AABD676EF16D9D297FE7 /* PFObjectConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectConstants.m; path = Parse/Internal/Object/Constants/PFObjectConstants.m; sourceTree = ""; }; + 08D3D6F3DCED7306E944D33A3186C1AF /* PFObject+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFObject+Subclass.h"; path = "Parse/PFObject+Subclass.h"; sourceTree = ""; }; + 08ED2E2E627F66EA8CC90121737CB747 /* Parse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse.h; path = Parse/Parse.h; sourceTree = ""; }; + 09FEBAB0B414EEEC06B7B89FD63280F5 /* PFPropertyInfo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Private.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h; sourceTree = ""; }; + 0A180E3CC6A83C085262778CAE43767A /* PFObjectState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState_Private.h; path = Parse/Internal/Object/State/PFObjectState_Private.h; sourceTree = ""; }; + 0A33DBA763E58A23158889AB7E55D1E8 /* PFSQLiteDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase_Private.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h; sourceTree = ""; }; + 0A3BD59B59438D47928EBE062F284A88 /* PFEventuallyQueue_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue_Private.h; path = Parse/Internal/PFEventuallyQueue_Private.h; sourceTree = ""; }; + 0B30FD2D2BC16F38BEB58093ADF82B7A /* PFObjectSubclassInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassInfo.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h; sourceTree = ""; }; + 0BB18584CF736AD36BCE6DE812088676 /* PFAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAlertView.h; path = Parse/Internal/PFAlertView.h; sourceTree = ""; }; + 0C03418CCE96F211DA0F0C490AB018EE /* PFAsyncTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAsyncTaskQueue.h; path = Parse/Internal/PFAsyncTaskQueue.h; sourceTree = ""; }; + 0D2FD8C2062E42D035690B0D01AEA8DB /* PFQueryState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState_Private.h; path = Parse/Internal/Query/State/PFQueryState_Private.h; sourceTree = ""; }; + 0D3318F94B3CCDF4EC509F49C45A27FC /* PFSQLiteDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabase.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m; sourceTree = ""; }; + 0EC3943147EE9557BE2120CF2329E38E /* PFInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallation.m; path = Parse/PFInstallation.m; sourceTree = ""; }; + 0F2AE28A9117ECBD3FEA8A80E3592B9E /* PFSessionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionController.h; path = Parse/Internal/Session/Controller/PFSessionController.h; sourceTree = ""; }; + 1048C89864CA1BAAC39909E7EAF64FF7 /* PFACLPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLPrivate.h; path = Parse/Internal/ACL/PFACLPrivate.h; sourceTree = ""; }; + 10BF5DBDEACF811090B330EB5B9574DC /* PFUserAuthenticationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationController.h; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h; sourceTree = ""; }; + 11275EB0053B04F601BEF4D31A1367BE /* ParseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseManager.m; path = Parse/Internal/ParseManager.m; sourceTree = ""; }; + 116F73992D0A8BEB52EB6FFCE76C5242 /* PFAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalytics.m; path = Parse/PFAnalytics.m; sourceTree = ""; }; + 1170CA07F5721584040D06438ECB2657 /* PFCommandResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandResult.h; path = Parse/Internal/PFCommandResult.h; sourceTree = ""; }; + 144A3BA47B4A9DFCE62E998D209A9844 /* PFFile_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile_Private.h; path = Parse/Internal/File/PFFile_Private.h; sourceTree = ""; }; + 147E2DE0E42F38E2305A44CF01419B5A /* PFReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFReachability.m; path = Parse/Internal/PFReachability.m; sourceTree = ""; }; + 14C7CDE38DB399D405735FBBF03F2A7B /* PFAnonymousAuthenticationProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousAuthenticationProvider.m; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m; sourceTree = ""; }; + 14E52D110E94F845EFA54F1D5B716ADF /* PFUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUser.h; path = Parse/PFUser.h; sourceTree = ""; }; + 152A294FCBAFB2F303701CC560D0CB9E /* PFInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallation.h; path = Parse/PFInstallation.h; sourceTree = ""; }; + 159CCE347EF8F7907332612BF120B860 /* PFRelationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationPrivate.h; path = Parse/Internal/Relation/PFRelationPrivate.h; sourceTree = ""; }; + 15A529C27057E4A57D259CBC6E6CE49C /* Pods-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-acknowledgements.markdown"; sourceTree = ""; }; + 16936467CF16DCC6960896B5471D7C27 /* PFAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAssert.h; path = Parse/Internal/PFAssert.h; sourceTree = ""; }; + 16E2B74C340852FB7F8D0C347EE34F7F /* PFRESTObjectBatchCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectBatchCommand.m; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.m; sourceTree = ""; }; + 16E653F2F3740605E3A7745107A7C5DF /* PFURLSessionCommandRunner.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionCommandRunner.m; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m; sourceTree = ""; }; + 17530FFB4F9A63C5FF114E86EC313B18 /* PFAnalyticsUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsUtilities.h; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h; sourceTree = ""; }; + 17A2BDCAD5B27E331974A22F463E44CF /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; + 18D995618F24B9FE1FA4F15699A5A8BA /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; + 1906D27D412A515912345F6C5D1138B3 /* PFACLState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState_Private.h; path = Parse/Internal/ACL/State/PFACLState_Private.h; sourceTree = ""; }; + 1CDD3144250DCECB39F57A04B6C9A3F0 /* PFPushChannelsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushChannelsController.m; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.m; sourceTree = ""; }; + 1D7EDE5ABF288993846E8BEA60CE324D /* PFPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPin.h; path = Parse/Internal/LocalDataStore/Pin/PFPin.h; sourceTree = ""; }; + 1DCFFA9D9D3FD9AE7914C3CDBC03F386 /* BFTask+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Private.h"; path = "Parse/Internal/BFTask+Private.h"; sourceTree = ""; }; + 1E60CD03AB5997917F89A62109F51C1F /* PFProductsRequestHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductsRequestHandler.m; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m; sourceTree = ""; }; + 1FB342435842C135A1CE8351177875B1 /* PFThreadsafety.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFThreadsafety.h; path = Parse/Internal/ThreadSafety/PFThreadsafety.h; sourceTree = ""; }; + 208CE00C994794CE9B26AC6698B8198D /* PFPushController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushController.h; path = Parse/Internal/Push/Controller/PFPushController.h; sourceTree = ""; }; + 216E10883658EDAA1467BD1DDBDDC840 /* PFLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogging.h; path = Parse/Internal/PFLogging.h; sourceTree = ""; }; + 229A74FF17E8D46A86798DDFB3D12F02 /* PFOfflineQueryLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryLogic.m; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m; sourceTree = ""; }; + 23269D2652429AAB9E5717B42C4C40FB /* PFMulticastDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMulticastDelegate.h; path = Parse/Internal/PFMulticastDelegate.h; sourceTree = ""; }; + 23305A980DB3E4AED2259A74C9187B50 /* PFDateFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDateFormatter.m; path = Parse/Internal/PFDateFormatter.m; sourceTree = ""; }; + 23B01EE10487D2A55A89CF394A299B88 /* PFMutableQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableQueryState.h; path = Parse/Internal/Query/State/PFMutableQueryState.h; sourceTree = ""; }; + 23D468ADFF594C052225A0543E3B6A56 /* PFSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession_Private.h; path = Parse/Internal/Session/PFSession_Private.h; sourceTree = ""; }; + 24DA2B1B50C58F417BC0F3413CC0937E /* PFSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSession.m; path = Parse/PFSession.m; sourceTree = ""; }; + 2613CC942BB5B821A1369B8E68019FDA /* Bolts-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Bolts-Private.xcconfig"; sourceTree = ""; }; + 267DC6F7D82298ABF3C18C327FEDF275 /* PFMutableUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableUserState.h; path = Parse/Internal/User/State/PFMutableUserState.h; sourceTree = ""; }; + 2706634FB1F4B0C9210247AA1B420D73 /* PFObjectFileCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCoder.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.m; sourceTree = ""; }; + 272027943ACA52CB75F07D7619CCC3BF /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; + 2758D4A6E71B967E09A910CF576817B1 /* PFPushController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushController.m; path = Parse/Internal/Push/Controller/PFPushController.m; sourceTree = ""; }; + 27841483445CA9ABFA8CCFB3D503D752 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + 2791960015A0E379245E5A0882B9DDCE /* PFCloudCodeController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloudCodeController.h; path = Parse/Internal/CloudCode/PFCloudCodeController.h; sourceTree = ""; }; + 27A3A55D0FC90475F63A86D2640BF7E4 /* PFCommandCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache_Private.h; path = Parse/Internal/PFCommandCache_Private.h; sourceTree = ""; }; + 29E8D38657DDEFCFA5A73CAF48D523A7 /* PFUserAuthenticationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationDelegate.h; path = Parse/PFUserAuthenticationDelegate.h; sourceTree = ""; }; + 29F955AA1404AAE96344AAE5FB9ACCCE /* BFTask+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Private.m"; path = "Parse/Internal/BFTask+Private.m"; sourceTree = ""; }; + 2A2DE58DBDFB1D72AF24F80D783EAE28 /* PFUserConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserConstants.h; path = Parse/Internal/User/Constants/PFUserConstants.h; sourceTree = ""; }; + 2AB5DEC6229F3BE36F1F514679A24AE3 /* PFCurrentConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentConfigController.m; path = Parse/Internal/Config/Controller/PFCurrentConfigController.m; sourceTree = ""; }; + 2B9972BBC14ADBA4A17A6CC1801DB183 /* PFOfflineStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineStore.h; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h; sourceTree = ""; }; + 2DAB9F63DEB559E36F66611AC7532E7C /* PFObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController.h; path = Parse/Internal/Object/Controller/PFObjectController.h; sourceTree = ""; }; + 2E1ABB16A7E7BC8AF7D9E1FE23ABE0E2 /* PFCachedQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCachedQueryController.m; path = Parse/Internal/Query/Controller/PFCachedQueryController.m; sourceTree = ""; }; + 2E7301204FAFBEAE4CD3C43B6DAC1858 /* PFFileStagingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileStagingController.h; path = Parse/Internal/File/Controller/PFFileStagingController.h; sourceTree = ""; }; + 2EE5B04D8D051799BEED324B493485A4 /* PFProductsRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductsRequestHandler.h; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h; sourceTree = ""; }; + 2F9009C1FEECA9D4795590A5794DD2B1 /* PFWeakValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFWeakValue.h; path = Parse/Internal/PFWeakValue.h; sourceTree = ""; }; + 2FAE5FB0E717E5E066DB0DD19ED0679F /* PFMutablePushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutablePushState.h; path = Parse/Internal/Push/State/PFMutablePushState.h; sourceTree = ""; }; + 308E43BD885210D04C25609F7FFE572D /* PFObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObject.h; path = Parse/PFObject.h; sourceTree = ""; }; + 3140F8B22C96FA60AD48F660BFF7FCD2 /* PFObjectPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectPrivate.h; path = Parse/Internal/Object/PFObjectPrivate.h; sourceTree = ""; }; + 31479B7C07EEF4712DEF1D01F7F10F31 /* PFURLSessionUploadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionUploadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h; sourceTree = ""; }; + 32E9622FB277F31FF0ACE70A0E8C1B44 /* PFAnonymousUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils.h; path = Parse/PFAnonymousUtils.h; sourceTree = ""; }; + 333F24639C80887F8DA6A64132D3ACAD /* PFDefaultACLController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDefaultACLController.m; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m; sourceTree = ""; }; + 34F7E58ACE9D749D100E04FECD569B45 /* PFObjectBatchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectBatchController.h; path = Parse/Internal/Object/BatchController/PFObjectBatchController.h; sourceTree = ""; }; + 355562D77F7A3ECC89ADA55D047757BA /* PFMutableUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableUserState.m; path = Parse/Internal/User/State/PFMutableUserState.m; sourceTree = ""; }; + 362FACECEF69703BFA9C57ED74660D97 /* PFObjectLocalIdStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectLocalIdStore.h; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h; sourceTree = ""; }; + 366813962B9A44F8160D7BCF13112B91 /* PFFileStagingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileStagingController.m; path = Parse/Internal/File/Controller/PFFileStagingController.m; sourceTree = ""; }; + 374CEE0448D7C92E9F6B2F5B9987BBFA /* PFOperationSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOperationSet.h; path = Parse/Internal/Object/OperationSet/PFOperationSet.h; sourceTree = ""; }; + 384135DE37094DB8E731205CBD17F72F /* PFURLSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h; sourceTree = ""; }; + 385DD2E0B95AAE1DDB352C5E48139C02 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; + 391E859809C989E8E6F5613E73CF722A /* Parse-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-prefix.pch"; sourceTree = ""; }; + 3A59FF425B4E22F00D5B693BF199C21E /* PFKeyValueCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeyValueCache.m; path = Parse/Internal/KeyValueCache/PFKeyValueCache.m; sourceTree = ""; }; + 3A5E945E1EC907178171BF58D1F60131 /* PFUserFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserFileCodingLogic.h; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h; sourceTree = ""; }; + 3C3A2002500C346E302092A2088A57A7 /* PFRESTPushCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTPushCommand.h; path = Parse/Internal/Commands/PFRESTPushCommand.h; sourceTree = ""; }; + 3CD9E69666E0F4D54D0539786BD3CBF7 /* PFOfflineObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineObjectController.h; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h; sourceTree = ""; }; + 3D283291B477D2080EBFC60E0CE5B3A3 /* PFRESTUserCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTUserCommand.m; path = Parse/Internal/Commands/PFRESTUserCommand.m; sourceTree = ""; }; + 3D4AD2E6C937B36339C0F9AFF8817BC6 /* PFDateFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDateFormatter.h; path = Parse/Internal/PFDateFormatter.h; sourceTree = ""; }; + 3E781400D2DB9020CCA193E74F459F26 /* Parse-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Parse-Private.xcconfig"; sourceTree = ""; }; + 3EF48103F2FD65D41AC8CEF7D0FFAC5B /* PFRelationState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState_Private.h; path = Parse/Internal/Relation/State/PFRelationState_Private.h; sourceTree = ""; }; + 3FBB8D23E11D288C6235C6730E4861BE /* PFPurchase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchase.m; path = Parse/PFPurchase.m; sourceTree = ""; }; + 40001E702307C45CF85652D32E688A7A /* PFBaseState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBaseState.h; path = Parse/Internal/PFBaseState.h; sourceTree = ""; }; + 40F5313A31663C9C8E3E94C0B4789071 /* PFKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeychainStore.h; path = Parse/Internal/PFKeychainStore.h; sourceTree = ""; }; + 4113495D4A663C12AB75535F753A5AF9 /* Parse.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Parse.xcconfig; sourceTree = ""; }; + 41BEED2F8941DE9D36C4383DE2A005E4 /* PFCommandCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache.h; path = Parse/Internal/PFCommandCache.h; sourceTree = ""; }; + 41EC4873567E5199115062D666B66648 /* PFHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPRequest.h; path = Parse/Internal/HTTPRequest/PFHTTPRequest.h; sourceTree = ""; }; + 42DDE7216238765988616CD0550CA7E7 /* Bolts.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.xcconfig; sourceTree = ""; }; + 4339829EF9FC5B8B3459DBD79F65C0D6 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + 43AED0C36A33D48DB75041D300713664 /* PFUserFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserFileCodingLogic.m; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m; sourceTree = ""; }; + 43F2F47F077C809F803E3BA42EAF9CC7 /* PFURLSessionDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m; sourceTree = ""; }; + 44CF5AB5E34A9D3B7DBDB04076B71AA7 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + 44FB09F8C2981A2C9E4660E4FABC1F83 /* PFPinningEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningEventuallyQueue.h; path = Parse/Internal/PFPinningEventuallyQueue.h; sourceTree = ""; }; + 45D0E44482F38FEEB37F4CE77B608864 /* PFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkActivityIndicatorManager.h; path = Parse/PFNetworkActivityIndicatorManager.h; sourceTree = ""; }; + 4709648C670A81EACDB1DA9F808189F5 /* PFConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfig.m; path = Parse/PFConfig.m; sourceTree = ""; }; + 474A59362210E10E859CD9BA539B75D6 /* PFFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFile.m; path = Parse/PFFile.m; sourceTree = ""; }; + 47D9BB43AF2C76037F90ECEAA05CFF01 /* PFRESTConfigCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTConfigCommand.m; path = Parse/Internal/Commands/PFRESTConfigCommand.m; sourceTree = ""; }; + 47F13D5EB10A23DB6E0A7FABF2E8CDBD /* PFLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogger.m; path = Parse/Internal/PFLogger.m; sourceTree = ""; }; + 48BA1E2ADC6C1A912806B4434C705899 /* PFHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHash.m; path = Parse/Internal/PFHash.m; sourceTree = ""; }; + 4C0BDD882C72C66B96CB5D72117728F8 /* PFLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocationManager.h; path = Parse/Internal/PFLocationManager.h; sourceTree = ""; }; + 4E2405EA0846F25769ECD3AD50DE9EC2 /* PFHTTPURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHTTPURLRequestConstructor.m; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m; sourceTree = ""; }; + 4E2EF54AD86CBB75239ED52C54FEE973 /* PFURLSessionJSONDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionJSONDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h; sourceTree = ""; }; + 4F34B890143B7FF3F7E15109C866C70F /* PFRESTAnalyticsCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTAnalyticsCommand.m; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.m; sourceTree = ""; }; + 50DC95668369AC8E5CF51D8FE228F223 /* PFEncoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEncoder.h; path = Parse/Internal/PFEncoder.h; sourceTree = ""; }; + 52763EB85FB6F54982F9F986750D041D /* PFKeyValueCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache_Private.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h; sourceTree = ""; }; + 5292287F5D3AE4EF5E74D76C6FDB81A2 /* PFConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig.h; path = Parse/PFConfig.h; sourceTree = ""; }; + 5456C5EDD601EB1F4939A1ADFE7EB84F /* Parse-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Parse-dummy.m"; sourceTree = ""; }; + 556C88BEC9C2F89C47B0E0710DA1127B /* PFFieldOperationDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperationDecoder.m; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.m; sourceTree = ""; }; + 56DD772CBED2910C5B2E94ADABDD79F2 /* PFAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics.h; path = Parse/PFAnalytics.h; sourceTree = ""; }; + 5878493E65CFC3022C41DAF663AAD6DF /* PFObjectEstimatedData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectEstimatedData.h; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h; sourceTree = ""; }; + 5894A228B6F31F871749F0BC8C57560B /* PFRESTAnalyticsCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTAnalyticsCommand.h; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.h; sourceTree = ""; }; + 58C3D8E110425DA982C930E9EA797EDE /* libBolts.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBolts.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5983FC4B63B585E8A136F4AC664EEF0C /* PFMultiProcessFileLockController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLockController.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m; sourceTree = ""; }; + 59931B6E0E647D850B10744856083216 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = Parse/Resources/en.lproj; sourceTree = ""; }; + 5B7919554958754AF6F15E6D978D43B0 /* PFUserAuthenticationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserAuthenticationController.m; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m; sourceTree = ""; }; + 5BA78E8ED3B478FCE98D4154F24101BB /* PFObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObject.m; path = Parse/PFObject.m; sourceTree = ""; }; + 5C6B7B3F0FCE545B7D965DEDF8ED4613 /* PFObjectFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCodingLogic.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h; sourceTree = ""; }; + 5C7D5E9E9338447002877586E4B453BC /* PFCurrentInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentInstallationController.m; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m; sourceTree = ""; }; + 5CF5A1D517886292E9244E3BBBD29C2C /* ParseModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseModule.m; path = Parse/Internal/ParseModule.m; sourceTree = ""; }; + 5D9415A793D299204A98D83B774768B1 /* PFObjectController_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController_Private.h; path = Parse/Internal/Object/Controller/PFObjectController_Private.h; sourceTree = ""; }; + 5F114EC7295D2D778ADAD06DAECFFDF6 /* PFSQLiteDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h; sourceTree = ""; }; + 6041A7EB33A2C8DBA16E95481F6E955A /* PFRESTCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCommand.m; path = Parse/Internal/Commands/PFRESTCommand.m; sourceTree = ""; }; + 61C33185F5BD57BDE3231949A2133ABF /* PFURLSessionDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h; sourceTree = ""; }; + 6285547694D0DE6096DB0174F62F8D57 /* PFAsyncTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAsyncTaskQueue.m; path = Parse/Internal/PFAsyncTaskQueue.m; sourceTree = ""; }; + 62B360F076B3422F6B95643A41DC7D58 /* PFFileDataStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileDataStream.h; path = Parse/Internal/File/FileDataStream/PFFileDataStream.h; sourceTree = ""; }; + 641AE05DD55E5E6AC1590CD7B4A18F97 /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = ""; }; + 65A6FE58C9C2C7E84B044607B8A5890A /* PFTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTaskQueue.m; path = Parse/Internal/PFTaskQueue.m; sourceTree = ""; }; + 671CEA32EB838EA2DB18154A0B781F41 /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; + 67597E3A5597B762BEC0ED0EC7E967FF /* PFObjectSubclassingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassingController.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h; sourceTree = ""; }; + 6776A4FE81BCDB08946667E7FAF1A6C0 /* PFPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPin.m; path = Parse/Internal/LocalDataStore/Pin/PFPin.m; sourceTree = ""; }; + 681A2BC7840EF1709F11E26C7EC3F202 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + 68A4262C2B21FF46E63C3BB478773563 /* PFRESTObjectBatchCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectBatchCommand.h; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.h; sourceTree = ""; }; + 68BF84CDE3833CC1EF16696ED2573967 /* PFAnonymousAuthenticationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousAuthenticationProvider.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h; sourceTree = ""; }; + 699EE24E208C84FB34AD727CE4B22B06 /* PFCommandRunningConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunningConstants.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h; sourceTree = ""; }; + 6A83EDAC97C7A74FA2625134D35D4560 /* PFPushChannelsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushChannelsController.h; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.h; sourceTree = ""; }; + 6BC6D066DB5DE208C19F3EF18D5033CF /* PFObjectEstimatedData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectEstimatedData.m; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m; sourceTree = ""; }; + 6CA0FB7E1B7B3B44E19E9F459BDE3FC5 /* PFPush.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPush.m; path = Parse/PFPush.m; sourceTree = ""; }; + 6DC7C863A91F293E7888686B75ADDA92 /* PFRESTObjectCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectCommand.m; path = Parse/Internal/Commands/PFRESTObjectCommand.m; sourceTree = ""; }; + 6E530CB9C9FCEEC48D0D6022A3B9E461 /* PFWeakValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFWeakValue.m; path = Parse/Internal/PFWeakValue.m; sourceTree = ""; }; + 6E5C86338C3B23D609E0EF8581B094C1 /* PFRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState.h; path = Parse/Internal/Relation/State/PFRelationState.h; sourceTree = ""; }; + 6F692090984F30582AD921FA0C5AF89E /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; }; + 6FCB9CF92D4B7B99AABCC3E9837A6C8C /* PFCloud.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloud.m; path = Parse/PFCloud.m; sourceTree = ""; }; + 70327113CA3A1A88572E8F96D12041F4 /* PFDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDevice.h; path = Parse/Internal/PFDevice.h; sourceTree = ""; }; + 7046AB20AC12CE0D708ECF95F2C079BF /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; + 717C08EFA64F3FF8CD1383B57F8FFC0B /* PFRESTFileCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTFileCommand.m; path = Parse/Internal/Commands/PFRESTFileCommand.m; sourceTree = ""; }; + 72A213523367D0C4F848FD1542D0E1BB /* PFNetworkCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkCommand.h; path = Parse/Internal/PFNetworkCommand.h; sourceTree = ""; }; + 72AA7C1713DE26F7C83BC1BE68649977 /* PFThreadsafety.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFThreadsafety.m; path = Parse/Internal/ThreadSafety/PFThreadsafety.m; sourceTree = ""; }; + 7398989E9BACC2972DD360A682AB30D5 /* PFFieldOperationDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperationDecoder.h; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.h; sourceTree = ""; }; + 754F92799C47C441BC69A6DFCA0BE689 /* PFUserState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState_Private.h; path = Parse/Internal/User/State/PFUserState_Private.h; sourceTree = ""; }; + 765173C954A51B493E29F50B2D97732A /* PFInstallationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationPrivate.h; path = Parse/Internal/Installation/PFInstallationPrivate.h; sourceTree = ""; }; + 765B7A2AA534A8E804AE9123D59C9043 /* PFConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConstants.m; path = Parse/PFConstants.m; sourceTree = ""; }; + 76730C16E6204729829FF1031310068D /* PFMutableObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableObjectState.h; path = Parse/Internal/Object/State/PFMutableObjectState.h; sourceTree = ""; }; + 769433A4610BC66862A645AA9FFF52CB /* PFObjectLocalIdStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectLocalIdStore.m; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m; sourceTree = ""; }; + 76F588CFEC125CE47A5E75C49BC6E111 /* PFFileDataStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileDataStream.m; path = Parse/Internal/File/FileDataStream/PFFileDataStream.m; sourceTree = ""; }; + 77442B142F2E19A0A0521AFDCF58C91C /* PFRESTCloudCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCloudCommand.h; path = Parse/Internal/Commands/PFRESTCloudCommand.h; sourceTree = ""; }; + 78005460CA734997653B091EDC6EFBDF /* PFUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUser.m; path = Parse/PFUser.m; sourceTree = ""; }; + 7865F2D426B0005FBA1C5220282DDBEE /* BFDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFDefines.h; path = Bolts/Common/BFDefines.h; sourceTree = ""; }; + 7A061CE9E6A0CE32309E0356EB7DE8D9 /* PFLocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLocationManager.m; path = Parse/Internal/PFLocationManager.m; sourceTree = ""; }; + 7A2A025CBCE13AF790C21EB33F3FDD8A /* PFProduct+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFProduct+Private.h"; path = "Parse/Internal/Product/PFProduct+Private.h"; sourceTree = ""; }; + 7ADC119E201491E5146837A1ECDD27F1 /* PFFileState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState_Private.h; path = Parse/Internal/File/State/PFFileState_Private.h; sourceTree = ""; }; + 7ADCE9E163F3FCD8DF103AD6E0A2840B /* PFObjectFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCodingLogic.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m; sourceTree = ""; }; + 7AF5DF0C66469EF5555738D6E5627354 /* PFRESTConfigCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTConfigCommand.h; path = Parse/Internal/Commands/PFRESTConfigCommand.h; sourceTree = ""; }; + 7BEF001B9410A4976104E85881DB3C58 /* PFFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState.h; path = Parse/Internal/File/State/PFFileState.h; sourceTree = ""; }; + 7C2FB0BE9C76624C1E01BB37C1DF3416 /* PFCurrentUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentUserController.h; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.h; sourceTree = ""; }; + 7C31BD302E3DED84EC1289B2E8C260F4 /* PFQueryPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryPrivate.h; path = Parse/Internal/Query/PFQueryPrivate.h; sourceTree = ""; }; + 7CEB98AB34541B47F2042CC509B89CD4 /* PFJSONSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFJSONSerialization.h; path = Parse/Internal/PFJSONSerialization.h; sourceTree = ""; }; + 7EA388C394C5D9D428DB4F0C14EF97F7 /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; + 7F4F40BD61DDB1C6011B29A82B9D4674 /* PFOperationSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOperationSet.m; path = Parse/Internal/Object/OperationSet/PFOperationSet.m; sourceTree = ""; }; + 7F989773F048C2B6AA76E2F33AB85191 /* PFBase64Encoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBase64Encoder.h; path = Parse/Internal/PFBase64Encoder.h; sourceTree = ""; }; + 7FF8D43BA53CAB9EC8CE2C3D9BB07585 /* PFPurchaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseController.h; path = Parse/Internal/Purchase/Controller/PFPurchaseController.h; sourceTree = ""; }; + 7FFDBD38104590E7E7569E959BE85635 /* PFObjectUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectUtilities.m; path = Parse/Internal/Object/Utilities/PFObjectUtilities.m; sourceTree = ""; }; + 80356D4DBFA9C24B249DE3B4717F44B8 /* PFMutableQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableQueryState.m; path = Parse/Internal/Query/State/PFMutableQueryState.m; sourceTree = ""; }; + 807B1D200CD50072E1017510EC7A3B8E /* PFObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectState.m; path = Parse/Internal/Object/State/PFObjectState.m; sourceTree = ""; }; + 81A6715334A0491BEE68AE8FEF91CA79 /* PFObjectFileCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCoder.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.h; sourceTree = ""; }; + 81B7B344C875A3AB97E6C33C60A5F9BF /* PFRESTSessionCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTSessionCommand.m; path = Parse/Internal/Commands/PFRESTSessionCommand.m; sourceTree = ""; }; + 834AE8A8AE6F7F19DBF7A13695DA1EE9 /* PFObjectSubclassingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassingController.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m; sourceTree = ""; }; + 83D00AFB6C86BE198D122C01CC505FB9 /* PFRESTCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand.h; path = Parse/Internal/Commands/PFRESTCommand.h; sourceTree = ""; }; + 83EF521AE88F3E4B58595E6C70734633 /* PFCommandRunningConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunningConstants.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m; sourceTree = ""; }; + 84D4C06D28A83DD5865841731DD2BB1C /* PFInternalUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInternalUtils.h; path = Parse/Internal/PFInternalUtils.h; sourceTree = ""; }; + 85D8C47DFF7FF802AF326B4C6383AF35 /* PFObjectConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectConstants.h; path = Parse/Internal/Object/Constants/PFObjectConstants.h; sourceTree = ""; }; + 860D0B9D3698F147687E070AD019DD1E /* PFObjectFilePersistenceController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFilePersistenceController.h; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h; sourceTree = ""; }; + 870CCACCA994D6092C3A667F1EC7EE38 /* PFMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMacros.h; path = Parse/Internal/PFMacros.h; sourceTree = ""; }; + 87310202CC115E0D59A56B46CE72FBD3 /* PFAnalyticsUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsUtilities.m; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m; sourceTree = ""; }; + 87355840B3797E204A33EF21DD786865 /* PFPaymentTransactionObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h; sourceTree = ""; }; + 8824A59A418BB304F2D1B9623F26AE12 /* PFDefaultACLController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDefaultACLController.h; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h; sourceTree = ""; }; + 883FBF6AC7D33CF1A604102A9D9779ED /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; + 88690FBD663956E84E2502DB50AB5408 /* PFMutableACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableACLState.h; path = Parse/Internal/ACL/State/PFMutableACLState.h; sourceTree = ""; }; + 89095502D7357690CC6FC98B5D64DB76 /* PFURLConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLConstructor.h; path = Parse/Internal/HTTPRequest/PFURLConstructor.h; sourceTree = ""; }; + 8AF59E6E45FB90176198F0361D0B0430 /* PFURLSessionDataTaskDelegate_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h; sourceTree = ""; }; + 8AF69A58E6F7EA86A79ACA49E961650A /* PFPaymentTransactionObserver_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver_Private.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h; sourceTree = ""; }; + 8B845FC390E44059F2A5FC0E8BA8073F /* Bolts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-prefix.pch"; sourceTree = ""; }; + 8BA4F24522BCB8A666417FFCCCE66FAF /* PFRESTSessionCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTSessionCommand.h; path = Parse/Internal/Commands/PFRESTSessionCommand.h; sourceTree = ""; }; + 8C366C40EE46E2189B1D2710D70DFAC4 /* PFFileController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileController.m; path = Parse/Internal/File/Controller/PFFileController.m; sourceTree = ""; }; + 8C3EB736F8A50220457120DE7F4E7DF7 /* PFPinningEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningEventuallyQueue.m; path = Parse/Internal/PFPinningEventuallyQueue.m; sourceTree = ""; }; + 8C9096CC3342212FFE41602D93C0C169 /* PFGeoPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFGeoPoint.m; path = Parse/PFGeoPoint.m; sourceTree = ""; }; + 8CCA791631F559F162C6A4858BB0E605 /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; + 8D19D8F4E00BF286006CD6D68E92C105 /* PFFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileState.m; path = Parse/Internal/File/State/PFFileState.m; sourceTree = ""; }; + 8D8A0D5C7E7AAA06AD1719AF2C60C130 /* PFRESTUserCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTUserCommand.h; path = Parse/Internal/Commands/PFRESTUserCommand.h; sourceTree = ""; }; + 8DDA31CB23D7EDC55E267E8867ECC976 /* PFCoreDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreDataProvider.h; path = Parse/Internal/PFCoreDataProvider.h; sourceTree = ""; }; + 8E1532E528C597C81417C9A6C2A3ECA1 /* PFPushPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushPrivate.h; path = Parse/Internal/Push/PFPushPrivate.h; sourceTree = ""; }; + 8EAC8A1F239CB9A07C89A445269755B3 /* PFHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHash.h; path = Parse/Internal/PFHash.h; sourceTree = ""; }; + 8EB39D6AC1AE16A8B7C4F5DE8BB6C0A5 /* PFSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession.h; path = Parse/PFSession.h; sourceTree = ""; }; + 8ED3D96C01E8D4CCBEF611AC599F7C52 /* PFPush.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPush.h; path = Parse/PFPush.h; sourceTree = ""; }; + 8F10C0434DDB383B055CF6CA6E41A4A1 /* PFDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDecoder.m; path = Parse/Internal/PFDecoder.m; sourceTree = ""; }; + 8F51DFCB9E569CD5791CBA701D9AFE8C /* PFCloud.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloud.h; path = Parse/PFCloud.h; sourceTree = ""; }; + 8FF2D70E2A6BDA411BD8E96BE88717F8 /* PFPushManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushManager.m; path = Parse/Internal/Push/Manager/PFPushManager.m; sourceTree = ""; }; + 905F084EAA67E29023FC7262EFF7C7FC /* PFMutableObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableObjectState.m; path = Parse/Internal/Object/State/PFMutableObjectState.m; sourceTree = ""; }; + 9423B92363C6078122A8D176B24507E2 /* PFACL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACL.h; path = Parse/PFACL.h; sourceTree = ""; }; + 95F2D7917180A966F3553DB814B47079 /* PFSQLiteDatabaseResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseResult.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m; sourceTree = ""; }; + 961B5EB24B86AAC41ED236D838A64A5C /* PFQueryUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryUtilities.h; path = Parse/Internal/Query/Utilities/PFQueryUtilities.h; sourceTree = ""; }; + 96273707C86B8C6EA8146C952F2EBE64 /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; + 96AB7832E582A38AA7D72F9B8735C3BA /* PFGeoPointPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPointPrivate.h; path = Parse/Internal/PFGeoPointPrivate.h; sourceTree = ""; }; + 97E6788E626A2016CCFF03F7381911B8 /* ParseInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseInternal.h; path = Parse/Internal/ParseInternal.h; sourceTree = ""; }; + 993C9598765F98AA0527D81D83D6DEE2 /* PFSQLiteStatement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteStatement.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h; sourceTree = ""; }; + 99C509F37C4504D78F4E60A46E053B08 /* PFURLSessionUploadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionUploadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m; sourceTree = ""; }; + 9C189C08BBFF35A029515798AD989F10 /* PFEventuallyPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyPin.h; path = Parse/Internal/PFEventuallyPin.h; sourceTree = ""; }; + 9D07888730F9C387835661F6975CE0CE /* PFSubclassing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSubclassing.h; path = Parse/PFSubclassing.h; sourceTree = ""; }; + 9E7CD5EAEAC1BC3148596E0F47F3CA74 /* PFNullability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNullability.h; path = Parse/PFNullability.h; sourceTree = ""; }; + 9E9EF0B3D7C46C13AFB293451E7F566A /* ParseModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseModule.h; path = Parse/Internal/ParseModule.h; sourceTree = ""; }; + A0D7B54A478A38CB2BC90CD24EAB27B6 /* PFInternalUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInternalUtils.m; path = Parse/Internal/PFInternalUtils.m; sourceTree = ""; }; + A1081E9BC218073917433A3F2697751B /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; + A1C2072D5B7941AF0CA6A45698E16D81 /* PFACL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACL.m; path = Parse/PFACL.m; sourceTree = ""; }; + A1EA7AD5E3D6B3D7DA51A46514ACC1B2 /* PFSessionUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionUtilities.h; path = Parse/Internal/Session/Utilities/PFSessionUtilities.h; sourceTree = ""; }; + A2053B7041E0633DF0F9AD94C7B1956F /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; + A2E9FF3525464F62315EA0C2C8DBF089 /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; + A327BF223427530CA8B748A9862FA426 /* PFPushManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushManager.h; path = Parse/Internal/Push/Manager/PFPushManager.h; sourceTree = ""; }; + A3E3489C8DBCB1ADB9C7893D90F60918 /* PFQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQuery.m; path = Parse/PFQuery.m; sourceTree = ""; }; + A3ED374B51D528F113CC177E773492C6 /* PFMutableRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableRelationState.m; path = Parse/Internal/Relation/State/PFMutableRelationState.m; sourceTree = ""; }; + A46B35BACD7F1073E12FCEDE85E4B67C /* PFCurrentUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentUserController.m; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.m; sourceTree = ""; }; + A4ACC59626D38782D3773A813251B790 /* PFHTTPURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPURLRequestConstructor.h; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h; sourceTree = ""; }; + A6604E156E00003CEF6AEA0518B9D55E /* PFObjectUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectUtilities.h; path = Parse/Internal/Object/Utilities/PFObjectUtilities.h; sourceTree = ""; }; + A7A38E54B7ADBF7D1932DAF9BF6DB999 /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; + A95C008395C7EBC9844E3F003B06DC43 /* PFFileManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileManager.m; path = Parse/Internal/PFFileManager.m; sourceTree = ""; }; + A963DD1D7B9750E8E9A817472714C113 /* PFQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryController.m; path = Parse/Internal/Query/Controller/PFQueryController.m; sourceTree = ""; }; + A9A17244CCBF6923F4C1448B4C7F8259 /* BoltsVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BoltsVersion.h; path = Bolts/Common/BoltsVersion.h; sourceTree = ""; }; + A9EF3EDC4FDAFC57AB7D03F2B66F8398 /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; + AB9B2C34BBD8FBC05AEB06BCA0F9C9CF /* PFInstallationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationConstants.h; path = Parse/Internal/Installation/Constants/PFInstallationConstants.h; sourceTree = ""; }; + ABC73F2E99BCC42C0125231EAF7EDB15 /* PFPushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState.h; path = Parse/Internal/Push/State/PFPushState.h; sourceTree = ""; }; + ACB6900468A2F6CE7B3A606F3CA5F322 /* PFObjectFilePersistenceController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFilePersistenceController.m; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m; sourceTree = ""; }; + ADAA3EE17CA0B38B1E402F112E0339B9 /* PFUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserState.m; path = Parse/Internal/User/State/PFUserState.m; sourceTree = ""; }; + ADF1886AF6A65E3EF655A0635E8875D4 /* PFFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile.h; path = Parse/PFFile.h; sourceTree = ""; }; + AE1AF3237CA729A9AE65C24D5465EDB0 /* PFTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTaskQueue.h; path = Parse/Internal/PFTaskQueue.h; sourceTree = ""; }; + AE6FD11DD7C073D83C79EDA40A4CBE4C /* PFEncoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEncoder.m; path = Parse/Internal/PFEncoder.m; sourceTree = ""; }; + AE99A29157A904C67890D7F7E49DDD80 /* PFProduct.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProduct.m; path = Parse/PFProduct.m; sourceTree = ""; }; + AEFE2975AB948B5A15901ABF3D7C9456 /* PFUserConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserConstants.m; path = Parse/Internal/User/Constants/PFUserConstants.m; sourceTree = ""; }; + AFCE9242FBE9C6F5B79A769A629C60CF /* PFKeyValueCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache.h; sourceTree = ""; }; + B25F8AA5E0ACA8EF99E4B7A34CA08791 /* PFURLSessionCommandRunner_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h; sourceTree = ""; }; + B32EAEBB2BF0E7999CBAA8BBC9844BB8 /* PFOfflineQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryController.m; path = Parse/Internal/Query/Controller/PFOfflineQueryController.m; sourceTree = ""; }; + B3F709284CED11CD6FFD287A21D7356C /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; + B5045A6DC57A247B1BB14933FDCA672F /* PFMultiProcessFileLock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLock.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m; sourceTree = ""; }; + B53A1E293DB4591CB07EB02181C2B192 /* PFLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogger.h; path = Parse/Internal/PFLogger.h; sourceTree = ""; }; + B5F07D1F2661374F427EFA9F321E58A9 /* PFURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h; sourceTree = ""; }; + B60239EFD344C553851D340E46C88513 /* PFInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationController.m; path = Parse/Internal/Installation/Controller/PFInstallationController.m; sourceTree = ""; }; + B6230E95CC1C91D65E987B6F92071EE0 /* PFACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACLState.m; path = Parse/Internal/ACL/State/PFACLState.m; sourceTree = ""; }; + B6483E9C28C9D90DBE19EE9FEA7C05BA /* PFCategoryLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCategoryLoader.h; path = Parse/Internal/PFCategoryLoader.h; sourceTree = ""; }; + B71BDBAA3E5BDFECB4D5FA52A92DDE3C /* PFUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserController.h; path = Parse/Internal/User/Controller/PFUserController.h; sourceTree = ""; }; + B828EE160146AC71D96D74359D0B87D9 /* PFAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAlertView.m; path = Parse/Internal/PFAlertView.m; sourceTree = ""; }; + B82B704DB25FE99DA94E96510CA4115E /* PFSQLiteStatement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteStatement.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m; sourceTree = ""; }; + B8702C4718ECDE4EC13CAB9FEBD20A78 /* PFFileController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileController.h; path = Parse/Internal/File/Controller/PFFileController.h; sourceTree = ""; }; + B90CFF6D8D057714B5CB05B1EF6832E7 /* PFSQLiteDatabaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseController.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h; sourceTree = ""; }; + B9559972A6331681B0BFCE99D4830D0C /* PFMutablePushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutablePushState.m; path = Parse/Internal/Push/State/PFMutablePushState.m; sourceTree = ""; }; + BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + BAB69D923C8169E049A0B1F446DE3C22 /* PFEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyQueue.m; path = Parse/Internal/PFEventuallyQueue.m; sourceTree = ""; }; + BB328A47E71DF5C9ED039046F3CF4E10 /* PFUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState.h; path = Parse/Internal/User/State/PFUserState.h; sourceTree = ""; }; + BB3CC31AB928B710A068EFE34F219D54 /* PFRESTPushCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTPushCommand.m; path = Parse/Internal/Commands/PFRESTPushCommand.m; sourceTree = ""; }; + BC4062E6A12C7F83FFAFD42283212C9A /* PFDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDataProvider.h; path = Parse/Internal/PFDataProvider.h; sourceTree = ""; }; + BCF7D81BB8B3017FFCA5BFA657475191 /* PFJSONSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFJSONSerialization.m; path = Parse/Internal/PFJSONSerialization.m; sourceTree = ""; }; + BD53148FD3F25A5417B79C08A7EF6137 /* PFRESTFileCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTFileCommand.h; path = Parse/Internal/Commands/PFRESTFileCommand.h; sourceTree = ""; }; + BD59DB857ADCDA5EE20B1AF8286DC64E /* PFPropertyInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo.h; sourceTree = ""; }; + BD7E295A2705B98E78F1230626724816 /* PFMultiProcessFileLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLock.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h; sourceTree = ""; }; + BE9304218DB27984F98075C9997693A9 /* PFProduct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProduct.h; path = Parse/PFProduct.h; sourceTree = ""; }; + BF1F7285450FFB765AE85728E98D3277 /* PFPushUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushUtilities.h; path = Parse/Internal/Push/Utilites/PFPushUtilities.h; sourceTree = ""; }; + BF48D0C85E7175A9594CACE087E1F8D3 /* PFObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectControlling.h; path = Parse/Internal/Object/Controller/PFObjectControlling.h; sourceTree = ""; }; + BF59BC15D23E1E1912C8F334E7236813 /* Pods-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-acknowledgements.plist"; sourceTree = ""; }; + BF600E65BDFE51829FB662904C48520F /* PFSessionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionController.m; path = Parse/Internal/Session/Controller/PFSessionController.m; sourceTree = ""; }; + BF7A6665C70BAC3FA8DEA15E402165E2 /* PFPropertyInfo_Runtime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Runtime.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h; sourceTree = ""; }; + BF85BDBB00B0B90C79842355DCCE5702 /* PFURLSessionCommandRunner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h; sourceTree = ""; }; + BFFD2763428584483FBC7980FDEE0319 /* PFCurrentConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentConfigController.h; path = Parse/Internal/Config/Controller/PFCurrentConfigController.h; sourceTree = ""; }; + C09DCB3EF4CB0BAF12A22BD98B68BFAA /* PFCommandRunning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunning.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.h; sourceTree = ""; }; + C182382BFBF1EE8F2E17E6E7DFCABA57 /* PFRESTCloudCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCloudCommand.m; path = Parse/Internal/Commands/PFRESTCloudCommand.m; sourceTree = ""; }; + C2B8FF73618A90330150849A195BFC2C /* PFCurrentObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentObjectControlling.h; path = Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h; sourceTree = ""; }; + C2DE5E9C06AC71245804541B12D5F7B8 /* PFURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSession.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m; sourceTree = ""; }; + C3021C35E215764D5CD8DA96BB1AF638 /* PFInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationController.h; path = Parse/Internal/Installation/Controller/PFInstallationController.h; sourceTree = ""; }; + C397337C5959FB9CDCAAD05A78CD13AD /* Parse_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse_Private.h; path = Parse/Internal/Parse_Private.h; sourceTree = ""; }; + C3D50155B3D10EDC8634E8BCE3E2EC49 /* PFConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConstants.h; path = Parse/PFConstants.h; sourceTree = ""; }; + C438131B9FF8C57DBDE42A1886182C1F /* PFConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig_Private.h; path = Parse/Internal/Config/PFConfig_Private.h; sourceTree = ""; }; + C4FC14EB432E641BAA43CE3A6CA50340 /* PFPushState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState_Private.h; path = Parse/Internal/Push/State/PFPushState_Private.h; sourceTree = ""; }; + C52FA914AE60BC50812988E15670B2B0 /* PFEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue.h; path = Parse/Internal/PFEventuallyQueue.h; sourceTree = ""; }; + C5E2765A6C6141C912C8C89927E5E59E /* PFAnalytics_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics_Private.h; path = Parse/Internal/Analytics/PFAnalytics_Private.h; sourceTree = ""; }; + C6F8830B4BAD707ED99EB6DA023C7803 /* PFOfflineStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineStore.m; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m; sourceTree = ""; }; + C72B7C59C5C07C9D6873A101E4CD589F /* PFPaymentTransactionObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPaymentTransactionObserver.m; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m; sourceTree = ""; }; + C86658E5106D83528921871195EA7A25 /* PFQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryState.m; path = Parse/Internal/Query/State/PFQueryState.m; sourceTree = ""; }; + C8673179A0982B40E80A428E4FB775FE /* PFACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState.h; path = Parse/Internal/ACL/State/PFACLState.h; sourceTree = ""; }; + C876DBA76406D0CD90D0A146D8241EB0 /* PFCommandRunning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunning.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.m; sourceTree = ""; }; + C9CBCE0E34FCE6BCB16E3402C6CF887E /* PFQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState.h; path = Parse/Internal/Query/State/PFQueryState.h; sourceTree = ""; }; + CA8004D86110E800F8B66A6C52331804 /* PFCommandURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandURLRequestConstructor.h; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h; sourceTree = ""; }; + CB0D33609AC2DEE7BF62A26950D3C062 /* PFAnonymousUtils_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils_Private.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h; sourceTree = ""; }; + CB26278765FDFC13590066F6B6BBE08C /* PFObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectController.m; path = Parse/Internal/Object/Controller/PFObjectController.m; sourceTree = ""; }; + CB2EB1A81CEF041251C51543CB93FA8B /* PFConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfigController.h; path = Parse/Internal/Config/Controller/PFConfigController.h; sourceTree = ""; }; + CCE521672B33AE35219C0DBD9512A6E6 /* PFPushUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushUtilities.m; path = Parse/Internal/Push/Utilites/PFPushUtilities.m; sourceTree = ""; }; + CEB26C97146C83F5B87B7771DE7F29E0 /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; + CF82FA8252D0DEF399D32F39A272A631 /* PFQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryController.h; path = Parse/Internal/Query/Controller/PFQueryController.h; sourceTree = ""; }; + CF97B19442AC920A6CD420C61B604C5A /* PFRelation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelation.m; path = Parse/PFRelation.m; sourceTree = ""; }; + D1502154EA0D5A991A1D6B8B9EFCB52F /* PFCurrentInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentInstallationController.h; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h; sourceTree = ""; }; + D1C861FA6983C0DBEE507CDD33BA8714 /* PFPinningObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningObjectStore.h; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.h; sourceTree = ""; }; + D236BD308CB967D7FED84A202A4B215B /* Parse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Parse.m; path = Parse/Parse.m; sourceTree = ""; }; + D2CC64D2FEDF6A4C762798A614A6AD05 /* PFGeoPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPoint.h; path = Parse/PFGeoPoint.h; sourceTree = ""; }; + D32CB47208011940CD4CC821E6C60F5F /* PFBase64Encoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBase64Encoder.m; path = Parse/Internal/PFBase64Encoder.m; sourceTree = ""; }; + D3E8D70C7E8EB33159CDDA0AC7B6C9DC /* PFFileManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileManager.h; path = Parse/Internal/PFFileManager.h; sourceTree = ""; }; + D4D44451B9EF1D2AABB3727B5BE49E3A /* PFPurchaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseController.m; path = Parse/Internal/Purchase/Controller/PFPurchaseController.m; sourceTree = ""; }; + D5E25950A895A52CC19D857BBECD78E4 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; + D60478F0E7C4D7B2ED83ECC80C4ED55C /* PFSQLiteDatabaseResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseResult.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h; sourceTree = ""; }; + D66D14F7F2E3EBDC0A59BB7BA3788C3D /* PFUserPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserPrivate.h; path = Parse/Internal/User/PFUserPrivate.h; sourceTree = ""; }; + D6A004354398DC71910DFA5EFAE2EE34 /* PFMultiProcessFileLockController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLockController.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h; sourceTree = ""; }; + D74C3795282F4C34ABC6339CF12F14AA /* PFRelation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelation.h; path = Parse/PFRelation.h; sourceTree = ""; }; + D83B31511109921F7A0625DCDA97EBD2 /* PFCloudCodeController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloudCodeController.m; path = Parse/Internal/CloudCode/PFCloudCodeController.m; sourceTree = ""; }; + D9AD68ED9EE4D4DA10299E21D0CF8248 /* PFKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeychainStore.m; path = Parse/Internal/PFKeychainStore.m; sourceTree = ""; }; + DA979320C889B93770A321587B8E4496 /* PFOfflineQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryController.h; path = Parse/Internal/Query/Controller/PFOfflineQueryController.h; sourceTree = ""; }; + DC63634BA83D3D3CBCBA2E87AB311573 /* PFObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState.h; path = Parse/Internal/Object/State/PFObjectState.h; sourceTree = ""; }; + DC833CC54CC9FF49BF622887A836F451 /* PFDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDevice.m; path = Parse/Internal/PFDevice.m; sourceTree = ""; }; + DCA2CF0514C165F17D511A7B9FA1A883 /* PFUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserController.m; path = Parse/Internal/User/Controller/PFUserController.m; sourceTree = ""; }; + DCFD84DA41F7C585D9DC6E2088D8F8D3 /* PFPurchase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchase.h; path = Parse/PFPurchase.h; sourceTree = ""; }; + DDE9B6448BD79C26C031AB51DB767056 /* PFMutableFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableFileState.m; path = Parse/Internal/File/State/PFMutableFileState.m; sourceTree = ""; }; + DE0701939C6512E62807F0DEAC0B88C4 /* PFSessionUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionUtilities.m; path = Parse/Internal/Session/Utilities/PFSessionUtilities.m; sourceTree = ""; }; + DFC186001D6B517135B8C4D67EEC1DBA /* PFCommandURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandURLRequestConstructor.m; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m; sourceTree = ""; }; + E0937DFD0BBDD358F01F54D3DF3EB180 /* PFPushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushState.m; path = Parse/Internal/Push/State/PFPushState.m; sourceTree = ""; }; + E0E0B5753859D0D0960D4F376D21CFBA /* PFAnonymousUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousUtils.m; path = Parse/PFAnonymousUtils.m; sourceTree = ""; }; + E18313F9207DA8A940C45F4C6D3BE5A2 /* PFQueryUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryUtilities.m; path = Parse/Internal/Query/Utilities/PFQueryUtilities.m; sourceTree = ""; }; + E1F0715F4D0AC569F9A80C8EE87A7678 /* PFURLConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLConstructor.m; path = Parse/Internal/HTTPRequest/PFURLConstructor.m; sourceTree = ""; }; + E24E0BB42A1D0F93BEE886509C659AB6 /* PFApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFApplication.h; path = Parse/Internal/PFApplication.h; sourceTree = ""; }; + E3F8B8B2001C10329EB9605C32C29711 /* PFPropertyInfo_Runtime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo_Runtime.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m; sourceTree = ""; }; + E48021241236BB075308D3A946E88952 /* PFObjectBatchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectBatchController.m; path = Parse/Internal/Object/BatchController/PFObjectBatchController.m; sourceTree = ""; }; + E5964B03763EB227A79722D086B07AEB /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; + E5BF16EBC1131EC1A8C8DF686217EDEF /* ParseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseManager.h; path = Parse/Internal/ParseManager.h; sourceTree = ""; }; + E687834AAA233DAC2762507DAF840866 /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; + E6A7D84E1E43EC5B6384808B1B5E2C0D /* PFInstallationIdentifierStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h; sourceTree = ""; }; + E6C1A7933C5A11D332D285F4E14D704B /* PFCommandResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandResult.m; path = Parse/Internal/PFCommandResult.m; sourceTree = ""; }; + E748E925ED12231ECAFCA45289DC5651 /* PFRESTQueryCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTQueryCommand.m; path = Parse/Internal/Commands/PFRESTQueryCommand.m; sourceTree = ""; }; + E7BE7DB2043BFD734996BA10DACD88D1 /* PFAnalyticsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsController.m; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.m; sourceTree = ""; }; + E7FA04FB8AE086B49BFBB161FB6C5A22 /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; + E879D654F92A43EBF40100EDA8F4723B /* PFAnalyticsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsController.h; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.h; sourceTree = ""; }; + EC05CE6C1335AF7439307E684A4A4658 /* PFCachedQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCachedQueryController.h; path = Parse/Internal/Query/Controller/PFCachedQueryController.h; sourceTree = ""; }; + ED136241C039AEF003B23EE29588B7DF /* PFCoreManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreManager.h; path = Parse/Internal/PFCoreManager.h; sourceTree = ""; }; + ED66C38BB696C6EBD5F689444DE5698B /* PFDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDecoder.h; path = Parse/Internal/PFDecoder.h; sourceTree = ""; }; + EE062DC0F3E041826FDC9B1920238531 /* PFBaseState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBaseState.m; path = Parse/Internal/PFBaseState.m; sourceTree = ""; }; + EF3CEDC763708425D34FDAF2CD1194C5 /* PFErrorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFErrorUtilities.h; path = Parse/Internal/PFErrorUtilities.h; sourceTree = ""; }; + F0F73BA329E4FD6AA01176C7431EBFE4 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; + F228BBFAF9E26128FBEF282FE73D477C /* PFInstallationIdentifierStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationIdentifierStore.m; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m; sourceTree = ""; }; + F264AB25D4F485FB43C3C052444E57A8 /* PFMutableRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableRelationState.h; path = Parse/Internal/Relation/State/PFMutableRelationState.h; sourceTree = ""; }; + F2BBD5A5E42C1E632BCED63C083AEA52 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + F482627CD4A818F68CA6022A4023CD7A /* PFRole.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRole.h; path = Parse/PFRole.h; sourceTree = ""; }; + F48BEB733DD91A7D53CF88B21A269709 /* PFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFNetworkActivityIndicatorManager.m; path = Parse/PFNetworkActivityIndicatorManager.m; sourceTree = ""; }; + F4EBCD611EB0EB86EAF46AB78D6C9C9D /* PFRESTQueryCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTQueryCommand.h; path = Parse/Internal/Commands/PFRESTQueryCommand.h; sourceTree = ""; }; + F5760F0DA7B30409A71D6E956AE9172B /* PFURLSessionFileDownloadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionFileDownloadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m; sourceTree = ""; }; + F75EB19F28291BD31FAFD036CE9F9A61 /* PFReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFReachability.h; path = Parse/Internal/PFReachability.h; sourceTree = ""; }; + F80064D5DEE86FA0C8D24134A843AFE1 /* PFFieldOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperation.m; path = Parse/Internal/FieldOperation/PFFieldOperation.m; sourceTree = ""; }; + F9250F0F20E5E4ED980A30FE96202787 /* PFOfflineQueryLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryLogic.h; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h; sourceTree = ""; }; + FA2438B1DDEB1848F5F5D82CB852583E /* PFPinningObjectStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningObjectStore.m; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.m; sourceTree = ""; }; + FA4D77F479BDDB7FCC802644C7B895D0 /* PFConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfigController.m; path = Parse/Internal/Config/Controller/PFConfigController.m; sourceTree = ""; }; + FC5FEFC8C99E02AAEE60AEBC8FF0063B /* PFMutableFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableFileState.h; path = Parse/Internal/File/State/PFMutableFileState.h; sourceTree = ""; }; + FCE8643D2CF10C59D3B13EED199470C3 /* PFCommandCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandCache.m; path = Parse/Internal/PFCommandCache.m; sourceTree = ""; }; + FD0DC15BB1F34596371C48A1D117C62F /* PFCategoryLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCategoryLoader.m; path = Parse/Internal/PFCategoryLoader.m; sourceTree = ""; }; + FDA614FFD9F4D7DF03E545167A1236CE /* PFMutableACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableACLState.m; path = Parse/Internal/ACL/State/PFMutableACLState.m; sourceTree = ""; }; + FE24B408A21AA65A2C6C5ECD3A88084D /* PFRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelationState.m; path = Parse/Internal/Relation/State/PFRelationState.m; sourceTree = ""; }; + FEA99D72FAAF1C1CCB030F44B7765976 /* PFOfflineObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineObjectController.m; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m; sourceTree = ""; }; + FF94702CE18ED34C2681EF97F7E85B40 /* PFRESTCommand_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand_Private.h; path = Parse/Internal/Commands/PFRESTCommand_Private.h; sourceTree = ""; }; + FFBAA18C7BBABC589780000C2DF75641 /* libParse.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libParse.a; sourceTree = BUILT_PRODUCTS_DIR; }; + FFC9A812BC50C9BE9A45E1BE4A59532D /* PFSQLiteDatabaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseController.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 7D675EAC5362DC710F02FD75C202FC69 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3DB8A0F752DA80375EADCCEE442C2446 /* AudioToolbox.framework in Frameworks */, + 200CBE166D201B143AF627A475AAC1FB /* CFNetwork.framework in Frameworks */, + BDC924266A1575B8E3D5B70544ABE0BB /* CoreGraphics.framework in Frameworks */, + 7E990026C996B851DD9B64AC33E6E1E0 /* CoreLocation.framework in Frameworks */, + 860FC46193591C24CFB85207870A57EF /* Foundation.framework in Frameworks */, + 407007B859EBDD5E2639CE8894D6801A /* QuartzCore.framework in Frameworks */, + EC3E7E5D47C8C4485FABD0262AA04B0A /* Security.framework in Frameworks */, + DEA88B8DD23B199712A1ABCFF5C4338F /* StoreKit.framework in Frameworks */, + 132B0FFAA237FFBC7BF8CEAE8B9B390D /* SystemConfiguration.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 942508E56C720429BC1DCEB09828834B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A5F2F863073EF75443E528E22A276823 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BC4C40C28519D73FBDD81030214E0713 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A4A9994EC1B2B5FE681A95E532942577 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 24002A6670E6882ECD6250D3E60F9CB2 /* Frameworks */ = { + isa = PBXGroup; + children = ( + F9400E82BDA8E39AA40BABDC6CB12014 /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + 36A5C9D5099E00189F2FD1EE15CB14DE /* Support Files */ = { + isa = PBXGroup; + children = ( + 42DDE7216238765988616CD0550CA7E7 /* Bolts.xcconfig */, + 2613CC942BB5B821A1369B8E68019FDA /* Bolts-Private.xcconfig */, + A9EF3EDC4FDAFC57AB7D03F2B66F8398 /* Bolts-dummy.m */, + 8B845FC390E44059F2A5FC0E8BA8073F /* Bolts-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/Bolts"; + sourceTree = ""; + }; + 3B4583097277E8A56B364A7349186643 /* Bolts */ = { + isa = PBXGroup; + children = ( + 36A5C9D5099E00189F2FD1EE15CB14DE /* Support Files */, + 52536E4062D2F3819EFF08F9A9FCFE7E /* Tasks */, + ); + path = Bolts; + sourceTree = ""; + }; + 4B657238145A298E2C2E0ED134EA9AA7 /* Pods */ = { + isa = PBXGroup; + children = ( + 3B4583097277E8A56B364A7349186643 /* Bolts */, + 62C3AB12129D9098F2E643D6B2CB4730 /* Parse */, + ); + name = Pods; + sourceTree = ""; + }; + 522559B2E6892BF2C958FADD2A2E6B17 /* Support Files */ = { + isa = PBXGroup; + children = ( + 4113495D4A663C12AB75535F753A5AF9 /* Parse.xcconfig */, + 3E781400D2DB9020CCA193E74F459F26 /* Parse-Private.xcconfig */, + 5456C5EDD601EB1F4939A1ADFE7EB84F /* Parse-dummy.m */, + 391E859809C989E8E6F5613E73CF722A /* Parse-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/Parse"; + sourceTree = ""; + }; + 52536E4062D2F3819EFF08F9A9FCFE7E /* Tasks */ = { + isa = PBXGroup; + children = ( + 7EA388C394C5D9D428DB4F0C14EF97F7 /* BFCancellationToken.h */, + A2053B7041E0633DF0F9AD94C7B1956F /* BFCancellationToken.m */, + 17A2BDCAD5B27E331974A22F463E44CF /* BFCancellationTokenRegistration.h */, + E687834AAA233DAC2762507DAF840866 /* BFCancellationTokenRegistration.m */, + 7046AB20AC12CE0D708ECF95F2C079BF /* BFCancellationTokenSource.h */, + A2E9FF3525464F62315EA0C2C8DBF089 /* BFCancellationTokenSource.m */, + 7865F2D426B0005FBA1C5220282DDBEE /* BFDefines.h */, + 96273707C86B8C6EA8146C952F2EBE64 /* BFExecutor.h */, + 671CEA32EB838EA2DB18154A0B781F41 /* BFExecutor.m */, + A7A38E54B7ADBF7D1932DAF9BF6DB999 /* BFTask.h */, + CEB26C97146C83F5B87B7771DE7F29E0 /* BFTask.m */, + E7FA04FB8AE086B49BFBB161FB6C5A22 /* BFTaskCompletionSource.h */, + 18D995618F24B9FE1FA4F15699A5A8BA /* BFTaskCompletionSource.m */, + B3F709284CED11CD6FFD287A21D7356C /* Bolts.h */, + 8CCA791631F559F162C6A4858BB0E605 /* Bolts.m */, + A9A17244CCBF6923F4C1448B4C7F8259 /* BoltsVersion.h */, + ); + name = Tasks; + sourceTree = ""; + }; + 62C3AB12129D9098F2E643D6B2CB4730 /* Parse */ = { + isa = PBXGroup; + children = ( + 1DCFFA9D9D3FD9AE7914C3CDBC03F386 /* BFTask+Private.h */, + 29F955AA1404AAE96344AAE5FB9ACCCE /* BFTask+Private.m */, + 9423B92363C6078122A8D176B24507E2 /* PFACL.h */, + A1C2072D5B7941AF0CA6A45698E16D81 /* PFACL.m */, + 1048C89864CA1BAAC39909E7EAF64FF7 /* PFACLPrivate.h */, + C8673179A0982B40E80A428E4FB775FE /* PFACLState.h */, + B6230E95CC1C91D65E987B6F92071EE0 /* PFACLState.m */, + 1906D27D412A515912345F6C5D1138B3 /* PFACLState_Private.h */, + 0BB18584CF736AD36BCE6DE812088676 /* PFAlertView.h */, + B828EE160146AC71D96D74359D0B87D9 /* PFAlertView.m */, + 56DD772CBED2910C5B2E94ADABDD79F2 /* PFAnalytics.h */, + 116F73992D0A8BEB52EB6FFCE76C5242 /* PFAnalytics.m */, + E879D654F92A43EBF40100EDA8F4723B /* PFAnalyticsController.h */, + E7BE7DB2043BFD734996BA10DACD88D1 /* PFAnalyticsController.m */, + 17530FFB4F9A63C5FF114E86EC313B18 /* PFAnalyticsUtilities.h */, + 87310202CC115E0D59A56B46CE72FBD3 /* PFAnalyticsUtilities.m */, + C5E2765A6C6141C912C8C89927E5E59E /* PFAnalytics_Private.h */, + 68BF84CDE3833CC1EF16696ED2573967 /* PFAnonymousAuthenticationProvider.h */, + 14C7CDE38DB399D405735FBBF03F2A7B /* PFAnonymousAuthenticationProvider.m */, + 32E9622FB277F31FF0ACE70A0E8C1B44 /* PFAnonymousUtils.h */, + E0E0B5753859D0D0960D4F376D21CFBA /* PFAnonymousUtils.m */, + CB0D33609AC2DEE7BF62A26950D3C062 /* PFAnonymousUtils_Private.h */, + E24E0BB42A1D0F93BEE886509C659AB6 /* PFApplication.h */, + 00853C35851DB9DCB92267B2F10343F6 /* PFApplication.m */, + 16936467CF16DCC6960896B5471D7C27 /* PFAssert.h */, + 0C03418CCE96F211DA0F0C490AB018EE /* PFAsyncTaskQueue.h */, + 6285547694D0DE6096DB0174F62F8D57 /* PFAsyncTaskQueue.m */, + 7F989773F048C2B6AA76E2F33AB85191 /* PFBase64Encoder.h */, + D32CB47208011940CD4CC821E6C60F5F /* PFBase64Encoder.m */, + 40001E702307C45CF85652D32E688A7A /* PFBaseState.h */, + EE062DC0F3E041826FDC9B1920238531 /* PFBaseState.m */, + EC05CE6C1335AF7439307E684A4A4658 /* PFCachedQueryController.h */, + 2E1ABB16A7E7BC8AF7D9E1FE23ABE0E2 /* PFCachedQueryController.m */, + B6483E9C28C9D90DBE19EE9FEA7C05BA /* PFCategoryLoader.h */, + FD0DC15BB1F34596371C48A1D117C62F /* PFCategoryLoader.m */, + 8F51DFCB9E569CD5791CBA701D9AFE8C /* PFCloud.h */, + 6FCB9CF92D4B7B99AABCC3E9837A6C8C /* PFCloud.m */, + 2791960015A0E379245E5A0882B9DDCE /* PFCloudCodeController.h */, + D83B31511109921F7A0625DCDA97EBD2 /* PFCloudCodeController.m */, + 41BEED2F8941DE9D36C4383DE2A005E4 /* PFCommandCache.h */, + FCE8643D2CF10C59D3B13EED199470C3 /* PFCommandCache.m */, + 27A3A55D0FC90475F63A86D2640BF7E4 /* PFCommandCache_Private.h */, + 1170CA07F5721584040D06438ECB2657 /* PFCommandResult.h */, + E6C1A7933C5A11D332D285F4E14D704B /* PFCommandResult.m */, + C09DCB3EF4CB0BAF12A22BD98B68BFAA /* PFCommandRunning.h */, + C876DBA76406D0CD90D0A146D8241EB0 /* PFCommandRunning.m */, + 699EE24E208C84FB34AD727CE4B22B06 /* PFCommandRunningConstants.h */, + 83EF521AE88F3E4B58595E6C70734633 /* PFCommandRunningConstants.m */, + CA8004D86110E800F8B66A6C52331804 /* PFCommandURLRequestConstructor.h */, + DFC186001D6B517135B8C4D67EEC1DBA /* PFCommandURLRequestConstructor.m */, + 5292287F5D3AE4EF5E74D76C6FDB81A2 /* PFConfig.h */, + 4709648C670A81EACDB1DA9F808189F5 /* PFConfig.m */, + CB2EB1A81CEF041251C51543CB93FA8B /* PFConfigController.h */, + FA4D77F479BDDB7FCC802644C7B895D0 /* PFConfigController.m */, + C438131B9FF8C57DBDE42A1886182C1F /* PFConfig_Private.h */, + C3D50155B3D10EDC8634E8BCE3E2EC49 /* PFConstants.h */, + 765B7A2AA534A8E804AE9123D59C9043 /* PFConstants.m */, + 8DDA31CB23D7EDC55E267E8867ECC976 /* PFCoreDataProvider.h */, + ED136241C039AEF003B23EE29588B7DF /* PFCoreManager.h */, + 03E890753CE899F60DD6626F8404DF58 /* PFCoreManager.m */, + BFFD2763428584483FBC7980FDEE0319 /* PFCurrentConfigController.h */, + 2AB5DEC6229F3BE36F1F514679A24AE3 /* PFCurrentConfigController.m */, + D1502154EA0D5A991A1D6B8B9EFCB52F /* PFCurrentInstallationController.h */, + 5C7D5E9E9338447002877586E4B453BC /* PFCurrentInstallationController.m */, + C2B8FF73618A90330150849A195BFC2C /* PFCurrentObjectControlling.h */, + 7C2FB0BE9C76624C1E01BB37C1DF3416 /* PFCurrentUserController.h */, + A46B35BACD7F1073E12FCEDE85E4B67C /* PFCurrentUserController.m */, + BC4062E6A12C7F83FFAFD42283212C9A /* PFDataProvider.h */, + 3D4AD2E6C937B36339C0F9AFF8817BC6 /* PFDateFormatter.h */, + 23305A980DB3E4AED2259A74C9187B50 /* PFDateFormatter.m */, + ED66C38BB696C6EBD5F689444DE5698B /* PFDecoder.h */, + 8F10C0434DDB383B055CF6CA6E41A4A1 /* PFDecoder.m */, + 8824A59A418BB304F2D1B9623F26AE12 /* PFDefaultACLController.h */, + 333F24639C80887F8DA6A64132D3ACAD /* PFDefaultACLController.m */, + 70327113CA3A1A88572E8F96D12041F4 /* PFDevice.h */, + DC833CC54CC9FF49BF622887A836F451 /* PFDevice.m */, + 50DC95668369AC8E5CF51D8FE228F223 /* PFEncoder.h */, + AE6FD11DD7C073D83C79EDA40A4CBE4C /* PFEncoder.m */, + EF3CEDC763708425D34FDAF2CD1194C5 /* PFErrorUtilities.h */, + 02841C3BEB92D4DAC26220C5C7CE9740 /* PFErrorUtilities.m */, + 9C189C08BBFF35A029515798AD989F10 /* PFEventuallyPin.h */, + 023EEFF1E9891B8B0993596D706A7137 /* PFEventuallyPin.m */, + C52FA914AE60BC50812988E15670B2B0 /* PFEventuallyQueue.h */, + BAB69D923C8169E049A0B1F446DE3C22 /* PFEventuallyQueue.m */, + 0A3BD59B59438D47928EBE062F284A88 /* PFEventuallyQueue_Private.h */, + 03A69FDE3FBBA48FAFAB93667FC64A05 /* PFFieldOperation.h */, + F80064D5DEE86FA0C8D24134A843AFE1 /* PFFieldOperation.m */, + 7398989E9BACC2972DD360A682AB30D5 /* PFFieldOperationDecoder.h */, + 556C88BEC9C2F89C47B0E0710DA1127B /* PFFieldOperationDecoder.m */, + ADF1886AF6A65E3EF655A0635E8875D4 /* PFFile.h */, + 474A59362210E10E859CD9BA539B75D6 /* PFFile.m */, + B8702C4718ECDE4EC13CAB9FEBD20A78 /* PFFileController.h */, + 8C366C40EE46E2189B1D2710D70DFAC4 /* PFFileController.m */, + 62B360F076B3422F6B95643A41DC7D58 /* PFFileDataStream.h */, + 76F588CFEC125CE47A5E75C49BC6E111 /* PFFileDataStream.m */, + D3E8D70C7E8EB33159CDDA0AC7B6C9DC /* PFFileManager.h */, + A95C008395C7EBC9844E3F003B06DC43 /* PFFileManager.m */, + 2E7301204FAFBEAE4CD3C43B6DAC1858 /* PFFileStagingController.h */, + 366813962B9A44F8160D7BCF13112B91 /* PFFileStagingController.m */, + 7BEF001B9410A4976104E85881DB3C58 /* PFFileState.h */, + 8D19D8F4E00BF286006CD6D68E92C105 /* PFFileState.m */, + 7ADC119E201491E5146837A1ECDD27F1 /* PFFileState_Private.h */, + 144A3BA47B4A9DFCE62E998D209A9844 /* PFFile_Private.h */, + D2CC64D2FEDF6A4C762798A614A6AD05 /* PFGeoPoint.h */, + 8C9096CC3342212FFE41602D93C0C169 /* PFGeoPoint.m */, + 96AB7832E582A38AA7D72F9B8735C3BA /* PFGeoPointPrivate.h */, + 41EC4873567E5199115062D666B66648 /* PFHTTPRequest.h */, + A4ACC59626D38782D3773A813251B790 /* PFHTTPURLRequestConstructor.h */, + 4E2405EA0846F25769ECD3AD50DE9EC2 /* PFHTTPURLRequestConstructor.m */, + 8EAC8A1F239CB9A07C89A445269755B3 /* PFHash.h */, + 48BA1E2ADC6C1A912806B4434C705899 /* PFHash.m */, + 152A294FCBAFB2F303701CC560D0CB9E /* PFInstallation.h */, + 0EC3943147EE9557BE2120CF2329E38E /* PFInstallation.m */, + AB9B2C34BBD8FBC05AEB06BCA0F9C9CF /* PFInstallationConstants.h */, + 025EFE1DD58EFDD344107DFA9F4AD477 /* PFInstallationConstants.m */, + C3021C35E215764D5CD8DA96BB1AF638 /* PFInstallationController.h */, + B60239EFD344C553851D340E46C88513 /* PFInstallationController.m */, + E6A7D84E1E43EC5B6384808B1B5E2C0D /* PFInstallationIdentifierStore.h */, + F228BBFAF9E26128FBEF282FE73D477C /* PFInstallationIdentifierStore.m */, + 010221E298AB835936ED04C1B61B2889 /* PFInstallationIdentifierStore_Private.h */, + 765173C954A51B493E29F50B2D97732A /* PFInstallationPrivate.h */, + 84D4C06D28A83DD5865841731DD2BB1C /* PFInternalUtils.h */, + A0D7B54A478A38CB2BC90CD24EAB27B6 /* PFInternalUtils.m */, + 7CEB98AB34541B47F2042CC509B89CD4 /* PFJSONSerialization.h */, + BCF7D81BB8B3017FFCA5BFA657475191 /* PFJSONSerialization.m */, + AFCE9242FBE9C6F5B79A769A629C60CF /* PFKeyValueCache.h */, + 3A59FF425B4E22F00D5B693BF199C21E /* PFKeyValueCache.m */, + 52763EB85FB6F54982F9F986750D041D /* PFKeyValueCache_Private.h */, + 40F5313A31663C9C8E3E94C0B4789071 /* PFKeychainStore.h */, + D9AD68ED9EE4D4DA10299E21D0CF8248 /* PFKeychainStore.m */, + 4C0BDD882C72C66B96CB5D72117728F8 /* PFLocationManager.h */, + 7A061CE9E6A0CE32309E0356EB7DE8D9 /* PFLocationManager.m */, + B53A1E293DB4591CB07EB02181C2B192 /* PFLogger.h */, + 47F13D5EB10A23DB6E0A7FABF2E8CDBD /* PFLogger.m */, + 216E10883658EDAA1467BD1DDBDDC840 /* PFLogging.h */, + 870CCACCA994D6092C3A667F1EC7EE38 /* PFMacros.h */, + BD7E295A2705B98E78F1230626724816 /* PFMultiProcessFileLock.h */, + B5045A6DC57A247B1BB14933FDCA672F /* PFMultiProcessFileLock.m */, + D6A004354398DC71910DFA5EFAE2EE34 /* PFMultiProcessFileLockController.h */, + 5983FC4B63B585E8A136F4AC664EEF0C /* PFMultiProcessFileLockController.m */, + 23269D2652429AAB9E5717B42C4C40FB /* PFMulticastDelegate.h */, + 04F603E8068EB055DB1098ED088FBC0B /* PFMulticastDelegate.m */, + 88690FBD663956E84E2502DB50AB5408 /* PFMutableACLState.h */, + FDA614FFD9F4D7DF03E545167A1236CE /* PFMutableACLState.m */, + FC5FEFC8C99E02AAEE60AEBC8FF0063B /* PFMutableFileState.h */, + DDE9B6448BD79C26C031AB51DB767056 /* PFMutableFileState.m */, + 76730C16E6204729829FF1031310068D /* PFMutableObjectState.h */, + 905F084EAA67E29023FC7262EFF7C7FC /* PFMutableObjectState.m */, + 2FAE5FB0E717E5E066DB0DD19ED0679F /* PFMutablePushState.h */, + B9559972A6331681B0BFCE99D4830D0C /* PFMutablePushState.m */, + 23B01EE10487D2A55A89CF394A299B88 /* PFMutableQueryState.h */, + 80356D4DBFA9C24B249DE3B4717F44B8 /* PFMutableQueryState.m */, + F264AB25D4F485FB43C3C052444E57A8 /* PFMutableRelationState.h */, + A3ED374B51D528F113CC177E773492C6 /* PFMutableRelationState.m */, + 267DC6F7D82298ABF3C18C327FEDF275 /* PFMutableUserState.h */, + 355562D77F7A3ECC89ADA55D047757BA /* PFMutableUserState.m */, + 45D0E44482F38FEEB37F4CE77B608864 /* PFNetworkActivityIndicatorManager.h */, + F48BEB733DD91A7D53CF88B21A269709 /* PFNetworkActivityIndicatorManager.m */, + 72A213523367D0C4F848FD1542D0E1BB /* PFNetworkCommand.h */, + 9E7CD5EAEAC1BC3148596E0F47F3CA74 /* PFNullability.h */, + 308E43BD885210D04C25609F7FFE572D /* PFObject.h */, + 5BA78E8ED3B478FCE98D4154F24101BB /* PFObject.m */, + 08D3D6F3DCED7306E944D33A3186C1AF /* PFObject+Subclass.h */, + 34F7E58ACE9D749D100E04FECD569B45 /* PFObjectBatchController.h */, + E48021241236BB075308D3A946E88952 /* PFObjectBatchController.m */, + 85D8C47DFF7FF802AF326B4C6383AF35 /* PFObjectConstants.h */, + 0839D4C7AB14AABD676EF16D9D297FE7 /* PFObjectConstants.m */, + 2DAB9F63DEB559E36F66611AC7532E7C /* PFObjectController.h */, + CB26278765FDFC13590066F6B6BBE08C /* PFObjectController.m */, + 5D9415A793D299204A98D83B774768B1 /* PFObjectController_Private.h */, + BF48D0C85E7175A9594CACE087E1F8D3 /* PFObjectControlling.h */, + 5878493E65CFC3022C41DAF663AAD6DF /* PFObjectEstimatedData.h */, + 6BC6D066DB5DE208C19F3EF18D5033CF /* PFObjectEstimatedData.m */, + 81A6715334A0491BEE68AE8FEF91CA79 /* PFObjectFileCoder.h */, + 2706634FB1F4B0C9210247AA1B420D73 /* PFObjectFileCoder.m */, + 5C6B7B3F0FCE545B7D965DEDF8ED4613 /* PFObjectFileCodingLogic.h */, + 7ADCE9E163F3FCD8DF103AD6E0A2840B /* PFObjectFileCodingLogic.m */, + 860D0B9D3698F147687E070AD019DD1E /* PFObjectFilePersistenceController.h */, + ACB6900468A2F6CE7B3A606F3CA5F322 /* PFObjectFilePersistenceController.m */, + 362FACECEF69703BFA9C57ED74660D97 /* PFObjectLocalIdStore.h */, + 769433A4610BC66862A645AA9FFF52CB /* PFObjectLocalIdStore.m */, + 3140F8B22C96FA60AD48F660BFF7FCD2 /* PFObjectPrivate.h */, + DC63634BA83D3D3CBCBA2E87AB311573 /* PFObjectState.h */, + 807B1D200CD50072E1017510EC7A3B8E /* PFObjectState.m */, + 0A180E3CC6A83C085262778CAE43767A /* PFObjectState_Private.h */, + 0B30FD2D2BC16F38BEB58093ADF82B7A /* PFObjectSubclassInfo.h */, + 03A98730119221482A511C33FBD4CBF9 /* PFObjectSubclassInfo.m */, + 67597E3A5597B762BEC0ED0EC7E967FF /* PFObjectSubclassingController.h */, + 834AE8A8AE6F7F19DBF7A13695DA1EE9 /* PFObjectSubclassingController.m */, + A6604E156E00003CEF6AEA0518B9D55E /* PFObjectUtilities.h */, + 7FFDBD38104590E7E7569E959BE85635 /* PFObjectUtilities.m */, + 3CD9E69666E0F4D54D0539786BD3CBF7 /* PFOfflineObjectController.h */, + FEA99D72FAAF1C1CCB030F44B7765976 /* PFOfflineObjectController.m */, + DA979320C889B93770A321587B8E4496 /* PFOfflineQueryController.h */, + B32EAEBB2BF0E7999CBAA8BBC9844BB8 /* PFOfflineQueryController.m */, + F9250F0F20E5E4ED980A30FE96202787 /* PFOfflineQueryLogic.h */, + 229A74FF17E8D46A86798DDFB3D12F02 /* PFOfflineQueryLogic.m */, + 2B9972BBC14ADBA4A17A6CC1801DB183 /* PFOfflineStore.h */, + C6F8830B4BAD707ED99EB6DA023C7803 /* PFOfflineStore.m */, + 374CEE0448D7C92E9F6B2F5B9987BBFA /* PFOperationSet.h */, + 7F4F40BD61DDB1C6011B29A82B9D4674 /* PFOperationSet.m */, + 87355840B3797E204A33EF21DD786865 /* PFPaymentTransactionObserver.h */, + C72B7C59C5C07C9D6873A101E4CD589F /* PFPaymentTransactionObserver.m */, + 8AF69A58E6F7EA86A79ACA49E961650A /* PFPaymentTransactionObserver_Private.h */, + 1D7EDE5ABF288993846E8BEA60CE324D /* PFPin.h */, + 6776A4FE81BCDB08946667E7FAF1A6C0 /* PFPin.m */, + 44FB09F8C2981A2C9E4660E4FABC1F83 /* PFPinningEventuallyQueue.h */, + 8C3EB736F8A50220457120DE7F4E7DF7 /* PFPinningEventuallyQueue.m */, + D1C861FA6983C0DBEE507CDD33BA8714 /* PFPinningObjectStore.h */, + FA2438B1DDEB1848F5F5D82CB852583E /* PFPinningObjectStore.m */, + BE9304218DB27984F98075C9997693A9 /* PFProduct.h */, + AE99A29157A904C67890D7F7E49DDD80 /* PFProduct.m */, + 7A2A025CBCE13AF790C21EB33F3FDD8A /* PFProduct+Private.h */, + 2EE5B04D8D051799BEED324B493485A4 /* PFProductsRequestHandler.h */, + 1E60CD03AB5997917F89A62109F51C1F /* PFProductsRequestHandler.m */, + BD59DB857ADCDA5EE20B1AF8286DC64E /* PFPropertyInfo.h */, + 01E9E0D58701D7F6B1D72B98440AD9BA /* PFPropertyInfo.m */, + 09FEBAB0B414EEEC06B7B89FD63280F5 /* PFPropertyInfo_Private.h */, + BF7A6665C70BAC3FA8DEA15E402165E2 /* PFPropertyInfo_Runtime.h */, + E3F8B8B2001C10329EB9605C32C29711 /* PFPropertyInfo_Runtime.m */, + DCFD84DA41F7C585D9DC6E2088D8F8D3 /* PFPurchase.h */, + 3FBB8D23E11D288C6235C6730E4861BE /* PFPurchase.m */, + 7FF8D43BA53CAB9EC8CE2C3D9BB07585 /* PFPurchaseController.h */, + D4D44451B9EF1D2AABB3727B5BE49E3A /* PFPurchaseController.m */, + 8ED3D96C01E8D4CCBEF611AC599F7C52 /* PFPush.h */, + 6CA0FB7E1B7B3B44E19E9F459BDE3FC5 /* PFPush.m */, + 6A83EDAC97C7A74FA2625134D35D4560 /* PFPushChannelsController.h */, + 1CDD3144250DCECB39F57A04B6C9A3F0 /* PFPushChannelsController.m */, + 208CE00C994794CE9B26AC6698B8198D /* PFPushController.h */, + 2758D4A6E71B967E09A910CF576817B1 /* PFPushController.m */, + A327BF223427530CA8B748A9862FA426 /* PFPushManager.h */, + 8FF2D70E2A6BDA411BD8E96BE88717F8 /* PFPushManager.m */, + 8E1532E528C597C81417C9A6C2A3ECA1 /* PFPushPrivate.h */, + ABC73F2E99BCC42C0125231EAF7EDB15 /* PFPushState.h */, + E0937DFD0BBDD358F01F54D3DF3EB180 /* PFPushState.m */, + C4FC14EB432E641BAA43CE3A6CA50340 /* PFPushState_Private.h */, + BF1F7285450FFB765AE85728E98D3277 /* PFPushUtilities.h */, + CCE521672B33AE35219C0DBD9512A6E6 /* PFPushUtilities.m */, + 00B8BB0329F997188B363E677BBB666E /* PFQuery.h */, + A3E3489C8DBCB1ADB9C7893D90F60918 /* PFQuery.m */, + CF82FA8252D0DEF399D32F39A272A631 /* PFQueryController.h */, + A963DD1D7B9750E8E9A817472714C113 /* PFQueryController.m */, + 7C31BD302E3DED84EC1289B2E8C260F4 /* PFQueryPrivate.h */, + C9CBCE0E34FCE6BCB16E3402C6CF887E /* PFQueryState.h */, + C86658E5106D83528921871195EA7A25 /* PFQueryState.m */, + 0D2FD8C2062E42D035690B0D01AEA8DB /* PFQueryState_Private.h */, + 961B5EB24B86AAC41ED236D838A64A5C /* PFQueryUtilities.h */, + E18313F9207DA8A940C45F4C6D3BE5A2 /* PFQueryUtilities.m */, + 5894A228B6F31F871749F0BC8C57560B /* PFRESTAnalyticsCommand.h */, + 4F34B890143B7FF3F7E15109C866C70F /* PFRESTAnalyticsCommand.m */, + 77442B142F2E19A0A0521AFDCF58C91C /* PFRESTCloudCommand.h */, + C182382BFBF1EE8F2E17E6E7DFCABA57 /* PFRESTCloudCommand.m */, + 83D00AFB6C86BE198D122C01CC505FB9 /* PFRESTCommand.h */, + 6041A7EB33A2C8DBA16E95481F6E955A /* PFRESTCommand.m */, + FF94702CE18ED34C2681EF97F7E85B40 /* PFRESTCommand_Private.h */, + 7AF5DF0C66469EF5555738D6E5627354 /* PFRESTConfigCommand.h */, + 47D9BB43AF2C76037F90ECEAA05CFF01 /* PFRESTConfigCommand.m */, + BD53148FD3F25A5417B79C08A7EF6137 /* PFRESTFileCommand.h */, + 717C08EFA64F3FF8CD1383B57F8FFC0B /* PFRESTFileCommand.m */, + 68A4262C2B21FF46E63C3BB478773563 /* PFRESTObjectBatchCommand.h */, + 16E2B74C340852FB7F8D0C347EE34F7F /* PFRESTObjectBatchCommand.m */, + 0539CEFD73A9E47FC3CF538787C89A88 /* PFRESTObjectCommand.h */, + 6DC7C863A91F293E7888686B75ADDA92 /* PFRESTObjectCommand.m */, + 3C3A2002500C346E302092A2088A57A7 /* PFRESTPushCommand.h */, + BB3CC31AB928B710A068EFE34F219D54 /* PFRESTPushCommand.m */, + F4EBCD611EB0EB86EAF46AB78D6C9C9D /* PFRESTQueryCommand.h */, + E748E925ED12231ECAFCA45289DC5651 /* PFRESTQueryCommand.m */, + 8BA4F24522BCB8A666417FFCCCE66FAF /* PFRESTSessionCommand.h */, + 81B7B344C875A3AB97E6C33C60A5F9BF /* PFRESTSessionCommand.m */, + 8D8A0D5C7E7AAA06AD1719AF2C60C130 /* PFRESTUserCommand.h */, + 3D283291B477D2080EBFC60E0CE5B3A3 /* PFRESTUserCommand.m */, + F75EB19F28291BD31FAFD036CE9F9A61 /* PFReachability.h */, + 147E2DE0E42F38E2305A44CF01419B5A /* PFReachability.m */, + D74C3795282F4C34ABC6339CF12F14AA /* PFRelation.h */, + CF97B19442AC920A6CD420C61B604C5A /* PFRelation.m */, + 159CCE347EF8F7907332612BF120B860 /* PFRelationPrivate.h */, + 6E5C86338C3B23D609E0EF8581B094C1 /* PFRelationState.h */, + FE24B408A21AA65A2C6C5ECD3A88084D /* PFRelationState.m */, + 3EF48103F2FD65D41AC8CEF7D0FFAC5B /* PFRelationState_Private.h */, + F482627CD4A818F68CA6022A4023CD7A /* PFRole.h */, + 032A4A6705724272DE8FD9BC94C95C33 /* PFRole.m */, + 5F114EC7295D2D778ADAD06DAECFFDF6 /* PFSQLiteDatabase.h */, + 0D3318F94B3CCDF4EC509F49C45A27FC /* PFSQLiteDatabase.m */, + B90CFF6D8D057714B5CB05B1EF6832E7 /* PFSQLiteDatabaseController.h */, + FFC9A812BC50C9BE9A45E1BE4A59532D /* PFSQLiteDatabaseController.m */, + D60478F0E7C4D7B2ED83ECC80C4ED55C /* PFSQLiteDatabaseResult.h */, + 95F2D7917180A966F3553DB814B47079 /* PFSQLiteDatabaseResult.m */, + 0A33DBA763E58A23158889AB7E55D1E8 /* PFSQLiteDatabase_Private.h */, + 993C9598765F98AA0527D81D83D6DEE2 /* PFSQLiteStatement.h */, + B82B704DB25FE99DA94E96510CA4115E /* PFSQLiteStatement.m */, + 8EB39D6AC1AE16A8B7C4F5DE8BB6C0A5 /* PFSession.h */, + 24DA2B1B50C58F417BC0F3413CC0937E /* PFSession.m */, + 0F2AE28A9117ECBD3FEA8A80E3592B9E /* PFSessionController.h */, + BF600E65BDFE51829FB662904C48520F /* PFSessionController.m */, + A1EA7AD5E3D6B3D7DA51A46514ACC1B2 /* PFSessionUtilities.h */, + DE0701939C6512E62807F0DEAC0B88C4 /* PFSessionUtilities.m */, + 23D468ADFF594C052225A0543E3B6A56 /* PFSession_Private.h */, + 9D07888730F9C387835661F6975CE0CE /* PFSubclassing.h */, + AE1AF3237CA729A9AE65C24D5465EDB0 /* PFTaskQueue.h */, + 65A6FE58C9C2C7E84B044607B8A5890A /* PFTaskQueue.m */, + 1FB342435842C135A1CE8351177875B1 /* PFThreadsafety.h */, + 72AA7C1713DE26F7C83BC1BE68649977 /* PFThreadsafety.m */, + 89095502D7357690CC6FC98B5D64DB76 /* PFURLConstructor.h */, + E1F0715F4D0AC569F9A80C8EE87A7678 /* PFURLConstructor.m */, + B5F07D1F2661374F427EFA9F321E58A9 /* PFURLSession.h */, + C2DE5E9C06AC71245804541B12D5F7B8 /* PFURLSession.m */, + BF85BDBB00B0B90C79842355DCCE5702 /* PFURLSessionCommandRunner.h */, + 16E653F2F3740605E3A7745107A7C5DF /* PFURLSessionCommandRunner.m */, + B25F8AA5E0ACA8EF99E4B7A34CA08791 /* PFURLSessionCommandRunner_Private.h */, + 61C33185F5BD57BDE3231949A2133ABF /* PFURLSessionDataTaskDelegate.h */, + 43F2F47F077C809F803E3BA42EAF9CC7 /* PFURLSessionDataTaskDelegate.m */, + 8AF59E6E45FB90176198F0361D0B0430 /* PFURLSessionDataTaskDelegate_Private.h */, + 047743A34224268FD55BB1875D8232CA /* PFURLSessionFileDownloadTaskDelegate.h */, + F5760F0DA7B30409A71D6E956AE9172B /* PFURLSessionFileDownloadTaskDelegate.m */, + 4E2EF54AD86CBB75239ED52C54FEE973 /* PFURLSessionJSONDataTaskDelegate.h */, + 02237672394DCB6999F68D60FB362A3E /* PFURLSessionJSONDataTaskDelegate.m */, + 31479B7C07EEF4712DEF1D01F7F10F31 /* PFURLSessionUploadTaskDelegate.h */, + 99C509F37C4504D78F4E60A46E053B08 /* PFURLSessionUploadTaskDelegate.m */, + 384135DE37094DB8E731205CBD17F72F /* PFURLSession_Private.h */, + 14E52D110E94F845EFA54F1D5B716ADF /* PFUser.h */, + 78005460CA734997653B091EDC6EFBDF /* PFUser.m */, + 10BF5DBDEACF811090B330EB5B9574DC /* PFUserAuthenticationController.h */, + 5B7919554958754AF6F15E6D978D43B0 /* PFUserAuthenticationController.m */, + 29E8D38657DDEFCFA5A73CAF48D523A7 /* PFUserAuthenticationDelegate.h */, + 2A2DE58DBDFB1D72AF24F80D783EAE28 /* PFUserConstants.h */, + AEFE2975AB948B5A15901ABF3D7C9456 /* PFUserConstants.m */, + B71BDBAA3E5BDFECB4D5FA52A92DDE3C /* PFUserController.h */, + DCA2CF0514C165F17D511A7B9FA1A883 /* PFUserController.m */, + 3A5E945E1EC907178171BF58D1F60131 /* PFUserFileCodingLogic.h */, + 43AED0C36A33D48DB75041D300713664 /* PFUserFileCodingLogic.m */, + D66D14F7F2E3EBDC0A59BB7BA3788C3D /* PFUserPrivate.h */, + BB328A47E71DF5C9ED039046F3CF4E10 /* PFUserState.h */, + ADAA3EE17CA0B38B1E402F112E0339B9 /* PFUserState.m */, + 754F92799C47C441BC69A6DFCA0BE689 /* PFUserState_Private.h */, + 2F9009C1FEECA9D4795590A5794DD2B1 /* PFWeakValue.h */, + 6E530CB9C9FCEEC48D0D6022A3B9E461 /* PFWeakValue.m */, + 08ED2E2E627F66EA8CC90121737CB747 /* Parse.h */, + D236BD308CB967D7FED84A202A4B215B /* Parse.m */, + 97E6788E626A2016CCFF03F7381911B8 /* ParseInternal.h */, + E5BF16EBC1131EC1A8C8DF686217EDEF /* ParseManager.h */, + 11275EB0053B04F601BEF4D31A1367BE /* ParseManager.m */, + 9E9EF0B3D7C46C13AFB293451E7F566A /* ParseModule.h */, + 5CF5A1D517886292E9244E3BBBD29C2C /* ParseModule.m */, + C397337C5959FB9CDCAAD05A78CD13AD /* Parse_Private.h */, + FF992DD2FF3877B0B9C20ADC2EB62900 /* Resources */, + 522559B2E6892BF2C958FADD2A2E6B17 /* Support Files */, + ); + path = Parse; + sourceTree = ""; + }; + 7DB346D0F39D3F0E887471402A8071AB = { + isa = PBXGroup; + children = ( + BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */, + 24002A6670E6882ECD6250D3E60F9CB2 /* Frameworks */, + 4B657238145A298E2C2E0ED134EA9AA7 /* Pods */, + CCA510CFBEA2D207524CDA0D73C3B561 /* Products */, + D2411A5FE7F7A004607BED49990C37F4 /* Targets Support Files */, + ); + sourceTree = ""; + }; + 952EEBFAF8F7E620423C9F156F25A506 /* Pods */ = { + isa = PBXGroup; + children = ( + 15A529C27057E4A57D259CBC6E6CE49C /* Pods-acknowledgements.markdown */, + BF59BC15D23E1E1912C8F334E7236813 /* Pods-acknowledgements.plist */, + F0F73BA329E4FD6AA01176C7431EBFE4 /* Pods-dummy.m */, + 641AE05DD55E5E6AC1590CD7B4A18F97 /* Pods-resources.sh */, + D5E25950A895A52CC19D857BBECD78E4 /* Pods.debug.xcconfig */, + 385DD2E0B95AAE1DDB352C5E48139C02 /* Pods.release.xcconfig */, + ); + name = Pods; + path = "Target Support Files/Pods"; + sourceTree = ""; + }; + CCA510CFBEA2D207524CDA0D73C3B561 /* Products */ = { + isa = PBXGroup; + children = ( + 58C3D8E110425DA982C930E9EA797EDE /* libBolts.a */, + FFBAA18C7BBABC589780000C2DF75641 /* libParse.a */, + A1081E9BC218073917433A3F2697751B /* libPods.a */, + ); + name = Products; + sourceTree = ""; + }; + D2411A5FE7F7A004607BED49990C37F4 /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 952EEBFAF8F7E620423C9F156F25A506 /* Pods */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + F9400E82BDA8E39AA40BABDC6CB12014 /* iOS */ = { + isa = PBXGroup; + children = ( + 272027943ACA52CB75F07D7619CCC3BF /* AudioToolbox.framework */, + 44CF5AB5E34A9D3B7DBDB04076B71AA7 /* CFNetwork.framework */, + 4339829EF9FC5B8B3459DBD79F65C0D6 /* CoreGraphics.framework */, + 6F692090984F30582AD921FA0C5AF89E /* CoreLocation.framework */, + F2BBD5A5E42C1E632BCED63C083AEA52 /* Foundation.framework */, + 681A2BC7840EF1709F11E26C7EC3F202 /* QuartzCore.framework */, + 27841483445CA9ABFA8CCFB3D503D752 /* Security.framework */, + E5964B03763EB227A79722D086B07AEB /* StoreKit.framework */, + 883FBF6AC7D33CF1A604102A9D9779ED /* SystemConfiguration.framework */, + ); + name = iOS; + sourceTree = ""; + }; + FF992DD2FF3877B0B9C20ADC2EB62900 /* Resources */ = { + isa = PBXGroup; + children = ( + 59931B6E0E647D850B10744856083216 /* en.lproj */, + ); + name = Resources; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 2B038F585125AE318896EF308506E5D3 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 24328C4DD9FDF0DFFA52AE81C55021C4 /* BFCancellationToken.h in Headers */, + F13F4E6F88ED4165359AF317F66E33E1 /* BFCancellationTokenRegistration.h in Headers */, + 81FFB85F409642557D76727753156F5B /* BFCancellationTokenSource.h in Headers */, + C1035BE9B7CD66D132D57EC819BEF1A2 /* BFDefines.h in Headers */, + F184E6760F65F61A5F0732CFE59C2217 /* BFExecutor.h in Headers */, + FC440F2A2D5DA843204E46C17E101F89 /* BFTask.h in Headers */, + 91F3B9A8260A288980D16C63193281D7 /* BFTaskCompletionSource.h in Headers */, + CCAAFE317844FA11C6D10C4D45A3D3EA /* Bolts.h in Headers */, + F0EB7E98687B60B2E02E3ECA44E650E5 /* BoltsVersion.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + ED203B6C8F93F0B7DF8EAEF473632CEE /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + E9BF687CA4B676BF9C0CAF6BBCD7B1C6 /* BFTask+Private.h in Headers */, + 1F838712E1B014E1BCF6E765D1F23D5C /* PFACL.h in Headers */, + 08398E64503CF57CE56D990E05392449 /* PFACLPrivate.h in Headers */, + 1A1B4D722995A2B4458EFF67FBD775E4 /* PFACLState.h in Headers */, + 53AC014B0B2DB4874BB9F4076CC2E221 /* PFACLState_Private.h in Headers */, + 3CC530D484A2138C0D57D5BE9ED86E79 /* PFAlertView.h in Headers */, + 26069A470A7BBB3C28AA132D40A070D2 /* PFAnalytics.h in Headers */, + C3E601B9D58FDA8A74543A1F61A6A9C2 /* PFAnalyticsController.h in Headers */, + D653044CBFB6B5F7FFEFA8FB323DB9BB /* PFAnalyticsUtilities.h in Headers */, + 6BD97EEFCBD33367A998E6F61AE1B707 /* PFAnalytics_Private.h in Headers */, + A4477AAEC61E1731E8E2528161F6016A /* PFAnonymousAuthenticationProvider.h in Headers */, + 6B8C23AD6AB94D1A8D7A6FAD7CCCCBB8 /* PFAnonymousUtils.h in Headers */, + 13317E2C7CF2D0440D5D64361CEDBF6C /* PFAnonymousUtils_Private.h in Headers */, + 432FD95ABE2FC0D2990EDBC7BBD168FB /* PFApplication.h in Headers */, + 4BD387D16940CDE76B33FE40B7CB0FA0 /* PFAssert.h in Headers */, + D6AA4C7F8504A7E1044BC4BECDC527E7 /* PFAsyncTaskQueue.h in Headers */, + 55B57B48BA95F1DC9B74B1122CB59271 /* PFBase64Encoder.h in Headers */, + AB76D332CB4C250B0948C1742763F304 /* PFBaseState.h in Headers */, + 84933A33BD80139924D79100B6D929E2 /* PFCachedQueryController.h in Headers */, + FCD5921048744A9B9509182C12DC3B2E /* PFCategoryLoader.h in Headers */, + A1BB2E8C1D3FCCBA44DFE673B60922CD /* PFCloud.h in Headers */, + 102197CBD5C0D38173A6379F7BBC7A67 /* PFCloudCodeController.h in Headers */, + B4B7577A1C0206DEB36F683B3B17452C /* PFCommandCache.h in Headers */, + 6AB0108D6EA80E95D713B920B6CEB2F7 /* PFCommandCache_Private.h in Headers */, + F057CC11EE9249F520F2B4C7F60DD936 /* PFCommandResult.h in Headers */, + 8BBC96F61D6C0A337739C2510B316483 /* PFCommandRunning.h in Headers */, + 85F5FE2F8C6718597B6C4E94CCE0D7BB /* PFCommandRunningConstants.h in Headers */, + 2996CE38687B3C1F1695E1E2E914F45B /* PFCommandURLRequestConstructor.h in Headers */, + 69462A41EAA562C09D454343B0FF4765 /* PFConfig.h in Headers */, + BA0F98005F9DABD84663A387BEF9F176 /* PFConfigController.h in Headers */, + 16FA4C7C0D7D11EAFC06F70A3C3F01F9 /* PFConfig_Private.h in Headers */, + EDA20A21CCE9BA77B2FA0E5BDEFFC85C /* PFConstants.h in Headers */, + 5F96955752916BB5DD149D974B5D4C7D /* PFCoreDataProvider.h in Headers */, + 8177070BBD754F70104684D7C07BA968 /* PFCoreManager.h in Headers */, + 8C753DE7AD359D4E643A13D21F559A03 /* PFCurrentConfigController.h in Headers */, + AB40902E23A9720B910155E68C5D1A5D /* PFCurrentInstallationController.h in Headers */, + 06621C5B35D2D1E8F295BC88798706D0 /* PFCurrentObjectControlling.h in Headers */, + 6D229602DF6335C2652BB3D405F5E539 /* PFCurrentUserController.h in Headers */, + 748A1772685C32F725BA2600ADE97D45 /* PFDataProvider.h in Headers */, + 590D6E0012B4CB622BE58D14C1C26003 /* PFDateFormatter.h in Headers */, + 0C377C0B4DB31197B927E1FE0026A2D0 /* PFDecoder.h in Headers */, + 0AFACA416A2734131E89B51E7BF3EAB3 /* PFDefaultACLController.h in Headers */, + 18FD81A45D18127CF60987033C24C650 /* PFDevice.h in Headers */, + EB1A21CE8A9D7D202B2B2F268CE0BBD0 /* PFEncoder.h in Headers */, + 80E90793223CC8EF9FFCAE92FFEDFF5A /* PFErrorUtilities.h in Headers */, + 13007D2AE6F953592B6E205DDC593E3B /* PFEventuallyPin.h in Headers */, + B7B8B9FADA4A622D966203776628003D /* PFEventuallyQueue.h in Headers */, + 6D203549B94FB9135A773B35858B7543 /* PFEventuallyQueue_Private.h in Headers */, + 5AC6B8062154D77214390C4A4374A47F /* PFFieldOperation.h in Headers */, + BB42E917B4369EE6FC673DAF75718784 /* PFFieldOperationDecoder.h in Headers */, + CF8AA88826DDEA177B316087418EF4C1 /* PFFile.h in Headers */, + 16E72C605C22A982B542195139A79664 /* PFFileController.h in Headers */, + 05F0726A895F6B2D8AFEF330B4B269E8 /* PFFileDataStream.h in Headers */, + 24384C69CA18A097981135EFB1F8A9DE /* PFFileManager.h in Headers */, + 088089DEBB2C6EE1ACE7A8BB4ADBD01E /* PFFileStagingController.h in Headers */, + DC30BA853B6702BC2982611F14FE4B6F /* PFFileState.h in Headers */, + 4D76D8AAEA4BAEF75A282A76C9322CF1 /* PFFileState_Private.h in Headers */, + F3D2C0C8C3C2249EE1A03C9AF084946F /* PFFile_Private.h in Headers */, + BE6BE0E6CBF7800AD744FEAA941A3465 /* PFGeoPoint.h in Headers */, + CC94A8F427E66A8FA99D9055DA53B3EA /* PFGeoPointPrivate.h in Headers */, + 6790C6F9B9D786321E26B692638C7F53 /* PFHTTPRequest.h in Headers */, + BD57C1BBE4605BE1BAD1722EDD356DD3 /* PFHTTPURLRequestConstructor.h in Headers */, + BEF81BBCD4ED12BDE45EA7F15396016E /* PFHash.h in Headers */, + F347073B50A9BFFAB4F094C75C9FC502 /* PFInstallation.h in Headers */, + 0D2B53E00E0068673FAC00A181888232 /* PFInstallationConstants.h in Headers */, + C7F76403B814F07C1D00E11603582FED /* PFInstallationController.h in Headers */, + 9EFF52CB3098B8B01A216C3AC7AC7DB2 /* PFInstallationIdentifierStore.h in Headers */, + DDF9E75DC117BAC673631EC5DA70A175 /* PFInstallationIdentifierStore_Private.h in Headers */, + E73C2EF366DE82A709A6D65EEBE1328C /* PFInstallationPrivate.h in Headers */, + F5CC151EF0B90D7A2BA370DE2C79CC38 /* PFInternalUtils.h in Headers */, + 5162C4FCE1176E51B1558ADBE61934ED /* PFJSONSerialization.h in Headers */, + 610CCE14FB5BFC4F81E180BA33AF93AB /* PFKeyValueCache.h in Headers */, + 19340871351B6225FEA0D50D11B4620C /* PFKeyValueCache_Private.h in Headers */, + 70BBF7AAEFF4CFFCCDD1D3F5302DBCF8 /* PFKeychainStore.h in Headers */, + CA8CF4B0AC490B512098FDF3D38231C0 /* PFLocationManager.h in Headers */, + 425992FEAC0F409D88949DA2A3C2B86B /* PFLogger.h in Headers */, + 9D1D9ED97579645663CF95211A6FF5B6 /* PFLogging.h in Headers */, + B0246442FB3AD47E4FE651E20DFA0F12 /* PFMacros.h in Headers */, + FED49F2A0FC8765AB17492CD955D2A12 /* PFMultiProcessFileLock.h in Headers */, + 79EC922722642AB723AFCD1334D6FC8F /* PFMultiProcessFileLockController.h in Headers */, + D7AB950DD05ED85D2D62ACE84D6766BB /* PFMulticastDelegate.h in Headers */, + A0C41C9B793A9571B762B20575FABA97 /* PFMutableACLState.h in Headers */, + C7DFB1EFA8D89E8D20B388A49EDD0469 /* PFMutableFileState.h in Headers */, + 8446BA3BBA658BA82ED7F26D661D4064 /* PFMutableObjectState.h in Headers */, + 537897E0B38AAE556EE0ED7FB16C0A2E /* PFMutablePushState.h in Headers */, + EF3044F21842A80CD8FD8C0FD2957126 /* PFMutableQueryState.h in Headers */, + 67B758B645B23761F9E6B11E1A6835EF /* PFMutableRelationState.h in Headers */, + 0E9E38A997E9084D66EEC8AE54FEA540 /* PFMutableUserState.h in Headers */, + AB487ACB6998FC1A5C71E553A2DDD1D5 /* PFNetworkActivityIndicatorManager.h in Headers */, + 63C96A61BEA3EFA6C400D8C2849E87B9 /* PFNetworkCommand.h in Headers */, + 93F07AF465A16197BDD89A01907DAF26 /* PFNullability.h in Headers */, + E9EC843D6BF988766F5A9C48315B572A /* PFObject+Subclass.h in Headers */, + 4DBD9C3DAC7E9BAE6BCB77F49B96466E /* PFObject.h in Headers */, + D41850BD9C694569BC9A4A3DB7057035 /* PFObjectBatchController.h in Headers */, + B0ACEE94E47398A49E87F2862B25479A /* PFObjectConstants.h in Headers */, + D29355C584330A8CA82B54F7FC0AAA6D /* PFObjectController.h in Headers */, + DE985311ADE8FDE921FEB4AFB9A89A5C /* PFObjectController_Private.h in Headers */, + 9645F2C8D5B779635F7D999C448335D9 /* PFObjectControlling.h in Headers */, + E0384F193693CF247589281D002527EC /* PFObjectEstimatedData.h in Headers */, + A5065060A9FAB79E3458CB76F4B1F180 /* PFObjectFileCoder.h in Headers */, + 74F9B9EE544827019AEE581B37594468 /* PFObjectFileCodingLogic.h in Headers */, + 42096D610F30DDDB22DFD9A86C4FAA69 /* PFObjectFilePersistenceController.h in Headers */, + 839CECE9E0DF6BB8204EE4F8343213EA /* PFObjectLocalIdStore.h in Headers */, + 17DBCDA05E550DA75A0FB69CDA01C0F8 /* PFObjectPrivate.h in Headers */, + 46419B0E085E69C110E9F84F8CCFA001 /* PFObjectState.h in Headers */, + 126E7184E4905EDE5378F90427D6E7FD /* PFObjectState_Private.h in Headers */, + F5F2E1B52DF9F451F9947CF1B9A3369A /* PFObjectSubclassInfo.h in Headers */, + B8EE5009876838F73F966C879482E31E /* PFObjectSubclassingController.h in Headers */, + CEDBF7752568F29834130E179561EE36 /* PFObjectUtilities.h in Headers */, + 3B3E0E9E5467CED5674DAC7481FCE583 /* PFOfflineObjectController.h in Headers */, + F94D1E24CD4E2406DD6F9A7CE579CD49 /* PFOfflineQueryController.h in Headers */, + DBA40E524C6A1078E5E761DA1CF7E3F8 /* PFOfflineQueryLogic.h in Headers */, + 541F0862E0F66FD9FECCFA8AAD76B112 /* PFOfflineStore.h in Headers */, + 0CAD3D353992BC07FDA53F629A717372 /* PFOperationSet.h in Headers */, + 0CBD94653A4DD93270DEBB19B785AD2A /* PFPaymentTransactionObserver.h in Headers */, + 2FE5E3D8578C1A52CFEAB60226AD06E8 /* PFPaymentTransactionObserver_Private.h in Headers */, + C424C8C02491EE32FE76D0E4163B9BBB /* PFPin.h in Headers */, + 9E5114DC7AB77045B4AC2B1224CD4B84 /* PFPinningEventuallyQueue.h in Headers */, + B6E585E0327BC1EB0EC7C0D4803C1CB7 /* PFPinningObjectStore.h in Headers */, + 041C92E54A9D450BE74307E370BCA64A /* PFProduct+Private.h in Headers */, + 2660301297C2EED30B00FD417F807C9A /* PFProduct.h in Headers */, + 44AF64800D581887F39C40E88E391253 /* PFProductsRequestHandler.h in Headers */, + B7DFA8419CDB3F24CB17D7F079BDDDFF /* PFPropertyInfo.h in Headers */, + 1D3F3115940F9BB052E81C37EB59E2CD /* PFPropertyInfo_Private.h in Headers */, + D6662D0C2662EC0C464F1D964AF3C1DC /* PFPropertyInfo_Runtime.h in Headers */, + 76D8001BD5AB652902CA1FC0DB707D9C /* PFPurchase.h in Headers */, + 86DC83CE56B98DB504E82439521B16CD /* PFPurchaseController.h in Headers */, + C62A65AC30EF279D3F45C8BCFE29CBB7 /* PFPush.h in Headers */, + 318357AC7E8AC7D2B07F467B152F58A7 /* PFPushChannelsController.h in Headers */, + 0CF319A4825731DBE4F3A2162455DE71 /* PFPushController.h in Headers */, + 9093266F675B6073EA7E27CB8505C7A9 /* PFPushManager.h in Headers */, + 140FB704C9541A4CE92C46E8462E11DE /* PFPushPrivate.h in Headers */, + 4D0D958784EF1DA1869703056E662766 /* PFPushState.h in Headers */, + 5CABBA2AF2A8EB39119AD52080FAD3D9 /* PFPushState_Private.h in Headers */, + EF91ACE6A4CFF1DA4621FB864B05C627 /* PFPushUtilities.h in Headers */, + A6131891A9A0A9C9F694D2B047CD3FA0 /* PFQuery.h in Headers */, + E097C48262B95CD4859E7E97439EB0E2 /* PFQueryController.h in Headers */, + 17AF383C6FF5BB229F3C1ABB5466FE5C /* PFQueryPrivate.h in Headers */, + 50DCE2E9E236ABBDC809CA7464CB6A8A /* PFQueryState.h in Headers */, + 9F4B0D8ED2F69D51C5B934D536578CBA /* PFQueryState_Private.h in Headers */, + 7E6015115360369B63B1A16ADB721B9E /* PFQueryUtilities.h in Headers */, + 3FA490D070A74BE926B891C476B59967 /* PFRESTAnalyticsCommand.h in Headers */, + A368D821FA95C5524EDBED8BCB084CE0 /* PFRESTCloudCommand.h in Headers */, + 9E8416764D2372D8E2DA93D9ECC89410 /* PFRESTCommand.h in Headers */, + 8E1E26EAE490E452B6660B761FDC52ED /* PFRESTCommand_Private.h in Headers */, + 6EA9EAE04A65D98295CA36A7EE64F032 /* PFRESTConfigCommand.h in Headers */, + 04AA489AF75CF5DBF03E44F7650B5D1C /* PFRESTFileCommand.h in Headers */, + 92903FB655BADB2CA51988E598CDE90D /* PFRESTObjectBatchCommand.h in Headers */, + 344A94378384BEC85479E8A1073A2085 /* PFRESTObjectCommand.h in Headers */, + 5D2BFBD651780F482A3A6F62AA40812E /* PFRESTPushCommand.h in Headers */, + 740BEBCEE96550513F82009F6EC31FB2 /* PFRESTQueryCommand.h in Headers */, + 9D37DC879729E2F3E90B41F02A6B5424 /* PFRESTSessionCommand.h in Headers */, + 35BFF14A76CF6F25A95AD421B43D8863 /* PFRESTUserCommand.h in Headers */, + ABDD20576F8BEF189B0826937FBFC9BF /* PFReachability.h in Headers */, + 938B9E0D778946EB4A20DE22D925E0BA /* PFRelation.h in Headers */, + 5E03E457F64858FF919B5E2CB8DCC7EA /* PFRelationPrivate.h in Headers */, + C5C0E8C288C12762154DCC0F340146BE /* PFRelationState.h in Headers */, + E541D6BB943BF7613FB797ED4F7959A8 /* PFRelationState_Private.h in Headers */, + 3009E31927F1B45BCAC0F1C0C9EB6BD3 /* PFRole.h in Headers */, + 5BEA226EB7FA60D301D67500B4C43EB8 /* PFSQLiteDatabase.h in Headers */, + 210E594A5E64FBC160B3784AAE436D7E /* PFSQLiteDatabaseController.h in Headers */, + B19D62A8B55B539FC5B7B1D294EB91D0 /* PFSQLiteDatabaseResult.h in Headers */, + B4E9270B79198BACEECBC96F4D246292 /* PFSQLiteDatabase_Private.h in Headers */, + 9C50DCE43E19C07A531CAA9DAF92EC44 /* PFSQLiteStatement.h in Headers */, + BB506A2582FF02EF9A8878CED3067763 /* PFSession.h in Headers */, + 42D75578B2E43F1D8B8494305D0EDB9E /* PFSessionController.h in Headers */, + D2B62B011E42DBBBEB20DB5FA2BBC6CF /* PFSessionUtilities.h in Headers */, + FE046E97BCDE38C14F403CCDF301B12F /* PFSession_Private.h in Headers */, + 429DD447E17627BC672B4E0A4B98EE91 /* PFSubclassing.h in Headers */, + 9D104866E774B46DE983ECE270A0BACB /* PFTaskQueue.h in Headers */, + C72908FECB9E74136372BCA3AD9EE391 /* PFThreadsafety.h in Headers */, + 1F77AE633D24816C73EE99C6743EFD06 /* PFURLConstructor.h in Headers */, + 9D22D569F427BC219F2223C416FE17D9 /* PFURLSession.h in Headers */, + 1A049CCED7F4111A63D20FE2E55D1582 /* PFURLSessionCommandRunner.h in Headers */, + 0564194E3B97B21F1FCE32E8FBA39D99 /* PFURLSessionCommandRunner_Private.h in Headers */, + E9B4C4B574F58F61A14C2E6CDDC87FA9 /* PFURLSessionDataTaskDelegate.h in Headers */, + 38452D68029BDCCC144FB09DFF2D6163 /* PFURLSessionDataTaskDelegate_Private.h in Headers */, + 60A0AEA1B304E722C64C9CA9A54AB2BB /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, + 877092E1B6D3E8C3C5F389CEE0053BCC /* PFURLSessionJSONDataTaskDelegate.h in Headers */, + C4E268B9B9161164425357E786164D39 /* PFURLSessionUploadTaskDelegate.h in Headers */, + 8CF2F3C2B486F8EC6FE55E6A39462E4B /* PFURLSession_Private.h in Headers */, + 1A1E8B82688D176C875964C659D90CB1 /* PFUser.h in Headers */, + 1C07A61DDFBAF4EFD2F080F27B0780D6 /* PFUserAuthenticationController.h in Headers */, + 1905CE8117703296C87FBAA262C5CDC1 /* PFUserAuthenticationDelegate.h in Headers */, + 39CA9738B472EA7A479C17082AD8EE91 /* PFUserConstants.h in Headers */, + CADAF04325069E2ACD071E78464D5F01 /* PFUserController.h in Headers */, + 3182683990079B507F559DC296595B26 /* PFUserFileCodingLogic.h in Headers */, + BBE39348815CBF413FBEE01EA88DF139 /* PFUserPrivate.h in Headers */, + 4D9EA3669F6C10E1D70A06EA46CFF3DD /* PFUserState.h in Headers */, + BECA671768224F85FF36E96155A518AB /* PFUserState_Private.h in Headers */, + 90B7F7FD1811534484E2AF1BD75CD7CE /* PFWeakValue.h in Headers */, + 662C4CA41222FF80855AEAE39EBBCAC7 /* Parse.h in Headers */, + 30AE14165C4A728A3B8F7BDF887ECA3D /* ParseInternal.h in Headers */, + 7B95550B1E815BFCFE340A7F92CFA4EB /* ParseManager.h in Headers */, + 0679713BBD5676BA778F5284E47BC116 /* ParseModule.h in Headers */, + 300CF7EAA14707BA85CE473CD1F86EC2 /* Parse_Private.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 5D8129E3793C29AAEEF26CE316A9DDC0 /* Pods */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3853084F728ADFDA70933757DC5D4264 /* Build configuration list for PBXNativeTarget "Pods" */; + buildPhases = ( + EAC097187F04D113617E813C782E0137 /* Sources */, + BC4C40C28519D73FBDD81030214E0713 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 9BBEC04506A9D49A924F2CC384CF2574 /* PBXTargetDependency */, + 9A0617D3CF59620FEE731CA3D261D8F4 /* PBXTargetDependency */, + ); + name = Pods; + productName = Pods; + productReference = A1081E9BC218073917433A3F2697751B /* libPods.a */; + productType = "com.apple.product-type.library.static"; + }; + A3CBE48EB714CEAD058125E015A71ACC /* Bolts */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7A42B86C068DDDC1E02C2F87B7A8883D /* Build configuration list for PBXNativeTarget "Bolts" */; + buildPhases = ( + 56CA2F5EDB6BFEBC07073EB46D41B297 /* Sources */, + 942508E56C720429BC1DCEB09828834B /* Frameworks */, + 2B038F585125AE318896EF308506E5D3 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Bolts; + productName = Bolts; + productReference = 58C3D8E110425DA982C930E9EA797EDE /* libBolts.a */; + productType = "com.apple.product-type.library.static"; + }; + E09D69912D3DE5D63052370034A0DDDC /* Parse */ = { + isa = PBXNativeTarget; + buildConfigurationList = C67CD42F714A49E139F5EF87E19C2AD6 /* Build configuration list for PBXNativeTarget "Parse" */; + buildPhases = ( + D8D62ABEDD102FDBB16DAEBCBAD0AD74 /* Sources */, + 7D675EAC5362DC710F02FD75C202FC69 /* Frameworks */, + ED203B6C8F93F0B7DF8EAEF473632CEE /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + 5CCA733CC176F0BE5FB543967C119C6F /* PBXTargetDependency */, + ); + name = Parse; + productName = Parse; + productReference = FFBAA18C7BBABC589780000C2DF75641 /* libParse.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0700; + LastUpgradeCheck = 0700; + }; + buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 7DB346D0F39D3F0E887471402A8071AB; + productRefGroup = CCA510CFBEA2D207524CDA0D73C3B561 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + A3CBE48EB714CEAD058125E015A71ACC /* Bolts */, + E09D69912D3DE5D63052370034A0DDDC /* Parse */, + 5D8129E3793C29AAEEF26CE316A9DDC0 /* Pods */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 56CA2F5EDB6BFEBC07073EB46D41B297 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BB4D992680D6BB33E5C968E33F7E3DE4 /* BFCancellationToken.m in Sources */, + A939FB79FC0655BC78AF111F85092FFA /* BFCancellationTokenRegistration.m in Sources */, + 2C60229B7A7ABBA3B63AE0668E0121E4 /* BFCancellationTokenSource.m in Sources */, + B5175724B04DB9C34B2F3EF3A7A51038 /* BFExecutor.m in Sources */, + 94E4771CB1CC8B24BAAB0FEDC0E8B302 /* BFTask.m in Sources */, + D94A6B308D8C6D612A4AC46C06E39089 /* BFTaskCompletionSource.m in Sources */, + 95F347CD382221D4B61BC52B4D0ECD99 /* Bolts-dummy.m in Sources */, + EF7185106F1DA78162F656D8C8DA1B7A /* Bolts.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D8D62ABEDD102FDBB16DAEBCBAD0AD74 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6C1274F0B7A0DFA685607E820E1E00B8 /* BFTask+Private.m in Sources */, + A4699E368ED73135E902037AC6F5EC66 /* PFACL.m in Sources */, + 5E544AAE965652FE43607F5674E254CB /* PFACLState.m in Sources */, + 84856F9EB910696DDA839ABDE36CB590 /* PFAlertView.m in Sources */, + F84261406724B9DE27CCBFA304B8CF92 /* PFAnalytics.m in Sources */, + 8201F53E30AFF0BEBE04A01B7D1B022B /* PFAnalyticsController.m in Sources */, + 797F9DE6A96A3AA50F9F1905BEC4A423 /* PFAnalyticsUtilities.m in Sources */, + 868411E138047CFA6B4267A5DBF3025D /* PFAnonymousAuthenticationProvider.m in Sources */, + 605BCEBC0D9F528F51C31172502DB1FC /* PFAnonymousUtils.m in Sources */, + 9DEE6CB63547C18B4C3BE6E8F6789704 /* PFApplication.m in Sources */, + 85C00AEB98F752E4D8BB0569F8683105 /* PFAsyncTaskQueue.m in Sources */, + CF4A07928EA83BE04E74752404C0901B /* PFBase64Encoder.m in Sources */, + 757F100A35FB63BA1502DC805172F640 /* PFBaseState.m in Sources */, + 062775547F6065E5DDF2DB74C3AE9398 /* PFCachedQueryController.m in Sources */, + 00BBAAE70348655F087C8224D49C2CEE /* PFCategoryLoader.m in Sources */, + 26DEA46C479EE0A23E151385A330AC65 /* PFCloud.m in Sources */, + 393DA00CD04EFE510C10F3ACBF8F8ED6 /* PFCloudCodeController.m in Sources */, + 6B58F035A3956AFC685275E16748C528 /* PFCommandCache.m in Sources */, + 54F51EBF1E07D6541A40613CD20E132A /* PFCommandResult.m in Sources */, + A2E97F94192C6D49A7381186A58DEA71 /* PFCommandRunning.m in Sources */, + BBFD842A73C7E49063FED96A15941663 /* PFCommandRunningConstants.m in Sources */, + BB5E92B3C27899346D398F1ECC11B87D /* PFCommandURLRequestConstructor.m in Sources */, + 80927A64113E8537A162AC0A80D3C715 /* PFConfig.m in Sources */, + 733ED54DE313ABCD6329C5DA1FF971A3 /* PFConfigController.m in Sources */, + 9FF8F72E67A6BD77BD9C17C285E8B543 /* PFConstants.m in Sources */, + 9A329CA60FD01A9E79AD818D57C3E3C9 /* PFCoreManager.m in Sources */, + B9475D22177552BAEB62F160856477B8 /* PFCurrentConfigController.m in Sources */, + 658F01AC667CC6284A60A997263EF9F9 /* PFCurrentInstallationController.m in Sources */, + 2F3D46EE6FB1A34DF43A6F6F732A1960 /* PFCurrentUserController.m in Sources */, + 2B013529BE9CB2318F21BED38C17BDCF /* PFDateFormatter.m in Sources */, + DE95C6570B92EB4D071564C49B075A58 /* PFDecoder.m in Sources */, + 056A3EFE773E76873637A1F8700AC29C /* PFDefaultACLController.m in Sources */, + 31DDFDB3A975FB3247EE6194755F3BAD /* PFDevice.m in Sources */, + 0FE628F365C749D5976DFBAC5685E233 /* PFEncoder.m in Sources */, + 461897A21F97DAC9C115B89769E50E7E /* PFErrorUtilities.m in Sources */, + F111957FFF0FDC2AD0F4BCCE1BFEA4E8 /* PFEventuallyPin.m in Sources */, + 6137B532F11C53C32AB5B2BA890D9B77 /* PFEventuallyQueue.m in Sources */, + B551D2476C3AAD8B21C592D097C2292A /* PFFieldOperation.m in Sources */, + E696825C17F655DBE6CDCA4DB750A0C5 /* PFFieldOperationDecoder.m in Sources */, + A9290983F7521930A41832FF52CDB240 /* PFFile.m in Sources */, + F5BEC2186FCF846EC561939D9C1BD52F /* PFFileController.m in Sources */, + 646FA7A17A9454D7CE4582D8B417AED8 /* PFFileDataStream.m in Sources */, + C3834A5D49775B2837F1AEDC533AA3B0 /* PFFileManager.m in Sources */, + A19B0FD91C9C97E87E5B06DB621DF4FE /* PFFileStagingController.m in Sources */, + 17805260D4C57811CA869B547BBC7597 /* PFFileState.m in Sources */, + ABD52D6EB2913FF8BAC14E669ECF1F89 /* PFGeoPoint.m in Sources */, + 8F8455F10EEB3772AE588EA9E3A3F7AE /* PFHTTPURLRequestConstructor.m in Sources */, + 8984D28B38584E5C904E13A53F5855A7 /* PFHash.m in Sources */, + 0EFAD4E800EAB877281F5E75E06560CD /* PFInstallation.m in Sources */, + 7C5AF122E081CB9FC843FC60D91C6F94 /* PFInstallationConstants.m in Sources */, + B5B3760EB16FD470D5A422411C53EDB2 /* PFInstallationController.m in Sources */, + B40DCDEA8223768D03C17C146CA9D833 /* PFInstallationIdentifierStore.m in Sources */, + 26A02D6DD8C496618A71E7947D16C689 /* PFInternalUtils.m in Sources */, + 17715103907773502F61FE2CFFDCE8C2 /* PFJSONSerialization.m in Sources */, + 50D85E92F384E1967781514345A9604A /* PFKeyValueCache.m in Sources */, + 14E265D7887A59D74A47FF98562E3CBA /* PFKeychainStore.m in Sources */, + 87DB43D0F066BE9707FF38AEEEE7373D /* PFLocationManager.m in Sources */, + 232CF59D63E91DEE42D2CF6EEC1234AA /* PFLogger.m in Sources */, + A2E5498B4A910CDD676173C8F3798B39 /* PFMultiProcessFileLock.m in Sources */, + 4A8580CBD3EC7890B2BB820A585DE110 /* PFMultiProcessFileLockController.m in Sources */, + 8BB11F7A78DD3D2E36194C5BBB8B2A80 /* PFMulticastDelegate.m in Sources */, + FB6BCDEB8CB52625CB351ABCD809DE66 /* PFMutableACLState.m in Sources */, + 8F50489FB2E08C672EEE767BC05F818E /* PFMutableFileState.m in Sources */, + 682C53E0D6BB021E639D6F725EE9526A /* PFMutableObjectState.m in Sources */, + 1820EC35E058913A1A4EEEF6295F0EB4 /* PFMutablePushState.m in Sources */, + C9B15BA38AA3376525875D51D613A23F /* PFMutableQueryState.m in Sources */, + 5BB763978F4F6234E52A11E4C74E3BFB /* PFMutableRelationState.m in Sources */, + B6227EB171D030EE81F4D8D34D6C9439 /* PFMutableUserState.m in Sources */, + 90EAC88772A18DD0737B15E7CDB2AE66 /* PFNetworkActivityIndicatorManager.m in Sources */, + 83752150CB90EF43E3F8BE8AF9B919D1 /* PFObject.m in Sources */, + 80D966F69A8ABC2990F436A0B912F6DD /* PFObjectBatchController.m in Sources */, + A7126EF0D19F750C84DED66110D9E154 /* PFObjectConstants.m in Sources */, + E235199DDBB89E9541CDCB0F38C15E56 /* PFObjectController.m in Sources */, + AABDDA3F9EF9F5C4105849B0FA7D7B71 /* PFObjectEstimatedData.m in Sources */, + 72564F530CFAD381D8A7CFD1B1B47D14 /* PFObjectFileCoder.m in Sources */, + 972A00EFBCA4704A240530FE23B686E5 /* PFObjectFileCodingLogic.m in Sources */, + 295B3A4A7AE94C2C193FB8C1FDD97064 /* PFObjectFilePersistenceController.m in Sources */, + 8F4D11CE5DAF8E38B689D107E29D8558 /* PFObjectLocalIdStore.m in Sources */, + 8A962EB021D16BA9D5514AF20CD890BE /* PFObjectState.m in Sources */, + 24BCCAC7F5B550F77B83000CE3BE9294 /* PFObjectSubclassInfo.m in Sources */, + 692C55AEA4AAA1FE5B0C18929330B10D /* PFObjectSubclassingController.m in Sources */, + 86FC6A800E62791B570C07EDAD3F4000 /* PFObjectUtilities.m in Sources */, + BCF97E49683310C768AD0DB174D953A6 /* PFOfflineObjectController.m in Sources */, + BE2A298EEBFCB48E5ECAD768415B6F7B /* PFOfflineQueryController.m in Sources */, + 8919136675AD21F6E82FAFF82C3404B0 /* PFOfflineQueryLogic.m in Sources */, + 6C02A803570CB8B1883BEF1B95527EDC /* PFOfflineStore.m in Sources */, + C51B1034BD7B97F14B96174A22774353 /* PFOperationSet.m in Sources */, + 6C1004D0036BE3FD4D1ADA378E15E634 /* PFPaymentTransactionObserver.m in Sources */, + 5B901F4B0D476676820AA5F33D2CD516 /* PFPin.m in Sources */, + C462C51661AE5C5C699600115E6C3F7B /* PFPinningEventuallyQueue.m in Sources */, + B067DFF8D2A7CD44742F7AA7BFBE4DF5 /* PFPinningObjectStore.m in Sources */, + 853F3B799C49A88B08934FE9C4288F79 /* PFProduct.m in Sources */, + 4585A360814FA0879488B22436F9CA16 /* PFProductsRequestHandler.m in Sources */, + D5D35F7A6872F3CADB7CF4376955901B /* PFPropertyInfo.m in Sources */, + 4A4E9621F26A40396D4C3242080D9803 /* PFPropertyInfo_Runtime.m in Sources */, + 85BE00013EEAA089D5E198769CF5B7EF /* PFPurchase.m in Sources */, + 0CEEC78C1B5E4CD049664A581C8C874F /* PFPurchaseController.m in Sources */, + 8E72527532872043FC285D78C338ECD7 /* PFPush.m in Sources */, + 48F09476CAF8F148CF512A2D2682A596 /* PFPushChannelsController.m in Sources */, + 88617D3C42C91BF2F601AA3D1BD9E419 /* PFPushController.m in Sources */, + FFD37837303F10D59626447CA527DDC7 /* PFPushManager.m in Sources */, + EF687C393CB8A31B06A885E88BAFF74A /* PFPushState.m in Sources */, + F90710408C3BD5A0958AD6C0B779B8E6 /* PFPushUtilities.m in Sources */, + D6C69595A3E8D1C76302D93579BC2E1A /* PFQuery.m in Sources */, + 2E4FFE1F43D213B25AF30BAB74039B8A /* PFQueryController.m in Sources */, + 73B6479188603C72A53FB9FC421CA93F /* PFQueryState.m in Sources */, + E91D0BF506F05FC556E93269A6A62288 /* PFQueryUtilities.m in Sources */, + 066B02C56AFE460FE0DD07895E35A1C2 /* PFRESTAnalyticsCommand.m in Sources */, + E847CDDB808B57C6B1CB83DB1FF883F3 /* PFRESTCloudCommand.m in Sources */, + E15F9A1D17C7A7EDB1CA1019E2B9FC40 /* PFRESTCommand.m in Sources */, + BEBD3B38DAA52881F9B5BC24981B374A /* PFRESTConfigCommand.m in Sources */, + 5487F6ED1525917184D8704580A2F31F /* PFRESTFileCommand.m in Sources */, + C7D5C0CCE8FED60316E097119AB85B71 /* PFRESTObjectBatchCommand.m in Sources */, + DA1218D74E032808445B74A57F7046AF /* PFRESTObjectCommand.m in Sources */, + 56E6D6CE4ABEB58A8329737F0C5D4ED2 /* PFRESTPushCommand.m in Sources */, + C996FA0B2FD01FC4E184D94D099F80E4 /* PFRESTQueryCommand.m in Sources */, + 778CD1498542F92CB6123208989067DE /* PFRESTSessionCommand.m in Sources */, + B9B9AF304C0403A3BAAACD98C5E8AFC0 /* PFRESTUserCommand.m in Sources */, + D38ACD0F5A751B876F12D485CC1A60C3 /* PFReachability.m in Sources */, + 7EEB09BD8675386B32149D4825B60BF3 /* PFRelation.m in Sources */, + CC7E1C47F96A8CC0208D52813BCA5EFB /* PFRelationState.m in Sources */, + 3B89AB5631470E72F097A32531384ECB /* PFRole.m in Sources */, + 528CF23C0419AC21A17EC4CAD913EF63 /* PFSQLiteDatabase.m in Sources */, + 96C87B5E918E645F7D5A5D1E5FF9AB94 /* PFSQLiteDatabaseController.m in Sources */, + FBA47F7FD3DECFB1FAB1E0BF580D7E4F /* PFSQLiteDatabaseResult.m in Sources */, + F0072DAAA0B07AE29273FD1C342F4A5F /* PFSQLiteStatement.m in Sources */, + F2B43B2AA76C12DA90E65116C8FBC517 /* PFSession.m in Sources */, + AE97140D93D68F7179BC001727897BDF /* PFSessionController.m in Sources */, + 158DBF65062F50719446FBB5FE4CE6C7 /* PFSessionUtilities.m in Sources */, + 069B84DC158EFE142B00669BD377F176 /* PFTaskQueue.m in Sources */, + 4470541EACA382A9DEC7F752A7BDB999 /* PFThreadsafety.m in Sources */, + 62191196B306C291FCB4A144AF5F3651 /* PFURLConstructor.m in Sources */, + 1C5D31895EC2B8A0CDB19F60381E4C09 /* PFURLSession.m in Sources */, + 7F12D30EC7D5E4D745FFAED681153D16 /* PFURLSessionCommandRunner.m in Sources */, + 0A82F1C9FF3BF928D142AC862693E639 /* PFURLSessionDataTaskDelegate.m in Sources */, + 19553ACB32B73C7E82C7305C0B993F21 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */, + 08FCFC00D0259854FA9A7F407CC0D87D /* PFURLSessionJSONDataTaskDelegate.m in Sources */, + 65C20AD171485E53B52DB6DD49B0677C /* PFURLSessionUploadTaskDelegate.m in Sources */, + 27C1E412046564AD607892E33F6C5FDD /* PFUser.m in Sources */, + 96A1FACC2037256FAE41C1595CC5D5CB /* PFUserAuthenticationController.m in Sources */, + C8B565A5FAE25F356E3167DE8E552888 /* PFUserConstants.m in Sources */, + CDBC70BDA28EE44ACC5E185B96CD173E /* PFUserController.m in Sources */, + 470023A9785141D46651C887666B9173 /* PFUserFileCodingLogic.m in Sources */, + 135DE9CF756235E0E52861599AAEA09B /* PFUserState.m in Sources */, + B11EC1B10A6BFC5C0589BA1D520B731D /* PFWeakValue.m in Sources */, + BF790169F293998D1D7E9C5A4772286A /* Parse-dummy.m in Sources */, + A95C861682E0DF65260AD321E8EA8F50 /* Parse.m in Sources */, + D3E77F4136625007DED4F9DA91C4A6C6 /* ParseManager.m in Sources */, + 29486ED65C6DCE12A57B411EA98FF1B2 /* ParseModule.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EAC097187F04D113617E813C782E0137 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E0B0A3870E5B217EB20F7CC49F37561C /* Pods-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 5CCA733CC176F0BE5FB543967C119C6F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Bolts; + target = A3CBE48EB714CEAD058125E015A71ACC /* Bolts */; + targetProxy = 6AA41461EE8D58D339E66102A9A4877A /* PBXContainerItemProxy */; + }; + 9A0617D3CF59620FEE731CA3D261D8F4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Parse; + target = E09D69912D3DE5D63052370034A0DDDC /* Parse */; + targetProxy = 4896CFC37B685DBA38EF0D354BC28D0F /* PBXContainerItemProxy */; + }; + 9BBEC04506A9D49A924F2CC384CF2574 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Bolts; + target = A3CBE48EB714CEAD058125E015A71ACC /* Bolts */; + targetProxy = 3F90957483AE8162292532A1129FE0C4 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 38F7352F7BDFE263D4277A6E4C799686 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D5E25950A895A52CC19D857BBECD78E4 /* Pods.debug.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 5CE5176205D06FF3FFE3DDDA9291E44B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + ONLY_ACTIVE_ARCH = YES; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + 67312D78DA4070D74631CF1E37DE44BB /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 385DD2E0B95AAE1DDB352C5E48139C02 /* Pods.release.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 74857149DC1E0D599B8A01A78349A926 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = "RELEASE=1"; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 86B55C56F8C8C7089C0D0CC3FDF62772 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3E781400D2DB9020CCA193E74F459F26 /* Parse-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + ABE14FB6B4C0A63CECE3D5D678182387 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2613CC942BB5B821A1369B8E68019FDA /* Bolts-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + DE2E570838F39BB6CC125F4EA7A42CE2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2613CC942BB5B821A1369B8E68019FDA /* Bolts-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + F9DAAC470716FF670D71735FEB598947 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3E781400D2DB9020CCA193E74F459F26 /* Parse-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5CE5176205D06FF3FFE3DDDA9291E44B /* Debug */, + 74857149DC1E0D599B8A01A78349A926 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3853084F728ADFDA70933757DC5D4264 /* Build configuration list for PBXNativeTarget "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 38F7352F7BDFE263D4277A6E4C799686 /* Debug */, + 67312D78DA4070D74631CF1E37DE44BB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7A42B86C068DDDC1E02C2F87B7A8883D /* Build configuration list for PBXNativeTarget "Bolts" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + ABE14FB6B4C0A63CECE3D5D678182387 /* Debug */, + DE2E570838F39BB6CC125F4EA7A42CE2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C67CD42F714A49E139F5EF87E19C2AD6 /* Build configuration list for PBXNativeTarget "Parse" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F9DAAC470716FF670D71735FEB598947 /* Debug */, + 86B55C56F8C8C7089C0D0CC3FDF62772 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; +} diff --git a/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig b/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig new file mode 100644 index 0000000..d7e29c7 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig @@ -0,0 +1,5 @@ +#include "Bolts.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Bolts" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/Parse" +PODS_ROOT = ${SRCROOT} +SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Bolts/Bolts-dummy.m b/BreakingBad/Pods/Target Support Files/Bolts/Bolts-dummy.m new file mode 100644 index 0000000..aeabf61 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/Bolts/Bolts-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Bolts : NSObject +@end +@implementation PodsDummy_Bolts +@end diff --git a/BreakingBad/Pods/Target Support Files/Bolts/Bolts-prefix.pch b/BreakingBad/Pods/Target Support Files/Bolts/Bolts-prefix.pch new file mode 100644 index 0000000..aa992a4 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/Bolts/Bolts-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/BreakingBad/Pods/Target Support Files/Bolts/Bolts.xcconfig b/BreakingBad/Pods/Target Support Files/Bolts/Bolts.xcconfig new file mode 100644 index 0000000..e69de29 diff --git a/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig b/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig new file mode 100644 index 0000000..bcc0a17 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig @@ -0,0 +1,6 @@ +#include "Parse.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Parse" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/Parse" +OTHER_LDFLAGS = ${PARSE_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} +SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Parse/Parse-dummy.m b/BreakingBad/Pods/Target Support Files/Parse/Parse-dummy.m new file mode 100644 index 0000000..3f17a64 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/Parse/Parse-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Parse : NSObject +@end +@implementation PodsDummy_Parse +@end diff --git a/BreakingBad/Pods/Target Support Files/Parse/Parse-prefix.pch b/BreakingBad/Pods/Target Support Files/Parse/Parse-prefix.pch new file mode 100644 index 0000000..aa992a4 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/Parse/Parse-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/BreakingBad/Pods/Target Support Files/Parse/Parse.xcconfig b/BreakingBad/Pods/Target Support Files/Parse/Parse.xcconfig new file mode 100644 index 0000000..4b7b805 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/Parse/Parse.xcconfig @@ -0,0 +1 @@ +PARSE_OTHER_LDFLAGS = -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -weak_framework "Accounts" -weak_framework "Social" \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown new file mode 100644 index 0000000..f99c4d1 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown @@ -0,0 +1,40 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## Bolts + +BSD License + +For Bolts software + +Copyright (c) 2013-present, Facebook, Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name Facebook nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +## Parse + +See https://www.parse.com/about/terms +Generated by CocoaPods - http://cocoapods.org diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist new file mode 100644 index 0000000..b0bde37 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist @@ -0,0 +1,74 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + BSD License + +For Bolts software + +Copyright (c) 2013-present, Facebook, Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name Facebook nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + Title + Bolts + Type + PSGroupSpecifier + + + FooterText + See https://www.parse.com/about/terms + Title + Parse + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - http://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods-dummy.m b/BreakingBad/Pods/Target Support Files/Pods/Pods-dummy.m new file mode 100644 index 0000000..ade64bd --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods : NSObject +@end +@implementation PodsDummy_Pods +@end diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods-resources.sh b/BreakingBad/Pods/Target Support Files/Pods/Pods-resources.sh new file mode 100755 index 0000000..a0fbc2e --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods-resources.sh @@ -0,0 +1,101 @@ +#!/bin/sh +set -e + +mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +realpath() { + DIRECTORY="$(cd "${1%/*}" && pwd)" + FILENAME="${1##*/}" + echo "$DIRECTORY/$FILENAME" +} + +install_resource() +{ + case $1 in + *.storyboard) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" + ;; + *.xib) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" + ;; + *.framework) + echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" + xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" + xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm\"" + xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE=$(realpath "${PODS_ROOT}/$1") + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + /*) + echo "$1" + echo "$1" >> "$RESOURCES_TO_COPY" + ;; + *) + echo "${PODS_ROOT}/$1" + echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" + ;; + esac +} +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_resource "Parse/Parse/Resources/en.lproj" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_resource "Parse/Parse/Resources/en.lproj" +fi + +mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +then + case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; + esac + + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "`realpath $PODS_ROOT`*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig b/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig new file mode 100644 index 0000000..387e02c --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig @@ -0,0 +1,5 @@ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/Parse" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/Parse" +OTHER_LDFLAGS = $(inherited) -ObjC -l"Bolts" -l"Parse" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -weak_framework "Accounts" -weak_framework "Social" +PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig b/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig new file mode 100644 index 0000000..387e02c --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig @@ -0,0 +1,5 @@ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/Parse" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/Parse" +OTHER_LDFLAGS = $(inherited) -ObjC -l"Bolts" -l"Parse" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -weak_framework "Accounts" -weak_framework "Social" +PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file From 351fc42a1152012e884d6c89b9fc90b44e1773fc Mon Sep 17 00:00:00 2001 From: Zoufishan Mehdi Date: Sun, 11 Oct 2015 22:15:08 -0400 Subject: [PATCH 04/44] animation added --- .../BreakingBad.xcodeproj/project.pbxproj | 32 + .../BreakingBad/Base.lproj/Main.storyboard | 34 +- .../BreakingBad/CustomModalViewController.h | 13 + .../BreakingBad/CustomModalViewController.m | 18 + .../CustomVCTransitionViewController.h | 13 + .../CustomVCTransitionViewController.m | 42 + .../DismissingAnimationController.h | 15 + .../DismissingAnimationController.m | 40 + .../PresentingAnimationController.h | 15 + .../PresentingAnimationController.m | 51 + BreakingBad/Podfile | 2 + BreakingBad/Podfile.lock | 3 + BreakingBad/Pods/Manifest.lock | 3 + .../Pods/Pods.xcodeproj/project.pbxproj | 3583 +++++++++-------- .../Bolts/Bolts-Private.xcconfig | 2 +- .../Parse/Parse-Private.xcconfig | 2 +- .../Pods/Pods-acknowledgements.markdown | 34 + .../Pods/Pods-acknowledgements.plist | 38 + .../Pods/Pods.debug.xcconfig | 8 +- .../Pods/Pods.release.xcconfig | 8 +- 20 files changed, 2313 insertions(+), 1643 deletions(-) create mode 100644 BreakingBad/BreakingBad/CustomModalViewController.h create mode 100644 BreakingBad/BreakingBad/CustomModalViewController.m create mode 100644 BreakingBad/BreakingBad/CustomVCTransitionViewController.h create mode 100644 BreakingBad/BreakingBad/CustomVCTransitionViewController.m create mode 100644 BreakingBad/BreakingBad/DismissingAnimationController.h create mode 100644 BreakingBad/BreakingBad/DismissingAnimationController.m create mode 100644 BreakingBad/BreakingBad/PresentingAnimationController.h create mode 100644 BreakingBad/BreakingBad/PresentingAnimationController.m diff --git a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj index 5e56e76..9c6ff21 100644 --- a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj +++ b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj @@ -15,6 +15,10 @@ 5F8FF9A51BC9A9CD00855DFB /* BreakingBad.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 5F8FF9A31BC9A9CD00855DFB /* BreakingBad.xcdatamodeld */; }; 5F8FF9A71BC9A9CD00855DFB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5F8FF9A61BC9A9CD00855DFB /* Assets.xcassets */; }; 5F8FF9AA1BC9A9CD00855DFB /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5F8FF9A81BC9A9CD00855DFB /* LaunchScreen.storyboard */; }; + 5FEAE2611BCB053F00201A0E /* CustomVCTransitionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE2601BCB053F00201A0E /* CustomVCTransitionViewController.m */; }; + 5FEAE2641BCB055A00201A0E /* CustomModalViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE2631BCB055A00201A0E /* CustomModalViewController.m */; }; + 5FEAE26E1BCB125A00201A0E /* PresentingAnimationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE26D1BCB125A00201A0E /* PresentingAnimationController.m */; }; + 5FEAE2711BCB126700201A0E /* DismissingAnimationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE2701BCB126700201A0E /* DismissingAnimationController.m */; }; DC2DC1881BCAC00500A627E2 /* Habit.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC1871BCAC00500A627E2 /* Habit.m */; settings = {ASSET_TAGS = (); }; }; DC2DC18B1BCAC08700A627E2 /* Goal.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC18A1BCAC08700A627E2 /* Goal.m */; settings = {ASSET_TAGS = (); }; }; DC2DC18E1BCAC0A700A627E2 /* Entry.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC18D1BCAC0A700A627E2 /* Entry.m */; settings = {ASSET_TAGS = (); }; }; @@ -36,6 +40,14 @@ 5F8FF9A61BC9A9CD00855DFB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 5F8FF9A91BC9A9CD00855DFB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 5F8FF9AB1BC9A9CD00855DFB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 5FEAE25F1BCB053F00201A0E /* CustomVCTransitionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomVCTransitionViewController.h; sourceTree = ""; }; + 5FEAE2601BCB053F00201A0E /* CustomVCTransitionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomVCTransitionViewController.m; sourceTree = ""; }; + 5FEAE2621BCB055A00201A0E /* CustomModalViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomModalViewController.h; sourceTree = ""; }; + 5FEAE2631BCB055A00201A0E /* CustomModalViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomModalViewController.m; sourceTree = ""; }; + 5FEAE26C1BCB125100201A0E /* PresentingAnimationController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PresentingAnimationController.h; sourceTree = ""; }; + 5FEAE26D1BCB125A00201A0E /* PresentingAnimationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PresentingAnimationController.m; sourceTree = ""; }; + 5FEAE26F1BCB126200201A0E /* DismissingAnimationController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DismissingAnimationController.h; sourceTree = ""; }; + 5FEAE2701BCB126700201A0E /* DismissingAnimationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DismissingAnimationController.m; sourceTree = ""; }; B57E170B6FA09C54334C0536 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; DC2DC1861BCAC00500A627E2 /* Habit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Habit.h; sourceTree = ""; }; DC2DC1871BCAC00500A627E2 /* Habit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Habit.m; sourceTree = ""; }; @@ -94,6 +106,7 @@ DC2DC18D1BCAC0A700A627E2 /* Entry.m */, DC2DC18F1BCAE7E600A627E2 /* Step.h */, DC2DC1901BCAE7E600A627E2 /* Step.m */, + 5FEAE26B1BCB0D7C00201A0E /* PopAnimation */, 5F8FF99D1BC9A9CD00855DFB /* ViewController.h */, 5F8FF99E1BC9A9CD00855DFB /* ViewController.m */, 5F8FF9A01BC9A9CD00855DFB /* Main.storyboard */, @@ -114,6 +127,21 @@ name = "Supporting Files"; sourceTree = ""; }; + 5FEAE26B1BCB0D7C00201A0E /* PopAnimation */ = { + isa = PBXGroup; + children = ( + 5FEAE25F1BCB053F00201A0E /* CustomVCTransitionViewController.h */, + 5FEAE2601BCB053F00201A0E /* CustomVCTransitionViewController.m */, + 5FEAE2621BCB055A00201A0E /* CustomModalViewController.h */, + 5FEAE2631BCB055A00201A0E /* CustomModalViewController.m */, + 5FEAE26C1BCB125100201A0E /* PresentingAnimationController.h */, + 5FEAE26D1BCB125A00201A0E /* PresentingAnimationController.m */, + 5FEAE2701BCB126700201A0E /* DismissingAnimationController.m */, + 5FEAE26F1BCB126200201A0E /* DismissingAnimationController.h */, + ); + name = PopAnimation; + sourceTree = ""; + }; 63F0AFE9BD856CE062BFF317 /* Pods */ = { isa = PBXGroup; children = ( @@ -237,12 +265,16 @@ buildActionMask = 2147483647; files = ( DC2DC1881BCAC00500A627E2 /* Habit.m in Sources */, + 5FEAE2611BCB053F00201A0E /* CustomVCTransitionViewController.m in Sources */, DC2DC1911BCAE7E600A627E2 /* Step.m in Sources */, + 5FEAE2641BCB055A00201A0E /* CustomModalViewController.m in Sources */, DC2DC18B1BCAC08700A627E2 /* Goal.m in Sources */, + 5FEAE26E1BCB125A00201A0E /* PresentingAnimationController.m in Sources */, 5F8FF99F1BC9A9CD00855DFB /* ViewController.m in Sources */, DC2DC18E1BCAC0A700A627E2 /* Entry.m in Sources */, 5F8FF99C1BC9A9CD00855DFB /* AppDelegate.m in Sources */, 5F8FF9A51BC9A9CD00855DFB /* BreakingBad.xcdatamodeld in Sources */, + 5FEAE2711BCB126700201A0E /* DismissingAnimationController.m in Sources */, DC2DC1941BCAEB8D00A627E2 /* BBUser.m in Sources */, 5F8FF9991BC9A9CD00855DFB /* main.m in Sources */, ); diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index 0a58aa2..ecccf3d 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -1,7 +1,7 @@ - + - + @@ -26,7 +26,7 @@ - + @@ -192,10 +192,10 @@ - + - + @@ -209,6 +209,9 @@ + + + @@ -222,10 +225,10 @@ - + - + @@ -233,13 +236,28 @@ + + + + + + + - + diff --git a/BreakingBad/BreakingBad/CustomModalViewController.h b/BreakingBad/BreakingBad/CustomModalViewController.h new file mode 100644 index 0000000..9c2c28a --- /dev/null +++ b/BreakingBad/BreakingBad/CustomModalViewController.h @@ -0,0 +1,13 @@ +// +// CustomModalViewController.h +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/11/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import + +@interface CustomModalViewController : UIViewController + +@end diff --git a/BreakingBad/BreakingBad/CustomModalViewController.m b/BreakingBad/BreakingBad/CustomModalViewController.m new file mode 100644 index 0000000..a83561a --- /dev/null +++ b/BreakingBad/BreakingBad/CustomModalViewController.m @@ -0,0 +1,18 @@ +// +// CustomModalViewController.m +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/11/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "CustomModalViewController.h" + +@implementation CustomModalViewController + +- (IBAction)didClickClose:(id)sender { + + [self dismissViewControllerAnimated:YES completion:nil]; +} + +@end diff --git a/BreakingBad/BreakingBad/CustomVCTransitionViewController.h b/BreakingBad/BreakingBad/CustomVCTransitionViewController.h new file mode 100644 index 0000000..97f81a2 --- /dev/null +++ b/BreakingBad/BreakingBad/CustomVCTransitionViewController.h @@ -0,0 +1,13 @@ +// +// CustomVCTransitionViewController.h +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/11/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import + +@interface CustomVCTransitionViewController : UIViewController + +@end diff --git a/BreakingBad/BreakingBad/CustomVCTransitionViewController.m b/BreakingBad/BreakingBad/CustomVCTransitionViewController.m new file mode 100644 index 0000000..d8ba6c2 --- /dev/null +++ b/BreakingBad/BreakingBad/CustomVCTransitionViewController.m @@ -0,0 +1,42 @@ +// +// CustomVCTransitionViewController.m +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/11/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "CustomVCTransitionViewController.h" +#import "CustomModalViewController.h" +#import "PresentingAnimationController.h" +#import "DismissingAnimationController.h" +#import + +@implementation CustomVCTransitionViewController + +- (IBAction)didClickEnter:(id)sender { + CustomModalViewController *modalVC = [self.storyboard instantiateViewControllerWithIdentifier:@"customModal"]; + + + modalVC.transitioningDelegate = self; + + modalVC.modalPresentationStyle = UIModalPresentationCustom; + + [self presentViewController:modalVC animated:YES completion:nil]; +} + + + +#pragma mark - UIViewControllerTransitionDelegate - + +- (id )animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source +{ + return [[PresentingAnimationController alloc] init]; +} + +- (id )animationControllerForDismissedController:(UIViewController *)dismissed +{ + return [[DismissingAnimationController alloc] init]; +} + +@end diff --git a/BreakingBad/BreakingBad/DismissingAnimationController.h b/BreakingBad/BreakingBad/DismissingAnimationController.h new file mode 100644 index 0000000..7de2b14 --- /dev/null +++ b/BreakingBad/BreakingBad/DismissingAnimationController.h @@ -0,0 +1,15 @@ +// +// DismissingAnimationController.h +// POPDemo +// +// Created by Simon Ng on 22/12/14. +// Copyright (c) 2014 AppCoda. All rights reserved. +// + +#import +#import +#import + +@interface DismissingAnimationController : NSObject + +@end diff --git a/BreakingBad/BreakingBad/DismissingAnimationController.m b/BreakingBad/BreakingBad/DismissingAnimationController.m new file mode 100644 index 0000000..1c3e90d --- /dev/null +++ b/BreakingBad/BreakingBad/DismissingAnimationController.m @@ -0,0 +1,40 @@ +// +// DismissingAnimationController.m +// POPDemo +// +// Created by Simon Ng on 22/12/14. +// Copyright (c) 2014 AppCoda. All rights reserved. +// + +#import "DismissingAnimationController.h" + +@implementation DismissingAnimationController + +- (NSTimeInterval)transitionDuration:(id )transitionContext { + return 0.5f; +} + +- (void)animateTransition:(id )transitionContext{ + + UIView *toView = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey].view; + toView.tintAdjustmentMode = UIViewTintAdjustmentModeNormal; + toView.userInteractionEnabled = YES; + + UIView *fromView = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey].view; + + + POPBasicAnimation *closeAnimation = [POPBasicAnimation animationWithPropertyNamed:kPOPLayerPositionY]; + closeAnimation.toValue = @(-fromView.layer.position.y); + [closeAnimation setCompletionBlock:^(POPAnimation *anim, BOOL finished) { + [transitionContext completeTransition:YES]; + }]; + + POPSpringAnimation *scaleDownAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY]; + scaleDownAnimation.springBounciness = 20; + scaleDownAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(0, 0)]; + + [fromView.layer pop_addAnimation:closeAnimation forKey:@"closeAnimation"]; + [fromView.layer pop_addAnimation:scaleDownAnimation forKey:@"scaleDown"]; + +} +@end diff --git a/BreakingBad/BreakingBad/PresentingAnimationController.h b/BreakingBad/BreakingBad/PresentingAnimationController.h new file mode 100644 index 0000000..101698e --- /dev/null +++ b/BreakingBad/BreakingBad/PresentingAnimationController.h @@ -0,0 +1,15 @@ +// +// PresentingAnimationController.h +// POPDemo +// +// Created by Simon Ng on 22/12/14. +// Copyright (c) 2014 AppCoda. All rights reserved. +// + +#import +#import +#import "POP.h" + +@interface PresentingAnimationController : NSObject + +@end diff --git a/BreakingBad/BreakingBad/PresentingAnimationController.m b/BreakingBad/BreakingBad/PresentingAnimationController.m new file mode 100644 index 0000000..793a37d --- /dev/null +++ b/BreakingBad/BreakingBad/PresentingAnimationController.m @@ -0,0 +1,51 @@ +// +// PresentingAnimationController.m +// POPDemo +// +// Created by Simon Ng on 22/12/14. +// Copyright (c) 2014 AppCoda. All rights reserved. +// + +#import "PresentingAnimationController.h" + +@implementation PresentingAnimationController + + +- (NSTimeInterval)transitionDuration:(id )transitionContext { + return 0.5f; +} + +- (void)animateTransition:(id )transitionContext { + + UIView *fromView = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey].view; + fromView.tintAdjustmentMode = UIViewTintAdjustmentModeDimmed; + fromView.userInteractionEnabled = NO; + + UIView *toView = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey].view; + toView.frame = CGRectMake(0, + 0, + CGRectGetWidth(transitionContext.containerView.bounds) - 100.f, + CGRectGetHeight(transitionContext.containerView.bounds) - 280.f); + CGPoint p = CGPointMake(transitionContext.containerView.center.x, -transitionContext.containerView.center.y); + toView.center = p; + + [transitionContext.containerView addSubview:toView]; + + POPSpringAnimation *positionAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerPositionY]; + positionAnimation.toValue = @(transitionContext.containerView.center.y); + positionAnimation.springBounciness = 10; + [positionAnimation setCompletionBlock:^(POPAnimation *anim, BOOL finished) { + [transitionContext completeTransition:YES]; + }]; + + POPSpringAnimation *scaleAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY]; + scaleAnimation.springBounciness = 20; + scaleAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(1.2, 1.4)]; + + [toView.layer pop_addAnimation:positionAnimation forKey:@"positionAnimation"]; + [toView.layer pop_addAnimation:scaleAnimation forKey:@"scaleAnimation"]; + + +} + +@end diff --git a/BreakingBad/Podfile b/BreakingBad/Podfile index 418a13c..1d351c3 100644 --- a/BreakingBad/Podfile +++ b/BreakingBad/Podfile @@ -1 +1,3 @@ +pod ‘pop’, ‘~> 1.0’ + pod 'Parse' \ No newline at end of file diff --git a/BreakingBad/Podfile.lock b/BreakingBad/Podfile.lock index adc9262..e523c5a 100644 --- a/BreakingBad/Podfile.lock +++ b/BreakingBad/Podfile.lock @@ -2,12 +2,15 @@ PODS: - Bolts/Tasks (1.3.0) - Parse (1.9.0): - Bolts/Tasks (>= 1.3.0) + - pop (1.0.8) DEPENDENCIES: - Parse + - pop (~> 1.0) SPEC CHECKSUMS: Bolts: 805a4a87413e49d4a0c2b7d469084cbc46b09342 Parse: 712efbc476d4f47b0f96b70db7e53101575753aa + pop: bb773ae2c791ca2629de13b347e7a8b450fa6a57 COCOAPODS: 0.38.2 diff --git a/BreakingBad/Pods/Manifest.lock b/BreakingBad/Pods/Manifest.lock index adc9262..e523c5a 100644 --- a/BreakingBad/Pods/Manifest.lock +++ b/BreakingBad/Pods/Manifest.lock @@ -2,12 +2,15 @@ PODS: - Bolts/Tasks (1.3.0) - Parse (1.9.0): - Bolts/Tasks (>= 1.3.0) + - pop (1.0.8) DEPENDENCIES: - Parse + - pop (~> 1.0) SPEC CHECKSUMS: Bolts: 805a4a87413e49d4a0c2b7d469084cbc46b09342 Parse: 712efbc476d4f47b0f96b70db7e53101575753aa + pop: bb773ae2c791ca2629de13b347e7a8b450fa6a57 COCOAPODS: 0.38.2 diff --git a/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj b/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj index 6a0d3e9..ca00440 100644 --- a/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj +++ b/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj @@ -7,1257 +7,1419 @@ objects = { /* Begin PBXBuildFile section */ - 00BBAAE70348655F087C8224D49C2CEE /* PFCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = FD0DC15BB1F34596371C48A1D117C62F /* PFCategoryLoader.m */; }; - 041C92E54A9D450BE74307E370BCA64A /* PFProduct+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A2A025CBCE13AF790C21EB33F3FDD8A /* PFProduct+Private.h */; }; - 04AA489AF75CF5DBF03E44F7650B5D1C /* PFRESTFileCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = BD53148FD3F25A5417B79C08A7EF6137 /* PFRESTFileCommand.h */; }; - 0564194E3B97B21F1FCE32E8FBA39D99 /* PFURLSessionCommandRunner_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B25F8AA5E0ACA8EF99E4B7A34CA08791 /* PFURLSessionCommandRunner_Private.h */; }; - 056A3EFE773E76873637A1F8700AC29C /* PFDefaultACLController.m in Sources */ = {isa = PBXBuildFile; fileRef = 333F24639C80887F8DA6A64132D3ACAD /* PFDefaultACLController.m */; }; - 05F0726A895F6B2D8AFEF330B4B269E8 /* PFFileDataStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 62B360F076B3422F6B95643A41DC7D58 /* PFFileDataStream.h */; }; - 062775547F6065E5DDF2DB74C3AE9398 /* PFCachedQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E1ABB16A7E7BC8AF7D9E1FE23ABE0E2 /* PFCachedQueryController.m */; }; - 06621C5B35D2D1E8F295BC88798706D0 /* PFCurrentObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B8FF73618A90330150849A195BFC2C /* PFCurrentObjectControlling.h */; }; - 066B02C56AFE460FE0DD07895E35A1C2 /* PFRESTAnalyticsCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F34B890143B7FF3F7E15109C866C70F /* PFRESTAnalyticsCommand.m */; }; - 0679713BBD5676BA778F5284E47BC116 /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E9EF0B3D7C46C13AFB293451E7F566A /* ParseModule.h */; }; - 069B84DC158EFE142B00669BD377F176 /* PFTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 65A6FE58C9C2C7E84B044607B8A5890A /* PFTaskQueue.m */; }; - 08398E64503CF57CE56D990E05392449 /* PFACLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1048C89864CA1BAAC39909E7EAF64FF7 /* PFACLPrivate.h */; }; - 088089DEBB2C6EE1ACE7A8BB4ADBD01E /* PFFileStagingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7301204FAFBEAE4CD3C43B6DAC1858 /* PFFileStagingController.h */; }; - 08FCFC00D0259854FA9A7F407CC0D87D /* PFURLSessionJSONDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 02237672394DCB6999F68D60FB362A3E /* PFURLSessionJSONDataTaskDelegate.m */; }; - 0A82F1C9FF3BF928D142AC862693E639 /* PFURLSessionDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F2F47F077C809F803E3BA42EAF9CC7 /* PFURLSessionDataTaskDelegate.m */; }; - 0AFACA416A2734131E89B51E7BF3EAB3 /* PFDefaultACLController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8824A59A418BB304F2D1B9623F26AE12 /* PFDefaultACLController.h */; }; - 0C377C0B4DB31197B927E1FE0026A2D0 /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = ED66C38BB696C6EBD5F689444DE5698B /* PFDecoder.h */; }; - 0CAD3D353992BC07FDA53F629A717372 /* PFOperationSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 374CEE0448D7C92E9F6B2F5B9987BBFA /* PFOperationSet.h */; }; - 0CBD94653A4DD93270DEBB19B785AD2A /* PFPaymentTransactionObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 87355840B3797E204A33EF21DD786865 /* PFPaymentTransactionObserver.h */; }; - 0CEEC78C1B5E4CD049664A581C8C874F /* PFPurchaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = D4D44451B9EF1D2AABB3727B5BE49E3A /* PFPurchaseController.m */; }; - 0CF319A4825731DBE4F3A2162455DE71 /* PFPushController.h in Headers */ = {isa = PBXBuildFile; fileRef = 208CE00C994794CE9B26AC6698B8198D /* PFPushController.h */; }; - 0D2B53E00E0068673FAC00A181888232 /* PFInstallationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = AB9B2C34BBD8FBC05AEB06BCA0F9C9CF /* PFInstallationConstants.h */; }; - 0E9E38A997E9084D66EEC8AE54FEA540 /* PFMutableUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 267DC6F7D82298ABF3C18C327FEDF275 /* PFMutableUserState.h */; }; - 0EFAD4E800EAB877281F5E75E06560CD /* PFInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EC3943147EE9557BE2120CF2329E38E /* PFInstallation.m */; }; - 0FE628F365C749D5976DFBAC5685E233 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = AE6FD11DD7C073D83C79EDA40A4CBE4C /* PFEncoder.m */; }; - 102197CBD5C0D38173A6379F7BBC7A67 /* PFCloudCodeController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2791960015A0E379245E5A0882B9DDCE /* PFCloudCodeController.h */; }; - 126E7184E4905EDE5378F90427D6E7FD /* PFObjectState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A180E3CC6A83C085262778CAE43767A /* PFObjectState_Private.h */; }; - 13007D2AE6F953592B6E205DDC593E3B /* PFEventuallyPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C189C08BBFF35A029515798AD989F10 /* PFEventuallyPin.h */; }; - 132B0FFAA237FFBC7BF8CEAE8B9B390D /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 883FBF6AC7D33CF1A604102A9D9779ED /* SystemConfiguration.framework */; }; - 13317E2C7CF2D0440D5D64361CEDBF6C /* PFAnonymousUtils_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CB0D33609AC2DEE7BF62A26950D3C062 /* PFAnonymousUtils_Private.h */; }; - 135DE9CF756235E0E52861599AAEA09B /* PFUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = ADAA3EE17CA0B38B1E402F112E0339B9 /* PFUserState.m */; }; - 140FB704C9541A4CE92C46E8462E11DE /* PFPushPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E1532E528C597C81417C9A6C2A3ECA1 /* PFPushPrivate.h */; }; - 14E265D7887A59D74A47FF98562E3CBA /* PFKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D9AD68ED9EE4D4DA10299E21D0CF8248 /* PFKeychainStore.m */; }; - 158DBF65062F50719446FBB5FE4CE6C7 /* PFSessionUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = DE0701939C6512E62807F0DEAC0B88C4 /* PFSessionUtilities.m */; }; - 16E72C605C22A982B542195139A79664 /* PFFileController.h in Headers */ = {isa = PBXBuildFile; fileRef = B8702C4718ECDE4EC13CAB9FEBD20A78 /* PFFileController.h */; }; - 16FA4C7C0D7D11EAFC06F70A3C3F01F9 /* PFConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C438131B9FF8C57DBDE42A1886182C1F /* PFConfig_Private.h */; }; - 17715103907773502F61FE2CFFDCE8C2 /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = BCF7D81BB8B3017FFCA5BFA657475191 /* PFJSONSerialization.m */; }; - 17805260D4C57811CA869B547BBC7597 /* PFFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D19D8F4E00BF286006CD6D68E92C105 /* PFFileState.m */; }; - 17AF383C6FF5BB229F3C1ABB5466FE5C /* PFQueryPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C31BD302E3DED84EC1289B2E8C260F4 /* PFQueryPrivate.h */; }; - 17DBCDA05E550DA75A0FB69CDA01C0F8 /* PFObjectPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 3140F8B22C96FA60AD48F660BFF7FCD2 /* PFObjectPrivate.h */; }; - 1820EC35E058913A1A4EEEF6295F0EB4 /* PFMutablePushState.m in Sources */ = {isa = PBXBuildFile; fileRef = B9559972A6331681B0BFCE99D4830D0C /* PFMutablePushState.m */; }; - 18FD81A45D18127CF60987033C24C650 /* PFDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 70327113CA3A1A88572E8F96D12041F4 /* PFDevice.h */; }; - 1905CE8117703296C87FBAA262C5CDC1 /* PFUserAuthenticationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 29E8D38657DDEFCFA5A73CAF48D523A7 /* PFUserAuthenticationDelegate.h */; }; - 19340871351B6225FEA0D50D11B4620C /* PFKeyValueCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 52763EB85FB6F54982F9F986750D041D /* PFKeyValueCache_Private.h */; }; - 19553ACB32B73C7E82C7305C0B993F21 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F5760F0DA7B30409A71D6E956AE9172B /* PFURLSessionFileDownloadTaskDelegate.m */; }; - 1A049CCED7F4111A63D20FE2E55D1582 /* PFURLSessionCommandRunner.h in Headers */ = {isa = PBXBuildFile; fileRef = BF85BDBB00B0B90C79842355DCCE5702 /* PFURLSessionCommandRunner.h */; }; - 1A1B4D722995A2B4458EFF67FBD775E4 /* PFACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = C8673179A0982B40E80A428E4FB775FE /* PFACLState.h */; }; - 1A1E8B82688D176C875964C659D90CB1 /* PFUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 14E52D110E94F845EFA54F1D5B716ADF /* PFUser.h */; }; - 1C07A61DDFBAF4EFD2F080F27B0780D6 /* PFUserAuthenticationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 10BF5DBDEACF811090B330EB5B9574DC /* PFUserAuthenticationController.h */; }; - 1C5D31895EC2B8A0CDB19F60381E4C09 /* PFURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = C2DE5E9C06AC71245804541B12D5F7B8 /* PFURLSession.m */; }; - 1D3F3115940F9BB052E81C37EB59E2CD /* PFPropertyInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 09FEBAB0B414EEEC06B7B89FD63280F5 /* PFPropertyInfo_Private.h */; }; - 1F77AE633D24816C73EE99C6743EFD06 /* PFURLConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 89095502D7357690CC6FC98B5D64DB76 /* PFURLConstructor.h */; }; - 1F838712E1B014E1BCF6E765D1F23D5C /* PFACL.h in Headers */ = {isa = PBXBuildFile; fileRef = 9423B92363C6078122A8D176B24507E2 /* PFACL.h */; }; - 200CBE166D201B143AF627A475AAC1FB /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44CF5AB5E34A9D3B7DBDB04076B71AA7 /* CFNetwork.framework */; }; - 210E594A5E64FBC160B3784AAE436D7E /* PFSQLiteDatabaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = B90CFF6D8D057714B5CB05B1EF6832E7 /* PFSQLiteDatabaseController.h */; }; - 232CF59D63E91DEE42D2CF6EEC1234AA /* PFLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 47F13D5EB10A23DB6E0A7FABF2E8CDBD /* PFLogger.m */; }; - 24328C4DD9FDF0DFFA52AE81C55021C4 /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EA388C394C5D9D428DB4F0C14EF97F7 /* BFCancellationToken.h */; }; - 24384C69CA18A097981135EFB1F8A9DE /* PFFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D3E8D70C7E8EB33159CDDA0AC7B6C9DC /* PFFileManager.h */; }; - 24BCCAC7F5B550F77B83000CE3BE9294 /* PFObjectSubclassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 03A98730119221482A511C33FBD4CBF9 /* PFObjectSubclassInfo.m */; }; - 26069A470A7BBB3C28AA132D40A070D2 /* PFAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 56DD772CBED2910C5B2E94ADABDD79F2 /* PFAnalytics.h */; }; - 2660301297C2EED30B00FD417F807C9A /* PFProduct.h in Headers */ = {isa = PBXBuildFile; fileRef = BE9304218DB27984F98075C9997693A9 /* PFProduct.h */; }; - 26A02D6DD8C496618A71E7947D16C689 /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = A0D7B54A478A38CB2BC90CD24EAB27B6 /* PFInternalUtils.m */; }; - 26DEA46C479EE0A23E151385A330AC65 /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FCB9CF92D4B7B99AABCC3E9837A6C8C /* PFCloud.m */; }; - 27C1E412046564AD607892E33F6C5FDD /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 78005460CA734997653B091EDC6EFBDF /* PFUser.m */; }; - 29486ED65C6DCE12A57B411EA98FF1B2 /* ParseModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CF5A1D517886292E9244E3BBBD29C2C /* ParseModule.m */; }; - 295B3A4A7AE94C2C193FB8C1FDD97064 /* PFObjectFilePersistenceController.m in Sources */ = {isa = PBXBuildFile; fileRef = ACB6900468A2F6CE7B3A606F3CA5F322 /* PFObjectFilePersistenceController.m */; }; - 2996CE38687B3C1F1695E1E2E914F45B /* PFCommandURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = CA8004D86110E800F8B66A6C52331804 /* PFCommandURLRequestConstructor.h */; }; - 2B013529BE9CB2318F21BED38C17BDCF /* PFDateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 23305A980DB3E4AED2259A74C9187B50 /* PFDateFormatter.m */; }; - 2C60229B7A7ABBA3B63AE0668E0121E4 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = A2E9FF3525464F62315EA0C2C8DBF089 /* BFCancellationTokenSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 2E4FFE1F43D213B25AF30BAB74039B8A /* PFQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = A963DD1D7B9750E8E9A817472714C113 /* PFQueryController.m */; }; - 2F3D46EE6FB1A34DF43A6F6F732A1960 /* PFCurrentUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = A46B35BACD7F1073E12FCEDE85E4B67C /* PFCurrentUserController.m */; }; - 2FE5E3D8578C1A52CFEAB60226AD06E8 /* PFPaymentTransactionObserver_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AF69A58E6F7EA86A79ACA49E961650A /* PFPaymentTransactionObserver_Private.h */; }; - 3009E31927F1B45BCAC0F1C0C9EB6BD3 /* PFRole.h in Headers */ = {isa = PBXBuildFile; fileRef = F482627CD4A818F68CA6022A4023CD7A /* PFRole.h */; }; - 300CF7EAA14707BA85CE473CD1F86EC2 /* Parse_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C397337C5959FB9CDCAAD05A78CD13AD /* Parse_Private.h */; }; - 30AE14165C4A728A3B8F7BDF887ECA3D /* ParseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 97E6788E626A2016CCFF03F7381911B8 /* ParseInternal.h */; }; - 3182683990079B507F559DC296595B26 /* PFUserFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A5E945E1EC907178171BF58D1F60131 /* PFUserFileCodingLogic.h */; }; - 318357AC7E8AC7D2B07F467B152F58A7 /* PFPushChannelsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A83EDAC97C7A74FA2625134D35D4560 /* PFPushChannelsController.h */; }; - 31DDFDB3A975FB3247EE6194755F3BAD /* PFDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = DC833CC54CC9FF49BF622887A836F451 /* PFDevice.m */; }; - 344A94378384BEC85479E8A1073A2085 /* PFRESTObjectCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 0539CEFD73A9E47FC3CF538787C89A88 /* PFRESTObjectCommand.h */; }; - 35BFF14A76CF6F25A95AD421B43D8863 /* PFRESTUserCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D8A0D5C7E7AAA06AD1719AF2C60C130 /* PFRESTUserCommand.h */; }; - 38452D68029BDCCC144FB09DFF2D6163 /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AF59E6E45FB90176198F0361D0B0430 /* PFURLSessionDataTaskDelegate_Private.h */; }; - 393DA00CD04EFE510C10F3ACBF8F8ED6 /* PFCloudCodeController.m in Sources */ = {isa = PBXBuildFile; fileRef = D83B31511109921F7A0625DCDA97EBD2 /* PFCloudCodeController.m */; }; - 39CA9738B472EA7A479C17082AD8EE91 /* PFUserConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A2DE58DBDFB1D72AF24F80D783EAE28 /* PFUserConstants.h */; }; - 3B3E0E9E5467CED5674DAC7481FCE583 /* PFOfflineObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CD9E69666E0F4D54D0539786BD3CBF7 /* PFOfflineObjectController.h */; }; - 3B89AB5631470E72F097A32531384ECB /* PFRole.m in Sources */ = {isa = PBXBuildFile; fileRef = 032A4A6705724272DE8FD9BC94C95C33 /* PFRole.m */; }; - 3CC530D484A2138C0D57D5BE9ED86E79 /* PFAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BB18584CF736AD36BCE6DE812088676 /* PFAlertView.h */; }; - 3DB8A0F752DA80375EADCCEE442C2446 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 272027943ACA52CB75F07D7619CCC3BF /* AudioToolbox.framework */; }; - 3FA490D070A74BE926B891C476B59967 /* PFRESTAnalyticsCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 5894A228B6F31F871749F0BC8C57560B /* PFRESTAnalyticsCommand.h */; }; - 407007B859EBDD5E2639CE8894D6801A /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 681A2BC7840EF1709F11E26C7EC3F202 /* QuartzCore.framework */; }; - 42096D610F30DDDB22DFD9A86C4FAA69 /* PFObjectFilePersistenceController.h in Headers */ = {isa = PBXBuildFile; fileRef = 860D0B9D3698F147687E070AD019DD1E /* PFObjectFilePersistenceController.h */; }; - 425992FEAC0F409D88949DA2A3C2B86B /* PFLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = B53A1E293DB4591CB07EB02181C2B192 /* PFLogger.h */; }; - 429DD447E17627BC672B4E0A4B98EE91 /* PFSubclassing.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D07888730F9C387835661F6975CE0CE /* PFSubclassing.h */; }; - 42D75578B2E43F1D8B8494305D0EDB9E /* PFSessionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2AE28A9117ECBD3FEA8A80E3592B9E /* PFSessionController.h */; }; - 432FD95ABE2FC0D2990EDBC7BBD168FB /* PFApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = E24E0BB42A1D0F93BEE886509C659AB6 /* PFApplication.h */; }; - 4470541EACA382A9DEC7F752A7BDB999 /* PFThreadsafety.m in Sources */ = {isa = PBXBuildFile; fileRef = 72AA7C1713DE26F7C83BC1BE68649977 /* PFThreadsafety.m */; }; - 44AF64800D581887F39C40E88E391253 /* PFProductsRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EE5B04D8D051799BEED324B493485A4 /* PFProductsRequestHandler.h */; }; - 4585A360814FA0879488B22436F9CA16 /* PFProductsRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E60CD03AB5997917F89A62109F51C1F /* PFProductsRequestHandler.m */; }; - 461897A21F97DAC9C115B89769E50E7E /* PFErrorUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 02841C3BEB92D4DAC26220C5C7CE9740 /* PFErrorUtilities.m */; }; - 46419B0E085E69C110E9F84F8CCFA001 /* PFObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = DC63634BA83D3D3CBCBA2E87AB311573 /* PFObjectState.h */; }; - 470023A9785141D46651C887666B9173 /* PFUserFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 43AED0C36A33D48DB75041D300713664 /* PFUserFileCodingLogic.m */; }; - 48F09476CAF8F148CF512A2D2682A596 /* PFPushChannelsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CDD3144250DCECB39F57A04B6C9A3F0 /* PFPushChannelsController.m */; }; - 4A4E9621F26A40396D4C3242080D9803 /* PFPropertyInfo_Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = E3F8B8B2001C10329EB9605C32C29711 /* PFPropertyInfo_Runtime.m */; }; - 4A8580CBD3EC7890B2BB820A585DE110 /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5983FC4B63B585E8A136F4AC664EEF0C /* PFMultiProcessFileLockController.m */; }; - 4BD387D16940CDE76B33FE40B7CB0FA0 /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 16936467CF16DCC6960896B5471D7C27 /* PFAssert.h */; }; - 4D0D958784EF1DA1869703056E662766 /* PFPushState.h in Headers */ = {isa = PBXBuildFile; fileRef = ABC73F2E99BCC42C0125231EAF7EDB15 /* PFPushState.h */; }; - 4D76D8AAEA4BAEF75A282A76C9322CF1 /* PFFileState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ADC119E201491E5146837A1ECDD27F1 /* PFFileState_Private.h */; }; - 4D9EA3669F6C10E1D70A06EA46CFF3DD /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = BB328A47E71DF5C9ED039046F3CF4E10 /* PFUserState.h */; }; - 4DBD9C3DAC7E9BAE6BCB77F49B96466E /* PFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 308E43BD885210D04C25609F7FFE572D /* PFObject.h */; }; - 50D85E92F384E1967781514345A9604A /* PFKeyValueCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A59FF425B4E22F00D5B693BF199C21E /* PFKeyValueCache.m */; }; - 50DCE2E9E236ABBDC809CA7464CB6A8A /* PFQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = C9CBCE0E34FCE6BCB16E3402C6CF887E /* PFQueryState.h */; }; - 5162C4FCE1176E51B1558ADBE61934ED /* PFJSONSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CEB98AB34541B47F2042CC509B89CD4 /* PFJSONSerialization.h */; }; - 528CF23C0419AC21A17EC4CAD913EF63 /* PFSQLiteDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D3318F94B3CCDF4EC509F49C45A27FC /* PFSQLiteDatabase.m */; }; - 537897E0B38AAE556EE0ED7FB16C0A2E /* PFMutablePushState.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FAE5FB0E717E5E066DB0DD19ED0679F /* PFMutablePushState.h */; }; - 53AC014B0B2DB4874BB9F4076CC2E221 /* PFACLState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1906D27D412A515912345F6C5D1138B3 /* PFACLState_Private.h */; }; - 541F0862E0F66FD9FECCFA8AAD76B112 /* PFOfflineStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B9972BBC14ADBA4A17A6CC1801DB183 /* PFOfflineStore.h */; }; - 5487F6ED1525917184D8704580A2F31F /* PFRESTFileCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 717C08EFA64F3FF8CD1383B57F8FFC0B /* PFRESTFileCommand.m */; }; - 54F51EBF1E07D6541A40613CD20E132A /* PFCommandResult.m in Sources */ = {isa = PBXBuildFile; fileRef = E6C1A7933C5A11D332D285F4E14D704B /* PFCommandResult.m */; }; - 55B57B48BA95F1DC9B74B1122CB59271 /* PFBase64Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F989773F048C2B6AA76E2F33AB85191 /* PFBase64Encoder.h */; }; - 56E6D6CE4ABEB58A8329737F0C5D4ED2 /* PFRESTPushCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = BB3CC31AB928B710A068EFE34F219D54 /* PFRESTPushCommand.m */; }; - 590D6E0012B4CB622BE58D14C1C26003 /* PFDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D4AD2E6C937B36339C0F9AFF8817BC6 /* PFDateFormatter.h */; }; - 5AC6B8062154D77214390C4A4374A47F /* PFFieldOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 03A69FDE3FBBA48FAFAB93667FC64A05 /* PFFieldOperation.h */; }; - 5B901F4B0D476676820AA5F33D2CD516 /* PFPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 6776A4FE81BCDB08946667E7FAF1A6C0 /* PFPin.m */; }; - 5BB763978F4F6234E52A11E4C74E3BFB /* PFMutableRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = A3ED374B51D528F113CC177E773492C6 /* PFMutableRelationState.m */; }; - 5BEA226EB7FA60D301D67500B4C43EB8 /* PFSQLiteDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F114EC7295D2D778ADAD06DAECFFDF6 /* PFSQLiteDatabase.h */; }; - 5CABBA2AF2A8EB39119AD52080FAD3D9 /* PFPushState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C4FC14EB432E641BAA43CE3A6CA50340 /* PFPushState_Private.h */; }; - 5D2BFBD651780F482A3A6F62AA40812E /* PFRESTPushCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C3A2002500C346E302092A2088A57A7 /* PFRESTPushCommand.h */; }; - 5E03E457F64858FF919B5E2CB8DCC7EA /* PFRelationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 159CCE347EF8F7907332612BF120B860 /* PFRelationPrivate.h */; }; - 5E544AAE965652FE43607F5674E254CB /* PFACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = B6230E95CC1C91D65E987B6F92071EE0 /* PFACLState.m */; }; - 5F96955752916BB5DD149D974B5D4C7D /* PFCoreDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DDA31CB23D7EDC55E267E8867ECC976 /* PFCoreDataProvider.h */; }; - 605BCEBC0D9F528F51C31172502DB1FC /* PFAnonymousUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = E0E0B5753859D0D0960D4F376D21CFBA /* PFAnonymousUtils.m */; }; - 60A0AEA1B304E722C64C9CA9A54AB2BB /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 047743A34224268FD55BB1875D8232CA /* PFURLSessionFileDownloadTaskDelegate.h */; }; - 610CCE14FB5BFC4F81E180BA33AF93AB /* PFKeyValueCache.h in Headers */ = {isa = PBXBuildFile; fileRef = AFCE9242FBE9C6F5B79A769A629C60CF /* PFKeyValueCache.h */; }; - 6137B532F11C53C32AB5B2BA890D9B77 /* PFEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = BAB69D923C8169E049A0B1F446DE3C22 /* PFEventuallyQueue.m */; }; - 62191196B306C291FCB4A144AF5F3651 /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = E1F0715F4D0AC569F9A80C8EE87A7678 /* PFURLConstructor.m */; }; - 63C96A61BEA3EFA6C400D8C2849E87B9 /* PFNetworkCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 72A213523367D0C4F848FD1542D0E1BB /* PFNetworkCommand.h */; }; - 646FA7A17A9454D7CE4582D8B417AED8 /* PFFileDataStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 76F588CFEC125CE47A5E75C49BC6E111 /* PFFileDataStream.m */; }; - 658F01AC667CC6284A60A997263EF9F9 /* PFCurrentInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C7D5E9E9338447002877586E4B453BC /* PFCurrentInstallationController.m */; }; - 65C20AD171485E53B52DB6DD49B0677C /* PFURLSessionUploadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C509F37C4504D78F4E60A46E053B08 /* PFURLSessionUploadTaskDelegate.m */; }; - 662C4CA41222FF80855AEAE39EBBCAC7 /* Parse.h in Headers */ = {isa = PBXBuildFile; fileRef = 08ED2E2E627F66EA8CC90121737CB747 /* Parse.h */; }; - 6790C6F9B9D786321E26B692638C7F53 /* PFHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 41EC4873567E5199115062D666B66648 /* PFHTTPRequest.h */; }; - 67B758B645B23761F9E6B11E1A6835EF /* PFMutableRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = F264AB25D4F485FB43C3C052444E57A8 /* PFMutableRelationState.h */; }; - 682C53E0D6BB021E639D6F725EE9526A /* PFMutableObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 905F084EAA67E29023FC7262EFF7C7FC /* PFMutableObjectState.m */; }; - 692C55AEA4AAA1FE5B0C18929330B10D /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 834AE8A8AE6F7F19DBF7A13695DA1EE9 /* PFObjectSubclassingController.m */; }; - 69462A41EAA562C09D454343B0FF4765 /* PFConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 5292287F5D3AE4EF5E74D76C6FDB81A2 /* PFConfig.h */; }; - 6AB0108D6EA80E95D713B920B6CEB2F7 /* PFCommandCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 27A3A55D0FC90475F63A86D2640BF7E4 /* PFCommandCache_Private.h */; }; - 6B58F035A3956AFC685275E16748C528 /* PFCommandCache.m in Sources */ = {isa = PBXBuildFile; fileRef = FCE8643D2CF10C59D3B13EED199470C3 /* PFCommandCache.m */; }; - 6B8C23AD6AB94D1A8D7A6FAD7CCCCBB8 /* PFAnonymousUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 32E9622FB277F31FF0ACE70A0E8C1B44 /* PFAnonymousUtils.h */; }; - 6BD97EEFCBD33367A998E6F61AE1B707 /* PFAnalytics_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C5E2765A6C6141C912C8C89927E5E59E /* PFAnalytics_Private.h */; }; - 6C02A803570CB8B1883BEF1B95527EDC /* PFOfflineStore.m in Sources */ = {isa = PBXBuildFile; fileRef = C6F8830B4BAD707ED99EB6DA023C7803 /* PFOfflineStore.m */; }; - 6C1004D0036BE3FD4D1ADA378E15E634 /* PFPaymentTransactionObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = C72B7C59C5C07C9D6873A101E4CD589F /* PFPaymentTransactionObserver.m */; }; - 6C1274F0B7A0DFA685607E820E1E00B8 /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 29F955AA1404AAE96344AAE5FB9ACCCE /* BFTask+Private.m */; }; - 6D203549B94FB9135A773B35858B7543 /* PFEventuallyQueue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A3BD59B59438D47928EBE062F284A88 /* PFEventuallyQueue_Private.h */; }; - 6D229602DF6335C2652BB3D405F5E539 /* PFCurrentUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C2FB0BE9C76624C1E01BB37C1DF3416 /* PFCurrentUserController.h */; }; - 6EA9EAE04A65D98295CA36A7EE64F032 /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AF5DF0C66469EF5555738D6E5627354 /* PFRESTConfigCommand.h */; }; - 70BBF7AAEFF4CFFCCDD1D3F5302DBCF8 /* PFKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 40F5313A31663C9C8E3E94C0B4789071 /* PFKeychainStore.h */; }; - 72564F530CFAD381D8A7CFD1B1B47D14 /* PFObjectFileCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2706634FB1F4B0C9210247AA1B420D73 /* PFObjectFileCoder.m */; }; - 733ED54DE313ABCD6329C5DA1FF971A3 /* PFConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = FA4D77F479BDDB7FCC802644C7B895D0 /* PFConfigController.m */; }; - 73B6479188603C72A53FB9FC421CA93F /* PFQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = C86658E5106D83528921871195EA7A25 /* PFQueryState.m */; }; - 740BEBCEE96550513F82009F6EC31FB2 /* PFRESTQueryCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = F4EBCD611EB0EB86EAF46AB78D6C9C9D /* PFRESTQueryCommand.h */; }; - 748A1772685C32F725BA2600ADE97D45 /* PFDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = BC4062E6A12C7F83FFAFD42283212C9A /* PFDataProvider.h */; }; - 74F9B9EE544827019AEE581B37594468 /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C6B7B3F0FCE545B7D965DEDF8ED4613 /* PFObjectFileCodingLogic.h */; }; - 757F100A35FB63BA1502DC805172F640 /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = EE062DC0F3E041826FDC9B1920238531 /* PFBaseState.m */; }; - 76D8001BD5AB652902CA1FC0DB707D9C /* PFPurchase.h in Headers */ = {isa = PBXBuildFile; fileRef = DCFD84DA41F7C585D9DC6E2088D8F8D3 /* PFPurchase.h */; }; - 778CD1498542F92CB6123208989067DE /* PFRESTSessionCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 81B7B344C875A3AB97E6C33C60A5F9BF /* PFRESTSessionCommand.m */; }; - 797F9DE6A96A3AA50F9F1905BEC4A423 /* PFAnalyticsUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 87310202CC115E0D59A56B46CE72FBD3 /* PFAnalyticsUtilities.m */; }; - 79EC922722642AB723AFCD1334D6FC8F /* PFMultiProcessFileLockController.h in Headers */ = {isa = PBXBuildFile; fileRef = D6A004354398DC71910DFA5EFAE2EE34 /* PFMultiProcessFileLockController.h */; }; - 7B95550B1E815BFCFE340A7F92CFA4EB /* ParseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E5BF16EBC1131EC1A8C8DF686217EDEF /* ParseManager.h */; }; - 7C5AF122E081CB9FC843FC60D91C6F94 /* PFInstallationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 025EFE1DD58EFDD344107DFA9F4AD477 /* PFInstallationConstants.m */; }; - 7E6015115360369B63B1A16ADB721B9E /* PFQueryUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 961B5EB24B86AAC41ED236D838A64A5C /* PFQueryUtilities.h */; }; - 7E990026C996B851DD9B64AC33E6E1E0 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F692090984F30582AD921FA0C5AF89E /* CoreLocation.framework */; }; - 7EEB09BD8675386B32149D4825B60BF3 /* PFRelation.m in Sources */ = {isa = PBXBuildFile; fileRef = CF97B19442AC920A6CD420C61B604C5A /* PFRelation.m */; }; - 7F12D30EC7D5E4D745FFAED681153D16 /* PFURLSessionCommandRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = 16E653F2F3740605E3A7745107A7C5DF /* PFURLSessionCommandRunner.m */; }; - 80927A64113E8537A162AC0A80D3C715 /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 4709648C670A81EACDB1DA9F808189F5 /* PFConfig.m */; }; - 80D966F69A8ABC2990F436A0B912F6DD /* PFObjectBatchController.m in Sources */ = {isa = PBXBuildFile; fileRef = E48021241236BB075308D3A946E88952 /* PFObjectBatchController.m */; }; - 80E90793223CC8EF9FFCAE92FFEDFF5A /* PFErrorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = EF3CEDC763708425D34FDAF2CD1194C5 /* PFErrorUtilities.h */; }; - 8177070BBD754F70104684D7C07BA968 /* PFCoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = ED136241C039AEF003B23EE29588B7DF /* PFCoreManager.h */; }; - 81FFB85F409642557D76727753156F5B /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 7046AB20AC12CE0D708ECF95F2C079BF /* BFCancellationTokenSource.h */; }; - 8201F53E30AFF0BEBE04A01B7D1B022B /* PFAnalyticsController.m in Sources */ = {isa = PBXBuildFile; fileRef = E7BE7DB2043BFD734996BA10DACD88D1 /* PFAnalyticsController.m */; }; - 83752150CB90EF43E3F8BE8AF9B919D1 /* PFObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BA78E8ED3B478FCE98D4154F24101BB /* PFObject.m */; }; - 839CECE9E0DF6BB8204EE4F8343213EA /* PFObjectLocalIdStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 362FACECEF69703BFA9C57ED74660D97 /* PFObjectLocalIdStore.h */; }; - 8446BA3BBA658BA82ED7F26D661D4064 /* PFMutableObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = 76730C16E6204729829FF1031310068D /* PFMutableObjectState.h */; }; - 84856F9EB910696DDA839ABDE36CB590 /* PFAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = B828EE160146AC71D96D74359D0B87D9 /* PFAlertView.m */; }; - 84933A33BD80139924D79100B6D929E2 /* PFCachedQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = EC05CE6C1335AF7439307E684A4A4658 /* PFCachedQueryController.h */; }; - 853F3B799C49A88B08934FE9C4288F79 /* PFProduct.m in Sources */ = {isa = PBXBuildFile; fileRef = AE99A29157A904C67890D7F7E49DDD80 /* PFProduct.m */; }; - 85BE00013EEAA089D5E198769CF5B7EF /* PFPurchase.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FBB8D23E11D288C6235C6730E4861BE /* PFPurchase.m */; }; - 85C00AEB98F752E4D8BB0569F8683105 /* PFAsyncTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 6285547694D0DE6096DB0174F62F8D57 /* PFAsyncTaskQueue.m */; }; - 85F5FE2F8C6718597B6C4E94CCE0D7BB /* PFCommandRunningConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 699EE24E208C84FB34AD727CE4B22B06 /* PFCommandRunningConstants.h */; }; - 860FC46193591C24CFB85207870A57EF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2BBD5A5E42C1E632BCED63C083AEA52 /* Foundation.framework */; }; - 868411E138047CFA6B4267A5DBF3025D /* PFAnonymousAuthenticationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 14C7CDE38DB399D405735FBBF03F2A7B /* PFAnonymousAuthenticationProvider.m */; }; - 86DC83CE56B98DB504E82439521B16CD /* PFPurchaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FF8D43BA53CAB9EC8CE2C3D9BB07585 /* PFPurchaseController.h */; }; - 86FC6A800E62791B570C07EDAD3F4000 /* PFObjectUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FFDBD38104590E7E7569E959BE85635 /* PFObjectUtilities.m */; }; - 877092E1B6D3E8C3C5F389CEE0053BCC /* PFURLSessionJSONDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E2EF54AD86CBB75239ED52C54FEE973 /* PFURLSessionJSONDataTaskDelegate.h */; }; - 87DB43D0F066BE9707FF38AEEEE7373D /* PFLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A061CE9E6A0CE32309E0356EB7DE8D9 /* PFLocationManager.m */; }; - 88617D3C42C91BF2F601AA3D1BD9E419 /* PFPushController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2758D4A6E71B967E09A910CF576817B1 /* PFPushController.m */; }; - 8919136675AD21F6E82FAFF82C3404B0 /* PFOfflineQueryLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 229A74FF17E8D46A86798DDFB3D12F02 /* PFOfflineQueryLogic.m */; }; - 8984D28B38584E5C904E13A53F5855A7 /* PFHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 48BA1E2ADC6C1A912806B4434C705899 /* PFHash.m */; }; - 8A962EB021D16BA9D5514AF20CD890BE /* PFObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 807B1D200CD50072E1017510EC7A3B8E /* PFObjectState.m */; }; - 8BB11F7A78DD3D2E36194C5BBB8B2A80 /* PFMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 04F603E8068EB055DB1098ED088FBC0B /* PFMulticastDelegate.m */; }; - 8BBC96F61D6C0A337739C2510B316483 /* PFCommandRunning.h in Headers */ = {isa = PBXBuildFile; fileRef = C09DCB3EF4CB0BAF12A22BD98B68BFAA /* PFCommandRunning.h */; }; - 8C753DE7AD359D4E643A13D21F559A03 /* PFCurrentConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = BFFD2763428584483FBC7980FDEE0319 /* PFCurrentConfigController.h */; }; - 8CF2F3C2B486F8EC6FE55E6A39462E4B /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 384135DE37094DB8E731205CBD17F72F /* PFURLSession_Private.h */; }; - 8E1E26EAE490E452B6660B761FDC52ED /* PFRESTCommand_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FF94702CE18ED34C2681EF97F7E85B40 /* PFRESTCommand_Private.h */; }; - 8E72527532872043FC285D78C338ECD7 /* PFPush.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA0FB7E1B7B3B44E19E9F459BDE3FC5 /* PFPush.m */; }; - 8F4D11CE5DAF8E38B689D107E29D8558 /* PFObjectLocalIdStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 769433A4610BC66862A645AA9FFF52CB /* PFObjectLocalIdStore.m */; }; - 8F50489FB2E08C672EEE767BC05F818E /* PFMutableFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = DDE9B6448BD79C26C031AB51DB767056 /* PFMutableFileState.m */; }; - 8F8455F10EEB3772AE588EA9E3A3F7AE /* PFHTTPURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E2405EA0846F25769ECD3AD50DE9EC2 /* PFHTTPURLRequestConstructor.m */; }; - 9093266F675B6073EA7E27CB8505C7A9 /* PFPushManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A327BF223427530CA8B748A9862FA426 /* PFPushManager.h */; }; - 90B7F7FD1811534484E2AF1BD75CD7CE /* PFWeakValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F9009C1FEECA9D4795590A5794DD2B1 /* PFWeakValue.h */; }; - 90EAC88772A18DD0737B15E7CDB2AE66 /* PFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F48BEB733DD91A7D53CF88B21A269709 /* PFNetworkActivityIndicatorManager.m */; }; - 91F3B9A8260A288980D16C63193281D7 /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = E7FA04FB8AE086B49BFBB161FB6C5A22 /* BFTaskCompletionSource.h */; }; - 92903FB655BADB2CA51988E598CDE90D /* PFRESTObjectBatchCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 68A4262C2B21FF46E63C3BB478773563 /* PFRESTObjectBatchCommand.h */; }; - 938B9E0D778946EB4A20DE22D925E0BA /* PFRelation.h in Headers */ = {isa = PBXBuildFile; fileRef = D74C3795282F4C34ABC6339CF12F14AA /* PFRelation.h */; }; - 93F07AF465A16197BDD89A01907DAF26 /* PFNullability.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E7CD5EAEAC1BC3148596E0F47F3CA74 /* PFNullability.h */; }; - 94E4771CB1CC8B24BAAB0FEDC0E8B302 /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB26C97146C83F5B87B7771DE7F29E0 /* BFTask.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 95F347CD382221D4B61BC52B4D0ECD99 /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A9EF3EDC4FDAFC57AB7D03F2B66F8398 /* Bolts-dummy.m */; }; - 9645F2C8D5B779635F7D999C448335D9 /* PFObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = BF48D0C85E7175A9594CACE087E1F8D3 /* PFObjectControlling.h */; }; - 96A1FACC2037256FAE41C1595CC5D5CB /* PFUserAuthenticationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B7919554958754AF6F15E6D978D43B0 /* PFUserAuthenticationController.m */; }; - 96C87B5E918E645F7D5A5D1E5FF9AB94 /* PFSQLiteDatabaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = FFC9A812BC50C9BE9A45E1BE4A59532D /* PFSQLiteDatabaseController.m */; }; - 972A00EFBCA4704A240530FE23B686E5 /* PFObjectFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ADCE9E163F3FCD8DF103AD6E0A2840B /* PFObjectFileCodingLogic.m */; }; - 9A329CA60FD01A9E79AD818D57C3E3C9 /* PFCoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 03E890753CE899F60DD6626F8404DF58 /* PFCoreManager.m */; }; - 9C50DCE43E19C07A531CAA9DAF92EC44 /* PFSQLiteStatement.h in Headers */ = {isa = PBXBuildFile; fileRef = 993C9598765F98AA0527D81D83D6DEE2 /* PFSQLiteStatement.h */; }; - 9D104866E774B46DE983ECE270A0BACB /* PFTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = AE1AF3237CA729A9AE65C24D5465EDB0 /* PFTaskQueue.h */; }; - 9D1D9ED97579645663CF95211A6FF5B6 /* PFLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 216E10883658EDAA1467BD1DDBDDC840 /* PFLogging.h */; }; - 9D22D569F427BC219F2223C416FE17D9 /* PFURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = B5F07D1F2661374F427EFA9F321E58A9 /* PFURLSession.h */; }; - 9D37DC879729E2F3E90B41F02A6B5424 /* PFRESTSessionCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA4F24522BCB8A666417FFCCCE66FAF /* PFRESTSessionCommand.h */; }; - 9DEE6CB63547C18B4C3BE6E8F6789704 /* PFApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 00853C35851DB9DCB92267B2F10343F6 /* PFApplication.m */; }; - 9E5114DC7AB77045B4AC2B1224CD4B84 /* PFPinningEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 44FB09F8C2981A2C9E4660E4FABC1F83 /* PFPinningEventuallyQueue.h */; }; - 9E8416764D2372D8E2DA93D9ECC89410 /* PFRESTCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 83D00AFB6C86BE198D122C01CC505FB9 /* PFRESTCommand.h */; }; - 9EFF52CB3098B8B01A216C3AC7AC7DB2 /* PFInstallationIdentifierStore.h in Headers */ = {isa = PBXBuildFile; fileRef = E6A7D84E1E43EC5B6384808B1B5E2C0D /* PFInstallationIdentifierStore.h */; }; - 9F4B0D8ED2F69D51C5B934D536578CBA /* PFQueryState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D2FD8C2062E42D035690B0D01AEA8DB /* PFQueryState_Private.h */; }; - 9FF8F72E67A6BD77BD9C17C285E8B543 /* PFConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 765B7A2AA534A8E804AE9123D59C9043 /* PFConstants.m */; }; - A0C41C9B793A9571B762B20575FABA97 /* PFMutableACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 88690FBD663956E84E2502DB50AB5408 /* PFMutableACLState.h */; }; - A19B0FD91C9C97E87E5B06DB621DF4FE /* PFFileStagingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 366813962B9A44F8160D7BCF13112B91 /* PFFileStagingController.m */; }; - A1BB2E8C1D3FCCBA44DFE673B60922CD /* PFCloud.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F51DFCB9E569CD5791CBA701D9AFE8C /* PFCloud.h */; }; - A2E5498B4A910CDD676173C8F3798B39 /* PFMultiProcessFileLock.m in Sources */ = {isa = PBXBuildFile; fileRef = B5045A6DC57A247B1BB14933FDCA672F /* PFMultiProcessFileLock.m */; }; - A2E97F94192C6D49A7381186A58DEA71 /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = C876DBA76406D0CD90D0A146D8241EB0 /* PFCommandRunning.m */; }; - A368D821FA95C5524EDBED8BCB084CE0 /* PFRESTCloudCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 77442B142F2E19A0A0521AFDCF58C91C /* PFRESTCloudCommand.h */; }; - A4477AAEC61E1731E8E2528161F6016A /* PFAnonymousAuthenticationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 68BF84CDE3833CC1EF16696ED2573967 /* PFAnonymousAuthenticationProvider.h */; }; - A4699E368ED73135E902037AC6F5EC66 /* PFACL.m in Sources */ = {isa = PBXBuildFile; fileRef = A1C2072D5B7941AF0CA6A45698E16D81 /* PFACL.m */; }; - A4A9994EC1B2B5FE681A95E532942577 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2BBD5A5E42C1E632BCED63C083AEA52 /* Foundation.framework */; }; - A5065060A9FAB79E3458CB76F4B1F180 /* PFObjectFileCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 81A6715334A0491BEE68AE8FEF91CA79 /* PFObjectFileCoder.h */; }; - A5F2F863073EF75443E528E22A276823 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2BBD5A5E42C1E632BCED63C083AEA52 /* Foundation.framework */; }; - A6131891A9A0A9C9F694D2B047CD3FA0 /* PFQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 00B8BB0329F997188B363E677BBB666E /* PFQuery.h */; }; - A7126EF0D19F750C84DED66110D9E154 /* PFObjectConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 0839D4C7AB14AABD676EF16D9D297FE7 /* PFObjectConstants.m */; }; - A9290983F7521930A41832FF52CDB240 /* PFFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 474A59362210E10E859CD9BA539B75D6 /* PFFile.m */; }; - A939FB79FC0655BC78AF111F85092FFA /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = E687834AAA233DAC2762507DAF840866 /* BFCancellationTokenRegistration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A95C861682E0DF65260AD321E8EA8F50 /* Parse.m in Sources */ = {isa = PBXBuildFile; fileRef = D236BD308CB967D7FED84A202A4B215B /* Parse.m */; }; - AABDDA3F9EF9F5C4105849B0FA7D7B71 /* PFObjectEstimatedData.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BC6D066DB5DE208C19F3EF18D5033CF /* PFObjectEstimatedData.m */; }; - AB40902E23A9720B910155E68C5D1A5D /* PFCurrentInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = D1502154EA0D5A991A1D6B8B9EFCB52F /* PFCurrentInstallationController.h */; }; - AB487ACB6998FC1A5C71E553A2DDD1D5 /* PFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 45D0E44482F38FEEB37F4CE77B608864 /* PFNetworkActivityIndicatorManager.h */; }; - AB76D332CB4C250B0948C1742763F304 /* PFBaseState.h in Headers */ = {isa = PBXBuildFile; fileRef = 40001E702307C45CF85652D32E688A7A /* PFBaseState.h */; }; - ABD52D6EB2913FF8BAC14E669ECF1F89 /* PFGeoPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C9096CC3342212FFE41602D93C0C169 /* PFGeoPoint.m */; }; - ABDD20576F8BEF189B0826937FBFC9BF /* PFReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = F75EB19F28291BD31FAFD036CE9F9A61 /* PFReachability.h */; }; - AE97140D93D68F7179BC001727897BDF /* PFSessionController.m in Sources */ = {isa = PBXBuildFile; fileRef = BF600E65BDFE51829FB662904C48520F /* PFSessionController.m */; }; - B0246442FB3AD47E4FE651E20DFA0F12 /* PFMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 870CCACCA994D6092C3A667F1EC7EE38 /* PFMacros.h */; }; - B067DFF8D2A7CD44742F7AA7BFBE4DF5 /* PFPinningObjectStore.m in Sources */ = {isa = PBXBuildFile; fileRef = FA2438B1DDEB1848F5F5D82CB852583E /* PFPinningObjectStore.m */; }; - B0ACEE94E47398A49E87F2862B25479A /* PFObjectConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 85D8C47DFF7FF802AF326B4C6383AF35 /* PFObjectConstants.h */; }; - B11EC1B10A6BFC5C0589BA1D520B731D /* PFWeakValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E530CB9C9FCEEC48D0D6022A3B9E461 /* PFWeakValue.m */; }; - B19D62A8B55B539FC5B7B1D294EB91D0 /* PFSQLiteDatabaseResult.h in Headers */ = {isa = PBXBuildFile; fileRef = D60478F0E7C4D7B2ED83ECC80C4ED55C /* PFSQLiteDatabaseResult.h */; }; - B40DCDEA8223768D03C17C146CA9D833 /* PFInstallationIdentifierStore.m in Sources */ = {isa = PBXBuildFile; fileRef = F228BBFAF9E26128FBEF282FE73D477C /* PFInstallationIdentifierStore.m */; }; - B4B7577A1C0206DEB36F683B3B17452C /* PFCommandCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 41BEED2F8941DE9D36C4383DE2A005E4 /* PFCommandCache.h */; }; - B4E9270B79198BACEECBC96F4D246292 /* PFSQLiteDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A33DBA763E58A23158889AB7E55D1E8 /* PFSQLiteDatabase_Private.h */; }; - B5175724B04DB9C34B2F3EF3A7A51038 /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 671CEA32EB838EA2DB18154A0B781F41 /* BFExecutor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B551D2476C3AAD8B21C592D097C2292A /* PFFieldOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = F80064D5DEE86FA0C8D24134A843AFE1 /* PFFieldOperation.m */; }; - B5B3760EB16FD470D5A422411C53EDB2 /* PFInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = B60239EFD344C553851D340E46C88513 /* PFInstallationController.m */; }; - B6227EB171D030EE81F4D8D34D6C9439 /* PFMutableUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = 355562D77F7A3ECC89ADA55D047757BA /* PFMutableUserState.m */; }; - B6E585E0327BC1EB0EC7C0D4803C1CB7 /* PFPinningObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = D1C861FA6983C0DBEE507CDD33BA8714 /* PFPinningObjectStore.h */; }; - B7B8B9FADA4A622D966203776628003D /* PFEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = C52FA914AE60BC50812988E15670B2B0 /* PFEventuallyQueue.h */; }; - B7DFA8419CDB3F24CB17D7F079BDDDFF /* PFPropertyInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = BD59DB857ADCDA5EE20B1AF8286DC64E /* PFPropertyInfo.h */; }; - B8EE5009876838F73F966C879482E31E /* PFObjectSubclassingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 67597E3A5597B762BEC0ED0EC7E967FF /* PFObjectSubclassingController.h */; }; - B9475D22177552BAEB62F160856477B8 /* PFCurrentConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB5DEC6229F3BE36F1F514679A24AE3 /* PFCurrentConfigController.m */; }; - B9B9AF304C0403A3BAAACD98C5E8AFC0 /* PFRESTUserCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D283291B477D2080EBFC60E0CE5B3A3 /* PFRESTUserCommand.m */; }; - BA0F98005F9DABD84663A387BEF9F176 /* PFConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = CB2EB1A81CEF041251C51543CB93FA8B /* PFConfigController.h */; }; - BB42E917B4369EE6FC673DAF75718784 /* PFFieldOperationDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 7398989E9BACC2972DD360A682AB30D5 /* PFFieldOperationDecoder.h */; }; - BB4D992680D6BB33E5C968E33F7E3DE4 /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = A2053B7041E0633DF0F9AD94C7B1956F /* BFCancellationToken.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - BB506A2582FF02EF9A8878CED3067763 /* PFSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EB39D6AC1AE16A8B7C4F5DE8BB6C0A5 /* PFSession.h */; }; - BB5E92B3C27899346D398F1ECC11B87D /* PFCommandURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = DFC186001D6B517135B8C4D67EEC1DBA /* PFCommandURLRequestConstructor.m */; }; - BBE39348815CBF413FBEE01EA88DF139 /* PFUserPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = D66D14F7F2E3EBDC0A59BB7BA3788C3D /* PFUserPrivate.h */; }; - BBFD842A73C7E49063FED96A15941663 /* PFCommandRunningConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 83EF521AE88F3E4B58595E6C70734633 /* PFCommandRunningConstants.m */; }; - BCF97E49683310C768AD0DB174D953A6 /* PFOfflineObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = FEA99D72FAAF1C1CCB030F44B7765976 /* PFOfflineObjectController.m */; }; - BD57C1BBE4605BE1BAD1722EDD356DD3 /* PFHTTPURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = A4ACC59626D38782D3773A813251B790 /* PFHTTPURLRequestConstructor.h */; }; - BDC924266A1575B8E3D5B70544ABE0BB /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4339829EF9FC5B8B3459DBD79F65C0D6 /* CoreGraphics.framework */; }; - BE2A298EEBFCB48E5ECAD768415B6F7B /* PFOfflineQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = B32EAEBB2BF0E7999CBAA8BBC9844BB8 /* PFOfflineQueryController.m */; }; - BE6BE0E6CBF7800AD744FEAA941A3465 /* PFGeoPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = D2CC64D2FEDF6A4C762798A614A6AD05 /* PFGeoPoint.h */; }; - BEBD3B38DAA52881F9B5BC24981B374A /* PFRESTConfigCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 47D9BB43AF2C76037F90ECEAA05CFF01 /* PFRESTConfigCommand.m */; }; - BECA671768224F85FF36E96155A518AB /* PFUserState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 754F92799C47C441BC69A6DFCA0BE689 /* PFUserState_Private.h */; }; - BEF81BBCD4ED12BDE45EA7F15396016E /* PFHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EAC8A1F239CB9A07C89A445269755B3 /* PFHash.h */; }; - BF790169F293998D1D7E9C5A4772286A /* Parse-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5456C5EDD601EB1F4939A1ADFE7EB84F /* Parse-dummy.m */; }; - C1035BE9B7CD66D132D57EC819BEF1A2 /* BFDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 7865F2D426B0005FBA1C5220282DDBEE /* BFDefines.h */; }; - C3834A5D49775B2837F1AEDC533AA3B0 /* PFFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A95C008395C7EBC9844E3F003B06DC43 /* PFFileManager.m */; }; - C3E601B9D58FDA8A74543A1F61A6A9C2 /* PFAnalyticsController.h in Headers */ = {isa = PBXBuildFile; fileRef = E879D654F92A43EBF40100EDA8F4723B /* PFAnalyticsController.h */; }; - C424C8C02491EE32FE76D0E4163B9BBB /* PFPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D7EDE5ABF288993846E8BEA60CE324D /* PFPin.h */; }; - C462C51661AE5C5C699600115E6C3F7B /* PFPinningEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C3EB736F8A50220457120DE7F4E7DF7 /* PFPinningEventuallyQueue.m */; }; - C4E268B9B9161164425357E786164D39 /* PFURLSessionUploadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 31479B7C07EEF4712DEF1D01F7F10F31 /* PFURLSessionUploadTaskDelegate.h */; }; - C51B1034BD7B97F14B96174A22774353 /* PFOperationSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F4F40BD61DDB1C6011B29A82B9D4674 /* PFOperationSet.m */; }; - C5C0E8C288C12762154DCC0F340146BE /* PFRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E5C86338C3B23D609E0EF8581B094C1 /* PFRelationState.h */; }; - C62A65AC30EF279D3F45C8BCFE29CBB7 /* PFPush.h in Headers */ = {isa = PBXBuildFile; fileRef = 8ED3D96C01E8D4CCBEF611AC599F7C52 /* PFPush.h */; }; - C72908FECB9E74136372BCA3AD9EE391 /* PFThreadsafety.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FB342435842C135A1CE8351177875B1 /* PFThreadsafety.h */; }; - C7D5C0CCE8FED60316E097119AB85B71 /* PFRESTObjectBatchCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 16E2B74C340852FB7F8D0C347EE34F7F /* PFRESTObjectBatchCommand.m */; }; - C7DFB1EFA8D89E8D20B388A49EDD0469 /* PFMutableFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = FC5FEFC8C99E02AAEE60AEBC8FF0063B /* PFMutableFileState.h */; }; - C7F76403B814F07C1D00E11603582FED /* PFInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = C3021C35E215764D5CD8DA96BB1AF638 /* PFInstallationController.h */; }; - C8B565A5FAE25F356E3167DE8E552888 /* PFUserConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = AEFE2975AB948B5A15901ABF3D7C9456 /* PFUserConstants.m */; }; - C996FA0B2FD01FC4E184D94D099F80E4 /* PFRESTQueryCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = E748E925ED12231ECAFCA45289DC5651 /* PFRESTQueryCommand.m */; }; - C9B15BA38AA3376525875D51D613A23F /* PFMutableQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = 80356D4DBFA9C24B249DE3B4717F44B8 /* PFMutableQueryState.m */; }; - CA8CF4B0AC490B512098FDF3D38231C0 /* PFLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C0BDD882C72C66B96CB5D72117728F8 /* PFLocationManager.h */; }; - CADAF04325069E2ACD071E78464D5F01 /* PFUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = B71BDBAA3E5BDFECB4D5FA52A92DDE3C /* PFUserController.h */; }; - CC7E1C47F96A8CC0208D52813BCA5EFB /* PFRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = FE24B408A21AA65A2C6C5ECD3A88084D /* PFRelationState.m */; }; - CC94A8F427E66A8FA99D9055DA53B3EA /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 96AB7832E582A38AA7D72F9B8735C3BA /* PFGeoPointPrivate.h */; }; - CCAAFE317844FA11C6D10C4D45A3D3EA /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = B3F709284CED11CD6FFD287A21D7356C /* Bolts.h */; }; - CDBC70BDA28EE44ACC5E185B96CD173E /* PFUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = DCA2CF0514C165F17D511A7B9FA1A883 /* PFUserController.m */; }; - CEDBF7752568F29834130E179561EE36 /* PFObjectUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = A6604E156E00003CEF6AEA0518B9D55E /* PFObjectUtilities.h */; }; - CF4A07928EA83BE04E74752404C0901B /* PFBase64Encoder.m in Sources */ = {isa = PBXBuildFile; fileRef = D32CB47208011940CD4CC821E6C60F5F /* PFBase64Encoder.m */; }; - CF8AA88826DDEA177B316087418EF4C1 /* PFFile.h in Headers */ = {isa = PBXBuildFile; fileRef = ADF1886AF6A65E3EF655A0635E8875D4 /* PFFile.h */; }; - D29355C584330A8CA82B54F7FC0AAA6D /* PFObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DAB9F63DEB559E36F66611AC7532E7C /* PFObjectController.h */; }; - D2B62B011E42DBBBEB20DB5FA2BBC6CF /* PFSessionUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = A1EA7AD5E3D6B3D7DA51A46514ACC1B2 /* PFSessionUtilities.h */; }; - D38ACD0F5A751B876F12D485CC1A60C3 /* PFReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 147E2DE0E42F38E2305A44CF01419B5A /* PFReachability.m */; }; - D3E77F4136625007DED4F9DA91C4A6C6 /* ParseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 11275EB0053B04F601BEF4D31A1367BE /* ParseManager.m */; }; - D41850BD9C694569BC9A4A3DB7057035 /* PFObjectBatchController.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F7E58ACE9D749D100E04FECD569B45 /* PFObjectBatchController.h */; }; - D5D35F7A6872F3CADB7CF4376955901B /* PFPropertyInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 01E9E0D58701D7F6B1D72B98440AD9BA /* PFPropertyInfo.m */; }; - D653044CBFB6B5F7FFEFA8FB323DB9BB /* PFAnalyticsUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 17530FFB4F9A63C5FF114E86EC313B18 /* PFAnalyticsUtilities.h */; }; - D6662D0C2662EC0C464F1D964AF3C1DC /* PFPropertyInfo_Runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = BF7A6665C70BAC3FA8DEA15E402165E2 /* PFPropertyInfo_Runtime.h */; }; - D6AA4C7F8504A7E1044BC4BECDC527E7 /* PFAsyncTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C03418CCE96F211DA0F0C490AB018EE /* PFAsyncTaskQueue.h */; }; - D6C69595A3E8D1C76302D93579BC2E1A /* PFQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = A3E3489C8DBCB1ADB9C7893D90F60918 /* PFQuery.m */; }; - D7AB950DD05ED85D2D62ACE84D6766BB /* PFMulticastDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 23269D2652429AAB9E5717B42C4C40FB /* PFMulticastDelegate.h */; }; - D94A6B308D8C6D612A4AC46C06E39089 /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 18D995618F24B9FE1FA4F15699A5A8BA /* BFTaskCompletionSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - DA1218D74E032808445B74A57F7046AF /* PFRESTObjectCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DC7C863A91F293E7888686B75ADDA92 /* PFRESTObjectCommand.m */; }; - DBA40E524C6A1078E5E761DA1CF7E3F8 /* PFOfflineQueryLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = F9250F0F20E5E4ED980A30FE96202787 /* PFOfflineQueryLogic.h */; }; - DC30BA853B6702BC2982611F14FE4B6F /* PFFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BEF001B9410A4976104E85881DB3C58 /* PFFileState.h */; }; - DDF9E75DC117BAC673631EC5DA70A175 /* PFInstallationIdentifierStore_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 010221E298AB835936ED04C1B61B2889 /* PFInstallationIdentifierStore_Private.h */; }; - DE95C6570B92EB4D071564C49B075A58 /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F10C0434DDB383B055CF6CA6E41A4A1 /* PFDecoder.m */; }; - DE985311ADE8FDE921FEB4AFB9A89A5C /* PFObjectController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D9415A793D299204A98D83B774768B1 /* PFObjectController_Private.h */; }; - DEA88B8DD23B199712A1ABCFF5C4338F /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5964B03763EB227A79722D086B07AEB /* StoreKit.framework */; }; - E0384F193693CF247589281D002527EC /* PFObjectEstimatedData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5878493E65CFC3022C41DAF663AAD6DF /* PFObjectEstimatedData.h */; }; - E097C48262B95CD4859E7E97439EB0E2 /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = CF82FA8252D0DEF399D32F39A272A631 /* PFQueryController.h */; }; - E0B0A3870E5B217EB20F7CC49F37561C /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F0F73BA329E4FD6AA01176C7431EBFE4 /* Pods-dummy.m */; }; - E15F9A1D17C7A7EDB1CA1019E2B9FC40 /* PFRESTCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 6041A7EB33A2C8DBA16E95481F6E955A /* PFRESTCommand.m */; }; - E235199DDBB89E9541CDCB0F38C15E56 /* PFObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = CB26278765FDFC13590066F6B6BBE08C /* PFObjectController.m */; }; - E541D6BB943BF7613FB797ED4F7959A8 /* PFRelationState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EF48103F2FD65D41AC8CEF7D0FFAC5B /* PFRelationState_Private.h */; }; - E696825C17F655DBE6CDCA4DB750A0C5 /* PFFieldOperationDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 556C88BEC9C2F89C47B0E0710DA1127B /* PFFieldOperationDecoder.m */; }; - E73C2EF366DE82A709A6D65EEBE1328C /* PFInstallationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 765173C954A51B493E29F50B2D97732A /* PFInstallationPrivate.h */; }; - E847CDDB808B57C6B1CB83DB1FF883F3 /* PFRESTCloudCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = C182382BFBF1EE8F2E17E6E7DFCABA57 /* PFRESTCloudCommand.m */; }; - E91D0BF506F05FC556E93269A6A62288 /* PFQueryUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = E18313F9207DA8A940C45F4C6D3BE5A2 /* PFQueryUtilities.m */; }; - E9B4C4B574F58F61A14C2E6CDDC87FA9 /* PFURLSessionDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 61C33185F5BD57BDE3231949A2133ABF /* PFURLSessionDataTaskDelegate.h */; }; - E9BF687CA4B676BF9C0CAF6BBCD7B1C6 /* BFTask+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DCFFA9D9D3FD9AE7914C3CDBC03F386 /* BFTask+Private.h */; }; - E9EC843D6BF988766F5A9C48315B572A /* PFObject+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = 08D3D6F3DCED7306E944D33A3186C1AF /* PFObject+Subclass.h */; }; - EB1A21CE8A9D7D202B2B2F268CE0BBD0 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 50DC95668369AC8E5CF51D8FE228F223 /* PFEncoder.h */; }; - EC3E7E5D47C8C4485FABD0262AA04B0A /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27841483445CA9ABFA8CCFB3D503D752 /* Security.framework */; }; - EDA20A21CCE9BA77B2FA0E5BDEFFC85C /* PFConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = C3D50155B3D10EDC8634E8BCE3E2EC49 /* PFConstants.h */; }; - EF3044F21842A80CD8FD8C0FD2957126 /* PFMutableQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 23B01EE10487D2A55A89CF394A299B88 /* PFMutableQueryState.h */; }; - EF687C393CB8A31B06A885E88BAFF74A /* PFPushState.m in Sources */ = {isa = PBXBuildFile; fileRef = E0937DFD0BBDD358F01F54D3DF3EB180 /* PFPushState.m */; }; - EF7185106F1DA78162F656D8C8DA1B7A /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CCA791631F559F162C6A4858BB0E605 /* Bolts.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - EF91ACE6A4CFF1DA4621FB864B05C627 /* PFPushUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = BF1F7285450FFB765AE85728E98D3277 /* PFPushUtilities.h */; }; - F0072DAAA0B07AE29273FD1C342F4A5F /* PFSQLiteStatement.m in Sources */ = {isa = PBXBuildFile; fileRef = B82B704DB25FE99DA94E96510CA4115E /* PFSQLiteStatement.m */; }; - F057CC11EE9249F520F2B4C7F60DD936 /* PFCommandResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 1170CA07F5721584040D06438ECB2657 /* PFCommandResult.h */; }; - F0EB7E98687B60B2E02E3ECA44E650E5 /* BoltsVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A17244CCBF6923F4C1448B4C7F8259 /* BoltsVersion.h */; }; - F111957FFF0FDC2AD0F4BCCE1BFEA4E8 /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 023EEFF1E9891B8B0993596D706A7137 /* PFEventuallyPin.m */; }; - F13F4E6F88ED4165359AF317F66E33E1 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 17A2BDCAD5B27E331974A22F463E44CF /* BFCancellationTokenRegistration.h */; }; - F184E6760F65F61A5F0732CFE59C2217 /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 96273707C86B8C6EA8146C952F2EBE64 /* BFExecutor.h */; }; - F2B43B2AA76C12DA90E65116C8FBC517 /* PFSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 24DA2B1B50C58F417BC0F3413CC0937E /* PFSession.m */; }; - F347073B50A9BFFAB4F094C75C9FC502 /* PFInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = 152A294FCBAFB2F303701CC560D0CB9E /* PFInstallation.h */; }; - F3D2C0C8C3C2249EE1A03C9AF084946F /* PFFile_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 144A3BA47B4A9DFCE62E998D209A9844 /* PFFile_Private.h */; }; - F5BEC2186FCF846EC561939D9C1BD52F /* PFFileController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C366C40EE46E2189B1D2710D70DFAC4 /* PFFileController.m */; }; - F5CC151EF0B90D7A2BA370DE2C79CC38 /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D4C06D28A83DD5865841731DD2BB1C /* PFInternalUtils.h */; }; - F5F2E1B52DF9F451F9947CF1B9A3369A /* PFObjectSubclassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B30FD2D2BC16F38BEB58093ADF82B7A /* PFObjectSubclassInfo.h */; }; - F84261406724B9DE27CCBFA304B8CF92 /* PFAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 116F73992D0A8BEB52EB6FFCE76C5242 /* PFAnalytics.m */; }; - F90710408C3BD5A0958AD6C0B779B8E6 /* PFPushUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = CCE521672B33AE35219C0DBD9512A6E6 /* PFPushUtilities.m */; }; - F94D1E24CD4E2406DD6F9A7CE579CD49 /* PFOfflineQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = DA979320C889B93770A321587B8E4496 /* PFOfflineQueryController.h */; }; - FB6BCDEB8CB52625CB351ABCD809DE66 /* PFMutableACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = FDA614FFD9F4D7DF03E545167A1236CE /* PFMutableACLState.m */; }; - FBA47F7FD3DECFB1FAB1E0BF580D7E4F /* PFSQLiteDatabaseResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 95F2D7917180A966F3553DB814B47079 /* PFSQLiteDatabaseResult.m */; }; - FC440F2A2D5DA843204E46C17E101F89 /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A38E54B7ADBF7D1932DAF9BF6DB999 /* BFTask.h */; }; - FCD5921048744A9B9509182C12DC3B2E /* PFCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = B6483E9C28C9D90DBE19EE9FEA7C05BA /* PFCategoryLoader.h */; }; - FE046E97BCDE38C14F403CCDF301B12F /* PFSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 23D468ADFF594C052225A0543E3B6A56 /* PFSession_Private.h */; }; - FED49F2A0FC8765AB17492CD955D2A12 /* PFMultiProcessFileLock.h in Headers */ = {isa = PBXBuildFile; fileRef = BD7E295A2705B98E78F1230626724816 /* PFMultiProcessFileLock.h */; }; - FFD37837303F10D59626447CA527DDC7 /* PFPushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FF2D70E2A6BDA411BD8E96BE88717F8 /* PFPushManager.m */; }; + 005695268BED154E9042211E12310C74 /* PFPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 1969D32C99E438DDB5CD4D541DDC00CD /* PFPin.m */; }; + 00EE2DBD1E7F59BFA1AE4F842706417C /* PFMutableUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 83720EF13618F9740F2F7E1F7E8DE8B9 /* PFMutableUserState.h */; }; + 015FCB9B8DD7DC9A0488893D1B4E0015 /* PFErrorUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A01E3948888676B760B4B5642C2B3CD /* PFErrorUtilities.m */; }; + 01BEF3D787B13B3B2B56DDBCA08A0FAB /* PFHTTPURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = F990476FB27C0034DB517BE7F8E8E297 /* PFHTTPURLRequestConstructor.m */; }; + 01C20A13734E154707BCB74AA50AF6FA /* Parse.h in Headers */ = {isa = PBXBuildFile; fileRef = 62080F892890D93BE422B38D0ADD788B /* Parse.h */; }; + 02C4B0A8B51D500CF0359C30EB77A55B /* PFPushController.h in Headers */ = {isa = PBXBuildFile; fileRef = 91C278F6237539322009B508C24CC49D /* PFPushController.h */; }; + 037922F25BE9EDF80206E267E32963F0 /* ParseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DE516CCF6D322CB4CA050FD6E52A70E /* ParseManager.h */; }; + 03FF532EB8C5304EFA2E77016458C281 /* POPPropertyAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2726A20CBCFFB77F9972C445E8972099 /* POPPropertyAnimation.mm */; }; + 04095EC3D989BCA8B01629786D94BA53 /* PFMutableACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = 89508E9160A4510C35341638A4A33FFC /* PFMutableACLState.m */; }; + 0447D077E03CCB121A73F61FECE5D6BC /* Parse.m in Sources */ = {isa = PBXBuildFile; fileRef = EB5DC17148922AD333F7571A1F2466E3 /* Parse.m */; }; + 04F6C6E18CCF030F4D582EB215021992 /* PFCloudCodeController.h in Headers */ = {isa = PBXBuildFile; fileRef = 54BB29D5628B693DB06DEF1222114715 /* PFCloudCodeController.h */; }; + 04FDA7B957175B9AB41F12B581C39012 /* PFCommandResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 003F04CCCCA9D217090A10F09B6A095B /* PFCommandResult.h */; }; + 05F00A05A1F52FDF030A9ED3A65E4381 /* PFCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 08D26CE5516D7D42D9222FD32B2EDB93 /* PFCategoryLoader.h */; }; + 0652F30DD0C4FE6F6F9CEB85F9B8D74E /* PFObjectConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 72761DCB73DE19D59EFDEF3DF961C4F3 /* PFObjectConstants.h */; }; + 073E677444C5A0E6864B45279F172EA7 /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 828F0C1371108640DCECDC077D80E6F9 /* BFTaskCompletionSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 074E069D87C50D72053C5523956F1174 /* PFSQLiteDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CF1EB66CAC009B756BA17A2817145984 /* PFSQLiteDatabase_Private.h */; }; + 0844609AD157B2569405CC584D6D9679 /* PFAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = BA67CA21B8529E8E4280069C4CC1FA26 /* PFAnalytics.h */; }; + 08B14D1DFFB905C7DA0922E60E93AFB4 /* PFCurrentInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 43FEB98D92288E63383CA2110D5E1033 /* PFCurrentInstallationController.h */; }; + 09AE420645EA5821A4EB06CE5B22062D /* PFPushPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = BD53F748C3855917C34EE3DCD3CD3F92 /* PFPushPrivate.h */; }; + 09E322410AA4B979A689B8FBC73E0F83 /* PFOfflineObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E00A160407B37F025D21140BEA61FE9 /* PFOfflineObjectController.m */; }; + 09F160052D6F4DF4F769F6A2A351071C /* POPAnimationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = EC10F21A5E230A911C2C2E5082CDAE4B /* POPAnimationPrivate.h */; }; + 0ADB28D8BBCF730DB3712BA235178983 /* PFFileStagingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F437AB63E48A5534A05700959E05607 /* PFFileStagingController.m */; }; + 0B364D53F85A0FE8D3BF8829A280D22B /* PFObjectFilePersistenceController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4648A560C468826E346FA00C25F64545 /* PFObjectFilePersistenceController.m */; }; + 0B6ADB9B0F9070AA026BD69D2DBB3897 /* PFAnalyticsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 64CA497DEB5823668E1CF3AEF0FC8118 /* PFAnalyticsController.m */; }; + 0BFCC38A10528D04D36495CB3A6255AB /* PFMultiProcessFileLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 711043A9271B2D627CCBD4F5731F56B1 /* PFMultiProcessFileLock.m */; }; + 0C6374E8F087F3F9A7CDFAEB467FAA48 /* PFObjectUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 63298AA824390762997B9EF2E73DDBD6 /* PFObjectUtilities.h */; }; + 0CE037AF386585DCEE8513CC3FDB551F /* PFQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D56DAEA6274547A9C5D871A0412DD30 /* PFQuery.h */; }; + 0D1CA8852FF8147C75A85B2F31117903 /* PFCurrentConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = A3ABEEBB2584C20918BF1285C34EA0E9 /* PFCurrentConfigController.h */; }; + 0DDE88A3EC90392DDB022A0C399AFA04 /* PFKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = A40C6F5379E163ACAB3BFEADF6BBF21B /* PFKeychainStore.h */; }; + 0E111996ED8AB07B504AD6200F460C6E /* POP.h in Headers */ = {isa = PBXBuildFile; fileRef = 38C1E5A4A6882760CB349FCABD22A9DC /* POP.h */; }; + 0F666004816BD3E9D47E40000FCE0C87 /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DDEF20541344C4516B6DD22C1EB240F /* BFCancellationToken.h */; }; + 0F6B98F865122CB525B9C6C262681217 /* PFCurrentInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = A091F705C56846E993F12A441C8A163B /* PFCurrentInstallationController.m */; }; + 0F71054017CBECD2BF138C5EFD3ED57E /* PFPushManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D0975C15C502A249A57E3EE7AABC42BE /* PFPushManager.h */; }; + 0FAC72D8A00C1375FA0B2B71DA84E611 /* PFObjectConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 924397DD8F89F34DFFD235E510DCA00F /* PFObjectConstants.m */; }; + 103A9E462566D7CB14E191DFE9D1C475 /* PFCurrentUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = A0C39E3679DEC122C57CAF59AC4607D6 /* PFCurrentUserController.m */; }; + 106AC3F7B15127B444B09D4BEC1C8B43 /* PFObject+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = 92BE0A4991FB16CAC08DA54E2D9B4E4C /* PFObject+Subclass.h */; }; + 108491A1ADCD0F822D90DF4352AF93CF /* PFMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 22F8D68DF4AAD2C14B0AB430E0C5337F /* PFMulticastDelegate.m */; }; + 11432DE55D0DE3BAB6D9BB8131CC576E /* PFMutableFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = B7CFA60CD26AF95E62DC7D82173BA5F6 /* PFMutableFileState.h */; }; + 11924DA123F63743B409090BFC425AD2 /* POPCGUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CC05709207C91767940918CDD4779DC /* POPCGUtils.h */; }; + 128270239F0FE9E10D4016298F09179F /* PFSQLiteDatabaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = F2F468A970FC15FC06B99390A1FB0614 /* PFSQLiteDatabaseController.h */; }; + 1303B59C5400037F832BD657D7E0DB7B /* PFSQLiteDatabaseResult.m in Sources */ = {isa = PBXBuildFile; fileRef = FA0E5057E1930B74D697F4D727731037 /* PFSQLiteDatabaseResult.m */; }; + 13966B03B2D6769C16DD2374B5010932 /* PFPinningObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 117B19051931B86306911BB447C05694 /* PFPinningObjectStore.h */; }; + 143BEC7D21D8844811A803F54131A9F0 /* PFObjectUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = E1247C54B1E28A1D1035FF148D7A8067 /* PFObjectUtilities.m */; }; + 146C2DC0D3347B3616475EC3FACC440A /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6577AD13A469645712E5462FABF1FD4F /* Bolts-dummy.m */; }; + 14A0D60A7ABCCA3408ED26E3D0E0A819 /* PFPropertyInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C8CEF3DB4AEFD83044AD62B8A9ABD41 /* PFPropertyInfo.m */; }; + 14A9C6C340EF645292625C9BAA9D2E4C /* PFDefaultACLController.h in Headers */ = {isa = PBXBuildFile; fileRef = 59CC3868179641E97ED190501DFF4E05 /* PFDefaultACLController.h */; }; + 14B42C960D733C3D8791124A3284C393 /* PFUserAuthenticationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3ED3C7E0A4856FAB56766C096BB50FC4 /* PFUserAuthenticationController.m */; }; + 14F7FFC0E861870C067DF49031119473 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 74ACACF597B47C752DF60C1269A50016 /* PFURLSessionFileDownloadTaskDelegate.m */; }; + 1690AC90F202B5DC511EA9C2933CB97D /* PFRESTAnalyticsCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 6117D27B3E43E27D2717ADF042654E56 /* PFRESTAnalyticsCommand.m */; }; + 16D3FC7241874C6948D2C9C3211B223B /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 06D0E06E5B5391A250E1E1200BADD9E1 /* BFExecutor.h */; }; + 1829B47CC2B07BF87040C0A5B17DCEE0 /* PFObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 63068DEB876F824B178AEFCD8421DB6A /* PFObjectControlling.h */; }; + 1833BA11A3F8B321D710AAA35A810D7D /* PFApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D47488328F5D210AF09C2E49EAF28AE /* PFApplication.m */; }; + 18695B6FB1C1E432BBBED25F18E62976 /* PFGeoPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 48764192F317D5037D89AF6584C95481 /* PFGeoPoint.h */; }; + 1937EC6CD83AA2FAB3455591AB074459 /* POPPropertyAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 134BDC30251FB7A5465C17F603FCAC5F /* POPPropertyAnimationInternal.h */; }; + 1A77D51093B72D6AA09D9EB6C3C74F7F /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 714D2457E720A0BF6948DBDCD450623B /* PFEncoder.m */; }; + 1B2262EFDAE0F192D7546683867AC14E /* PFPurchaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F56BA43A619F5C1A2ED1F36B30E29A4 /* PFPurchaseController.h */; }; + 1BEBEDAB53B9DB3AD45E1F70637747F9 /* POPSpringSolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 6961E549FC85F85EB7560B887B11C928 /* POPSpringSolver.h */; }; + 1D3EA938DC7748DF6184BCEC67838050 /* PFRelation.m in Sources */ = {isa = PBXBuildFile; fileRef = DDC7530978AD0E9150595DF76671ACD3 /* PFRelation.m */; }; + 1E581CA0DC0AD8F9F538F6FD47B42F92 /* PFRESTObjectCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EED13B4582C1463F725EE279074226F /* PFRESTObjectCommand.h */; }; + 1E95B670CEC8A958CBE78165F316F11B /* PFMutableQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 12C8B2712D809AA1B4EC70ADAB8C6809 /* PFMutableQueryState.h */; }; + 1F6218FF21B87CE968615BF666391173 /* PFObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = D003772BF7AE6C6E80062C919E2AA60F /* PFObjectState.h */; }; + 20254097B4CBEAC40E87858741364800 /* PFRESTCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A5BCCC7BC1F6EA4EF7FD3C7BB518BAB /* PFRESTCommand.m */; }; + 20BA5067D5A5B862B598FC8E47FDA620 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 067C9B58B0E86A024F7699B9FC2F7E42 /* SystemConfiguration.framework */; }; + 22030D04E39440FA02B75449A95BF767 /* POPAnimationEventInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5785AD09C2208501D5161E950E701889 /* POPAnimationEventInternal.h */; }; + 226B9015C8E393975BCF1AFEA63C1D51 /* POPGeometry.mm in Sources */ = {isa = PBXBuildFile; fileRef = B330BCF969EF6189E02E10926FB95CED /* POPGeometry.mm */; }; + 22DBE369440BD25CBD77C151C93A8F05 /* PFAsyncTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 91C444E945365A3AEA1C0182D529EA62 /* PFAsyncTaskQueue.h */; }; + 2317FF254CCFEF175822B7FD4CEDF7E1 /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = C91998944DE097F05FC7342A6ABBD51F /* PFEventuallyPin.m */; }; + 23FC5124B2FA2C879AFE378BBB12AC3A /* POPSpringAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C24554FAA71D841BC3C0759DA37874AE /* POPSpringAnimation.mm */; }; + 253D23734B85142261E13FAA6BF114A8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + 25706CA63FDDB23DA6DBD73940E275FD /* BoltsVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 3ED31097D39E6FCF0F3C743613AFA30C /* BoltsVersion.h */; }; + 26703E636E5C16D01C99FFBA0B9E8062 /* PFFieldOperationDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DF189D36ECF2252091D16F77FBAA4B1 /* PFFieldOperationDecoder.h */; }; + 281E35FB8E35EC1E9F2ECC14AC06EE2F /* PFAnonymousUtils_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BF599E498617D2A09E55B46584A069AC /* PFAnonymousUtils_Private.h */; }; + 286C67C403A641645B5702A201BE0D77 /* PFFile.m in Sources */ = {isa = PBXBuildFile; fileRef = BDFFC646E1E0963C745694C371C7CA92 /* PFFile.m */; }; + 289943F1E552820BA0858569400B2F7D /* PFQueryUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = B854EEBA088DE9B81F5F84844F966B49 /* PFQueryUtilities.m */; }; + 29482C3313003A053F10A25BE5F80032 /* PFMutableUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AAA36FB0A4E13DB1928E19770D8EFF8 /* PFMutableUserState.m */; }; + 2A03349907D6F274E5E0BC4C4CE2B9D4 /* PFSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DB2F830CB43261A32A1658BB35A9006 /* PFSession.m */; }; + 2A069E26EA47349AD78257CF3FD49650 /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1826EAEE4BB8BAD18008DEBA561577 /* PFMultiProcessFileLockController.m */; }; + 2A06A476247DEFCD15C38C029E6D34DB /* PFCloud.h in Headers */ = {isa = PBXBuildFile; fileRef = 431480C91CFCFE70AF20289CEECDDA2C /* PFCloud.h */; }; + 2AD822A4C6DD9CA6D499CF6955198F4A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + 2B65D042FB690E283070BAB2D38C6AF1 /* PFSessionUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 01760A57DC1D7F86DDC6BD37AF0773FD /* PFSessionUtilities.m */; }; + 2D7F082E126EE359CEE014B2619D1661 /* PFFieldOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = EE07F56B15CF5CA712EDB693EC0DE281 /* PFFieldOperation.h */; }; + 2DACFE369A8EFCB713C6D983E5379A2F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E32EC19799A69A3384750AD614A93F67 /* CoreGraphics.framework */; }; + 2F0882CC2C95FBDFAAA2C4B2CC5DC28A /* PFUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = E9F025C441C961725285A53BA76899A7 /* PFUserController.m */; }; + 2F1B5C4CE2C8923ECCB376D10D914260 /* ParseModule.m in Sources */ = {isa = PBXBuildFile; fileRef = A696C6A7BB4CC0BCC4967D91315B61AC /* ParseModule.m */; }; + 302E463F7711C0EEF94B3DCE8FF84125 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE8243581B97EEAD2F8781E6C48FD676 /* StoreKit.framework */; }; + 303D18C84C273A053FD1BA34006773BF /* PFNullability.h in Headers */ = {isa = PBXBuildFile; fileRef = 317ED8ACDA393EB59C813498345758A5 /* PFNullability.h */; }; + 307D7DEC099E8172492DB3B8B843F347 /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A52285082871167215D3C139EB152B98 /* PFURLSessionDataTaskDelegate_Private.h */; }; + 309EB042B343BE9C616F85304F8ABDEC /* PFCommandRunning.h in Headers */ = {isa = PBXBuildFile; fileRef = E3CA74B2AFA8B7D355ED3CA3F92BDFD2 /* PFCommandRunning.h */; }; + 30AC63E9C9742D92BFB642A9A7F0FB08 /* PFCurrentUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 01B5421FED39CB875C6EB4E26A48BD0E /* PFCurrentUserController.h */; }; + 31750ADF61E36601124AF864C270BC3E /* PFUserState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 776FA4A81A104C872B1C274D67CE18FE /* PFUserState_Private.h */; }; + 32A7371F19FC366D8DF77A2FA2166918 /* POPCustomAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8EC4FC6A3A06D9292C296C691005546B /* POPCustomAnimation.mm */; }; + 32D4B780316F25D5B0849535BDF2CCB8 /* PFSQLiteDatabaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = D0E2E71B86A138C5A13EEABD485A9EAB /* PFSQLiteDatabaseController.m */; }; + 32D7AF079AE20056F6152EF4D46AECFD /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 409D5D646200B0874F402A55B2054320 /* BFTaskCompletionSource.h */; }; + 33364FE5E736249A1DE57AFF31737CD7 /* PFUserFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = AC00DC436BD41D96D7CDADBBE0CCBC63 /* PFUserFileCodingLogic.m */; }; + 34731100DF3C112C179EA805BCAF5BCB /* PFAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = E00C63837F9F051D3640CED99CD396F4 /* PFAlertView.h */; }; + 347C0767BEFFB5F0CE309B5EB138A26F /* PFObjectBatchController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9179D67A40E4CA93EA605BECE4456488 /* PFObjectBatchController.h */; }; + 348C1F161E5A01BD89B9C748DB57C4D4 /* PFSessionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 99AD17888337EB965D0DF3DEB606CAA4 /* PFSessionController.m */; }; + 35CA508E579AA77E74159A57D6C5464D /* PFLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B63F361CAC0664EA5B1BDBD82688DB0A /* PFLocationManager.h */; }; + 37C41E1C9ECD2240B829A8DA25B7FA86 /* PFPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 77409243AF81F02474E6071043269440 /* PFPin.h */; }; + 3802A63F68ECB3CA5DA20D75732A6DFD /* PFDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 27C57412F25313254CDCF65E3AB69F64 /* PFDateFormatter.h */; }; + 390C28D5DDFD9DDB5340A0F68CEB8C2E /* PFRelationState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 90908F63ED9505B2C6685248AE5457F4 /* PFRelationState_Private.h */; }; + 39805A9A3BF2BC351B5F85500980E16B /* PFPurchase.h in Headers */ = {isa = PBXBuildFile; fileRef = B9CD991531E7E5557C57269840034107 /* PFPurchase.h */; }; + 3A4405B733E2F1770CF0AD8185D5DC10 /* PFDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 39F54AA49BC2FD125A794644082419CE /* PFDevice.h */; }; + 3A7507E3009ACF762200908D7CA0C0B7 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 67B621259A8F197B0245C2C5B5003445 /* PFURLSessionFileDownloadTaskDelegate.h */; }; + 3AA82138BFF90068E1DF5B3C168ABB51 /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 53FF030EF4F55FF673AA368E802BA1AD /* BFTask.h */; }; + 3B2D709EB0DA90F1A0A645FDA783B79E /* PFCurrentConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 85AB3D3F633121769C963DCA3B59E6D6 /* PFCurrentConfigController.m */; }; + 3C0939EEFBF9C272642218B8BF390AF6 /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 85C7493C5ED4D1548757C3A048535862 /* PFRESTConfigCommand.h */; }; + 3D11FE763F5433C94FD28761CBB85E75 /* PFQueryUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 378A8BDEE3062C91F84C778871060257 /* PFQueryUtilities.h */; }; + 3D83AE96FEF1D9DC83B211099BADCD42 /* PFConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 435286DE6414AD754A172CA441F36643 /* PFConstants.m */; }; + 3DEA9BC8FEFB0F3EDA1021F97034E551 /* PFObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = DD991348470823191613124528FDAA2E /* PFObjectState.m */; }; + 3DF9C26FB433C59C8D512FCE0C89BDF4 /* PFObjectBatchController.m in Sources */ = {isa = PBXBuildFile; fileRef = CC134A9DF660C6CC1845802A0025F10D /* PFObjectBatchController.m */; }; + 3E39A5289A0F29B5D83FF16C7428D27E /* PFPushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 26B663E68AA063970F54C5A4311360EA /* PFPushManager.m */; }; + 3E7AD54BEB829BE44D66654B265DAAFF /* PFCommandCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F09FE7B19C3276FA4D8099145F0898D3 /* PFCommandCache_Private.h */; }; + 3EB30C9EA4E091F05E2A7C5E855FFC16 /* PFApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = B5AA5A6C3CB437DD04C72C5E6E53B305 /* PFApplication.h */; }; + 3EE64147BDE55FEE67FF5E18995948CA /* PFCommandRunningConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 2FE59B575E6D95DCA7C8B65A48397212 /* PFCommandRunningConstants.m */; }; + 4159DD3856C1195D30F92647848F82C2 /* PFObjectFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 549E8AA3A0932BA40BF11C59E1C2C7BD /* PFObjectFileCodingLogic.m */; }; + 4249688CFBB92CA26E922E6C47AFE8F0 /* PFACLState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A9E567CF4EF740CD931B21421CDEF9E4 /* PFACLState_Private.h */; }; + 42DC601C4CFF768DD66ADB341BC27B01 /* PFTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = FCF80651D0D3D3178E086F081B09AC3F /* PFTaskQueue.h */; }; + 42FB395EE90C8D23200DB0C4FECCD171 /* BFDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = C0E20B62BF2BBA3C871D3C7A2F6BD617 /* BFDefines.h */; }; + 439341734A48F1416D32E028917737A8 /* PFAnonymousAuthenticationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 152FEBFF4B90D0D9894CED8063D4D7D0 /* PFAnonymousAuthenticationProvider.m */; }; + 44F7262AB6C8008A410A14E65A3838E8 /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = 01F9E3D986D34EB39EC1D2728FB49D75 /* PFCloud.m */; }; + 455345B64E2D163C4C7F33A5177BB9E2 /* PFObjectFileCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3257C6D2F1664400BC0FA089A7A688A8 /* PFObjectFileCoder.m */; }; + 4600B58DFCD0B25BD4CD4945E02859FA /* PFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E6DCAF78DAAF81EC8FC6B8AFC7ADDD1B /* PFNetworkActivityIndicatorManager.h */; }; + 4603A217FF729DCD6DEA7AFB1FAB60E2 /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CDE17945AABA4BFAB91FD36A9002DB4 /* PFConfig.m */; }; + 461ADD1403E940D9DB7BBB5B7323376F /* POPMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C3FE18EB564AF4087573DE6F3F2D3D3 /* POPMath.h */; }; + 475F7963B4C61315A7E81764858166A6 /* PFOfflineQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3395CE4D4A4BF8134C0A8860F1672838 /* PFOfflineQueryController.h */; }; + 47A6AEE5AABB891BEF9549399D9D73E7 /* PFThreadsafety.m in Sources */ = {isa = PBXBuildFile; fileRef = C73F19BD326FCF565056E28970ACD732 /* PFThreadsafety.m */; }; + 484758EE625E2C5FE161DF5FC17451D2 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8AC51F94ED4331609976AE134591C5FF /* AudioToolbox.framework */; }; + 49368492C042539DD291DAC1B71335C6 /* PFSubclassing.h in Headers */ = {isa = PBXBuildFile; fileRef = A872DF33FEEBCB36CF6A53343C39C8D1 /* PFSubclassing.h */; }; + 49ECD4E3A20E8D5FF2E8866D39CBAA21 /* PFDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = D1DFF36EC5F44CEE642F63092AE04BA3 /* PFDataProvider.h */; }; + 4A364A41B24FE3CEA692690F01EC6C37 /* PFAnonymousUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C86B73BF7530888F6D5B7414D36E50E /* PFAnonymousUtils.h */; }; + 4AAC7855E322D7DAE7A0CA82444190E9 /* PFRESTFileCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = E4C23C917DC34380EB14D2D8BC9FAA1E /* PFRESTFileCommand.m */; }; + 4ACF656AFA1302DCF387C7A2D0F238F2 /* POPVector.mm in Sources */ = {isa = PBXBuildFile; fileRef = F0B4105C7EE2DA010EA4746E79138C7C /* POPVector.mm */; }; + 4BA566241FA98C1D5E4A5284D84EAB71 /* POPSpringAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = EB56BE02F1B0412A41C9D9834B04BC30 /* POPSpringAnimationInternal.h */; }; + 4BCF78FFDDD8496F50F1A118A174798A /* PFURLSessionUploadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = FAACEF17AA010DB91B4F2D152A8E2E5A /* PFURLSessionUploadTaskDelegate.m */; }; + 4BF28D461EB13C411BFD5E5F994CD533 /* PFQueryPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = B727105265500960B53BB43FD44AB19E /* PFQueryPrivate.h */; }; + 4BFF96298060C7DCE7D155E9DF5AE15F /* PFOfflineQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 64A6FC072C0BE15E0FB1732E5E7BFA8F /* PFOfflineQueryController.m */; }; + 4C16A85DDD642113F35D0FBE466CC05D /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = A9345BB3B8924E56D392BA3231701002 /* PFJSONSerialization.m */; }; + 4D17AF3B64FAB28260209C8002E5FDCB /* PFCommandRunningConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = F954000E663E08C66A7FF9913EFEA133 /* PFCommandRunningConstants.h */; }; + 4DFF084DEA71D9DBB38CBD17040A9BE6 /* PFRESTFileCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4880CA362DCF456DE8C64954480CEB /* PFRESTFileCommand.h */; }; + 4F6883A6C338249681BBEE3EDC5751A9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + 4F8683A479B5509C5B50AD9668CE72C6 /* PFURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 453D0F6EFB50B07FB491E7A1E373EAF6 /* PFURLSession.h */; }; + 4FEF53FA4202399B466C4267631A2378 /* PFInstallationIdentifierStore_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DADC9D70AC397C40456C71C7BB5E5F45 /* PFInstallationIdentifierStore_Private.h */; }; + 5028171FC9AF8B50968A95E11969D57E /* PFCommandURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B12A0FF8B77277D84507AC79070FF41 /* PFCommandURLRequestConstructor.m */; }; + 50421F3920DB209CE4F4DE80A20C4FE1 /* PFCommandResult.m in Sources */ = {isa = PBXBuildFile; fileRef = F3F84D9899A9D129807B810BCBE9535F /* PFCommandResult.m */; }; + 505024039D01133D2E06C44BBC09FC07 /* PFFileController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DBAF5788AC957A98F8DA82DF0E007A8 /* PFFileController.h */; }; + 514CBE462E226552AE0071539F471C25 /* PFCloudCodeController.m in Sources */ = {isa = PBXBuildFile; fileRef = B3919700A3759610223FD35F92AB0AA9 /* PFCloudCodeController.m */; }; + 51690C672CFECB44023EC60A02654A47 /* PFUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = B6142CFCE45847BB7B5926039074D3DB /* PFUserState.m */; }; + 523D293ECDD5E0641F0FC2A7F3520325 /* PFCachedQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 82C15773B786AB50406081B6A022CFAA /* PFCachedQueryController.m */; }; + 5390B6329EF5D9F0B82C429D8B1EA584 /* PFDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E9D9F93BE35D535FACB0F23193B2668 /* PFDevice.m */; }; + 547D96860F208D16B73B9DAE7DD796F0 /* PFFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C3DD022C4A01AA56BB0CF97F8B732F1E /* PFFileManager.h */; }; + 5520088E66FB2528F595AA617FFC5D9A /* POPAnimationRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A5F7AF86D19E519B94AD6D8CB98CC34 /* POPAnimationRuntime.h */; }; + 55545DCF029201A06D7DE175F9C42D33 /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 365E961AFE93318B968A4EAD9C3042AD /* PFDecoder.h */; }; + 55E308B2B58B975F0BAA49C27FC58AEC /* PFPaymentTransactionObserver_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 865C327D27A51821F5096832A0A79CD6 /* PFPaymentTransactionObserver_Private.h */; }; + 569380E544C45B1C7B618A7A718A32AD /* PFUserFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = BD96834E719E340094942FD1EC1DE357 /* PFUserFileCodingLogic.h */; }; + 5842D3A6FC8E81680A5B79C48D17FC79 /* PFQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 38386024B8BB9B3B8F22D7B1FD578A31 /* PFQuery.m */; }; + 5878E73A35257C993AA48202DC4AEDEA /* PFObjectLocalIdStore.m in Sources */ = {isa = PBXBuildFile; fileRef = B7F689B7A8A241A249C1A39110F19728 /* PFObjectLocalIdStore.m */; }; + 58B8E1D6990DB1F4816D4F32EE50A8EA /* PFObjectSubclassingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B8726A00CBE872AD6EEF361F3E1A9BE /* PFObjectSubclassingController.h */; }; + 58E120C5EE7D42D5D881715B390A2CBD /* PFSessionController.h in Headers */ = {isa = PBXBuildFile; fileRef = BAC76B9259ACF68B0E7869A148AE8EEE /* PFSessionController.h */; }; + 592AB331F20CA58D7CDBF114CA8C9050 /* PFAnalyticsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 12C263F3A518B7482AA7F6DA83C5BE2A /* PFAnalyticsController.h */; }; + 595FE58B33E24654D8C217CD9EB3F225 /* PFQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = A211C4790E0A281B7800BE2B399091FF /* PFQueryState.h */; }; + 5968EC5B21D336B66F3A27966F5F9D1A /* PFACL.m in Sources */ = {isa = PBXBuildFile; fileRef = C849D153FE3E4A235A12279407367FFB /* PFACL.m */; }; + 598B48CF82CFFBA09F8D6D1DDAA489BF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + 59CB94574F710422B4C9CD6D388CCA03 /* POPCustomAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 928EC8B9105DA581C7896C2102E87BE2 /* POPCustomAnimation.h */; }; + 5A1596920E1BBB2807BC094A7CFE4F6F /* PFKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 36E5C28B728EEE2896643C1BD0BB1E3B /* PFKeychainStore.m */; }; + 5B6CA23721DBD9125BA38228F7FD39D1 /* PFObjectSubclassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 98821C83404F255ED479CAA0E69D588A /* PFObjectSubclassInfo.h */; }; + 5BFDF4E4848A83D2225D948A6D0B79B5 /* POPAnimationRuntime.mm in Sources */ = {isa = PBXBuildFile; fileRef = E85E0983DBE882A8009D0F7EAB591B91 /* POPAnimationRuntime.mm */; }; + 5C383F280EBCA5293E7102391980CAFB /* PFReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = D1DF8C126A878F1FFF7DB1A3BEB96647 /* PFReachability.m */; }; + 5C5BD8C3EBACA8E787A84BAAB4A416DF /* PFHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = B4F105DB0D9A5C8E74B80DB5C0C9BEFF /* PFHTTPRequest.h */; }; + 5CEE55D83FAA669CBB68FD3C8DD4AC6A /* PFRESTConfigCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 48056B31A860AAD6950C3519A539F495 /* PFRESTConfigCommand.m */; }; + 5D1AA90E597CD5C17D453D1E3C39BFD5 /* PFAnonymousUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = B88FEBD183FE3500545B1AB65A492E8B /* PFAnonymousUtils.m */; }; + 5D7484171082562F2D51A3AF11AF2363 /* PFEventuallyQueue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B72923D868E99D0FEF748E99A0931A2F /* PFEventuallyQueue_Private.h */; }; + 5E09B9BE3904EEA4708C2B696573E6F7 /* PFHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C28BCBA3F60C895444F215DF1A28EBF /* PFHash.m */; }; + 5EE490DADEA2FE08D4CAFBC21E35821C /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 96444BC173DBE095E670C72753A21C51 /* PFQueryController.h */; }; + 5FAB5E76AB21A0CEEB8A3792F4905E01 /* PFPurchaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = E0AF46F24F89ABCDCB18AAF5BD82D7BC /* PFPurchaseController.m */; }; + 61031A606EF2C5F521E09B81D4206B0B /* ParseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C4513EB4F24A2BDEE3106F5C83A1664 /* ParseInternal.h */; }; + 61864772C3678C9ABEDD45DC028B0A16 /* PFOfflineQueryLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AE6501423148E55391488B3AC17AF1 /* PFOfflineQueryLogic.h */; }; + 620920967F6C1FB5C501AD33EFDA1639 /* POPAnimationEvent.mm in Sources */ = {isa = PBXBuildFile; fileRef = C0DF3C83EBC5F7BF6DAAACEBD7D72791 /* POPAnimationEvent.mm */; }; + 635F29ADCD59325D8BA0238349FD779D /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 09FDB3ED688B893DC31F13212A092E58 /* ParseModule.h */; }; + 63743E46FD2F8750E432BB83F546C054 /* PFConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 50F5D5E8541B4E9B381B9D48639498A9 /* PFConfigController.m */; }; + 63B266F8B6708759E8409E2EDE1E5AEC /* PFPushState.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EBD92B6893560E360E020C1911D5A /* PFPushState.h */; }; + 6602802B478E4FBB6B7D42CC47DFB9FD /* PFProduct+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 66778E4EF145FC32D4ED5D0B3B643425 /* PFProduct+Private.h */; }; + 672DE43F5009AB262B9AEF3F7D3B824A /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D5FFAB9AA9026C7A87341B6E4F0D9D7 /* CFNetwork.framework */; }; + 677760404A1F4FC247880760F1EEC082 /* PFSQLiteDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 80E779232DDE695E182A465B9AE80CB8 /* PFSQLiteDatabase.m */; }; + 6A1C6A825690B1907AE9796BE195E449 /* PFBase64Encoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 84C9421C2D04758A8862D5D9334EC3D3 /* PFBase64Encoder.m */; }; + 6AB23830897DDB0C99C4F74A860D59B4 /* PFCoreDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C954AD66C579F4C80C80E36A0D3E80B /* PFCoreDataProvider.h */; }; + 6B7257CD27F3B6B8D8591FA9BDE24943 /* PFQueryState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FD085377EDB67B301B8EE26D9310CCC /* PFQueryState_Private.h */; }; + 6D04FB4F8DD219426617F3AF0D840358 /* PFCoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F3B17068042592957DB4087CD527AE51 /* PFCoreManager.m */; }; + 6D06DC94B5F17AD59B6D8D7125E50C59 /* PFURLSessionDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = CCBD5F36E99EBF39758767076681F918 /* PFURLSessionDataTaskDelegate.h */; }; + 6D56120FE9DC80605D0B11E028828E9A /* PFInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C0B84AF80B3F79D3684EC294B10145D /* PFInstallationController.m */; }; + 6D9EB02700C618D8DBF48C2355B3406D /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F8ECF258A9931347A9663B788331F1 /* Bolts.h */; }; + 6ED4CEFEAA7F0414622FFE7917495648 /* PFBaseState.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B7AF33E13FC52EAA4B353E736F48431 /* PFBaseState.h */; }; + 6F82531660EECBDAEF14269319E36A07 /* PFConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E210FB710EEFE34D8FB35378F3F6F935 /* PFConfig_Private.h */; }; + 706A7F05867293F78C927FDF9C10E745 /* PFFileDataStream.m in Sources */ = {isa = PBXBuildFile; fileRef = E43B375F1DC0B3C39D4F8CBCFA1B51A2 /* PFFileDataStream.m */; }; + 70AB083C56EDE94F0CDC6A27CE2D00CE /* PFConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 310661341392FCCCCA69B3D4AA745597 /* PFConfigController.h */; }; + 71553F54471B3ABC03CF3B999CE5915C /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 023787FB361088A0CC1401AF3EF0BD44 /* PFUserState.h */; }; + 71F348ADDA3A9335484A60D7908EBE62 /* PFInstallationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 82A5F04959D1ADFDEFFC1808EF20F799 /* PFInstallationConstants.h */; }; + 73182BB18ED83668DED496548790559E /* PFFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CECC0578B9328DAEB8EA4E274B9D16A /* PFFile.h */; }; + 7396B761D2B10B38F3FB6A02E916531F /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 419B671E948384A84974D819F4F24FBA /* Pods-dummy.m */; }; + 73BDD98109DBD5F8CB2BC86755DA6963 /* PFPaymentTransactionObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 45C24BC4DD0B5F2B7F803B32EC634F9C /* PFPaymentTransactionObserver.m */; }; + 746236A021A40EFF2B68DA0B1D1835E0 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A85428811E6DF1E07CDC7F512CC5CC56 /* Security.framework */; }; + 776745BC8D80FF6CC924AB8DE9FF048C /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FA13E8424FDF032B807EB307AF448F7 /* PFUser.m */; }; + 77E89B2E0FF110D13685EF42B8AFFDDD /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = 99FC3FA412F7A62CE7905F3F3DB1A2B8 /* PFBaseState.m */; }; + 784BB509549AB4E658F95135964F8BAA /* PFRole.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EA62081F6F193B86D2CDD0A04D0E99C /* PFRole.m */; }; + 792E4D8A30E2483D3D4E4154EEDA8636 /* PFDefaultACLController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2218553C181F20F306EC36D9B7169974 /* PFDefaultACLController.m */; }; + 795A66B7F6728153ED7333F9304F9A7A /* PFTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2F5693477E620DC6D5E2C3F6627CDA /* PFTaskQueue.m */; }; + 795E704A17919AB70FF6F5738289A44D /* POPAnimationExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = 22DC4C87D619EF0F28631B5560E82333 /* POPAnimationExtras.mm */; }; + 79D6635C152CD06216FD5C6439F3CFE2 /* PFObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DB9AD91F894187B691D13713E1FB4D9 /* PFObjectController.m */; }; + 7A128642C01CF8CA4F8EE6A6E4C72F00 /* PFFileDataStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 6516FEAA3036D59756B8161A5A9E7918 /* PFFileDataStream.h */; }; + 7A19C849063F55F3F2897A6FA6040B00 /* PFMutableFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 0007F67CE44CDB26AC0B26E0B4438F17 /* PFMutableFileState.m */; }; + 7AF60B83195278F6A42385CCE9F4CB35 /* PFRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = CA696D9F1B6B454ADB7158523225ED1D /* PFRelationState.m */; }; + 7B00A9814CF626F0D53212A4918637CB /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = 97519DB5264A8748FB5782787D62615B /* BFCancellationTokenRegistration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 7B3342EC54DBD89E80E6F767C016E0CA /* PFCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EA6C82779BDAB43BEF4E9F00620B3CE /* PFCategoryLoader.m */; }; + 7B99231436CB0981EC5113A681AF7C8E /* POPAnimationTracerInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DA58C3428E2A0E2F88C2A0522297274 /* POPAnimationTracerInternal.h */; }; + 7BAFF7E342EDAE7B1819B699CE406D2D /* PFMutablePushState.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B2C19C0AF74CAAFAD47C599A4E9A495 /* PFMutablePushState.h */; }; + 7BB08B1B05AD918C30AE988E95A09D50 /* PFOfflineQueryLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 696FA42E303EDB3CADE000C9A7F03B68 /* PFOfflineQueryLogic.m */; }; + 7C3716AA37A820FD62570BB16F87ECB8 /* PFProduct.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C05D3A3DD0A525F6B31D006CCC2D2F4 /* PFProduct.h */; }; + 7D2E1DA076E379421DF5A9E74C0FD4DB /* POPBasicAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = F54B1AE39CAF0CA846C1C729B033E047 /* POPBasicAnimation.mm */; }; + 7D39BBF1D1FD51363802C929BB8C6515 /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 714C2B37BE3060D4E9F3C32DD8DA8D04 /* BFTask.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 7DC645E712D9190C15F71B1B92844D2C /* pop-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 59B3FD41DEC22C5891C9B83C27BC25E0 /* pop-dummy.m */; }; + 7E098727FB711EB6459D6FED443F53D5 /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = A52D3DEFF51B24F1DDCCC3F6705AB35B /* PFCommandRunning.m */; }; + 7E9DA08882BFE2697F1C0E493DB63AC3 /* PFKeyValueCache.m in Sources */ = {isa = PBXBuildFile; fileRef = DDE8EAF4000D3A40ED79006C50ACC68B /* PFKeyValueCache.m */; }; + 7EBC8051564BAF8D7D3FA8900D846FB2 /* PFObjectState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = ACF9532A0D0C66EC20F4225EBD285526 /* PFObjectState_Private.h */; }; + 7EE77B776CF54D5794EB5D9DB5FCF8D4 /* POPPropertyAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = F81E8633F1E784423FE8B9BE16D38981 /* POPPropertyAnimation.h */; }; + 7FE988AA3ECD89B7101E701BB7302E21 /* PFUserAuthenticationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = E57BA8CF64D8018BCFEB289F81C3B448 /* PFUserAuthenticationDelegate.h */; }; + 804C70F77F75F0E75ACC3E3E4B47B727 /* POPLayerExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 9663A817A809169745F3F8E987FFE076 /* POPLayerExtras.h */; }; + 8113CBFC7712DB6C088AA0E319CD74DE /* PFMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A7AF22DC435894F3927644A0B475DFA /* PFMacros.h */; }; + 82871F1A3C4D6E604FCC1567E42C1275 /* PFFile_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FB82515BD6D0F9EC91327CB819F8BC6 /* PFFile_Private.h */; }; + 85131753F499D61CFB65053C9BB9F7C1 /* PFJSONSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = B507DE9CFF3C90B0CFF815EF53AF8474 /* PFJSONSerialization.h */; }; + 85996EC1B7350B6DB8689842667A01A6 /* PFMutableACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F5A413E6DB1455C1427DAEBF27B2133 /* PFMutableACLState.h */; }; + 861582A5DECCCCBC09E5D9B966806205 /* PFRelationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6753A9356424F2F8B192F9B14278EE8E /* PFRelationPrivate.h */; }; + 868BFBCD8263F71F8A14CBBDDAF5B748 /* POPLayerExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = 197635F0BFB93E63E82503F09B7AABBF /* POPLayerExtras.mm */; }; + 86AB6AEEF3D388454B3C58953671251F /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 94DE9F283B3DD4A47D7A8EA13D83D2C1 /* BFCancellationTokenRegistration.h */; }; + 88379476F82457BD1128F25055903097 /* PFOfflineStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 84ECBFAB9763ED2C04848E86CC5D6C1D /* PFOfflineStore.m */; }; + 88664732055B4AEB8258A9F776478825 /* PFMutablePushState.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7CA0102C3FA58C58F19240D8C4672 /* PFMutablePushState.m */; }; + 8925A30FFB9B9FD7A1F77E75DD4BB4FA /* PFOfflineStore.h in Headers */ = {isa = PBXBuildFile; fileRef = DD934234EB3517E8F2CAC1D699D9DC6C /* PFOfflineStore.h */; }; + 893CB7651BD45123335D9DFF5FBF2995 /* PFObjectFilePersistenceController.h in Headers */ = {isa = PBXBuildFile; fileRef = FD18AA79D76C38588E1A0AE95A99AE0D /* PFObjectFilePersistenceController.h */; }; + 8A943C6875FF0162EF1AEC7EBE5A127A /* PFEventuallyPin.h in Headers */ = {isa = PBXBuildFile; fileRef = F25C4200A9FE7F2B396804D09A24AFC6 /* PFEventuallyPin.h */; }; + 8AF4CC8804312196C7524D40045DDA52 /* PFCoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D24EDB2D5A2B95E2AC01499F225F585 /* PFCoreManager.h */; }; + 8DB2D81BD3208535DD815967F6C49A4F /* PFRole.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A8C828F2BF737F68E0CF5F2CE64D6C2 /* PFRole.h */; }; + 8DF9960DD96F9AC25E32BFDD4A3B53B7 /* POPDecayAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C560616DDF5273CF7C53EF72EA6ED45A /* POPDecayAnimation.mm */; }; + 8E33299A86FF84E02098DA642AD6A10E /* PFFieldOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FAFDD952B22B5410869339CD24F946E /* PFFieldOperation.m */; }; + 8E430CB3375D8ECB766249EA74730DEA /* PFObjectEstimatedData.h in Headers */ = {isa = PBXBuildFile; fileRef = BD06D82A2D98EDF6AE058093F67CCA71 /* PFObjectEstimatedData.h */; }; + 8EF3091ED56E21658415F17799557ED4 /* PFObjectEstimatedData.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D33981E62B4BA883B0FBE4A4DA1C812 /* PFObjectEstimatedData.m */; }; + 8FA39AC641BAE708A7EE2141F22CD4BD /* PFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = DD763184372CC604F25E4FDD0865B288 /* PFObject.h */; }; + 8FC831A96A9845FD32E258BC486937EA /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9ADF726213C599DDAE3F7A1849BDBF6 /* PFEncoder.h */; }; + 9088AFD3E6C678A42A8E0189F65F73B6 /* POPDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 90DA3C63E9AD758336342BC51C0BB859 /* POPDefines.h */; }; + 90DF839DD23B48C7F349F4E6C140CC53 /* Parse_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 588102B50CAE5BFD6658FF5042965B9E /* Parse_Private.h */; }; + 91D0209E7085A403B6EF6BACBACD9D5D /* PFUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B58384502B9F28F6975F16F9DB0EFF3 /* PFUserController.h */; }; + 925B22ED8DEB4DA9ACC946D2F9057997 /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = CCF8CEA9A6064ADBBF6FE4C06F58AC6B /* BFCancellationToken.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 930B72666B9FEA3D4172BEBB0EA55FF0 /* PFUserConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = F1C86CCCF50B7B1651DF1DDA93ECB2A7 /* PFUserConstants.h */; }; + 93B58C9AAFA9D0DC02CD2ACE750D9C96 /* PFACLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = CD5E24516E8C55549E6229A4A4A3E50C /* PFACLPrivate.h */; }; + 94BFE73B7E00A0FED987F553B0DCE94E /* POPAnimatableProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 313669CF0D1BF49C96C85FC593F4BC1D /* POPAnimatableProperty.h */; }; + 94FACE1C5E4B42AB129DA7326E4E04F9 /* POPAnimationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F210DEEA777E0BF1995DC3570CC616E /* POPAnimationEvent.h */; }; + 956D98E26539A6A2F0E81468C820B569 /* PFMultiProcessFileLockController.h in Headers */ = {isa = PBXBuildFile; fileRef = 74EE96B44DF0116B1160526B21D7D189 /* PFMultiProcessFileLockController.h */; }; + 95B2EDE938A1CF2D16213FB94E28D45A /* PFURLConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8B4ABBE8DA9D24096F873234FCA24C /* PFURLConstructor.h */; }; + 966900CAD39E8B592A35F8401549A86D /* TransformationMatrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E056FF5C4EC38A55B45FB52F395D72E /* TransformationMatrix.h */; }; + 96DCFE0E10BC455B9673FDA3ADFC08B1 /* PFMulticastDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4051AFB557520935D16F093222B0C0BB /* PFMulticastDelegate.h */; }; + 976B4AA8300CDE0748E1737C6700E72B /* PFObjectController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C5B446A2C8083573E71F021EB732F282 /* PFObjectController_Private.h */; }; + 97B018ECAB99E02838108858A9C5D9ED /* PFRESTUserCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B32B43DC93B94CD2FD151A51C7009B2 /* PFRESTUserCommand.m */; }; + 97D99230703F530162B00666ABC86E2B /* PFInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = 16E2644C0CFB5068F39B60EA663C06F8 /* PFInstallation.h */; }; + 994830D607E053C4CC8657055333C126 /* PFKeyValueCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 68F8CC838971F8BE4FD097EA7C5BF494 /* PFKeyValueCache.h */; }; + 99E9F4422BD6659050CAD42953A4A7FE /* PFRESTCloudCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CA96AB87A674FDD5847C707289446B2 /* PFRESTCloudCommand.h */; }; + 9B57BAF0B1A27BAEB40E6E17CA6355AB /* PFACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = BDBDCD188680D0AF62B9AC8AE7D15A8C /* PFACLState.m */; }; + 9B7BB3DBA4067247D4AA58A5C0B52B11 /* PFRESTCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = BF436F013E06183E4E80FEDB3EE6640C /* PFRESTCommand.h */; }; + 9C53501EEB56F92B450024D8E97054BF /* PFFileState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = ECEB10403A7DC566C15134DFE3373AC2 /* PFFileState_Private.h */; }; + 9CB9E73CBDB67F0BB0F98519571E6386 /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BB217AB66F98AB5F05CBAB65838FA70 /* BFCancellationTokenSource.h */; }; + 9D2280F3879F335F53726BAF1720A4F4 /* PFMutableRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = A94E11CCEE95914D7CE1B1B35E7C1F89 /* PFMutableRelationState.m */; }; + 9D58D3CD652D24573594995023EA6D00 /* PFFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FF58ECD6BEDF747B767ABEBBB293774 /* PFFileState.h */; }; + 9EE27BE5368FE1C2920DAEC66AFE60E5 /* PFLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 524FE09AA008388A357FA29376EBA283 /* PFLogging.h */; }; + 9EFED924B760485386CCF5EB3BA87A63 /* PFAsyncTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = CAD41F16643CC7AF395C0955965F308A /* PFAsyncTaskQueue.m */; }; + A03FD80CF4F2A5BE86D5337AA86EEEAB /* PFPinningEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AF5597A50326B2C756F30471E7EA8BE /* PFPinningEventuallyQueue.h */; }; + A1BA70FD107E98C3493B500B423C42E8 /* PFOperationSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 58B7C9659B0B47DE31498D5601CC2E12 /* PFOperationSet.m */; }; + A23412D088BB709BA230993F0381C88C /* PFFieldOperationDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FDE3C12C2A761D6DD2E3EFE88D9A85C /* PFFieldOperationDecoder.m */; }; + A28BF51BFC8CE83AA10CA0882B57AD94 /* PFSQLiteStatement.m in Sources */ = {isa = PBXBuildFile; fileRef = AF50C03C543FAF9B976475CB98E20B0D /* PFSQLiteStatement.m */; }; + A3534AED1EA0F6B4AF89B407FF2CCADE /* PFEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 512DF9E7249F58F9AF45B707F9C3949F /* PFEventuallyQueue.m */; }; + A37746B83E3B6776A578ACE28933CBD8 /* PFPropertyInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = FFA1F08A1EF895FBF3B8FD036E125613 /* PFPropertyInfo.h */; }; + A3BD95AA5A59D14116D714D0BF6DE183 /* PFObjectPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = B40C2F17FC5388F0013F8D1C257B70DC /* PFObjectPrivate.h */; }; + A612764E17DB84BC666DE6C36AE5D431 /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 527000AD7EF33A01F4034400FB51B6E9 /* PFURLSession_Private.h */; }; + A6C91C7166749D37E01ACCA5C2B74B5A /* PFPushChannelsController.h in Headers */ = {isa = PBXBuildFile; fileRef = A2F0842045651D9FD30403B5033648D7 /* PFPushChannelsController.h */; }; + A7E2FFC1434BBFE824CE9EE09E6E2E1A /* PFInstallationIdentifierStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 349789B8BAC6B5134BB027FB59B2DAE4 /* PFInstallationIdentifierStore.m */; }; + A9B701428585304B432F6FD45D7EB707 /* POPAnimatableProperty.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9565C73D5D4BE79747E60DCF1557E71 /* POPAnimatableProperty.mm */; }; + AA0189A6FB9572B5BF87E3B0DD1F872C /* FloatConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = C091E831068E3E504A40AC6932B39C87 /* FloatConversion.h */; }; + AA3628EFC6E58E752EF07B229205B3EB /* PFOperationSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 26C358BF063BCDCE76707FB07B405CB6 /* PFOperationSet.h */; }; + AB7CCA495BB2E31A67FBD113F45DF3A3 /* PFCommandCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 13EA057769889745EF622AD275B30A3F /* PFCommandCache.m */; }; + ABA34CFCB348BB50E6661E3CCF434B1A /* PFFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B3B39A4E421EE0FF21AB42B74EE1955 /* PFFileManager.m */; }; + ABB935DE5A114F1A4B541F17F2FA03A9 /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DC9003F64939358FF50986ADC0DF824 /* PFInternalUtils.m */; }; + AC116C2D91DD098890B38084CBF030EC /* PFLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = FBC24FBD24EFA4956FA52BFDBAE5DBB6 /* PFLogger.h */; }; + AC8E81AC6849346D82D690177DCF9150 /* PFPropertyInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E5C09D44589D6540714FF487D97E0C3 /* PFPropertyInfo_Private.h */; }; + ACB9408C6FC53B87208559D1C21EC621 /* PFUserPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A2313F192E2841C83555BDC26D3866B /* PFUserPrivate.h */; }; + AD7773AD7D0B865CE5E4F516ED163DF2 /* PFMutableRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 797597C3E809F5E570660958DD8719D8 /* PFMutableRelationState.h */; }; + AD9492E2817C3879542A3391BD8BA9CE /* PFConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DCE002C62F26D3852FE0C2CB25CACEA /* PFConfig.h */; }; + AEC0AABC2226F08C2EC024E94093A69E /* Parse-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 139FB17B5AD5B2BD40E10B8D2177BEDC /* Parse-dummy.m */; }; + AF07EB1921C3ACFD1186E3827CAA5A38 /* PFRESTSessionCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = C60907A5603A25A8E7EF01FCD0B44B11 /* PFRESTSessionCommand.m */; }; + AFEBB8DD2F176DBEF3E1F0FFA6FE7AF8 /* POPCGUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0A9ED47A0EA56543BEB2F83DFD6122C8 /* POPCGUtils.mm */; }; + B03E6AF1E598EC1DCAF4A7DDC0DD5489 /* PFObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 47A6E2FEA4744CFF9330F4BDD5E274CE /* PFObjectController.h */; }; + B0B417C67B226E210B5BAA71B6065E96 /* PFEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BEEAEF9152946B143C6C357FCF24E5A /* PFEventuallyQueue.h */; }; + B0BEB23FC1059482B01E0D220D6DA2B5 /* PFInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CBB64CFFD32EF20996F33E08CE27F2B /* PFInstallation.m */; }; + B0E9BD1E45B086C6992F0EA64B78B46D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D414E542C5F0101B04B821F89CB601B6 /* QuartzCore.framework */; }; + B21C1733EC906F80FE9CCD426D9442DC /* PFOfflineObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 10634547D3CF0DBCA1FCF7438AB74C39 /* PFOfflineObjectController.h */; }; + B31A69D71BE4A4F9C56CE52F2597B0B4 /* PFAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6006204F33FEC54FE00EA9417DDC3F22 /* PFAlertView.m */; }; + B34504AFEE1AC70E9E0A1282A1986D2E /* PFBase64Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 0241335D86A1EA4D1D2367A14A072B98 /* PFBase64Encoder.h */; }; + B3CF982DD6F4DAAE77CBBBE9B1282C30 /* PFUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 4840DBE7CE64AE75599772CB21A51C7E /* PFUser.h */; }; + B4380967482F62131B85509257CCCB2B /* PFRESTCloudCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BACBB72ECB77F59482B166BC28EA869 /* PFRESTCloudCommand.m */; }; + B454B8E5E316FFC8E1D2E1C730967866 /* PFPropertyInfo_Runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = 005D78329EE21D6E17E5C61CD7F99399 /* PFPropertyInfo_Runtime.h */; }; + B488F531B26E7BE8EB16185D9B3D33CB /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 7566A44BF4C7FE91F74365E72E1C4073 /* PFDecoder.m */; }; + B4BE97FFB864542992C29041C5185202 /* PFURLSessionCommandRunner.h in Headers */ = {isa = PBXBuildFile; fileRef = 4500DD87BF3AB695EEEF0D03C9E94067 /* PFURLSessionCommandRunner.h */; }; + B50C52582D730164A3C8A53F6F25239B /* PFErrorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 0638F31DB969AAA2089D7F79383493DD /* PFErrorUtilities.h */; }; + B5B86F0561840C9F3408D9A3CE3BADD0 /* POPDecayAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = B0CE575CDDE0B1795BB8B88E0B49ACA0 /* POPDecayAnimationInternal.h */; }; + B6DA545595D3CE47BC8F81E673889B4B /* UnitBezier.h in Headers */ = {isa = PBXBuildFile; fileRef = 96015F1C746803D9318614B277F71BCB /* UnitBezier.h */; }; + B8876C85293D37E405FA3F56EC170BB2 /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = EC2BCF421E5556843D2FB60E51F79F87 /* PFAssert.h */; }; + B8BF169D2C7B9AB5A95C714C2A1E9BB0 /* PFMutableObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = E94D7BACCC5E81069DC1DA732C343E3D /* PFMutableObjectState.h */; }; + BA9989C7128E968BA7D20CFEB392AE9D /* POPBasicAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 212068113F29FA47D17730ED388F8706 /* POPBasicAnimation.h */; }; + BB1D07345C56DB2E88AF60CBDAF05EAA /* PFUserConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EB9E22A1797EF8F815387B3148987B7 /* PFUserConstants.m */; }; + BB7BBA7B572300771B0DB9EDFF360F25 /* PFRESTAnalyticsCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D75702C8583CBA05067061643DEB98 /* PFRESTAnalyticsCommand.h */; }; + BB960D63E0B0D184BA67F74168A5038B /* PFDateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = D712B949F0E1E31622675FBDC8C2BD57 /* PFDateFormatter.m */; }; + BC0F7D8E0E2AD3BFBEEC7F2B78BC59C6 /* PFKeyValueCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 52DA55B0C48801979739E451008199A5 /* PFKeyValueCache_Private.h */; }; + BCBBA9D39E73E338C6A6C059CE03DFA7 /* PFUserAuthenticationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B31CEE7768E9065A1168B8DFC0BAB53 /* PFUserAuthenticationController.h */; }; + BCC550CB5440C1D466BB3BC4E78B83E1 /* PFSQLiteDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = C7A82AD0CBC0B85B3BC3F38D91D613A3 /* PFSQLiteDatabase.h */; }; + BD6626643DD9C3A12AB86F9361EC89DB /* POPAnimatorPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0476012CEBFEB22B5F0926994E6AEEE3 /* POPAnimatorPrivate.h */; }; + BE267A18590772AAA04953604BC7B310 /* POPAnimationExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = C1B6A53BFD919966B87CD6FBFD89CE1B /* POPAnimationExtras.h */; }; + BEE7655DFBBC1AB9D4F484DDD2BC7347 /* PFAnalyticsUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 861462FD667FE3B82B6900562A7A672F /* PFAnalyticsUtilities.m */; }; + C06E01391A45E76121806BFE18C36C40 /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EE03D2CE9262E74BE101A9AD7F66934 /* Bolts.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C195BEAD62324084932C336CD0F167F4 /* PFPushState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CBC8583C0448880C8739111436630AE3 /* PFPushState_Private.h */; }; + C26697DA5659534927CB60C187CA38B7 /* PFURLSessionJSONDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D874E8C6013F838D31865D7CACFFC8C /* PFURLSessionJSONDataTaskDelegate.h */; }; + C35E8AAC7757AF2A72F3F138CF303A5B /* PFSQLiteDatabaseResult.h in Headers */ = {isa = PBXBuildFile; fileRef = EB22EF6AA771F815D6776E538BF091A1 /* PFSQLiteDatabaseResult.h */; }; + C3C07815E5AFE68241C34F5DB2196C34 /* ParseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 22FDFA3B8D05D54B5BB969DABCBC6413 /* ParseManager.m */; }; + C5329C8CE1773B4034441DC996B07093 /* PFRESTQueryCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 4922CD9E2B9E78912E88BDDA753C4FB2 /* PFRESTQueryCommand.m */; }; + C5750E2AEE5F999C2FEA63E5A6071552 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = B4D6A8E418A8D134A61BFD6E094F65C4 /* BFCancellationTokenSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C5FED0ECFCB113A0AD2C656D0BB62934 /* PFRESTObjectBatchCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EE3B22DE1F33BE14763458A191128C1 /* PFRESTObjectBatchCommand.m */; }; + C6087786013E123A5BA24CDA01D12829 /* PFACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 126E0178D6FE6C3AC0790CCA7F490DE8 /* PFACLState.h */; }; + C6596728704CF2E0D363D6F21E5C2F2F /* PFPropertyInfo_Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DBA1E4D4138BAC1EB874D74D4AE73C1 /* PFPropertyInfo_Runtime.m */; }; + C7BEC270DC7D5AA4DD7D8A81575E179F /* PFRESTQueryCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 43DDAC0517DD7E2A075642D9FB379D04 /* PFRESTQueryCommand.h */; }; + C82A861227CAC478415817B56AA81AB6 /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B0BA363E4B429F291596ABBFF279C44 /* PFGeoPointPrivate.h */; }; + C84077A6ADD4188E00247A89489A5E5E /* PFFileController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DEA9336EA629BC874D1CD9F3933E83C /* PFFileController.m */; }; + C8E14645C3547457621C6DFD0CC514C8 /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BE5F0A1B5CEA848AD6F87144411D8B7 /* PFObjectFileCodingLogic.h */; }; + C90B605396530B452AF99A7678EA51B3 /* PFSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D51B5DC898167C5060CB1C2CE1F6CA6A /* PFSession_Private.h */; }; + C9FB222E477526D6DF5C1EF357248970 /* PFMultiProcessFileLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C77B473F634527F1102E3093D9ECCFE /* PFMultiProcessFileLock.h */; }; + CAC625E628AAEF2445AB4B8D62123557 /* PFRESTUserCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EA667FBF478CB2CC7CFE38041F96D6F /* PFRESTUserCommand.h */; }; + CB466BFC29E239E0CAA89792EEB55773 /* PFHTTPURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 08FC3ACF4FB85302DB39490D9E032664 /* PFHTTPURLRequestConstructor.h */; }; + CE0621CDDA5B17681FA105A924E561B0 /* PFThreadsafety.h in Headers */ = {isa = PBXBuildFile; fileRef = F47B9418D1EB46362FA2A6190969EF8E /* PFThreadsafety.h */; }; + CF5B8E8AF1255B0F020DD1C5143FCE22 /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = A4680CAB4F1F20CE4E4FF134C9A11A0D /* PFObjectSubclassingController.m */; }; + CF6E9D57E0097D77F7D794534CA879BE /* PFQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = 895E6BCE8395CB2A323176F349B9EFC6 /* PFQueryState.m */; }; + CF90CCECF348956BB5DD62B17728C38D /* PFRelation.h in Headers */ = {isa = PBXBuildFile; fileRef = EADEB4FFD06A826AC14B90222A65ED15 /* PFRelation.h */; }; + CFE19C2B8337074ECB614B8E15535616 /* PFPushUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CFD4EDE572C72678AC61FDC5C92AAC4 /* PFPushUtilities.h */; }; + D044D268A07FEADE73CB38752603CB19 /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DD709EEB7F953B2BFD2FFBF243EF632 /* PFInternalUtils.h */; }; + D4224969BAFBC6138FFC872CCC829FB9 /* POPDecayAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = B0F7BCEE9A871E1193D694931FA31E17 /* POPDecayAnimation.h */; }; + D5792E05DB34C9521294B06A622AE040 /* POPAnimationTracer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E88590D291A3C131FC32F9BC9A80038 /* POPAnimationTracer.h */; }; + D609DB3153D08C9401FC6FD046270B24 /* BFTask+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E6CFB883952C27A92DBF7CF40F382619 /* BFTask+Private.h */; }; + D64AC9CDC6984455A31AF0E9AAFBFC10 /* PFRESTObjectCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = A3A336AAE714C90D57D61FFCE1F62540 /* PFRESTObjectCommand.m */; }; + D6E73AA34F7F1B47815DC967085A72EF /* PFObjectLocalIdStore.h in Headers */ = {isa = PBXBuildFile; fileRef = A3F9EF3F957FD4DB2D6C601F067168F7 /* PFObjectLocalIdStore.h */; }; + D7D4F9F182AC20F7C3BBA3592DA8404E /* PFProduct.m in Sources */ = {isa = PBXBuildFile; fileRef = 602F796D464ED522B3E9F48F6B4306A4 /* PFProduct.m */; }; + D83868EA3920350C53488A4C4F9A5565 /* POPGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = 3155A15C877F794FB064A4A0CEEB2F13 /* POPGeometry.h */; }; + D8FAE63EFB668703E06E87D06E27DD10 /* PFInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = C1E1FCF7C3F2C64010D8E7CA6C8D29A3 /* PFInstallationController.h */; }; + D923EB05E2C32216B57B27EAB1F4E7E4 /* PFSQLiteStatement.h in Headers */ = {isa = PBXBuildFile; fileRef = E2E9E2D3066C78DC48958D6FD03ABADA /* PFSQLiteStatement.h */; }; + D9D15D14C4BCF21EEA86D07BF45B88B1 /* PFProductsRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = C623372365DC2AFFFE5053AB44C49CAB /* PFProductsRequestHandler.h */; }; + DA17F39593B4824BBC5926AD390390C2 /* PFPushState.m in Sources */ = {isa = PBXBuildFile; fileRef = 186E1997DE5BBBD9E2A895D71A7BC915 /* PFPushState.m */; }; + DA5A140E5FAF805F07B32A67DD6AF45F /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 4312B15964C63A373BA6C191FD761444 /* PFURLConstructor.m */; }; + DA7C2EEEC87D1F7FE3001B1E0DABFF5C /* PFURLSessionCommandRunner_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CEBD5ABCFEDE938F240830CC6F863AE9 /* PFURLSessionCommandRunner_Private.h */; }; + DB11B9F73D9B0D3F02327B6CDE23A9AF /* PFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FDB9AA6B98C04B1C0D671A64BEEFEED /* PFNetworkActivityIndicatorManager.m */; }; + DB29FAEB95798B3BD6680DD88F69AF85 /* PFSessionUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 972EBE95D808C0CA2DAD94DDC5AC5F1D /* PFSessionUtilities.h */; }; + DB47C8872FD56076325D22343CDD7B69 /* PFPaymentTransactionObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CC0DF9EFC230F428EBC36272C09AF04 /* PFPaymentTransactionObserver.h */; }; + DB7880E757BE6F38134F25167A2F59EC /* PFCachedQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CD1F5B90828B5EDD6A87F8F8B8CBEC5 /* PFCachedQueryController.h */; }; + DBEF60495B33D1BA4C7BA3C8E3A24968 /* POPSpringAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7371F16336283F2D8BB2A199CD4DDEF5 /* POPSpringAnimation.h */; }; + DCD7B3F2B92EB5E095480309F3F6C813 /* PFWeakValue.h in Headers */ = {isa = PBXBuildFile; fileRef = AA2F4B0C1884B9FA8CA4005505904B4F /* PFWeakValue.h */; }; + DD102CB743C2258E153D8159D5C0EC14 /* PFQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2007FCF4B24326D21653DCD5F4F03D9E /* PFQueryController.m */; }; + DD7898873BF904FA0E114437CA1762B3 /* PFRESTSessionCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E0F1E598FDC4AD2B9344C0BE42CEF0A /* PFRESTSessionCommand.h */; }; + DD9352278D2CECD93F57DB53EC97D291 /* PFPurchase.m in Sources */ = {isa = PBXBuildFile; fileRef = F05B147B865A347DA8B9891D3D9B89BF /* PFPurchase.m */; }; + DDFA75763A11603500811925FE92E6BF /* PFPushController.m in Sources */ = {isa = PBXBuildFile; fileRef = B7EE7F890CF09AF26E1191C3D4540CE1 /* PFPushController.m */; }; + DE67E043D3E6DFA26ED0608672E9EDE4 /* PFCurrentObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FF980C8F6DFEF3C3FB8C7A56B963C15 /* PFCurrentObjectControlling.h */; }; + E0144A342BDA68B208D02A9FA946E3F3 /* PFWeakValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C42D1919287483D0731E55C7039390D /* PFWeakValue.m */; }; + E03238690A5A21C9B8ADCC9737633061 /* POPAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8336CCF2280C58E6C367DF4EC0EBB7B3 /* POPAnimation.mm */; }; + E0822053495861CD160B22D518AA2282 /* PFLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B16B8588E9DCC56E87F38E324BE2E50 /* PFLogger.m */; }; + E23CC6BD6AE207AD1C89F018982D1BEB /* PFAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CD59F7A3B1C57C26A073580850CFD7F /* PFAnalytics.m */; }; + E4CA9C37AFA047E32E33ECF5C4184F51 /* PFNetworkCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 4671EA53DD8AE149FB0F02838CD24C37 /* PFNetworkCommand.h */; }; + E66A972C821119D091B99E54200F7FC0 /* POPAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 94815AA3EE3CBA04CEE85515701AD534 /* POPAnimator.h */; }; + E7E6855E0A73652B303B572355D3AAEE /* PFFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = C5CA9676B6BB4F73C05AB36945596A99 /* PFFileState.m */; }; + E7F1325DD18D11574F43630DF215C30C /* PFRESTObjectBatchCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = FC99C2A819C4722A15EE59C87645E47F /* PFRESTObjectBatchCommand.h */; }; + E896679BD643C694FAC4B7C1A5B43871 /* PFObject.m in Sources */ = {isa = PBXBuildFile; fileRef = C7A179A9BD2533E252132EB24EEEE7AF /* PFObject.m */; }; + E991C7550D546C3319735688EC5D0369 /* PFProductsRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 751B683157A512BFFD27276B937C7FD6 /* PFProductsRequestHandler.m */; }; + E99450CFF3FF02596EAB7E7D87FEDCA0 /* PFObjectFileCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = BBFB017F02B69A95630ECA78C0507891 /* PFObjectFileCoder.h */; }; + E9C084ED73C6D3CFEB4A0414EDFF8405 /* PFCommandCache.h in Headers */ = {isa = PBXBuildFile; fileRef = B0D65D1A09B22A4BB4B1C9A5BD78B77B /* PFCommandCache.h */; }; + E9DF1006C8F4119B1A23C8A964D4BDCF /* PFConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EB55315EB3A3AB23E3EB95B4B89971F /* PFConstants.h */; }; + EA78E9FEB71E4A999EE8B4FF325B4F8C /* PFRESTPushCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 943A16F9CDDE8E3F97A4CC444A9CBD38 /* PFRESTPushCommand.m */; }; + EB965B246F7206AE338A7DF882400A0E /* POPVector.h in Headers */ = {isa = PBXBuildFile; fileRef = D5CE48778301C24CD288B08DDA441605 /* POPVector.h */; }; + EBD4BC102DFB46F91C3141667D6C361D /* PFObjectSubclassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 791F22142433CB687B6BD4F07D0950F1 /* PFObjectSubclassInfo.m */; }; + EC6531B679723631C5F070DC36B56DE8 /* PFRESTPushCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 022E40D42E74E0C92C4963F2BE8E4FD5 /* PFRESTPushCommand.h */; }; + ECB81FD33F70B06684E4A50AB3F75976 /* PFLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 130E12A377FD4C1EC29AF55964B70A23 /* PFLocationManager.m */; }; + ED0BF4FE2052871A5C209B796BA9D91E /* POPAnimator.mm in Sources */ = {isa = PBXBuildFile; fileRef = ECC48BF18D3BD01C21B65648709A45D6 /* POPAnimator.mm */; }; + ED28BE739856D7DFDE74F4C6488C0B09 /* PFFileStagingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BF3525974C036CC12A09FF5C9633C85 /* PFFileStagingController.h */; }; + ED3821443DA3268139C3CE29A592C03C /* POPAction.h in Headers */ = {isa = PBXBuildFile; fileRef = F3A985A006B0CCD0116D8FC53C4D1834 /* POPAction.h */; }; + EDE32F3C5ED3FAD54ADE2A858DEC5B89 /* PFInstallationIdentifierStore.h in Headers */ = {isa = PBXBuildFile; fileRef = A3529F546C50E5FA9E92AE069C4127AA /* PFInstallationIdentifierStore.h */; }; + EE3A3C294C3462AA62E477D5E167306A /* PFAnalytics_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 56743024027A104903BB088C1FED631A /* PFAnalytics_Private.h */; }; + EE83BD490034A515070EA6E8E37E227D /* PFACL.h in Headers */ = {isa = PBXBuildFile; fileRef = 64541D2ABD36F76DA73F677AC3E20A1A /* PFACL.h */; }; + EEBDC1EBFFAA9C81CBE8579A76CC0A68 /* PFURLSessionJSONDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = EEA9CEB6EBD6F7D905225F3028208411 /* PFURLSessionJSONDataTaskDelegate.m */; }; + EEF00303ACA6F9A8159E892D01C4F702 /* PFURLSessionUploadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = BF8B668575E32B4BC03D5A86BBAEAE74 /* PFURLSessionUploadTaskDelegate.h */; }; + EF97F68ADAA1FA736F080BC613BF7252 /* PFPushUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9E249BDEE7198A0DA97A4426AE5431 /* PFPushUtilities.m */; }; + EFA2B49A8A6A4CC569BABF1A704B24CD /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = E35E8AB9F2B4D23971F6C53C0730A2F8 /* BFExecutor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + F0B30B2AC9671AA2F42D8919B8D3C642 /* PFPinningEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = C7F96DFC12AF4F8CB8DB480DC2A6B5DC /* PFPinningEventuallyQueue.m */; }; + F0C51D05571753A00CC8F350E7A39DDD /* PFGeoPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = E4FD3B2FD49993D574EF9A49D6C13261 /* PFGeoPoint.m */; }; + F13EE6B0A90AA4D1F41B773D316DC97F /* PFPushChannelsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 90F15F6DE2D590C1823069FF6E87E823 /* PFPushChannelsController.m */; }; + F16F2BD2412E71A0F0800BA0143A10C8 /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E5E6D3B44810118191C60A9772E4E48 /* BFTask+Private.m */; }; + F1869B0A07F843009A3268A12F2F96CF /* POPBasicAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F59C51782AE555897A5B92D6B3CECD1 /* POPBasicAnimationInternal.h */; }; + F26B4E9439D05674BDC3EC6D47419E65 /* PFURLSessionDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 32D7E6743D001141788DFE84AF635291 /* PFURLSessionDataTaskDelegate.m */; }; + F296EDE13ABDBAD0A6C57038E5891C38 /* PFReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0F8BFFB2B329D3F8B455B14472E5E9 /* PFReachability.h */; }; + F2F202A53F25BCFF106B2F77136BF78C /* PFInstallationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 66B0DF4B48195D78B041D58D3C3AEE3F /* PFInstallationPrivate.h */; }; + F353B70A061E08623279B54744E15DA7 /* POPAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = ED596D85957A49EC6092EC8EC38FCE49 /* POPAnimationInternal.h */; }; + F388B7C3B4B0325048D4B5E4C1BAF904 /* POPAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 14938EB08280063D294781C3164C8332 /* POPAnimation.h */; }; + F3A5D609595883FAB0550B75A0237C58 /* POPMath.mm in Sources */ = {isa = PBXBuildFile; fileRef = A19FD133843D5FCF16B8AF3B4E165515 /* POPMath.mm */; }; + F41FB512F52C7C721107DFC24193C18D /* PFURLSessionCommandRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E6180746342782338BDCA4EE5B65D72 /* PFURLSessionCommandRunner.m */; }; + F4E009870A5A3FFF06CE2805D238306B /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AF8C210F41A36E77FE11185CD850274 /* CoreLocation.framework */; }; + F4E711DBBE33C63D91C5EB82D7559094 /* PFInstallationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E6BECFF342BD360C868DC57ABEEC767 /* PFInstallationConstants.m */; }; + F50CFC840B1B486D290EF5656C3AB5A4 /* TransformationMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 35574BADA6CDEA944F089CBC021F01AA /* TransformationMatrix.cpp */; }; + F7145179707A6982099A9639DB58CDD1 /* PFAnonymousAuthenticationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 832FCCE6C5FBEE8B8EDE5CB7506C1387 /* PFAnonymousAuthenticationProvider.h */; }; + F7D3BCD31F6408894D425BCC2F4FD82D /* PFCommandURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 54B2FDE08445C963E18042DD668FA776 /* PFCommandURLRequestConstructor.h */; }; + F9627C89FA11AC0378E77DF8EF1535FF /* POPAnimationTracer.mm in Sources */ = {isa = PBXBuildFile; fileRef = C1E27C3CBB149C1873F6CDC55D998CE2 /* POPAnimationTracer.mm */; }; + F97EA210A1C7E07EE9CB9501FCC444F8 /* PFMutableQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = CB81D6A5051D8F542190EDFDC7456611 /* PFMutableQueryState.m */; }; + FACAABA588E76C9C2DD2AB634B0E9069 /* PFMutableObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 7962520325311C12136692F8AA4F4AD1 /* PFMutableObjectState.m */; }; + FBA278641B85C2C4DFB9D28E978268EB /* PFSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D157CA12EC27ADEB58C088EBB17D4CC /* PFSession.h */; }; + FC3E62E611240996AA6720A91B4EABB3 /* PFRESTCommand_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5857640427DCEDE7D0433F498D520085 /* PFRESTCommand_Private.h */; }; + FD7B3714953511B022F7BA9A3B788C27 /* PFPush.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E24261DA563B7612DBA518C8FEB0B6B /* PFPush.h */; }; + FDCA9B7C897364F5E3986CE205C27A92 /* PFPush.m in Sources */ = {isa = PBXBuildFile; fileRef = E1E17B04786B5816404325BFDBE700B8 /* PFPush.m */; }; + FDFF36E4566B4F31B50CC82D7987A738 /* PFPinningObjectStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 507594AEA30B179FEE12586498800470 /* PFPinningObjectStore.m */; }; + FF10EDB81D6724D8A7CBBF85ACC89082 /* PFAnalyticsUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 16B0BA102C5E8108137BE847C8377A1E /* PFAnalyticsUtilities.h */; }; + FFA7BE1A5108294991B631273306B337 /* PFURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 74CC29CB5720DF98AD22C289EBAA7FBD /* PFURLSession.m */; }; + FFA925D18B7C5F8BDF61C623CA2E9D73 /* PFRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = FD7F7F0634794A2E01436C4EF9CD8DFE /* PFRelationState.h */; }; + FFFD333600E0CF9D8AE5D00E36F147C2 /* PFHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DD7438CB8B7D0CE7BAEE6965CE86AEF /* PFHash.h */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 3F90957483AE8162292532A1129FE0C4 /* PBXContainerItemProxy */ = { + 38312B8FB651E2B23B6C5E889DC2C345 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = A3CBE48EB714CEAD058125E015A71ACC; + remoteGlobalIDString = 3094A346FA0BA2A7016A256FB910F479; remoteInfo = Bolts; }; - 4896CFC37B685DBA38EF0D354BC28D0F /* PBXContainerItemProxy */ = { + 43DAF625E1C76FEDADD2A5A410AC7016 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = E09D69912D3DE5D63052370034A0DDDC; - remoteInfo = Parse; + remoteGlobalIDString = 47C800E42623009B7192B025B3DD25A1; + remoteInfo = pop; }; - 6AA41461EE8D58D339E66102A9A4877A /* PBXContainerItemProxy */ = { + 6919D792BE090C23FDDA7F3F41ED1D7D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = A3CBE48EB714CEAD058125E015A71ACC; + remoteGlobalIDString = 3094A346FA0BA2A7016A256FB910F479; remoteInfo = Bolts; }; + 7B95C3C8CBBED75AFC0D447738B85785 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 6B21C5373E714B4D9498D17EE535A4D6; + remoteInfo = Parse; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 00853C35851DB9DCB92267B2F10343F6 /* PFApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFApplication.m; path = Parse/Internal/PFApplication.m; sourceTree = ""; }; - 00B8BB0329F997188B363E677BBB666E /* PFQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQuery.h; path = Parse/PFQuery.h; sourceTree = ""; }; - 010221E298AB835936ED04C1B61B2889 /* PFInstallationIdentifierStore_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore_Private.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h; sourceTree = ""; }; - 01E9E0D58701D7F6B1D72B98440AD9BA /* PFPropertyInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo.m; sourceTree = ""; }; - 02237672394DCB6999F68D60FB362A3E /* PFURLSessionJSONDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionJSONDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m; sourceTree = ""; }; - 023EEFF1E9891B8B0993596D706A7137 /* PFEventuallyPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyPin.m; path = Parse/Internal/PFEventuallyPin.m; sourceTree = ""; }; - 025EFE1DD58EFDD344107DFA9F4AD477 /* PFInstallationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationConstants.m; path = Parse/Internal/Installation/Constants/PFInstallationConstants.m; sourceTree = ""; }; - 02841C3BEB92D4DAC26220C5C7CE9740 /* PFErrorUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFErrorUtilities.m; path = Parse/Internal/PFErrorUtilities.m; sourceTree = ""; }; - 032A4A6705724272DE8FD9BC94C95C33 /* PFRole.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRole.m; path = Parse/PFRole.m; sourceTree = ""; }; - 03A69FDE3FBBA48FAFAB93667FC64A05 /* PFFieldOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperation.h; path = Parse/Internal/FieldOperation/PFFieldOperation.h; sourceTree = ""; }; - 03A98730119221482A511C33FBD4CBF9 /* PFObjectSubclassInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassInfo.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m; sourceTree = ""; }; - 03E890753CE899F60DD6626F8404DF58 /* PFCoreManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCoreManager.m; path = Parse/Internal/PFCoreManager.m; sourceTree = ""; }; - 047743A34224268FD55BB1875D8232CA /* PFURLSessionFileDownloadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionFileDownloadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h; sourceTree = ""; }; - 04F603E8068EB055DB1098ED088FBC0B /* PFMulticastDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMulticastDelegate.m; path = Parse/Internal/PFMulticastDelegate.m; sourceTree = ""; }; - 0539CEFD73A9E47FC3CF538787C89A88 /* PFRESTObjectCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectCommand.h; path = Parse/Internal/Commands/PFRESTObjectCommand.h; sourceTree = ""; }; - 0839D4C7AB14AABD676EF16D9D297FE7 /* PFObjectConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectConstants.m; path = Parse/Internal/Object/Constants/PFObjectConstants.m; sourceTree = ""; }; - 08D3D6F3DCED7306E944D33A3186C1AF /* PFObject+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFObject+Subclass.h"; path = "Parse/PFObject+Subclass.h"; sourceTree = ""; }; - 08ED2E2E627F66EA8CC90121737CB747 /* Parse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse.h; path = Parse/Parse.h; sourceTree = ""; }; - 09FEBAB0B414EEEC06B7B89FD63280F5 /* PFPropertyInfo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Private.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h; sourceTree = ""; }; - 0A180E3CC6A83C085262778CAE43767A /* PFObjectState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState_Private.h; path = Parse/Internal/Object/State/PFObjectState_Private.h; sourceTree = ""; }; - 0A33DBA763E58A23158889AB7E55D1E8 /* PFSQLiteDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase_Private.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h; sourceTree = ""; }; - 0A3BD59B59438D47928EBE062F284A88 /* PFEventuallyQueue_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue_Private.h; path = Parse/Internal/PFEventuallyQueue_Private.h; sourceTree = ""; }; - 0B30FD2D2BC16F38BEB58093ADF82B7A /* PFObjectSubclassInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassInfo.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h; sourceTree = ""; }; - 0BB18584CF736AD36BCE6DE812088676 /* PFAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAlertView.h; path = Parse/Internal/PFAlertView.h; sourceTree = ""; }; - 0C03418CCE96F211DA0F0C490AB018EE /* PFAsyncTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAsyncTaskQueue.h; path = Parse/Internal/PFAsyncTaskQueue.h; sourceTree = ""; }; - 0D2FD8C2062E42D035690B0D01AEA8DB /* PFQueryState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState_Private.h; path = Parse/Internal/Query/State/PFQueryState_Private.h; sourceTree = ""; }; - 0D3318F94B3CCDF4EC509F49C45A27FC /* PFSQLiteDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabase.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m; sourceTree = ""; }; - 0EC3943147EE9557BE2120CF2329E38E /* PFInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallation.m; path = Parse/PFInstallation.m; sourceTree = ""; }; - 0F2AE28A9117ECBD3FEA8A80E3592B9E /* PFSessionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionController.h; path = Parse/Internal/Session/Controller/PFSessionController.h; sourceTree = ""; }; - 1048C89864CA1BAAC39909E7EAF64FF7 /* PFACLPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLPrivate.h; path = Parse/Internal/ACL/PFACLPrivate.h; sourceTree = ""; }; - 10BF5DBDEACF811090B330EB5B9574DC /* PFUserAuthenticationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationController.h; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h; sourceTree = ""; }; - 11275EB0053B04F601BEF4D31A1367BE /* ParseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseManager.m; path = Parse/Internal/ParseManager.m; sourceTree = ""; }; - 116F73992D0A8BEB52EB6FFCE76C5242 /* PFAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalytics.m; path = Parse/PFAnalytics.m; sourceTree = ""; }; - 1170CA07F5721584040D06438ECB2657 /* PFCommandResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandResult.h; path = Parse/Internal/PFCommandResult.h; sourceTree = ""; }; - 144A3BA47B4A9DFCE62E998D209A9844 /* PFFile_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile_Private.h; path = Parse/Internal/File/PFFile_Private.h; sourceTree = ""; }; - 147E2DE0E42F38E2305A44CF01419B5A /* PFReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFReachability.m; path = Parse/Internal/PFReachability.m; sourceTree = ""; }; - 14C7CDE38DB399D405735FBBF03F2A7B /* PFAnonymousAuthenticationProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousAuthenticationProvider.m; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m; sourceTree = ""; }; - 14E52D110E94F845EFA54F1D5B716ADF /* PFUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUser.h; path = Parse/PFUser.h; sourceTree = ""; }; - 152A294FCBAFB2F303701CC560D0CB9E /* PFInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallation.h; path = Parse/PFInstallation.h; sourceTree = ""; }; - 159CCE347EF8F7907332612BF120B860 /* PFRelationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationPrivate.h; path = Parse/Internal/Relation/PFRelationPrivate.h; sourceTree = ""; }; + 0007F67CE44CDB26AC0B26E0B4438F17 /* PFMutableFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableFileState.m; path = Parse/Internal/File/State/PFMutableFileState.m; sourceTree = ""; }; + 003F04CCCCA9D217090A10F09B6A095B /* PFCommandResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandResult.h; path = Parse/Internal/PFCommandResult.h; sourceTree = ""; }; + 005D78329EE21D6E17E5C61CD7F99399 /* PFPropertyInfo_Runtime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Runtime.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h; sourceTree = ""; }; + 01760A57DC1D7F86DDC6BD37AF0773FD /* PFSessionUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionUtilities.m; path = Parse/Internal/Session/Utilities/PFSessionUtilities.m; sourceTree = ""; }; + 01B5421FED39CB875C6EB4E26A48BD0E /* PFCurrentUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentUserController.h; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.h; sourceTree = ""; }; + 01F9E3D986D34EB39EC1D2728FB49D75 /* PFCloud.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloud.m; path = Parse/PFCloud.m; sourceTree = ""; }; + 022E40D42E74E0C92C4963F2BE8E4FD5 /* PFRESTPushCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTPushCommand.h; path = Parse/Internal/Commands/PFRESTPushCommand.h; sourceTree = ""; }; + 023787FB361088A0CC1401AF3EF0BD44 /* PFUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState.h; path = Parse/Internal/User/State/PFUserState.h; sourceTree = ""; }; + 0241335D86A1EA4D1D2367A14A072B98 /* PFBase64Encoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBase64Encoder.h; path = Parse/Internal/PFBase64Encoder.h; sourceTree = ""; }; + 0476012CEBFEB22B5F0926994E6AEEE3 /* POPAnimatorPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimatorPrivate.h; path = pop/POPAnimatorPrivate.h; sourceTree = ""; }; + 0638F31DB969AAA2089D7F79383493DD /* PFErrorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFErrorUtilities.h; path = Parse/Internal/PFErrorUtilities.h; sourceTree = ""; }; + 067C9B58B0E86A024F7699B9FC2F7E42 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; + 06D0E06E5B5391A250E1E1200BADD9E1 /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; + 08D26CE5516D7D42D9222FD32B2EDB93 /* PFCategoryLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCategoryLoader.h; path = Parse/Internal/PFCategoryLoader.h; sourceTree = ""; }; + 08FC3ACF4FB85302DB39490D9E032664 /* PFHTTPURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPURLRequestConstructor.h; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h; sourceTree = ""; }; + 09FDB3ED688B893DC31F13212A092E58 /* ParseModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseModule.h; path = Parse/Internal/ParseModule.h; sourceTree = ""; }; + 0A7AF22DC435894F3927644A0B475DFA /* PFMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMacros.h; path = Parse/Internal/PFMacros.h; sourceTree = ""; }; + 0A8C828F2BF737F68E0CF5F2CE64D6C2 /* PFRole.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRole.h; path = Parse/PFRole.h; sourceTree = ""; }; + 0A9ED47A0EA56543BEB2F83DFD6122C8 /* POPCGUtils.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPCGUtils.mm; path = pop/POPCGUtils.mm; sourceTree = ""; }; + 0AF5597A50326B2C756F30471E7EA8BE /* PFPinningEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningEventuallyQueue.h; path = Parse/Internal/PFPinningEventuallyQueue.h; sourceTree = ""; }; + 0B7AF33E13FC52EAA4B353E736F48431 /* PFBaseState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBaseState.h; path = Parse/Internal/PFBaseState.h; sourceTree = ""; }; + 0C05D3A3DD0A525F6B31D006CCC2D2F4 /* PFProduct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProduct.h; path = Parse/PFProduct.h; sourceTree = ""; }; + 0C4513EB4F24A2BDEE3106F5C83A1664 /* ParseInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseInternal.h; path = Parse/Internal/ParseInternal.h; sourceTree = ""; }; + 0C8CEF3DB4AEFD83044AD62B8A9ABD41 /* PFPropertyInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo.m; sourceTree = ""; }; + 0DBAF5788AC957A98F8DA82DF0E007A8 /* PFFileController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileController.h; path = Parse/Internal/File/Controller/PFFileController.h; sourceTree = ""; }; + 0EA667FBF478CB2CC7CFE38041F96D6F /* PFRESTUserCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTUserCommand.h; path = Parse/Internal/Commands/PFRESTUserCommand.h; sourceTree = ""; }; + 0EB55315EB3A3AB23E3EB95B4B89971F /* PFConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConstants.h; path = Parse/PFConstants.h; sourceTree = ""; }; + 0F437AB63E48A5534A05700959E05607 /* PFFileStagingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileStagingController.m; path = Parse/Internal/File/Controller/PFFileStagingController.m; sourceTree = ""; }; + 0FAFDD952B22B5410869339CD24F946E /* PFFieldOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperation.m; path = Parse/Internal/FieldOperation/PFFieldOperation.m; sourceTree = ""; }; + 10634547D3CF0DBCA1FCF7438AB74C39 /* PFOfflineObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineObjectController.h; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h; sourceTree = ""; }; + 117B19051931B86306911BB447C05694 /* PFPinningObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningObjectStore.h; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.h; sourceTree = ""; }; + 126E0178D6FE6C3AC0790CCA7F490DE8 /* PFACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState.h; path = Parse/Internal/ACL/State/PFACLState.h; sourceTree = ""; }; + 12C263F3A518B7482AA7F6DA83C5BE2A /* PFAnalyticsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsController.h; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.h; sourceTree = ""; }; + 12C8B2712D809AA1B4EC70ADAB8C6809 /* PFMutableQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableQueryState.h; path = Parse/Internal/Query/State/PFMutableQueryState.h; sourceTree = ""; }; + 130E12A377FD4C1EC29AF55964B70A23 /* PFLocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLocationManager.m; path = Parse/Internal/PFLocationManager.m; sourceTree = ""; }; + 134BDC30251FB7A5465C17F603FCAC5F /* POPPropertyAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPPropertyAnimationInternal.h; path = pop/POPPropertyAnimationInternal.h; sourceTree = ""; }; + 139FB17B5AD5B2BD40E10B8D2177BEDC /* Parse-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Parse-dummy.m"; sourceTree = ""; }; + 13EA057769889745EF622AD275B30A3F /* PFCommandCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandCache.m; path = Parse/Internal/PFCommandCache.m; sourceTree = ""; }; + 14906790E82B81D5B68B2258E95425B4 /* pop.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = pop.xcconfig; sourceTree = ""; }; + 14938EB08280063D294781C3164C8332 /* POPAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimation.h; path = pop/POPAnimation.h; sourceTree = ""; }; + 152FEBFF4B90D0D9894CED8063D4D7D0 /* PFAnonymousAuthenticationProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousAuthenticationProvider.m; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m; sourceTree = ""; }; 15A529C27057E4A57D259CBC6E6CE49C /* Pods-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-acknowledgements.markdown"; sourceTree = ""; }; - 16936467CF16DCC6960896B5471D7C27 /* PFAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAssert.h; path = Parse/Internal/PFAssert.h; sourceTree = ""; }; - 16E2B74C340852FB7F8D0C347EE34F7F /* PFRESTObjectBatchCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectBatchCommand.m; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.m; sourceTree = ""; }; - 16E653F2F3740605E3A7745107A7C5DF /* PFURLSessionCommandRunner.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionCommandRunner.m; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m; sourceTree = ""; }; - 17530FFB4F9A63C5FF114E86EC313B18 /* PFAnalyticsUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsUtilities.h; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h; sourceTree = ""; }; - 17A2BDCAD5B27E331974A22F463E44CF /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; - 18D995618F24B9FE1FA4F15699A5A8BA /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; - 1906D27D412A515912345F6C5D1138B3 /* PFACLState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState_Private.h; path = Parse/Internal/ACL/State/PFACLState_Private.h; sourceTree = ""; }; - 1CDD3144250DCECB39F57A04B6C9A3F0 /* PFPushChannelsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushChannelsController.m; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.m; sourceTree = ""; }; - 1D7EDE5ABF288993846E8BEA60CE324D /* PFPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPin.h; path = Parse/Internal/LocalDataStore/Pin/PFPin.h; sourceTree = ""; }; - 1DCFFA9D9D3FD9AE7914C3CDBC03F386 /* BFTask+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Private.h"; path = "Parse/Internal/BFTask+Private.h"; sourceTree = ""; }; - 1E60CD03AB5997917F89A62109F51C1F /* PFProductsRequestHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductsRequestHandler.m; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m; sourceTree = ""; }; - 1FB342435842C135A1CE8351177875B1 /* PFThreadsafety.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFThreadsafety.h; path = Parse/Internal/ThreadSafety/PFThreadsafety.h; sourceTree = ""; }; - 208CE00C994794CE9B26AC6698B8198D /* PFPushController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushController.h; path = Parse/Internal/Push/Controller/PFPushController.h; sourceTree = ""; }; - 216E10883658EDAA1467BD1DDBDDC840 /* PFLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogging.h; path = Parse/Internal/PFLogging.h; sourceTree = ""; }; - 229A74FF17E8D46A86798DDFB3D12F02 /* PFOfflineQueryLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryLogic.m; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m; sourceTree = ""; }; - 23269D2652429AAB9E5717B42C4C40FB /* PFMulticastDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMulticastDelegate.h; path = Parse/Internal/PFMulticastDelegate.h; sourceTree = ""; }; - 23305A980DB3E4AED2259A74C9187B50 /* PFDateFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDateFormatter.m; path = Parse/Internal/PFDateFormatter.m; sourceTree = ""; }; - 23B01EE10487D2A55A89CF394A299B88 /* PFMutableQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableQueryState.h; path = Parse/Internal/Query/State/PFMutableQueryState.h; sourceTree = ""; }; - 23D468ADFF594C052225A0543E3B6A56 /* PFSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession_Private.h; path = Parse/Internal/Session/PFSession_Private.h; sourceTree = ""; }; - 24DA2B1B50C58F417BC0F3413CC0937E /* PFSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSession.m; path = Parse/PFSession.m; sourceTree = ""; }; - 2613CC942BB5B821A1369B8E68019FDA /* Bolts-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Bolts-Private.xcconfig"; sourceTree = ""; }; - 267DC6F7D82298ABF3C18C327FEDF275 /* PFMutableUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableUserState.h; path = Parse/Internal/User/State/PFMutableUserState.h; sourceTree = ""; }; - 2706634FB1F4B0C9210247AA1B420D73 /* PFObjectFileCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCoder.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.m; sourceTree = ""; }; - 272027943ACA52CB75F07D7619CCC3BF /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; - 2758D4A6E71B967E09A910CF576817B1 /* PFPushController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushController.m; path = Parse/Internal/Push/Controller/PFPushController.m; sourceTree = ""; }; - 27841483445CA9ABFA8CCFB3D503D752 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - 2791960015A0E379245E5A0882B9DDCE /* PFCloudCodeController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloudCodeController.h; path = Parse/Internal/CloudCode/PFCloudCodeController.h; sourceTree = ""; }; - 27A3A55D0FC90475F63A86D2640BF7E4 /* PFCommandCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache_Private.h; path = Parse/Internal/PFCommandCache_Private.h; sourceTree = ""; }; - 29E8D38657DDEFCFA5A73CAF48D523A7 /* PFUserAuthenticationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationDelegate.h; path = Parse/PFUserAuthenticationDelegate.h; sourceTree = ""; }; - 29F955AA1404AAE96344AAE5FB9ACCCE /* BFTask+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Private.m"; path = "Parse/Internal/BFTask+Private.m"; sourceTree = ""; }; - 2A2DE58DBDFB1D72AF24F80D783EAE28 /* PFUserConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserConstants.h; path = Parse/Internal/User/Constants/PFUserConstants.h; sourceTree = ""; }; - 2AB5DEC6229F3BE36F1F514679A24AE3 /* PFCurrentConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentConfigController.m; path = Parse/Internal/Config/Controller/PFCurrentConfigController.m; sourceTree = ""; }; - 2B9972BBC14ADBA4A17A6CC1801DB183 /* PFOfflineStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineStore.h; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h; sourceTree = ""; }; - 2DAB9F63DEB559E36F66611AC7532E7C /* PFObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController.h; path = Parse/Internal/Object/Controller/PFObjectController.h; sourceTree = ""; }; - 2E1ABB16A7E7BC8AF7D9E1FE23ABE0E2 /* PFCachedQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCachedQueryController.m; path = Parse/Internal/Query/Controller/PFCachedQueryController.m; sourceTree = ""; }; - 2E7301204FAFBEAE4CD3C43B6DAC1858 /* PFFileStagingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileStagingController.h; path = Parse/Internal/File/Controller/PFFileStagingController.h; sourceTree = ""; }; - 2EE5B04D8D051799BEED324B493485A4 /* PFProductsRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductsRequestHandler.h; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h; sourceTree = ""; }; - 2F9009C1FEECA9D4795590A5794DD2B1 /* PFWeakValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFWeakValue.h; path = Parse/Internal/PFWeakValue.h; sourceTree = ""; }; - 2FAE5FB0E717E5E066DB0DD19ED0679F /* PFMutablePushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutablePushState.h; path = Parse/Internal/Push/State/PFMutablePushState.h; sourceTree = ""; }; - 308E43BD885210D04C25609F7FFE572D /* PFObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObject.h; path = Parse/PFObject.h; sourceTree = ""; }; - 3140F8B22C96FA60AD48F660BFF7FCD2 /* PFObjectPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectPrivate.h; path = Parse/Internal/Object/PFObjectPrivate.h; sourceTree = ""; }; - 31479B7C07EEF4712DEF1D01F7F10F31 /* PFURLSessionUploadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionUploadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h; sourceTree = ""; }; - 32E9622FB277F31FF0ACE70A0E8C1B44 /* PFAnonymousUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils.h; path = Parse/PFAnonymousUtils.h; sourceTree = ""; }; - 333F24639C80887F8DA6A64132D3ACAD /* PFDefaultACLController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDefaultACLController.m; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m; sourceTree = ""; }; - 34F7E58ACE9D749D100E04FECD569B45 /* PFObjectBatchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectBatchController.h; path = Parse/Internal/Object/BatchController/PFObjectBatchController.h; sourceTree = ""; }; - 355562D77F7A3ECC89ADA55D047757BA /* PFMutableUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableUserState.m; path = Parse/Internal/User/State/PFMutableUserState.m; sourceTree = ""; }; - 362FACECEF69703BFA9C57ED74660D97 /* PFObjectLocalIdStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectLocalIdStore.h; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h; sourceTree = ""; }; - 366813962B9A44F8160D7BCF13112B91 /* PFFileStagingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileStagingController.m; path = Parse/Internal/File/Controller/PFFileStagingController.m; sourceTree = ""; }; - 374CEE0448D7C92E9F6B2F5B9987BBFA /* PFOperationSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOperationSet.h; path = Parse/Internal/Object/OperationSet/PFOperationSet.h; sourceTree = ""; }; - 384135DE37094DB8E731205CBD17F72F /* PFURLSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h; sourceTree = ""; }; - 385DD2E0B95AAE1DDB352C5E48139C02 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; - 391E859809C989E8E6F5613E73CF722A /* Parse-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-prefix.pch"; sourceTree = ""; }; - 3A59FF425B4E22F00D5B693BF199C21E /* PFKeyValueCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeyValueCache.m; path = Parse/Internal/KeyValueCache/PFKeyValueCache.m; sourceTree = ""; }; - 3A5E945E1EC907178171BF58D1F60131 /* PFUserFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserFileCodingLogic.h; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h; sourceTree = ""; }; - 3C3A2002500C346E302092A2088A57A7 /* PFRESTPushCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTPushCommand.h; path = Parse/Internal/Commands/PFRESTPushCommand.h; sourceTree = ""; }; - 3CD9E69666E0F4D54D0539786BD3CBF7 /* PFOfflineObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineObjectController.h; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h; sourceTree = ""; }; - 3D283291B477D2080EBFC60E0CE5B3A3 /* PFRESTUserCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTUserCommand.m; path = Parse/Internal/Commands/PFRESTUserCommand.m; sourceTree = ""; }; - 3D4AD2E6C937B36339C0F9AFF8817BC6 /* PFDateFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDateFormatter.h; path = Parse/Internal/PFDateFormatter.h; sourceTree = ""; }; - 3E781400D2DB9020CCA193E74F459F26 /* Parse-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Parse-Private.xcconfig"; sourceTree = ""; }; - 3EF48103F2FD65D41AC8CEF7D0FFAC5B /* PFRelationState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState_Private.h; path = Parse/Internal/Relation/State/PFRelationState_Private.h; sourceTree = ""; }; - 3FBB8D23E11D288C6235C6730E4861BE /* PFPurchase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchase.m; path = Parse/PFPurchase.m; sourceTree = ""; }; - 40001E702307C45CF85652D32E688A7A /* PFBaseState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBaseState.h; path = Parse/Internal/PFBaseState.h; sourceTree = ""; }; - 40F5313A31663C9C8E3E94C0B4789071 /* PFKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeychainStore.h; path = Parse/Internal/PFKeychainStore.h; sourceTree = ""; }; - 4113495D4A663C12AB75535F753A5AF9 /* Parse.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Parse.xcconfig; sourceTree = ""; }; - 41BEED2F8941DE9D36C4383DE2A005E4 /* PFCommandCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache.h; path = Parse/Internal/PFCommandCache.h; sourceTree = ""; }; - 41EC4873567E5199115062D666B66648 /* PFHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPRequest.h; path = Parse/Internal/HTTPRequest/PFHTTPRequest.h; sourceTree = ""; }; - 42DDE7216238765988616CD0550CA7E7 /* Bolts.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.xcconfig; sourceTree = ""; }; - 4339829EF9FC5B8B3459DBD79F65C0D6 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - 43AED0C36A33D48DB75041D300713664 /* PFUserFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserFileCodingLogic.m; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m; sourceTree = ""; }; - 43F2F47F077C809F803E3BA42EAF9CC7 /* PFURLSessionDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m; sourceTree = ""; }; - 44CF5AB5E34A9D3B7DBDB04076B71AA7 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; - 44FB09F8C2981A2C9E4660E4FABC1F83 /* PFPinningEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningEventuallyQueue.h; path = Parse/Internal/PFPinningEventuallyQueue.h; sourceTree = ""; }; - 45D0E44482F38FEEB37F4CE77B608864 /* PFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkActivityIndicatorManager.h; path = Parse/PFNetworkActivityIndicatorManager.h; sourceTree = ""; }; - 4709648C670A81EACDB1DA9F808189F5 /* PFConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfig.m; path = Parse/PFConfig.m; sourceTree = ""; }; - 474A59362210E10E859CD9BA539B75D6 /* PFFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFile.m; path = Parse/PFFile.m; sourceTree = ""; }; - 47D9BB43AF2C76037F90ECEAA05CFF01 /* PFRESTConfigCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTConfigCommand.m; path = Parse/Internal/Commands/PFRESTConfigCommand.m; sourceTree = ""; }; - 47F13D5EB10A23DB6E0A7FABF2E8CDBD /* PFLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogger.m; path = Parse/Internal/PFLogger.m; sourceTree = ""; }; - 48BA1E2ADC6C1A912806B4434C705899 /* PFHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHash.m; path = Parse/Internal/PFHash.m; sourceTree = ""; }; - 4C0BDD882C72C66B96CB5D72117728F8 /* PFLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocationManager.h; path = Parse/Internal/PFLocationManager.h; sourceTree = ""; }; - 4E2405EA0846F25769ECD3AD50DE9EC2 /* PFHTTPURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHTTPURLRequestConstructor.m; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m; sourceTree = ""; }; - 4E2EF54AD86CBB75239ED52C54FEE973 /* PFURLSessionJSONDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionJSONDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h; sourceTree = ""; }; - 4F34B890143B7FF3F7E15109C866C70F /* PFRESTAnalyticsCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTAnalyticsCommand.m; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.m; sourceTree = ""; }; - 50DC95668369AC8E5CF51D8FE228F223 /* PFEncoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEncoder.h; path = Parse/Internal/PFEncoder.h; sourceTree = ""; }; - 52763EB85FB6F54982F9F986750D041D /* PFKeyValueCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache_Private.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h; sourceTree = ""; }; - 5292287F5D3AE4EF5E74D76C6FDB81A2 /* PFConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig.h; path = Parse/PFConfig.h; sourceTree = ""; }; - 5456C5EDD601EB1F4939A1ADFE7EB84F /* Parse-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Parse-dummy.m"; sourceTree = ""; }; - 556C88BEC9C2F89C47B0E0710DA1127B /* PFFieldOperationDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperationDecoder.m; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.m; sourceTree = ""; }; - 56DD772CBED2910C5B2E94ADABDD79F2 /* PFAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics.h; path = Parse/PFAnalytics.h; sourceTree = ""; }; - 5878493E65CFC3022C41DAF663AAD6DF /* PFObjectEstimatedData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectEstimatedData.h; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h; sourceTree = ""; }; - 5894A228B6F31F871749F0BC8C57560B /* PFRESTAnalyticsCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTAnalyticsCommand.h; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.h; sourceTree = ""; }; - 58C3D8E110425DA982C930E9EA797EDE /* libBolts.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBolts.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 5983FC4B63B585E8A136F4AC664EEF0C /* PFMultiProcessFileLockController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLockController.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m; sourceTree = ""; }; - 59931B6E0E647D850B10744856083216 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = Parse/Resources/en.lproj; sourceTree = ""; }; - 5B7919554958754AF6F15E6D978D43B0 /* PFUserAuthenticationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserAuthenticationController.m; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m; sourceTree = ""; }; - 5BA78E8ED3B478FCE98D4154F24101BB /* PFObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObject.m; path = Parse/PFObject.m; sourceTree = ""; }; - 5C6B7B3F0FCE545B7D965DEDF8ED4613 /* PFObjectFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCodingLogic.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h; sourceTree = ""; }; - 5C7D5E9E9338447002877586E4B453BC /* PFCurrentInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentInstallationController.m; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m; sourceTree = ""; }; - 5CF5A1D517886292E9244E3BBBD29C2C /* ParseModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseModule.m; path = Parse/Internal/ParseModule.m; sourceTree = ""; }; - 5D9415A793D299204A98D83B774768B1 /* PFObjectController_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController_Private.h; path = Parse/Internal/Object/Controller/PFObjectController_Private.h; sourceTree = ""; }; - 5F114EC7295D2D778ADAD06DAECFFDF6 /* PFSQLiteDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h; sourceTree = ""; }; - 6041A7EB33A2C8DBA16E95481F6E955A /* PFRESTCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCommand.m; path = Parse/Internal/Commands/PFRESTCommand.m; sourceTree = ""; }; - 61C33185F5BD57BDE3231949A2133ABF /* PFURLSessionDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h; sourceTree = ""; }; - 6285547694D0DE6096DB0174F62F8D57 /* PFAsyncTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAsyncTaskQueue.m; path = Parse/Internal/PFAsyncTaskQueue.m; sourceTree = ""; }; - 62B360F076B3422F6B95643A41DC7D58 /* PFFileDataStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileDataStream.h; path = Parse/Internal/File/FileDataStream/PFFileDataStream.h; sourceTree = ""; }; + 16B0BA102C5E8108137BE847C8377A1E /* PFAnalyticsUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsUtilities.h; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h; sourceTree = ""; }; + 16E2644C0CFB5068F39B60EA663C06F8 /* PFInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallation.h; path = Parse/PFInstallation.h; sourceTree = ""; }; + 186E1997DE5BBBD9E2A895D71A7BC915 /* PFPushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushState.m; path = Parse/Internal/Push/State/PFPushState.m; sourceTree = ""; }; + 1969D32C99E438DDB5CD4D541DDC00CD /* PFPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPin.m; path = Parse/Internal/LocalDataStore/Pin/PFPin.m; sourceTree = ""; }; + 197635F0BFB93E63E82503F09B7AABBF /* POPLayerExtras.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPLayerExtras.mm; path = pop/POPLayerExtras.mm; sourceTree = ""; }; + 1A4880CA362DCF456DE8C64954480CEB /* PFRESTFileCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTFileCommand.h; path = Parse/Internal/Commands/PFRESTFileCommand.h; sourceTree = ""; }; + 1B0BA363E4B429F291596ABBFF279C44 /* PFGeoPointPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPointPrivate.h; path = Parse/Internal/PFGeoPointPrivate.h; sourceTree = ""; }; + 1CECC0578B9328DAEB8EA4E274B9D16A /* PFFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile.h; path = Parse/PFFile.h; sourceTree = ""; }; + 1CFD4EDE572C72678AC61FDC5C92AAC4 /* PFPushUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushUtilities.h; path = Parse/Internal/Push/Utilites/PFPushUtilities.h; sourceTree = ""; }; + 1EE03D2CE9262E74BE101A9AD7F66934 /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; + 1EE3B22DE1F33BE14763458A191128C1 /* PFRESTObjectBatchCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectBatchCommand.m; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.m; sourceTree = ""; }; + 1F1826EAEE4BB8BAD18008DEBA561577 /* PFMultiProcessFileLockController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLockController.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m; sourceTree = ""; }; + 1F56BA43A619F5C1A2ED1F36B30E29A4 /* PFPurchaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseController.h; path = Parse/Internal/Purchase/Controller/PFPurchaseController.h; sourceTree = ""; }; + 1FA13E8424FDF032B807EB307AF448F7 /* PFUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUser.m; path = Parse/PFUser.m; sourceTree = ""; }; + 1FDE3C12C2A761D6DD2E3EFE88D9A85C /* PFFieldOperationDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperationDecoder.m; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.m; sourceTree = ""; }; + 1FF980C8F6DFEF3C3FB8C7A56B963C15 /* PFCurrentObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentObjectControlling.h; path = Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h; sourceTree = ""; }; + 2007FCF4B24326D21653DCD5F4F03D9E /* PFQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryController.m; path = Parse/Internal/Query/Controller/PFQueryController.m; sourceTree = ""; }; + 212068113F29FA47D17730ED388F8706 /* POPBasicAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPBasicAnimation.h; path = pop/POPBasicAnimation.h; sourceTree = ""; }; + 2218553C181F20F306EC36D9B7169974 /* PFDefaultACLController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDefaultACLController.m; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m; sourceTree = ""; }; + 22DC4C87D619EF0F28631B5560E82333 /* POPAnimationExtras.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationExtras.mm; path = pop/POPAnimationExtras.mm; sourceTree = ""; }; + 22F8D68DF4AAD2C14B0AB430E0C5337F /* PFMulticastDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMulticastDelegate.m; path = Parse/Internal/PFMulticastDelegate.m; sourceTree = ""; }; + 22FDFA3B8D05D54B5BB969DABCBC6413 /* ParseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseManager.m; path = Parse/Internal/ParseManager.m; sourceTree = ""; }; + 26B663E68AA063970F54C5A4311360EA /* PFPushManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushManager.m; path = Parse/Internal/Push/Manager/PFPushManager.m; sourceTree = ""; }; + 26C358BF063BCDCE76707FB07B405CB6 /* PFOperationSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOperationSet.h; path = Parse/Internal/Object/OperationSet/PFOperationSet.h; sourceTree = ""; }; + 2726A20CBCFFB77F9972C445E8972099 /* POPPropertyAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPPropertyAnimation.mm; path = pop/POPPropertyAnimation.mm; sourceTree = ""; }; + 27C57412F25313254CDCF65E3AB69F64 /* PFDateFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDateFormatter.h; path = Parse/Internal/PFDateFormatter.h; sourceTree = ""; }; + 29386A5F2F357AA19B9627F8C57A8D14 /* Bolts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-prefix.pch"; sourceTree = ""; }; + 2B16B8588E9DCC56E87F38E324BE2E50 /* PFLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogger.m; path = Parse/Internal/PFLogger.m; sourceTree = ""; }; + 2B32B43DC93B94CD2FD151A51C7009B2 /* PFRESTUserCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTUserCommand.m; path = Parse/Internal/Commands/PFRESTUserCommand.m; sourceTree = ""; }; + 2C0B84AF80B3F79D3684EC294B10145D /* PFInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationController.m; path = Parse/Internal/Installation/Controller/PFInstallationController.m; sourceTree = ""; }; + 2C86B73BF7530888F6D5B7414D36E50E /* PFAnonymousUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils.h; path = Parse/PFAnonymousUtils.h; sourceTree = ""; }; + 2CDE17945AABA4BFAB91FD36A9002DB4 /* PFConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfig.m; path = Parse/PFConfig.m; sourceTree = ""; }; + 2DD709EEB7F953B2BFD2FFBF243EF632 /* PFInternalUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInternalUtils.h; path = Parse/Internal/PFInternalUtils.h; sourceTree = ""; }; + 2E056FF5C4EC38A55B45FB52F395D72E /* TransformationMatrix.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TransformationMatrix.h; path = pop/WebCore/TransformationMatrix.h; sourceTree = ""; }; + 2E88590D291A3C131FC32F9BC9A80038 /* POPAnimationTracer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationTracer.h; path = pop/POPAnimationTracer.h; sourceTree = ""; }; + 2FE59B575E6D95DCA7C8B65A48397212 /* PFCommandRunningConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunningConstants.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m; sourceTree = ""; }; + 310661341392FCCCCA69B3D4AA745597 /* PFConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfigController.h; path = Parse/Internal/Config/Controller/PFConfigController.h; sourceTree = ""; }; + 313669CF0D1BF49C96C85FC593F4BC1D /* POPAnimatableProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimatableProperty.h; path = pop/POPAnimatableProperty.h; sourceTree = ""; }; + 3155A15C877F794FB064A4A0CEEB2F13 /* POPGeometry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPGeometry.h; path = pop/POPGeometry.h; sourceTree = ""; }; + 317ED8ACDA393EB59C813498345758A5 /* PFNullability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNullability.h; path = Parse/PFNullability.h; sourceTree = ""; }; + 3257C6D2F1664400BC0FA089A7A688A8 /* PFObjectFileCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCoder.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.m; sourceTree = ""; }; + 32D7E6743D001141788DFE84AF635291 /* PFURLSessionDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m; sourceTree = ""; }; + 3395CE4D4A4BF8134C0A8860F1672838 /* PFOfflineQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryController.h; path = Parse/Internal/Query/Controller/PFOfflineQueryController.h; sourceTree = ""; }; + 349789B8BAC6B5134BB027FB59B2DAE4 /* PFInstallationIdentifierStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationIdentifierStore.m; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m; sourceTree = ""; }; + 35574BADA6CDEA944F089CBC021F01AA /* TransformationMatrix.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TransformationMatrix.cpp; path = pop/WebCore/TransformationMatrix.cpp; sourceTree = ""; }; + 365E961AFE93318B968A4EAD9C3042AD /* PFDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDecoder.h; path = Parse/Internal/PFDecoder.h; sourceTree = ""; }; + 36E5C28B728EEE2896643C1BD0BB1E3B /* PFKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeychainStore.m; path = Parse/Internal/PFKeychainStore.m; sourceTree = ""; }; + 378A8BDEE3062C91F84C778871060257 /* PFQueryUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryUtilities.h; path = Parse/Internal/Query/Utilities/PFQueryUtilities.h; sourceTree = ""; }; + 38386024B8BB9B3B8F22D7B1FD578A31 /* PFQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQuery.m; path = Parse/PFQuery.m; sourceTree = ""; }; + 38C1E5A4A6882760CB349FCABD22A9DC /* POP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POP.h; path = pop/POP.h; sourceTree = ""; }; + 39F54AA49BC2FD125A794644082419CE /* PFDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDevice.h; path = Parse/Internal/PFDevice.h; sourceTree = ""; }; + 3A5F7AF86D19E519B94AD6D8CB98CC34 /* POPAnimationRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationRuntime.h; path = pop/POPAnimationRuntime.h; sourceTree = ""; }; + 3B3B39A4E421EE0FF21AB42B74EE1955 /* PFFileManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileManager.m; path = Parse/Internal/PFFileManager.m; sourceTree = ""; }; + 3CD1F5B90828B5EDD6A87F8F8B8CBEC5 /* PFCachedQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCachedQueryController.h; path = Parse/Internal/Query/Controller/PFCachedQueryController.h; sourceTree = ""; }; + 3D02C6C7422645AB5529C759A1A86353 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; + 3D56DAEA6274547A9C5D871A0412DD30 /* PFQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQuery.h; path = Parse/PFQuery.h; sourceTree = ""; }; + 3DF189D36ECF2252091D16F77FBAA4B1 /* PFFieldOperationDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperationDecoder.h; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.h; sourceTree = ""; }; + 3E0F1E598FDC4AD2B9344C0BE42CEF0A /* PFRESTSessionCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTSessionCommand.h; path = Parse/Internal/Commands/PFRESTSessionCommand.h; sourceTree = ""; }; + 3ED31097D39E6FCF0F3C743613AFA30C /* BoltsVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BoltsVersion.h; path = Bolts/Common/BoltsVersion.h; sourceTree = ""; }; + 3ED3C7E0A4856FAB56766C096BB50FC4 /* PFUserAuthenticationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserAuthenticationController.m; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m; sourceTree = ""; }; + 3FF58ECD6BEDF747B767ABEBBB293774 /* PFFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState.h; path = Parse/Internal/File/State/PFFileState.h; sourceTree = ""; }; + 4051AFB557520935D16F093222B0C0BB /* PFMulticastDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMulticastDelegate.h; path = Parse/Internal/PFMulticastDelegate.h; sourceTree = ""; }; + 409D5D646200B0874F402A55B2054320 /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; + 419B671E948384A84974D819F4F24FBA /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; + 41F8ECF258A9931347A9663B788331F1 /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; + 4312B15964C63A373BA6C191FD761444 /* PFURLConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLConstructor.m; path = Parse/Internal/HTTPRequest/PFURLConstructor.m; sourceTree = ""; }; + 431480C91CFCFE70AF20289CEECDDA2C /* PFCloud.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloud.h; path = Parse/PFCloud.h; sourceTree = ""; }; + 435286DE6414AD754A172CA441F36643 /* PFConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConstants.m; path = Parse/PFConstants.m; sourceTree = ""; }; + 43DDAC0517DD7E2A075642D9FB379D04 /* PFRESTQueryCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTQueryCommand.h; path = Parse/Internal/Commands/PFRESTQueryCommand.h; sourceTree = ""; }; + 43F7CA0102C3FA58C58F19240D8C4672 /* PFMutablePushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutablePushState.m; path = Parse/Internal/Push/State/PFMutablePushState.m; sourceTree = ""; }; + 43FEB98D92288E63383CA2110D5E1033 /* PFCurrentInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentInstallationController.h; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h; sourceTree = ""; }; + 4500DD87BF3AB695EEEF0D03C9E94067 /* PFURLSessionCommandRunner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h; sourceTree = ""; }; + 453D0F6EFB50B07FB491E7A1E373EAF6 /* PFURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h; sourceTree = ""; }; + 45C24BC4DD0B5F2B7F803B32EC634F9C /* PFPaymentTransactionObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPaymentTransactionObserver.m; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m; sourceTree = ""; }; + 4648A560C468826E346FA00C25F64545 /* PFObjectFilePersistenceController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFilePersistenceController.m; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m; sourceTree = ""; }; + 4671EA53DD8AE149FB0F02838CD24C37 /* PFNetworkCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkCommand.h; path = Parse/Internal/PFNetworkCommand.h; sourceTree = ""; }; + 478C891A77C52ACD2EE9267253F46B18 /* libParse.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libParse.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 47A6E2FEA4744CFF9330F4BDD5E274CE /* PFObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController.h; path = Parse/Internal/Object/Controller/PFObjectController.h; sourceTree = ""; }; + 48056B31A860AAD6950C3519A539F495 /* PFRESTConfigCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTConfigCommand.m; path = Parse/Internal/Commands/PFRESTConfigCommand.m; sourceTree = ""; }; + 4840DBE7CE64AE75599772CB21A51C7E /* PFUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUser.h; path = Parse/PFUser.h; sourceTree = ""; }; + 48764192F317D5037D89AF6584C95481 /* PFGeoPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPoint.h; path = Parse/PFGeoPoint.h; sourceTree = ""; }; + 4922CD9E2B9E78912E88BDDA753C4FB2 /* PFRESTQueryCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTQueryCommand.m; path = Parse/Internal/Commands/PFRESTQueryCommand.m; sourceTree = ""; }; + 4C28BCBA3F60C895444F215DF1A28EBF /* PFHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHash.m; path = Parse/Internal/PFHash.m; sourceTree = ""; }; + 4CC05709207C91767940918CDD4779DC /* POPCGUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPCGUtils.h; path = pop/POPCGUtils.h; sourceTree = ""; }; + 4D5FFAB9AA9026C7A87341B6E4F0D9D7 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + 4DC9003F64939358FF50986ADC0DF824 /* PFInternalUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInternalUtils.m; path = Parse/Internal/PFInternalUtils.m; sourceTree = ""; }; + 4E9D9F93BE35D535FACB0F23193B2668 /* PFDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDevice.m; path = Parse/Internal/PFDevice.m; sourceTree = ""; }; + 4EB9E22A1797EF8F815387B3148987B7 /* PFUserConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserConstants.m; path = Parse/Internal/User/Constants/PFUserConstants.m; sourceTree = ""; }; + 507594AEA30B179FEE12586498800470 /* PFPinningObjectStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningObjectStore.m; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.m; sourceTree = ""; }; + 50F5D5E8541B4E9B381B9D48639498A9 /* PFConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfigController.m; path = Parse/Internal/Config/Controller/PFConfigController.m; sourceTree = ""; }; + 512DF9E7249F58F9AF45B707F9C3949F /* PFEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyQueue.m; path = Parse/Internal/PFEventuallyQueue.m; sourceTree = ""; }; + 524FE09AA008388A357FA29376EBA283 /* PFLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogging.h; path = Parse/Internal/PFLogging.h; sourceTree = ""; }; + 527000AD7EF33A01F4034400FB51B6E9 /* PFURLSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h; sourceTree = ""; }; + 52DA55B0C48801979739E451008199A5 /* PFKeyValueCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache_Private.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h; sourceTree = ""; }; + 53FF030EF4F55FF673AA368E802BA1AD /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; + 549E8AA3A0932BA40BF11C59E1C2C7BD /* PFObjectFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCodingLogic.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m; sourceTree = ""; }; + 54B2FDE08445C963E18042DD668FA776 /* PFCommandURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandURLRequestConstructor.h; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h; sourceTree = ""; }; + 54BB29D5628B693DB06DEF1222114715 /* PFCloudCodeController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloudCodeController.h; path = Parse/Internal/CloudCode/PFCloudCodeController.h; sourceTree = ""; }; + 56743024027A104903BB088C1FED631A /* PFAnalytics_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics_Private.h; path = Parse/Internal/Analytics/PFAnalytics_Private.h; sourceTree = ""; }; + 5785AD09C2208501D5161E950E701889 /* POPAnimationEventInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationEventInternal.h; path = pop/POPAnimationEventInternal.h; sourceTree = ""; }; + 5857640427DCEDE7D0433F498D520085 /* PFRESTCommand_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand_Private.h; path = Parse/Internal/Commands/PFRESTCommand_Private.h; sourceTree = ""; }; + 588102B50CAE5BFD6658FF5042965B9E /* Parse_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse_Private.h; path = Parse/Internal/Parse_Private.h; sourceTree = ""; }; + 58B7C9659B0B47DE31498D5601CC2E12 /* PFOperationSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOperationSet.m; path = Parse/Internal/Object/OperationSet/PFOperationSet.m; sourceTree = ""; }; + 59B3FD41DEC22C5891C9B83C27BC25E0 /* pop-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "pop-dummy.m"; sourceTree = ""; }; + 59CC3868179641E97ED190501DFF4E05 /* PFDefaultACLController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDefaultACLController.h; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h; sourceTree = ""; }; + 5AAA36FB0A4E13DB1928E19770D8EFF8 /* PFMutableUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableUserState.m; path = Parse/Internal/User/State/PFMutableUserState.m; sourceTree = ""; }; + 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "pop-Private.xcconfig"; sourceTree = ""; }; + 5B31CEE7768E9065A1168B8DFC0BAB53 /* PFUserAuthenticationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationController.h; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h; sourceTree = ""; }; + 5B8726A00CBE872AD6EEF361F3E1A9BE /* PFObjectSubclassingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassingController.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h; sourceTree = ""; }; + 5BB217AB66F98AB5F05CBAB65838FA70 /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; + 5C77B473F634527F1102E3093D9ECCFE /* PFMultiProcessFileLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLock.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h; sourceTree = ""; }; + 5CA96AB87A674FDD5847C707289446B2 /* PFRESTCloudCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCloudCommand.h; path = Parse/Internal/Commands/PFRESTCloudCommand.h; sourceTree = ""; }; + 5DBA1E4D4138BAC1EB874D74D4AE73C1 /* PFPropertyInfo_Runtime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo_Runtime.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m; sourceTree = ""; }; + 5DD7438CB8B7D0CE7BAEE6965CE86AEF /* PFHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHash.h; path = Parse/Internal/PFHash.h; sourceTree = ""; }; + 5E00A160407B37F025D21140BEA61FE9 /* PFOfflineObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineObjectController.m; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m; sourceTree = ""; }; + 5E6180746342782338BDCA4EE5B65D72 /* PFURLSessionCommandRunner.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionCommandRunner.m; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m; sourceTree = ""; }; + 5E6BECFF342BD360C868DC57ABEEC767 /* PFInstallationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationConstants.m; path = Parse/Internal/Installation/Constants/PFInstallationConstants.m; sourceTree = ""; }; + 5EA6C82779BDAB43BEF4E9F00620B3CE /* PFCategoryLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCategoryLoader.m; path = Parse/Internal/PFCategoryLoader.m; sourceTree = ""; }; + 5F2F5693477E620DC6D5E2C3F6627CDA /* PFTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTaskQueue.m; path = Parse/Internal/PFTaskQueue.m; sourceTree = ""; }; + 5FDB9AA6B98C04B1C0D671A64BEEFEED /* PFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFNetworkActivityIndicatorManager.m; path = Parse/PFNetworkActivityIndicatorManager.m; sourceTree = ""; }; + 6006204F33FEC54FE00EA9417DDC3F22 /* PFAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAlertView.m; path = Parse/Internal/PFAlertView.m; sourceTree = ""; }; + 602F796D464ED522B3E9F48F6B4306A4 /* PFProduct.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProduct.m; path = Parse/PFProduct.m; sourceTree = ""; }; + 6117D27B3E43E27D2717ADF042654E56 /* PFRESTAnalyticsCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTAnalyticsCommand.m; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.m; sourceTree = ""; }; + 62080F892890D93BE422B38D0ADD788B /* Parse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse.h; path = Parse/Parse.h; sourceTree = ""; }; + 63068DEB876F824B178AEFCD8421DB6A /* PFObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectControlling.h; path = Parse/Internal/Object/Controller/PFObjectControlling.h; sourceTree = ""; }; + 63298AA824390762997B9EF2E73DDBD6 /* PFObjectUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectUtilities.h; path = Parse/Internal/Object/Utilities/PFObjectUtilities.h; sourceTree = ""; }; 641AE05DD55E5E6AC1590CD7B4A18F97 /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = ""; }; - 65A6FE58C9C2C7E84B044607B8A5890A /* PFTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTaskQueue.m; path = Parse/Internal/PFTaskQueue.m; sourceTree = ""; }; - 671CEA32EB838EA2DB18154A0B781F41 /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; - 67597E3A5597B762BEC0ED0EC7E967FF /* PFObjectSubclassingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassingController.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h; sourceTree = ""; }; - 6776A4FE81BCDB08946667E7FAF1A6C0 /* PFPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPin.m; path = Parse/Internal/LocalDataStore/Pin/PFPin.m; sourceTree = ""; }; - 681A2BC7840EF1709F11E26C7EC3F202 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - 68A4262C2B21FF46E63C3BB478773563 /* PFRESTObjectBatchCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectBatchCommand.h; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.h; sourceTree = ""; }; - 68BF84CDE3833CC1EF16696ED2573967 /* PFAnonymousAuthenticationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousAuthenticationProvider.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h; sourceTree = ""; }; - 699EE24E208C84FB34AD727CE4B22B06 /* PFCommandRunningConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunningConstants.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h; sourceTree = ""; }; - 6A83EDAC97C7A74FA2625134D35D4560 /* PFPushChannelsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushChannelsController.h; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.h; sourceTree = ""; }; - 6BC6D066DB5DE208C19F3EF18D5033CF /* PFObjectEstimatedData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectEstimatedData.m; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m; sourceTree = ""; }; - 6CA0FB7E1B7B3B44E19E9F459BDE3FC5 /* PFPush.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPush.m; path = Parse/PFPush.m; sourceTree = ""; }; - 6DC7C863A91F293E7888686B75ADDA92 /* PFRESTObjectCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectCommand.m; path = Parse/Internal/Commands/PFRESTObjectCommand.m; sourceTree = ""; }; - 6E530CB9C9FCEEC48D0D6022A3B9E461 /* PFWeakValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFWeakValue.m; path = Parse/Internal/PFWeakValue.m; sourceTree = ""; }; - 6E5C86338C3B23D609E0EF8581B094C1 /* PFRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState.h; path = Parse/Internal/Relation/State/PFRelationState.h; sourceTree = ""; }; - 6F692090984F30582AD921FA0C5AF89E /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; }; - 6FCB9CF92D4B7B99AABCC3E9837A6C8C /* PFCloud.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloud.m; path = Parse/PFCloud.m; sourceTree = ""; }; - 70327113CA3A1A88572E8F96D12041F4 /* PFDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDevice.h; path = Parse/Internal/PFDevice.h; sourceTree = ""; }; - 7046AB20AC12CE0D708ECF95F2C079BF /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; - 717C08EFA64F3FF8CD1383B57F8FFC0B /* PFRESTFileCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTFileCommand.m; path = Parse/Internal/Commands/PFRESTFileCommand.m; sourceTree = ""; }; - 72A213523367D0C4F848FD1542D0E1BB /* PFNetworkCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkCommand.h; path = Parse/Internal/PFNetworkCommand.h; sourceTree = ""; }; - 72AA7C1713DE26F7C83BC1BE68649977 /* PFThreadsafety.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFThreadsafety.m; path = Parse/Internal/ThreadSafety/PFThreadsafety.m; sourceTree = ""; }; - 7398989E9BACC2972DD360A682AB30D5 /* PFFieldOperationDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperationDecoder.h; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.h; sourceTree = ""; }; - 754F92799C47C441BC69A6DFCA0BE689 /* PFUserState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState_Private.h; path = Parse/Internal/User/State/PFUserState_Private.h; sourceTree = ""; }; - 765173C954A51B493E29F50B2D97732A /* PFInstallationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationPrivate.h; path = Parse/Internal/Installation/PFInstallationPrivate.h; sourceTree = ""; }; - 765B7A2AA534A8E804AE9123D59C9043 /* PFConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConstants.m; path = Parse/PFConstants.m; sourceTree = ""; }; - 76730C16E6204729829FF1031310068D /* PFMutableObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableObjectState.h; path = Parse/Internal/Object/State/PFMutableObjectState.h; sourceTree = ""; }; - 769433A4610BC66862A645AA9FFF52CB /* PFObjectLocalIdStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectLocalIdStore.m; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m; sourceTree = ""; }; - 76F588CFEC125CE47A5E75C49BC6E111 /* PFFileDataStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileDataStream.m; path = Parse/Internal/File/FileDataStream/PFFileDataStream.m; sourceTree = ""; }; - 77442B142F2E19A0A0521AFDCF58C91C /* PFRESTCloudCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCloudCommand.h; path = Parse/Internal/Commands/PFRESTCloudCommand.h; sourceTree = ""; }; - 78005460CA734997653B091EDC6EFBDF /* PFUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUser.m; path = Parse/PFUser.m; sourceTree = ""; }; - 7865F2D426B0005FBA1C5220282DDBEE /* BFDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFDefines.h; path = Bolts/Common/BFDefines.h; sourceTree = ""; }; - 7A061CE9E6A0CE32309E0356EB7DE8D9 /* PFLocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLocationManager.m; path = Parse/Internal/PFLocationManager.m; sourceTree = ""; }; - 7A2A025CBCE13AF790C21EB33F3FDD8A /* PFProduct+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFProduct+Private.h"; path = "Parse/Internal/Product/PFProduct+Private.h"; sourceTree = ""; }; - 7ADC119E201491E5146837A1ECDD27F1 /* PFFileState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState_Private.h; path = Parse/Internal/File/State/PFFileState_Private.h; sourceTree = ""; }; - 7ADCE9E163F3FCD8DF103AD6E0A2840B /* PFObjectFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCodingLogic.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m; sourceTree = ""; }; - 7AF5DF0C66469EF5555738D6E5627354 /* PFRESTConfigCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTConfigCommand.h; path = Parse/Internal/Commands/PFRESTConfigCommand.h; sourceTree = ""; }; - 7BEF001B9410A4976104E85881DB3C58 /* PFFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState.h; path = Parse/Internal/File/State/PFFileState.h; sourceTree = ""; }; - 7C2FB0BE9C76624C1E01BB37C1DF3416 /* PFCurrentUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentUserController.h; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.h; sourceTree = ""; }; - 7C31BD302E3DED84EC1289B2E8C260F4 /* PFQueryPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryPrivate.h; path = Parse/Internal/Query/PFQueryPrivate.h; sourceTree = ""; }; - 7CEB98AB34541B47F2042CC509B89CD4 /* PFJSONSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFJSONSerialization.h; path = Parse/Internal/PFJSONSerialization.h; sourceTree = ""; }; - 7EA388C394C5D9D428DB4F0C14EF97F7 /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; - 7F4F40BD61DDB1C6011B29A82B9D4674 /* PFOperationSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOperationSet.m; path = Parse/Internal/Object/OperationSet/PFOperationSet.m; sourceTree = ""; }; - 7F989773F048C2B6AA76E2F33AB85191 /* PFBase64Encoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBase64Encoder.h; path = Parse/Internal/PFBase64Encoder.h; sourceTree = ""; }; - 7FF8D43BA53CAB9EC8CE2C3D9BB07585 /* PFPurchaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseController.h; path = Parse/Internal/Purchase/Controller/PFPurchaseController.h; sourceTree = ""; }; - 7FFDBD38104590E7E7569E959BE85635 /* PFObjectUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectUtilities.m; path = Parse/Internal/Object/Utilities/PFObjectUtilities.m; sourceTree = ""; }; - 80356D4DBFA9C24B249DE3B4717F44B8 /* PFMutableQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableQueryState.m; path = Parse/Internal/Query/State/PFMutableQueryState.m; sourceTree = ""; }; - 807B1D200CD50072E1017510EC7A3B8E /* PFObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectState.m; path = Parse/Internal/Object/State/PFObjectState.m; sourceTree = ""; }; - 81A6715334A0491BEE68AE8FEF91CA79 /* PFObjectFileCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCoder.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.h; sourceTree = ""; }; - 81B7B344C875A3AB97E6C33C60A5F9BF /* PFRESTSessionCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTSessionCommand.m; path = Parse/Internal/Commands/PFRESTSessionCommand.m; sourceTree = ""; }; - 834AE8A8AE6F7F19DBF7A13695DA1EE9 /* PFObjectSubclassingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassingController.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m; sourceTree = ""; }; - 83D00AFB6C86BE198D122C01CC505FB9 /* PFRESTCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand.h; path = Parse/Internal/Commands/PFRESTCommand.h; sourceTree = ""; }; - 83EF521AE88F3E4B58595E6C70734633 /* PFCommandRunningConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunningConstants.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m; sourceTree = ""; }; - 84D4C06D28A83DD5865841731DD2BB1C /* PFInternalUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInternalUtils.h; path = Parse/Internal/PFInternalUtils.h; sourceTree = ""; }; - 85D8C47DFF7FF802AF326B4C6383AF35 /* PFObjectConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectConstants.h; path = Parse/Internal/Object/Constants/PFObjectConstants.h; sourceTree = ""; }; - 860D0B9D3698F147687E070AD019DD1E /* PFObjectFilePersistenceController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFilePersistenceController.h; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h; sourceTree = ""; }; - 870CCACCA994D6092C3A667F1EC7EE38 /* PFMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMacros.h; path = Parse/Internal/PFMacros.h; sourceTree = ""; }; - 87310202CC115E0D59A56B46CE72FBD3 /* PFAnalyticsUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsUtilities.m; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m; sourceTree = ""; }; - 87355840B3797E204A33EF21DD786865 /* PFPaymentTransactionObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h; sourceTree = ""; }; - 8824A59A418BB304F2D1B9623F26AE12 /* PFDefaultACLController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDefaultACLController.h; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h; sourceTree = ""; }; - 883FBF6AC7D33CF1A604102A9D9779ED /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - 88690FBD663956E84E2502DB50AB5408 /* PFMutableACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableACLState.h; path = Parse/Internal/ACL/State/PFMutableACLState.h; sourceTree = ""; }; - 89095502D7357690CC6FC98B5D64DB76 /* PFURLConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLConstructor.h; path = Parse/Internal/HTTPRequest/PFURLConstructor.h; sourceTree = ""; }; - 8AF59E6E45FB90176198F0361D0B0430 /* PFURLSessionDataTaskDelegate_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h; sourceTree = ""; }; - 8AF69A58E6F7EA86A79ACA49E961650A /* PFPaymentTransactionObserver_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver_Private.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h; sourceTree = ""; }; - 8B845FC390E44059F2A5FC0E8BA8073F /* Bolts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-prefix.pch"; sourceTree = ""; }; - 8BA4F24522BCB8A666417FFCCCE66FAF /* PFRESTSessionCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTSessionCommand.h; path = Parse/Internal/Commands/PFRESTSessionCommand.h; sourceTree = ""; }; - 8C366C40EE46E2189B1D2710D70DFAC4 /* PFFileController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileController.m; path = Parse/Internal/File/Controller/PFFileController.m; sourceTree = ""; }; - 8C3EB736F8A50220457120DE7F4E7DF7 /* PFPinningEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningEventuallyQueue.m; path = Parse/Internal/PFPinningEventuallyQueue.m; sourceTree = ""; }; - 8C9096CC3342212FFE41602D93C0C169 /* PFGeoPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFGeoPoint.m; path = Parse/PFGeoPoint.m; sourceTree = ""; }; - 8CCA791631F559F162C6A4858BB0E605 /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; - 8D19D8F4E00BF286006CD6D68E92C105 /* PFFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileState.m; path = Parse/Internal/File/State/PFFileState.m; sourceTree = ""; }; - 8D8A0D5C7E7AAA06AD1719AF2C60C130 /* PFRESTUserCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTUserCommand.h; path = Parse/Internal/Commands/PFRESTUserCommand.h; sourceTree = ""; }; - 8DDA31CB23D7EDC55E267E8867ECC976 /* PFCoreDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreDataProvider.h; path = Parse/Internal/PFCoreDataProvider.h; sourceTree = ""; }; - 8E1532E528C597C81417C9A6C2A3ECA1 /* PFPushPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushPrivate.h; path = Parse/Internal/Push/PFPushPrivate.h; sourceTree = ""; }; - 8EAC8A1F239CB9A07C89A445269755B3 /* PFHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHash.h; path = Parse/Internal/PFHash.h; sourceTree = ""; }; - 8EB39D6AC1AE16A8B7C4F5DE8BB6C0A5 /* PFSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession.h; path = Parse/PFSession.h; sourceTree = ""; }; - 8ED3D96C01E8D4CCBEF611AC599F7C52 /* PFPush.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPush.h; path = Parse/PFPush.h; sourceTree = ""; }; - 8F10C0434DDB383B055CF6CA6E41A4A1 /* PFDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDecoder.m; path = Parse/Internal/PFDecoder.m; sourceTree = ""; }; - 8F51DFCB9E569CD5791CBA701D9AFE8C /* PFCloud.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloud.h; path = Parse/PFCloud.h; sourceTree = ""; }; - 8FF2D70E2A6BDA411BD8E96BE88717F8 /* PFPushManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushManager.m; path = Parse/Internal/Push/Manager/PFPushManager.m; sourceTree = ""; }; - 905F084EAA67E29023FC7262EFF7C7FC /* PFMutableObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableObjectState.m; path = Parse/Internal/Object/State/PFMutableObjectState.m; sourceTree = ""; }; - 9423B92363C6078122A8D176B24507E2 /* PFACL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACL.h; path = Parse/PFACL.h; sourceTree = ""; }; - 95F2D7917180A966F3553DB814B47079 /* PFSQLiteDatabaseResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseResult.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m; sourceTree = ""; }; - 961B5EB24B86AAC41ED236D838A64A5C /* PFQueryUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryUtilities.h; path = Parse/Internal/Query/Utilities/PFQueryUtilities.h; sourceTree = ""; }; - 96273707C86B8C6EA8146C952F2EBE64 /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; - 96AB7832E582A38AA7D72F9B8735C3BA /* PFGeoPointPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPointPrivate.h; path = Parse/Internal/PFGeoPointPrivate.h; sourceTree = ""; }; - 97E6788E626A2016CCFF03F7381911B8 /* ParseInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseInternal.h; path = Parse/Internal/ParseInternal.h; sourceTree = ""; }; - 993C9598765F98AA0527D81D83D6DEE2 /* PFSQLiteStatement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteStatement.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h; sourceTree = ""; }; - 99C509F37C4504D78F4E60A46E053B08 /* PFURLSessionUploadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionUploadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m; sourceTree = ""; }; - 9C189C08BBFF35A029515798AD989F10 /* PFEventuallyPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyPin.h; path = Parse/Internal/PFEventuallyPin.h; sourceTree = ""; }; - 9D07888730F9C387835661F6975CE0CE /* PFSubclassing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSubclassing.h; path = Parse/PFSubclassing.h; sourceTree = ""; }; - 9E7CD5EAEAC1BC3148596E0F47F3CA74 /* PFNullability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNullability.h; path = Parse/PFNullability.h; sourceTree = ""; }; - 9E9EF0B3D7C46C13AFB293451E7F566A /* ParseModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseModule.h; path = Parse/Internal/ParseModule.h; sourceTree = ""; }; - A0D7B54A478A38CB2BC90CD24EAB27B6 /* PFInternalUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInternalUtils.m; path = Parse/Internal/PFInternalUtils.m; sourceTree = ""; }; - A1081E9BC218073917433A3F2697751B /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; - A1C2072D5B7941AF0CA6A45698E16D81 /* PFACL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACL.m; path = Parse/PFACL.m; sourceTree = ""; }; - A1EA7AD5E3D6B3D7DA51A46514ACC1B2 /* PFSessionUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionUtilities.h; path = Parse/Internal/Session/Utilities/PFSessionUtilities.h; sourceTree = ""; }; - A2053B7041E0633DF0F9AD94C7B1956F /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; - A2E9FF3525464F62315EA0C2C8DBF089 /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; - A327BF223427530CA8B748A9862FA426 /* PFPushManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushManager.h; path = Parse/Internal/Push/Manager/PFPushManager.h; sourceTree = ""; }; - A3E3489C8DBCB1ADB9C7893D90F60918 /* PFQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQuery.m; path = Parse/PFQuery.m; sourceTree = ""; }; - A3ED374B51D528F113CC177E773492C6 /* PFMutableRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableRelationState.m; path = Parse/Internal/Relation/State/PFMutableRelationState.m; sourceTree = ""; }; - A46B35BACD7F1073E12FCEDE85E4B67C /* PFCurrentUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentUserController.m; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.m; sourceTree = ""; }; - A4ACC59626D38782D3773A813251B790 /* PFHTTPURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPURLRequestConstructor.h; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h; sourceTree = ""; }; - A6604E156E00003CEF6AEA0518B9D55E /* PFObjectUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectUtilities.h; path = Parse/Internal/Object/Utilities/PFObjectUtilities.h; sourceTree = ""; }; - A7A38E54B7ADBF7D1932DAF9BF6DB999 /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; - A95C008395C7EBC9844E3F003B06DC43 /* PFFileManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileManager.m; path = Parse/Internal/PFFileManager.m; sourceTree = ""; }; - A963DD1D7B9750E8E9A817472714C113 /* PFQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryController.m; path = Parse/Internal/Query/Controller/PFQueryController.m; sourceTree = ""; }; - A9A17244CCBF6923F4C1448B4C7F8259 /* BoltsVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BoltsVersion.h; path = Bolts/Common/BoltsVersion.h; sourceTree = ""; }; - A9EF3EDC4FDAFC57AB7D03F2B66F8398 /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; - AB9B2C34BBD8FBC05AEB06BCA0F9C9CF /* PFInstallationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationConstants.h; path = Parse/Internal/Installation/Constants/PFInstallationConstants.h; sourceTree = ""; }; - ABC73F2E99BCC42C0125231EAF7EDB15 /* PFPushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState.h; path = Parse/Internal/Push/State/PFPushState.h; sourceTree = ""; }; - ACB6900468A2F6CE7B3A606F3CA5F322 /* PFObjectFilePersistenceController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFilePersistenceController.m; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m; sourceTree = ""; }; - ADAA3EE17CA0B38B1E402F112E0339B9 /* PFUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserState.m; path = Parse/Internal/User/State/PFUserState.m; sourceTree = ""; }; - ADF1886AF6A65E3EF655A0635E8875D4 /* PFFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile.h; path = Parse/PFFile.h; sourceTree = ""; }; - AE1AF3237CA729A9AE65C24D5465EDB0 /* PFTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTaskQueue.h; path = Parse/Internal/PFTaskQueue.h; sourceTree = ""; }; - AE6FD11DD7C073D83C79EDA40A4CBE4C /* PFEncoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEncoder.m; path = Parse/Internal/PFEncoder.m; sourceTree = ""; }; - AE99A29157A904C67890D7F7E49DDD80 /* PFProduct.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProduct.m; path = Parse/PFProduct.m; sourceTree = ""; }; - AEFE2975AB948B5A15901ABF3D7C9456 /* PFUserConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserConstants.m; path = Parse/Internal/User/Constants/PFUserConstants.m; sourceTree = ""; }; - AFCE9242FBE9C6F5B79A769A629C60CF /* PFKeyValueCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache.h; sourceTree = ""; }; - B25F8AA5E0ACA8EF99E4B7A34CA08791 /* PFURLSessionCommandRunner_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h; sourceTree = ""; }; - B32EAEBB2BF0E7999CBAA8BBC9844BB8 /* PFOfflineQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryController.m; path = Parse/Internal/Query/Controller/PFOfflineQueryController.m; sourceTree = ""; }; - B3F709284CED11CD6FFD287A21D7356C /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; - B5045A6DC57A247B1BB14933FDCA672F /* PFMultiProcessFileLock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLock.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m; sourceTree = ""; }; - B53A1E293DB4591CB07EB02181C2B192 /* PFLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogger.h; path = Parse/Internal/PFLogger.h; sourceTree = ""; }; - B5F07D1F2661374F427EFA9F321E58A9 /* PFURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h; sourceTree = ""; }; - B60239EFD344C553851D340E46C88513 /* PFInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationController.m; path = Parse/Internal/Installation/Controller/PFInstallationController.m; sourceTree = ""; }; - B6230E95CC1C91D65E987B6F92071EE0 /* PFACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACLState.m; path = Parse/Internal/ACL/State/PFACLState.m; sourceTree = ""; }; - B6483E9C28C9D90DBE19EE9FEA7C05BA /* PFCategoryLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCategoryLoader.h; path = Parse/Internal/PFCategoryLoader.h; sourceTree = ""; }; - B71BDBAA3E5BDFECB4D5FA52A92DDE3C /* PFUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserController.h; path = Parse/Internal/User/Controller/PFUserController.h; sourceTree = ""; }; - B828EE160146AC71D96D74359D0B87D9 /* PFAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAlertView.m; path = Parse/Internal/PFAlertView.m; sourceTree = ""; }; - B82B704DB25FE99DA94E96510CA4115E /* PFSQLiteStatement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteStatement.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m; sourceTree = ""; }; - B8702C4718ECDE4EC13CAB9FEBD20A78 /* PFFileController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileController.h; path = Parse/Internal/File/Controller/PFFileController.h; sourceTree = ""; }; - B90CFF6D8D057714B5CB05B1EF6832E7 /* PFSQLiteDatabaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseController.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h; sourceTree = ""; }; - B9559972A6331681B0BFCE99D4830D0C /* PFMutablePushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutablePushState.m; path = Parse/Internal/Push/State/PFMutablePushState.m; sourceTree = ""; }; + 64541D2ABD36F76DA73F677AC3E20A1A /* PFACL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACL.h; path = Parse/PFACL.h; sourceTree = ""; }; + 64A6FC072C0BE15E0FB1732E5E7BFA8F /* PFOfflineQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryController.m; path = Parse/Internal/Query/Controller/PFOfflineQueryController.m; sourceTree = ""; }; + 64CA497DEB5823668E1CF3AEF0FC8118 /* PFAnalyticsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsController.m; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.m; sourceTree = ""; }; + 6516FEAA3036D59756B8161A5A9E7918 /* PFFileDataStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileDataStream.h; path = Parse/Internal/File/FileDataStream/PFFileDataStream.h; sourceTree = ""; }; + 6577AD13A469645712E5462FABF1FD4F /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; + 66778E4EF145FC32D4ED5D0B3B643425 /* PFProduct+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFProduct+Private.h"; path = "Parse/Internal/Product/PFProduct+Private.h"; sourceTree = ""; }; + 66B0DF4B48195D78B041D58D3C3AEE3F /* PFInstallationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationPrivate.h; path = Parse/Internal/Installation/PFInstallationPrivate.h; sourceTree = ""; }; + 6753A9356424F2F8B192F9B14278EE8E /* PFRelationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationPrivate.h; path = Parse/Internal/Relation/PFRelationPrivate.h; sourceTree = ""; }; + 67B621259A8F197B0245C2C5B5003445 /* PFURLSessionFileDownloadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionFileDownloadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h; sourceTree = ""; }; + 68F8CC838971F8BE4FD097EA7C5BF494 /* PFKeyValueCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache.h; sourceTree = ""; }; + 6961E549FC85F85EB7560B887B11C928 /* POPSpringSolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringSolver.h; path = pop/POPSpringSolver.h; sourceTree = ""; }; + 696FA42E303EDB3CADE000C9A7F03B68 /* PFOfflineQueryLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryLogic.m; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m; sourceTree = ""; }; + 6A5BCCC7BC1F6EA4EF7FD3C7BB518BAB /* PFRESTCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCommand.m; path = Parse/Internal/Commands/PFRESTCommand.m; sourceTree = ""; }; + 6B12A0FF8B77277D84507AC79070FF41 /* PFCommandURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandURLRequestConstructor.m; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m; sourceTree = ""; }; + 6B2C19C0AF74CAAFAD47C599A4E9A495 /* PFMutablePushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutablePushState.h; path = Parse/Internal/Push/State/PFMutablePushState.h; sourceTree = ""; }; + 6B58384502B9F28F6975F16F9DB0EFF3 /* PFUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserController.h; path = Parse/Internal/User/Controller/PFUserController.h; sourceTree = ""; }; + 6CBB64CFFD32EF20996F33E08CE27F2B /* PFInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallation.m; path = Parse/PFInstallation.m; sourceTree = ""; }; + 6CC0DF9EFC230F428EBC36272C09AF04 /* PFPaymentTransactionObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h; sourceTree = ""; }; + 6D24EDB2D5A2B95E2AC01499F225F585 /* PFCoreManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreManager.h; path = Parse/Internal/PFCoreManager.h; sourceTree = ""; }; + 6D33981E62B4BA883B0FBE4A4DA1C812 /* PFObjectEstimatedData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectEstimatedData.m; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m; sourceTree = ""; }; + 6D47488328F5D210AF09C2E49EAF28AE /* PFApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFApplication.m; path = Parse/Internal/PFApplication.m; sourceTree = ""; }; + 6DB2F830CB43261A32A1658BB35A9006 /* PFSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSession.m; path = Parse/PFSession.m; sourceTree = ""; }; + 6DDEF20541344C4516B6DD22C1EB240F /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; + 6DE516CCF6D322CB4CA050FD6E52A70E /* ParseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseManager.h; path = Parse/Internal/ParseManager.h; sourceTree = ""; }; + 6E5E6D3B44810118191C60A9772E4E48 /* BFTask+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Private.m"; path = "Parse/Internal/BFTask+Private.m"; sourceTree = ""; }; + 6EA62081F6F193B86D2CDD0A04D0E99C /* PFRole.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRole.m; path = Parse/PFRole.m; sourceTree = ""; }; + 711043A9271B2D627CCBD4F5731F56B1 /* PFMultiProcessFileLock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLock.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m; sourceTree = ""; }; + 714C2B37BE3060D4E9F3C32DD8DA8D04 /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; + 714D2457E720A0BF6948DBDCD450623B /* PFEncoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEncoder.m; path = Parse/Internal/PFEncoder.m; sourceTree = ""; }; + 72761DCB73DE19D59EFDEF3DF961C4F3 /* PFObjectConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectConstants.h; path = Parse/Internal/Object/Constants/PFObjectConstants.h; sourceTree = ""; }; + 7371F16336283F2D8BB2A199CD4DDEF5 /* POPSpringAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringAnimation.h; path = pop/POPSpringAnimation.h; sourceTree = ""; }; + 74ACACF597B47C752DF60C1269A50016 /* PFURLSessionFileDownloadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionFileDownloadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m; sourceTree = ""; }; + 74CC29CB5720DF98AD22C289EBAA7FBD /* PFURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSession.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m; sourceTree = ""; }; + 74EE96B44DF0116B1160526B21D7D189 /* PFMultiProcessFileLockController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLockController.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h; sourceTree = ""; }; + 751B683157A512BFFD27276B937C7FD6 /* PFProductsRequestHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductsRequestHandler.m; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m; sourceTree = ""; }; + 7566A44BF4C7FE91F74365E72E1C4073 /* PFDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDecoder.m; path = Parse/Internal/PFDecoder.m; sourceTree = ""; }; + 77312E9917F3B4071B52F28CD4A21EBC /* Bolts.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.xcconfig; sourceTree = ""; }; + 77409243AF81F02474E6071043269440 /* PFPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPin.h; path = Parse/Internal/LocalDataStore/Pin/PFPin.h; sourceTree = ""; }; + 776FA4A81A104C872B1C274D67CE18FE /* PFUserState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState_Private.h; path = Parse/Internal/User/State/PFUserState_Private.h; sourceTree = ""; }; + 791F22142433CB687B6BD4F07D0950F1 /* PFObjectSubclassInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassInfo.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m; sourceTree = ""; }; + 7962520325311C12136692F8AA4F4AD1 /* PFMutableObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableObjectState.m; path = Parse/Internal/Object/State/PFMutableObjectState.m; sourceTree = ""; }; + 797597C3E809F5E570660958DD8719D8 /* PFMutableRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableRelationState.h; path = Parse/Internal/Relation/State/PFMutableRelationState.h; sourceTree = ""; }; + 7AF8C210F41A36E77FE11185CD850274 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; }; + 7BEEAEF9152946B143C6C357FCF24E5A /* PFEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue.h; path = Parse/Internal/PFEventuallyQueue.h; sourceTree = ""; }; + 7BF3525974C036CC12A09FF5C9633C85 /* PFFileStagingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileStagingController.h; path = Parse/Internal/File/Controller/PFFileStagingController.h; sourceTree = ""; }; + 7DEA9336EA629BC874D1CD9F3933E83C /* PFFileController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileController.m; path = Parse/Internal/File/Controller/PFFileController.m; sourceTree = ""; }; + 7EA341866E76C794E960BB9753925294 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; + 7F59C51782AE555897A5B92D6B3CECD1 /* POPBasicAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPBasicAnimationInternal.h; path = pop/POPBasicAnimationInternal.h; sourceTree = ""; }; + 80E779232DDE695E182A465B9AE80CB8 /* PFSQLiteDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabase.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m; sourceTree = ""; }; + 828F0C1371108640DCECDC077D80E6F9 /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; + 82A5F04959D1ADFDEFFC1808EF20F799 /* PFInstallationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationConstants.h; path = Parse/Internal/Installation/Constants/PFInstallationConstants.h; sourceTree = ""; }; + 82C15773B786AB50406081B6A022CFAA /* PFCachedQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCachedQueryController.m; path = Parse/Internal/Query/Controller/PFCachedQueryController.m; sourceTree = ""; }; + 832FCCE6C5FBEE8B8EDE5CB7506C1387 /* PFAnonymousAuthenticationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousAuthenticationProvider.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h; sourceTree = ""; }; + 8336CCF2280C58E6C367DF4EC0EBB7B3 /* POPAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimation.mm; path = pop/POPAnimation.mm; sourceTree = ""; }; + 83720EF13618F9740F2F7E1F7E8DE8B9 /* PFMutableUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableUserState.h; path = Parse/Internal/User/State/PFMutableUserState.h; sourceTree = ""; }; + 84C9421C2D04758A8862D5D9334EC3D3 /* PFBase64Encoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBase64Encoder.m; path = Parse/Internal/PFBase64Encoder.m; sourceTree = ""; }; + 84ECBFAB9763ED2C04848E86CC5D6C1D /* PFOfflineStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineStore.m; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m; sourceTree = ""; }; + 85AB3D3F633121769C963DCA3B59E6D6 /* PFCurrentConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentConfigController.m; path = Parse/Internal/Config/Controller/PFCurrentConfigController.m; sourceTree = ""; }; + 85C7493C5ED4D1548757C3A048535862 /* PFRESTConfigCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTConfigCommand.h; path = Parse/Internal/Commands/PFRESTConfigCommand.h; sourceTree = ""; }; + 861462FD667FE3B82B6900562A7A672F /* PFAnalyticsUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsUtilities.m; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m; sourceTree = ""; }; + 865C327D27A51821F5096832A0A79CD6 /* PFPaymentTransactionObserver_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver_Private.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h; sourceTree = ""; }; + 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 89508E9160A4510C35341638A4A33FFC /* PFMutableACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableACLState.m; path = Parse/Internal/ACL/State/PFMutableACLState.m; sourceTree = ""; }; + 895E6BCE8395CB2A323176F349B9EFC6 /* PFQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryState.m; path = Parse/Internal/Query/State/PFQueryState.m; sourceTree = ""; }; + 8A01E3948888676B760B4B5642C2B3CD /* PFErrorUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFErrorUtilities.m; path = Parse/Internal/PFErrorUtilities.m; sourceTree = ""; }; + 8AC51F94ED4331609976AE134591C5FF /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; + 8BE5F0A1B5CEA848AD6F87144411D8B7 /* PFObjectFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCodingLogic.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h; sourceTree = ""; }; + 8C42D1919287483D0731E55C7039390D /* PFWeakValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFWeakValue.m; path = Parse/Internal/PFWeakValue.m; sourceTree = ""; }; + 8C954AD66C579F4C80C80E36A0D3E80B /* PFCoreDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreDataProvider.h; path = Parse/Internal/PFCoreDataProvider.h; sourceTree = ""; }; + 8CD59F7A3B1C57C26A073580850CFD7F /* PFAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalytics.m; path = Parse/PFAnalytics.m; sourceTree = ""; }; + 8D157CA12EC27ADEB58C088EBB17D4CC /* PFSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession.h; path = Parse/PFSession.h; sourceTree = ""; }; + 8D874E8C6013F838D31865D7CACFFC8C /* PFURLSessionJSONDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionJSONDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h; sourceTree = ""; }; + 8DCE002C62F26D3852FE0C2CB25CACEA /* PFConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig.h; path = Parse/PFConfig.h; sourceTree = ""; }; + 8E24261DA563B7612DBA518C8FEB0B6B /* PFPush.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPush.h; path = Parse/PFPush.h; sourceTree = ""; }; + 8E5C09D44589D6540714FF487D97E0C3 /* PFPropertyInfo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Private.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h; sourceTree = ""; }; + 8EC4FC6A3A06D9292C296C691005546B /* POPCustomAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPCustomAnimation.mm; path = pop/POPCustomAnimation.mm; sourceTree = ""; }; + 90908F63ED9505B2C6685248AE5457F4 /* PFRelationState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState_Private.h; path = Parse/Internal/Relation/State/PFRelationState_Private.h; sourceTree = ""; }; + 90DA3C63E9AD758336342BC51C0BB859 /* POPDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDefines.h; path = pop/POPDefines.h; sourceTree = ""; }; + 90F15F6DE2D590C1823069FF6E87E823 /* PFPushChannelsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushChannelsController.m; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.m; sourceTree = ""; }; + 9179D67A40E4CA93EA605BECE4456488 /* PFObjectBatchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectBatchController.h; path = Parse/Internal/Object/BatchController/PFObjectBatchController.h; sourceTree = ""; }; + 91C278F6237539322009B508C24CC49D /* PFPushController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushController.h; path = Parse/Internal/Push/Controller/PFPushController.h; sourceTree = ""; }; + 91C444E945365A3AEA1C0182D529EA62 /* PFAsyncTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAsyncTaskQueue.h; path = Parse/Internal/PFAsyncTaskQueue.h; sourceTree = ""; }; + 924397DD8F89F34DFFD235E510DCA00F /* PFObjectConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectConstants.m; path = Parse/Internal/Object/Constants/PFObjectConstants.m; sourceTree = ""; }; + 928EC8B9105DA581C7896C2102E87BE2 /* POPCustomAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPCustomAnimation.h; path = pop/POPCustomAnimation.h; sourceTree = ""; }; + 92BE0A4991FB16CAC08DA54E2D9B4E4C /* PFObject+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFObject+Subclass.h"; path = "Parse/PFObject+Subclass.h"; sourceTree = ""; }; + 943A16F9CDDE8E3F97A4CC444A9CBD38 /* PFRESTPushCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTPushCommand.m; path = Parse/Internal/Commands/PFRESTPushCommand.m; sourceTree = ""; }; + 94815AA3EE3CBA04CEE85515701AD534 /* POPAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimator.h; path = pop/POPAnimator.h; sourceTree = ""; }; + 94DE9F283B3DD4A47D7A8EA13D83D2C1 /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; + 96015F1C746803D9318614B277F71BCB /* UnitBezier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UnitBezier.h; path = pop/WebCore/UnitBezier.h; sourceTree = ""; }; + 96444BC173DBE095E670C72753A21C51 /* PFQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryController.h; path = Parse/Internal/Query/Controller/PFQueryController.h; sourceTree = ""; }; + 9663A817A809169745F3F8E987FFE076 /* POPLayerExtras.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPLayerExtras.h; path = pop/POPLayerExtras.h; sourceTree = ""; }; + 972EBE95D808C0CA2DAD94DDC5AC5F1D /* PFSessionUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionUtilities.h; path = Parse/Internal/Session/Utilities/PFSessionUtilities.h; sourceTree = ""; }; + 97519DB5264A8748FB5782787D62615B /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; + 97EDF5367846B0B65AF31CA41D2B7812 /* Parse.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Parse.xcconfig; sourceTree = ""; }; + 98821C83404F255ED479CAA0E69D588A /* PFObjectSubclassInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassInfo.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h; sourceTree = ""; }; + 99AD17888337EB965D0DF3DEB606CAA4 /* PFSessionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionController.m; path = Parse/Internal/Session/Controller/PFSessionController.m; sourceTree = ""; }; + 99FC3FA412F7A62CE7905F3F3DB1A2B8 /* PFBaseState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBaseState.m; path = Parse/Internal/PFBaseState.m; sourceTree = ""; }; + 9A2313F192E2841C83555BDC26D3866B /* PFUserPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserPrivate.h; path = Parse/Internal/User/PFUserPrivate.h; sourceTree = ""; }; + 9BACBB72ECB77F59482B166BC28EA869 /* PFRESTCloudCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCloudCommand.m; path = Parse/Internal/Commands/PFRESTCloudCommand.m; sourceTree = ""; }; + 9C3FE18EB564AF4087573DE6F3F2D3D3 /* POPMath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPMath.h; path = pop/POPMath.h; sourceTree = ""; }; + 9D0F8BFFB2B329D3F8B455B14472E5E9 /* PFReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFReachability.h; path = Parse/Internal/PFReachability.h; sourceTree = ""; }; + 9DA58C3428E2A0E2F88C2A0522297274 /* POPAnimationTracerInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationTracerInternal.h; path = pop/POPAnimationTracerInternal.h; sourceTree = ""; }; + 9DB9AD91F894187B691D13713E1FB4D9 /* PFObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectController.m; path = Parse/Internal/Object/Controller/PFObjectController.m; sourceTree = ""; }; + 9EED13B4582C1463F725EE279074226F /* PFRESTObjectCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectCommand.h; path = Parse/Internal/Commands/PFRESTObjectCommand.h; sourceTree = ""; }; + 9F210DEEA777E0BF1995DC3570CC616E /* POPAnimationEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationEvent.h; path = pop/POPAnimationEvent.h; sourceTree = ""; }; + 9F5A413E6DB1455C1427DAEBF27B2133 /* PFMutableACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableACLState.h; path = Parse/Internal/ACL/State/PFMutableACLState.h; sourceTree = ""; }; + 9FB82515BD6D0F9EC91327CB819F8BC6 /* PFFile_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile_Private.h; path = Parse/Internal/File/PFFile_Private.h; sourceTree = ""; }; + 9FD085377EDB67B301B8EE26D9310CCC /* PFQueryState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState_Private.h; path = Parse/Internal/Query/State/PFQueryState_Private.h; sourceTree = ""; }; + A091F705C56846E993F12A441C8A163B /* PFCurrentInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentInstallationController.m; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m; sourceTree = ""; }; + A0C39E3679DEC122C57CAF59AC4607D6 /* PFCurrentUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentUserController.m; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.m; sourceTree = ""; }; + A19FD133843D5FCF16B8AF3B4E165515 /* POPMath.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPMath.mm; path = pop/POPMath.mm; sourceTree = ""; }; + A211C4790E0A281B7800BE2B399091FF /* PFQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState.h; path = Parse/Internal/Query/State/PFQueryState.h; sourceTree = ""; }; + A2F0842045651D9FD30403B5033648D7 /* PFPushChannelsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushChannelsController.h; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.h; sourceTree = ""; }; + A3529F546C50E5FA9E92AE069C4127AA /* PFInstallationIdentifierStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h; sourceTree = ""; }; + A3A336AAE714C90D57D61FFCE1F62540 /* PFRESTObjectCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectCommand.m; path = Parse/Internal/Commands/PFRESTObjectCommand.m; sourceTree = ""; }; + A3ABEEBB2584C20918BF1285C34EA0E9 /* PFCurrentConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentConfigController.h; path = Parse/Internal/Config/Controller/PFCurrentConfigController.h; sourceTree = ""; }; + A3F9EF3F957FD4DB2D6C601F067168F7 /* PFObjectLocalIdStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectLocalIdStore.h; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h; sourceTree = ""; }; + A40C6F5379E163ACAB3BFEADF6BBF21B /* PFKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeychainStore.h; path = Parse/Internal/PFKeychainStore.h; sourceTree = ""; }; + A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libpop.a; sourceTree = BUILT_PRODUCTS_DIR; }; + A4680CAB4F1F20CE4E4FF134C9A11A0D /* PFObjectSubclassingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassingController.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m; sourceTree = ""; }; + A52285082871167215D3C139EB152B98 /* PFURLSessionDataTaskDelegate_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h; sourceTree = ""; }; + A52D3DEFF51B24F1DDCCC3F6705AB35B /* PFCommandRunning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunning.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.m; sourceTree = ""; }; + A696C6A7BB4CC0BCC4967D91315B61AC /* ParseModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseModule.m; path = Parse/Internal/ParseModule.m; sourceTree = ""; }; + A85428811E6DF1E07CDC7F512CC5CC56 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + A872DF33FEEBCB36CF6A53343C39C8D1 /* PFSubclassing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSubclassing.h; path = Parse/PFSubclassing.h; sourceTree = ""; }; + A9345BB3B8924E56D392BA3231701002 /* PFJSONSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFJSONSerialization.m; path = Parse/Internal/PFJSONSerialization.m; sourceTree = ""; }; + A94E11CCEE95914D7CE1B1B35E7C1F89 /* PFMutableRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableRelationState.m; path = Parse/Internal/Relation/State/PFMutableRelationState.m; sourceTree = ""; }; + A9ADF726213C599DDAE3F7A1849BDBF6 /* PFEncoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEncoder.h; path = Parse/Internal/PFEncoder.h; sourceTree = ""; }; + A9D75702C8583CBA05067061643DEB98 /* PFRESTAnalyticsCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTAnalyticsCommand.h; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.h; sourceTree = ""; }; + A9E567CF4EF740CD931B21421CDEF9E4 /* PFACLState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState_Private.h; path = Parse/Internal/ACL/State/PFACLState_Private.h; sourceTree = ""; }; + AA2F4B0C1884B9FA8CA4005505904B4F /* PFWeakValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFWeakValue.h; path = Parse/Internal/PFWeakValue.h; sourceTree = ""; }; + AA6EBD92B6893560E360E020C1911D5A /* PFPushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState.h; path = Parse/Internal/Push/State/PFPushState.h; sourceTree = ""; }; + AC00DC436BD41D96D7CDADBBE0CCBC63 /* PFUserFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserFileCodingLogic.m; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m; sourceTree = ""; }; + ACF9532A0D0C66EC20F4225EBD285526 /* PFObjectState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState_Private.h; path = Parse/Internal/Object/State/PFObjectState_Private.h; sourceTree = ""; }; + AF50C03C543FAF9B976475CB98E20B0D /* PFSQLiteStatement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteStatement.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m; sourceTree = ""; }; + AF9E249BDEE7198A0DA97A4426AE5431 /* PFPushUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushUtilities.m; path = Parse/Internal/Push/Utilites/PFPushUtilities.m; sourceTree = ""; }; + B0CE575CDDE0B1795BB8B88E0B49ACA0 /* POPDecayAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDecayAnimationInternal.h; path = pop/POPDecayAnimationInternal.h; sourceTree = ""; }; + B0D65D1A09B22A4BB4B1C9A5BD78B77B /* PFCommandCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache.h; path = Parse/Internal/PFCommandCache.h; sourceTree = ""; }; + B0F7BCEE9A871E1193D694931FA31E17 /* POPDecayAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDecayAnimation.h; path = pop/POPDecayAnimation.h; sourceTree = ""; }; + B330BCF969EF6189E02E10926FB95CED /* POPGeometry.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPGeometry.mm; path = pop/POPGeometry.mm; sourceTree = ""; }; + B3919700A3759610223FD35F92AB0AA9 /* PFCloudCodeController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloudCodeController.m; path = Parse/Internal/CloudCode/PFCloudCodeController.m; sourceTree = ""; }; + B40C2F17FC5388F0013F8D1C257B70DC /* PFObjectPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectPrivate.h; path = Parse/Internal/Object/PFObjectPrivate.h; sourceTree = ""; }; + B4D6A8E418A8D134A61BFD6E094F65C4 /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; + B4F105DB0D9A5C8E74B80DB5C0C9BEFF /* PFHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPRequest.h; path = Parse/Internal/HTTPRequest/PFHTTPRequest.h; sourceTree = ""; }; + B507DE9CFF3C90B0CFF815EF53AF8474 /* PFJSONSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFJSONSerialization.h; path = Parse/Internal/PFJSONSerialization.h; sourceTree = ""; }; + B5AA5A6C3CB437DD04C72C5E6E53B305 /* PFApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFApplication.h; path = Parse/Internal/PFApplication.h; sourceTree = ""; }; + B6142CFCE45847BB7B5926039074D3DB /* PFUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserState.m; path = Parse/Internal/User/State/PFUserState.m; sourceTree = ""; }; + B63F361CAC0664EA5B1BDBD82688DB0A /* PFLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocationManager.h; path = Parse/Internal/PFLocationManager.h; sourceTree = ""; }; + B727105265500960B53BB43FD44AB19E /* PFQueryPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryPrivate.h; path = Parse/Internal/Query/PFQueryPrivate.h; sourceTree = ""; }; + B72923D868E99D0FEF748E99A0931A2F /* PFEventuallyQueue_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue_Private.h; path = Parse/Internal/PFEventuallyQueue_Private.h; sourceTree = ""; }; + B7CFA60CD26AF95E62DC7D82173BA5F6 /* PFMutableFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableFileState.h; path = Parse/Internal/File/State/PFMutableFileState.h; sourceTree = ""; }; + B7EE7F890CF09AF26E1191C3D4540CE1 /* PFPushController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushController.m; path = Parse/Internal/Push/Controller/PFPushController.m; sourceTree = ""; }; + B7F689B7A8A241A249C1A39110F19728 /* PFObjectLocalIdStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectLocalIdStore.m; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m; sourceTree = ""; }; + B854EEBA088DE9B81F5F84844F966B49 /* PFQueryUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryUtilities.m; path = Parse/Internal/Query/Utilities/PFQueryUtilities.m; sourceTree = ""; }; + B88FEBD183FE3500545B1AB65A492E8B /* PFAnonymousUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousUtils.m; path = Parse/PFAnonymousUtils.m; sourceTree = ""; }; + B9CD991531E7E5557C57269840034107 /* PFPurchase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchase.h; path = Parse/PFPurchase.h; sourceTree = ""; }; BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - BAB69D923C8169E049A0B1F446DE3C22 /* PFEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyQueue.m; path = Parse/Internal/PFEventuallyQueue.m; sourceTree = ""; }; - BB328A47E71DF5C9ED039046F3CF4E10 /* PFUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState.h; path = Parse/Internal/User/State/PFUserState.h; sourceTree = ""; }; - BB3CC31AB928B710A068EFE34F219D54 /* PFRESTPushCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTPushCommand.m; path = Parse/Internal/Commands/PFRESTPushCommand.m; sourceTree = ""; }; - BC4062E6A12C7F83FFAFD42283212C9A /* PFDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDataProvider.h; path = Parse/Internal/PFDataProvider.h; sourceTree = ""; }; - BCF7D81BB8B3017FFCA5BFA657475191 /* PFJSONSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFJSONSerialization.m; path = Parse/Internal/PFJSONSerialization.m; sourceTree = ""; }; - BD53148FD3F25A5417B79C08A7EF6137 /* PFRESTFileCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTFileCommand.h; path = Parse/Internal/Commands/PFRESTFileCommand.h; sourceTree = ""; }; - BD59DB857ADCDA5EE20B1AF8286DC64E /* PFPropertyInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo.h; sourceTree = ""; }; - BD7E295A2705B98E78F1230626724816 /* PFMultiProcessFileLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLock.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h; sourceTree = ""; }; - BE9304218DB27984F98075C9997693A9 /* PFProduct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProduct.h; path = Parse/PFProduct.h; sourceTree = ""; }; - BF1F7285450FFB765AE85728E98D3277 /* PFPushUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushUtilities.h; path = Parse/Internal/Push/Utilites/PFPushUtilities.h; sourceTree = ""; }; - BF48D0C85E7175A9594CACE087E1F8D3 /* PFObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectControlling.h; path = Parse/Internal/Object/Controller/PFObjectControlling.h; sourceTree = ""; }; + BA67CA21B8529E8E4280069C4CC1FA26 /* PFAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics.h; path = Parse/PFAnalytics.h; sourceTree = ""; }; + BAC76B9259ACF68B0E7869A148AE8EEE /* PFSessionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionController.h; path = Parse/Internal/Session/Controller/PFSessionController.h; sourceTree = ""; }; + BBFB017F02B69A95630ECA78C0507891 /* PFObjectFileCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCoder.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.h; sourceTree = ""; }; + BC8B4ABBE8DA9D24096F873234FCA24C /* PFURLConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLConstructor.h; path = Parse/Internal/HTTPRequest/PFURLConstructor.h; sourceTree = ""; }; + BD06D82A2D98EDF6AE058093F67CCA71 /* PFObjectEstimatedData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectEstimatedData.h; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h; sourceTree = ""; }; + BD53F748C3855917C34EE3DCD3CD3F92 /* PFPushPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushPrivate.h; path = Parse/Internal/Push/PFPushPrivate.h; sourceTree = ""; }; + BD96834E719E340094942FD1EC1DE357 /* PFUserFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserFileCodingLogic.h; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h; sourceTree = ""; }; + BDBDCD188680D0AF62B9AC8AE7D15A8C /* PFACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACLState.m; path = Parse/Internal/ACL/State/PFACLState.m; sourceTree = ""; }; + BDFFC646E1E0963C745694C371C7CA92 /* PFFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFile.m; path = Parse/PFFile.m; sourceTree = ""; }; + BF436F013E06183E4E80FEDB3EE6640C /* PFRESTCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand.h; path = Parse/Internal/Commands/PFRESTCommand.h; sourceTree = ""; }; + BF599E498617D2A09E55B46584A069AC /* PFAnonymousUtils_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils_Private.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h; sourceTree = ""; }; BF59BC15D23E1E1912C8F334E7236813 /* Pods-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-acknowledgements.plist"; sourceTree = ""; }; - BF600E65BDFE51829FB662904C48520F /* PFSessionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionController.m; path = Parse/Internal/Session/Controller/PFSessionController.m; sourceTree = ""; }; - BF7A6665C70BAC3FA8DEA15E402165E2 /* PFPropertyInfo_Runtime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Runtime.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h; sourceTree = ""; }; - BF85BDBB00B0B90C79842355DCCE5702 /* PFURLSessionCommandRunner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h; sourceTree = ""; }; - BFFD2763428584483FBC7980FDEE0319 /* PFCurrentConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentConfigController.h; path = Parse/Internal/Config/Controller/PFCurrentConfigController.h; sourceTree = ""; }; - C09DCB3EF4CB0BAF12A22BD98B68BFAA /* PFCommandRunning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunning.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.h; sourceTree = ""; }; - C182382BFBF1EE8F2E17E6E7DFCABA57 /* PFRESTCloudCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCloudCommand.m; path = Parse/Internal/Commands/PFRESTCloudCommand.m; sourceTree = ""; }; - C2B8FF73618A90330150849A195BFC2C /* PFCurrentObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentObjectControlling.h; path = Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h; sourceTree = ""; }; - C2DE5E9C06AC71245804541B12D5F7B8 /* PFURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSession.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m; sourceTree = ""; }; - C3021C35E215764D5CD8DA96BB1AF638 /* PFInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationController.h; path = Parse/Internal/Installation/Controller/PFInstallationController.h; sourceTree = ""; }; - C397337C5959FB9CDCAAD05A78CD13AD /* Parse_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse_Private.h; path = Parse/Internal/Parse_Private.h; sourceTree = ""; }; - C3D50155B3D10EDC8634E8BCE3E2EC49 /* PFConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConstants.h; path = Parse/PFConstants.h; sourceTree = ""; }; - C438131B9FF8C57DBDE42A1886182C1F /* PFConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig_Private.h; path = Parse/Internal/Config/PFConfig_Private.h; sourceTree = ""; }; - C4FC14EB432E641BAA43CE3A6CA50340 /* PFPushState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState_Private.h; path = Parse/Internal/Push/State/PFPushState_Private.h; sourceTree = ""; }; - C52FA914AE60BC50812988E15670B2B0 /* PFEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue.h; path = Parse/Internal/PFEventuallyQueue.h; sourceTree = ""; }; - C5E2765A6C6141C912C8C89927E5E59E /* PFAnalytics_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics_Private.h; path = Parse/Internal/Analytics/PFAnalytics_Private.h; sourceTree = ""; }; - C6F8830B4BAD707ED99EB6DA023C7803 /* PFOfflineStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineStore.m; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m; sourceTree = ""; }; - C72B7C59C5C07C9D6873A101E4CD589F /* PFPaymentTransactionObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPaymentTransactionObserver.m; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m; sourceTree = ""; }; - C86658E5106D83528921871195EA7A25 /* PFQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryState.m; path = Parse/Internal/Query/State/PFQueryState.m; sourceTree = ""; }; - C8673179A0982B40E80A428E4FB775FE /* PFACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState.h; path = Parse/Internal/ACL/State/PFACLState.h; sourceTree = ""; }; - C876DBA76406D0CD90D0A146D8241EB0 /* PFCommandRunning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunning.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.m; sourceTree = ""; }; - C9CBCE0E34FCE6BCB16E3402C6CF887E /* PFQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState.h; path = Parse/Internal/Query/State/PFQueryState.h; sourceTree = ""; }; - CA8004D86110E800F8B66A6C52331804 /* PFCommandURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandURLRequestConstructor.h; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h; sourceTree = ""; }; - CB0D33609AC2DEE7BF62A26950D3C062 /* PFAnonymousUtils_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils_Private.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h; sourceTree = ""; }; - CB26278765FDFC13590066F6B6BBE08C /* PFObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectController.m; path = Parse/Internal/Object/Controller/PFObjectController.m; sourceTree = ""; }; - CB2EB1A81CEF041251C51543CB93FA8B /* PFConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfigController.h; path = Parse/Internal/Config/Controller/PFConfigController.h; sourceTree = ""; }; - CCE521672B33AE35219C0DBD9512A6E6 /* PFPushUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushUtilities.m; path = Parse/Internal/Push/Utilites/PFPushUtilities.m; sourceTree = ""; }; - CEB26C97146C83F5B87B7771DE7F29E0 /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; - CF82FA8252D0DEF399D32F39A272A631 /* PFQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryController.h; path = Parse/Internal/Query/Controller/PFQueryController.h; sourceTree = ""; }; - CF97B19442AC920A6CD420C61B604C5A /* PFRelation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelation.m; path = Parse/PFRelation.m; sourceTree = ""; }; - D1502154EA0D5A991A1D6B8B9EFCB52F /* PFCurrentInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentInstallationController.h; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h; sourceTree = ""; }; - D1C861FA6983C0DBEE507CDD33BA8714 /* PFPinningObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningObjectStore.h; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.h; sourceTree = ""; }; - D236BD308CB967D7FED84A202A4B215B /* Parse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Parse.m; path = Parse/Parse.m; sourceTree = ""; }; - D2CC64D2FEDF6A4C762798A614A6AD05 /* PFGeoPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPoint.h; path = Parse/PFGeoPoint.h; sourceTree = ""; }; - D32CB47208011940CD4CC821E6C60F5F /* PFBase64Encoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBase64Encoder.m; path = Parse/Internal/PFBase64Encoder.m; sourceTree = ""; }; - D3E8D70C7E8EB33159CDDA0AC7B6C9DC /* PFFileManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileManager.h; path = Parse/Internal/PFFileManager.h; sourceTree = ""; }; - D4D44451B9EF1D2AABB3727B5BE49E3A /* PFPurchaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseController.m; path = Parse/Internal/Purchase/Controller/PFPurchaseController.m; sourceTree = ""; }; - D5E25950A895A52CC19D857BBECD78E4 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; - D60478F0E7C4D7B2ED83ECC80C4ED55C /* PFSQLiteDatabaseResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseResult.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h; sourceTree = ""; }; - D66D14F7F2E3EBDC0A59BB7BA3788C3D /* PFUserPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserPrivate.h; path = Parse/Internal/User/PFUserPrivate.h; sourceTree = ""; }; - D6A004354398DC71910DFA5EFAE2EE34 /* PFMultiProcessFileLockController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLockController.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h; sourceTree = ""; }; - D74C3795282F4C34ABC6339CF12F14AA /* PFRelation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelation.h; path = Parse/PFRelation.h; sourceTree = ""; }; - D83B31511109921F7A0625DCDA97EBD2 /* PFCloudCodeController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloudCodeController.m; path = Parse/Internal/CloudCode/PFCloudCodeController.m; sourceTree = ""; }; - D9AD68ED9EE4D4DA10299E21D0CF8248 /* PFKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeychainStore.m; path = Parse/Internal/PFKeychainStore.m; sourceTree = ""; }; - DA979320C889B93770A321587B8E4496 /* PFOfflineQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryController.h; path = Parse/Internal/Query/Controller/PFOfflineQueryController.h; sourceTree = ""; }; - DC63634BA83D3D3CBCBA2E87AB311573 /* PFObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState.h; path = Parse/Internal/Object/State/PFObjectState.h; sourceTree = ""; }; - DC833CC54CC9FF49BF622887A836F451 /* PFDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDevice.m; path = Parse/Internal/PFDevice.m; sourceTree = ""; }; - DCA2CF0514C165F17D511A7B9FA1A883 /* PFUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserController.m; path = Parse/Internal/User/Controller/PFUserController.m; sourceTree = ""; }; - DCFD84DA41F7C585D9DC6E2088D8F8D3 /* PFPurchase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchase.h; path = Parse/PFPurchase.h; sourceTree = ""; }; - DDE9B6448BD79C26C031AB51DB767056 /* PFMutableFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableFileState.m; path = Parse/Internal/File/State/PFMutableFileState.m; sourceTree = ""; }; - DE0701939C6512E62807F0DEAC0B88C4 /* PFSessionUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionUtilities.m; path = Parse/Internal/Session/Utilities/PFSessionUtilities.m; sourceTree = ""; }; - DFC186001D6B517135B8C4D67EEC1DBA /* PFCommandURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandURLRequestConstructor.m; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m; sourceTree = ""; }; - E0937DFD0BBDD358F01F54D3DF3EB180 /* PFPushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushState.m; path = Parse/Internal/Push/State/PFPushState.m; sourceTree = ""; }; - E0E0B5753859D0D0960D4F376D21CFBA /* PFAnonymousUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousUtils.m; path = Parse/PFAnonymousUtils.m; sourceTree = ""; }; - E18313F9207DA8A940C45F4C6D3BE5A2 /* PFQueryUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryUtilities.m; path = Parse/Internal/Query/Utilities/PFQueryUtilities.m; sourceTree = ""; }; - E1F0715F4D0AC569F9A80C8EE87A7678 /* PFURLConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLConstructor.m; path = Parse/Internal/HTTPRequest/PFURLConstructor.m; sourceTree = ""; }; - E24E0BB42A1D0F93BEE886509C659AB6 /* PFApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFApplication.h; path = Parse/Internal/PFApplication.h; sourceTree = ""; }; - E3F8B8B2001C10329EB9605C32C29711 /* PFPropertyInfo_Runtime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo_Runtime.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m; sourceTree = ""; }; - E48021241236BB075308D3A946E88952 /* PFObjectBatchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectBatchController.m; path = Parse/Internal/Object/BatchController/PFObjectBatchController.m; sourceTree = ""; }; - E5964B03763EB227A79722D086B07AEB /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; - E5BF16EBC1131EC1A8C8DF686217EDEF /* ParseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseManager.h; path = Parse/Internal/ParseManager.h; sourceTree = ""; }; - E687834AAA233DAC2762507DAF840866 /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; - E6A7D84E1E43EC5B6384808B1B5E2C0D /* PFInstallationIdentifierStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h; sourceTree = ""; }; - E6C1A7933C5A11D332D285F4E14D704B /* PFCommandResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandResult.m; path = Parse/Internal/PFCommandResult.m; sourceTree = ""; }; - E748E925ED12231ECAFCA45289DC5651 /* PFRESTQueryCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTQueryCommand.m; path = Parse/Internal/Commands/PFRESTQueryCommand.m; sourceTree = ""; }; - E7BE7DB2043BFD734996BA10DACD88D1 /* PFAnalyticsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsController.m; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.m; sourceTree = ""; }; - E7FA04FB8AE086B49BFBB161FB6C5A22 /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; - E879D654F92A43EBF40100EDA8F4723B /* PFAnalyticsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsController.h; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.h; sourceTree = ""; }; - EC05CE6C1335AF7439307E684A4A4658 /* PFCachedQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCachedQueryController.h; path = Parse/Internal/Query/Controller/PFCachedQueryController.h; sourceTree = ""; }; - ED136241C039AEF003B23EE29588B7DF /* PFCoreManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreManager.h; path = Parse/Internal/PFCoreManager.h; sourceTree = ""; }; - ED66C38BB696C6EBD5F689444DE5698B /* PFDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDecoder.h; path = Parse/Internal/PFDecoder.h; sourceTree = ""; }; - EE062DC0F3E041826FDC9B1920238531 /* PFBaseState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBaseState.m; path = Parse/Internal/PFBaseState.m; sourceTree = ""; }; - EF3CEDC763708425D34FDAF2CD1194C5 /* PFErrorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFErrorUtilities.h; path = Parse/Internal/PFErrorUtilities.h; sourceTree = ""; }; - F0F73BA329E4FD6AA01176C7431EBFE4 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; - F228BBFAF9E26128FBEF282FE73D477C /* PFInstallationIdentifierStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationIdentifierStore.m; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m; sourceTree = ""; }; - F264AB25D4F485FB43C3C052444E57A8 /* PFMutableRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableRelationState.h; path = Parse/Internal/Relation/State/PFMutableRelationState.h; sourceTree = ""; }; - F2BBD5A5E42C1E632BCED63C083AEA52 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - F482627CD4A818F68CA6022A4023CD7A /* PFRole.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRole.h; path = Parse/PFRole.h; sourceTree = ""; }; - F48BEB733DD91A7D53CF88B21A269709 /* PFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFNetworkActivityIndicatorManager.m; path = Parse/PFNetworkActivityIndicatorManager.m; sourceTree = ""; }; - F4EBCD611EB0EB86EAF46AB78D6C9C9D /* PFRESTQueryCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTQueryCommand.h; path = Parse/Internal/Commands/PFRESTQueryCommand.h; sourceTree = ""; }; - F5760F0DA7B30409A71D6E956AE9172B /* PFURLSessionFileDownloadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionFileDownloadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m; sourceTree = ""; }; - F75EB19F28291BD31FAFD036CE9F9A61 /* PFReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFReachability.h; path = Parse/Internal/PFReachability.h; sourceTree = ""; }; - F80064D5DEE86FA0C8D24134A843AFE1 /* PFFieldOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperation.m; path = Parse/Internal/FieldOperation/PFFieldOperation.m; sourceTree = ""; }; - F9250F0F20E5E4ED980A30FE96202787 /* PFOfflineQueryLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryLogic.h; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h; sourceTree = ""; }; - FA2438B1DDEB1848F5F5D82CB852583E /* PFPinningObjectStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningObjectStore.m; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.m; sourceTree = ""; }; - FA4D77F479BDDB7FCC802644C7B895D0 /* PFConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfigController.m; path = Parse/Internal/Config/Controller/PFConfigController.m; sourceTree = ""; }; - FC5FEFC8C99E02AAEE60AEBC8FF0063B /* PFMutableFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableFileState.h; path = Parse/Internal/File/State/PFMutableFileState.h; sourceTree = ""; }; - FCE8643D2CF10C59D3B13EED199470C3 /* PFCommandCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandCache.m; path = Parse/Internal/PFCommandCache.m; sourceTree = ""; }; - FD0DC15BB1F34596371C48A1D117C62F /* PFCategoryLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCategoryLoader.m; path = Parse/Internal/PFCategoryLoader.m; sourceTree = ""; }; - FDA614FFD9F4D7DF03E545167A1236CE /* PFMutableACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableACLState.m; path = Parse/Internal/ACL/State/PFMutableACLState.m; sourceTree = ""; }; - FE24B408A21AA65A2C6C5ECD3A88084D /* PFRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelationState.m; path = Parse/Internal/Relation/State/PFRelationState.m; sourceTree = ""; }; - FEA99D72FAAF1C1CCB030F44B7765976 /* PFOfflineObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineObjectController.m; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m; sourceTree = ""; }; - FF94702CE18ED34C2681EF97F7E85B40 /* PFRESTCommand_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand_Private.h; path = Parse/Internal/Commands/PFRESTCommand_Private.h; sourceTree = ""; }; - FFBAA18C7BBABC589780000C2DF75641 /* libParse.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libParse.a; sourceTree = BUILT_PRODUCTS_DIR; }; - FFC9A812BC50C9BE9A45E1BE4A59532D /* PFSQLiteDatabaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseController.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m; sourceTree = ""; }; + BF8B668575E32B4BC03D5A86BBAEAE74 /* PFURLSessionUploadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionUploadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h; sourceTree = ""; }; + C091E831068E3E504A40AC6932B39C87 /* FloatConversion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FloatConversion.h; path = pop/WebCore/FloatConversion.h; sourceTree = ""; }; + C0DF3C83EBC5F7BF6DAAACEBD7D72791 /* POPAnimationEvent.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationEvent.mm; path = pop/POPAnimationEvent.mm; sourceTree = ""; }; + C0E20B62BF2BBA3C871D3C7A2F6BD617 /* BFDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFDefines.h; path = Bolts/Common/BFDefines.h; sourceTree = ""; }; + C1B6A53BFD919966B87CD6FBFD89CE1B /* POPAnimationExtras.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationExtras.h; path = pop/POPAnimationExtras.h; sourceTree = ""; }; + C1E1FCF7C3F2C64010D8E7CA6C8D29A3 /* PFInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationController.h; path = Parse/Internal/Installation/Controller/PFInstallationController.h; sourceTree = ""; }; + C1E27C3CBB149C1873F6CDC55D998CE2 /* POPAnimationTracer.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationTracer.mm; path = pop/POPAnimationTracer.mm; sourceTree = ""; }; + C24554FAA71D841BC3C0759DA37874AE /* POPSpringAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPSpringAnimation.mm; path = pop/POPSpringAnimation.mm; sourceTree = ""; }; + C3DD022C4A01AA56BB0CF97F8B732F1E /* PFFileManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileManager.h; path = Parse/Internal/PFFileManager.h; sourceTree = ""; }; + C560616DDF5273CF7C53EF72EA6ED45A /* POPDecayAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPDecayAnimation.mm; path = pop/POPDecayAnimation.mm; sourceTree = ""; }; + C5B446A2C8083573E71F021EB732F282 /* PFObjectController_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController_Private.h; path = Parse/Internal/Object/Controller/PFObjectController_Private.h; sourceTree = ""; }; + C5CA9676B6BB4F73C05AB36945596A99 /* PFFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileState.m; path = Parse/Internal/File/State/PFFileState.m; sourceTree = ""; }; + C60907A5603A25A8E7EF01FCD0B44B11 /* PFRESTSessionCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTSessionCommand.m; path = Parse/Internal/Commands/PFRESTSessionCommand.m; sourceTree = ""; }; + C623372365DC2AFFFE5053AB44C49CAB /* PFProductsRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductsRequestHandler.h; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h; sourceTree = ""; }; + C73F19BD326FCF565056E28970ACD732 /* PFThreadsafety.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFThreadsafety.m; path = Parse/Internal/ThreadSafety/PFThreadsafety.m; sourceTree = ""; }; + C7A179A9BD2533E252132EB24EEEE7AF /* PFObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObject.m; path = Parse/PFObject.m; sourceTree = ""; }; + C7A82AD0CBC0B85B3BC3F38D91D613A3 /* PFSQLiteDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h; sourceTree = ""; }; + C7F96DFC12AF4F8CB8DB480DC2A6B5DC /* PFPinningEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningEventuallyQueue.m; path = Parse/Internal/PFPinningEventuallyQueue.m; sourceTree = ""; }; + C849D153FE3E4A235A12279407367FFB /* PFACL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACL.m; path = Parse/PFACL.m; sourceTree = ""; }; + C91998944DE097F05FC7342A6ABBD51F /* PFEventuallyPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyPin.m; path = Parse/Internal/PFEventuallyPin.m; sourceTree = ""; }; + C9565C73D5D4BE79747E60DCF1557E71 /* POPAnimatableProperty.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimatableProperty.mm; path = pop/POPAnimatableProperty.mm; sourceTree = ""; }; + CA696D9F1B6B454ADB7158523225ED1D /* PFRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelationState.m; path = Parse/Internal/Relation/State/PFRelationState.m; sourceTree = ""; }; + CAD41F16643CC7AF395C0955965F308A /* PFAsyncTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAsyncTaskQueue.m; path = Parse/Internal/PFAsyncTaskQueue.m; sourceTree = ""; }; + CB81D6A5051D8F542190EDFDC7456611 /* PFMutableQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableQueryState.m; path = Parse/Internal/Query/State/PFMutableQueryState.m; sourceTree = ""; }; + CBC8583C0448880C8739111436630AE3 /* PFPushState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState_Private.h; path = Parse/Internal/Push/State/PFPushState_Private.h; sourceTree = ""; }; + CC134A9DF660C6CC1845802A0025F10D /* PFObjectBatchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectBatchController.m; path = Parse/Internal/Object/BatchController/PFObjectBatchController.m; sourceTree = ""; }; + CCBD5F36E99EBF39758767076681F918 /* PFURLSessionDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h; sourceTree = ""; }; + CCF8CEA9A6064ADBBF6FE4C06F58AC6B /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; + CD5E24516E8C55549E6229A4A4A3E50C /* PFACLPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLPrivate.h; path = Parse/Internal/ACL/PFACLPrivate.h; sourceTree = ""; }; + CE1700FF476E3DF743FC31E536BEBEC6 /* Parse-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Parse-Private.xcconfig"; sourceTree = ""; }; + CEBD5ABCFEDE938F240830CC6F863AE9 /* PFURLSessionCommandRunner_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h; sourceTree = ""; }; + CF1EB66CAC009B756BA17A2817145984 /* PFSQLiteDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase_Private.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h; sourceTree = ""; }; + D003772BF7AE6C6E80062C919E2AA60F /* PFObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState.h; path = Parse/Internal/Object/State/PFObjectState.h; sourceTree = ""; }; + D0975C15C502A249A57E3EE7AABC42BE /* PFPushManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushManager.h; path = Parse/Internal/Push/Manager/PFPushManager.h; sourceTree = ""; }; + D0AE6501423148E55391488B3AC17AF1 /* PFOfflineQueryLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryLogic.h; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h; sourceTree = ""; }; + D0E2E71B86A138C5A13EEABD485A9EAB /* PFSQLiteDatabaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseController.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m; sourceTree = ""; }; + D0F22730A2A2917C6F9777B1BF5F179D /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = Parse/Resources/en.lproj; sourceTree = ""; }; + D1027683C24BF81936188B3CFC423274 /* libBolts.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBolts.a; sourceTree = BUILT_PRODUCTS_DIR; }; + D1DF8C126A878F1FFF7DB1A3BEB96647 /* PFReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFReachability.m; path = Parse/Internal/PFReachability.m; sourceTree = ""; }; + D1DFF36EC5F44CEE642F63092AE04BA3 /* PFDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDataProvider.h; path = Parse/Internal/PFDataProvider.h; sourceTree = ""; }; + D414E542C5F0101B04B821F89CB601B6 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + D51B5DC898167C5060CB1C2CE1F6CA6A /* PFSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession_Private.h; path = Parse/Internal/Session/PFSession_Private.h; sourceTree = ""; }; + D5CE48778301C24CD288B08DDA441605 /* POPVector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPVector.h; path = pop/POPVector.h; sourceTree = ""; }; + D712B949F0E1E31622675FBDC8C2BD57 /* PFDateFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDateFormatter.m; path = Parse/Internal/PFDateFormatter.m; sourceTree = ""; }; + D8453063C22C0EAA2AAC6F28CFBB7AC8 /* Bolts-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Bolts-Private.xcconfig"; sourceTree = ""; }; + DADC9D70AC397C40456C71C7BB5E5F45 /* PFInstallationIdentifierStore_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore_Private.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h; sourceTree = ""; }; + DD763184372CC604F25E4FDD0865B288 /* PFObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObject.h; path = Parse/PFObject.h; sourceTree = ""; }; + DD934234EB3517E8F2CAC1D699D9DC6C /* PFOfflineStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineStore.h; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h; sourceTree = ""; }; + DD991348470823191613124528FDAA2E /* PFObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectState.m; path = Parse/Internal/Object/State/PFObjectState.m; sourceTree = ""; }; + DDC7530978AD0E9150595DF76671ACD3 /* PFRelation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelation.m; path = Parse/PFRelation.m; sourceTree = ""; }; + DDE8EAF4000D3A40ED79006C50ACC68B /* PFKeyValueCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeyValueCache.m; path = Parse/Internal/KeyValueCache/PFKeyValueCache.m; sourceTree = ""; }; + DE8243581B97EEAD2F8781E6C48FD676 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; + E00C63837F9F051D3640CED99CD396F4 /* PFAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAlertView.h; path = Parse/Internal/PFAlertView.h; sourceTree = ""; }; + E0AF46F24F89ABCDCB18AAF5BD82D7BC /* PFPurchaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseController.m; path = Parse/Internal/Purchase/Controller/PFPurchaseController.m; sourceTree = ""; }; + E1247C54B1E28A1D1035FF148D7A8067 /* PFObjectUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectUtilities.m; path = Parse/Internal/Object/Utilities/PFObjectUtilities.m; sourceTree = ""; }; + E1E17B04786B5816404325BFDBE700B8 /* PFPush.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPush.m; path = Parse/PFPush.m; sourceTree = ""; }; + E210FB710EEFE34D8FB35378F3F6F935 /* PFConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig_Private.h; path = Parse/Internal/Config/PFConfig_Private.h; sourceTree = ""; }; + E2E9E2D3066C78DC48958D6FD03ABADA /* PFSQLiteStatement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteStatement.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h; sourceTree = ""; }; + E32EC19799A69A3384750AD614A93F67 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + E35E8AB9F2B4D23971F6C53C0730A2F8 /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; + E3CA74B2AFA8B7D355ED3CA3F92BDFD2 /* PFCommandRunning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunning.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.h; sourceTree = ""; }; + E43B375F1DC0B3C39D4F8CBCFA1B51A2 /* PFFileDataStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileDataStream.m; path = Parse/Internal/File/FileDataStream/PFFileDataStream.m; sourceTree = ""; }; + E4C23C917DC34380EB14D2D8BC9FAA1E /* PFRESTFileCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTFileCommand.m; path = Parse/Internal/Commands/PFRESTFileCommand.m; sourceTree = ""; }; + E4FD3B2FD49993D574EF9A49D6C13261 /* PFGeoPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFGeoPoint.m; path = Parse/PFGeoPoint.m; sourceTree = ""; }; + E57BA8CF64D8018BCFEB289F81C3B448 /* PFUserAuthenticationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationDelegate.h; path = Parse/PFUserAuthenticationDelegate.h; sourceTree = ""; }; + E6CFB883952C27A92DBF7CF40F382619 /* BFTask+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Private.h"; path = "Parse/Internal/BFTask+Private.h"; sourceTree = ""; }; + E6DCAF78DAAF81EC8FC6B8AFC7ADDD1B /* PFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkActivityIndicatorManager.h; path = Parse/PFNetworkActivityIndicatorManager.h; sourceTree = ""; }; + E85E0983DBE882A8009D0F7EAB591B91 /* POPAnimationRuntime.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationRuntime.mm; path = pop/POPAnimationRuntime.mm; sourceTree = ""; }; + E94D7BACCC5E81069DC1DA732C343E3D /* PFMutableObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableObjectState.h; path = Parse/Internal/Object/State/PFMutableObjectState.h; sourceTree = ""; }; + E9F025C441C961725285A53BA76899A7 /* PFUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserController.m; path = Parse/Internal/User/Controller/PFUserController.m; sourceTree = ""; }; + EADEB4FFD06A826AC14B90222A65ED15 /* PFRelation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelation.h; path = Parse/PFRelation.h; sourceTree = ""; }; + EB22EF6AA771F815D6776E538BF091A1 /* PFSQLiteDatabaseResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseResult.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h; sourceTree = ""; }; + EB56BE02F1B0412A41C9D9834B04BC30 /* POPSpringAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringAnimationInternal.h; path = pop/POPSpringAnimationInternal.h; sourceTree = ""; }; + EB5DC17148922AD333F7571A1F2466E3 /* Parse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Parse.m; path = Parse/Parse.m; sourceTree = ""; }; + EC10F21A5E230A911C2C2E5082CDAE4B /* POPAnimationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationPrivate.h; path = pop/POPAnimationPrivate.h; sourceTree = ""; }; + EC2BCF421E5556843D2FB60E51F79F87 /* PFAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAssert.h; path = Parse/Internal/PFAssert.h; sourceTree = ""; }; + ECC48BF18D3BD01C21B65648709A45D6 /* POPAnimator.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimator.mm; path = pop/POPAnimator.mm; sourceTree = ""; }; + ECEB10403A7DC566C15134DFE3373AC2 /* PFFileState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState_Private.h; path = Parse/Internal/File/State/PFFileState_Private.h; sourceTree = ""; }; + ED596D85957A49EC6092EC8EC38FCE49 /* POPAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationInternal.h; path = pop/POPAnimationInternal.h; sourceTree = ""; }; + EE07F56B15CF5CA712EDB693EC0DE281 /* PFFieldOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperation.h; path = Parse/Internal/FieldOperation/PFFieldOperation.h; sourceTree = ""; }; + EEA9CEB6EBD6F7D905225F3028208411 /* PFURLSessionJSONDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionJSONDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m; sourceTree = ""; }; + F05B147B865A347DA8B9891D3D9B89BF /* PFPurchase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchase.m; path = Parse/PFPurchase.m; sourceTree = ""; }; + F09FE7B19C3276FA4D8099145F0898D3 /* PFCommandCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache_Private.h; path = Parse/Internal/PFCommandCache_Private.h; sourceTree = ""; }; + F0B4105C7EE2DA010EA4746E79138C7C /* POPVector.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPVector.mm; path = pop/POPVector.mm; sourceTree = ""; }; + F12CAAA4B06857D4D5F8B8C7F8B0A6D6 /* pop-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "pop-prefix.pch"; sourceTree = ""; }; + F1C86CCCF50B7B1651DF1DDA93ECB2A7 /* PFUserConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserConstants.h; path = Parse/Internal/User/Constants/PFUserConstants.h; sourceTree = ""; }; + F25C4200A9FE7F2B396804D09A24AFC6 /* PFEventuallyPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyPin.h; path = Parse/Internal/PFEventuallyPin.h; sourceTree = ""; }; + F2F468A970FC15FC06B99390A1FB0614 /* PFSQLiteDatabaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseController.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h; sourceTree = ""; }; + F3A985A006B0CCD0116D8FC53C4D1834 /* POPAction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAction.h; path = pop/POPAction.h; sourceTree = ""; }; + F3B17068042592957DB4087CD527AE51 /* PFCoreManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCoreManager.m; path = Parse/Internal/PFCoreManager.m; sourceTree = ""; }; + F3F84D9899A9D129807B810BCBE9535F /* PFCommandResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandResult.m; path = Parse/Internal/PFCommandResult.m; sourceTree = ""; }; + F447802A042F9641D3483858FF8FF6FB /* Parse-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-prefix.pch"; sourceTree = ""; }; + F47B9418D1EB46362FA2A6190969EF8E /* PFThreadsafety.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFThreadsafety.h; path = Parse/Internal/ThreadSafety/PFThreadsafety.h; sourceTree = ""; }; + F54B1AE39CAF0CA846C1C729B033E047 /* POPBasicAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPBasicAnimation.mm; path = pop/POPBasicAnimation.mm; sourceTree = ""; }; + F81BCD1B1E1DFA056533AFD9F925EA0C /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; + F81E8633F1E784423FE8B9BE16D38981 /* POPPropertyAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPPropertyAnimation.h; path = pop/POPPropertyAnimation.h; sourceTree = ""; }; + F954000E663E08C66A7FF9913EFEA133 /* PFCommandRunningConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunningConstants.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h; sourceTree = ""; }; + F990476FB27C0034DB517BE7F8E8E297 /* PFHTTPURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHTTPURLRequestConstructor.m; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m; sourceTree = ""; }; + FA0E5057E1930B74D697F4D727731037 /* PFSQLiteDatabaseResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseResult.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m; sourceTree = ""; }; + FAACEF17AA010DB91B4F2D152A8E2E5A /* PFURLSessionUploadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionUploadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m; sourceTree = ""; }; + FBC24FBD24EFA4956FA52BFDBAE5DBB6 /* PFLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogger.h; path = Parse/Internal/PFLogger.h; sourceTree = ""; }; + FC99C2A819C4722A15EE59C87645E47F /* PFRESTObjectBatchCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectBatchCommand.h; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.h; sourceTree = ""; }; + FCF80651D0D3D3178E086F081B09AC3F /* PFTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTaskQueue.h; path = Parse/Internal/PFTaskQueue.h; sourceTree = ""; }; + FD18AA79D76C38588E1A0AE95A99AE0D /* PFObjectFilePersistenceController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFilePersistenceController.h; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h; sourceTree = ""; }; + FD7F7F0634794A2E01436C4EF9CD8DFE /* PFRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState.h; path = Parse/Internal/Relation/State/PFRelationState.h; sourceTree = ""; }; + FFA1F08A1EF895FBF3B8FD036E125613 /* PFPropertyInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 7D675EAC5362DC710F02FD75C202FC69 /* Frameworks */ = { + 308CA5637F79668BCF7E6F999A59A50A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3DB8A0F752DA80375EADCCEE442C2446 /* AudioToolbox.framework in Frameworks */, - 200CBE166D201B143AF627A475AAC1FB /* CFNetwork.framework in Frameworks */, - BDC924266A1575B8E3D5B70544ABE0BB /* CoreGraphics.framework in Frameworks */, - 7E990026C996B851DD9B64AC33E6E1E0 /* CoreLocation.framework in Frameworks */, - 860FC46193591C24CFB85207870A57EF /* Foundation.framework in Frameworks */, - 407007B859EBDD5E2639CE8894D6801A /* QuartzCore.framework in Frameworks */, - EC3E7E5D47C8C4485FABD0262AA04B0A /* Security.framework in Frameworks */, - DEA88B8DD23B199712A1ABCFF5C4338F /* StoreKit.framework in Frameworks */, - 132B0FFAA237FFBC7BF8CEAE8B9B390D /* SystemConfiguration.framework in Frameworks */, + 598B48CF82CFFBA09F8D6D1DDAA489BF /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 942508E56C720429BC1DCEB09828834B /* Frameworks */ = { + 8C45497CBD83A66C8FBF1289DF39CE3D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A5F2F863073EF75443E528E22A276823 /* Foundation.framework in Frameworks */, + 2AD822A4C6DD9CA6D499CF6955198F4A /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - BC4C40C28519D73FBDD81030214E0713 /* Frameworks */ = { + B4E7CC86B3732BF1BCC75FF7D4C6DB92 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A4A9994EC1B2B5FE681A95E532942577 /* Foundation.framework in Frameworks */, + 4F6883A6C338249681BBEE3EDC5751A9 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FD255F136A4B715136E15DABA3D815B5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 484758EE625E2C5FE161DF5FC17451D2 /* AudioToolbox.framework in Frameworks */, + 672DE43F5009AB262B9AEF3F7D3B824A /* CFNetwork.framework in Frameworks */, + 2DACFE369A8EFCB713C6D983E5379A2F /* CoreGraphics.framework in Frameworks */, + F4E009870A5A3FFF06CE2805D238306B /* CoreLocation.framework in Frameworks */, + 253D23734B85142261E13FAA6BF114A8 /* Foundation.framework in Frameworks */, + B0E9BD1E45B086C6992F0EA64B78B46D /* QuartzCore.framework in Frameworks */, + 746236A021A40EFF2B68DA0B1D1835E0 /* Security.framework in Frameworks */, + 302E463F7711C0EEF94B3DCE8FF84125 /* StoreKit.framework in Frameworks */, + 20BA5067D5A5B862B598FC8E47FDA620 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 24002A6670E6882ECD6250D3E60F9CB2 /* Frameworks */ = { - isa = PBXGroup; - children = ( - F9400E82BDA8E39AA40BABDC6CB12014 /* iOS */, - ); - name = Frameworks; - sourceTree = ""; - }; - 36A5C9D5099E00189F2FD1EE15CB14DE /* Support Files */ = { + 08C21DBD68BB3A37A0BE4BC2CA161F5E /* Parse */ = { isa = PBXGroup; children = ( - 42DDE7216238765988616CD0550CA7E7 /* Bolts.xcconfig */, - 2613CC942BB5B821A1369B8E68019FDA /* Bolts-Private.xcconfig */, - A9EF3EDC4FDAFC57AB7D03F2B66F8398 /* Bolts-dummy.m */, - 8B845FC390E44059F2A5FC0E8BA8073F /* Bolts-prefix.pch */, + E6CFB883952C27A92DBF7CF40F382619 /* BFTask+Private.h */, + 6E5E6D3B44810118191C60A9772E4E48 /* BFTask+Private.m */, + 64541D2ABD36F76DA73F677AC3E20A1A /* PFACL.h */, + C849D153FE3E4A235A12279407367FFB /* PFACL.m */, + CD5E24516E8C55549E6229A4A4A3E50C /* PFACLPrivate.h */, + 126E0178D6FE6C3AC0790CCA7F490DE8 /* PFACLState.h */, + BDBDCD188680D0AF62B9AC8AE7D15A8C /* PFACLState.m */, + A9E567CF4EF740CD931B21421CDEF9E4 /* PFACLState_Private.h */, + E00C63837F9F051D3640CED99CD396F4 /* PFAlertView.h */, + 6006204F33FEC54FE00EA9417DDC3F22 /* PFAlertView.m */, + BA67CA21B8529E8E4280069C4CC1FA26 /* PFAnalytics.h */, + 8CD59F7A3B1C57C26A073580850CFD7F /* PFAnalytics.m */, + 12C263F3A518B7482AA7F6DA83C5BE2A /* PFAnalyticsController.h */, + 64CA497DEB5823668E1CF3AEF0FC8118 /* PFAnalyticsController.m */, + 16B0BA102C5E8108137BE847C8377A1E /* PFAnalyticsUtilities.h */, + 861462FD667FE3B82B6900562A7A672F /* PFAnalyticsUtilities.m */, + 56743024027A104903BB088C1FED631A /* PFAnalytics_Private.h */, + 832FCCE6C5FBEE8B8EDE5CB7506C1387 /* PFAnonymousAuthenticationProvider.h */, + 152FEBFF4B90D0D9894CED8063D4D7D0 /* PFAnonymousAuthenticationProvider.m */, + 2C86B73BF7530888F6D5B7414D36E50E /* PFAnonymousUtils.h */, + B88FEBD183FE3500545B1AB65A492E8B /* PFAnonymousUtils.m */, + BF599E498617D2A09E55B46584A069AC /* PFAnonymousUtils_Private.h */, + B5AA5A6C3CB437DD04C72C5E6E53B305 /* PFApplication.h */, + 6D47488328F5D210AF09C2E49EAF28AE /* PFApplication.m */, + EC2BCF421E5556843D2FB60E51F79F87 /* PFAssert.h */, + 91C444E945365A3AEA1C0182D529EA62 /* PFAsyncTaskQueue.h */, + CAD41F16643CC7AF395C0955965F308A /* PFAsyncTaskQueue.m */, + 0241335D86A1EA4D1D2367A14A072B98 /* PFBase64Encoder.h */, + 84C9421C2D04758A8862D5D9334EC3D3 /* PFBase64Encoder.m */, + 0B7AF33E13FC52EAA4B353E736F48431 /* PFBaseState.h */, + 99FC3FA412F7A62CE7905F3F3DB1A2B8 /* PFBaseState.m */, + 3CD1F5B90828B5EDD6A87F8F8B8CBEC5 /* PFCachedQueryController.h */, + 82C15773B786AB50406081B6A022CFAA /* PFCachedQueryController.m */, + 08D26CE5516D7D42D9222FD32B2EDB93 /* PFCategoryLoader.h */, + 5EA6C82779BDAB43BEF4E9F00620B3CE /* PFCategoryLoader.m */, + 431480C91CFCFE70AF20289CEECDDA2C /* PFCloud.h */, + 01F9E3D986D34EB39EC1D2728FB49D75 /* PFCloud.m */, + 54BB29D5628B693DB06DEF1222114715 /* PFCloudCodeController.h */, + B3919700A3759610223FD35F92AB0AA9 /* PFCloudCodeController.m */, + B0D65D1A09B22A4BB4B1C9A5BD78B77B /* PFCommandCache.h */, + 13EA057769889745EF622AD275B30A3F /* PFCommandCache.m */, + F09FE7B19C3276FA4D8099145F0898D3 /* PFCommandCache_Private.h */, + 003F04CCCCA9D217090A10F09B6A095B /* PFCommandResult.h */, + F3F84D9899A9D129807B810BCBE9535F /* PFCommandResult.m */, + E3CA74B2AFA8B7D355ED3CA3F92BDFD2 /* PFCommandRunning.h */, + A52D3DEFF51B24F1DDCCC3F6705AB35B /* PFCommandRunning.m */, + F954000E663E08C66A7FF9913EFEA133 /* PFCommandRunningConstants.h */, + 2FE59B575E6D95DCA7C8B65A48397212 /* PFCommandRunningConstants.m */, + 54B2FDE08445C963E18042DD668FA776 /* PFCommandURLRequestConstructor.h */, + 6B12A0FF8B77277D84507AC79070FF41 /* PFCommandURLRequestConstructor.m */, + 8DCE002C62F26D3852FE0C2CB25CACEA /* PFConfig.h */, + 2CDE17945AABA4BFAB91FD36A9002DB4 /* PFConfig.m */, + 310661341392FCCCCA69B3D4AA745597 /* PFConfigController.h */, + 50F5D5E8541B4E9B381B9D48639498A9 /* PFConfigController.m */, + E210FB710EEFE34D8FB35378F3F6F935 /* PFConfig_Private.h */, + 0EB55315EB3A3AB23E3EB95B4B89971F /* PFConstants.h */, + 435286DE6414AD754A172CA441F36643 /* PFConstants.m */, + 8C954AD66C579F4C80C80E36A0D3E80B /* PFCoreDataProvider.h */, + 6D24EDB2D5A2B95E2AC01499F225F585 /* PFCoreManager.h */, + F3B17068042592957DB4087CD527AE51 /* PFCoreManager.m */, + A3ABEEBB2584C20918BF1285C34EA0E9 /* PFCurrentConfigController.h */, + 85AB3D3F633121769C963DCA3B59E6D6 /* PFCurrentConfigController.m */, + 43FEB98D92288E63383CA2110D5E1033 /* PFCurrentInstallationController.h */, + A091F705C56846E993F12A441C8A163B /* PFCurrentInstallationController.m */, + 1FF980C8F6DFEF3C3FB8C7A56B963C15 /* PFCurrentObjectControlling.h */, + 01B5421FED39CB875C6EB4E26A48BD0E /* PFCurrentUserController.h */, + A0C39E3679DEC122C57CAF59AC4607D6 /* PFCurrentUserController.m */, + D1DFF36EC5F44CEE642F63092AE04BA3 /* PFDataProvider.h */, + 27C57412F25313254CDCF65E3AB69F64 /* PFDateFormatter.h */, + D712B949F0E1E31622675FBDC8C2BD57 /* PFDateFormatter.m */, + 365E961AFE93318B968A4EAD9C3042AD /* PFDecoder.h */, + 7566A44BF4C7FE91F74365E72E1C4073 /* PFDecoder.m */, + 59CC3868179641E97ED190501DFF4E05 /* PFDefaultACLController.h */, + 2218553C181F20F306EC36D9B7169974 /* PFDefaultACLController.m */, + 39F54AA49BC2FD125A794644082419CE /* PFDevice.h */, + 4E9D9F93BE35D535FACB0F23193B2668 /* PFDevice.m */, + A9ADF726213C599DDAE3F7A1849BDBF6 /* PFEncoder.h */, + 714D2457E720A0BF6948DBDCD450623B /* PFEncoder.m */, + 0638F31DB969AAA2089D7F79383493DD /* PFErrorUtilities.h */, + 8A01E3948888676B760B4B5642C2B3CD /* PFErrorUtilities.m */, + F25C4200A9FE7F2B396804D09A24AFC6 /* PFEventuallyPin.h */, + C91998944DE097F05FC7342A6ABBD51F /* PFEventuallyPin.m */, + 7BEEAEF9152946B143C6C357FCF24E5A /* PFEventuallyQueue.h */, + 512DF9E7249F58F9AF45B707F9C3949F /* PFEventuallyQueue.m */, + B72923D868E99D0FEF748E99A0931A2F /* PFEventuallyQueue_Private.h */, + EE07F56B15CF5CA712EDB693EC0DE281 /* PFFieldOperation.h */, + 0FAFDD952B22B5410869339CD24F946E /* PFFieldOperation.m */, + 3DF189D36ECF2252091D16F77FBAA4B1 /* PFFieldOperationDecoder.h */, + 1FDE3C12C2A761D6DD2E3EFE88D9A85C /* PFFieldOperationDecoder.m */, + 1CECC0578B9328DAEB8EA4E274B9D16A /* PFFile.h */, + BDFFC646E1E0963C745694C371C7CA92 /* PFFile.m */, + 0DBAF5788AC957A98F8DA82DF0E007A8 /* PFFileController.h */, + 7DEA9336EA629BC874D1CD9F3933E83C /* PFFileController.m */, + 6516FEAA3036D59756B8161A5A9E7918 /* PFFileDataStream.h */, + E43B375F1DC0B3C39D4F8CBCFA1B51A2 /* PFFileDataStream.m */, + C3DD022C4A01AA56BB0CF97F8B732F1E /* PFFileManager.h */, + 3B3B39A4E421EE0FF21AB42B74EE1955 /* PFFileManager.m */, + 7BF3525974C036CC12A09FF5C9633C85 /* PFFileStagingController.h */, + 0F437AB63E48A5534A05700959E05607 /* PFFileStagingController.m */, + 3FF58ECD6BEDF747B767ABEBBB293774 /* PFFileState.h */, + C5CA9676B6BB4F73C05AB36945596A99 /* PFFileState.m */, + ECEB10403A7DC566C15134DFE3373AC2 /* PFFileState_Private.h */, + 9FB82515BD6D0F9EC91327CB819F8BC6 /* PFFile_Private.h */, + 48764192F317D5037D89AF6584C95481 /* PFGeoPoint.h */, + E4FD3B2FD49993D574EF9A49D6C13261 /* PFGeoPoint.m */, + 1B0BA363E4B429F291596ABBFF279C44 /* PFGeoPointPrivate.h */, + B4F105DB0D9A5C8E74B80DB5C0C9BEFF /* PFHTTPRequest.h */, + 08FC3ACF4FB85302DB39490D9E032664 /* PFHTTPURLRequestConstructor.h */, + F990476FB27C0034DB517BE7F8E8E297 /* PFHTTPURLRequestConstructor.m */, + 5DD7438CB8B7D0CE7BAEE6965CE86AEF /* PFHash.h */, + 4C28BCBA3F60C895444F215DF1A28EBF /* PFHash.m */, + 16E2644C0CFB5068F39B60EA663C06F8 /* PFInstallation.h */, + 6CBB64CFFD32EF20996F33E08CE27F2B /* PFInstallation.m */, + 82A5F04959D1ADFDEFFC1808EF20F799 /* PFInstallationConstants.h */, + 5E6BECFF342BD360C868DC57ABEEC767 /* PFInstallationConstants.m */, + C1E1FCF7C3F2C64010D8E7CA6C8D29A3 /* PFInstallationController.h */, + 2C0B84AF80B3F79D3684EC294B10145D /* PFInstallationController.m */, + A3529F546C50E5FA9E92AE069C4127AA /* PFInstallationIdentifierStore.h */, + 349789B8BAC6B5134BB027FB59B2DAE4 /* PFInstallationIdentifierStore.m */, + DADC9D70AC397C40456C71C7BB5E5F45 /* PFInstallationIdentifierStore_Private.h */, + 66B0DF4B48195D78B041D58D3C3AEE3F /* PFInstallationPrivate.h */, + 2DD709EEB7F953B2BFD2FFBF243EF632 /* PFInternalUtils.h */, + 4DC9003F64939358FF50986ADC0DF824 /* PFInternalUtils.m */, + B507DE9CFF3C90B0CFF815EF53AF8474 /* PFJSONSerialization.h */, + A9345BB3B8924E56D392BA3231701002 /* PFJSONSerialization.m */, + 68F8CC838971F8BE4FD097EA7C5BF494 /* PFKeyValueCache.h */, + DDE8EAF4000D3A40ED79006C50ACC68B /* PFKeyValueCache.m */, + 52DA55B0C48801979739E451008199A5 /* PFKeyValueCache_Private.h */, + A40C6F5379E163ACAB3BFEADF6BBF21B /* PFKeychainStore.h */, + 36E5C28B728EEE2896643C1BD0BB1E3B /* PFKeychainStore.m */, + B63F361CAC0664EA5B1BDBD82688DB0A /* PFLocationManager.h */, + 130E12A377FD4C1EC29AF55964B70A23 /* PFLocationManager.m */, + FBC24FBD24EFA4956FA52BFDBAE5DBB6 /* PFLogger.h */, + 2B16B8588E9DCC56E87F38E324BE2E50 /* PFLogger.m */, + 524FE09AA008388A357FA29376EBA283 /* PFLogging.h */, + 0A7AF22DC435894F3927644A0B475DFA /* PFMacros.h */, + 5C77B473F634527F1102E3093D9ECCFE /* PFMultiProcessFileLock.h */, + 711043A9271B2D627CCBD4F5731F56B1 /* PFMultiProcessFileLock.m */, + 74EE96B44DF0116B1160526B21D7D189 /* PFMultiProcessFileLockController.h */, + 1F1826EAEE4BB8BAD18008DEBA561577 /* PFMultiProcessFileLockController.m */, + 4051AFB557520935D16F093222B0C0BB /* PFMulticastDelegate.h */, + 22F8D68DF4AAD2C14B0AB430E0C5337F /* PFMulticastDelegate.m */, + 9F5A413E6DB1455C1427DAEBF27B2133 /* PFMutableACLState.h */, + 89508E9160A4510C35341638A4A33FFC /* PFMutableACLState.m */, + B7CFA60CD26AF95E62DC7D82173BA5F6 /* PFMutableFileState.h */, + 0007F67CE44CDB26AC0B26E0B4438F17 /* PFMutableFileState.m */, + E94D7BACCC5E81069DC1DA732C343E3D /* PFMutableObjectState.h */, + 7962520325311C12136692F8AA4F4AD1 /* PFMutableObjectState.m */, + 6B2C19C0AF74CAAFAD47C599A4E9A495 /* PFMutablePushState.h */, + 43F7CA0102C3FA58C58F19240D8C4672 /* PFMutablePushState.m */, + 12C8B2712D809AA1B4EC70ADAB8C6809 /* PFMutableQueryState.h */, + CB81D6A5051D8F542190EDFDC7456611 /* PFMutableQueryState.m */, + 797597C3E809F5E570660958DD8719D8 /* PFMutableRelationState.h */, + A94E11CCEE95914D7CE1B1B35E7C1F89 /* PFMutableRelationState.m */, + 83720EF13618F9740F2F7E1F7E8DE8B9 /* PFMutableUserState.h */, + 5AAA36FB0A4E13DB1928E19770D8EFF8 /* PFMutableUserState.m */, + E6DCAF78DAAF81EC8FC6B8AFC7ADDD1B /* PFNetworkActivityIndicatorManager.h */, + 5FDB9AA6B98C04B1C0D671A64BEEFEED /* PFNetworkActivityIndicatorManager.m */, + 4671EA53DD8AE149FB0F02838CD24C37 /* PFNetworkCommand.h */, + 317ED8ACDA393EB59C813498345758A5 /* PFNullability.h */, + DD763184372CC604F25E4FDD0865B288 /* PFObject.h */, + C7A179A9BD2533E252132EB24EEEE7AF /* PFObject.m */, + 92BE0A4991FB16CAC08DA54E2D9B4E4C /* PFObject+Subclass.h */, + 9179D67A40E4CA93EA605BECE4456488 /* PFObjectBatchController.h */, + CC134A9DF660C6CC1845802A0025F10D /* PFObjectBatchController.m */, + 72761DCB73DE19D59EFDEF3DF961C4F3 /* PFObjectConstants.h */, + 924397DD8F89F34DFFD235E510DCA00F /* PFObjectConstants.m */, + 47A6E2FEA4744CFF9330F4BDD5E274CE /* PFObjectController.h */, + 9DB9AD91F894187B691D13713E1FB4D9 /* PFObjectController.m */, + C5B446A2C8083573E71F021EB732F282 /* PFObjectController_Private.h */, + 63068DEB876F824B178AEFCD8421DB6A /* PFObjectControlling.h */, + BD06D82A2D98EDF6AE058093F67CCA71 /* PFObjectEstimatedData.h */, + 6D33981E62B4BA883B0FBE4A4DA1C812 /* PFObjectEstimatedData.m */, + BBFB017F02B69A95630ECA78C0507891 /* PFObjectFileCoder.h */, + 3257C6D2F1664400BC0FA089A7A688A8 /* PFObjectFileCoder.m */, + 8BE5F0A1B5CEA848AD6F87144411D8B7 /* PFObjectFileCodingLogic.h */, + 549E8AA3A0932BA40BF11C59E1C2C7BD /* PFObjectFileCodingLogic.m */, + FD18AA79D76C38588E1A0AE95A99AE0D /* PFObjectFilePersistenceController.h */, + 4648A560C468826E346FA00C25F64545 /* PFObjectFilePersistenceController.m */, + A3F9EF3F957FD4DB2D6C601F067168F7 /* PFObjectLocalIdStore.h */, + B7F689B7A8A241A249C1A39110F19728 /* PFObjectLocalIdStore.m */, + B40C2F17FC5388F0013F8D1C257B70DC /* PFObjectPrivate.h */, + D003772BF7AE6C6E80062C919E2AA60F /* PFObjectState.h */, + DD991348470823191613124528FDAA2E /* PFObjectState.m */, + ACF9532A0D0C66EC20F4225EBD285526 /* PFObjectState_Private.h */, + 98821C83404F255ED479CAA0E69D588A /* PFObjectSubclassInfo.h */, + 791F22142433CB687B6BD4F07D0950F1 /* PFObjectSubclassInfo.m */, + 5B8726A00CBE872AD6EEF361F3E1A9BE /* PFObjectSubclassingController.h */, + A4680CAB4F1F20CE4E4FF134C9A11A0D /* PFObjectSubclassingController.m */, + 63298AA824390762997B9EF2E73DDBD6 /* PFObjectUtilities.h */, + E1247C54B1E28A1D1035FF148D7A8067 /* PFObjectUtilities.m */, + 10634547D3CF0DBCA1FCF7438AB74C39 /* PFOfflineObjectController.h */, + 5E00A160407B37F025D21140BEA61FE9 /* PFOfflineObjectController.m */, + 3395CE4D4A4BF8134C0A8860F1672838 /* PFOfflineQueryController.h */, + 64A6FC072C0BE15E0FB1732E5E7BFA8F /* PFOfflineQueryController.m */, + D0AE6501423148E55391488B3AC17AF1 /* PFOfflineQueryLogic.h */, + 696FA42E303EDB3CADE000C9A7F03B68 /* PFOfflineQueryLogic.m */, + DD934234EB3517E8F2CAC1D699D9DC6C /* PFOfflineStore.h */, + 84ECBFAB9763ED2C04848E86CC5D6C1D /* PFOfflineStore.m */, + 26C358BF063BCDCE76707FB07B405CB6 /* PFOperationSet.h */, + 58B7C9659B0B47DE31498D5601CC2E12 /* PFOperationSet.m */, + 6CC0DF9EFC230F428EBC36272C09AF04 /* PFPaymentTransactionObserver.h */, + 45C24BC4DD0B5F2B7F803B32EC634F9C /* PFPaymentTransactionObserver.m */, + 865C327D27A51821F5096832A0A79CD6 /* PFPaymentTransactionObserver_Private.h */, + 77409243AF81F02474E6071043269440 /* PFPin.h */, + 1969D32C99E438DDB5CD4D541DDC00CD /* PFPin.m */, + 0AF5597A50326B2C756F30471E7EA8BE /* PFPinningEventuallyQueue.h */, + C7F96DFC12AF4F8CB8DB480DC2A6B5DC /* PFPinningEventuallyQueue.m */, + 117B19051931B86306911BB447C05694 /* PFPinningObjectStore.h */, + 507594AEA30B179FEE12586498800470 /* PFPinningObjectStore.m */, + 0C05D3A3DD0A525F6B31D006CCC2D2F4 /* PFProduct.h */, + 602F796D464ED522B3E9F48F6B4306A4 /* PFProduct.m */, + 66778E4EF145FC32D4ED5D0B3B643425 /* PFProduct+Private.h */, + C623372365DC2AFFFE5053AB44C49CAB /* PFProductsRequestHandler.h */, + 751B683157A512BFFD27276B937C7FD6 /* PFProductsRequestHandler.m */, + FFA1F08A1EF895FBF3B8FD036E125613 /* PFPropertyInfo.h */, + 0C8CEF3DB4AEFD83044AD62B8A9ABD41 /* PFPropertyInfo.m */, + 8E5C09D44589D6540714FF487D97E0C3 /* PFPropertyInfo_Private.h */, + 005D78329EE21D6E17E5C61CD7F99399 /* PFPropertyInfo_Runtime.h */, + 5DBA1E4D4138BAC1EB874D74D4AE73C1 /* PFPropertyInfo_Runtime.m */, + B9CD991531E7E5557C57269840034107 /* PFPurchase.h */, + F05B147B865A347DA8B9891D3D9B89BF /* PFPurchase.m */, + 1F56BA43A619F5C1A2ED1F36B30E29A4 /* PFPurchaseController.h */, + E0AF46F24F89ABCDCB18AAF5BD82D7BC /* PFPurchaseController.m */, + 8E24261DA563B7612DBA518C8FEB0B6B /* PFPush.h */, + E1E17B04786B5816404325BFDBE700B8 /* PFPush.m */, + A2F0842045651D9FD30403B5033648D7 /* PFPushChannelsController.h */, + 90F15F6DE2D590C1823069FF6E87E823 /* PFPushChannelsController.m */, + 91C278F6237539322009B508C24CC49D /* PFPushController.h */, + B7EE7F890CF09AF26E1191C3D4540CE1 /* PFPushController.m */, + D0975C15C502A249A57E3EE7AABC42BE /* PFPushManager.h */, + 26B663E68AA063970F54C5A4311360EA /* PFPushManager.m */, + BD53F748C3855917C34EE3DCD3CD3F92 /* PFPushPrivate.h */, + AA6EBD92B6893560E360E020C1911D5A /* PFPushState.h */, + 186E1997DE5BBBD9E2A895D71A7BC915 /* PFPushState.m */, + CBC8583C0448880C8739111436630AE3 /* PFPushState_Private.h */, + 1CFD4EDE572C72678AC61FDC5C92AAC4 /* PFPushUtilities.h */, + AF9E249BDEE7198A0DA97A4426AE5431 /* PFPushUtilities.m */, + 3D56DAEA6274547A9C5D871A0412DD30 /* PFQuery.h */, + 38386024B8BB9B3B8F22D7B1FD578A31 /* PFQuery.m */, + 96444BC173DBE095E670C72753A21C51 /* PFQueryController.h */, + 2007FCF4B24326D21653DCD5F4F03D9E /* PFQueryController.m */, + B727105265500960B53BB43FD44AB19E /* PFQueryPrivate.h */, + A211C4790E0A281B7800BE2B399091FF /* PFQueryState.h */, + 895E6BCE8395CB2A323176F349B9EFC6 /* PFQueryState.m */, + 9FD085377EDB67B301B8EE26D9310CCC /* PFQueryState_Private.h */, + 378A8BDEE3062C91F84C778871060257 /* PFQueryUtilities.h */, + B854EEBA088DE9B81F5F84844F966B49 /* PFQueryUtilities.m */, + A9D75702C8583CBA05067061643DEB98 /* PFRESTAnalyticsCommand.h */, + 6117D27B3E43E27D2717ADF042654E56 /* PFRESTAnalyticsCommand.m */, + 5CA96AB87A674FDD5847C707289446B2 /* PFRESTCloudCommand.h */, + 9BACBB72ECB77F59482B166BC28EA869 /* PFRESTCloudCommand.m */, + BF436F013E06183E4E80FEDB3EE6640C /* PFRESTCommand.h */, + 6A5BCCC7BC1F6EA4EF7FD3C7BB518BAB /* PFRESTCommand.m */, + 5857640427DCEDE7D0433F498D520085 /* PFRESTCommand_Private.h */, + 85C7493C5ED4D1548757C3A048535862 /* PFRESTConfigCommand.h */, + 48056B31A860AAD6950C3519A539F495 /* PFRESTConfigCommand.m */, + 1A4880CA362DCF456DE8C64954480CEB /* PFRESTFileCommand.h */, + E4C23C917DC34380EB14D2D8BC9FAA1E /* PFRESTFileCommand.m */, + FC99C2A819C4722A15EE59C87645E47F /* PFRESTObjectBatchCommand.h */, + 1EE3B22DE1F33BE14763458A191128C1 /* PFRESTObjectBatchCommand.m */, + 9EED13B4582C1463F725EE279074226F /* PFRESTObjectCommand.h */, + A3A336AAE714C90D57D61FFCE1F62540 /* PFRESTObjectCommand.m */, + 022E40D42E74E0C92C4963F2BE8E4FD5 /* PFRESTPushCommand.h */, + 943A16F9CDDE8E3F97A4CC444A9CBD38 /* PFRESTPushCommand.m */, + 43DDAC0517DD7E2A075642D9FB379D04 /* PFRESTQueryCommand.h */, + 4922CD9E2B9E78912E88BDDA753C4FB2 /* PFRESTQueryCommand.m */, + 3E0F1E598FDC4AD2B9344C0BE42CEF0A /* PFRESTSessionCommand.h */, + C60907A5603A25A8E7EF01FCD0B44B11 /* PFRESTSessionCommand.m */, + 0EA667FBF478CB2CC7CFE38041F96D6F /* PFRESTUserCommand.h */, + 2B32B43DC93B94CD2FD151A51C7009B2 /* PFRESTUserCommand.m */, + 9D0F8BFFB2B329D3F8B455B14472E5E9 /* PFReachability.h */, + D1DF8C126A878F1FFF7DB1A3BEB96647 /* PFReachability.m */, + EADEB4FFD06A826AC14B90222A65ED15 /* PFRelation.h */, + DDC7530978AD0E9150595DF76671ACD3 /* PFRelation.m */, + 6753A9356424F2F8B192F9B14278EE8E /* PFRelationPrivate.h */, + FD7F7F0634794A2E01436C4EF9CD8DFE /* PFRelationState.h */, + CA696D9F1B6B454ADB7158523225ED1D /* PFRelationState.m */, + 90908F63ED9505B2C6685248AE5457F4 /* PFRelationState_Private.h */, + 0A8C828F2BF737F68E0CF5F2CE64D6C2 /* PFRole.h */, + 6EA62081F6F193B86D2CDD0A04D0E99C /* PFRole.m */, + C7A82AD0CBC0B85B3BC3F38D91D613A3 /* PFSQLiteDatabase.h */, + 80E779232DDE695E182A465B9AE80CB8 /* PFSQLiteDatabase.m */, + F2F468A970FC15FC06B99390A1FB0614 /* PFSQLiteDatabaseController.h */, + D0E2E71B86A138C5A13EEABD485A9EAB /* PFSQLiteDatabaseController.m */, + EB22EF6AA771F815D6776E538BF091A1 /* PFSQLiteDatabaseResult.h */, + FA0E5057E1930B74D697F4D727731037 /* PFSQLiteDatabaseResult.m */, + CF1EB66CAC009B756BA17A2817145984 /* PFSQLiteDatabase_Private.h */, + E2E9E2D3066C78DC48958D6FD03ABADA /* PFSQLiteStatement.h */, + AF50C03C543FAF9B976475CB98E20B0D /* PFSQLiteStatement.m */, + 8D157CA12EC27ADEB58C088EBB17D4CC /* PFSession.h */, + 6DB2F830CB43261A32A1658BB35A9006 /* PFSession.m */, + BAC76B9259ACF68B0E7869A148AE8EEE /* PFSessionController.h */, + 99AD17888337EB965D0DF3DEB606CAA4 /* PFSessionController.m */, + 972EBE95D808C0CA2DAD94DDC5AC5F1D /* PFSessionUtilities.h */, + 01760A57DC1D7F86DDC6BD37AF0773FD /* PFSessionUtilities.m */, + D51B5DC898167C5060CB1C2CE1F6CA6A /* PFSession_Private.h */, + A872DF33FEEBCB36CF6A53343C39C8D1 /* PFSubclassing.h */, + FCF80651D0D3D3178E086F081B09AC3F /* PFTaskQueue.h */, + 5F2F5693477E620DC6D5E2C3F6627CDA /* PFTaskQueue.m */, + F47B9418D1EB46362FA2A6190969EF8E /* PFThreadsafety.h */, + C73F19BD326FCF565056E28970ACD732 /* PFThreadsafety.m */, + BC8B4ABBE8DA9D24096F873234FCA24C /* PFURLConstructor.h */, + 4312B15964C63A373BA6C191FD761444 /* PFURLConstructor.m */, + 453D0F6EFB50B07FB491E7A1E373EAF6 /* PFURLSession.h */, + 74CC29CB5720DF98AD22C289EBAA7FBD /* PFURLSession.m */, + 4500DD87BF3AB695EEEF0D03C9E94067 /* PFURLSessionCommandRunner.h */, + 5E6180746342782338BDCA4EE5B65D72 /* PFURLSessionCommandRunner.m */, + CEBD5ABCFEDE938F240830CC6F863AE9 /* PFURLSessionCommandRunner_Private.h */, + CCBD5F36E99EBF39758767076681F918 /* PFURLSessionDataTaskDelegate.h */, + 32D7E6743D001141788DFE84AF635291 /* PFURLSessionDataTaskDelegate.m */, + A52285082871167215D3C139EB152B98 /* PFURLSessionDataTaskDelegate_Private.h */, + 67B621259A8F197B0245C2C5B5003445 /* PFURLSessionFileDownloadTaskDelegate.h */, + 74ACACF597B47C752DF60C1269A50016 /* PFURLSessionFileDownloadTaskDelegate.m */, + 8D874E8C6013F838D31865D7CACFFC8C /* PFURLSessionJSONDataTaskDelegate.h */, + EEA9CEB6EBD6F7D905225F3028208411 /* PFURLSessionJSONDataTaskDelegate.m */, + BF8B668575E32B4BC03D5A86BBAEAE74 /* PFURLSessionUploadTaskDelegate.h */, + FAACEF17AA010DB91B4F2D152A8E2E5A /* PFURLSessionUploadTaskDelegate.m */, + 527000AD7EF33A01F4034400FB51B6E9 /* PFURLSession_Private.h */, + 4840DBE7CE64AE75599772CB21A51C7E /* PFUser.h */, + 1FA13E8424FDF032B807EB307AF448F7 /* PFUser.m */, + 5B31CEE7768E9065A1168B8DFC0BAB53 /* PFUserAuthenticationController.h */, + 3ED3C7E0A4856FAB56766C096BB50FC4 /* PFUserAuthenticationController.m */, + E57BA8CF64D8018BCFEB289F81C3B448 /* PFUserAuthenticationDelegate.h */, + F1C86CCCF50B7B1651DF1DDA93ECB2A7 /* PFUserConstants.h */, + 4EB9E22A1797EF8F815387B3148987B7 /* PFUserConstants.m */, + 6B58384502B9F28F6975F16F9DB0EFF3 /* PFUserController.h */, + E9F025C441C961725285A53BA76899A7 /* PFUserController.m */, + BD96834E719E340094942FD1EC1DE357 /* PFUserFileCodingLogic.h */, + AC00DC436BD41D96D7CDADBBE0CCBC63 /* PFUserFileCodingLogic.m */, + 9A2313F192E2841C83555BDC26D3866B /* PFUserPrivate.h */, + 023787FB361088A0CC1401AF3EF0BD44 /* PFUserState.h */, + B6142CFCE45847BB7B5926039074D3DB /* PFUserState.m */, + 776FA4A81A104C872B1C274D67CE18FE /* PFUserState_Private.h */, + AA2F4B0C1884B9FA8CA4005505904B4F /* PFWeakValue.h */, + 8C42D1919287483D0731E55C7039390D /* PFWeakValue.m */, + 62080F892890D93BE422B38D0ADD788B /* Parse.h */, + EB5DC17148922AD333F7571A1F2466E3 /* Parse.m */, + 0C4513EB4F24A2BDEE3106F5C83A1664 /* ParseInternal.h */, + 6DE516CCF6D322CB4CA050FD6E52A70E /* ParseManager.h */, + 22FDFA3B8D05D54B5BB969DABCBC6413 /* ParseManager.m */, + 09FDB3ED688B893DC31F13212A092E58 /* ParseModule.h */, + A696C6A7BB4CC0BCC4967D91315B61AC /* ParseModule.m */, + 588102B50CAE5BFD6658FF5042965B9E /* Parse_Private.h */, + DB22940D3278BA5A422F059D4EFE7C6B /* Resources */, + 78131DF6EFB03A9654D9C718AB31087D /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/Bolts"; + path = Parse; sourceTree = ""; }; - 3B4583097277E8A56B364A7349186643 /* Bolts */ = { + 24002A6670E6882ECD6250D3E60F9CB2 /* Frameworks */ = { isa = PBXGroup; children = ( - 36A5C9D5099E00189F2FD1EE15CB14DE /* Support Files */, - 52536E4062D2F3819EFF08F9A9FCFE7E /* Tasks */, + F9400E82BDA8E39AA40BABDC6CB12014 /* iOS */, ); - path = Bolts; + name = Frameworks; sourceTree = ""; }; - 4B657238145A298E2C2E0ED134EA9AA7 /* Pods */ = { + 2CB5B158C2A118C167797A87812DAE77 /* pop */ = { isa = PBXGroup; children = ( - 3B4583097277E8A56B364A7349186643 /* Bolts */, - 62C3AB12129D9098F2E643D6B2CB4730 /* Parse */, + C091E831068E3E504A40AC6932B39C87 /* FloatConversion.h */, + 38C1E5A4A6882760CB349FCABD22A9DC /* POP.h */, + F3A985A006B0CCD0116D8FC53C4D1834 /* POPAction.h */, + 313669CF0D1BF49C96C85FC593F4BC1D /* POPAnimatableProperty.h */, + C9565C73D5D4BE79747E60DCF1557E71 /* POPAnimatableProperty.mm */, + 14938EB08280063D294781C3164C8332 /* POPAnimation.h */, + 8336CCF2280C58E6C367DF4EC0EBB7B3 /* POPAnimation.mm */, + 9F210DEEA777E0BF1995DC3570CC616E /* POPAnimationEvent.h */, + C0DF3C83EBC5F7BF6DAAACEBD7D72791 /* POPAnimationEvent.mm */, + 5785AD09C2208501D5161E950E701889 /* POPAnimationEventInternal.h */, + C1B6A53BFD919966B87CD6FBFD89CE1B /* POPAnimationExtras.h */, + 22DC4C87D619EF0F28631B5560E82333 /* POPAnimationExtras.mm */, + ED596D85957A49EC6092EC8EC38FCE49 /* POPAnimationInternal.h */, + EC10F21A5E230A911C2C2E5082CDAE4B /* POPAnimationPrivate.h */, + 3A5F7AF86D19E519B94AD6D8CB98CC34 /* POPAnimationRuntime.h */, + E85E0983DBE882A8009D0F7EAB591B91 /* POPAnimationRuntime.mm */, + 2E88590D291A3C131FC32F9BC9A80038 /* POPAnimationTracer.h */, + C1E27C3CBB149C1873F6CDC55D998CE2 /* POPAnimationTracer.mm */, + 9DA58C3428E2A0E2F88C2A0522297274 /* POPAnimationTracerInternal.h */, + 94815AA3EE3CBA04CEE85515701AD534 /* POPAnimator.h */, + ECC48BF18D3BD01C21B65648709A45D6 /* POPAnimator.mm */, + 0476012CEBFEB22B5F0926994E6AEEE3 /* POPAnimatorPrivate.h */, + 212068113F29FA47D17730ED388F8706 /* POPBasicAnimation.h */, + F54B1AE39CAF0CA846C1C729B033E047 /* POPBasicAnimation.mm */, + 7F59C51782AE555897A5B92D6B3CECD1 /* POPBasicAnimationInternal.h */, + 4CC05709207C91767940918CDD4779DC /* POPCGUtils.h */, + 0A9ED47A0EA56543BEB2F83DFD6122C8 /* POPCGUtils.mm */, + 928EC8B9105DA581C7896C2102E87BE2 /* POPCustomAnimation.h */, + 8EC4FC6A3A06D9292C296C691005546B /* POPCustomAnimation.mm */, + B0F7BCEE9A871E1193D694931FA31E17 /* POPDecayAnimation.h */, + C560616DDF5273CF7C53EF72EA6ED45A /* POPDecayAnimation.mm */, + B0CE575CDDE0B1795BB8B88E0B49ACA0 /* POPDecayAnimationInternal.h */, + 90DA3C63E9AD758336342BC51C0BB859 /* POPDefines.h */, + 3155A15C877F794FB064A4A0CEEB2F13 /* POPGeometry.h */, + B330BCF969EF6189E02E10926FB95CED /* POPGeometry.mm */, + 9663A817A809169745F3F8E987FFE076 /* POPLayerExtras.h */, + 197635F0BFB93E63E82503F09B7AABBF /* POPLayerExtras.mm */, + 9C3FE18EB564AF4087573DE6F3F2D3D3 /* POPMath.h */, + A19FD133843D5FCF16B8AF3B4E165515 /* POPMath.mm */, + F81E8633F1E784423FE8B9BE16D38981 /* POPPropertyAnimation.h */, + 2726A20CBCFFB77F9972C445E8972099 /* POPPropertyAnimation.mm */, + 134BDC30251FB7A5465C17F603FCAC5F /* POPPropertyAnimationInternal.h */, + 7371F16336283F2D8BB2A199CD4DDEF5 /* POPSpringAnimation.h */, + C24554FAA71D841BC3C0759DA37874AE /* POPSpringAnimation.mm */, + EB56BE02F1B0412A41C9D9834B04BC30 /* POPSpringAnimationInternal.h */, + 6961E549FC85F85EB7560B887B11C928 /* POPSpringSolver.h */, + D5CE48778301C24CD288B08DDA441605 /* POPVector.h */, + F0B4105C7EE2DA010EA4746E79138C7C /* POPVector.mm */, + 35574BADA6CDEA944F089CBC021F01AA /* TransformationMatrix.cpp */, + 2E056FF5C4EC38A55B45FB52F395D72E /* TransformationMatrix.h */, + 96015F1C746803D9318614B277F71BCB /* UnitBezier.h */, + 8A24758F7667B4720B7E756151A73F15 /* Support Files */, ); - name = Pods; + path = pop; sourceTree = ""; }; - 522559B2E6892BF2C958FADD2A2E6B17 /* Support Files */ = { + 57CCF01DFB7BD7239D93A5448BA92D0A /* Bolts */ = { isa = PBXGroup; children = ( - 4113495D4A663C12AB75535F753A5AF9 /* Parse.xcconfig */, - 3E781400D2DB9020CCA193E74F459F26 /* Parse-Private.xcconfig */, - 5456C5EDD601EB1F4939A1ADFE7EB84F /* Parse-dummy.m */, - 391E859809C989E8E6F5613E73CF722A /* Parse-prefix.pch */, + BCFFB6976DC888EB71BCE10C88727CA8 /* Support Files */, + 633DB105B84604115C888F5869A77ABC /* Tasks */, ); - name = "Support Files"; - path = "../Target Support Files/Parse"; + path = Bolts; sourceTree = ""; }; - 52536E4062D2F3819EFF08F9A9FCFE7E /* Tasks */ = { + 633DB105B84604115C888F5869A77ABC /* Tasks */ = { isa = PBXGroup; children = ( - 7EA388C394C5D9D428DB4F0C14EF97F7 /* BFCancellationToken.h */, - A2053B7041E0633DF0F9AD94C7B1956F /* BFCancellationToken.m */, - 17A2BDCAD5B27E331974A22F463E44CF /* BFCancellationTokenRegistration.h */, - E687834AAA233DAC2762507DAF840866 /* BFCancellationTokenRegistration.m */, - 7046AB20AC12CE0D708ECF95F2C079BF /* BFCancellationTokenSource.h */, - A2E9FF3525464F62315EA0C2C8DBF089 /* BFCancellationTokenSource.m */, - 7865F2D426B0005FBA1C5220282DDBEE /* BFDefines.h */, - 96273707C86B8C6EA8146C952F2EBE64 /* BFExecutor.h */, - 671CEA32EB838EA2DB18154A0B781F41 /* BFExecutor.m */, - A7A38E54B7ADBF7D1932DAF9BF6DB999 /* BFTask.h */, - CEB26C97146C83F5B87B7771DE7F29E0 /* BFTask.m */, - E7FA04FB8AE086B49BFBB161FB6C5A22 /* BFTaskCompletionSource.h */, - 18D995618F24B9FE1FA4F15699A5A8BA /* BFTaskCompletionSource.m */, - B3F709284CED11CD6FFD287A21D7356C /* Bolts.h */, - 8CCA791631F559F162C6A4858BB0E605 /* Bolts.m */, - A9A17244CCBF6923F4C1448B4C7F8259 /* BoltsVersion.h */, + 6DDEF20541344C4516B6DD22C1EB240F /* BFCancellationToken.h */, + CCF8CEA9A6064ADBBF6FE4C06F58AC6B /* BFCancellationToken.m */, + 94DE9F283B3DD4A47D7A8EA13D83D2C1 /* BFCancellationTokenRegistration.h */, + 97519DB5264A8748FB5782787D62615B /* BFCancellationTokenRegistration.m */, + 5BB217AB66F98AB5F05CBAB65838FA70 /* BFCancellationTokenSource.h */, + B4D6A8E418A8D134A61BFD6E094F65C4 /* BFCancellationTokenSource.m */, + C0E20B62BF2BBA3C871D3C7A2F6BD617 /* BFDefines.h */, + 06D0E06E5B5391A250E1E1200BADD9E1 /* BFExecutor.h */, + E35E8AB9F2B4D23971F6C53C0730A2F8 /* BFExecutor.m */, + 53FF030EF4F55FF673AA368E802BA1AD /* BFTask.h */, + 714C2B37BE3060D4E9F3C32DD8DA8D04 /* BFTask.m */, + 409D5D646200B0874F402A55B2054320 /* BFTaskCompletionSource.h */, + 828F0C1371108640DCECDC077D80E6F9 /* BFTaskCompletionSource.m */, + 41F8ECF258A9931347A9663B788331F1 /* Bolts.h */, + 1EE03D2CE9262E74BE101A9AD7F66934 /* Bolts.m */, + 3ED31097D39E6FCF0F3C743613AFA30C /* BoltsVersion.h */, ); name = Tasks; sourceTree = ""; }; - 62C3AB12129D9098F2E643D6B2CB4730 /* Parse */ = { + 78131DF6EFB03A9654D9C718AB31087D /* Support Files */ = { isa = PBXGroup; children = ( - 1DCFFA9D9D3FD9AE7914C3CDBC03F386 /* BFTask+Private.h */, - 29F955AA1404AAE96344AAE5FB9ACCCE /* BFTask+Private.m */, - 9423B92363C6078122A8D176B24507E2 /* PFACL.h */, - A1C2072D5B7941AF0CA6A45698E16D81 /* PFACL.m */, - 1048C89864CA1BAAC39909E7EAF64FF7 /* PFACLPrivate.h */, - C8673179A0982B40E80A428E4FB775FE /* PFACLState.h */, - B6230E95CC1C91D65E987B6F92071EE0 /* PFACLState.m */, - 1906D27D412A515912345F6C5D1138B3 /* PFACLState_Private.h */, - 0BB18584CF736AD36BCE6DE812088676 /* PFAlertView.h */, - B828EE160146AC71D96D74359D0B87D9 /* PFAlertView.m */, - 56DD772CBED2910C5B2E94ADABDD79F2 /* PFAnalytics.h */, - 116F73992D0A8BEB52EB6FFCE76C5242 /* PFAnalytics.m */, - E879D654F92A43EBF40100EDA8F4723B /* PFAnalyticsController.h */, - E7BE7DB2043BFD734996BA10DACD88D1 /* PFAnalyticsController.m */, - 17530FFB4F9A63C5FF114E86EC313B18 /* PFAnalyticsUtilities.h */, - 87310202CC115E0D59A56B46CE72FBD3 /* PFAnalyticsUtilities.m */, - C5E2765A6C6141C912C8C89927E5E59E /* PFAnalytics_Private.h */, - 68BF84CDE3833CC1EF16696ED2573967 /* PFAnonymousAuthenticationProvider.h */, - 14C7CDE38DB399D405735FBBF03F2A7B /* PFAnonymousAuthenticationProvider.m */, - 32E9622FB277F31FF0ACE70A0E8C1B44 /* PFAnonymousUtils.h */, - E0E0B5753859D0D0960D4F376D21CFBA /* PFAnonymousUtils.m */, - CB0D33609AC2DEE7BF62A26950D3C062 /* PFAnonymousUtils_Private.h */, - E24E0BB42A1D0F93BEE886509C659AB6 /* PFApplication.h */, - 00853C35851DB9DCB92267B2F10343F6 /* PFApplication.m */, - 16936467CF16DCC6960896B5471D7C27 /* PFAssert.h */, - 0C03418CCE96F211DA0F0C490AB018EE /* PFAsyncTaskQueue.h */, - 6285547694D0DE6096DB0174F62F8D57 /* PFAsyncTaskQueue.m */, - 7F989773F048C2B6AA76E2F33AB85191 /* PFBase64Encoder.h */, - D32CB47208011940CD4CC821E6C60F5F /* PFBase64Encoder.m */, - 40001E702307C45CF85652D32E688A7A /* PFBaseState.h */, - EE062DC0F3E041826FDC9B1920238531 /* PFBaseState.m */, - EC05CE6C1335AF7439307E684A4A4658 /* PFCachedQueryController.h */, - 2E1ABB16A7E7BC8AF7D9E1FE23ABE0E2 /* PFCachedQueryController.m */, - B6483E9C28C9D90DBE19EE9FEA7C05BA /* PFCategoryLoader.h */, - FD0DC15BB1F34596371C48A1D117C62F /* PFCategoryLoader.m */, - 8F51DFCB9E569CD5791CBA701D9AFE8C /* PFCloud.h */, - 6FCB9CF92D4B7B99AABCC3E9837A6C8C /* PFCloud.m */, - 2791960015A0E379245E5A0882B9DDCE /* PFCloudCodeController.h */, - D83B31511109921F7A0625DCDA97EBD2 /* PFCloudCodeController.m */, - 41BEED2F8941DE9D36C4383DE2A005E4 /* PFCommandCache.h */, - FCE8643D2CF10C59D3B13EED199470C3 /* PFCommandCache.m */, - 27A3A55D0FC90475F63A86D2640BF7E4 /* PFCommandCache_Private.h */, - 1170CA07F5721584040D06438ECB2657 /* PFCommandResult.h */, - E6C1A7933C5A11D332D285F4E14D704B /* PFCommandResult.m */, - C09DCB3EF4CB0BAF12A22BD98B68BFAA /* PFCommandRunning.h */, - C876DBA76406D0CD90D0A146D8241EB0 /* PFCommandRunning.m */, - 699EE24E208C84FB34AD727CE4B22B06 /* PFCommandRunningConstants.h */, - 83EF521AE88F3E4B58595E6C70734633 /* PFCommandRunningConstants.m */, - CA8004D86110E800F8B66A6C52331804 /* PFCommandURLRequestConstructor.h */, - DFC186001D6B517135B8C4D67EEC1DBA /* PFCommandURLRequestConstructor.m */, - 5292287F5D3AE4EF5E74D76C6FDB81A2 /* PFConfig.h */, - 4709648C670A81EACDB1DA9F808189F5 /* PFConfig.m */, - CB2EB1A81CEF041251C51543CB93FA8B /* PFConfigController.h */, - FA4D77F479BDDB7FCC802644C7B895D0 /* PFConfigController.m */, - C438131B9FF8C57DBDE42A1886182C1F /* PFConfig_Private.h */, - C3D50155B3D10EDC8634E8BCE3E2EC49 /* PFConstants.h */, - 765B7A2AA534A8E804AE9123D59C9043 /* PFConstants.m */, - 8DDA31CB23D7EDC55E267E8867ECC976 /* PFCoreDataProvider.h */, - ED136241C039AEF003B23EE29588B7DF /* PFCoreManager.h */, - 03E890753CE899F60DD6626F8404DF58 /* PFCoreManager.m */, - BFFD2763428584483FBC7980FDEE0319 /* PFCurrentConfigController.h */, - 2AB5DEC6229F3BE36F1F514679A24AE3 /* PFCurrentConfigController.m */, - D1502154EA0D5A991A1D6B8B9EFCB52F /* PFCurrentInstallationController.h */, - 5C7D5E9E9338447002877586E4B453BC /* PFCurrentInstallationController.m */, - C2B8FF73618A90330150849A195BFC2C /* PFCurrentObjectControlling.h */, - 7C2FB0BE9C76624C1E01BB37C1DF3416 /* PFCurrentUserController.h */, - A46B35BACD7F1073E12FCEDE85E4B67C /* PFCurrentUserController.m */, - BC4062E6A12C7F83FFAFD42283212C9A /* PFDataProvider.h */, - 3D4AD2E6C937B36339C0F9AFF8817BC6 /* PFDateFormatter.h */, - 23305A980DB3E4AED2259A74C9187B50 /* PFDateFormatter.m */, - ED66C38BB696C6EBD5F689444DE5698B /* PFDecoder.h */, - 8F10C0434DDB383B055CF6CA6E41A4A1 /* PFDecoder.m */, - 8824A59A418BB304F2D1B9623F26AE12 /* PFDefaultACLController.h */, - 333F24639C80887F8DA6A64132D3ACAD /* PFDefaultACLController.m */, - 70327113CA3A1A88572E8F96D12041F4 /* PFDevice.h */, - DC833CC54CC9FF49BF622887A836F451 /* PFDevice.m */, - 50DC95668369AC8E5CF51D8FE228F223 /* PFEncoder.h */, - AE6FD11DD7C073D83C79EDA40A4CBE4C /* PFEncoder.m */, - EF3CEDC763708425D34FDAF2CD1194C5 /* PFErrorUtilities.h */, - 02841C3BEB92D4DAC26220C5C7CE9740 /* PFErrorUtilities.m */, - 9C189C08BBFF35A029515798AD989F10 /* PFEventuallyPin.h */, - 023EEFF1E9891B8B0993596D706A7137 /* PFEventuallyPin.m */, - C52FA914AE60BC50812988E15670B2B0 /* PFEventuallyQueue.h */, - BAB69D923C8169E049A0B1F446DE3C22 /* PFEventuallyQueue.m */, - 0A3BD59B59438D47928EBE062F284A88 /* PFEventuallyQueue_Private.h */, - 03A69FDE3FBBA48FAFAB93667FC64A05 /* PFFieldOperation.h */, - F80064D5DEE86FA0C8D24134A843AFE1 /* PFFieldOperation.m */, - 7398989E9BACC2972DD360A682AB30D5 /* PFFieldOperationDecoder.h */, - 556C88BEC9C2F89C47B0E0710DA1127B /* PFFieldOperationDecoder.m */, - ADF1886AF6A65E3EF655A0635E8875D4 /* PFFile.h */, - 474A59362210E10E859CD9BA539B75D6 /* PFFile.m */, - B8702C4718ECDE4EC13CAB9FEBD20A78 /* PFFileController.h */, - 8C366C40EE46E2189B1D2710D70DFAC4 /* PFFileController.m */, - 62B360F076B3422F6B95643A41DC7D58 /* PFFileDataStream.h */, - 76F588CFEC125CE47A5E75C49BC6E111 /* PFFileDataStream.m */, - D3E8D70C7E8EB33159CDDA0AC7B6C9DC /* PFFileManager.h */, - A95C008395C7EBC9844E3F003B06DC43 /* PFFileManager.m */, - 2E7301204FAFBEAE4CD3C43B6DAC1858 /* PFFileStagingController.h */, - 366813962B9A44F8160D7BCF13112B91 /* PFFileStagingController.m */, - 7BEF001B9410A4976104E85881DB3C58 /* PFFileState.h */, - 8D19D8F4E00BF286006CD6D68E92C105 /* PFFileState.m */, - 7ADC119E201491E5146837A1ECDD27F1 /* PFFileState_Private.h */, - 144A3BA47B4A9DFCE62E998D209A9844 /* PFFile_Private.h */, - D2CC64D2FEDF6A4C762798A614A6AD05 /* PFGeoPoint.h */, - 8C9096CC3342212FFE41602D93C0C169 /* PFGeoPoint.m */, - 96AB7832E582A38AA7D72F9B8735C3BA /* PFGeoPointPrivate.h */, - 41EC4873567E5199115062D666B66648 /* PFHTTPRequest.h */, - A4ACC59626D38782D3773A813251B790 /* PFHTTPURLRequestConstructor.h */, - 4E2405EA0846F25769ECD3AD50DE9EC2 /* PFHTTPURLRequestConstructor.m */, - 8EAC8A1F239CB9A07C89A445269755B3 /* PFHash.h */, - 48BA1E2ADC6C1A912806B4434C705899 /* PFHash.m */, - 152A294FCBAFB2F303701CC560D0CB9E /* PFInstallation.h */, - 0EC3943147EE9557BE2120CF2329E38E /* PFInstallation.m */, - AB9B2C34BBD8FBC05AEB06BCA0F9C9CF /* PFInstallationConstants.h */, - 025EFE1DD58EFDD344107DFA9F4AD477 /* PFInstallationConstants.m */, - C3021C35E215764D5CD8DA96BB1AF638 /* PFInstallationController.h */, - B60239EFD344C553851D340E46C88513 /* PFInstallationController.m */, - E6A7D84E1E43EC5B6384808B1B5E2C0D /* PFInstallationIdentifierStore.h */, - F228BBFAF9E26128FBEF282FE73D477C /* PFInstallationIdentifierStore.m */, - 010221E298AB835936ED04C1B61B2889 /* PFInstallationIdentifierStore_Private.h */, - 765173C954A51B493E29F50B2D97732A /* PFInstallationPrivate.h */, - 84D4C06D28A83DD5865841731DD2BB1C /* PFInternalUtils.h */, - A0D7B54A478A38CB2BC90CD24EAB27B6 /* PFInternalUtils.m */, - 7CEB98AB34541B47F2042CC509B89CD4 /* PFJSONSerialization.h */, - BCF7D81BB8B3017FFCA5BFA657475191 /* PFJSONSerialization.m */, - AFCE9242FBE9C6F5B79A769A629C60CF /* PFKeyValueCache.h */, - 3A59FF425B4E22F00D5B693BF199C21E /* PFKeyValueCache.m */, - 52763EB85FB6F54982F9F986750D041D /* PFKeyValueCache_Private.h */, - 40F5313A31663C9C8E3E94C0B4789071 /* PFKeychainStore.h */, - D9AD68ED9EE4D4DA10299E21D0CF8248 /* PFKeychainStore.m */, - 4C0BDD882C72C66B96CB5D72117728F8 /* PFLocationManager.h */, - 7A061CE9E6A0CE32309E0356EB7DE8D9 /* PFLocationManager.m */, - B53A1E293DB4591CB07EB02181C2B192 /* PFLogger.h */, - 47F13D5EB10A23DB6E0A7FABF2E8CDBD /* PFLogger.m */, - 216E10883658EDAA1467BD1DDBDDC840 /* PFLogging.h */, - 870CCACCA994D6092C3A667F1EC7EE38 /* PFMacros.h */, - BD7E295A2705B98E78F1230626724816 /* PFMultiProcessFileLock.h */, - B5045A6DC57A247B1BB14933FDCA672F /* PFMultiProcessFileLock.m */, - D6A004354398DC71910DFA5EFAE2EE34 /* PFMultiProcessFileLockController.h */, - 5983FC4B63B585E8A136F4AC664EEF0C /* PFMultiProcessFileLockController.m */, - 23269D2652429AAB9E5717B42C4C40FB /* PFMulticastDelegate.h */, - 04F603E8068EB055DB1098ED088FBC0B /* PFMulticastDelegate.m */, - 88690FBD663956E84E2502DB50AB5408 /* PFMutableACLState.h */, - FDA614FFD9F4D7DF03E545167A1236CE /* PFMutableACLState.m */, - FC5FEFC8C99E02AAEE60AEBC8FF0063B /* PFMutableFileState.h */, - DDE9B6448BD79C26C031AB51DB767056 /* PFMutableFileState.m */, - 76730C16E6204729829FF1031310068D /* PFMutableObjectState.h */, - 905F084EAA67E29023FC7262EFF7C7FC /* PFMutableObjectState.m */, - 2FAE5FB0E717E5E066DB0DD19ED0679F /* PFMutablePushState.h */, - B9559972A6331681B0BFCE99D4830D0C /* PFMutablePushState.m */, - 23B01EE10487D2A55A89CF394A299B88 /* PFMutableQueryState.h */, - 80356D4DBFA9C24B249DE3B4717F44B8 /* PFMutableQueryState.m */, - F264AB25D4F485FB43C3C052444E57A8 /* PFMutableRelationState.h */, - A3ED374B51D528F113CC177E773492C6 /* PFMutableRelationState.m */, - 267DC6F7D82298ABF3C18C327FEDF275 /* PFMutableUserState.h */, - 355562D77F7A3ECC89ADA55D047757BA /* PFMutableUserState.m */, - 45D0E44482F38FEEB37F4CE77B608864 /* PFNetworkActivityIndicatorManager.h */, - F48BEB733DD91A7D53CF88B21A269709 /* PFNetworkActivityIndicatorManager.m */, - 72A213523367D0C4F848FD1542D0E1BB /* PFNetworkCommand.h */, - 9E7CD5EAEAC1BC3148596E0F47F3CA74 /* PFNullability.h */, - 308E43BD885210D04C25609F7FFE572D /* PFObject.h */, - 5BA78E8ED3B478FCE98D4154F24101BB /* PFObject.m */, - 08D3D6F3DCED7306E944D33A3186C1AF /* PFObject+Subclass.h */, - 34F7E58ACE9D749D100E04FECD569B45 /* PFObjectBatchController.h */, - E48021241236BB075308D3A946E88952 /* PFObjectBatchController.m */, - 85D8C47DFF7FF802AF326B4C6383AF35 /* PFObjectConstants.h */, - 0839D4C7AB14AABD676EF16D9D297FE7 /* PFObjectConstants.m */, - 2DAB9F63DEB559E36F66611AC7532E7C /* PFObjectController.h */, - CB26278765FDFC13590066F6B6BBE08C /* PFObjectController.m */, - 5D9415A793D299204A98D83B774768B1 /* PFObjectController_Private.h */, - BF48D0C85E7175A9594CACE087E1F8D3 /* PFObjectControlling.h */, - 5878493E65CFC3022C41DAF663AAD6DF /* PFObjectEstimatedData.h */, - 6BC6D066DB5DE208C19F3EF18D5033CF /* PFObjectEstimatedData.m */, - 81A6715334A0491BEE68AE8FEF91CA79 /* PFObjectFileCoder.h */, - 2706634FB1F4B0C9210247AA1B420D73 /* PFObjectFileCoder.m */, - 5C6B7B3F0FCE545B7D965DEDF8ED4613 /* PFObjectFileCodingLogic.h */, - 7ADCE9E163F3FCD8DF103AD6E0A2840B /* PFObjectFileCodingLogic.m */, - 860D0B9D3698F147687E070AD019DD1E /* PFObjectFilePersistenceController.h */, - ACB6900468A2F6CE7B3A606F3CA5F322 /* PFObjectFilePersistenceController.m */, - 362FACECEF69703BFA9C57ED74660D97 /* PFObjectLocalIdStore.h */, - 769433A4610BC66862A645AA9FFF52CB /* PFObjectLocalIdStore.m */, - 3140F8B22C96FA60AD48F660BFF7FCD2 /* PFObjectPrivate.h */, - DC63634BA83D3D3CBCBA2E87AB311573 /* PFObjectState.h */, - 807B1D200CD50072E1017510EC7A3B8E /* PFObjectState.m */, - 0A180E3CC6A83C085262778CAE43767A /* PFObjectState_Private.h */, - 0B30FD2D2BC16F38BEB58093ADF82B7A /* PFObjectSubclassInfo.h */, - 03A98730119221482A511C33FBD4CBF9 /* PFObjectSubclassInfo.m */, - 67597E3A5597B762BEC0ED0EC7E967FF /* PFObjectSubclassingController.h */, - 834AE8A8AE6F7F19DBF7A13695DA1EE9 /* PFObjectSubclassingController.m */, - A6604E156E00003CEF6AEA0518B9D55E /* PFObjectUtilities.h */, - 7FFDBD38104590E7E7569E959BE85635 /* PFObjectUtilities.m */, - 3CD9E69666E0F4D54D0539786BD3CBF7 /* PFOfflineObjectController.h */, - FEA99D72FAAF1C1CCB030F44B7765976 /* PFOfflineObjectController.m */, - DA979320C889B93770A321587B8E4496 /* PFOfflineQueryController.h */, - B32EAEBB2BF0E7999CBAA8BBC9844BB8 /* PFOfflineQueryController.m */, - F9250F0F20E5E4ED980A30FE96202787 /* PFOfflineQueryLogic.h */, - 229A74FF17E8D46A86798DDFB3D12F02 /* PFOfflineQueryLogic.m */, - 2B9972BBC14ADBA4A17A6CC1801DB183 /* PFOfflineStore.h */, - C6F8830B4BAD707ED99EB6DA023C7803 /* PFOfflineStore.m */, - 374CEE0448D7C92E9F6B2F5B9987BBFA /* PFOperationSet.h */, - 7F4F40BD61DDB1C6011B29A82B9D4674 /* PFOperationSet.m */, - 87355840B3797E204A33EF21DD786865 /* PFPaymentTransactionObserver.h */, - C72B7C59C5C07C9D6873A101E4CD589F /* PFPaymentTransactionObserver.m */, - 8AF69A58E6F7EA86A79ACA49E961650A /* PFPaymentTransactionObserver_Private.h */, - 1D7EDE5ABF288993846E8BEA60CE324D /* PFPin.h */, - 6776A4FE81BCDB08946667E7FAF1A6C0 /* PFPin.m */, - 44FB09F8C2981A2C9E4660E4FABC1F83 /* PFPinningEventuallyQueue.h */, - 8C3EB736F8A50220457120DE7F4E7DF7 /* PFPinningEventuallyQueue.m */, - D1C861FA6983C0DBEE507CDD33BA8714 /* PFPinningObjectStore.h */, - FA2438B1DDEB1848F5F5D82CB852583E /* PFPinningObjectStore.m */, - BE9304218DB27984F98075C9997693A9 /* PFProduct.h */, - AE99A29157A904C67890D7F7E49DDD80 /* PFProduct.m */, - 7A2A025CBCE13AF790C21EB33F3FDD8A /* PFProduct+Private.h */, - 2EE5B04D8D051799BEED324B493485A4 /* PFProductsRequestHandler.h */, - 1E60CD03AB5997917F89A62109F51C1F /* PFProductsRequestHandler.m */, - BD59DB857ADCDA5EE20B1AF8286DC64E /* PFPropertyInfo.h */, - 01E9E0D58701D7F6B1D72B98440AD9BA /* PFPropertyInfo.m */, - 09FEBAB0B414EEEC06B7B89FD63280F5 /* PFPropertyInfo_Private.h */, - BF7A6665C70BAC3FA8DEA15E402165E2 /* PFPropertyInfo_Runtime.h */, - E3F8B8B2001C10329EB9605C32C29711 /* PFPropertyInfo_Runtime.m */, - DCFD84DA41F7C585D9DC6E2088D8F8D3 /* PFPurchase.h */, - 3FBB8D23E11D288C6235C6730E4861BE /* PFPurchase.m */, - 7FF8D43BA53CAB9EC8CE2C3D9BB07585 /* PFPurchaseController.h */, - D4D44451B9EF1D2AABB3727B5BE49E3A /* PFPurchaseController.m */, - 8ED3D96C01E8D4CCBEF611AC599F7C52 /* PFPush.h */, - 6CA0FB7E1B7B3B44E19E9F459BDE3FC5 /* PFPush.m */, - 6A83EDAC97C7A74FA2625134D35D4560 /* PFPushChannelsController.h */, - 1CDD3144250DCECB39F57A04B6C9A3F0 /* PFPushChannelsController.m */, - 208CE00C994794CE9B26AC6698B8198D /* PFPushController.h */, - 2758D4A6E71B967E09A910CF576817B1 /* PFPushController.m */, - A327BF223427530CA8B748A9862FA426 /* PFPushManager.h */, - 8FF2D70E2A6BDA411BD8E96BE88717F8 /* PFPushManager.m */, - 8E1532E528C597C81417C9A6C2A3ECA1 /* PFPushPrivate.h */, - ABC73F2E99BCC42C0125231EAF7EDB15 /* PFPushState.h */, - E0937DFD0BBDD358F01F54D3DF3EB180 /* PFPushState.m */, - C4FC14EB432E641BAA43CE3A6CA50340 /* PFPushState_Private.h */, - BF1F7285450FFB765AE85728E98D3277 /* PFPushUtilities.h */, - CCE521672B33AE35219C0DBD9512A6E6 /* PFPushUtilities.m */, - 00B8BB0329F997188B363E677BBB666E /* PFQuery.h */, - A3E3489C8DBCB1ADB9C7893D90F60918 /* PFQuery.m */, - CF82FA8252D0DEF399D32F39A272A631 /* PFQueryController.h */, - A963DD1D7B9750E8E9A817472714C113 /* PFQueryController.m */, - 7C31BD302E3DED84EC1289B2E8C260F4 /* PFQueryPrivate.h */, - C9CBCE0E34FCE6BCB16E3402C6CF887E /* PFQueryState.h */, - C86658E5106D83528921871195EA7A25 /* PFQueryState.m */, - 0D2FD8C2062E42D035690B0D01AEA8DB /* PFQueryState_Private.h */, - 961B5EB24B86AAC41ED236D838A64A5C /* PFQueryUtilities.h */, - E18313F9207DA8A940C45F4C6D3BE5A2 /* PFQueryUtilities.m */, - 5894A228B6F31F871749F0BC8C57560B /* PFRESTAnalyticsCommand.h */, - 4F34B890143B7FF3F7E15109C866C70F /* PFRESTAnalyticsCommand.m */, - 77442B142F2E19A0A0521AFDCF58C91C /* PFRESTCloudCommand.h */, - C182382BFBF1EE8F2E17E6E7DFCABA57 /* PFRESTCloudCommand.m */, - 83D00AFB6C86BE198D122C01CC505FB9 /* PFRESTCommand.h */, - 6041A7EB33A2C8DBA16E95481F6E955A /* PFRESTCommand.m */, - FF94702CE18ED34C2681EF97F7E85B40 /* PFRESTCommand_Private.h */, - 7AF5DF0C66469EF5555738D6E5627354 /* PFRESTConfigCommand.h */, - 47D9BB43AF2C76037F90ECEAA05CFF01 /* PFRESTConfigCommand.m */, - BD53148FD3F25A5417B79C08A7EF6137 /* PFRESTFileCommand.h */, - 717C08EFA64F3FF8CD1383B57F8FFC0B /* PFRESTFileCommand.m */, - 68A4262C2B21FF46E63C3BB478773563 /* PFRESTObjectBatchCommand.h */, - 16E2B74C340852FB7F8D0C347EE34F7F /* PFRESTObjectBatchCommand.m */, - 0539CEFD73A9E47FC3CF538787C89A88 /* PFRESTObjectCommand.h */, - 6DC7C863A91F293E7888686B75ADDA92 /* PFRESTObjectCommand.m */, - 3C3A2002500C346E302092A2088A57A7 /* PFRESTPushCommand.h */, - BB3CC31AB928B710A068EFE34F219D54 /* PFRESTPushCommand.m */, - F4EBCD611EB0EB86EAF46AB78D6C9C9D /* PFRESTQueryCommand.h */, - E748E925ED12231ECAFCA45289DC5651 /* PFRESTQueryCommand.m */, - 8BA4F24522BCB8A666417FFCCCE66FAF /* PFRESTSessionCommand.h */, - 81B7B344C875A3AB97E6C33C60A5F9BF /* PFRESTSessionCommand.m */, - 8D8A0D5C7E7AAA06AD1719AF2C60C130 /* PFRESTUserCommand.h */, - 3D283291B477D2080EBFC60E0CE5B3A3 /* PFRESTUserCommand.m */, - F75EB19F28291BD31FAFD036CE9F9A61 /* PFReachability.h */, - 147E2DE0E42F38E2305A44CF01419B5A /* PFReachability.m */, - D74C3795282F4C34ABC6339CF12F14AA /* PFRelation.h */, - CF97B19442AC920A6CD420C61B604C5A /* PFRelation.m */, - 159CCE347EF8F7907332612BF120B860 /* PFRelationPrivate.h */, - 6E5C86338C3B23D609E0EF8581B094C1 /* PFRelationState.h */, - FE24B408A21AA65A2C6C5ECD3A88084D /* PFRelationState.m */, - 3EF48103F2FD65D41AC8CEF7D0FFAC5B /* PFRelationState_Private.h */, - F482627CD4A818F68CA6022A4023CD7A /* PFRole.h */, - 032A4A6705724272DE8FD9BC94C95C33 /* PFRole.m */, - 5F114EC7295D2D778ADAD06DAECFFDF6 /* PFSQLiteDatabase.h */, - 0D3318F94B3CCDF4EC509F49C45A27FC /* PFSQLiteDatabase.m */, - B90CFF6D8D057714B5CB05B1EF6832E7 /* PFSQLiteDatabaseController.h */, - FFC9A812BC50C9BE9A45E1BE4A59532D /* PFSQLiteDatabaseController.m */, - D60478F0E7C4D7B2ED83ECC80C4ED55C /* PFSQLiteDatabaseResult.h */, - 95F2D7917180A966F3553DB814B47079 /* PFSQLiteDatabaseResult.m */, - 0A33DBA763E58A23158889AB7E55D1E8 /* PFSQLiteDatabase_Private.h */, - 993C9598765F98AA0527D81D83D6DEE2 /* PFSQLiteStatement.h */, - B82B704DB25FE99DA94E96510CA4115E /* PFSQLiteStatement.m */, - 8EB39D6AC1AE16A8B7C4F5DE8BB6C0A5 /* PFSession.h */, - 24DA2B1B50C58F417BC0F3413CC0937E /* PFSession.m */, - 0F2AE28A9117ECBD3FEA8A80E3592B9E /* PFSessionController.h */, - BF600E65BDFE51829FB662904C48520F /* PFSessionController.m */, - A1EA7AD5E3D6B3D7DA51A46514ACC1B2 /* PFSessionUtilities.h */, - DE0701939C6512E62807F0DEAC0B88C4 /* PFSessionUtilities.m */, - 23D468ADFF594C052225A0543E3B6A56 /* PFSession_Private.h */, - 9D07888730F9C387835661F6975CE0CE /* PFSubclassing.h */, - AE1AF3237CA729A9AE65C24D5465EDB0 /* PFTaskQueue.h */, - 65A6FE58C9C2C7E84B044607B8A5890A /* PFTaskQueue.m */, - 1FB342435842C135A1CE8351177875B1 /* PFThreadsafety.h */, - 72AA7C1713DE26F7C83BC1BE68649977 /* PFThreadsafety.m */, - 89095502D7357690CC6FC98B5D64DB76 /* PFURLConstructor.h */, - E1F0715F4D0AC569F9A80C8EE87A7678 /* PFURLConstructor.m */, - B5F07D1F2661374F427EFA9F321E58A9 /* PFURLSession.h */, - C2DE5E9C06AC71245804541B12D5F7B8 /* PFURLSession.m */, - BF85BDBB00B0B90C79842355DCCE5702 /* PFURLSessionCommandRunner.h */, - 16E653F2F3740605E3A7745107A7C5DF /* PFURLSessionCommandRunner.m */, - B25F8AA5E0ACA8EF99E4B7A34CA08791 /* PFURLSessionCommandRunner_Private.h */, - 61C33185F5BD57BDE3231949A2133ABF /* PFURLSessionDataTaskDelegate.h */, - 43F2F47F077C809F803E3BA42EAF9CC7 /* PFURLSessionDataTaskDelegate.m */, - 8AF59E6E45FB90176198F0361D0B0430 /* PFURLSessionDataTaskDelegate_Private.h */, - 047743A34224268FD55BB1875D8232CA /* PFURLSessionFileDownloadTaskDelegate.h */, - F5760F0DA7B30409A71D6E956AE9172B /* PFURLSessionFileDownloadTaskDelegate.m */, - 4E2EF54AD86CBB75239ED52C54FEE973 /* PFURLSessionJSONDataTaskDelegate.h */, - 02237672394DCB6999F68D60FB362A3E /* PFURLSessionJSONDataTaskDelegate.m */, - 31479B7C07EEF4712DEF1D01F7F10F31 /* PFURLSessionUploadTaskDelegate.h */, - 99C509F37C4504D78F4E60A46E053B08 /* PFURLSessionUploadTaskDelegate.m */, - 384135DE37094DB8E731205CBD17F72F /* PFURLSession_Private.h */, - 14E52D110E94F845EFA54F1D5B716ADF /* PFUser.h */, - 78005460CA734997653B091EDC6EFBDF /* PFUser.m */, - 10BF5DBDEACF811090B330EB5B9574DC /* PFUserAuthenticationController.h */, - 5B7919554958754AF6F15E6D978D43B0 /* PFUserAuthenticationController.m */, - 29E8D38657DDEFCFA5A73CAF48D523A7 /* PFUserAuthenticationDelegate.h */, - 2A2DE58DBDFB1D72AF24F80D783EAE28 /* PFUserConstants.h */, - AEFE2975AB948B5A15901ABF3D7C9456 /* PFUserConstants.m */, - B71BDBAA3E5BDFECB4D5FA52A92DDE3C /* PFUserController.h */, - DCA2CF0514C165F17D511A7B9FA1A883 /* PFUserController.m */, - 3A5E945E1EC907178171BF58D1F60131 /* PFUserFileCodingLogic.h */, - 43AED0C36A33D48DB75041D300713664 /* PFUserFileCodingLogic.m */, - D66D14F7F2E3EBDC0A59BB7BA3788C3D /* PFUserPrivate.h */, - BB328A47E71DF5C9ED039046F3CF4E10 /* PFUserState.h */, - ADAA3EE17CA0B38B1E402F112E0339B9 /* PFUserState.m */, - 754F92799C47C441BC69A6DFCA0BE689 /* PFUserState_Private.h */, - 2F9009C1FEECA9D4795590A5794DD2B1 /* PFWeakValue.h */, - 6E530CB9C9FCEEC48D0D6022A3B9E461 /* PFWeakValue.m */, - 08ED2E2E627F66EA8CC90121737CB747 /* Parse.h */, - D236BD308CB967D7FED84A202A4B215B /* Parse.m */, - 97E6788E626A2016CCFF03F7381911B8 /* ParseInternal.h */, - E5BF16EBC1131EC1A8C8DF686217EDEF /* ParseManager.h */, - 11275EB0053B04F601BEF4D31A1367BE /* ParseManager.m */, - 9E9EF0B3D7C46C13AFB293451E7F566A /* ParseModule.h */, - 5CF5A1D517886292E9244E3BBBD29C2C /* ParseModule.m */, - C397337C5959FB9CDCAAD05A78CD13AD /* Parse_Private.h */, - FF992DD2FF3877B0B9C20ADC2EB62900 /* Resources */, - 522559B2E6892BF2C958FADD2A2E6B17 /* Support Files */, + 97EDF5367846B0B65AF31CA41D2B7812 /* Parse.xcconfig */, + CE1700FF476E3DF743FC31E536BEBEC6 /* Parse-Private.xcconfig */, + 139FB17B5AD5B2BD40E10B8D2177BEDC /* Parse-dummy.m */, + F447802A042F9641D3483858FF8FF6FB /* Parse-prefix.pch */, ); - path = Parse; + name = "Support Files"; + path = "../Target Support Files/Parse"; sourceTree = ""; }; 7DB346D0F39D3F0E887471402A8071AB = { @@ -1265,32 +1427,57 @@ children = ( BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */, 24002A6670E6882ECD6250D3E60F9CB2 /* Frameworks */, - 4B657238145A298E2C2E0ED134EA9AA7 /* Pods */, + FCB614EA9285C86CCE0AD5E74051EB98 /* Pods */, CCA510CFBEA2D207524CDA0D73C3B561 /* Products */, D2411A5FE7F7A004607BED49990C37F4 /* Targets Support Files */, ); sourceTree = ""; }; + 8A24758F7667B4720B7E756151A73F15 /* Support Files */ = { + isa = PBXGroup; + children = ( + 14906790E82B81D5B68B2258E95425B4 /* pop.xcconfig */, + 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */, + 59B3FD41DEC22C5891C9B83C27BC25E0 /* pop-dummy.m */, + F12CAAA4B06857D4D5F8B8C7F8B0A6D6 /* pop-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/pop"; + sourceTree = ""; + }; 952EEBFAF8F7E620423C9F156F25A506 /* Pods */ = { isa = PBXGroup; children = ( 15A529C27057E4A57D259CBC6E6CE49C /* Pods-acknowledgements.markdown */, BF59BC15D23E1E1912C8F334E7236813 /* Pods-acknowledgements.plist */, - F0F73BA329E4FD6AA01176C7431EBFE4 /* Pods-dummy.m */, + 419B671E948384A84974D819F4F24FBA /* Pods-dummy.m */, 641AE05DD55E5E6AC1590CD7B4A18F97 /* Pods-resources.sh */, - D5E25950A895A52CC19D857BBECD78E4 /* Pods.debug.xcconfig */, - 385DD2E0B95AAE1DDB352C5E48139C02 /* Pods.release.xcconfig */, + 3D02C6C7422645AB5529C759A1A86353 /* Pods.debug.xcconfig */, + 7EA341866E76C794E960BB9753925294 /* Pods.release.xcconfig */, ); name = Pods; path = "Target Support Files/Pods"; sourceTree = ""; }; + BCFFB6976DC888EB71BCE10C88727CA8 /* Support Files */ = { + isa = PBXGroup; + children = ( + 77312E9917F3B4071B52F28CD4A21EBC /* Bolts.xcconfig */, + D8453063C22C0EAA2AAC6F28CFBB7AC8 /* Bolts-Private.xcconfig */, + 6577AD13A469645712E5462FABF1FD4F /* Bolts-dummy.m */, + 29386A5F2F357AA19B9627F8C57A8D14 /* Bolts-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/Bolts"; + sourceTree = ""; + }; CCA510CFBEA2D207524CDA0D73C3B561 /* Products */ = { isa = PBXGroup; children = ( - 58C3D8E110425DA982C930E9EA797EDE /* libBolts.a */, - FFBAA18C7BBABC589780000C2DF75641 /* libParse.a */, - A1081E9BC218073917433A3F2697751B /* libPods.a */, + D1027683C24BF81936188B3CFC423274 /* libBolts.a */, + 478C891A77C52ACD2EE9267253F46B18 /* libParse.a */, + F81BCD1B1E1DFA056533AFD9F925EA0C /* libPods.a */, + A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */, ); name = Products; sourceTree = ""; @@ -1303,306 +1490,374 @@ name = "Targets Support Files"; sourceTree = ""; }; + DB22940D3278BA5A422F059D4EFE7C6B /* Resources */ = { + isa = PBXGroup; + children = ( + D0F22730A2A2917C6F9777B1BF5F179D /* en.lproj */, + ); + name = Resources; + sourceTree = ""; + }; F9400E82BDA8E39AA40BABDC6CB12014 /* iOS */ = { isa = PBXGroup; children = ( - 272027943ACA52CB75F07D7619CCC3BF /* AudioToolbox.framework */, - 44CF5AB5E34A9D3B7DBDB04076B71AA7 /* CFNetwork.framework */, - 4339829EF9FC5B8B3459DBD79F65C0D6 /* CoreGraphics.framework */, - 6F692090984F30582AD921FA0C5AF89E /* CoreLocation.framework */, - F2BBD5A5E42C1E632BCED63C083AEA52 /* Foundation.framework */, - 681A2BC7840EF1709F11E26C7EC3F202 /* QuartzCore.framework */, - 27841483445CA9ABFA8CCFB3D503D752 /* Security.framework */, - E5964B03763EB227A79722D086B07AEB /* StoreKit.framework */, - 883FBF6AC7D33CF1A604102A9D9779ED /* SystemConfiguration.framework */, + 8AC51F94ED4331609976AE134591C5FF /* AudioToolbox.framework */, + 4D5FFAB9AA9026C7A87341B6E4F0D9D7 /* CFNetwork.framework */, + E32EC19799A69A3384750AD614A93F67 /* CoreGraphics.framework */, + 7AF8C210F41A36E77FE11185CD850274 /* CoreLocation.framework */, + 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */, + D414E542C5F0101B04B821F89CB601B6 /* QuartzCore.framework */, + A85428811E6DF1E07CDC7F512CC5CC56 /* Security.framework */, + DE8243581B97EEAD2F8781E6C48FD676 /* StoreKit.framework */, + 067C9B58B0E86A024F7699B9FC2F7E42 /* SystemConfiguration.framework */, ); name = iOS; sourceTree = ""; }; - FF992DD2FF3877B0B9C20ADC2EB62900 /* Resources */ = { + FCB614EA9285C86CCE0AD5E74051EB98 /* Pods */ = { isa = PBXGroup; children = ( - 59931B6E0E647D850B10744856083216 /* en.lproj */, + 57CCF01DFB7BD7239D93A5448BA92D0A /* Bolts */, + 08C21DBD68BB3A37A0BE4BC2CA161F5E /* Parse */, + 2CB5B158C2A118C167797A87812DAE77 /* pop */, ); - name = Resources; + name = Pods; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 2B038F585125AE318896EF308506E5D3 /* Headers */ = { + 509E8AF80F557271E1098064FB89924E /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 24328C4DD9FDF0DFFA52AE81C55021C4 /* BFCancellationToken.h in Headers */, - F13F4E6F88ED4165359AF317F66E33E1 /* BFCancellationTokenRegistration.h in Headers */, - 81FFB85F409642557D76727753156F5B /* BFCancellationTokenSource.h in Headers */, - C1035BE9B7CD66D132D57EC819BEF1A2 /* BFDefines.h in Headers */, - F184E6760F65F61A5F0732CFE59C2217 /* BFExecutor.h in Headers */, - FC440F2A2D5DA843204E46C17E101F89 /* BFTask.h in Headers */, - 91F3B9A8260A288980D16C63193281D7 /* BFTaskCompletionSource.h in Headers */, - CCAAFE317844FA11C6D10C4D45A3D3EA /* Bolts.h in Headers */, - F0EB7E98687B60B2E02E3ECA44E650E5 /* BoltsVersion.h in Headers */, + D609DB3153D08C9401FC6FD046270B24 /* BFTask+Private.h in Headers */, + EE83BD490034A515070EA6E8E37E227D /* PFACL.h in Headers */, + 93B58C9AAFA9D0DC02CD2ACE750D9C96 /* PFACLPrivate.h in Headers */, + C6087786013E123A5BA24CDA01D12829 /* PFACLState.h in Headers */, + 4249688CFBB92CA26E922E6C47AFE8F0 /* PFACLState_Private.h in Headers */, + 34731100DF3C112C179EA805BCAF5BCB /* PFAlertView.h in Headers */, + 0844609AD157B2569405CC584D6D9679 /* PFAnalytics.h in Headers */, + 592AB331F20CA58D7CDBF114CA8C9050 /* PFAnalyticsController.h in Headers */, + FF10EDB81D6724D8A7CBBF85ACC89082 /* PFAnalyticsUtilities.h in Headers */, + EE3A3C294C3462AA62E477D5E167306A /* PFAnalytics_Private.h in Headers */, + F7145179707A6982099A9639DB58CDD1 /* PFAnonymousAuthenticationProvider.h in Headers */, + 4A364A41B24FE3CEA692690F01EC6C37 /* PFAnonymousUtils.h in Headers */, + 281E35FB8E35EC1E9F2ECC14AC06EE2F /* PFAnonymousUtils_Private.h in Headers */, + 3EB30C9EA4E091F05E2A7C5E855FFC16 /* PFApplication.h in Headers */, + B8876C85293D37E405FA3F56EC170BB2 /* PFAssert.h in Headers */, + 22DBE369440BD25CBD77C151C93A8F05 /* PFAsyncTaskQueue.h in Headers */, + B34504AFEE1AC70E9E0A1282A1986D2E /* PFBase64Encoder.h in Headers */, + 6ED4CEFEAA7F0414622FFE7917495648 /* PFBaseState.h in Headers */, + DB7880E757BE6F38134F25167A2F59EC /* PFCachedQueryController.h in Headers */, + 05F00A05A1F52FDF030A9ED3A65E4381 /* PFCategoryLoader.h in Headers */, + 2A06A476247DEFCD15C38C029E6D34DB /* PFCloud.h in Headers */, + 04F6C6E18CCF030F4D582EB215021992 /* PFCloudCodeController.h in Headers */, + E9C084ED73C6D3CFEB4A0414EDFF8405 /* PFCommandCache.h in Headers */, + 3E7AD54BEB829BE44D66654B265DAAFF /* PFCommandCache_Private.h in Headers */, + 04FDA7B957175B9AB41F12B581C39012 /* PFCommandResult.h in Headers */, + 309EB042B343BE9C616F85304F8ABDEC /* PFCommandRunning.h in Headers */, + 4D17AF3B64FAB28260209C8002E5FDCB /* PFCommandRunningConstants.h in Headers */, + F7D3BCD31F6408894D425BCC2F4FD82D /* PFCommandURLRequestConstructor.h in Headers */, + AD9492E2817C3879542A3391BD8BA9CE /* PFConfig.h in Headers */, + 70AB083C56EDE94F0CDC6A27CE2D00CE /* PFConfigController.h in Headers */, + 6F82531660EECBDAEF14269319E36A07 /* PFConfig_Private.h in Headers */, + E9DF1006C8F4119B1A23C8A964D4BDCF /* PFConstants.h in Headers */, + 6AB23830897DDB0C99C4F74A860D59B4 /* PFCoreDataProvider.h in Headers */, + 8AF4CC8804312196C7524D40045DDA52 /* PFCoreManager.h in Headers */, + 0D1CA8852FF8147C75A85B2F31117903 /* PFCurrentConfigController.h in Headers */, + 08B14D1DFFB905C7DA0922E60E93AFB4 /* PFCurrentInstallationController.h in Headers */, + DE67E043D3E6DFA26ED0608672E9EDE4 /* PFCurrentObjectControlling.h in Headers */, + 30AC63E9C9742D92BFB642A9A7F0FB08 /* PFCurrentUserController.h in Headers */, + 49ECD4E3A20E8D5FF2E8866D39CBAA21 /* PFDataProvider.h in Headers */, + 3802A63F68ECB3CA5DA20D75732A6DFD /* PFDateFormatter.h in Headers */, + 55545DCF029201A06D7DE175F9C42D33 /* PFDecoder.h in Headers */, + 14A9C6C340EF645292625C9BAA9D2E4C /* PFDefaultACLController.h in Headers */, + 3A4405B733E2F1770CF0AD8185D5DC10 /* PFDevice.h in Headers */, + 8FC831A96A9845FD32E258BC486937EA /* PFEncoder.h in Headers */, + B50C52582D730164A3C8A53F6F25239B /* PFErrorUtilities.h in Headers */, + 8A943C6875FF0162EF1AEC7EBE5A127A /* PFEventuallyPin.h in Headers */, + B0B417C67B226E210B5BAA71B6065E96 /* PFEventuallyQueue.h in Headers */, + 5D7484171082562F2D51A3AF11AF2363 /* PFEventuallyQueue_Private.h in Headers */, + 2D7F082E126EE359CEE014B2619D1661 /* PFFieldOperation.h in Headers */, + 26703E636E5C16D01C99FFBA0B9E8062 /* PFFieldOperationDecoder.h in Headers */, + 73182BB18ED83668DED496548790559E /* PFFile.h in Headers */, + 505024039D01133D2E06C44BBC09FC07 /* PFFileController.h in Headers */, + 7A128642C01CF8CA4F8EE6A6E4C72F00 /* PFFileDataStream.h in Headers */, + 547D96860F208D16B73B9DAE7DD796F0 /* PFFileManager.h in Headers */, + ED28BE739856D7DFDE74F4C6488C0B09 /* PFFileStagingController.h in Headers */, + 9D58D3CD652D24573594995023EA6D00 /* PFFileState.h in Headers */, + 9C53501EEB56F92B450024D8E97054BF /* PFFileState_Private.h in Headers */, + 82871F1A3C4D6E604FCC1567E42C1275 /* PFFile_Private.h in Headers */, + 18695B6FB1C1E432BBBED25F18E62976 /* PFGeoPoint.h in Headers */, + C82A861227CAC478415817B56AA81AB6 /* PFGeoPointPrivate.h in Headers */, + 5C5BD8C3EBACA8E787A84BAAB4A416DF /* PFHTTPRequest.h in Headers */, + CB466BFC29E239E0CAA89792EEB55773 /* PFHTTPURLRequestConstructor.h in Headers */, + FFFD333600E0CF9D8AE5D00E36F147C2 /* PFHash.h in Headers */, + 97D99230703F530162B00666ABC86E2B /* PFInstallation.h in Headers */, + 71F348ADDA3A9335484A60D7908EBE62 /* PFInstallationConstants.h in Headers */, + D8FAE63EFB668703E06E87D06E27DD10 /* PFInstallationController.h in Headers */, + EDE32F3C5ED3FAD54ADE2A858DEC5B89 /* PFInstallationIdentifierStore.h in Headers */, + 4FEF53FA4202399B466C4267631A2378 /* PFInstallationIdentifierStore_Private.h in Headers */, + F2F202A53F25BCFF106B2F77136BF78C /* PFInstallationPrivate.h in Headers */, + D044D268A07FEADE73CB38752603CB19 /* PFInternalUtils.h in Headers */, + 85131753F499D61CFB65053C9BB9F7C1 /* PFJSONSerialization.h in Headers */, + 994830D607E053C4CC8657055333C126 /* PFKeyValueCache.h in Headers */, + BC0F7D8E0E2AD3BFBEEC7F2B78BC59C6 /* PFKeyValueCache_Private.h in Headers */, + 0DDE88A3EC90392DDB022A0C399AFA04 /* PFKeychainStore.h in Headers */, + 35CA508E579AA77E74159A57D6C5464D /* PFLocationManager.h in Headers */, + AC116C2D91DD098890B38084CBF030EC /* PFLogger.h in Headers */, + 9EE27BE5368FE1C2920DAEC66AFE60E5 /* PFLogging.h in Headers */, + 8113CBFC7712DB6C088AA0E319CD74DE /* PFMacros.h in Headers */, + C9FB222E477526D6DF5C1EF357248970 /* PFMultiProcessFileLock.h in Headers */, + 956D98E26539A6A2F0E81468C820B569 /* PFMultiProcessFileLockController.h in Headers */, + 96DCFE0E10BC455B9673FDA3ADFC08B1 /* PFMulticastDelegate.h in Headers */, + 85996EC1B7350B6DB8689842667A01A6 /* PFMutableACLState.h in Headers */, + 11432DE55D0DE3BAB6D9BB8131CC576E /* PFMutableFileState.h in Headers */, + B8BF169D2C7B9AB5A95C714C2A1E9BB0 /* PFMutableObjectState.h in Headers */, + 7BAFF7E342EDAE7B1819B699CE406D2D /* PFMutablePushState.h in Headers */, + 1E95B670CEC8A958CBE78165F316F11B /* PFMutableQueryState.h in Headers */, + AD7773AD7D0B865CE5E4F516ED163DF2 /* PFMutableRelationState.h in Headers */, + 00EE2DBD1E7F59BFA1AE4F842706417C /* PFMutableUserState.h in Headers */, + 4600B58DFCD0B25BD4CD4945E02859FA /* PFNetworkActivityIndicatorManager.h in Headers */, + E4CA9C37AFA047E32E33ECF5C4184F51 /* PFNetworkCommand.h in Headers */, + 303D18C84C273A053FD1BA34006773BF /* PFNullability.h in Headers */, + 106AC3F7B15127B444B09D4BEC1C8B43 /* PFObject+Subclass.h in Headers */, + 8FA39AC641BAE708A7EE2141F22CD4BD /* PFObject.h in Headers */, + 347C0767BEFFB5F0CE309B5EB138A26F /* PFObjectBatchController.h in Headers */, + 0652F30DD0C4FE6F6F9CEB85F9B8D74E /* PFObjectConstants.h in Headers */, + B03E6AF1E598EC1DCAF4A7DDC0DD5489 /* PFObjectController.h in Headers */, + 976B4AA8300CDE0748E1737C6700E72B /* PFObjectController_Private.h in Headers */, + 1829B47CC2B07BF87040C0A5B17DCEE0 /* PFObjectControlling.h in Headers */, + 8E430CB3375D8ECB766249EA74730DEA /* PFObjectEstimatedData.h in Headers */, + E99450CFF3FF02596EAB7E7D87FEDCA0 /* PFObjectFileCoder.h in Headers */, + C8E14645C3547457621C6DFD0CC514C8 /* PFObjectFileCodingLogic.h in Headers */, + 893CB7651BD45123335D9DFF5FBF2995 /* PFObjectFilePersistenceController.h in Headers */, + D6E73AA34F7F1B47815DC967085A72EF /* PFObjectLocalIdStore.h in Headers */, + A3BD95AA5A59D14116D714D0BF6DE183 /* PFObjectPrivate.h in Headers */, + 1F6218FF21B87CE968615BF666391173 /* PFObjectState.h in Headers */, + 7EBC8051564BAF8D7D3FA8900D846FB2 /* PFObjectState_Private.h in Headers */, + 5B6CA23721DBD9125BA38228F7FD39D1 /* PFObjectSubclassInfo.h in Headers */, + 58B8E1D6990DB1F4816D4F32EE50A8EA /* PFObjectSubclassingController.h in Headers */, + 0C6374E8F087F3F9A7CDFAEB467FAA48 /* PFObjectUtilities.h in Headers */, + B21C1733EC906F80FE9CCD426D9442DC /* PFOfflineObjectController.h in Headers */, + 475F7963B4C61315A7E81764858166A6 /* PFOfflineQueryController.h in Headers */, + 61864772C3678C9ABEDD45DC028B0A16 /* PFOfflineQueryLogic.h in Headers */, + 8925A30FFB9B9FD7A1F77E75DD4BB4FA /* PFOfflineStore.h in Headers */, + AA3628EFC6E58E752EF07B229205B3EB /* PFOperationSet.h in Headers */, + DB47C8872FD56076325D22343CDD7B69 /* PFPaymentTransactionObserver.h in Headers */, + 55E308B2B58B975F0BAA49C27FC58AEC /* PFPaymentTransactionObserver_Private.h in Headers */, + 37C41E1C9ECD2240B829A8DA25B7FA86 /* PFPin.h in Headers */, + A03FD80CF4F2A5BE86D5337AA86EEEAB /* PFPinningEventuallyQueue.h in Headers */, + 13966B03B2D6769C16DD2374B5010932 /* PFPinningObjectStore.h in Headers */, + 6602802B478E4FBB6B7D42CC47DFB9FD /* PFProduct+Private.h in Headers */, + 7C3716AA37A820FD62570BB16F87ECB8 /* PFProduct.h in Headers */, + D9D15D14C4BCF21EEA86D07BF45B88B1 /* PFProductsRequestHandler.h in Headers */, + A37746B83E3B6776A578ACE28933CBD8 /* PFPropertyInfo.h in Headers */, + AC8E81AC6849346D82D690177DCF9150 /* PFPropertyInfo_Private.h in Headers */, + B454B8E5E316FFC8E1D2E1C730967866 /* PFPropertyInfo_Runtime.h in Headers */, + 39805A9A3BF2BC351B5F85500980E16B /* PFPurchase.h in Headers */, + 1B2262EFDAE0F192D7546683867AC14E /* PFPurchaseController.h in Headers */, + FD7B3714953511B022F7BA9A3B788C27 /* PFPush.h in Headers */, + A6C91C7166749D37E01ACCA5C2B74B5A /* PFPushChannelsController.h in Headers */, + 02C4B0A8B51D500CF0359C30EB77A55B /* PFPushController.h in Headers */, + 0F71054017CBECD2BF138C5EFD3ED57E /* PFPushManager.h in Headers */, + 09AE420645EA5821A4EB06CE5B22062D /* PFPushPrivate.h in Headers */, + 63B266F8B6708759E8409E2EDE1E5AEC /* PFPushState.h in Headers */, + C195BEAD62324084932C336CD0F167F4 /* PFPushState_Private.h in Headers */, + CFE19C2B8337074ECB614B8E15535616 /* PFPushUtilities.h in Headers */, + 0CE037AF386585DCEE8513CC3FDB551F /* PFQuery.h in Headers */, + 5EE490DADEA2FE08D4CAFBC21E35821C /* PFQueryController.h in Headers */, + 4BF28D461EB13C411BFD5E5F994CD533 /* PFQueryPrivate.h in Headers */, + 595FE58B33E24654D8C217CD9EB3F225 /* PFQueryState.h in Headers */, + 6B7257CD27F3B6B8D8591FA9BDE24943 /* PFQueryState_Private.h in Headers */, + 3D11FE763F5433C94FD28761CBB85E75 /* PFQueryUtilities.h in Headers */, + BB7BBA7B572300771B0DB9EDFF360F25 /* PFRESTAnalyticsCommand.h in Headers */, + 99E9F4422BD6659050CAD42953A4A7FE /* PFRESTCloudCommand.h in Headers */, + 9B7BB3DBA4067247D4AA58A5C0B52B11 /* PFRESTCommand.h in Headers */, + FC3E62E611240996AA6720A91B4EABB3 /* PFRESTCommand_Private.h in Headers */, + 3C0939EEFBF9C272642218B8BF390AF6 /* PFRESTConfigCommand.h in Headers */, + 4DFF084DEA71D9DBB38CBD17040A9BE6 /* PFRESTFileCommand.h in Headers */, + E7F1325DD18D11574F43630DF215C30C /* PFRESTObjectBatchCommand.h in Headers */, + 1E581CA0DC0AD8F9F538F6FD47B42F92 /* PFRESTObjectCommand.h in Headers */, + EC6531B679723631C5F070DC36B56DE8 /* PFRESTPushCommand.h in Headers */, + C7BEC270DC7D5AA4DD7D8A81575E179F /* PFRESTQueryCommand.h in Headers */, + DD7898873BF904FA0E114437CA1762B3 /* PFRESTSessionCommand.h in Headers */, + CAC625E628AAEF2445AB4B8D62123557 /* PFRESTUserCommand.h in Headers */, + F296EDE13ABDBAD0A6C57038E5891C38 /* PFReachability.h in Headers */, + CF90CCECF348956BB5DD62B17728C38D /* PFRelation.h in Headers */, + 861582A5DECCCCBC09E5D9B966806205 /* PFRelationPrivate.h in Headers */, + FFA925D18B7C5F8BDF61C623CA2E9D73 /* PFRelationState.h in Headers */, + 390C28D5DDFD9DDB5340A0F68CEB8C2E /* PFRelationState_Private.h in Headers */, + 8DB2D81BD3208535DD815967F6C49A4F /* PFRole.h in Headers */, + BCC550CB5440C1D466BB3BC4E78B83E1 /* PFSQLiteDatabase.h in Headers */, + 128270239F0FE9E10D4016298F09179F /* PFSQLiteDatabaseController.h in Headers */, + C35E8AAC7757AF2A72F3F138CF303A5B /* PFSQLiteDatabaseResult.h in Headers */, + 074E069D87C50D72053C5523956F1174 /* PFSQLiteDatabase_Private.h in Headers */, + D923EB05E2C32216B57B27EAB1F4E7E4 /* PFSQLiteStatement.h in Headers */, + FBA278641B85C2C4DFB9D28E978268EB /* PFSession.h in Headers */, + 58E120C5EE7D42D5D881715B390A2CBD /* PFSessionController.h in Headers */, + DB29FAEB95798B3BD6680DD88F69AF85 /* PFSessionUtilities.h in Headers */, + C90B605396530B452AF99A7678EA51B3 /* PFSession_Private.h in Headers */, + 49368492C042539DD291DAC1B71335C6 /* PFSubclassing.h in Headers */, + 42DC601C4CFF768DD66ADB341BC27B01 /* PFTaskQueue.h in Headers */, + CE0621CDDA5B17681FA105A924E561B0 /* PFThreadsafety.h in Headers */, + 95B2EDE938A1CF2D16213FB94E28D45A /* PFURLConstructor.h in Headers */, + 4F8683A479B5509C5B50AD9668CE72C6 /* PFURLSession.h in Headers */, + B4BE97FFB864542992C29041C5185202 /* PFURLSessionCommandRunner.h in Headers */, + DA7C2EEEC87D1F7FE3001B1E0DABFF5C /* PFURLSessionCommandRunner_Private.h in Headers */, + 6D06DC94B5F17AD59B6D8D7125E50C59 /* PFURLSessionDataTaskDelegate.h in Headers */, + 307D7DEC099E8172492DB3B8B843F347 /* PFURLSessionDataTaskDelegate_Private.h in Headers */, + 3A7507E3009ACF762200908D7CA0C0B7 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, + C26697DA5659534927CB60C187CA38B7 /* PFURLSessionJSONDataTaskDelegate.h in Headers */, + EEF00303ACA6F9A8159E892D01C4F702 /* PFURLSessionUploadTaskDelegate.h in Headers */, + A612764E17DB84BC666DE6C36AE5D431 /* PFURLSession_Private.h in Headers */, + B3CF982DD6F4DAAE77CBBBE9B1282C30 /* PFUser.h in Headers */, + BCBBA9D39E73E338C6A6C059CE03DFA7 /* PFUserAuthenticationController.h in Headers */, + 7FE988AA3ECD89B7101E701BB7302E21 /* PFUserAuthenticationDelegate.h in Headers */, + 930B72666B9FEA3D4172BEBB0EA55FF0 /* PFUserConstants.h in Headers */, + 91D0209E7085A403B6EF6BACBACD9D5D /* PFUserController.h in Headers */, + 569380E544C45B1C7B618A7A718A32AD /* PFUserFileCodingLogic.h in Headers */, + ACB9408C6FC53B87208559D1C21EC621 /* PFUserPrivate.h in Headers */, + 71553F54471B3ABC03CF3B999CE5915C /* PFUserState.h in Headers */, + 31750ADF61E36601124AF864C270BC3E /* PFUserState_Private.h in Headers */, + DCD7B3F2B92EB5E095480309F3F6C813 /* PFWeakValue.h in Headers */, + 01C20A13734E154707BCB74AA50AF6FA /* Parse.h in Headers */, + 61031A606EF2C5F521E09B81D4206B0B /* ParseInternal.h in Headers */, + 037922F25BE9EDF80206E267E32963F0 /* ParseManager.h in Headers */, + 635F29ADCD59325D8BA0238349FD779D /* ParseModule.h in Headers */, + 90DF839DD23B48C7F349F4E6C140CC53 /* Parse_Private.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - ED203B6C8F93F0B7DF8EAEF473632CEE /* Headers */ = { + 572F590DCD49A0CE84472F06D77F2403 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - E9BF687CA4B676BF9C0CAF6BBCD7B1C6 /* BFTask+Private.h in Headers */, - 1F838712E1B014E1BCF6E765D1F23D5C /* PFACL.h in Headers */, - 08398E64503CF57CE56D990E05392449 /* PFACLPrivate.h in Headers */, - 1A1B4D722995A2B4458EFF67FBD775E4 /* PFACLState.h in Headers */, - 53AC014B0B2DB4874BB9F4076CC2E221 /* PFACLState_Private.h in Headers */, - 3CC530D484A2138C0D57D5BE9ED86E79 /* PFAlertView.h in Headers */, - 26069A470A7BBB3C28AA132D40A070D2 /* PFAnalytics.h in Headers */, - C3E601B9D58FDA8A74543A1F61A6A9C2 /* PFAnalyticsController.h in Headers */, - D653044CBFB6B5F7FFEFA8FB323DB9BB /* PFAnalyticsUtilities.h in Headers */, - 6BD97EEFCBD33367A998E6F61AE1B707 /* PFAnalytics_Private.h in Headers */, - A4477AAEC61E1731E8E2528161F6016A /* PFAnonymousAuthenticationProvider.h in Headers */, - 6B8C23AD6AB94D1A8D7A6FAD7CCCCBB8 /* PFAnonymousUtils.h in Headers */, - 13317E2C7CF2D0440D5D64361CEDBF6C /* PFAnonymousUtils_Private.h in Headers */, - 432FD95ABE2FC0D2990EDBC7BBD168FB /* PFApplication.h in Headers */, - 4BD387D16940CDE76B33FE40B7CB0FA0 /* PFAssert.h in Headers */, - D6AA4C7F8504A7E1044BC4BECDC527E7 /* PFAsyncTaskQueue.h in Headers */, - 55B57B48BA95F1DC9B74B1122CB59271 /* PFBase64Encoder.h in Headers */, - AB76D332CB4C250B0948C1742763F304 /* PFBaseState.h in Headers */, - 84933A33BD80139924D79100B6D929E2 /* PFCachedQueryController.h in Headers */, - FCD5921048744A9B9509182C12DC3B2E /* PFCategoryLoader.h in Headers */, - A1BB2E8C1D3FCCBA44DFE673B60922CD /* PFCloud.h in Headers */, - 102197CBD5C0D38173A6379F7BBC7A67 /* PFCloudCodeController.h in Headers */, - B4B7577A1C0206DEB36F683B3B17452C /* PFCommandCache.h in Headers */, - 6AB0108D6EA80E95D713B920B6CEB2F7 /* PFCommandCache_Private.h in Headers */, - F057CC11EE9249F520F2B4C7F60DD936 /* PFCommandResult.h in Headers */, - 8BBC96F61D6C0A337739C2510B316483 /* PFCommandRunning.h in Headers */, - 85F5FE2F8C6718597B6C4E94CCE0D7BB /* PFCommandRunningConstants.h in Headers */, - 2996CE38687B3C1F1695E1E2E914F45B /* PFCommandURLRequestConstructor.h in Headers */, - 69462A41EAA562C09D454343B0FF4765 /* PFConfig.h in Headers */, - BA0F98005F9DABD84663A387BEF9F176 /* PFConfigController.h in Headers */, - 16FA4C7C0D7D11EAFC06F70A3C3F01F9 /* PFConfig_Private.h in Headers */, - EDA20A21CCE9BA77B2FA0E5BDEFFC85C /* PFConstants.h in Headers */, - 5F96955752916BB5DD149D974B5D4C7D /* PFCoreDataProvider.h in Headers */, - 8177070BBD754F70104684D7C07BA968 /* PFCoreManager.h in Headers */, - 8C753DE7AD359D4E643A13D21F559A03 /* PFCurrentConfigController.h in Headers */, - AB40902E23A9720B910155E68C5D1A5D /* PFCurrentInstallationController.h in Headers */, - 06621C5B35D2D1E8F295BC88798706D0 /* PFCurrentObjectControlling.h in Headers */, - 6D229602DF6335C2652BB3D405F5E539 /* PFCurrentUserController.h in Headers */, - 748A1772685C32F725BA2600ADE97D45 /* PFDataProvider.h in Headers */, - 590D6E0012B4CB622BE58D14C1C26003 /* PFDateFormatter.h in Headers */, - 0C377C0B4DB31197B927E1FE0026A2D0 /* PFDecoder.h in Headers */, - 0AFACA416A2734131E89B51E7BF3EAB3 /* PFDefaultACLController.h in Headers */, - 18FD81A45D18127CF60987033C24C650 /* PFDevice.h in Headers */, - EB1A21CE8A9D7D202B2B2F268CE0BBD0 /* PFEncoder.h in Headers */, - 80E90793223CC8EF9FFCAE92FFEDFF5A /* PFErrorUtilities.h in Headers */, - 13007D2AE6F953592B6E205DDC593E3B /* PFEventuallyPin.h in Headers */, - B7B8B9FADA4A622D966203776628003D /* PFEventuallyQueue.h in Headers */, - 6D203549B94FB9135A773B35858B7543 /* PFEventuallyQueue_Private.h in Headers */, - 5AC6B8062154D77214390C4A4374A47F /* PFFieldOperation.h in Headers */, - BB42E917B4369EE6FC673DAF75718784 /* PFFieldOperationDecoder.h in Headers */, - CF8AA88826DDEA177B316087418EF4C1 /* PFFile.h in Headers */, - 16E72C605C22A982B542195139A79664 /* PFFileController.h in Headers */, - 05F0726A895F6B2D8AFEF330B4B269E8 /* PFFileDataStream.h in Headers */, - 24384C69CA18A097981135EFB1F8A9DE /* PFFileManager.h in Headers */, - 088089DEBB2C6EE1ACE7A8BB4ADBD01E /* PFFileStagingController.h in Headers */, - DC30BA853B6702BC2982611F14FE4B6F /* PFFileState.h in Headers */, - 4D76D8AAEA4BAEF75A282A76C9322CF1 /* PFFileState_Private.h in Headers */, - F3D2C0C8C3C2249EE1A03C9AF084946F /* PFFile_Private.h in Headers */, - BE6BE0E6CBF7800AD744FEAA941A3465 /* PFGeoPoint.h in Headers */, - CC94A8F427E66A8FA99D9055DA53B3EA /* PFGeoPointPrivate.h in Headers */, - 6790C6F9B9D786321E26B692638C7F53 /* PFHTTPRequest.h in Headers */, - BD57C1BBE4605BE1BAD1722EDD356DD3 /* PFHTTPURLRequestConstructor.h in Headers */, - BEF81BBCD4ED12BDE45EA7F15396016E /* PFHash.h in Headers */, - F347073B50A9BFFAB4F094C75C9FC502 /* PFInstallation.h in Headers */, - 0D2B53E00E0068673FAC00A181888232 /* PFInstallationConstants.h in Headers */, - C7F76403B814F07C1D00E11603582FED /* PFInstallationController.h in Headers */, - 9EFF52CB3098B8B01A216C3AC7AC7DB2 /* PFInstallationIdentifierStore.h in Headers */, - DDF9E75DC117BAC673631EC5DA70A175 /* PFInstallationIdentifierStore_Private.h in Headers */, - E73C2EF366DE82A709A6D65EEBE1328C /* PFInstallationPrivate.h in Headers */, - F5CC151EF0B90D7A2BA370DE2C79CC38 /* PFInternalUtils.h in Headers */, - 5162C4FCE1176E51B1558ADBE61934ED /* PFJSONSerialization.h in Headers */, - 610CCE14FB5BFC4F81E180BA33AF93AB /* PFKeyValueCache.h in Headers */, - 19340871351B6225FEA0D50D11B4620C /* PFKeyValueCache_Private.h in Headers */, - 70BBF7AAEFF4CFFCCDD1D3F5302DBCF8 /* PFKeychainStore.h in Headers */, - CA8CF4B0AC490B512098FDF3D38231C0 /* PFLocationManager.h in Headers */, - 425992FEAC0F409D88949DA2A3C2B86B /* PFLogger.h in Headers */, - 9D1D9ED97579645663CF95211A6FF5B6 /* PFLogging.h in Headers */, - B0246442FB3AD47E4FE651E20DFA0F12 /* PFMacros.h in Headers */, - FED49F2A0FC8765AB17492CD955D2A12 /* PFMultiProcessFileLock.h in Headers */, - 79EC922722642AB723AFCD1334D6FC8F /* PFMultiProcessFileLockController.h in Headers */, - D7AB950DD05ED85D2D62ACE84D6766BB /* PFMulticastDelegate.h in Headers */, - A0C41C9B793A9571B762B20575FABA97 /* PFMutableACLState.h in Headers */, - C7DFB1EFA8D89E8D20B388A49EDD0469 /* PFMutableFileState.h in Headers */, - 8446BA3BBA658BA82ED7F26D661D4064 /* PFMutableObjectState.h in Headers */, - 537897E0B38AAE556EE0ED7FB16C0A2E /* PFMutablePushState.h in Headers */, - EF3044F21842A80CD8FD8C0FD2957126 /* PFMutableQueryState.h in Headers */, - 67B758B645B23761F9E6B11E1A6835EF /* PFMutableRelationState.h in Headers */, - 0E9E38A997E9084D66EEC8AE54FEA540 /* PFMutableUserState.h in Headers */, - AB487ACB6998FC1A5C71E553A2DDD1D5 /* PFNetworkActivityIndicatorManager.h in Headers */, - 63C96A61BEA3EFA6C400D8C2849E87B9 /* PFNetworkCommand.h in Headers */, - 93F07AF465A16197BDD89A01907DAF26 /* PFNullability.h in Headers */, - E9EC843D6BF988766F5A9C48315B572A /* PFObject+Subclass.h in Headers */, - 4DBD9C3DAC7E9BAE6BCB77F49B96466E /* PFObject.h in Headers */, - D41850BD9C694569BC9A4A3DB7057035 /* PFObjectBatchController.h in Headers */, - B0ACEE94E47398A49E87F2862B25479A /* PFObjectConstants.h in Headers */, - D29355C584330A8CA82B54F7FC0AAA6D /* PFObjectController.h in Headers */, - DE985311ADE8FDE921FEB4AFB9A89A5C /* PFObjectController_Private.h in Headers */, - 9645F2C8D5B779635F7D999C448335D9 /* PFObjectControlling.h in Headers */, - E0384F193693CF247589281D002527EC /* PFObjectEstimatedData.h in Headers */, - A5065060A9FAB79E3458CB76F4B1F180 /* PFObjectFileCoder.h in Headers */, - 74F9B9EE544827019AEE581B37594468 /* PFObjectFileCodingLogic.h in Headers */, - 42096D610F30DDDB22DFD9A86C4FAA69 /* PFObjectFilePersistenceController.h in Headers */, - 839CECE9E0DF6BB8204EE4F8343213EA /* PFObjectLocalIdStore.h in Headers */, - 17DBCDA05E550DA75A0FB69CDA01C0F8 /* PFObjectPrivate.h in Headers */, - 46419B0E085E69C110E9F84F8CCFA001 /* PFObjectState.h in Headers */, - 126E7184E4905EDE5378F90427D6E7FD /* PFObjectState_Private.h in Headers */, - F5F2E1B52DF9F451F9947CF1B9A3369A /* PFObjectSubclassInfo.h in Headers */, - B8EE5009876838F73F966C879482E31E /* PFObjectSubclassingController.h in Headers */, - CEDBF7752568F29834130E179561EE36 /* PFObjectUtilities.h in Headers */, - 3B3E0E9E5467CED5674DAC7481FCE583 /* PFOfflineObjectController.h in Headers */, - F94D1E24CD4E2406DD6F9A7CE579CD49 /* PFOfflineQueryController.h in Headers */, - DBA40E524C6A1078E5E761DA1CF7E3F8 /* PFOfflineQueryLogic.h in Headers */, - 541F0862E0F66FD9FECCFA8AAD76B112 /* PFOfflineStore.h in Headers */, - 0CAD3D353992BC07FDA53F629A717372 /* PFOperationSet.h in Headers */, - 0CBD94653A4DD93270DEBB19B785AD2A /* PFPaymentTransactionObserver.h in Headers */, - 2FE5E3D8578C1A52CFEAB60226AD06E8 /* PFPaymentTransactionObserver_Private.h in Headers */, - C424C8C02491EE32FE76D0E4163B9BBB /* PFPin.h in Headers */, - 9E5114DC7AB77045B4AC2B1224CD4B84 /* PFPinningEventuallyQueue.h in Headers */, - B6E585E0327BC1EB0EC7C0D4803C1CB7 /* PFPinningObjectStore.h in Headers */, - 041C92E54A9D450BE74307E370BCA64A /* PFProduct+Private.h in Headers */, - 2660301297C2EED30B00FD417F807C9A /* PFProduct.h in Headers */, - 44AF64800D581887F39C40E88E391253 /* PFProductsRequestHandler.h in Headers */, - B7DFA8419CDB3F24CB17D7F079BDDDFF /* PFPropertyInfo.h in Headers */, - 1D3F3115940F9BB052E81C37EB59E2CD /* PFPropertyInfo_Private.h in Headers */, - D6662D0C2662EC0C464F1D964AF3C1DC /* PFPropertyInfo_Runtime.h in Headers */, - 76D8001BD5AB652902CA1FC0DB707D9C /* PFPurchase.h in Headers */, - 86DC83CE56B98DB504E82439521B16CD /* PFPurchaseController.h in Headers */, - C62A65AC30EF279D3F45C8BCFE29CBB7 /* PFPush.h in Headers */, - 318357AC7E8AC7D2B07F467B152F58A7 /* PFPushChannelsController.h in Headers */, - 0CF319A4825731DBE4F3A2162455DE71 /* PFPushController.h in Headers */, - 9093266F675B6073EA7E27CB8505C7A9 /* PFPushManager.h in Headers */, - 140FB704C9541A4CE92C46E8462E11DE /* PFPushPrivate.h in Headers */, - 4D0D958784EF1DA1869703056E662766 /* PFPushState.h in Headers */, - 5CABBA2AF2A8EB39119AD52080FAD3D9 /* PFPushState_Private.h in Headers */, - EF91ACE6A4CFF1DA4621FB864B05C627 /* PFPushUtilities.h in Headers */, - A6131891A9A0A9C9F694D2B047CD3FA0 /* PFQuery.h in Headers */, - E097C48262B95CD4859E7E97439EB0E2 /* PFQueryController.h in Headers */, - 17AF383C6FF5BB229F3C1ABB5466FE5C /* PFQueryPrivate.h in Headers */, - 50DCE2E9E236ABBDC809CA7464CB6A8A /* PFQueryState.h in Headers */, - 9F4B0D8ED2F69D51C5B934D536578CBA /* PFQueryState_Private.h in Headers */, - 7E6015115360369B63B1A16ADB721B9E /* PFQueryUtilities.h in Headers */, - 3FA490D070A74BE926B891C476B59967 /* PFRESTAnalyticsCommand.h in Headers */, - A368D821FA95C5524EDBED8BCB084CE0 /* PFRESTCloudCommand.h in Headers */, - 9E8416764D2372D8E2DA93D9ECC89410 /* PFRESTCommand.h in Headers */, - 8E1E26EAE490E452B6660B761FDC52ED /* PFRESTCommand_Private.h in Headers */, - 6EA9EAE04A65D98295CA36A7EE64F032 /* PFRESTConfigCommand.h in Headers */, - 04AA489AF75CF5DBF03E44F7650B5D1C /* PFRESTFileCommand.h in Headers */, - 92903FB655BADB2CA51988E598CDE90D /* PFRESTObjectBatchCommand.h in Headers */, - 344A94378384BEC85479E8A1073A2085 /* PFRESTObjectCommand.h in Headers */, - 5D2BFBD651780F482A3A6F62AA40812E /* PFRESTPushCommand.h in Headers */, - 740BEBCEE96550513F82009F6EC31FB2 /* PFRESTQueryCommand.h in Headers */, - 9D37DC879729E2F3E90B41F02A6B5424 /* PFRESTSessionCommand.h in Headers */, - 35BFF14A76CF6F25A95AD421B43D8863 /* PFRESTUserCommand.h in Headers */, - ABDD20576F8BEF189B0826937FBFC9BF /* PFReachability.h in Headers */, - 938B9E0D778946EB4A20DE22D925E0BA /* PFRelation.h in Headers */, - 5E03E457F64858FF919B5E2CB8DCC7EA /* PFRelationPrivate.h in Headers */, - C5C0E8C288C12762154DCC0F340146BE /* PFRelationState.h in Headers */, - E541D6BB943BF7613FB797ED4F7959A8 /* PFRelationState_Private.h in Headers */, - 3009E31927F1B45BCAC0F1C0C9EB6BD3 /* PFRole.h in Headers */, - 5BEA226EB7FA60D301D67500B4C43EB8 /* PFSQLiteDatabase.h in Headers */, - 210E594A5E64FBC160B3784AAE436D7E /* PFSQLiteDatabaseController.h in Headers */, - B19D62A8B55B539FC5B7B1D294EB91D0 /* PFSQLiteDatabaseResult.h in Headers */, - B4E9270B79198BACEECBC96F4D246292 /* PFSQLiteDatabase_Private.h in Headers */, - 9C50DCE43E19C07A531CAA9DAF92EC44 /* PFSQLiteStatement.h in Headers */, - BB506A2582FF02EF9A8878CED3067763 /* PFSession.h in Headers */, - 42D75578B2E43F1D8B8494305D0EDB9E /* PFSessionController.h in Headers */, - D2B62B011E42DBBBEB20DB5FA2BBC6CF /* PFSessionUtilities.h in Headers */, - FE046E97BCDE38C14F403CCDF301B12F /* PFSession_Private.h in Headers */, - 429DD447E17627BC672B4E0A4B98EE91 /* PFSubclassing.h in Headers */, - 9D104866E774B46DE983ECE270A0BACB /* PFTaskQueue.h in Headers */, - C72908FECB9E74136372BCA3AD9EE391 /* PFThreadsafety.h in Headers */, - 1F77AE633D24816C73EE99C6743EFD06 /* PFURLConstructor.h in Headers */, - 9D22D569F427BC219F2223C416FE17D9 /* PFURLSession.h in Headers */, - 1A049CCED7F4111A63D20FE2E55D1582 /* PFURLSessionCommandRunner.h in Headers */, - 0564194E3B97B21F1FCE32E8FBA39D99 /* PFURLSessionCommandRunner_Private.h in Headers */, - E9B4C4B574F58F61A14C2E6CDDC87FA9 /* PFURLSessionDataTaskDelegate.h in Headers */, - 38452D68029BDCCC144FB09DFF2D6163 /* PFURLSessionDataTaskDelegate_Private.h in Headers */, - 60A0AEA1B304E722C64C9CA9A54AB2BB /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, - 877092E1B6D3E8C3C5F389CEE0053BCC /* PFURLSessionJSONDataTaskDelegate.h in Headers */, - C4E268B9B9161164425357E786164D39 /* PFURLSessionUploadTaskDelegate.h in Headers */, - 8CF2F3C2B486F8EC6FE55E6A39462E4B /* PFURLSession_Private.h in Headers */, - 1A1E8B82688D176C875964C659D90CB1 /* PFUser.h in Headers */, - 1C07A61DDFBAF4EFD2F080F27B0780D6 /* PFUserAuthenticationController.h in Headers */, - 1905CE8117703296C87FBAA262C5CDC1 /* PFUserAuthenticationDelegate.h in Headers */, - 39CA9738B472EA7A479C17082AD8EE91 /* PFUserConstants.h in Headers */, - CADAF04325069E2ACD071E78464D5F01 /* PFUserController.h in Headers */, - 3182683990079B507F559DC296595B26 /* PFUserFileCodingLogic.h in Headers */, - BBE39348815CBF413FBEE01EA88DF139 /* PFUserPrivate.h in Headers */, - 4D9EA3669F6C10E1D70A06EA46CFF3DD /* PFUserState.h in Headers */, - BECA671768224F85FF36E96155A518AB /* PFUserState_Private.h in Headers */, - 90B7F7FD1811534484E2AF1BD75CD7CE /* PFWeakValue.h in Headers */, - 662C4CA41222FF80855AEAE39EBBCAC7 /* Parse.h in Headers */, - 30AE14165C4A728A3B8F7BDF887ECA3D /* ParseInternal.h in Headers */, - 7B95550B1E815BFCFE340A7F92CFA4EB /* ParseManager.h in Headers */, - 0679713BBD5676BA778F5284E47BC116 /* ParseModule.h in Headers */, - 300CF7EAA14707BA85CE473CD1F86EC2 /* Parse_Private.h in Headers */, + 0F666004816BD3E9D47E40000FCE0C87 /* BFCancellationToken.h in Headers */, + 86AB6AEEF3D388454B3C58953671251F /* BFCancellationTokenRegistration.h in Headers */, + 9CB9E73CBDB67F0BB0F98519571E6386 /* BFCancellationTokenSource.h in Headers */, + 42FB395EE90C8D23200DB0C4FECCD171 /* BFDefines.h in Headers */, + 16D3FC7241874C6948D2C9C3211B223B /* BFExecutor.h in Headers */, + 3AA82138BFF90068E1DF5B3C168ABB51 /* BFTask.h in Headers */, + 32D7AF079AE20056F6152EF4D46AECFD /* BFTaskCompletionSource.h in Headers */, + 6D9EB02700C618D8DBF48C2355B3406D /* Bolts.h in Headers */, + 25706CA63FDDB23DA6DBD73940E275FD /* BoltsVersion.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 725D774220C4DF53E7316E8623730814 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + AA0189A6FB9572B5BF87E3B0DD1F872C /* FloatConversion.h in Headers */, + 0E111996ED8AB07B504AD6200F460C6E /* POP.h in Headers */, + ED3821443DA3268139C3CE29A592C03C /* POPAction.h in Headers */, + 94BFE73B7E00A0FED987F553B0DCE94E /* POPAnimatableProperty.h in Headers */, + F388B7C3B4B0325048D4B5E4C1BAF904 /* POPAnimation.h in Headers */, + 94FACE1C5E4B42AB129DA7326E4E04F9 /* POPAnimationEvent.h in Headers */, + 22030D04E39440FA02B75449A95BF767 /* POPAnimationEventInternal.h in Headers */, + BE267A18590772AAA04953604BC7B310 /* POPAnimationExtras.h in Headers */, + F353B70A061E08623279B54744E15DA7 /* POPAnimationInternal.h in Headers */, + 09F160052D6F4DF4F769F6A2A351071C /* POPAnimationPrivate.h in Headers */, + 5520088E66FB2528F595AA617FFC5D9A /* POPAnimationRuntime.h in Headers */, + D5792E05DB34C9521294B06A622AE040 /* POPAnimationTracer.h in Headers */, + 7B99231436CB0981EC5113A681AF7C8E /* POPAnimationTracerInternal.h in Headers */, + E66A972C821119D091B99E54200F7FC0 /* POPAnimator.h in Headers */, + BD6626643DD9C3A12AB86F9361EC89DB /* POPAnimatorPrivate.h in Headers */, + BA9989C7128E968BA7D20CFEB392AE9D /* POPBasicAnimation.h in Headers */, + F1869B0A07F843009A3268A12F2F96CF /* POPBasicAnimationInternal.h in Headers */, + 11924DA123F63743B409090BFC425AD2 /* POPCGUtils.h in Headers */, + 59CB94574F710422B4C9CD6D388CCA03 /* POPCustomAnimation.h in Headers */, + D4224969BAFBC6138FFC872CCC829FB9 /* POPDecayAnimation.h in Headers */, + B5B86F0561840C9F3408D9A3CE3BADD0 /* POPDecayAnimationInternal.h in Headers */, + 9088AFD3E6C678A42A8E0189F65F73B6 /* POPDefines.h in Headers */, + D83868EA3920350C53488A4C4F9A5565 /* POPGeometry.h in Headers */, + 804C70F77F75F0E75ACC3E3E4B47B727 /* POPLayerExtras.h in Headers */, + 461ADD1403E940D9DB7BBB5B7323376F /* POPMath.h in Headers */, + 7EE77B776CF54D5794EB5D9DB5FCF8D4 /* POPPropertyAnimation.h in Headers */, + 1937EC6CD83AA2FAB3455591AB074459 /* POPPropertyAnimationInternal.h in Headers */, + DBEF60495B33D1BA4C7BA3C8E3A24968 /* POPSpringAnimation.h in Headers */, + 4BA566241FA98C1D5E4A5284D84EAB71 /* POPSpringAnimationInternal.h in Headers */, + 1BEBEDAB53B9DB3AD45E1F70637747F9 /* POPSpringSolver.h in Headers */, + EB965B246F7206AE338A7DF882400A0E /* POPVector.h in Headers */, + 966900CAD39E8B592A35F8401549A86D /* TransformationMatrix.h in Headers */, + B6DA545595D3CE47BC8F81E673889B4B /* UnitBezier.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 5D8129E3793C29AAEEF26CE316A9DDC0 /* Pods */ = { + 3094A346FA0BA2A7016A256FB910F479 /* Bolts */ = { isa = PBXNativeTarget; - buildConfigurationList = 3853084F728ADFDA70933757DC5D4264 /* Build configuration list for PBXNativeTarget "Pods" */; + buildConfigurationList = 59EACD0D7A24F90BA574CE0F659DE30D /* Build configuration list for PBXNativeTarget "Bolts" */; buildPhases = ( - EAC097187F04D113617E813C782E0137 /* Sources */, - BC4C40C28519D73FBDD81030214E0713 /* Frameworks */, + 6816814F8FA59B67B6310DF761B95483 /* Sources */, + B4E7CC86B3732BF1BCC75FF7D4C6DB92 /* Frameworks */, + 572F590DCD49A0CE84472F06D77F2403 /* Headers */, ); buildRules = ( ); dependencies = ( - 9BBEC04506A9D49A924F2CC384CF2574 /* PBXTargetDependency */, - 9A0617D3CF59620FEE731CA3D261D8F4 /* PBXTargetDependency */, ); - name = Pods; - productName = Pods; - productReference = A1081E9BC218073917433A3F2697751B /* libPods.a */; + name = Bolts; + productName = Bolts; + productReference = D1027683C24BF81936188B3CFC423274 /* libBolts.a */; productType = "com.apple.product-type.library.static"; }; - A3CBE48EB714CEAD058125E015A71ACC /* Bolts */ = { + 47C800E42623009B7192B025B3DD25A1 /* pop */ = { isa = PBXNativeTarget; - buildConfigurationList = 7A42B86C068DDDC1E02C2F87B7A8883D /* Build configuration list for PBXNativeTarget "Bolts" */; + buildConfigurationList = 62C75DE36F62F6DD244D1001268287F5 /* Build configuration list for PBXNativeTarget "pop" */; buildPhases = ( - 56CA2F5EDB6BFEBC07073EB46D41B297 /* Sources */, - 942508E56C720429BC1DCEB09828834B /* Frameworks */, - 2B038F585125AE318896EF308506E5D3 /* Headers */, + 0EA1208F3B72AAF8A7683795C5C61072 /* Sources */, + 8C45497CBD83A66C8FBF1289DF39CE3D /* Frameworks */, + 725D774220C4DF53E7316E8623730814 /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = Bolts; - productName = Bolts; - productReference = 58C3D8E110425DA982C930E9EA797EDE /* libBolts.a */; + name = pop; + productName = pop; + productReference = A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */; productType = "com.apple.product-type.library.static"; }; - E09D69912D3DE5D63052370034A0DDDC /* Parse */ = { + 6B21C5373E714B4D9498D17EE535A4D6 /* Parse */ = { isa = PBXNativeTarget; - buildConfigurationList = C67CD42F714A49E139F5EF87E19C2AD6 /* Build configuration list for PBXNativeTarget "Parse" */; + buildConfigurationList = 6E3F830824B8ABA99F201389718A5F33 /* Build configuration list for PBXNativeTarget "Parse" */; buildPhases = ( - D8D62ABEDD102FDBB16DAEBCBAD0AD74 /* Sources */, - 7D675EAC5362DC710F02FD75C202FC69 /* Frameworks */, - ED203B6C8F93F0B7DF8EAEF473632CEE /* Headers */, + 84F8FDF2464BD2599AA62180586AF817 /* Sources */, + FD255F136A4B715136E15DABA3D815B5 /* Frameworks */, + 509E8AF80F557271E1098064FB89924E /* Headers */, ); buildRules = ( ); dependencies = ( - 5CCA733CC176F0BE5FB543967C119C6F /* PBXTargetDependency */, + 2F8CA3FF9C1472ABEE78882ACBE29841 /* PBXTargetDependency */, ); name = Parse; productName = Parse; - productReference = FFBAA18C7BBABC589780000C2DF75641 /* libParse.a */; + productReference = 478C891A77C52ACD2EE9267253F46B18 /* libParse.a */; + productType = "com.apple.product-type.library.static"; + }; + D219004FB928DD852E3C33624E58623C /* Pods */ = { + isa = PBXNativeTarget; + buildConfigurationList = 762EB94DC5F957130C5BF308781008D2 /* Build configuration list for PBXNativeTarget "Pods" */; + buildPhases = ( + 2E41E4119C3007C0FE602FC981DC4F68 /* Sources */, + 308CA5637F79668BCF7E6F999A59A50A /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 2339569B36070B99A0021EFCDEFF8594 /* PBXTargetDependency */, + 0DA6F4834F7CDB933F01A3AF8EF1F5C6 /* PBXTargetDependency */, + E2B4D845E65AC45A122792D7BF0AA724 /* PBXTargetDependency */, + ); + name = Pods; + productName = Pods; + productReference = F81BCD1B1E1DFA056533AFD9F925EA0C /* libPods.a */; productType = "com.apple.product-type.library.static"; }; /* End PBXNativeTarget section */ @@ -1626,220 +1881,253 @@ projectDirPath = ""; projectRoot = ""; targets = ( - A3CBE48EB714CEAD058125E015A71ACC /* Bolts */, - E09D69912D3DE5D63052370034A0DDDC /* Parse */, - 5D8129E3793C29AAEEF26CE316A9DDC0 /* Pods */, + 3094A346FA0BA2A7016A256FB910F479 /* Bolts */, + 6B21C5373E714B4D9498D17EE535A4D6 /* Parse */, + D219004FB928DD852E3C33624E58623C /* Pods */, + 47C800E42623009B7192B025B3DD25A1 /* pop */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ - 56CA2F5EDB6BFEBC07073EB46D41B297 /* Sources */ = { + 0EA1208F3B72AAF8A7683795C5C61072 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A9B701428585304B432F6FD45D7EB707 /* POPAnimatableProperty.mm in Sources */, + E03238690A5A21C9B8ADCC9737633061 /* POPAnimation.mm in Sources */, + 620920967F6C1FB5C501AD33EFDA1639 /* POPAnimationEvent.mm in Sources */, + 795E704A17919AB70FF6F5738289A44D /* POPAnimationExtras.mm in Sources */, + 5BFDF4E4848A83D2225D948A6D0B79B5 /* POPAnimationRuntime.mm in Sources */, + F9627C89FA11AC0378E77DF8EF1535FF /* POPAnimationTracer.mm in Sources */, + ED0BF4FE2052871A5C209B796BA9D91E /* POPAnimator.mm in Sources */, + 7D2E1DA076E379421DF5A9E74C0FD4DB /* POPBasicAnimation.mm in Sources */, + AFEBB8DD2F176DBEF3E1F0FFA6FE7AF8 /* POPCGUtils.mm in Sources */, + 32A7371F19FC366D8DF77A2FA2166918 /* POPCustomAnimation.mm in Sources */, + 8DF9960DD96F9AC25E32BFDD4A3B53B7 /* POPDecayAnimation.mm in Sources */, + 226B9015C8E393975BCF1AFEA63C1D51 /* POPGeometry.mm in Sources */, + 868BFBCD8263F71F8A14CBBDDAF5B748 /* POPLayerExtras.mm in Sources */, + F3A5D609595883FAB0550B75A0237C58 /* POPMath.mm in Sources */, + 03FF532EB8C5304EFA2E77016458C281 /* POPPropertyAnimation.mm in Sources */, + 23FC5124B2FA2C879AFE378BBB12AC3A /* POPSpringAnimation.mm in Sources */, + 4ACF656AFA1302DCF387C7A2D0F238F2 /* POPVector.mm in Sources */, + F50CFC840B1B486D290EF5656C3AB5A4 /* TransformationMatrix.cpp in Sources */, + 7DC645E712D9190C15F71B1B92844D2C /* pop-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2E41E4119C3007C0FE602FC981DC4F68 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BB4D992680D6BB33E5C968E33F7E3DE4 /* BFCancellationToken.m in Sources */, - A939FB79FC0655BC78AF111F85092FFA /* BFCancellationTokenRegistration.m in Sources */, - 2C60229B7A7ABBA3B63AE0668E0121E4 /* BFCancellationTokenSource.m in Sources */, - B5175724B04DB9C34B2F3EF3A7A51038 /* BFExecutor.m in Sources */, - 94E4771CB1CC8B24BAAB0FEDC0E8B302 /* BFTask.m in Sources */, - D94A6B308D8C6D612A4AC46C06E39089 /* BFTaskCompletionSource.m in Sources */, - 95F347CD382221D4B61BC52B4D0ECD99 /* Bolts-dummy.m in Sources */, - EF7185106F1DA78162F656D8C8DA1B7A /* Bolts.m in Sources */, + 7396B761D2B10B38F3FB6A02E916531F /* Pods-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - D8D62ABEDD102FDBB16DAEBCBAD0AD74 /* Sources */ = { + 6816814F8FA59B67B6310DF761B95483 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 6C1274F0B7A0DFA685607E820E1E00B8 /* BFTask+Private.m in Sources */, - A4699E368ED73135E902037AC6F5EC66 /* PFACL.m in Sources */, - 5E544AAE965652FE43607F5674E254CB /* PFACLState.m in Sources */, - 84856F9EB910696DDA839ABDE36CB590 /* PFAlertView.m in Sources */, - F84261406724B9DE27CCBFA304B8CF92 /* PFAnalytics.m in Sources */, - 8201F53E30AFF0BEBE04A01B7D1B022B /* PFAnalyticsController.m in Sources */, - 797F9DE6A96A3AA50F9F1905BEC4A423 /* PFAnalyticsUtilities.m in Sources */, - 868411E138047CFA6B4267A5DBF3025D /* PFAnonymousAuthenticationProvider.m in Sources */, - 605BCEBC0D9F528F51C31172502DB1FC /* PFAnonymousUtils.m in Sources */, - 9DEE6CB63547C18B4C3BE6E8F6789704 /* PFApplication.m in Sources */, - 85C00AEB98F752E4D8BB0569F8683105 /* PFAsyncTaskQueue.m in Sources */, - CF4A07928EA83BE04E74752404C0901B /* PFBase64Encoder.m in Sources */, - 757F100A35FB63BA1502DC805172F640 /* PFBaseState.m in Sources */, - 062775547F6065E5DDF2DB74C3AE9398 /* PFCachedQueryController.m in Sources */, - 00BBAAE70348655F087C8224D49C2CEE /* PFCategoryLoader.m in Sources */, - 26DEA46C479EE0A23E151385A330AC65 /* PFCloud.m in Sources */, - 393DA00CD04EFE510C10F3ACBF8F8ED6 /* PFCloudCodeController.m in Sources */, - 6B58F035A3956AFC685275E16748C528 /* PFCommandCache.m in Sources */, - 54F51EBF1E07D6541A40613CD20E132A /* PFCommandResult.m in Sources */, - A2E97F94192C6D49A7381186A58DEA71 /* PFCommandRunning.m in Sources */, - BBFD842A73C7E49063FED96A15941663 /* PFCommandRunningConstants.m in Sources */, - BB5E92B3C27899346D398F1ECC11B87D /* PFCommandURLRequestConstructor.m in Sources */, - 80927A64113E8537A162AC0A80D3C715 /* PFConfig.m in Sources */, - 733ED54DE313ABCD6329C5DA1FF971A3 /* PFConfigController.m in Sources */, - 9FF8F72E67A6BD77BD9C17C285E8B543 /* PFConstants.m in Sources */, - 9A329CA60FD01A9E79AD818D57C3E3C9 /* PFCoreManager.m in Sources */, - B9475D22177552BAEB62F160856477B8 /* PFCurrentConfigController.m in Sources */, - 658F01AC667CC6284A60A997263EF9F9 /* PFCurrentInstallationController.m in Sources */, - 2F3D46EE6FB1A34DF43A6F6F732A1960 /* PFCurrentUserController.m in Sources */, - 2B013529BE9CB2318F21BED38C17BDCF /* PFDateFormatter.m in Sources */, - DE95C6570B92EB4D071564C49B075A58 /* PFDecoder.m in Sources */, - 056A3EFE773E76873637A1F8700AC29C /* PFDefaultACLController.m in Sources */, - 31DDFDB3A975FB3247EE6194755F3BAD /* PFDevice.m in Sources */, - 0FE628F365C749D5976DFBAC5685E233 /* PFEncoder.m in Sources */, - 461897A21F97DAC9C115B89769E50E7E /* PFErrorUtilities.m in Sources */, - F111957FFF0FDC2AD0F4BCCE1BFEA4E8 /* PFEventuallyPin.m in Sources */, - 6137B532F11C53C32AB5B2BA890D9B77 /* PFEventuallyQueue.m in Sources */, - B551D2476C3AAD8B21C592D097C2292A /* PFFieldOperation.m in Sources */, - E696825C17F655DBE6CDCA4DB750A0C5 /* PFFieldOperationDecoder.m in Sources */, - A9290983F7521930A41832FF52CDB240 /* PFFile.m in Sources */, - F5BEC2186FCF846EC561939D9C1BD52F /* PFFileController.m in Sources */, - 646FA7A17A9454D7CE4582D8B417AED8 /* PFFileDataStream.m in Sources */, - C3834A5D49775B2837F1AEDC533AA3B0 /* PFFileManager.m in Sources */, - A19B0FD91C9C97E87E5B06DB621DF4FE /* PFFileStagingController.m in Sources */, - 17805260D4C57811CA869B547BBC7597 /* PFFileState.m in Sources */, - ABD52D6EB2913FF8BAC14E669ECF1F89 /* PFGeoPoint.m in Sources */, - 8F8455F10EEB3772AE588EA9E3A3F7AE /* PFHTTPURLRequestConstructor.m in Sources */, - 8984D28B38584E5C904E13A53F5855A7 /* PFHash.m in Sources */, - 0EFAD4E800EAB877281F5E75E06560CD /* PFInstallation.m in Sources */, - 7C5AF122E081CB9FC843FC60D91C6F94 /* PFInstallationConstants.m in Sources */, - B5B3760EB16FD470D5A422411C53EDB2 /* PFInstallationController.m in Sources */, - B40DCDEA8223768D03C17C146CA9D833 /* PFInstallationIdentifierStore.m in Sources */, - 26A02D6DD8C496618A71E7947D16C689 /* PFInternalUtils.m in Sources */, - 17715103907773502F61FE2CFFDCE8C2 /* PFJSONSerialization.m in Sources */, - 50D85E92F384E1967781514345A9604A /* PFKeyValueCache.m in Sources */, - 14E265D7887A59D74A47FF98562E3CBA /* PFKeychainStore.m in Sources */, - 87DB43D0F066BE9707FF38AEEEE7373D /* PFLocationManager.m in Sources */, - 232CF59D63E91DEE42D2CF6EEC1234AA /* PFLogger.m in Sources */, - A2E5498B4A910CDD676173C8F3798B39 /* PFMultiProcessFileLock.m in Sources */, - 4A8580CBD3EC7890B2BB820A585DE110 /* PFMultiProcessFileLockController.m in Sources */, - 8BB11F7A78DD3D2E36194C5BBB8B2A80 /* PFMulticastDelegate.m in Sources */, - FB6BCDEB8CB52625CB351ABCD809DE66 /* PFMutableACLState.m in Sources */, - 8F50489FB2E08C672EEE767BC05F818E /* PFMutableFileState.m in Sources */, - 682C53E0D6BB021E639D6F725EE9526A /* PFMutableObjectState.m in Sources */, - 1820EC35E058913A1A4EEEF6295F0EB4 /* PFMutablePushState.m in Sources */, - C9B15BA38AA3376525875D51D613A23F /* PFMutableQueryState.m in Sources */, - 5BB763978F4F6234E52A11E4C74E3BFB /* PFMutableRelationState.m in Sources */, - B6227EB171D030EE81F4D8D34D6C9439 /* PFMutableUserState.m in Sources */, - 90EAC88772A18DD0737B15E7CDB2AE66 /* PFNetworkActivityIndicatorManager.m in Sources */, - 83752150CB90EF43E3F8BE8AF9B919D1 /* PFObject.m in Sources */, - 80D966F69A8ABC2990F436A0B912F6DD /* PFObjectBatchController.m in Sources */, - A7126EF0D19F750C84DED66110D9E154 /* PFObjectConstants.m in Sources */, - E235199DDBB89E9541CDCB0F38C15E56 /* PFObjectController.m in Sources */, - AABDDA3F9EF9F5C4105849B0FA7D7B71 /* PFObjectEstimatedData.m in Sources */, - 72564F530CFAD381D8A7CFD1B1B47D14 /* PFObjectFileCoder.m in Sources */, - 972A00EFBCA4704A240530FE23B686E5 /* PFObjectFileCodingLogic.m in Sources */, - 295B3A4A7AE94C2C193FB8C1FDD97064 /* PFObjectFilePersistenceController.m in Sources */, - 8F4D11CE5DAF8E38B689D107E29D8558 /* PFObjectLocalIdStore.m in Sources */, - 8A962EB021D16BA9D5514AF20CD890BE /* PFObjectState.m in Sources */, - 24BCCAC7F5B550F77B83000CE3BE9294 /* PFObjectSubclassInfo.m in Sources */, - 692C55AEA4AAA1FE5B0C18929330B10D /* PFObjectSubclassingController.m in Sources */, - 86FC6A800E62791B570C07EDAD3F4000 /* PFObjectUtilities.m in Sources */, - BCF97E49683310C768AD0DB174D953A6 /* PFOfflineObjectController.m in Sources */, - BE2A298EEBFCB48E5ECAD768415B6F7B /* PFOfflineQueryController.m in Sources */, - 8919136675AD21F6E82FAFF82C3404B0 /* PFOfflineQueryLogic.m in Sources */, - 6C02A803570CB8B1883BEF1B95527EDC /* PFOfflineStore.m in Sources */, - C51B1034BD7B97F14B96174A22774353 /* PFOperationSet.m in Sources */, - 6C1004D0036BE3FD4D1ADA378E15E634 /* PFPaymentTransactionObserver.m in Sources */, - 5B901F4B0D476676820AA5F33D2CD516 /* PFPin.m in Sources */, - C462C51661AE5C5C699600115E6C3F7B /* PFPinningEventuallyQueue.m in Sources */, - B067DFF8D2A7CD44742F7AA7BFBE4DF5 /* PFPinningObjectStore.m in Sources */, - 853F3B799C49A88B08934FE9C4288F79 /* PFProduct.m in Sources */, - 4585A360814FA0879488B22436F9CA16 /* PFProductsRequestHandler.m in Sources */, - D5D35F7A6872F3CADB7CF4376955901B /* PFPropertyInfo.m in Sources */, - 4A4E9621F26A40396D4C3242080D9803 /* PFPropertyInfo_Runtime.m in Sources */, - 85BE00013EEAA089D5E198769CF5B7EF /* PFPurchase.m in Sources */, - 0CEEC78C1B5E4CD049664A581C8C874F /* PFPurchaseController.m in Sources */, - 8E72527532872043FC285D78C338ECD7 /* PFPush.m in Sources */, - 48F09476CAF8F148CF512A2D2682A596 /* PFPushChannelsController.m in Sources */, - 88617D3C42C91BF2F601AA3D1BD9E419 /* PFPushController.m in Sources */, - FFD37837303F10D59626447CA527DDC7 /* PFPushManager.m in Sources */, - EF687C393CB8A31B06A885E88BAFF74A /* PFPushState.m in Sources */, - F90710408C3BD5A0958AD6C0B779B8E6 /* PFPushUtilities.m in Sources */, - D6C69595A3E8D1C76302D93579BC2E1A /* PFQuery.m in Sources */, - 2E4FFE1F43D213B25AF30BAB74039B8A /* PFQueryController.m in Sources */, - 73B6479188603C72A53FB9FC421CA93F /* PFQueryState.m in Sources */, - E91D0BF506F05FC556E93269A6A62288 /* PFQueryUtilities.m in Sources */, - 066B02C56AFE460FE0DD07895E35A1C2 /* PFRESTAnalyticsCommand.m in Sources */, - E847CDDB808B57C6B1CB83DB1FF883F3 /* PFRESTCloudCommand.m in Sources */, - E15F9A1D17C7A7EDB1CA1019E2B9FC40 /* PFRESTCommand.m in Sources */, - BEBD3B38DAA52881F9B5BC24981B374A /* PFRESTConfigCommand.m in Sources */, - 5487F6ED1525917184D8704580A2F31F /* PFRESTFileCommand.m in Sources */, - C7D5C0CCE8FED60316E097119AB85B71 /* PFRESTObjectBatchCommand.m in Sources */, - DA1218D74E032808445B74A57F7046AF /* PFRESTObjectCommand.m in Sources */, - 56E6D6CE4ABEB58A8329737F0C5D4ED2 /* PFRESTPushCommand.m in Sources */, - C996FA0B2FD01FC4E184D94D099F80E4 /* PFRESTQueryCommand.m in Sources */, - 778CD1498542F92CB6123208989067DE /* PFRESTSessionCommand.m in Sources */, - B9B9AF304C0403A3BAAACD98C5E8AFC0 /* PFRESTUserCommand.m in Sources */, - D38ACD0F5A751B876F12D485CC1A60C3 /* PFReachability.m in Sources */, - 7EEB09BD8675386B32149D4825B60BF3 /* PFRelation.m in Sources */, - CC7E1C47F96A8CC0208D52813BCA5EFB /* PFRelationState.m in Sources */, - 3B89AB5631470E72F097A32531384ECB /* PFRole.m in Sources */, - 528CF23C0419AC21A17EC4CAD913EF63 /* PFSQLiteDatabase.m in Sources */, - 96C87B5E918E645F7D5A5D1E5FF9AB94 /* PFSQLiteDatabaseController.m in Sources */, - FBA47F7FD3DECFB1FAB1E0BF580D7E4F /* PFSQLiteDatabaseResult.m in Sources */, - F0072DAAA0B07AE29273FD1C342F4A5F /* PFSQLiteStatement.m in Sources */, - F2B43B2AA76C12DA90E65116C8FBC517 /* PFSession.m in Sources */, - AE97140D93D68F7179BC001727897BDF /* PFSessionController.m in Sources */, - 158DBF65062F50719446FBB5FE4CE6C7 /* PFSessionUtilities.m in Sources */, - 069B84DC158EFE142B00669BD377F176 /* PFTaskQueue.m in Sources */, - 4470541EACA382A9DEC7F752A7BDB999 /* PFThreadsafety.m in Sources */, - 62191196B306C291FCB4A144AF5F3651 /* PFURLConstructor.m in Sources */, - 1C5D31895EC2B8A0CDB19F60381E4C09 /* PFURLSession.m in Sources */, - 7F12D30EC7D5E4D745FFAED681153D16 /* PFURLSessionCommandRunner.m in Sources */, - 0A82F1C9FF3BF928D142AC862693E639 /* PFURLSessionDataTaskDelegate.m in Sources */, - 19553ACB32B73C7E82C7305C0B993F21 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */, - 08FCFC00D0259854FA9A7F407CC0D87D /* PFURLSessionJSONDataTaskDelegate.m in Sources */, - 65C20AD171485E53B52DB6DD49B0677C /* PFURLSessionUploadTaskDelegate.m in Sources */, - 27C1E412046564AD607892E33F6C5FDD /* PFUser.m in Sources */, - 96A1FACC2037256FAE41C1595CC5D5CB /* PFUserAuthenticationController.m in Sources */, - C8B565A5FAE25F356E3167DE8E552888 /* PFUserConstants.m in Sources */, - CDBC70BDA28EE44ACC5E185B96CD173E /* PFUserController.m in Sources */, - 470023A9785141D46651C887666B9173 /* PFUserFileCodingLogic.m in Sources */, - 135DE9CF756235E0E52861599AAEA09B /* PFUserState.m in Sources */, - B11EC1B10A6BFC5C0589BA1D520B731D /* PFWeakValue.m in Sources */, - BF790169F293998D1D7E9C5A4772286A /* Parse-dummy.m in Sources */, - A95C861682E0DF65260AD321E8EA8F50 /* Parse.m in Sources */, - D3E77F4136625007DED4F9DA91C4A6C6 /* ParseManager.m in Sources */, - 29486ED65C6DCE12A57B411EA98FF1B2 /* ParseModule.m in Sources */, + 925B22ED8DEB4DA9ACC946D2F9057997 /* BFCancellationToken.m in Sources */, + 7B00A9814CF626F0D53212A4918637CB /* BFCancellationTokenRegistration.m in Sources */, + C5750E2AEE5F999C2FEA63E5A6071552 /* BFCancellationTokenSource.m in Sources */, + EFA2B49A8A6A4CC569BABF1A704B24CD /* BFExecutor.m in Sources */, + 7D39BBF1D1FD51363802C929BB8C6515 /* BFTask.m in Sources */, + 073E677444C5A0E6864B45279F172EA7 /* BFTaskCompletionSource.m in Sources */, + 146C2DC0D3347B3616475EC3FACC440A /* Bolts-dummy.m in Sources */, + C06E01391A45E76121806BFE18C36C40 /* Bolts.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - EAC097187F04D113617E813C782E0137 /* Sources */ = { + 84F8FDF2464BD2599AA62180586AF817 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E0B0A3870E5B217EB20F7CC49F37561C /* Pods-dummy.m in Sources */, + F16F2BD2412E71A0F0800BA0143A10C8 /* BFTask+Private.m in Sources */, + 5968EC5B21D336B66F3A27966F5F9D1A /* PFACL.m in Sources */, + 9B57BAF0B1A27BAEB40E6E17CA6355AB /* PFACLState.m in Sources */, + B31A69D71BE4A4F9C56CE52F2597B0B4 /* PFAlertView.m in Sources */, + E23CC6BD6AE207AD1C89F018982D1BEB /* PFAnalytics.m in Sources */, + 0B6ADB9B0F9070AA026BD69D2DBB3897 /* PFAnalyticsController.m in Sources */, + BEE7655DFBBC1AB9D4F484DDD2BC7347 /* PFAnalyticsUtilities.m in Sources */, + 439341734A48F1416D32E028917737A8 /* PFAnonymousAuthenticationProvider.m in Sources */, + 5D1AA90E597CD5C17D453D1E3C39BFD5 /* PFAnonymousUtils.m in Sources */, + 1833BA11A3F8B321D710AAA35A810D7D /* PFApplication.m in Sources */, + 9EFED924B760485386CCF5EB3BA87A63 /* PFAsyncTaskQueue.m in Sources */, + 6A1C6A825690B1907AE9796BE195E449 /* PFBase64Encoder.m in Sources */, + 77E89B2E0FF110D13685EF42B8AFFDDD /* PFBaseState.m in Sources */, + 523D293ECDD5E0641F0FC2A7F3520325 /* PFCachedQueryController.m in Sources */, + 7B3342EC54DBD89E80E6F767C016E0CA /* PFCategoryLoader.m in Sources */, + 44F7262AB6C8008A410A14E65A3838E8 /* PFCloud.m in Sources */, + 514CBE462E226552AE0071539F471C25 /* PFCloudCodeController.m in Sources */, + AB7CCA495BB2E31A67FBD113F45DF3A3 /* PFCommandCache.m in Sources */, + 50421F3920DB209CE4F4DE80A20C4FE1 /* PFCommandResult.m in Sources */, + 7E098727FB711EB6459D6FED443F53D5 /* PFCommandRunning.m in Sources */, + 3EE64147BDE55FEE67FF5E18995948CA /* PFCommandRunningConstants.m in Sources */, + 5028171FC9AF8B50968A95E11969D57E /* PFCommandURLRequestConstructor.m in Sources */, + 4603A217FF729DCD6DEA7AFB1FAB60E2 /* PFConfig.m in Sources */, + 63743E46FD2F8750E432BB83F546C054 /* PFConfigController.m in Sources */, + 3D83AE96FEF1D9DC83B211099BADCD42 /* PFConstants.m in Sources */, + 6D04FB4F8DD219426617F3AF0D840358 /* PFCoreManager.m in Sources */, + 3B2D709EB0DA90F1A0A645FDA783B79E /* PFCurrentConfigController.m in Sources */, + 0F6B98F865122CB525B9C6C262681217 /* PFCurrentInstallationController.m in Sources */, + 103A9E462566D7CB14E191DFE9D1C475 /* PFCurrentUserController.m in Sources */, + BB960D63E0B0D184BA67F74168A5038B /* PFDateFormatter.m in Sources */, + B488F531B26E7BE8EB16185D9B3D33CB /* PFDecoder.m in Sources */, + 792E4D8A30E2483D3D4E4154EEDA8636 /* PFDefaultACLController.m in Sources */, + 5390B6329EF5D9F0B82C429D8B1EA584 /* PFDevice.m in Sources */, + 1A77D51093B72D6AA09D9EB6C3C74F7F /* PFEncoder.m in Sources */, + 015FCB9B8DD7DC9A0488893D1B4E0015 /* PFErrorUtilities.m in Sources */, + 2317FF254CCFEF175822B7FD4CEDF7E1 /* PFEventuallyPin.m in Sources */, + A3534AED1EA0F6B4AF89B407FF2CCADE /* PFEventuallyQueue.m in Sources */, + 8E33299A86FF84E02098DA642AD6A10E /* PFFieldOperation.m in Sources */, + A23412D088BB709BA230993F0381C88C /* PFFieldOperationDecoder.m in Sources */, + 286C67C403A641645B5702A201BE0D77 /* PFFile.m in Sources */, + C84077A6ADD4188E00247A89489A5E5E /* PFFileController.m in Sources */, + 706A7F05867293F78C927FDF9C10E745 /* PFFileDataStream.m in Sources */, + ABA34CFCB348BB50E6661E3CCF434B1A /* PFFileManager.m in Sources */, + 0ADB28D8BBCF730DB3712BA235178983 /* PFFileStagingController.m in Sources */, + E7E6855E0A73652B303B572355D3AAEE /* PFFileState.m in Sources */, + F0C51D05571753A00CC8F350E7A39DDD /* PFGeoPoint.m in Sources */, + 01BEF3D787B13B3B2B56DDBCA08A0FAB /* PFHTTPURLRequestConstructor.m in Sources */, + 5E09B9BE3904EEA4708C2B696573E6F7 /* PFHash.m in Sources */, + B0BEB23FC1059482B01E0D220D6DA2B5 /* PFInstallation.m in Sources */, + F4E711DBBE33C63D91C5EB82D7559094 /* PFInstallationConstants.m in Sources */, + 6D56120FE9DC80605D0B11E028828E9A /* PFInstallationController.m in Sources */, + A7E2FFC1434BBFE824CE9EE09E6E2E1A /* PFInstallationIdentifierStore.m in Sources */, + ABB935DE5A114F1A4B541F17F2FA03A9 /* PFInternalUtils.m in Sources */, + 4C16A85DDD642113F35D0FBE466CC05D /* PFJSONSerialization.m in Sources */, + 7E9DA08882BFE2697F1C0E493DB63AC3 /* PFKeyValueCache.m in Sources */, + 5A1596920E1BBB2807BC094A7CFE4F6F /* PFKeychainStore.m in Sources */, + ECB81FD33F70B06684E4A50AB3F75976 /* PFLocationManager.m in Sources */, + E0822053495861CD160B22D518AA2282 /* PFLogger.m in Sources */, + 0BFCC38A10528D04D36495CB3A6255AB /* PFMultiProcessFileLock.m in Sources */, + 2A069E26EA47349AD78257CF3FD49650 /* PFMultiProcessFileLockController.m in Sources */, + 108491A1ADCD0F822D90DF4352AF93CF /* PFMulticastDelegate.m in Sources */, + 04095EC3D989BCA8B01629786D94BA53 /* PFMutableACLState.m in Sources */, + 7A19C849063F55F3F2897A6FA6040B00 /* PFMutableFileState.m in Sources */, + FACAABA588E76C9C2DD2AB634B0E9069 /* PFMutableObjectState.m in Sources */, + 88664732055B4AEB8258A9F776478825 /* PFMutablePushState.m in Sources */, + F97EA210A1C7E07EE9CB9501FCC444F8 /* PFMutableQueryState.m in Sources */, + 9D2280F3879F335F53726BAF1720A4F4 /* PFMutableRelationState.m in Sources */, + 29482C3313003A053F10A25BE5F80032 /* PFMutableUserState.m in Sources */, + DB11B9F73D9B0D3F02327B6CDE23A9AF /* PFNetworkActivityIndicatorManager.m in Sources */, + E896679BD643C694FAC4B7C1A5B43871 /* PFObject.m in Sources */, + 3DF9C26FB433C59C8D512FCE0C89BDF4 /* PFObjectBatchController.m in Sources */, + 0FAC72D8A00C1375FA0B2B71DA84E611 /* PFObjectConstants.m in Sources */, + 79D6635C152CD06216FD5C6439F3CFE2 /* PFObjectController.m in Sources */, + 8EF3091ED56E21658415F17799557ED4 /* PFObjectEstimatedData.m in Sources */, + 455345B64E2D163C4C7F33A5177BB9E2 /* PFObjectFileCoder.m in Sources */, + 4159DD3856C1195D30F92647848F82C2 /* PFObjectFileCodingLogic.m in Sources */, + 0B364D53F85A0FE8D3BF8829A280D22B /* PFObjectFilePersistenceController.m in Sources */, + 5878E73A35257C993AA48202DC4AEDEA /* PFObjectLocalIdStore.m in Sources */, + 3DEA9BC8FEFB0F3EDA1021F97034E551 /* PFObjectState.m in Sources */, + EBD4BC102DFB46F91C3141667D6C361D /* PFObjectSubclassInfo.m in Sources */, + CF5B8E8AF1255B0F020DD1C5143FCE22 /* PFObjectSubclassingController.m in Sources */, + 143BEC7D21D8844811A803F54131A9F0 /* PFObjectUtilities.m in Sources */, + 09E322410AA4B979A689B8FBC73E0F83 /* PFOfflineObjectController.m in Sources */, + 4BFF96298060C7DCE7D155E9DF5AE15F /* PFOfflineQueryController.m in Sources */, + 7BB08B1B05AD918C30AE988E95A09D50 /* PFOfflineQueryLogic.m in Sources */, + 88379476F82457BD1128F25055903097 /* PFOfflineStore.m in Sources */, + A1BA70FD107E98C3493B500B423C42E8 /* PFOperationSet.m in Sources */, + 73BDD98109DBD5F8CB2BC86755DA6963 /* PFPaymentTransactionObserver.m in Sources */, + 005695268BED154E9042211E12310C74 /* PFPin.m in Sources */, + F0B30B2AC9671AA2F42D8919B8D3C642 /* PFPinningEventuallyQueue.m in Sources */, + FDFF36E4566B4F31B50CC82D7987A738 /* PFPinningObjectStore.m in Sources */, + D7D4F9F182AC20F7C3BBA3592DA8404E /* PFProduct.m in Sources */, + E991C7550D546C3319735688EC5D0369 /* PFProductsRequestHandler.m in Sources */, + 14A0D60A7ABCCA3408ED26E3D0E0A819 /* PFPropertyInfo.m in Sources */, + C6596728704CF2E0D363D6F21E5C2F2F /* PFPropertyInfo_Runtime.m in Sources */, + DD9352278D2CECD93F57DB53EC97D291 /* PFPurchase.m in Sources */, + 5FAB5E76AB21A0CEEB8A3792F4905E01 /* PFPurchaseController.m in Sources */, + FDCA9B7C897364F5E3986CE205C27A92 /* PFPush.m in Sources */, + F13EE6B0A90AA4D1F41B773D316DC97F /* PFPushChannelsController.m in Sources */, + DDFA75763A11603500811925FE92E6BF /* PFPushController.m in Sources */, + 3E39A5289A0F29B5D83FF16C7428D27E /* PFPushManager.m in Sources */, + DA17F39593B4824BBC5926AD390390C2 /* PFPushState.m in Sources */, + EF97F68ADAA1FA736F080BC613BF7252 /* PFPushUtilities.m in Sources */, + 5842D3A6FC8E81680A5B79C48D17FC79 /* PFQuery.m in Sources */, + DD102CB743C2258E153D8159D5C0EC14 /* PFQueryController.m in Sources */, + CF6E9D57E0097D77F7D794534CA879BE /* PFQueryState.m in Sources */, + 289943F1E552820BA0858569400B2F7D /* PFQueryUtilities.m in Sources */, + 1690AC90F202B5DC511EA9C2933CB97D /* PFRESTAnalyticsCommand.m in Sources */, + B4380967482F62131B85509257CCCB2B /* PFRESTCloudCommand.m in Sources */, + 20254097B4CBEAC40E87858741364800 /* PFRESTCommand.m in Sources */, + 5CEE55D83FAA669CBB68FD3C8DD4AC6A /* PFRESTConfigCommand.m in Sources */, + 4AAC7855E322D7DAE7A0CA82444190E9 /* PFRESTFileCommand.m in Sources */, + C5FED0ECFCB113A0AD2C656D0BB62934 /* PFRESTObjectBatchCommand.m in Sources */, + D64AC9CDC6984455A31AF0E9AAFBFC10 /* PFRESTObjectCommand.m in Sources */, + EA78E9FEB71E4A999EE8B4FF325B4F8C /* PFRESTPushCommand.m in Sources */, + C5329C8CE1773B4034441DC996B07093 /* PFRESTQueryCommand.m in Sources */, + AF07EB1921C3ACFD1186E3827CAA5A38 /* PFRESTSessionCommand.m in Sources */, + 97B018ECAB99E02838108858A9C5D9ED /* PFRESTUserCommand.m in Sources */, + 5C383F280EBCA5293E7102391980CAFB /* PFReachability.m in Sources */, + 1D3EA938DC7748DF6184BCEC67838050 /* PFRelation.m in Sources */, + 7AF60B83195278F6A42385CCE9F4CB35 /* PFRelationState.m in Sources */, + 784BB509549AB4E658F95135964F8BAA /* PFRole.m in Sources */, + 677760404A1F4FC247880760F1EEC082 /* PFSQLiteDatabase.m in Sources */, + 32D4B780316F25D5B0849535BDF2CCB8 /* PFSQLiteDatabaseController.m in Sources */, + 1303B59C5400037F832BD657D7E0DB7B /* PFSQLiteDatabaseResult.m in Sources */, + A28BF51BFC8CE83AA10CA0882B57AD94 /* PFSQLiteStatement.m in Sources */, + 2A03349907D6F274E5E0BC4C4CE2B9D4 /* PFSession.m in Sources */, + 348C1F161E5A01BD89B9C748DB57C4D4 /* PFSessionController.m in Sources */, + 2B65D042FB690E283070BAB2D38C6AF1 /* PFSessionUtilities.m in Sources */, + 795A66B7F6728153ED7333F9304F9A7A /* PFTaskQueue.m in Sources */, + 47A6AEE5AABB891BEF9549399D9D73E7 /* PFThreadsafety.m in Sources */, + DA5A140E5FAF805F07B32A67DD6AF45F /* PFURLConstructor.m in Sources */, + FFA7BE1A5108294991B631273306B337 /* PFURLSession.m in Sources */, + F41FB512F52C7C721107DFC24193C18D /* PFURLSessionCommandRunner.m in Sources */, + F26B4E9439D05674BDC3EC6D47419E65 /* PFURLSessionDataTaskDelegate.m in Sources */, + 14F7FFC0E861870C067DF49031119473 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */, + EEBDC1EBFFAA9C81CBE8579A76CC0A68 /* PFURLSessionJSONDataTaskDelegate.m in Sources */, + 4BCF78FFDDD8496F50F1A118A174798A /* PFURLSessionUploadTaskDelegate.m in Sources */, + 776745BC8D80FF6CC924AB8DE9FF048C /* PFUser.m in Sources */, + 14B42C960D733C3D8791124A3284C393 /* PFUserAuthenticationController.m in Sources */, + BB1D07345C56DB2E88AF60CBDAF05EAA /* PFUserConstants.m in Sources */, + 2F0882CC2C95FBDFAAA2C4B2CC5DC28A /* PFUserController.m in Sources */, + 33364FE5E736249A1DE57AFF31737CD7 /* PFUserFileCodingLogic.m in Sources */, + 51690C672CFECB44023EC60A02654A47 /* PFUserState.m in Sources */, + E0144A342BDA68B208D02A9FA946E3F3 /* PFWeakValue.m in Sources */, + AEC0AABC2226F08C2EC024E94093A69E /* Parse-dummy.m in Sources */, + 0447D077E03CCB121A73F61FECE5D6BC /* Parse.m in Sources */, + C3C07815E5AFE68241C34F5DB2196C34 /* ParseManager.m in Sources */, + 2F1B5C4CE2C8923ECCB376D10D914260 /* ParseModule.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 5CCA733CC176F0BE5FB543967C119C6F /* PBXTargetDependency */ = { + 0DA6F4834F7CDB933F01A3AF8EF1F5C6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Bolts; - target = A3CBE48EB714CEAD058125E015A71ACC /* Bolts */; - targetProxy = 6AA41461EE8D58D339E66102A9A4877A /* PBXContainerItemProxy */; + name = Parse; + target = 6B21C5373E714B4D9498D17EE535A4D6 /* Parse */; + targetProxy = 7B95C3C8CBBED75AFC0D447738B85785 /* PBXContainerItemProxy */; }; - 9A0617D3CF59620FEE731CA3D261D8F4 /* PBXTargetDependency */ = { + 2339569B36070B99A0021EFCDEFF8594 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Parse; - target = E09D69912D3DE5D63052370034A0DDDC /* Parse */; - targetProxy = 4896CFC37B685DBA38EF0D354BC28D0F /* PBXContainerItemProxy */; + name = Bolts; + target = 3094A346FA0BA2A7016A256FB910F479 /* Bolts */; + targetProxy = 38312B8FB651E2B23B6C5E889DC2C345 /* PBXContainerItemProxy */; }; - 9BBEC04506A9D49A924F2CC384CF2574 /* PBXTargetDependency */ = { + 2F8CA3FF9C1472ABEE78882ACBE29841 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Bolts; - target = A3CBE48EB714CEAD058125E015A71ACC /* Bolts */; - targetProxy = 3F90957483AE8162292532A1129FE0C4 /* PBXContainerItemProxy */; + target = 3094A346FA0BA2A7016A256FB910F479 /* Bolts */; + targetProxy = 6919D792BE090C23FDDA7F3F41ED1D7D /* PBXContainerItemProxy */; + }; + E2B4D845E65AC45A122792D7BF0AA724 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = pop; + target = 47C800E42623009B7192B025B3DD25A1 /* pop */; + targetProxy = 43DAF625E1C76FEDADD2A5A410AC7016 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 38F7352F7BDFE263D4277A6E4C799686 /* Debug */ = { + 14FE85D82AC1EF857A39F3012343AF27 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D5E25950A895A52CC19D857BBECD78E4 /* Pods.debug.xcconfig */; + baseConfigurationReference = 3D02C6C7422645AB5529C759A1A86353 /* Pods.debug.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; IPHONEOS_DEPLOYMENT_TARGET = 9.0; @@ -1853,6 +2141,22 @@ }; name = Debug; }; + 4ED0C8ED84E3F1212592CA0ED756796B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CE1700FF476E3DF743FC31E536BEBEC6 /* Parse-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; 5CE5176205D06FF3FFE3DDDA9291E44B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1892,22 +2196,38 @@ }; name = Debug; }; - 67312D78DA4070D74631CF1E37DE44BB /* Release */ = { + 60DE5500BF969A0D17A617C2E4597711 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 385DD2E0B95AAE1DDB352C5E48139C02 /* Pods.release.xcconfig */; + baseConfigurationReference = 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/pop/pop-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; name = Release; }; + 6D957BA9E9381347A91DCCDD642DF033 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D8453063C22C0EAA2AAC6F28CFBB7AC8 /* Bolts-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; 74857149DC1E0D599B8A01A78349A926 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1942,57 +2262,57 @@ }; name = Release; }; - 86B55C56F8C8C7089C0D0CC3FDF62772 /* Release */ = { + 78016348B8879A8D6C53867B03C47F13 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3E781400D2DB9020CCA193E74F459F26 /* Parse-Private.xcconfig */; + baseConfigurationReference = 7EA341866E76C794E960BB9753925294 /* Pods.release.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; name = Release; }; - ABE14FB6B4C0A63CECE3D5D678182387 /* Debug */ = { + AAF09E9E3CBBFF2A37E881D51D1C4D37 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2613CC942BB5B821A1369B8E68019FDA /* Bolts-Private.xcconfig */; + baseConfigurationReference = D8453063C22C0EAA2AAC6F28CFBB7AC8 /* Bolts-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = YES; + MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; - name = Debug; + name = Release; }; - DE2E570838F39BB6CC125F4EA7A42CE2 /* Release */ = { + E69EFF8AAAC9CEFE6A33102476292CA8 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2613CC942BB5B821A1369B8E68019FDA /* Bolts-Private.xcconfig */; + baseConfigurationReference = 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/pop/pop-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; + MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; - name = Release; + name = Debug; }; - F9DAAC470716FF670D71735FEB598947 /* Debug */ = { + F67A8FD39FAC25DF12C6C3ED1B6BE172 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3E781400D2DB9020CCA193E74F459F26 /* Parse-Private.xcconfig */; + baseConfigurationReference = CE1700FF476E3DF743FC31E536BEBEC6 /* Parse-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; @@ -2018,29 +2338,38 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 3853084F728ADFDA70933757DC5D4264 /* Build configuration list for PBXNativeTarget "Pods" */ = { + 59EACD0D7A24F90BA574CE0F659DE30D /* Build configuration list for PBXNativeTarget "Bolts" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6D957BA9E9381347A91DCCDD642DF033 /* Debug */, + AAF09E9E3CBBFF2A37E881D51D1C4D37 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 62C75DE36F62F6DD244D1001268287F5 /* Build configuration list for PBXNativeTarget "pop" */ = { isa = XCConfigurationList; buildConfigurations = ( - 38F7352F7BDFE263D4277A6E4C799686 /* Debug */, - 67312D78DA4070D74631CF1E37DE44BB /* Release */, + E69EFF8AAAC9CEFE6A33102476292CA8 /* Debug */, + 60DE5500BF969A0D17A617C2E4597711 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 7A42B86C068DDDC1E02C2F87B7A8883D /* Build configuration list for PBXNativeTarget "Bolts" */ = { + 6E3F830824B8ABA99F201389718A5F33 /* Build configuration list for PBXNativeTarget "Parse" */ = { isa = XCConfigurationList; buildConfigurations = ( - ABE14FB6B4C0A63CECE3D5D678182387 /* Debug */, - DE2E570838F39BB6CC125F4EA7A42CE2 /* Release */, + F67A8FD39FAC25DF12C6C3ED1B6BE172 /* Debug */, + 4ED0C8ED84E3F1212592CA0ED756796B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C67CD42F714A49E139F5EF87E19C2AD6 /* Build configuration list for PBXNativeTarget "Parse" */ = { + 762EB94DC5F957130C5BF308781008D2 /* Build configuration list for PBXNativeTarget "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - F9DAAC470716FF670D71735FEB598947 /* Debug */, - 86B55C56F8C8C7089C0D0CC3FDF62772 /* Release */, + 14FE85D82AC1EF857A39F3012343AF27 /* Debug */, + 78016348B8879A8D6C53867B03C47F13 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig b/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig index d7e29c7..2276e40 100644 --- a/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig +++ b/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig @@ -1,5 +1,5 @@ #include "Bolts.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Bolts" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/Parse" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Bolts" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig b/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig index bcc0a17..9f1615f 100644 --- a/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig +++ b/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig @@ -1,6 +1,6 @@ #include "Parse.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Parse" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/Parse" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Parse" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" OTHER_LDFLAGS = ${PARSE_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown index f99c4d1..39b8b08 100644 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown @@ -37,4 +37,38 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ## Parse See https://www.parse.com/about/terms + +## pop + +BSD License + +For Pop software + +Copyright (c) 2014, Facebook, Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name Facebook nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + Generated by CocoaPods - http://cocoapods.org diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist index b0bde37..45d32b9 100644 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist @@ -57,6 +57,44 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Type PSGroupSpecifier + + FooterText + BSD License + +For Pop software + +Copyright (c) 2014, Facebook, Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name Facebook nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + Title + pop + Type + PSGroupSpecifier + FooterText Generated by CocoaPods - http://cocoapods.org diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig b/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig index 387e02c..e6b9457 100644 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig @@ -1,5 +1,7 @@ +CLANG_CXX_LANGUAGE_STANDARD = c++11 +CLANG_CXX_LIBRARY = libc++ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/Parse" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/Parse" -OTHER_LDFLAGS = $(inherited) -ObjC -l"Bolts" -l"Parse" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -weak_framework "Accounts" -weak_framework "Social" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/Parse" -isystem "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"Bolts" -l"Parse" -l"c++" -l"pop" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -weak_framework "Accounts" -weak_framework "Social" PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig b/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig index 387e02c..e6b9457 100644 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig @@ -1,5 +1,7 @@ +CLANG_CXX_LANGUAGE_STANDARD = c++11 +CLANG_CXX_LIBRARY = libc++ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/Parse" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/Parse" -OTHER_LDFLAGS = $(inherited) -ObjC -l"Bolts" -l"Parse" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -weak_framework "Accounts" -weak_framework "Social" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/Parse" -isystem "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"Bolts" -l"Parse" -l"c++" -l"pop" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -weak_framework "Accounts" -weak_framework "Social" PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file From ed4f9fb44b9d9a217668da85a38b7cf6bdbd3ef5 Mon Sep 17 00:00:00 2001 From: Zoufishan Mehdi Date: Sun, 11 Oct 2015 23:30:41 -0400 Subject: [PATCH 05/44] sign up deets added --- .../BreakingBad/Base.lproj/Main.storyboard | 77 +++++++++++++++++-- .../BreakingBad/CustomModalViewController.h | 4 + .../BreakingBad/CustomModalViewController.m | 38 ++++++++- 3 files changed, 113 insertions(+), 6 deletions(-) diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index ecccf3d..fcb612d 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -237,23 +237,90 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BreakingBad/BreakingBad/CustomModalViewController.h b/BreakingBad/BreakingBad/CustomModalViewController.h index 9c2c28a..b95b697 100644 --- a/BreakingBad/BreakingBad/CustomModalViewController.h +++ b/BreakingBad/BreakingBad/CustomModalViewController.h @@ -9,5 +9,9 @@ #import @interface CustomModalViewController : UIViewController +@property (weak, nonatomic) IBOutlet UITextField *emailTextField; +@property (weak, nonatomic) IBOutlet UITextField *usernameTextField; +@property (weak, nonatomic) IBOutlet UITextField *passwordTextField; +@property (weak, nonatomic) IBOutlet UITextField *confirmPasswordTextField; @end diff --git a/BreakingBad/BreakingBad/CustomModalViewController.m b/BreakingBad/BreakingBad/CustomModalViewController.m index a83561a..32d13ba 100644 --- a/BreakingBad/BreakingBad/CustomModalViewController.m +++ b/BreakingBad/BreakingBad/CustomModalViewController.m @@ -7,12 +7,48 @@ // #import "CustomModalViewController.h" +#import @implementation CustomModalViewController + - (IBAction)didClickClose:(id)sender { - [self dismissViewControllerAnimated:YES completion:nil]; + if ([self.passwordTextField isEqual:self.confirmPasswordTextField]) { + PFUser *thisUser = [PFUser user]; + thisUser.email = self.emailTextField.text; + thisUser.username = self.usernameTextField.text; + thisUser.password = self.passwordTextField.text; + + [thisUser signUpInBackgroundWithBlock:^(BOOL succeeded, NSError * _Nullable error) { + //add segue here + }]; + + } else { + + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"The two password you entered do not match" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; + + [alert show]; + + } + + [self dismissViewControllerAnimated:YES completion:nil]; + } +-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { + + [self.emailTextField resignFirstResponder]; + [self.usernameTextField resignFirstResponder]; + [self.passwordTextField resignFirstResponder]; + [self.confirmPasswordTextField resignFirstResponder]; + + //[self.emailTextField endEditing:YES]; + // [self.usernameTextField endEditing:YES]; + // [self.passwordTextField endEditing:YES]; + // [self.confirmPasswordTextField endEditing:YES]; + +} + + @end From 4e2f8df05285c2de117b4b965787e6725e35206c Mon Sep 17 00:00:00 2001 From: Mesfin Date: Sun, 11 Oct 2015 23:34:29 -0400 Subject: [PATCH 06/44] Added Pop podfile --- .../BreakingBad.xcodeproj/project.pbxproj | 13 +- .../BreakingBad/Base.lproj/Main.storyboard | 4 +- BreakingBad/BreakingBad/ViewController.m | 4 +- .../Headers/Private/pop/FloatConversion.h | 1 + BreakingBad/Pods/Headers/Private/pop/POP.h | 1 + .../Pods/Headers/Private/pop/POPAction.h | 1 + .../Private/pop/POPAnimatableProperty.h | 1 + .../Pods/Headers/Private/pop/POPAnimation.h | 1 + .../Headers/Private/pop/POPAnimationEvent.h | 1 + .../Private/pop/POPAnimationEventInternal.h | 1 + .../Headers/Private/pop/POPAnimationExtras.h | 1 + .../Private/pop/POPAnimationInternal.h | 1 + .../Headers/Private/pop/POPAnimationPrivate.h | 1 + .../Headers/Private/pop/POPAnimationRuntime.h | 1 + .../Headers/Private/pop/POPAnimationTracer.h | 1 + .../Private/pop/POPAnimationTracerInternal.h | 1 + .../Pods/Headers/Private/pop/POPAnimator.h | 1 + .../Headers/Private/pop/POPAnimatorPrivate.h | 1 + .../Headers/Private/pop/POPBasicAnimation.h | 1 + .../Private/pop/POPBasicAnimationInternal.h | 1 + .../Pods/Headers/Private/pop/POPCGUtils.h | 1 + .../Headers/Private/pop/POPCustomAnimation.h | 1 + .../Headers/Private/pop/POPDecayAnimation.h | 1 + .../Private/pop/POPDecayAnimationInternal.h | 1 + .../Pods/Headers/Private/pop/POPDefines.h | 1 + .../Pods/Headers/Private/pop/POPGeometry.h | 1 + .../Pods/Headers/Private/pop/POPLayerExtras.h | 1 + .../Pods/Headers/Private/pop/POPMath.h | 1 + .../Private/pop/POPPropertyAnimation.h | 1 + .../pop/POPPropertyAnimationInternal.h | 1 + .../Headers/Private/pop/POPSpringAnimation.h | 1 + .../Private/pop/POPSpringAnimationInternal.h | 1 + .../Headers/Private/pop/POPSpringSolver.h | 1 + .../Pods/Headers/Private/pop/POPVector.h | 1 + .../Private/pop/TransformationMatrix.h | 1 + .../Pods/Headers/Private/pop/UnitBezier.h | 1 + BreakingBad/Pods/Headers/Public/pop/POP.h | 1 + .../Public/pop/POPAnimatableProperty.h | 1 + .../Pods/Headers/Public/pop/POPAnimation.h | 1 + .../Headers/Public/pop/POPAnimationEvent.h | 1 + .../Headers/Public/pop/POPAnimationExtras.h | 1 + .../Headers/Public/pop/POPAnimationTracer.h | 1 + .../Pods/Headers/Public/pop/POPAnimator.h | 1 + .../Headers/Public/pop/POPBasicAnimation.h | 1 + .../Headers/Public/pop/POPCustomAnimation.h | 1 + .../Headers/Public/pop/POPDecayAnimation.h | 1 + .../Pods/Headers/Public/pop/POPDefines.h | 1 + .../Pods/Headers/Public/pop/POPGeometry.h | 1 + .../Pods/Headers/Public/pop/POPLayerExtras.h | 1 + .../Headers/Public/pop/POPPropertyAnimation.h | 1 + .../Headers/Public/pop/POPSpringAnimation.h | 1 + .../Pods/Pods.xcodeproj/project.pbxproj | 3216 ++++++++--------- .../pop/pop-Private.xcconfig | 8 + .../Pods/Target Support Files/pop/pop-dummy.m | 5 + .../Target Support Files/pop/pop-prefix.pch | 4 + .../Target Support Files/pop/pop.xcconfig | 3 + BreakingBad/Pods/pop/LICENSE | 30 + BreakingBad/Pods/pop/README.md | 203 ++ BreakingBad/Pods/pop/pop/POP.h | 29 + BreakingBad/Pods/pop/pop/POPAction.h | 67 + .../Pods/pop/pop/POPAnimatableProperty.h | 249 ++ .../Pods/pop/pop/POPAnimatableProperty.mm | 1282 +++++++ BreakingBad/Pods/pop/pop/POPAnimation.h | 188 + BreakingBad/Pods/pop/pop/POPAnimation.mm | 303 ++ BreakingBad/Pods/pop/pop/POPAnimationEvent.h | 69 + BreakingBad/Pods/pop/pop/POPAnimationEvent.mm | 108 + .../Pods/pop/pop/POPAnimationEventInternal.h | 41 + BreakingBad/Pods/pop/pop/POPAnimationExtras.h | 43 + .../Pods/pop/pop/POPAnimationExtras.mm | 117 + .../Pods/pop/pop/POPAnimationInternal.h | 505 +++ .../Pods/pop/pop/POPAnimationPrivate.h | 16 + .../Pods/pop/pop/POPAnimationRuntime.h | 103 + .../Pods/pop/pop/POPAnimationRuntime.mm | 329 ++ BreakingBad/Pods/pop/pop/POPAnimationTracer.h | 60 + .../Pods/pop/pop/POPAnimationTracer.mm | 191 + .../Pods/pop/pop/POPAnimationTracerInternal.h | 96 + BreakingBad/Pods/pop/pop/POPAnimator.h | 47 + BreakingBad/Pods/pop/pop/POPAnimator.mm | 806 +++++ BreakingBad/Pods/pop/pop/POPAnimatorPrivate.h | 68 + BreakingBad/Pods/pop/pop/POPBasicAnimation.h | 71 + BreakingBad/Pods/pop/pop/POPBasicAnimation.mm | 106 + .../Pods/pop/pop/POPBasicAnimationInternal.h | 97 + BreakingBad/Pods/pop/pop/POPCGUtils.h | 152 + BreakingBad/Pods/pop/pop/POPCGUtils.mm | 150 + BreakingBad/Pods/pop/pop/POPCustomAnimation.h | 46 + .../Pods/pop/pop/POPCustomAnimation.mm | 75 + BreakingBad/Pods/pop/pop/POPDecayAnimation.h | 66 + BreakingBad/Pods/pop/pop/POPDecayAnimation.mm | 203 ++ .../Pods/pop/pop/POPDecayAnimationInternal.h | 127 + BreakingBad/Pods/pop/pop/POPDefines.h | 37 + BreakingBad/Pods/pop/pop/POPGeometry.h | 73 + BreakingBad/Pods/pop/pop/POPGeometry.mm | 94 + BreakingBad/Pods/pop/pop/POPLayerExtras.h | 196 + BreakingBad/Pods/pop/pop/POPLayerExtras.mm | 288 ++ BreakingBad/Pods/pop/pop/POPMath.h | 56 + BreakingBad/Pods/pop/pop/POPMath.mm | 83 + .../Pods/pop/pop/POPPropertyAnimation.h | 65 + .../Pods/pop/pop/POPPropertyAnimation.mm | 125 + .../pop/pop/POPPropertyAnimationInternal.h | 359 ++ BreakingBad/Pods/pop/pop/POPSpringAnimation.h | 67 + .../Pods/pop/pop/POPSpringAnimation.mm | 192 + .../Pods/pop/pop/POPSpringAnimationInternal.h | 132 + BreakingBad/Pods/pop/pop/POPSpringSolver.h | 190 + BreakingBad/Pods/pop/pop/POPVector.h | 394 ++ BreakingBad/Pods/pop/pop/POPVector.mm | 334 ++ .../Pods/pop/pop/WebCore/FloatConversion.h | 56 + .../pop/pop/WebCore/TransformationMatrix.cpp | 1074 ++++++ .../pop/pop/WebCore/TransformationMatrix.h | 279 ++ BreakingBad/Pods/pop/pop/WebCore/UnitBezier.h | 123 + 109 files changed, 11950 insertions(+), 1615 deletions(-) create mode 120000 BreakingBad/Pods/Headers/Private/pop/FloatConversion.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POP.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPAction.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPAnimatableProperty.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPAnimation.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPAnimationEvent.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPAnimationEventInternal.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPAnimationExtras.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPAnimationInternal.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPAnimationPrivate.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPAnimationRuntime.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPAnimationTracer.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPAnimationTracerInternal.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPAnimator.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPAnimatorPrivate.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPBasicAnimation.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPBasicAnimationInternal.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPCGUtils.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPCustomAnimation.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPDecayAnimation.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPDecayAnimationInternal.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPDefines.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPGeometry.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPLayerExtras.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPMath.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPPropertyAnimation.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPPropertyAnimationInternal.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPSpringAnimation.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPSpringAnimationInternal.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPSpringSolver.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/POPVector.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/TransformationMatrix.h create mode 120000 BreakingBad/Pods/Headers/Private/pop/UnitBezier.h create mode 120000 BreakingBad/Pods/Headers/Public/pop/POP.h create mode 120000 BreakingBad/Pods/Headers/Public/pop/POPAnimatableProperty.h create mode 120000 BreakingBad/Pods/Headers/Public/pop/POPAnimation.h create mode 120000 BreakingBad/Pods/Headers/Public/pop/POPAnimationEvent.h create mode 120000 BreakingBad/Pods/Headers/Public/pop/POPAnimationExtras.h create mode 120000 BreakingBad/Pods/Headers/Public/pop/POPAnimationTracer.h create mode 120000 BreakingBad/Pods/Headers/Public/pop/POPAnimator.h create mode 120000 BreakingBad/Pods/Headers/Public/pop/POPBasicAnimation.h create mode 120000 BreakingBad/Pods/Headers/Public/pop/POPCustomAnimation.h create mode 120000 BreakingBad/Pods/Headers/Public/pop/POPDecayAnimation.h create mode 120000 BreakingBad/Pods/Headers/Public/pop/POPDefines.h create mode 120000 BreakingBad/Pods/Headers/Public/pop/POPGeometry.h create mode 120000 BreakingBad/Pods/Headers/Public/pop/POPLayerExtras.h create mode 120000 BreakingBad/Pods/Headers/Public/pop/POPPropertyAnimation.h create mode 120000 BreakingBad/Pods/Headers/Public/pop/POPSpringAnimation.h create mode 100644 BreakingBad/Pods/Target Support Files/pop/pop-Private.xcconfig create mode 100644 BreakingBad/Pods/Target Support Files/pop/pop-dummy.m create mode 100644 BreakingBad/Pods/Target Support Files/pop/pop-prefix.pch create mode 100644 BreakingBad/Pods/Target Support Files/pop/pop.xcconfig create mode 100644 BreakingBad/Pods/pop/LICENSE create mode 100644 BreakingBad/Pods/pop/README.md create mode 100644 BreakingBad/Pods/pop/pop/POP.h create mode 100644 BreakingBad/Pods/pop/pop/POPAction.h create mode 100644 BreakingBad/Pods/pop/pop/POPAnimatableProperty.h create mode 100644 BreakingBad/Pods/pop/pop/POPAnimatableProperty.mm create mode 100644 BreakingBad/Pods/pop/pop/POPAnimation.h create mode 100644 BreakingBad/Pods/pop/pop/POPAnimation.mm create mode 100644 BreakingBad/Pods/pop/pop/POPAnimationEvent.h create mode 100644 BreakingBad/Pods/pop/pop/POPAnimationEvent.mm create mode 100644 BreakingBad/Pods/pop/pop/POPAnimationEventInternal.h create mode 100644 BreakingBad/Pods/pop/pop/POPAnimationExtras.h create mode 100644 BreakingBad/Pods/pop/pop/POPAnimationExtras.mm create mode 100644 BreakingBad/Pods/pop/pop/POPAnimationInternal.h create mode 100644 BreakingBad/Pods/pop/pop/POPAnimationPrivate.h create mode 100644 BreakingBad/Pods/pop/pop/POPAnimationRuntime.h create mode 100644 BreakingBad/Pods/pop/pop/POPAnimationRuntime.mm create mode 100644 BreakingBad/Pods/pop/pop/POPAnimationTracer.h create mode 100644 BreakingBad/Pods/pop/pop/POPAnimationTracer.mm create mode 100644 BreakingBad/Pods/pop/pop/POPAnimationTracerInternal.h create mode 100644 BreakingBad/Pods/pop/pop/POPAnimator.h create mode 100644 BreakingBad/Pods/pop/pop/POPAnimator.mm create mode 100644 BreakingBad/Pods/pop/pop/POPAnimatorPrivate.h create mode 100644 BreakingBad/Pods/pop/pop/POPBasicAnimation.h create mode 100644 BreakingBad/Pods/pop/pop/POPBasicAnimation.mm create mode 100644 BreakingBad/Pods/pop/pop/POPBasicAnimationInternal.h create mode 100644 BreakingBad/Pods/pop/pop/POPCGUtils.h create mode 100644 BreakingBad/Pods/pop/pop/POPCGUtils.mm create mode 100644 BreakingBad/Pods/pop/pop/POPCustomAnimation.h create mode 100644 BreakingBad/Pods/pop/pop/POPCustomAnimation.mm create mode 100644 BreakingBad/Pods/pop/pop/POPDecayAnimation.h create mode 100644 BreakingBad/Pods/pop/pop/POPDecayAnimation.mm create mode 100644 BreakingBad/Pods/pop/pop/POPDecayAnimationInternal.h create mode 100644 BreakingBad/Pods/pop/pop/POPDefines.h create mode 100644 BreakingBad/Pods/pop/pop/POPGeometry.h create mode 100644 BreakingBad/Pods/pop/pop/POPGeometry.mm create mode 100644 BreakingBad/Pods/pop/pop/POPLayerExtras.h create mode 100644 BreakingBad/Pods/pop/pop/POPLayerExtras.mm create mode 100644 BreakingBad/Pods/pop/pop/POPMath.h create mode 100644 BreakingBad/Pods/pop/pop/POPMath.mm create mode 100644 BreakingBad/Pods/pop/pop/POPPropertyAnimation.h create mode 100644 BreakingBad/Pods/pop/pop/POPPropertyAnimation.mm create mode 100644 BreakingBad/Pods/pop/pop/POPPropertyAnimationInternal.h create mode 100644 BreakingBad/Pods/pop/pop/POPSpringAnimation.h create mode 100644 BreakingBad/Pods/pop/pop/POPSpringAnimation.mm create mode 100644 BreakingBad/Pods/pop/pop/POPSpringAnimationInternal.h create mode 100644 BreakingBad/Pods/pop/pop/POPSpringSolver.h create mode 100644 BreakingBad/Pods/pop/pop/POPVector.h create mode 100644 BreakingBad/Pods/pop/pop/POPVector.mm create mode 100644 BreakingBad/Pods/pop/pop/WebCore/FloatConversion.h create mode 100644 BreakingBad/Pods/pop/pop/WebCore/TransformationMatrix.cpp create mode 100644 BreakingBad/Pods/pop/pop/WebCore/TransformationMatrix.h create mode 100644 BreakingBad/Pods/pop/pop/WebCore/UnitBezier.h diff --git a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj index 9c6ff21..08f66f4 100644 --- a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj +++ b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj @@ -106,9 +106,9 @@ DC2DC18D1BCAC0A700A627E2 /* Entry.m */, DC2DC18F1BCAE7E600A627E2 /* Step.h */, DC2DC1901BCAE7E600A627E2 /* Step.m */, - 5FEAE26B1BCB0D7C00201A0E /* PopAnimation */, 5F8FF99D1BC9A9CD00855DFB /* ViewController.h */, 5F8FF99E1BC9A9CD00855DFB /* ViewController.m */, + 5FEAE26B1BCB0D7C00201A0E /* PopAnimation */, 5F8FF9A01BC9A9CD00855DFB /* Main.storyboard */, 5F8FF9A61BC9A9CD00855DFB /* Assets.xcassets */, 5F8FF9A81BC9A9CD00855DFB /* LaunchScreen.storyboard */, @@ -192,6 +192,7 @@ TargetAttributes = { 5F8FF9931BC9A9CD00855DFB = { CreatedOnToolsVersion = 7.0; + DevelopmentTeam = BULEKXRKSR; }; }; }; @@ -387,10 +388,13 @@ baseConfigurationReference = B57E170B6FA09C54334C0536 /* Pods.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; INFOPLIST_FILE = BreakingBad/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = nyc.c4q.zoufishanmehdi.BreakingBad; + PRODUCT_BUNDLE_IDENTIFIER = nyc.c4q.mesfin.BreakingBad; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; }; name = Debug; }; @@ -399,10 +403,13 @@ baseConfigurationReference = 27C4A644526FAE35EDE94530 /* Pods.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; INFOPLIST_FILE = BreakingBad/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = nyc.c4q.zoufishanmehdi.BreakingBad; + PRODUCT_BUNDLE_IDENTIFIER = nyc.c4q.mesfin.BreakingBad; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; }; name = Release; }; diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index ecccf3d..97aa7ff 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -1,7 +1,7 @@ - + - + diff --git a/BreakingBad/BreakingBad/ViewController.m b/BreakingBad/BreakingBad/ViewController.m index 10633d6..ea0a101 100644 --- a/BreakingBad/BreakingBad/ViewController.m +++ b/BreakingBad/BreakingBad/ViewController.m @@ -40,11 +40,11 @@ - (void)viewDidLoad { Step *step1 = [Step new]; step1.stepDescription = @"1. No pack for a whole day"; - step1.completed = @YES; + step1.completed = 1; Step *step2 = [Step new]; step2.stepDescription = @"1. No pack for a whole week"; - step2.completed = @NO; + step2.completed = 0; Goal *goal = [Goal new]; goal.name = @"Quit Smoking"; diff --git a/BreakingBad/Pods/Headers/Private/pop/FloatConversion.h b/BreakingBad/Pods/Headers/Private/pop/FloatConversion.h new file mode 120000 index 0000000..aea012a --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/FloatConversion.h @@ -0,0 +1 @@ +../../../pop/pop/WebCore/FloatConversion.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POP.h b/BreakingBad/Pods/Headers/Private/pop/POP.h new file mode 120000 index 0000000..dd15660 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POP.h @@ -0,0 +1 @@ +../../../pop/pop/POP.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPAction.h b/BreakingBad/Pods/Headers/Private/pop/POPAction.h new file mode 120000 index 0000000..78f9372 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPAction.h @@ -0,0 +1 @@ +../../../pop/pop/POPAction.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPAnimatableProperty.h b/BreakingBad/Pods/Headers/Private/pop/POPAnimatableProperty.h new file mode 120000 index 0000000..48fd8c4 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPAnimatableProperty.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimatableProperty.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPAnimation.h b/BreakingBad/Pods/Headers/Private/pop/POPAnimation.h new file mode 120000 index 0000000..dfe8a85 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPAnimation.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimation.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPAnimationEvent.h b/BreakingBad/Pods/Headers/Private/pop/POPAnimationEvent.h new file mode 120000 index 0000000..5d40492 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPAnimationEvent.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimationEvent.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPAnimationEventInternal.h b/BreakingBad/Pods/Headers/Private/pop/POPAnimationEventInternal.h new file mode 120000 index 0000000..8263df6 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPAnimationEventInternal.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimationEventInternal.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPAnimationExtras.h b/BreakingBad/Pods/Headers/Private/pop/POPAnimationExtras.h new file mode 120000 index 0000000..3a1bc7e --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPAnimationExtras.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimationExtras.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPAnimationInternal.h b/BreakingBad/Pods/Headers/Private/pop/POPAnimationInternal.h new file mode 120000 index 0000000..6aebf45 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPAnimationInternal.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimationInternal.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPAnimationPrivate.h b/BreakingBad/Pods/Headers/Private/pop/POPAnimationPrivate.h new file mode 120000 index 0000000..ea5956d --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPAnimationPrivate.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimationPrivate.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPAnimationRuntime.h b/BreakingBad/Pods/Headers/Private/pop/POPAnimationRuntime.h new file mode 120000 index 0000000..0651d06 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPAnimationRuntime.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimationRuntime.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPAnimationTracer.h b/BreakingBad/Pods/Headers/Private/pop/POPAnimationTracer.h new file mode 120000 index 0000000..64fff66 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPAnimationTracer.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimationTracer.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPAnimationTracerInternal.h b/BreakingBad/Pods/Headers/Private/pop/POPAnimationTracerInternal.h new file mode 120000 index 0000000..b76b731 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPAnimationTracerInternal.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimationTracerInternal.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPAnimator.h b/BreakingBad/Pods/Headers/Private/pop/POPAnimator.h new file mode 120000 index 0000000..89707ea --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPAnimator.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimator.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPAnimatorPrivate.h b/BreakingBad/Pods/Headers/Private/pop/POPAnimatorPrivate.h new file mode 120000 index 0000000..89650c6 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPAnimatorPrivate.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimatorPrivate.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPBasicAnimation.h b/BreakingBad/Pods/Headers/Private/pop/POPBasicAnimation.h new file mode 120000 index 0000000..50184f2 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPBasicAnimation.h @@ -0,0 +1 @@ +../../../pop/pop/POPBasicAnimation.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPBasicAnimationInternal.h b/BreakingBad/Pods/Headers/Private/pop/POPBasicAnimationInternal.h new file mode 120000 index 0000000..fa8cb0b --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPBasicAnimationInternal.h @@ -0,0 +1 @@ +../../../pop/pop/POPBasicAnimationInternal.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPCGUtils.h b/BreakingBad/Pods/Headers/Private/pop/POPCGUtils.h new file mode 120000 index 0000000..d050fb4 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPCGUtils.h @@ -0,0 +1 @@ +../../../pop/pop/POPCGUtils.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPCustomAnimation.h b/BreakingBad/Pods/Headers/Private/pop/POPCustomAnimation.h new file mode 120000 index 0000000..5025bd6 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPCustomAnimation.h @@ -0,0 +1 @@ +../../../pop/pop/POPCustomAnimation.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPDecayAnimation.h b/BreakingBad/Pods/Headers/Private/pop/POPDecayAnimation.h new file mode 120000 index 0000000..dba2796 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPDecayAnimation.h @@ -0,0 +1 @@ +../../../pop/pop/POPDecayAnimation.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPDecayAnimationInternal.h b/BreakingBad/Pods/Headers/Private/pop/POPDecayAnimationInternal.h new file mode 120000 index 0000000..4d5c959 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPDecayAnimationInternal.h @@ -0,0 +1 @@ +../../../pop/pop/POPDecayAnimationInternal.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPDefines.h b/BreakingBad/Pods/Headers/Private/pop/POPDefines.h new file mode 120000 index 0000000..4b10036 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPDefines.h @@ -0,0 +1 @@ +../../../pop/pop/POPDefines.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPGeometry.h b/BreakingBad/Pods/Headers/Private/pop/POPGeometry.h new file mode 120000 index 0000000..9b29189 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPGeometry.h @@ -0,0 +1 @@ +../../../pop/pop/POPGeometry.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPLayerExtras.h b/BreakingBad/Pods/Headers/Private/pop/POPLayerExtras.h new file mode 120000 index 0000000..e11f4c6 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPLayerExtras.h @@ -0,0 +1 @@ +../../../pop/pop/POPLayerExtras.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPMath.h b/BreakingBad/Pods/Headers/Private/pop/POPMath.h new file mode 120000 index 0000000..cc52b21 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPMath.h @@ -0,0 +1 @@ +../../../pop/pop/POPMath.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPPropertyAnimation.h b/BreakingBad/Pods/Headers/Private/pop/POPPropertyAnimation.h new file mode 120000 index 0000000..0fae4c5 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPPropertyAnimation.h @@ -0,0 +1 @@ +../../../pop/pop/POPPropertyAnimation.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPPropertyAnimationInternal.h b/BreakingBad/Pods/Headers/Private/pop/POPPropertyAnimationInternal.h new file mode 120000 index 0000000..5783767 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPPropertyAnimationInternal.h @@ -0,0 +1 @@ +../../../pop/pop/POPPropertyAnimationInternal.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPSpringAnimation.h b/BreakingBad/Pods/Headers/Private/pop/POPSpringAnimation.h new file mode 120000 index 0000000..152f663 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPSpringAnimation.h @@ -0,0 +1 @@ +../../../pop/pop/POPSpringAnimation.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPSpringAnimationInternal.h b/BreakingBad/Pods/Headers/Private/pop/POPSpringAnimationInternal.h new file mode 120000 index 0000000..afdc982 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPSpringAnimationInternal.h @@ -0,0 +1 @@ +../../../pop/pop/POPSpringAnimationInternal.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPSpringSolver.h b/BreakingBad/Pods/Headers/Private/pop/POPSpringSolver.h new file mode 120000 index 0000000..6ed1ee6 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPSpringSolver.h @@ -0,0 +1 @@ +../../../pop/pop/POPSpringSolver.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/POPVector.h b/BreakingBad/Pods/Headers/Private/pop/POPVector.h new file mode 120000 index 0000000..73f01f9 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/POPVector.h @@ -0,0 +1 @@ +../../../pop/pop/POPVector.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/TransformationMatrix.h b/BreakingBad/Pods/Headers/Private/pop/TransformationMatrix.h new file mode 120000 index 0000000..f1232b9 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/TransformationMatrix.h @@ -0,0 +1 @@ +../../../pop/pop/WebCore/TransformationMatrix.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/pop/UnitBezier.h b/BreakingBad/Pods/Headers/Private/pop/UnitBezier.h new file mode 120000 index 0000000..fbd11a0 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/pop/UnitBezier.h @@ -0,0 +1 @@ +../../../pop/pop/WebCore/UnitBezier.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/pop/POP.h b/BreakingBad/Pods/Headers/Public/pop/POP.h new file mode 120000 index 0000000..dd15660 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/pop/POP.h @@ -0,0 +1 @@ +../../../pop/pop/POP.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/pop/POPAnimatableProperty.h b/BreakingBad/Pods/Headers/Public/pop/POPAnimatableProperty.h new file mode 120000 index 0000000..48fd8c4 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/pop/POPAnimatableProperty.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimatableProperty.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/pop/POPAnimation.h b/BreakingBad/Pods/Headers/Public/pop/POPAnimation.h new file mode 120000 index 0000000..dfe8a85 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/pop/POPAnimation.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimation.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/pop/POPAnimationEvent.h b/BreakingBad/Pods/Headers/Public/pop/POPAnimationEvent.h new file mode 120000 index 0000000..5d40492 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/pop/POPAnimationEvent.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimationEvent.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/pop/POPAnimationExtras.h b/BreakingBad/Pods/Headers/Public/pop/POPAnimationExtras.h new file mode 120000 index 0000000..3a1bc7e --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/pop/POPAnimationExtras.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimationExtras.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/pop/POPAnimationTracer.h b/BreakingBad/Pods/Headers/Public/pop/POPAnimationTracer.h new file mode 120000 index 0000000..64fff66 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/pop/POPAnimationTracer.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimationTracer.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/pop/POPAnimator.h b/BreakingBad/Pods/Headers/Public/pop/POPAnimator.h new file mode 120000 index 0000000..89707ea --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/pop/POPAnimator.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimator.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/pop/POPBasicAnimation.h b/BreakingBad/Pods/Headers/Public/pop/POPBasicAnimation.h new file mode 120000 index 0000000..50184f2 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/pop/POPBasicAnimation.h @@ -0,0 +1 @@ +../../../pop/pop/POPBasicAnimation.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/pop/POPCustomAnimation.h b/BreakingBad/Pods/Headers/Public/pop/POPCustomAnimation.h new file mode 120000 index 0000000..5025bd6 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/pop/POPCustomAnimation.h @@ -0,0 +1 @@ +../../../pop/pop/POPCustomAnimation.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/pop/POPDecayAnimation.h b/BreakingBad/Pods/Headers/Public/pop/POPDecayAnimation.h new file mode 120000 index 0000000..dba2796 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/pop/POPDecayAnimation.h @@ -0,0 +1 @@ +../../../pop/pop/POPDecayAnimation.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/pop/POPDefines.h b/BreakingBad/Pods/Headers/Public/pop/POPDefines.h new file mode 120000 index 0000000..4b10036 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/pop/POPDefines.h @@ -0,0 +1 @@ +../../../pop/pop/POPDefines.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/pop/POPGeometry.h b/BreakingBad/Pods/Headers/Public/pop/POPGeometry.h new file mode 120000 index 0000000..9b29189 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/pop/POPGeometry.h @@ -0,0 +1 @@ +../../../pop/pop/POPGeometry.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/pop/POPLayerExtras.h b/BreakingBad/Pods/Headers/Public/pop/POPLayerExtras.h new file mode 120000 index 0000000..e11f4c6 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/pop/POPLayerExtras.h @@ -0,0 +1 @@ +../../../pop/pop/POPLayerExtras.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/pop/POPPropertyAnimation.h b/BreakingBad/Pods/Headers/Public/pop/POPPropertyAnimation.h new file mode 120000 index 0000000..0fae4c5 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/pop/POPPropertyAnimation.h @@ -0,0 +1 @@ +../../../pop/pop/POPPropertyAnimation.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/pop/POPSpringAnimation.h b/BreakingBad/Pods/Headers/Public/pop/POPSpringAnimation.h new file mode 120000 index 0000000..152f663 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/pop/POPSpringAnimation.h @@ -0,0 +1 @@ +../../../pop/pop/POPSpringAnimation.h \ No newline at end of file diff --git a/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj b/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj index ca00440..7e2d8cd 100644 --- a/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj +++ b/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj @@ -7,911 +7,911 @@ objects = { /* Begin PBXBuildFile section */ - 005695268BED154E9042211E12310C74 /* PFPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 1969D32C99E438DDB5CD4D541DDC00CD /* PFPin.m */; }; - 00EE2DBD1E7F59BFA1AE4F842706417C /* PFMutableUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 83720EF13618F9740F2F7E1F7E8DE8B9 /* PFMutableUserState.h */; }; - 015FCB9B8DD7DC9A0488893D1B4E0015 /* PFErrorUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A01E3948888676B760B4B5642C2B3CD /* PFErrorUtilities.m */; }; - 01BEF3D787B13B3B2B56DDBCA08A0FAB /* PFHTTPURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = F990476FB27C0034DB517BE7F8E8E297 /* PFHTTPURLRequestConstructor.m */; }; - 01C20A13734E154707BCB74AA50AF6FA /* Parse.h in Headers */ = {isa = PBXBuildFile; fileRef = 62080F892890D93BE422B38D0ADD788B /* Parse.h */; }; - 02C4B0A8B51D500CF0359C30EB77A55B /* PFPushController.h in Headers */ = {isa = PBXBuildFile; fileRef = 91C278F6237539322009B508C24CC49D /* PFPushController.h */; }; - 037922F25BE9EDF80206E267E32963F0 /* ParseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DE516CCF6D322CB4CA050FD6E52A70E /* ParseManager.h */; }; + 00119247713445361CB349494BD8721A /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A4C94256E730FF99DD4B0F41D9D749C /* Bolts.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 019F0B043AC4620E8D1ED11D6D250BAE /* PFPaymentTransactionObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = EC3179640630E861C08F4D68C5D17E53 /* PFPaymentTransactionObserver.m */; }; + 025EEC0368FDBA71ACFCB68A39C3655D /* PFCommandURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BEDAC2F484B73C71F6B8E48C5B6FCB76 /* PFCommandURLRequestConstructor.h */; }; + 03A25737600F83E8C55F2AB9779A8E7C /* PFFileStagingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F6664FFA2E9D3FD4CE7F5A6C742742E /* PFFileStagingController.h */; }; 03FF532EB8C5304EFA2E77016458C281 /* POPPropertyAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2726A20CBCFFB77F9972C445E8972099 /* POPPropertyAnimation.mm */; }; - 04095EC3D989BCA8B01629786D94BA53 /* PFMutableACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = 89508E9160A4510C35341638A4A33FFC /* PFMutableACLState.m */; }; - 0447D077E03CCB121A73F61FECE5D6BC /* Parse.m in Sources */ = {isa = PBXBuildFile; fileRef = EB5DC17148922AD333F7571A1F2466E3 /* Parse.m */; }; - 04F6C6E18CCF030F4D582EB215021992 /* PFCloudCodeController.h in Headers */ = {isa = PBXBuildFile; fileRef = 54BB29D5628B693DB06DEF1222114715 /* PFCloudCodeController.h */; }; - 04FDA7B957175B9AB41F12B581C39012 /* PFCommandResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 003F04CCCCA9D217090A10F09B6A095B /* PFCommandResult.h */; }; - 05F00A05A1F52FDF030A9ED3A65E4381 /* PFCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 08D26CE5516D7D42D9222FD32B2EDB93 /* PFCategoryLoader.h */; }; - 0652F30DD0C4FE6F6F9CEB85F9B8D74E /* PFObjectConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 72761DCB73DE19D59EFDEF3DF961C4F3 /* PFObjectConstants.h */; }; - 073E677444C5A0E6864B45279F172EA7 /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 828F0C1371108640DCECDC077D80E6F9 /* BFTaskCompletionSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 074E069D87C50D72053C5523956F1174 /* PFSQLiteDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CF1EB66CAC009B756BA17A2817145984 /* PFSQLiteDatabase_Private.h */; }; - 0844609AD157B2569405CC584D6D9679 /* PFAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = BA67CA21B8529E8E4280069C4CC1FA26 /* PFAnalytics.h */; }; - 08B14D1DFFB905C7DA0922E60E93AFB4 /* PFCurrentInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 43FEB98D92288E63383CA2110D5E1033 /* PFCurrentInstallationController.h */; }; - 09AE420645EA5821A4EB06CE5B22062D /* PFPushPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = BD53F748C3855917C34EE3DCD3CD3F92 /* PFPushPrivate.h */; }; - 09E322410AA4B979A689B8FBC73E0F83 /* PFOfflineObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E00A160407B37F025D21140BEA61FE9 /* PFOfflineObjectController.m */; }; + 0448850F9AC7EAD3AFCF4F76B8E9A0CB /* PFMultiProcessFileLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C10587D5F82F53DEA74DF5129DD7312 /* PFMultiProcessFileLock.h */; }; + 0457F8E0768F1EA24F6BBF399A2575A9 /* PFDefaultACLController.m in Sources */ = {isa = PBXBuildFile; fileRef = 875C18418E320318A1F79B5C8DE9BF08 /* PFDefaultACLController.m */; }; + 04ACE9FD008EAD5D882046A427B6F000 /* PFAnonymousUtils_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C99D12456DCBCCB4B0A98B1D7C33FA9 /* PFAnonymousUtils_Private.h */; }; + 04E0463B6BEA9B8021EF9D47A0D70D48 /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = CBA0A5B0F0E83001148599CCEC105E79 /* BFExecutor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 05FB5EA05407A51C90CE53EC75528A35 /* PFPaymentTransactionObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = FE28A5553FE4AE0FD8390747D2847B04 /* PFPaymentTransactionObserver.h */; }; + 06198F665E7E5D5095FA80C3DE87FFF0 /* PFMutableACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A56F696F9B2544A6A4DB58FB8E47809 /* PFMutableACLState.h */; }; + 071BCA62D30752EC13996F5B307BFFEF /* PFSQLiteDatabaseResult.h in Headers */ = {isa = PBXBuildFile; fileRef = B6EFD05D2D5F7A4F89CDF5EA8E64F2DE /* PFSQLiteDatabaseResult.h */; }; + 07BF9641830B6995B62971E3D7D08125 /* PFRESTSessionCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 17A73E112537B17232FB3245923658EF /* PFRESTSessionCommand.m */; }; + 0869A1319F02EA8C47B814645AD4AF4F /* PFObjectBatchController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8904B6096DEB568855A4A7625ED6CAE1 /* PFObjectBatchController.h */; }; + 0886359057F4348C659E5B51CFDFB6EB /* PFFile.h in Headers */ = {isa = PBXBuildFile; fileRef = CB36CF9B5806A0332F9E4955152BC86E /* PFFile.h */; }; + 08AAE6FC8BAE4DFF3E2B00BF4957E2BA /* PFUserState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AB1ABA6EB2984DFC25350DF75335526F /* PFUserState_Private.h */; }; + 09919F2A8CC0DCFF455F2F7A8B9E5D46 /* PFCurrentObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = B41C5D6C197E0FDC6E5D8533A0C1CE95 /* PFCurrentObjectControlling.h */; }; 09F160052D6F4DF4F769F6A2A351071C /* POPAnimationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = EC10F21A5E230A911C2C2E5082CDAE4B /* POPAnimationPrivate.h */; }; - 0ADB28D8BBCF730DB3712BA235178983 /* PFFileStagingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F437AB63E48A5534A05700959E05607 /* PFFileStagingController.m */; }; - 0B364D53F85A0FE8D3BF8829A280D22B /* PFObjectFilePersistenceController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4648A560C468826E346FA00C25F64545 /* PFObjectFilePersistenceController.m */; }; - 0B6ADB9B0F9070AA026BD69D2DBB3897 /* PFAnalyticsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 64CA497DEB5823668E1CF3AEF0FC8118 /* PFAnalyticsController.m */; }; - 0BFCC38A10528D04D36495CB3A6255AB /* PFMultiProcessFileLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 711043A9271B2D627CCBD4F5731F56B1 /* PFMultiProcessFileLock.m */; }; - 0C6374E8F087F3F9A7CDFAEB467FAA48 /* PFObjectUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 63298AA824390762997B9EF2E73DDBD6 /* PFObjectUtilities.h */; }; - 0CE037AF386585DCEE8513CC3FDB551F /* PFQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D56DAEA6274547A9C5D871A0412DD30 /* PFQuery.h */; }; - 0D1CA8852FF8147C75A85B2F31117903 /* PFCurrentConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = A3ABEEBB2584C20918BF1285C34EA0E9 /* PFCurrentConfigController.h */; }; - 0DDE88A3EC90392DDB022A0C399AFA04 /* PFKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = A40C6F5379E163ACAB3BFEADF6BBF21B /* PFKeychainStore.h */; }; + 09F2FDD632622F34F5340789029EE07D /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A71F8897B642BC983919241A133904D /* SystemConfiguration.framework */; }; + 0AD21100FCF0450862222785E05331C8 /* PFQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = AD3CB420E4A0D3570A166616F7BC779E /* PFQuery.m */; }; + 0B846D612D91734A3934991CE63FC72D /* PFEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 06A34F6AE5214388ED772768B1AED0E1 /* PFEventuallyQueue.m */; }; + 0BEC8B0B2E2717328E0F93CF88DDA5FF /* PFSQLiteDatabaseResult.m in Sources */ = {isa = PBXBuildFile; fileRef = DEF74DE469E28BE80197C43305F5C003 /* PFSQLiteDatabaseResult.m */; }; 0E111996ED8AB07B504AD6200F460C6E /* POP.h in Headers */ = {isa = PBXBuildFile; fileRef = 38C1E5A4A6882760CB349FCABD22A9DC /* POP.h */; }; - 0F666004816BD3E9D47E40000FCE0C87 /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DDEF20541344C4516B6DD22C1EB240F /* BFCancellationToken.h */; }; - 0F6B98F865122CB525B9C6C262681217 /* PFCurrentInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = A091F705C56846E993F12A441C8A163B /* PFCurrentInstallationController.m */; }; - 0F71054017CBECD2BF138C5EFD3ED57E /* PFPushManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D0975C15C502A249A57E3EE7AABC42BE /* PFPushManager.h */; }; - 0FAC72D8A00C1375FA0B2B71DA84E611 /* PFObjectConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 924397DD8F89F34DFFD235E510DCA00F /* PFObjectConstants.m */; }; - 103A9E462566D7CB14E191DFE9D1C475 /* PFCurrentUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = A0C39E3679DEC122C57CAF59AC4607D6 /* PFCurrentUserController.m */; }; - 106AC3F7B15127B444B09D4BEC1C8B43 /* PFObject+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = 92BE0A4991FB16CAC08DA54E2D9B4E4C /* PFObject+Subclass.h */; }; - 108491A1ADCD0F822D90DF4352AF93CF /* PFMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 22F8D68DF4AAD2C14B0AB430E0C5337F /* PFMulticastDelegate.m */; }; - 11432DE55D0DE3BAB6D9BB8131CC576E /* PFMutableFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = B7CFA60CD26AF95E62DC7D82173BA5F6 /* PFMutableFileState.h */; }; + 0FDD8F5E664D0EA41C89347205454FF6 /* PFFile_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FA3FD266385B8FB527CD25EAD4C3B537 /* PFFile_Private.h */; }; + 0FE84A5606D81B659C03C3C6102EAA92 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEC32F2ED903D3546EEEA22AC6E13F4E /* AudioToolbox.framework */; }; + 107544526752B586BB04FF44D35C5102 /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B782D4B8E3CF13324D674E51D4AA45A /* PFCloud.m */; }; + 118377BB16D5D852E20EFBF6CB987907 /* PFConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CCF0135C67AEC40B93D2B426712CFC9 /* PFConfigController.m */; }; 11924DA123F63743B409090BFC425AD2 /* POPCGUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CC05709207C91767940918CDD4779DC /* POPCGUtils.h */; }; - 128270239F0FE9E10D4016298F09179F /* PFSQLiteDatabaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = F2F468A970FC15FC06B99390A1FB0614 /* PFSQLiteDatabaseController.h */; }; - 1303B59C5400037F832BD657D7E0DB7B /* PFSQLiteDatabaseResult.m in Sources */ = {isa = PBXBuildFile; fileRef = FA0E5057E1930B74D697F4D727731037 /* PFSQLiteDatabaseResult.m */; }; - 13966B03B2D6769C16DD2374B5010932 /* PFPinningObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 117B19051931B86306911BB447C05694 /* PFPinningObjectStore.h */; }; - 143BEC7D21D8844811A803F54131A9F0 /* PFObjectUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = E1247C54B1E28A1D1035FF148D7A8067 /* PFObjectUtilities.m */; }; - 146C2DC0D3347B3616475EC3FACC440A /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6577AD13A469645712E5462FABF1FD4F /* Bolts-dummy.m */; }; - 14A0D60A7ABCCA3408ED26E3D0E0A819 /* PFPropertyInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C8CEF3DB4AEFD83044AD62B8A9ABD41 /* PFPropertyInfo.m */; }; - 14A9C6C340EF645292625C9BAA9D2E4C /* PFDefaultACLController.h in Headers */ = {isa = PBXBuildFile; fileRef = 59CC3868179641E97ED190501DFF4E05 /* PFDefaultACLController.h */; }; - 14B42C960D733C3D8791124A3284C393 /* PFUserAuthenticationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3ED3C7E0A4856FAB56766C096BB50FC4 /* PFUserAuthenticationController.m */; }; - 14F7FFC0E861870C067DF49031119473 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 74ACACF597B47C752DF60C1269A50016 /* PFURLSessionFileDownloadTaskDelegate.m */; }; - 1690AC90F202B5DC511EA9C2933CB97D /* PFRESTAnalyticsCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 6117D27B3E43E27D2717ADF042654E56 /* PFRESTAnalyticsCommand.m */; }; - 16D3FC7241874C6948D2C9C3211B223B /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 06D0E06E5B5391A250E1E1200BADD9E1 /* BFExecutor.h */; }; - 1829B47CC2B07BF87040C0A5B17DCEE0 /* PFObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 63068DEB876F824B178AEFCD8421DB6A /* PFObjectControlling.h */; }; - 1833BA11A3F8B321D710AAA35A810D7D /* PFApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D47488328F5D210AF09C2E49EAF28AE /* PFApplication.m */; }; - 18695B6FB1C1E432BBBED25F18E62976 /* PFGeoPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 48764192F317D5037D89AF6584C95481 /* PFGeoPoint.h */; }; + 12A8CFFBCED5FBBFE861423D8EEED31A /* PFPropertyInfo_Runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A132496AD1361AB641C6E65067049BF /* PFPropertyInfo_Runtime.h */; }; + 12CC1275B7906C440CAA09E6CD435DE2 /* Parse_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 420A2E467841126C406BA9FA83D75161 /* Parse_Private.h */; }; + 12F6909B52C61D7E799B5B309749B735 /* PFRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 177ECEF6166CB8A176CA4C377BFFD54B /* PFRelationState.m */; }; + 13E3B4D00549AFBC51E6C7305A7EA1DA /* PFUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DE181E23B100CCECFB4B435A3DF9AD4 /* PFUserController.h */; }; + 15891E0CDBB02CD8E27F08B0027DE0F3 /* PFObjectLocalIdStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E3D63307A8DF22EE6CA58FBC364ACF4 /* PFObjectLocalIdStore.h */; }; + 1595244FE466EB44C6AEBBEA61B358BF /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = ABF7E63586A26C19233745BAFC155684 /* BFTask.h */; }; + 16000B68D460BA81C95837AD36045066 /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = C439FB0D5070895D69861DE4654C8D25 /* PFEventuallyPin.m */; }; + 166A51403710FA4669EFB0EF749BD63F /* PFObjectPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1146110AA563CDAFA693A1B073292A1E /* PFObjectPrivate.h */; }; + 16BEED5DCCB91A2FA43E9F5E656F7F2E /* PFMutableFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D98F818FBD7F97BBBBADD55203F244B /* PFMutableFileState.h */; }; + 179F8265304E06A1E027D13136B5DECC /* PFSessionUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = C65B577617E60D4DCA6671103F519E4B /* PFSessionUtilities.h */; }; + 18B2F23AF51EC0206B5D34C2C1CA20AF /* PFAnalyticsController.h in Headers */ = {isa = PBXBuildFile; fileRef = D3568213E494C4CA6E3B00B07B2AC4E4 /* PFAnalyticsController.h */; }; + 18EB839151EC2E5154EDD4CC83812E8B /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 840EF1BA3066E61DD0BA27741371AE22 /* BFCancellationTokenSource.h */; }; 1937EC6CD83AA2FAB3455591AB074459 /* POPPropertyAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 134BDC30251FB7A5465C17F603FCAC5F /* POPPropertyAnimationInternal.h */; }; - 1A77D51093B72D6AA09D9EB6C3C74F7F /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 714D2457E720A0BF6948DBDCD450623B /* PFEncoder.m */; }; - 1B2262EFDAE0F192D7546683867AC14E /* PFPurchaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F56BA43A619F5C1A2ED1F36B30E29A4 /* PFPurchaseController.h */; }; + 1A570F4695129D835CD30EB6BBFF6657 /* PFLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = C13F91216CB47F63D6B60866FDDC2E12 /* PFLogger.h */; }; + 1B9AE1750A101AE8FF9B774B981088B3 /* PFObjectFileCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 904E4BEABBDE0DE64491D4A2F274F91B /* PFObjectFileCoder.h */; }; 1BEBEDAB53B9DB3AD45E1F70637747F9 /* POPSpringSolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 6961E549FC85F85EB7560B887B11C928 /* POPSpringSolver.h */; }; - 1D3EA938DC7748DF6184BCEC67838050 /* PFRelation.m in Sources */ = {isa = PBXBuildFile; fileRef = DDC7530978AD0E9150595DF76671ACD3 /* PFRelation.m */; }; - 1E581CA0DC0AD8F9F538F6FD47B42F92 /* PFRESTObjectCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EED13B4582C1463F725EE279074226F /* PFRESTObjectCommand.h */; }; - 1E95B670CEC8A958CBE78165F316F11B /* PFMutableQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 12C8B2712D809AA1B4EC70ADAB8C6809 /* PFMutableQueryState.h */; }; - 1F6218FF21B87CE968615BF666391173 /* PFObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = D003772BF7AE6C6E80062C919E2AA60F /* PFObjectState.h */; }; - 20254097B4CBEAC40E87858741364800 /* PFRESTCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A5BCCC7BC1F6EA4EF7FD3C7BB518BAB /* PFRESTCommand.m */; }; - 20BA5067D5A5B862B598FC8E47FDA620 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 067C9B58B0E86A024F7699B9FC2F7E42 /* SystemConfiguration.framework */; }; + 1C1E96A7BBF8E7F8D79356191F174ED5 /* PFFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 49E7AE33EEA74B98EDDEF13254E369C2 /* PFFileState.m */; }; + 1CD0B28DDD42993BAFEC02CC2FFBBE0C /* PFFileController.m in Sources */ = {isa = PBXBuildFile; fileRef = FD89DE98891CC69A6BDBE90F774426D7 /* PFFileController.m */; }; + 1D5D77684A5F13E35BB4BA7BC6A40E7C /* PFHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D322CC5914ECCF1403B38B9F1A7597F /* PFHash.m */; }; + 1DA51F2E2858C95CE8D940AFDA4F7463 /* PFSQLiteDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BDA2CB539774B96EADA0171CEB88CC6 /* PFSQLiteDatabase.m */; }; + 1EA0550E7CBF55104A94BEB8BF651CE1 /* PFRESTAnalyticsCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 608790F5A36AC5B2650CA3AB5EDB96D8 /* PFRESTAnalyticsCommand.m */; }; + 1EEDD4EA1C24F8C275BF3FDEC4F21220 /* PFCurrentInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CE62F458530CD664224D3B0B7E49EAB /* PFCurrentInstallationController.h */; }; + 20EBA85FEE98957543B214F730AB4A8D /* PFObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A8F12B4902D7D8A8BBAF518DB7C37EF /* PFObjectController.h */; }; 22030D04E39440FA02B75449A95BF767 /* POPAnimationEventInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5785AD09C2208501D5161E950E701889 /* POPAnimationEventInternal.h */; }; + 222B13AB149B127438E6C3A0402F3B9A /* PFQueryPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 66C84FE024EC45EF4AB8D3EE3366EAF3 /* PFQueryPrivate.h */; }; 226B9015C8E393975BCF1AFEA63C1D51 /* POPGeometry.mm in Sources */ = {isa = PBXBuildFile; fileRef = B330BCF969EF6189E02E10926FB95CED /* POPGeometry.mm */; }; - 22DBE369440BD25CBD77C151C93A8F05 /* PFAsyncTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 91C444E945365A3AEA1C0182D529EA62 /* PFAsyncTaskQueue.h */; }; - 2317FF254CCFEF175822B7FD4CEDF7E1 /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = C91998944DE097F05FC7342A6ABBD51F /* PFEventuallyPin.m */; }; + 23397013BE39F0E00040409845815FB6 /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = B80259DBA1A3ADC7CA8707C772EB8531 /* PFBaseState.m */; }; 23FC5124B2FA2C879AFE378BBB12AC3A /* POPSpringAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C24554FAA71D841BC3C0759DA37874AE /* POPSpringAnimation.mm */; }; - 253D23734B85142261E13FAA6BF114A8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - 25706CA63FDDB23DA6DBD73940E275FD /* BoltsVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 3ED31097D39E6FCF0F3C743613AFA30C /* BoltsVersion.h */; }; - 26703E636E5C16D01C99FFBA0B9E8062 /* PFFieldOperationDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DF189D36ECF2252091D16F77FBAA4B1 /* PFFieldOperationDecoder.h */; }; - 281E35FB8E35EC1E9F2ECC14AC06EE2F /* PFAnonymousUtils_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BF599E498617D2A09E55B46584A069AC /* PFAnonymousUtils_Private.h */; }; - 286C67C403A641645B5702A201BE0D77 /* PFFile.m in Sources */ = {isa = PBXBuildFile; fileRef = BDFFC646E1E0963C745694C371C7CA92 /* PFFile.m */; }; - 289943F1E552820BA0858569400B2F7D /* PFQueryUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = B854EEBA088DE9B81F5F84844F966B49 /* PFQueryUtilities.m */; }; - 29482C3313003A053F10A25BE5F80032 /* PFMutableUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AAA36FB0A4E13DB1928E19770D8EFF8 /* PFMutableUserState.m */; }; - 2A03349907D6F274E5E0BC4C4CE2B9D4 /* PFSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DB2F830CB43261A32A1658BB35A9006 /* PFSession.m */; }; - 2A069E26EA47349AD78257CF3FD49650 /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1826EAEE4BB8BAD18008DEBA561577 /* PFMultiProcessFileLockController.m */; }; - 2A06A476247DEFCD15C38C029E6D34DB /* PFCloud.h in Headers */ = {isa = PBXBuildFile; fileRef = 431480C91CFCFE70AF20289CEECDDA2C /* PFCloud.h */; }; + 2474618B1A731CCC67E7E9E8E967BD07 /* PFKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EE9007C583DF8ECE1AEF3F938312117 /* PFKeychainStore.m */; }; + 26E76884A04FD6D5A7F3CD5DDB1755D0 /* PFRole.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DD193A7608BB519CE6B1B91AE25E86C /* PFRole.m */; }; + 26EAB43BBB1FCD57FE349D3E8F930B89 /* PFQueryUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C85AFD7ABA045B4FE8ED8BF948A7C60 /* PFQueryUtilities.h */; }; + 2706615ED7F95EB8B15127341388A254 /* PFAnalyticsUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A90C53A523B75F828B57C0D0368595B /* PFAnalyticsUtilities.m */; }; + 27CFA5673C9671412C57A625FCB0CBFD /* PFObjectFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 42763567F50A02D13E880143048C01A1 /* PFObjectFileCodingLogic.m */; }; + 27F2109F29A28421282EE42D0B9EF39E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + 29A5A8506AEFAC779C7872279E0978A0 /* BFDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E8E5DE9CFE8C0FF513510782D08CD45 /* BFDefines.h */; }; 2AD822A4C6DD9CA6D499CF6955198F4A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - 2B65D042FB690E283070BAB2D38C6AF1 /* PFSessionUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 01760A57DC1D7F86DDC6BD37AF0773FD /* PFSessionUtilities.m */; }; - 2D7F082E126EE359CEE014B2619D1661 /* PFFieldOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = EE07F56B15CF5CA712EDB693EC0DE281 /* PFFieldOperation.h */; }; - 2DACFE369A8EFCB713C6D983E5379A2F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E32EC19799A69A3384750AD614A93F67 /* CoreGraphics.framework */; }; - 2F0882CC2C95FBDFAAA2C4B2CC5DC28A /* PFUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = E9F025C441C961725285A53BA76899A7 /* PFUserController.m */; }; - 2F1B5C4CE2C8923ECCB376D10D914260 /* ParseModule.m in Sources */ = {isa = PBXBuildFile; fileRef = A696C6A7BB4CC0BCC4967D91315B61AC /* ParseModule.m */; }; - 302E463F7711C0EEF94B3DCE8FF84125 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE8243581B97EEAD2F8781E6C48FD676 /* StoreKit.framework */; }; - 303D18C84C273A053FD1BA34006773BF /* PFNullability.h in Headers */ = {isa = PBXBuildFile; fileRef = 317ED8ACDA393EB59C813498345758A5 /* PFNullability.h */; }; - 307D7DEC099E8172492DB3B8B843F347 /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A52285082871167215D3C139EB152B98 /* PFURLSessionDataTaskDelegate_Private.h */; }; - 309EB042B343BE9C616F85304F8ABDEC /* PFCommandRunning.h in Headers */ = {isa = PBXBuildFile; fileRef = E3CA74B2AFA8B7D355ED3CA3F92BDFD2 /* PFCommandRunning.h */; }; - 30AC63E9C9742D92BFB642A9A7F0FB08 /* PFCurrentUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 01B5421FED39CB875C6EB4E26A48BD0E /* PFCurrentUserController.h */; }; - 31750ADF61E36601124AF864C270BC3E /* PFUserState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 776FA4A81A104C872B1C274D67CE18FE /* PFUserState_Private.h */; }; + 2ADCD4987CEC04072FE60FD15CB4058D /* PFUserAuthenticationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 7363B398C79454A71B17ACDF25FAA393 /* PFUserAuthenticationDelegate.h */; }; + 2B113DEE9FAAA55635324A5175A121C3 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 59A9225041C3DEB9A02CF97CE810A7F8 /* PFEncoder.h */; }; + 2BBC1EDE95D8FE18729151D68C31A20A /* PFACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = 869D3911E9F5718BD0B6815F0AB11EED /* PFACLState.m */; }; + 2D298D017CBD10AA0EA097AAF97DCBBB /* PFSQLiteStatement.m in Sources */ = {isa = PBXBuildFile; fileRef = 4123F238BE00014D15B8B3DE34ADC447 /* PFSQLiteStatement.m */; }; + 2D80A28041C979830EC19F3728752554 /* PFAnonymousAuthenticationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = FFA4C594B449FC01306DB29EAF4D8570 /* PFAnonymousAuthenticationProvider.h */; }; + 2E3617FD5EAF3820AC2BE01858D14B55 /* ParseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BF89107C38CFD5E5770EC87A79813462 /* ParseManager.m */; }; + 2E47D04C4E99302A4E0D5BCB44A7DA35 /* PFPush.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EBCC4FDAE51D4D5EBDF89A681AB0F7D /* PFPush.m */; }; + 2E5CFA31157D42A4D6D2D5E58E0C6679 /* Parse.m in Sources */ = {isa = PBXBuildFile; fileRef = E56771AE10D1052EB22D63A1F7631599 /* Parse.m */; }; + 2F21FA644C383C630A49A59124F4F297 /* PFHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 20DFAAE476F60317DEAEE177019E41E9 /* PFHash.h */; }; + 3066F217E0560A5956224017904AC0BA /* PFRESTAnalyticsCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 514CD500BD8BACEDB35A91E6F6135E56 /* PFRESTAnalyticsCommand.h */; }; + 316E54BAB18CE88AA1AF6A3FC1C06BCC /* PFLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C07AD7B01F99BCDAE94E6D7D0BF6038 /* PFLocationManager.h */; }; + 319B8E861E6F24AE259C346D7B14D5E4 /* PFObjectConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 6AFE87339800D6E962F2EFEC155ABC75 /* PFObjectConstants.m */; }; + 329D4CC19C753FF40AFBD505075E71DE /* PFFile.m in Sources */ = {isa = PBXBuildFile; fileRef = EA32A2997B8869B495BB155A4CF0CDCA /* PFFile.m */; }; 32A7371F19FC366D8DF77A2FA2166918 /* POPCustomAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8EC4FC6A3A06D9292C296C691005546B /* POPCustomAnimation.mm */; }; - 32D4B780316F25D5B0849535BDF2CCB8 /* PFSQLiteDatabaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = D0E2E71B86A138C5A13EEABD485A9EAB /* PFSQLiteDatabaseController.m */; }; - 32D7AF079AE20056F6152EF4D46AECFD /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 409D5D646200B0874F402A55B2054320 /* BFTaskCompletionSource.h */; }; - 33364FE5E736249A1DE57AFF31737CD7 /* PFUserFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = AC00DC436BD41D96D7CDADBBE0CCBC63 /* PFUserFileCodingLogic.m */; }; - 34731100DF3C112C179EA805BCAF5BCB /* PFAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = E00C63837F9F051D3640CED99CD396F4 /* PFAlertView.h */; }; - 347C0767BEFFB5F0CE309B5EB138A26F /* PFObjectBatchController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9179D67A40E4CA93EA605BECE4456488 /* PFObjectBatchController.h */; }; - 348C1F161E5A01BD89B9C748DB57C4D4 /* PFSessionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 99AD17888337EB965D0DF3DEB606CAA4 /* PFSessionController.m */; }; - 35CA508E579AA77E74159A57D6C5464D /* PFLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B63F361CAC0664EA5B1BDBD82688DB0A /* PFLocationManager.h */; }; - 37C41E1C9ECD2240B829A8DA25B7FA86 /* PFPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 77409243AF81F02474E6071043269440 /* PFPin.h */; }; - 3802A63F68ECB3CA5DA20D75732A6DFD /* PFDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 27C57412F25313254CDCF65E3AB69F64 /* PFDateFormatter.h */; }; - 390C28D5DDFD9DDB5340A0F68CEB8C2E /* PFRelationState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 90908F63ED9505B2C6685248AE5457F4 /* PFRelationState_Private.h */; }; - 39805A9A3BF2BC351B5F85500980E16B /* PFPurchase.h in Headers */ = {isa = PBXBuildFile; fileRef = B9CD991531E7E5557C57269840034107 /* PFPurchase.h */; }; - 3A4405B733E2F1770CF0AD8185D5DC10 /* PFDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 39F54AA49BC2FD125A794644082419CE /* PFDevice.h */; }; - 3A7507E3009ACF762200908D7CA0C0B7 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 67B621259A8F197B0245C2C5B5003445 /* PFURLSessionFileDownloadTaskDelegate.h */; }; - 3AA82138BFF90068E1DF5B3C168ABB51 /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 53FF030EF4F55FF673AA368E802BA1AD /* BFTask.h */; }; - 3B2D709EB0DA90F1A0A645FDA783B79E /* PFCurrentConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 85AB3D3F633121769C963DCA3B59E6D6 /* PFCurrentConfigController.m */; }; - 3C0939EEFBF9C272642218B8BF390AF6 /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 85C7493C5ED4D1548757C3A048535862 /* PFRESTConfigCommand.h */; }; - 3D11FE763F5433C94FD28761CBB85E75 /* PFQueryUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 378A8BDEE3062C91F84C778871060257 /* PFQueryUtilities.h */; }; - 3D83AE96FEF1D9DC83B211099BADCD42 /* PFConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 435286DE6414AD754A172CA441F36643 /* PFConstants.m */; }; - 3DEA9BC8FEFB0F3EDA1021F97034E551 /* PFObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = DD991348470823191613124528FDAA2E /* PFObjectState.m */; }; - 3DF9C26FB433C59C8D512FCE0C89BDF4 /* PFObjectBatchController.m in Sources */ = {isa = PBXBuildFile; fileRef = CC134A9DF660C6CC1845802A0025F10D /* PFObjectBatchController.m */; }; - 3E39A5289A0F29B5D83FF16C7428D27E /* PFPushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 26B663E68AA063970F54C5A4311360EA /* PFPushManager.m */; }; - 3E7AD54BEB829BE44D66654B265DAAFF /* PFCommandCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F09FE7B19C3276FA4D8099145F0898D3 /* PFCommandCache_Private.h */; }; - 3EB30C9EA4E091F05E2A7C5E855FFC16 /* PFApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = B5AA5A6C3CB437DD04C72C5E6E53B305 /* PFApplication.h */; }; - 3EE64147BDE55FEE67FF5E18995948CA /* PFCommandRunningConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 2FE59B575E6D95DCA7C8B65A48397212 /* PFCommandRunningConstants.m */; }; - 4159DD3856C1195D30F92647848F82C2 /* PFObjectFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 549E8AA3A0932BA40BF11C59E1C2C7BD /* PFObjectFileCodingLogic.m */; }; - 4249688CFBB92CA26E922E6C47AFE8F0 /* PFACLState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A9E567CF4EF740CD931B21421CDEF9E4 /* PFACLState_Private.h */; }; - 42DC601C4CFF768DD66ADB341BC27B01 /* PFTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = FCF80651D0D3D3178E086F081B09AC3F /* PFTaskQueue.h */; }; - 42FB395EE90C8D23200DB0C4FECCD171 /* BFDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = C0E20B62BF2BBA3C871D3C7A2F6BD617 /* BFDefines.h */; }; - 439341734A48F1416D32E028917737A8 /* PFAnonymousAuthenticationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 152FEBFF4B90D0D9894CED8063D4D7D0 /* PFAnonymousAuthenticationProvider.m */; }; - 44F7262AB6C8008A410A14E65A3838E8 /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = 01F9E3D986D34EB39EC1D2728FB49D75 /* PFCloud.m */; }; - 455345B64E2D163C4C7F33A5177BB9E2 /* PFObjectFileCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3257C6D2F1664400BC0FA089A7A688A8 /* PFObjectFileCoder.m */; }; - 4600B58DFCD0B25BD4CD4945E02859FA /* PFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E6DCAF78DAAF81EC8FC6B8AFC7ADDD1B /* PFNetworkActivityIndicatorManager.h */; }; - 4603A217FF729DCD6DEA7AFB1FAB60E2 /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CDE17945AABA4BFAB91FD36A9002DB4 /* PFConfig.m */; }; + 337CEF0FD2D5C1BB6678DD707EA56DA6 /* PFRESTCloudCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B55D2A6F5C29F672688ABE3737712C1 /* PFRESTCloudCommand.m */; }; + 33D40C6A5051E866D76B0CCF67CF541C /* PFErrorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = E09AFB4E5EAB3E98F681BBBEE934776D /* PFErrorUtilities.h */; }; + 3470652D4A3D8DF6369A8C303B7C433F /* PFUserFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CDBD2A39D34214C8D004ED2EB0D1624 /* PFUserFileCodingLogic.m */; }; + 3503373C9952DD9070E7ECAE238838F3 /* ParseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6104AB82845FA5625E51A56F2D3213B8 /* ParseManager.h */; }; + 35416F01689A7DDCE6E0D5668322F1CE /* PFPushState.h in Headers */ = {isa = PBXBuildFile; fileRef = 33A4732FF27318AD75D549D9D4EF9CF7 /* PFPushState.h */; }; + 3599E28E04EAB539A5FD9D834DC5A75C /* PFSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 12C95F161EE734C3016E891E9C306A42 /* PFSession.m */; }; + 35C36CD9503D9EC4A28209B5E035D087 /* PFPinningObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 576B1125C947E14A49E22D7F411DC55C /* PFPinningObjectStore.h */; }; + 35F26A4BE5FEFECFAA3193997D497ED8 /* PFUserAuthenticationController.m in Sources */ = {isa = PBXBuildFile; fileRef = D151C7604325CAC5209D9944C99E592A /* PFUserAuthenticationController.m */; }; + 3713BC71FAC8A9D24C899ACE945AEBE1 /* PFURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B4CDA57AC000136EA5B434611EF0426 /* PFURLSession.h */; }; + 37F1E816600B8383A177AFA48F9B9551 /* PFRelationState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B6D07518E33FDE1A7B76FABCCABCBCD6 /* PFRelationState_Private.h */; }; + 386430CD6BC461BEED2316A11FC8FE48 /* PFMutablePushState.m in Sources */ = {isa = PBXBuildFile; fileRef = 867A8434D57CE1DA9A2FFA7F45002F4D /* PFMutablePushState.m */; }; + 396E7A1AB7916FBCD13664E19DE2BC76 /* PFCommandResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FC0F52242A2200901325143AB469063 /* PFCommandResult.h */; }; + 39BAD8B311E33771256B966A57843B95 /* PFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5844FC1A0322F7909761B921AC033AC3 /* PFNetworkActivityIndicatorManager.h */; }; + 39CC63B33F77D1681BF28E360F70F51E /* PFRESTQueryCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F8C504A6034C0190584C29C9997115B /* PFRESTQueryCommand.h */; }; + 3A3493E61B348824D84A23B067E06AA8 /* PFAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4799A3AB2CC4C1F80574291738520C2F /* PFAlertView.m */; }; + 3A4BDE3681900808879A0C40B8E2F1F1 /* PFPushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C364D224B5FE61E8BA844FB66D55C5F /* PFPushManager.m */; }; + 3A7FA4B7E74C5E26CDE357F96FC98103 /* PFObjectFilePersistenceController.m in Sources */ = {isa = PBXBuildFile; fileRef = 97CC9DF74264B1EB7657386C54DD635B /* PFObjectFilePersistenceController.m */; }; + 3A8A15B0446E07D02673B6C26D33D1F1 /* PFCommandResult.m in Sources */ = {isa = PBXBuildFile; fileRef = B26254ACE198AC611B2797250DAECDFA /* PFCommandResult.m */; }; + 3BA271FC19614D18554DCEB45AA7C8B3 /* PFPropertyInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 81397E9A1C30F99B66BB50321A4C5075 /* PFPropertyInfo.h */; }; + 3CF4F8B20D4E0A674526ABC8D4FBCA50 /* PFProductsRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = F0B4809986AB679C74DF6F09D239764C /* PFProductsRequestHandler.m */; }; + 3DAE979FD23E68CCEDE5C9990E3AF75C /* PFACL.h in Headers */ = {isa = PBXBuildFile; fileRef = EA58A3816CEEB2481D5DE6BD6C227C8B /* PFACL.h */; }; + 3E37D17B235B28EE15722A4EC6292082 /* PFObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 718BF86CB0A3C4DB13DBC0EAEA86A9EF /* PFObject.m */; }; + 3E74198746ACFE9E3471838F88A99221 /* PFRESTPushCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D3CEE52CB984D4C4DB6A4F7A4903BBC /* PFRESTPushCommand.h */; }; + 3F52D5FD7AA3B7AFFE181B47D6E7EDC7 /* PFNetworkCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = A8D4C658312EAAA8ACC1463D1135ADCA /* PFNetworkCommand.h */; }; + 40931C180200922A9FA22B2987A25CA2 /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C7C0C503A3D3A88614601190439E30 /* BFTask+Private.m */; }; + 40BE6157F49EB2FAF540BF98C3446787 /* PFGeoPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 696CB0BED47C8B75EFCBA90955BB17EA /* PFGeoPoint.m */; }; + 40DDD41E4C564B7D3C9E0099BB6B9410 /* PFCachedQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C49C75467014FA33C9642023DA6F54D /* PFCachedQueryController.m */; }; + 40FE9D72CA9DA4CA46C68105DC932825 /* PFACLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = EAED133F8FBB016C53BC9D82E80C4D8E /* PFACLPrivate.h */; }; + 430889BECFF5F51BE84FC1D36982B334 /* PFObjectSubclassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = A9725E3A84362C8B373DA1D0A052B2CB /* PFObjectSubclassInfo.m */; }; + 43F261FEEA8A1683059CFFE377B80DB3 /* PFObjectEstimatedData.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A4BF349F63AC01086486C8E720D05AC /* PFObjectEstimatedData.h */; }; + 443A4588858747A69D9B526ED5778AB0 /* PFFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F35A9095465C7A589E9D7FC2F4774D8 /* PFFileState.h */; }; + 44F6BF9666346E13D5C6FBD2E3F1F026 /* PFAnonymousUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 56414F68055CC861BAB740091699D58B /* PFAnonymousUtils.m */; }; + 45748239D7FD943D62792FAD588CDFA1 /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = EE2CAAF3B10EA83469E9BF55744C5A56 /* PFJSONSerialization.m */; }; + 45873E765FB3EAA10D59BFCEDCEC4320 /* PFRESTUserCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = BFDC9A22A2A96279B4BDF17190E2A775 /* PFRESTUserCommand.h */; }; 461ADD1403E940D9DB7BBB5B7323376F /* POPMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C3FE18EB564AF4087573DE6F3F2D3D3 /* POPMath.h */; }; - 475F7963B4C61315A7E81764858166A6 /* PFOfflineQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3395CE4D4A4BF8134C0A8860F1672838 /* PFOfflineQueryController.h */; }; - 47A6AEE5AABB891BEF9549399D9D73E7 /* PFThreadsafety.m in Sources */ = {isa = PBXBuildFile; fileRef = C73F19BD326FCF565056E28970ACD732 /* PFThreadsafety.m */; }; - 484758EE625E2C5FE161DF5FC17451D2 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8AC51F94ED4331609976AE134591C5FF /* AudioToolbox.framework */; }; - 49368492C042539DD291DAC1B71335C6 /* PFSubclassing.h in Headers */ = {isa = PBXBuildFile; fileRef = A872DF33FEEBCB36CF6A53343C39C8D1 /* PFSubclassing.h */; }; - 49ECD4E3A20E8D5FF2E8866D39CBAA21 /* PFDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = D1DFF36EC5F44CEE642F63092AE04BA3 /* PFDataProvider.h */; }; - 4A364A41B24FE3CEA692690F01EC6C37 /* PFAnonymousUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C86B73BF7530888F6D5B7414D36E50E /* PFAnonymousUtils.h */; }; - 4AAC7855E322D7DAE7A0CA82444190E9 /* PFRESTFileCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = E4C23C917DC34380EB14D2D8BC9FAA1E /* PFRESTFileCommand.m */; }; + 469CD764E4D9746AB3FE052DFC905A38 /* PFPurchaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 372AEF8690F07BECE3E348391A87DEBD /* PFPurchaseController.m */; }; + 46E08CFA7AAF23F9DD6E3CA9BDF1377B /* PFOperationSet.h in Headers */ = {isa = PBXBuildFile; fileRef = EBE833F5099FF7EFCCA0F9DF00B29E0D /* PFOperationSet.h */; }; + 47DAE36CDA380C8BA9C0A17C781993E7 /* PFHTTPURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF05F518409F76124476457E2514771 /* PFHTTPURLRequestConstructor.h */; }; + 496C5BBF325D1380F718B05EC92EA397 /* PFOfflineStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 7971DD333353B1B9C109052C86147DEA /* PFOfflineStore.h */; }; + 4A28BFE309A0D988EF39EE2EC9510164 /* PFRESTCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = FC1EC8B36049F8C298B8193BA14B5E03 /* PFRESTCommand.h */; }; + 4A81A9C50FCE3083B83AB000B52A4C4B /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 73BA46E681EC6D99B36A7E314941B82A /* PFEncoder.m */; }; 4ACF656AFA1302DCF387C7A2D0F238F2 /* POPVector.mm in Sources */ = {isa = PBXBuildFile; fileRef = F0B4105C7EE2DA010EA4746E79138C7C /* POPVector.mm */; }; + 4B4AB0A2CF5ECF807CC6D6BE5057AA22 /* PFSQLiteStatement.h in Headers */ = {isa = PBXBuildFile; fileRef = 71D39E34A21D15F057EC75D91D396416 /* PFSQLiteStatement.h */; }; 4BA566241FA98C1D5E4A5284D84EAB71 /* POPSpringAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = EB56BE02F1B0412A41C9D9834B04BC30 /* POPSpringAnimationInternal.h */; }; - 4BCF78FFDDD8496F50F1A118A174798A /* PFURLSessionUploadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = FAACEF17AA010DB91B4F2D152A8E2E5A /* PFURLSessionUploadTaskDelegate.m */; }; - 4BF28D461EB13C411BFD5E5F994CD533 /* PFQueryPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = B727105265500960B53BB43FD44AB19E /* PFQueryPrivate.h */; }; - 4BFF96298060C7DCE7D155E9DF5AE15F /* PFOfflineQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 64A6FC072C0BE15E0FB1732E5E7BFA8F /* PFOfflineQueryController.m */; }; - 4C16A85DDD642113F35D0FBE466CC05D /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = A9345BB3B8924E56D392BA3231701002 /* PFJSONSerialization.m */; }; - 4D17AF3B64FAB28260209C8002E5FDCB /* PFCommandRunningConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = F954000E663E08C66A7FF9913EFEA133 /* PFCommandRunningConstants.h */; }; - 4DFF084DEA71D9DBB38CBD17040A9BE6 /* PFRESTFileCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4880CA362DCF456DE8C64954480CEB /* PFRESTFileCommand.h */; }; - 4F6883A6C338249681BBEE3EDC5751A9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - 4F8683A479B5509C5B50AD9668CE72C6 /* PFURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 453D0F6EFB50B07FB491E7A1E373EAF6 /* PFURLSession.h */; }; - 4FEF53FA4202399B466C4267631A2378 /* PFInstallationIdentifierStore_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DADC9D70AC397C40456C71C7BB5E5F45 /* PFInstallationIdentifierStore_Private.h */; }; - 5028171FC9AF8B50968A95E11969D57E /* PFCommandURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B12A0FF8B77277D84507AC79070FF41 /* PFCommandURLRequestConstructor.m */; }; - 50421F3920DB209CE4F4DE80A20C4FE1 /* PFCommandResult.m in Sources */ = {isa = PBXBuildFile; fileRef = F3F84D9899A9D129807B810BCBE9535F /* PFCommandResult.m */; }; - 505024039D01133D2E06C44BBC09FC07 /* PFFileController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DBAF5788AC957A98F8DA82DF0E007A8 /* PFFileController.h */; }; - 514CBE462E226552AE0071539F471C25 /* PFCloudCodeController.m in Sources */ = {isa = PBXBuildFile; fileRef = B3919700A3759610223FD35F92AB0AA9 /* PFCloudCodeController.m */; }; - 51690C672CFECB44023EC60A02654A47 /* PFUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = B6142CFCE45847BB7B5926039074D3DB /* PFUserState.m */; }; - 523D293ECDD5E0641F0FC2A7F3520325 /* PFCachedQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 82C15773B786AB50406081B6A022CFAA /* PFCachedQueryController.m */; }; - 5390B6329EF5D9F0B82C429D8B1EA584 /* PFDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E9D9F93BE35D535FACB0F23193B2668 /* PFDevice.m */; }; - 547D96860F208D16B73B9DAE7DD796F0 /* PFFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C3DD022C4A01AA56BB0CF97F8B732F1E /* PFFileManager.h */; }; + 4C3E4F71058661B73B9327E1BBED5B13 /* PFPushManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C96C8283235BCEAFB2B6F132CE911578 /* PFPushManager.h */; }; + 4D2107B82EB19D5552F0D8643B72A7F7 /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D5A05A4C5F9BA9C066877A324EE3B697 /* Bolts-dummy.m */; }; + 4F5DB886DFF123A9B153B4B09E6AE057 /* PFMutableUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = BE2646A9566B3A11A2F19AA8D5D15E62 /* PFMutableUserState.m */; }; + 4F6006F15CF4E92C3FABBB82AA76FECD /* PFObjectBatchController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FC52A2F51F3D38AD751DF3CC9B7DA95 /* PFObjectBatchController.m */; }; + 50605C083705C4639C1DF50DCA513783 /* BoltsVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = A7B5535D819421EFD2C8509D19D9430E /* BoltsVersion.h */; }; + 520C83141D41FC85B6C1A563CDA10C70 /* PFRelationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = C9076753B0A2E12983ECEFBE60C6E4A3 /* PFRelationPrivate.h */; }; + 5311B039E395DC406C7B4A16B4F20D57 /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B1F17F7CC5A76F9BE1ABD011A8AB9C7 /* BFTaskCompletionSource.h */; }; + 5374E8CE7E7C39178DE04676172D49A9 /* PFURLSessionUploadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 95C6F24D93DAFD0A99EFD6D457EB68B1 /* PFURLSessionUploadTaskDelegate.h */; }; + 543A2634117075614FDC4858F28CE298 /* PFFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1018BFE57D5EDCC0B72E6A255BEC0971 /* PFFileManager.m */; }; 5520088E66FB2528F595AA617FFC5D9A /* POPAnimationRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A5F7AF86D19E519B94AD6D8CB98CC34 /* POPAnimationRuntime.h */; }; - 55545DCF029201A06D7DE175F9C42D33 /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 365E961AFE93318B968A4EAD9C3042AD /* PFDecoder.h */; }; - 55E308B2B58B975F0BAA49C27FC58AEC /* PFPaymentTransactionObserver_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 865C327D27A51821F5096832A0A79CD6 /* PFPaymentTransactionObserver_Private.h */; }; - 569380E544C45B1C7B618A7A718A32AD /* PFUserFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = BD96834E719E340094942FD1EC1DE357 /* PFUserFileCodingLogic.h */; }; - 5842D3A6FC8E81680A5B79C48D17FC79 /* PFQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 38386024B8BB9B3B8F22D7B1FD578A31 /* PFQuery.m */; }; - 5878E73A35257C993AA48202DC4AEDEA /* PFObjectLocalIdStore.m in Sources */ = {isa = PBXBuildFile; fileRef = B7F689B7A8A241A249C1A39110F19728 /* PFObjectLocalIdStore.m */; }; - 58B8E1D6990DB1F4816D4F32EE50A8EA /* PFObjectSubclassingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B8726A00CBE872AD6EEF361F3E1A9BE /* PFObjectSubclassingController.h */; }; - 58E120C5EE7D42D5D881715B390A2CBD /* PFSessionController.h in Headers */ = {isa = PBXBuildFile; fileRef = BAC76B9259ACF68B0E7869A148AE8EEE /* PFSessionController.h */; }; - 592AB331F20CA58D7CDBF114CA8C9050 /* PFAnalyticsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 12C263F3A518B7482AA7F6DA83C5BE2A /* PFAnalyticsController.h */; }; - 595FE58B33E24654D8C217CD9EB3F225 /* PFQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = A211C4790E0A281B7800BE2B399091FF /* PFQueryState.h */; }; - 5968EC5B21D336B66F3A27966F5F9D1A /* PFACL.m in Sources */ = {isa = PBXBuildFile; fileRef = C849D153FE3E4A235A12279407367FFB /* PFACL.m */; }; + 5569DBBFB4ABCE878961443B04A8F22F /* PFPushChannelsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FAF3CA5F19C3EB426FBB8AC2A926793 /* PFPushChannelsController.h */; }; + 569287C78D527E46F67C066FF86DF966 /* PFAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2127EF3ED0DD02367DA4C3463002ACB7 /* PFAlertView.h */; }; + 56D20A2BFB5FC35FAC94E73E472FD291 /* PFFileStagingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 623D1DB3CEA9317B7323E1B4435A4B04 /* PFFileStagingController.m */; }; + 57BDE0042C46044BDA9F9731BE767BF2 /* PFUserConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 619BA5C9745FABA615C1071117CF49AF /* PFUserConstants.h */; }; + 594661284E1136D1D927A831478A58C8 /* PFThreadsafety.h in Headers */ = {isa = PBXBuildFile; fileRef = 050B2D7FC8433528EE96A73D6084FDCA /* PFThreadsafety.h */; }; + 59470446A0F13135B25E820D1B76EE20 /* PFMutableUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 72E4522345A892B89A84489DB3B8F316 /* PFMutableUserState.h */; }; + 594CB78A508EC57A208E26DE4240AC4F /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = C0F939B16AC0EFB29DA8BB09980593E3 /* BFCancellationToken.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 59834354CB20F36C447DD2955928EDDE /* PFQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E9FF91DD2DCE7D504DE6C0AC9CE6091 /* PFQueryState.h */; }; 598B48CF82CFFBA09F8D6D1DDAA489BF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; 59CB94574F710422B4C9CD6D388CCA03 /* POPCustomAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 928EC8B9105DA581C7896C2102E87BE2 /* POPCustomAnimation.h */; }; - 5A1596920E1BBB2807BC094A7CFE4F6F /* PFKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 36E5C28B728EEE2896643C1BD0BB1E3B /* PFKeychainStore.m */; }; - 5B6CA23721DBD9125BA38228F7FD39D1 /* PFObjectSubclassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 98821C83404F255ED479CAA0E69D588A /* PFObjectSubclassInfo.h */; }; + 5B685F83F56F617391F88FD766346D1A /* PFDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D4E5CDB238B4708D75EDFA04F2388C5 /* PFDateFormatter.h */; }; 5BFDF4E4848A83D2225D948A6D0B79B5 /* POPAnimationRuntime.mm in Sources */ = {isa = PBXBuildFile; fileRef = E85E0983DBE882A8009D0F7EAB591B91 /* POPAnimationRuntime.mm */; }; - 5C383F280EBCA5293E7102391980CAFB /* PFReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = D1DF8C126A878F1FFF7DB1A3BEB96647 /* PFReachability.m */; }; - 5C5BD8C3EBACA8E787A84BAAB4A416DF /* PFHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = B4F105DB0D9A5C8E74B80DB5C0C9BEFF /* PFHTTPRequest.h */; }; - 5CEE55D83FAA669CBB68FD3C8DD4AC6A /* PFRESTConfigCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 48056B31A860AAD6950C3519A539F495 /* PFRESTConfigCommand.m */; }; - 5D1AA90E597CD5C17D453D1E3C39BFD5 /* PFAnonymousUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = B88FEBD183FE3500545B1AB65A492E8B /* PFAnonymousUtils.m */; }; - 5D7484171082562F2D51A3AF11AF2363 /* PFEventuallyQueue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B72923D868E99D0FEF748E99A0931A2F /* PFEventuallyQueue_Private.h */; }; - 5E09B9BE3904EEA4708C2B696573E6F7 /* PFHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C28BCBA3F60C895444F215DF1A28EBF /* PFHash.m */; }; - 5EE490DADEA2FE08D4CAFBC21E35821C /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 96444BC173DBE095E670C72753A21C51 /* PFQueryController.h */; }; - 5FAB5E76AB21A0CEEB8A3792F4905E01 /* PFPurchaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = E0AF46F24F89ABCDCB18AAF5BD82D7BC /* PFPurchaseController.m */; }; - 61031A606EF2C5F521E09B81D4206B0B /* ParseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C4513EB4F24A2BDEE3106F5C83A1664 /* ParseInternal.h */; }; - 61864772C3678C9ABEDD45DC028B0A16 /* PFOfflineQueryLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AE6501423148E55391488B3AC17AF1 /* PFOfflineQueryLogic.h */; }; + 5C19F0A13BF4CF2730EC0980905D19C5 /* PFApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = EF733EE510CD105F55AD2996CF7D7F94 /* PFApplication.h */; }; + 5CED75FE18276FFAA65BA5C3736DBBAD /* PFCommandCache.h in Headers */ = {isa = PBXBuildFile; fileRef = CF75EB65BC1D473202CD8BD2F8F9879C /* PFCommandCache.h */; }; + 5D791BF555DC7EB786672923861195D2 /* PFCoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 611FEF49E42DDEF17150301DFA476527 /* PFCoreManager.m */; }; + 5E61BAC7772421369DA00363F31DBADE /* PFUserAuthenticationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 13AAF6B43993D5DCA1ABA1E0C06822F9 /* PFUserAuthenticationController.h */; }; + 5F0405B82B5E4A4E8875AAAD48EAFF78 /* PFPurchase.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DDB11ED96EBA4EC3BB398585D212BD7 /* PFPurchase.h */; }; + 61432F6CE266B1C52A7F75C11A36DE54 /* PFErrorUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A2E0CCEE8F29A9378B50A30B3F234FB8 /* PFErrorUtilities.m */; }; + 61ED0A41D76F0726400142A59D904E8D /* ParseModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 90312FA789CD74048F0D32BCC9C66D08 /* ParseModule.m */; }; 620920967F6C1FB5C501AD33EFDA1639 /* POPAnimationEvent.mm in Sources */ = {isa = PBXBuildFile; fileRef = C0DF3C83EBC5F7BF6DAAACEBD7D72791 /* POPAnimationEvent.mm */; }; - 635F29ADCD59325D8BA0238349FD779D /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 09FDB3ED688B893DC31F13212A092E58 /* ParseModule.h */; }; - 63743E46FD2F8750E432BB83F546C054 /* PFConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 50F5D5E8541B4E9B381B9D48639498A9 /* PFConfigController.m */; }; - 63B266F8B6708759E8409E2EDE1E5AEC /* PFPushState.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6EBD92B6893560E360E020C1911D5A /* PFPushState.h */; }; - 6602802B478E4FBB6B7D42CC47DFB9FD /* PFProduct+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 66778E4EF145FC32D4ED5D0B3B643425 /* PFProduct+Private.h */; }; - 672DE43F5009AB262B9AEF3F7D3B824A /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D5FFAB9AA9026C7A87341B6E4F0D9D7 /* CFNetwork.framework */; }; - 677760404A1F4FC247880760F1EEC082 /* PFSQLiteDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 80E779232DDE695E182A465B9AE80CB8 /* PFSQLiteDatabase.m */; }; - 6A1C6A825690B1907AE9796BE195E449 /* PFBase64Encoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 84C9421C2D04758A8862D5D9334EC3D3 /* PFBase64Encoder.m */; }; - 6AB23830897DDB0C99C4F74A860D59B4 /* PFCoreDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C954AD66C579F4C80C80E36A0D3E80B /* PFCoreDataProvider.h */; }; - 6B7257CD27F3B6B8D8591FA9BDE24943 /* PFQueryState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FD085377EDB67B301B8EE26D9310CCC /* PFQueryState_Private.h */; }; - 6D04FB4F8DD219426617F3AF0D840358 /* PFCoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F3B17068042592957DB4087CD527AE51 /* PFCoreManager.m */; }; - 6D06DC94B5F17AD59B6D8D7125E50C59 /* PFURLSessionDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = CCBD5F36E99EBF39758767076681F918 /* PFURLSessionDataTaskDelegate.h */; }; - 6D56120FE9DC80605D0B11E028828E9A /* PFInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C0B84AF80B3F79D3684EC294B10145D /* PFInstallationController.m */; }; - 6D9EB02700C618D8DBF48C2355B3406D /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F8ECF258A9931347A9663B788331F1 /* Bolts.h */; }; - 6ED4CEFEAA7F0414622FFE7917495648 /* PFBaseState.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B7AF33E13FC52EAA4B353E736F48431 /* PFBaseState.h */; }; - 6F82531660EECBDAEF14269319E36A07 /* PFConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E210FB710EEFE34D8FB35378F3F6F935 /* PFConfig_Private.h */; }; - 706A7F05867293F78C927FDF9C10E745 /* PFFileDataStream.m in Sources */ = {isa = PBXBuildFile; fileRef = E43B375F1DC0B3C39D4F8CBCFA1B51A2 /* PFFileDataStream.m */; }; - 70AB083C56EDE94F0CDC6A27CE2D00CE /* PFConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 310661341392FCCCCA69B3D4AA745597 /* PFConfigController.h */; }; - 71553F54471B3ABC03CF3B999CE5915C /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 023787FB361088A0CC1401AF3EF0BD44 /* PFUserState.h */; }; - 71F348ADDA3A9335484A60D7908EBE62 /* PFInstallationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 82A5F04959D1ADFDEFFC1808EF20F799 /* PFInstallationConstants.h */; }; - 73182BB18ED83668DED496548790559E /* PFFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CECC0578B9328DAEB8EA4E274B9D16A /* PFFile.h */; }; + 621279BB6006488862FBED865442AD17 /* PFOperationSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DF9D409D2807A34B747777E2DC97F14 /* PFOperationSet.m */; }; + 6398F44FC456E6FCA1592AD36FCDF9D4 /* PFPinningEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = F38E2E7F98830316F576F45842FC59EF /* PFPinningEventuallyQueue.m */; }; + 63E39227EDD9668A6E8BC71B368A468A /* PFInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FA17927867D6B7D6DADCC59515AAE7D /* PFInstallationController.m */; }; + 642D57D3B89C7A445FF70615D32FF5F8 /* PFRESTObjectBatchCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = D77774D5F665986858DAD577093BF4F4 /* PFRESTObjectBatchCommand.m */; }; + 655081C07BD22C6D7E64FD52025748A0 /* PFPush.h in Headers */ = {isa = PBXBuildFile; fileRef = B2256E19F54D3528053251E979C5257B /* PFPush.h */; }; + 659C6F42D23ECCCD7B01C02A20779C9D /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = FD6EC1E48FAC08767E731AE5659D8A3E /* PFUserState.h */; }; + 6625ABFFA433446F0AD935A23A5BBA3D /* PFFileState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AF8F0B7303C117779BBEBE048717710 /* PFFileState_Private.h */; }; + 686A7F89082DD9140CD3DDC0E6904483 /* PFInstallationIdentifierStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 53F56D358828987779F91894A792A4CA /* PFInstallationIdentifierStore.h */; }; + 687532EAB67048417C42A2035ABC94C5 /* PFCommandURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 86589D24F969C8D7ABFA2C300F854F18 /* PFCommandURLRequestConstructor.m */; }; + 68D20B8A77AD61D8796513B9176D3290 /* PFMutableObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 00835672E9411A4D0F46362CD9FC93C9 /* PFMutableObjectState.m */; }; + 69154DBCC2477D0C7A4F745CA0DADE93 /* PFAnalyticsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 722BD969D4C4074223C4A656C0F6B7E7 /* PFAnalyticsController.m */; }; + 6920CB7ED6DC80E0D75D9F2FF4A32886 /* PFURLSessionDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3AFFA6C615F4519F0FD6DD4EA4194C /* PFURLSessionDataTaskDelegate.m */; }; + 69AAC2D0D00269D9768C8D7F8682F0E5 /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = 53086C5F8B1EDBB0614BD2C21F7CBB35 /* PFCommandRunning.m */; }; + 69E80DB61969642C17191BC5BBA98A29 /* PFProduct.h in Headers */ = {isa = PBXBuildFile; fileRef = D9F83A22B0271BB18AA8680451C70138 /* PFProduct.h */; }; + 6A533C5F4EC965A14EF04454F44BFF8F /* PFACL.m in Sources */ = {isa = PBXBuildFile; fileRef = DED2ECAD15A2BED79633C019904DB280 /* PFACL.m */; }; + 6A93F8BA7D137B0EDE155E86F464C4C0 /* PFCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B340A85871E94B6C963F8AC7AA61A3 /* PFCategoryLoader.h */; }; + 6B36C3C0CC3704D7094501B152180465 /* PFRESTQueryCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 132B11DB4450BB2DC8926A20B853B6AD /* PFRESTQueryCommand.m */; }; + 6B4B0E078B36ED6BA341705E30747327 /* PFWeakValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 078642F5D1917B58A6998424887BD706 /* PFWeakValue.h */; }; + 6B8677DEC15D1D29722EFE9C0B6BF6E4 /* ParseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = CD24A497637B97FB13D87D8C73E642D5 /* ParseInternal.h */; }; + 6BFF6EDB4C8C521CD4F3DAA75AC1805A /* PFFieldOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AD6E87805E310F6517D29CDFEEE9587 /* PFFieldOperation.h */; }; + 6D95E647A7F297CD5158021B8FD3ECCE /* PFProductsRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = EE6E133088AF492F15B3EEBDA616077B /* PFProductsRequestHandler.h */; }; + 6DAE8FA462265C812F6E4DF0A55AEF3E /* PFPinningEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 15C0132F3858BCC88CB28061A960F0D1 /* PFPinningEventuallyQueue.h */; }; + 6DBBFD7DD52BE4CDC38C8A5FB05F342E /* PFWeakValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5880D4CB5AA7C367A9C45BE209F6CED6 /* PFWeakValue.m */; }; + 6DD3D07AFA4F7CA2CD9C301E85689F27 /* PFDefaultACLController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B52BDCCABD35EA2D1C44912753D79E1 /* PFDefaultACLController.h */; }; + 6E51AD72EEA9BB0640F71452899AE452 /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = AFBDA3EF95CECEB449D3303D17FA28C2 /* PFURLConstructor.m */; }; + 6E5C3BB91BA09FB4513D0721465C4FFB /* PFCachedQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 53F21E51B835CE481CAA7ADCD43FC400 /* PFCachedQueryController.h */; }; + 6EBFA4F90244DC3C8A8C531D0616F725 /* PFObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 248BBC0B2BBF2B01CCFCC79F7FE785AE /* PFObjectControlling.h */; }; + 6F6F629E71E042C4CBD0BEF41B092779 /* PFPushController.m in Sources */ = {isa = PBXBuildFile; fileRef = 35A7823CEFBFE2CF5ABB3556EF3D0995 /* PFPushController.m */; }; + 6F9126E3FFC98310534685D7A8B31E82 /* PFPropertyInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7334DBEED1B1C3906828C55F380147ED /* PFPropertyInfo_Private.h */; }; + 7139362B02E25FDB87C5DE753807A988 /* PFKeyValueCache.h in Headers */ = {isa = PBXBuildFile; fileRef = AD088079F8066DB0050C23252546389D /* PFKeyValueCache.h */; }; + 72013EB65410BE1E5CA73DC32B0DFE11 /* PFSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 880AE19807FD283D4EB9724F21F4E548 /* PFSession.h */; }; + 721650D6F618B7A6F1C1ECBB033544BC /* PFHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = ECF03863A8796C16D65EE3AC73DEC5B8 /* PFHTTPRequest.h */; }; + 72C1E0F7FD22531F9422D5E312D251D0 /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = 8133C4680D6ED2FB7338EF30FC88BBCA /* Bolts.h */; }; + 72E104B003B673F8875E48CD3A237C23 /* PFCurrentConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 00AC73B1D5A77DE4B493A990018DA825 /* PFCurrentConfigController.m */; }; + 72EDD8852F2BDAF5CEA81572EF096E58 /* PFOfflineObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CCEA16112CA90E44E0E982B2A2B27D3 /* PFOfflineObjectController.h */; }; 7396B761D2B10B38F3FB6A02E916531F /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 419B671E948384A84974D819F4F24FBA /* Pods-dummy.m */; }; - 73BDD98109DBD5F8CB2BC86755DA6963 /* PFPaymentTransactionObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 45C24BC4DD0B5F2B7F803B32EC634F9C /* PFPaymentTransactionObserver.m */; }; - 746236A021A40EFF2B68DA0B1D1835E0 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A85428811E6DF1E07CDC7F512CC5CC56 /* Security.framework */; }; - 776745BC8D80FF6CC924AB8DE9FF048C /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FA13E8424FDF032B807EB307AF448F7 /* PFUser.m */; }; - 77E89B2E0FF110D13685EF42B8AFFDDD /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = 99FC3FA412F7A62CE7905F3F3DB1A2B8 /* PFBaseState.m */; }; - 784BB509549AB4E658F95135964F8BAA /* PFRole.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EA62081F6F193B86D2CDD0A04D0E99C /* PFRole.m */; }; - 792E4D8A30E2483D3D4E4154EEDA8636 /* PFDefaultACLController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2218553C181F20F306EC36D9B7169974 /* PFDefaultACLController.m */; }; - 795A66B7F6728153ED7333F9304F9A7A /* PFTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F2F5693477E620DC6D5E2C3F6627CDA /* PFTaskQueue.m */; }; + 750884DBC2F9D2C41A1C81EAB8E11978 /* PFInstallationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2B236ABC299A669D53E54FC6FF7414 /* PFInstallationConstants.h */; }; + 756DA89EA9395CB7359CC904E06BAA18 /* PFCloud.h in Headers */ = {isa = PBXBuildFile; fileRef = A12B04A764E33DA1C04C5C989B5C536C /* PFCloud.h */; }; + 763613884EE6DB9A9FA19FDA216D2557 /* PFHTTPURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 312D446A8E99BA072B9A091616AB0DC2 /* PFHTTPURLRequestConstructor.m */; }; + 7667FCD8500AD6A29077C9412887D793 /* PFObjectSubclassingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ACE89D8884AAB54C96F063FF438FA31 /* PFObjectSubclassingController.h */; }; + 76917A212479DD1B43BF4D57305AB31D /* PFPurchase.m in Sources */ = {isa = PBXBuildFile; fileRef = 20AC43D5B60CA86B1AD76BC5D4591D96 /* PFPurchase.m */; }; + 76B0379D807CF3B4B2097F46DD7F3865 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 72BD4751F46AFBD16AE367CAE3FA8785 /* BFCancellationTokenRegistration.h */; }; + 7708D5EBFAEEC08D4A1484B5E19F1EC4 /* PFLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 425CA0B11664DBBBEAA5C27618F79FAD /* PFLogger.m */; }; + 7745A799CA4ED9892587851FBF71E345 /* PFURLSessionDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E5945950FBDA34F155BE025094F2F22 /* PFURLSessionDataTaskDelegate.h */; }; + 7802CAB6E61C60D1015477E448730D85 /* PFPushState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9ED7955943D662DC1DC137B29185582D /* PFPushState_Private.h */; }; + 78C6EFE00AD49FD7773149CC43D5724A /* PFPropertyInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DC21BCC836700655FF0FC5118F41587C /* PFPropertyInfo.m */; }; 795E704A17919AB70FF6F5738289A44D /* POPAnimationExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = 22DC4C87D619EF0F28631B5560E82333 /* POPAnimationExtras.mm */; }; - 79D6635C152CD06216FD5C6439F3CFE2 /* PFObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DB9AD91F894187B691D13713E1FB4D9 /* PFObjectController.m */; }; - 7A128642C01CF8CA4F8EE6A6E4C72F00 /* PFFileDataStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 6516FEAA3036D59756B8161A5A9E7918 /* PFFileDataStream.h */; }; - 7A19C849063F55F3F2897A6FA6040B00 /* PFMutableFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 0007F67CE44CDB26AC0B26E0B4438F17 /* PFMutableFileState.m */; }; - 7AF60B83195278F6A42385CCE9F4CB35 /* PFRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = CA696D9F1B6B454ADB7158523225ED1D /* PFRelationState.m */; }; - 7B00A9814CF626F0D53212A4918637CB /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = 97519DB5264A8748FB5782787D62615B /* BFCancellationTokenRegistration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 7B3342EC54DBD89E80E6F767C016E0CA /* PFCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EA6C82779BDAB43BEF4E9F00620B3CE /* PFCategoryLoader.m */; }; + 799C410D6861767245C86294947EC504 /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = BC0C8A8C41DC1963D695265153E23911 /* PFQueryController.h */; }; + 7A645555139B041ED6863030E619072B /* PFOfflineStore.m in Sources */ = {isa = PBXBuildFile; fileRef = E342EB169F41501EE41BB76D5CA176D6 /* PFOfflineStore.m */; }; + 7ACEEE6226F28499972A0954D7E62D24 /* PFUser.h in Headers */ = {isa = PBXBuildFile; fileRef = CE37BCDB0808A581D8F23138D5B2B412 /* PFUser.h */; }; + 7AE8BFA590D9C85818D795FAA6A3E120 /* PFReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 42093BEF3F8BF73F39F33B7D65A8B184 /* PFReachability.h */; }; + 7B2ACE85B665E6234E698BF5BFFC05DF /* Parse-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A0F125F4185CBFE9AD59CB8DA8774D62 /* Parse-dummy.m */; }; + 7B42E1FCBFAF2E2E556BFBFB10A70A87 /* PFQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = E9B49219DF626061CA1102BDDE09600A /* PFQueryState.m */; }; 7B99231436CB0981EC5113A681AF7C8E /* POPAnimationTracerInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DA58C3428E2A0E2F88C2A0522297274 /* POPAnimationTracerInternal.h */; }; - 7BAFF7E342EDAE7B1819B699CE406D2D /* PFMutablePushState.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B2C19C0AF74CAAFAD47C599A4E9A495 /* PFMutablePushState.h */; }; - 7BB08B1B05AD918C30AE988E95A09D50 /* PFOfflineQueryLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 696FA42E303EDB3CADE000C9A7F03B68 /* PFOfflineQueryLogic.m */; }; - 7C3716AA37A820FD62570BB16F87ECB8 /* PFProduct.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C05D3A3DD0A525F6B31D006CCC2D2F4 /* PFProduct.h */; }; 7D2E1DA076E379421DF5A9E74C0FD4DB /* POPBasicAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = F54B1AE39CAF0CA846C1C729B033E047 /* POPBasicAnimation.mm */; }; - 7D39BBF1D1FD51363802C929BB8C6515 /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 714C2B37BE3060D4E9F3C32DD8DA8D04 /* BFTask.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 7D485860692A0F8A7DFA3A8677E6BB1C /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9468278E36B3EB05C5CA530058F1C8D6 /* PFURLSessionDataTaskDelegate_Private.h */; }; + 7D845F4DE461D22465CD1C2747BEBD06 /* PFAnonymousUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F3472D80F0C7C53B06E64DD4D56B74D /* PFAnonymousUtils.h */; }; 7DC645E712D9190C15F71B1B92844D2C /* pop-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 59B3FD41DEC22C5891C9B83C27BC25E0 /* pop-dummy.m */; }; - 7E098727FB711EB6459D6FED443F53D5 /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = A52D3DEFF51B24F1DDCCC3F6705AB35B /* PFCommandRunning.m */; }; - 7E9DA08882BFE2697F1C0E493DB63AC3 /* PFKeyValueCache.m in Sources */ = {isa = PBXBuildFile; fileRef = DDE8EAF4000D3A40ED79006C50ACC68B /* PFKeyValueCache.m */; }; - 7EBC8051564BAF8D7D3FA8900D846FB2 /* PFObjectState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = ACF9532A0D0C66EC20F4225EBD285526 /* PFObjectState_Private.h */; }; + 7E1562F052AEDE34309BF03D4C00C34C /* PFObjectEstimatedData.m in Sources */ = {isa = PBXBuildFile; fileRef = 59363C495BDE76341FC7C70BE565EF4A /* PFObjectEstimatedData.m */; }; + 7E7DEA7F45E08BD27B568717F16EAF0B /* PFPushUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EC7BE51CD7D82DB749F5857D70F22F1 /* PFPushUtilities.h */; }; 7EE77B776CF54D5794EB5D9DB5FCF8D4 /* POPPropertyAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = F81E8633F1E784423FE8B9BE16D38981 /* POPPropertyAnimation.h */; }; - 7FE988AA3ECD89B7101E701BB7302E21 /* PFUserAuthenticationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = E57BA8CF64D8018BCFEB289F81C3B448 /* PFUserAuthenticationDelegate.h */; }; 804C70F77F75F0E75ACC3E3E4B47B727 /* POPLayerExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 9663A817A809169745F3F8E987FFE076 /* POPLayerExtras.h */; }; - 8113CBFC7712DB6C088AA0E319CD74DE /* PFMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A7AF22DC435894F3927644A0B475DFA /* PFMacros.h */; }; - 82871F1A3C4D6E604FCC1567E42C1275 /* PFFile_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FB82515BD6D0F9EC91327CB819F8BC6 /* PFFile_Private.h */; }; - 85131753F499D61CFB65053C9BB9F7C1 /* PFJSONSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = B507DE9CFF3C90B0CFF815EF53AF8474 /* PFJSONSerialization.h */; }; - 85996EC1B7350B6DB8689842667A01A6 /* PFMutableACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F5A413E6DB1455C1427DAEBF27B2133 /* PFMutableACLState.h */; }; - 861582A5DECCCCBC09E5D9B966806205 /* PFRelationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6753A9356424F2F8B192F9B14278EE8E /* PFRelationPrivate.h */; }; + 81A0777C4DAF87256B60351C9AEBA3E6 /* PFPushPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 110F3B75E3D3EC4A08CEBF6AC5B01CE0 /* PFPushPrivate.h */; }; + 843A8657E58A5C6CF6439EDDFC6792C8 /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3C0AB42ACF3767DE19D18A31901BC94 /* PFObjectSubclassingController.m */; }; + 84826CB970129BA778C3A48CCB1B68A3 /* PFMutableQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = AD0E30A8555AA525BA9AFC45114E9002 /* PFMutableQueryState.h */; }; + 8490465F1BE562C84A9C2CF7F2125F13 /* PFURLConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 84279F3B0C8DD145E9A9E04D59B81C41 /* PFURLConstructor.h */; }; + 8522518AEE7008DCC13F9A88897D023F /* PFSQLiteDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 6082FD21FE81654EC989E13CFA913CAB /* PFSQLiteDatabase.h */; }; 868BFBCD8263F71F8A14CBBDDAF5B748 /* POPLayerExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = 197635F0BFB93E63E82503F09B7AABBF /* POPLayerExtras.mm */; }; - 86AB6AEEF3D388454B3C58953671251F /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 94DE9F283B3DD4A47D7A8EA13D83D2C1 /* BFCancellationTokenRegistration.h */; }; - 88379476F82457BD1128F25055903097 /* PFOfflineStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 84ECBFAB9763ED2C04848E86CC5D6C1D /* PFOfflineStore.m */; }; - 88664732055B4AEB8258A9F776478825 /* PFMutablePushState.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7CA0102C3FA58C58F19240D8C4672 /* PFMutablePushState.m */; }; - 8925A30FFB9B9FD7A1F77E75DD4BB4FA /* PFOfflineStore.h in Headers */ = {isa = PBXBuildFile; fileRef = DD934234EB3517E8F2CAC1D699D9DC6C /* PFOfflineStore.h */; }; - 893CB7651BD45123335D9DFF5FBF2995 /* PFObjectFilePersistenceController.h in Headers */ = {isa = PBXBuildFile; fileRef = FD18AA79D76C38588E1A0AE95A99AE0D /* PFObjectFilePersistenceController.h */; }; - 8A943C6875FF0162EF1AEC7EBE5A127A /* PFEventuallyPin.h in Headers */ = {isa = PBXBuildFile; fileRef = F25C4200A9FE7F2B396804D09A24AFC6 /* PFEventuallyPin.h */; }; - 8AF4CC8804312196C7524D40045DDA52 /* PFCoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D24EDB2D5A2B95E2AC01499F225F585 /* PFCoreManager.h */; }; - 8DB2D81BD3208535DD815967F6C49A4F /* PFRole.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A8C828F2BF737F68E0CF5F2CE64D6C2 /* PFRole.h */; }; + 884628EDE5DAD0644DCE27A067163F03 /* PFURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = CB69D67914ACB9C94D9D8340F8255A72 /* PFURLSession.m */; }; + 884AF83BEB07D814F2E85E5DF5D1AC9E /* PFCommandCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 17C4E65BFD7461A5C5B88B9650622AFA /* PFCommandCache_Private.h */; }; + 885E3EC52D206058C4C8E9FDB31C6EC6 /* PFSessionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DB1B89CDD385F67E440201640C7AFA4 /* PFSessionController.h */; }; + 889D5DF1B5D854141AE48D0AE6AD24E8 /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = EC70489BC426131AEC77A58EBC61D6A9 /* PFRESTConfigCommand.h */; }; + 8A68AFFA32F2BBD210BBD27A1F1A4E63 /* PFSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E64CFDC86F7294DC0F63391554852CAD /* PFSession_Private.h */; }; + 8A84163B84117C1B37D4A421EE6A8943 /* PFTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 60AC5AE111695E87D9942D028A5723AE /* PFTaskQueue.m */; }; + 8B8C2F0BB0FBC8744B2B789306086224 /* PFUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = D9AD8A2E0B442B2597A5EFD99859CE70 /* PFUserState.m */; }; + 8C39E16E4A0EDC4C5864392126C2AB38 /* PFMutablePushState.h in Headers */ = {isa = PBXBuildFile; fileRef = DEEC86611B8BC477AFEF42C162C7DEC7 /* PFMutablePushState.h */; }; + 8D3EF8A73C774CBEC3A40FEBFAA6731B /* PFURLSessionFileDownloadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D29BD0D675C84B8C7EF1F88FD36417D /* PFURLSessionFileDownloadTaskDelegate.m */; }; + 8D8D0D14DDE055C1F9A3B7AD5C30513C /* PFMutableFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B07F2F4F2D16D912592A5F093A28DA6 /* PFMutableFileState.m */; }; 8DF9960DD96F9AC25E32BFDD4A3B53B7 /* POPDecayAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C560616DDF5273CF7C53EF72EA6ED45A /* POPDecayAnimation.mm */; }; - 8E33299A86FF84E02098DA642AD6A10E /* PFFieldOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FAFDD952B22B5410869339CD24F946E /* PFFieldOperation.m */; }; - 8E430CB3375D8ECB766249EA74730DEA /* PFObjectEstimatedData.h in Headers */ = {isa = PBXBuildFile; fileRef = BD06D82A2D98EDF6AE058093F67CCA71 /* PFObjectEstimatedData.h */; }; - 8EF3091ED56E21658415F17799557ED4 /* PFObjectEstimatedData.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D33981E62B4BA883B0FBE4A4DA1C812 /* PFObjectEstimatedData.m */; }; - 8FA39AC641BAE708A7EE2141F22CD4BD /* PFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = DD763184372CC604F25E4FDD0865B288 /* PFObject.h */; }; - 8FC831A96A9845FD32E258BC486937EA /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9ADF726213C599DDAE3F7A1849BDBF6 /* PFEncoder.h */; }; + 8E0F15A272B998241EB984429079E746 /* PFObjectUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A9E8271F4A4A2FE0F545A52010B99A1 /* PFObjectUtilities.m */; }; + 8EDDF70EB01189C643A552F542A5955E /* PFDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = A7BDDE2CC83877DFC9CF1466C53CB68D /* PFDataProvider.h */; }; + 8F1E1935F365BC4F1F4235594B8E2EF4 /* PFFieldOperationDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F6C6FD6DBA4896546009DD948AE020 /* PFFieldOperationDecoder.m */; }; + 8F946B1B0CB71A2E076491477639AE22 /* PFACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = CF3B2B472A7B4B67DF8D50DADB4DBF03 /* PFACLState.h */; }; 9088AFD3E6C678A42A8E0189F65F73B6 /* POPDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 90DA3C63E9AD758336342BC51C0BB859 /* POPDefines.h */; }; - 90DF839DD23B48C7F349F4E6C140CC53 /* Parse_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 588102B50CAE5BFD6658FF5042965B9E /* Parse_Private.h */; }; - 91D0209E7085A403B6EF6BACBACD9D5D /* PFUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B58384502B9F28F6975F16F9DB0EFF3 /* PFUserController.h */; }; - 925B22ED8DEB4DA9ACC946D2F9057997 /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = CCF8CEA9A6064ADBBF6FE4C06F58AC6B /* BFCancellationToken.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 930B72666B9FEA3D4172BEBB0EA55FF0 /* PFUserConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = F1C86CCCF50B7B1651DF1DDA93ECB2A7 /* PFUserConstants.h */; }; - 93B58C9AAFA9D0DC02CD2ACE750D9C96 /* PFACLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = CD5E24516E8C55549E6229A4A4A3E50C /* PFACLPrivate.h */; }; + 918B88539BDE8BCE275FBABA8A963FBE /* PFApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 546B14FA2F1DCF4C453346FC971CDDB6 /* PFApplication.m */; }; + 92F016328F4C0F799AD1B4A8E0DDE9A2 /* PFEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 7461F51B0EABADB21626FF904B87CCE5 /* PFEventuallyQueue.h */; }; 94BFE73B7E00A0FED987F553B0DCE94E /* POPAnimatableProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 313669CF0D1BF49C96C85FC593F4BC1D /* POPAnimatableProperty.h */; }; + 94C30DE66C124BFE8505467FB41BBEBD /* PFCurrentInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 72DCBBAC0FE8319BEC96154A134CD74B /* PFCurrentInstallationController.m */; }; 94FACE1C5E4B42AB129DA7326E4E04F9 /* POPAnimationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F210DEEA777E0BF1995DC3570CC616E /* POPAnimationEvent.h */; }; - 956D98E26539A6A2F0E81468C820B569 /* PFMultiProcessFileLockController.h in Headers */ = {isa = PBXBuildFile; fileRef = 74EE96B44DF0116B1160526B21D7D189 /* PFMultiProcessFileLockController.h */; }; - 95B2EDE938A1CF2D16213FB94E28D45A /* PFURLConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8B4ABBE8DA9D24096F873234FCA24C /* PFURLConstructor.h */; }; + 959FB0E5183326169568C347A926C0B8 /* PFDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 43D1212BEB11DE789DE0E4CC000FC9AF /* PFDevice.h */; }; 966900CAD39E8B592A35F8401549A86D /* TransformationMatrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E056FF5C4EC38A55B45FB52F395D72E /* TransformationMatrix.h */; }; - 96DCFE0E10BC455B9673FDA3ADFC08B1 /* PFMulticastDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4051AFB557520935D16F093222B0C0BB /* PFMulticastDelegate.h */; }; - 976B4AA8300CDE0748E1737C6700E72B /* PFObjectController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C5B446A2C8083573E71F021EB732F282 /* PFObjectController_Private.h */; }; - 97B018ECAB99E02838108858A9C5D9ED /* PFRESTUserCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B32B43DC93B94CD2FD151A51C7009B2 /* PFRESTUserCommand.m */; }; - 97D99230703F530162B00666ABC86E2B /* PFInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = 16E2644C0CFB5068F39B60EA663C06F8 /* PFInstallation.h */; }; - 994830D607E053C4CC8657055333C126 /* PFKeyValueCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 68F8CC838971F8BE4FD097EA7C5BF494 /* PFKeyValueCache.h */; }; - 99E9F4422BD6659050CAD42953A4A7FE /* PFRESTCloudCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CA96AB87A674FDD5847C707289446B2 /* PFRESTCloudCommand.h */; }; - 9B57BAF0B1A27BAEB40E6E17CA6355AB /* PFACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = BDBDCD188680D0AF62B9AC8AE7D15A8C /* PFACLState.m */; }; - 9B7BB3DBA4067247D4AA58A5C0B52B11 /* PFRESTCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = BF436F013E06183E4E80FEDB3EE6640C /* PFRESTCommand.h */; }; - 9C53501EEB56F92B450024D8E97054BF /* PFFileState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = ECEB10403A7DC566C15134DFE3373AC2 /* PFFileState_Private.h */; }; - 9CB9E73CBDB67F0BB0F98519571E6386 /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BB217AB66F98AB5F05CBAB65838FA70 /* BFCancellationTokenSource.h */; }; - 9D2280F3879F335F53726BAF1720A4F4 /* PFMutableRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = A94E11CCEE95914D7CE1B1B35E7C1F89 /* PFMutableRelationState.m */; }; - 9D58D3CD652D24573594995023EA6D00 /* PFFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FF58ECD6BEDF747B767ABEBBB293774 /* PFFileState.h */; }; - 9EE27BE5368FE1C2920DAEC66AFE60E5 /* PFLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 524FE09AA008388A357FA29376EBA283 /* PFLogging.h */; }; - 9EFED924B760485386CCF5EB3BA87A63 /* PFAsyncTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = CAD41F16643CC7AF395C0955965F308A /* PFAsyncTaskQueue.m */; }; - A03FD80CF4F2A5BE86D5337AA86EEEAB /* PFPinningEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AF5597A50326B2C756F30471E7EA8BE /* PFPinningEventuallyQueue.h */; }; - A1BA70FD107E98C3493B500B423C42E8 /* PFOperationSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 58B7C9659B0B47DE31498D5601CC2E12 /* PFOperationSet.m */; }; - A23412D088BB709BA230993F0381C88C /* PFFieldOperationDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FDE3C12C2A761D6DD2E3EFE88D9A85C /* PFFieldOperationDecoder.m */; }; - A28BF51BFC8CE83AA10CA0882B57AD94 /* PFSQLiteStatement.m in Sources */ = {isa = PBXBuildFile; fileRef = AF50C03C543FAF9B976475CB98E20B0D /* PFSQLiteStatement.m */; }; - A3534AED1EA0F6B4AF89B407FF2CCADE /* PFEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 512DF9E7249F58F9AF45B707F9C3949F /* PFEventuallyQueue.m */; }; - A37746B83E3B6776A578ACE28933CBD8 /* PFPropertyInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = FFA1F08A1EF895FBF3B8FD036E125613 /* PFPropertyInfo.h */; }; - A3BD95AA5A59D14116D714D0BF6DE183 /* PFObjectPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = B40C2F17FC5388F0013F8D1C257B70DC /* PFObjectPrivate.h */; }; - A612764E17DB84BC666DE6C36AE5D431 /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 527000AD7EF33A01F4034400FB51B6E9 /* PFURLSession_Private.h */; }; - A6C91C7166749D37E01ACCA5C2B74B5A /* PFPushChannelsController.h in Headers */ = {isa = PBXBuildFile; fileRef = A2F0842045651D9FD30403B5033648D7 /* PFPushChannelsController.h */; }; - A7E2FFC1434BBFE824CE9EE09E6E2E1A /* PFInstallationIdentifierStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 349789B8BAC6B5134BB027FB59B2DAE4 /* PFInstallationIdentifierStore.m */; }; + 9726AABD59B5FC7DFE5B754FBD4CCCE1 /* PFUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB7E49E278592D89DD351ACEB1287FA /* PFUserController.m */; }; + 98F6FA069E3C79D86CEF1EEB5EDE283C /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 4073B51D97588127A6EF20481CEC3025 /* ParseModule.h */; }; + 99839220426BCEDC551D14D33E965F73 /* PFKeyValueCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 50B0DDFFAD085BBF7A9EE5E4B41E834B /* PFKeyValueCache.m */; }; + 99A627BEE8CDA9E8724214F1D7531161 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7CDC14FF480C0D409AF7711FADC9DF1 /* CoreGraphics.framework */; }; + 9A386672D6BC9A0FEBF694BDDF02F83C /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 132074912F44DB77C37332C4CA8A3DAB /* PFInternalUtils.m */; }; + 9B996D4F00B2755BC7E39E84301B792D /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2171BDF0DFBFCB33F05FC9A1AC8B42B5 /* PFMultiProcessFileLockController.m */; }; + 9BDD798D159E329F52F7F8515EE88F7C /* PFObjectController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 381988C254ED0DACBFE2ED8164944325 /* PFObjectController_Private.h */; }; + 9BF33FD7A487A930572B4018194FF4AF /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = BC33018672D1C57CFC91D822DB867582 /* BFCancellationTokenSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 9FBE3E9BC1A8E3243D0FEC88022BA5DA /* PFCommandRunningConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3B93CF1C94B6DA6DEB3D31B9710F83 /* PFCommandRunningConstants.h */; }; + 9FE68887DC4906E768DC10E6FEC7BC39 /* PFEventuallyPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F48FD0FD7AA215B6C44D0D0D2B89AA6 /* PFEventuallyPin.h */; }; + 9FF0D77E5D6A8A71D3D00A6CC35E429B /* PFEventuallyQueue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B23ED4E70AA813C755E036B0600606FA /* PFEventuallyQueue_Private.h */; }; + A07615C44B09A564A1D5AA636366CDDD /* PFOfflineQueryLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = D552CBB2BF4CC751787C15E7A7B176DF /* PFOfflineQueryLogic.h */; }; + A0827A0C141A76B1517B3EE4198B0DF1 /* PFCommandRunningConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C7CE32C1AC8296CA307938E551C3B91 /* PFCommandRunningConstants.m */; }; + A1F6D97FD7A81F664C8F963087074FE3 /* PFSessionUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEB176EF3964EAF1E91BFCA999AC383 /* PFSessionUtilities.m */; }; + A283D115AB0163B72CF54838E83208EC /* PFObjectFilePersistenceController.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A4A542A64193B1380E5346BCEBD316 /* PFObjectFilePersistenceController.h */; }; + A374D4B38EEA9377979680400B9D7AA9 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 792D4196F6AB3ECF94F94E4B1A786D9D /* Security.framework */; }; + A3971E85AC1BFAFE9979360CCCCFA4BC /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = F1B0914AB61CF2B1F9D7ECBDE1CDA9F1 /* BFTaskCompletionSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + A3AAF279B04666F0C05D7927CE27A26D /* PFQueryState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 440A7F77699899974219AB5825962822 /* PFQueryState_Private.h */; }; + A519820C333BF4B2BF7490C991DE1D96 /* PFSQLiteDatabaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = 603F88D603FD21B1DB540C18DCB38780 /* PFSQLiteDatabaseController.h */; }; + A55836CDA983C1E665B1C57D7B7B71F9 /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = D342B7DAEB7FE6F3E3110ABADFD54C09 /* BFExecutor.h */; }; + A57EE3F25E0818AE1A729712F7031779 /* PFQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = F3DCF42F9B5384302327ECB9D53A53DA /* PFQueryController.m */; }; + A7596C495E396AA4ADAFEDD15E895C54 /* PFSQLiteDatabaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EE5011502D312C68238751D67BA76A /* PFSQLiteDatabaseController.m */; }; + A86527EA3EF359DC5B93896035962C45 /* PFRESTSessionCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 707C0020EA94AD091665CAAD43AA717B /* PFRESTSessionCommand.h */; }; + A8E9F368C383FD058B852D43922CF0F7 /* PFRelation.m in Sources */ = {isa = PBXBuildFile; fileRef = 57BAE3AE27D1DF554AB43ADF5CA1C592 /* PFRelation.m */; }; A9B701428585304B432F6FD45D7EB707 /* POPAnimatableProperty.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9565C73D5D4BE79747E60DCF1557E71 /* POPAnimatableProperty.mm */; }; AA0189A6FB9572B5BF87E3B0DD1F872C /* FloatConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = C091E831068E3E504A40AC6932B39C87 /* FloatConversion.h */; }; - AA3628EFC6E58E752EF07B229205B3EB /* PFOperationSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 26C358BF063BCDCE76707FB07B405CB6 /* PFOperationSet.h */; }; - AB7CCA495BB2E31A67FBD113F45DF3A3 /* PFCommandCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 13EA057769889745EF622AD275B30A3F /* PFCommandCache.m */; }; - ABA34CFCB348BB50E6661E3CCF434B1A /* PFFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B3B39A4E421EE0FF21AB42B74EE1955 /* PFFileManager.m */; }; - ABB935DE5A114F1A4B541F17F2FA03A9 /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DC9003F64939358FF50986ADC0DF824 /* PFInternalUtils.m */; }; - AC116C2D91DD098890B38084CBF030EC /* PFLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = FBC24FBD24EFA4956FA52BFDBAE5DBB6 /* PFLogger.h */; }; - AC8E81AC6849346D82D690177DCF9150 /* PFPropertyInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E5C09D44589D6540714FF487D97E0C3 /* PFPropertyInfo_Private.h */; }; - ACB9408C6FC53B87208559D1C21EC621 /* PFUserPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A2313F192E2841C83555BDC26D3866B /* PFUserPrivate.h */; }; - AD7773AD7D0B865CE5E4F516ED163DF2 /* PFMutableRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 797597C3E809F5E570660958DD8719D8 /* PFMutableRelationState.h */; }; - AD9492E2817C3879542A3391BD8BA9CE /* PFConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DCE002C62F26D3852FE0C2CB25CACEA /* PFConfig.h */; }; - AEC0AABC2226F08C2EC024E94093A69E /* Parse-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 139FB17B5AD5B2BD40E10B8D2177BEDC /* Parse-dummy.m */; }; - AF07EB1921C3ACFD1186E3827CAA5A38 /* PFRESTSessionCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = C60907A5603A25A8E7EF01FCD0B44B11 /* PFRESTSessionCommand.m */; }; + AA25A8F11F6A8404563A6472F80AE790 /* PFInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = 02ADA053F55CC3D3354BB334C196EA78 /* PFInstallation.m */; }; + AA41B456224F2877941FE21127774A12 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEA6E529E5BC10A92A3372E82A3225C3 /* CFNetwork.framework */; }; + AAB1AECCF78B4BDEF517BCCD31BE4737 /* PFInstallationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 49274509C4FFAAEBBD45D8600A573B2B /* PFInstallationConstants.m */; }; + AAF0E5F5CB4203D4E7CE26E4C0BC3BC1 /* PFReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = B962D108140D96784FC828D86963E605 /* PFReachability.m */; }; + AB06C3BFB45A1282141E1630F26DABCF /* PFRole.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C43426FA34D5469526AAFBD7806A65C /* PFRole.h */; }; + ACFF1A205850EAA9CE547A839884E5FA /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 741AF064CFE86ABB229F37FBAFB71F22 /* PFDecoder.h */; }; + AD0C2B489AA20ED14E8199414FD83FF8 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F31229637871A1DB25EEC72DEEA4CABF /* CoreLocation.framework */; }; + AD5F099484D301EDC3BD3EE618F28A4B /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4987E5DF7D6AE7BBDE4D3055F00A8B27 /* StoreKit.framework */; }; + ADF188B732A69F682114E2047DC0CBBB /* PFObjectUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = B322FB271A210C27577B6EAD8C5062CC /* PFObjectUtilities.h */; }; + AE6D8714C88E965694D9862943ED9C03 /* PFObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 931885B870C2D6166C233379707A6DBC /* PFObjectState.m */; }; AFEBB8DD2F176DBEF3E1F0FFA6FE7AF8 /* POPCGUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0A9ED47A0EA56543BEB2F83DFD6122C8 /* POPCGUtils.mm */; }; - B03E6AF1E598EC1DCAF4A7DDC0DD5489 /* PFObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 47A6E2FEA4744CFF9330F4BDD5E274CE /* PFObjectController.h */; }; - B0B417C67B226E210B5BAA71B6065E96 /* PFEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BEEAEF9152946B143C6C357FCF24E5A /* PFEventuallyQueue.h */; }; - B0BEB23FC1059482B01E0D220D6DA2B5 /* PFInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CBB64CFFD32EF20996F33E08CE27F2B /* PFInstallation.m */; }; - B0E9BD1E45B086C6992F0EA64B78B46D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D414E542C5F0101B04B821F89CB601B6 /* QuartzCore.framework */; }; - B21C1733EC906F80FE9CCD426D9442DC /* PFOfflineObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 10634547D3CF0DBCA1FCF7438AB74C39 /* PFOfflineObjectController.h */; }; - B31A69D71BE4A4F9C56CE52F2597B0B4 /* PFAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6006204F33FEC54FE00EA9417DDC3F22 /* PFAlertView.m */; }; - B34504AFEE1AC70E9E0A1282A1986D2E /* PFBase64Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 0241335D86A1EA4D1D2367A14A072B98 /* PFBase64Encoder.h */; }; - B3CF982DD6F4DAAE77CBBBE9B1282C30 /* PFUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 4840DBE7CE64AE75599772CB21A51C7E /* PFUser.h */; }; - B4380967482F62131B85509257CCCB2B /* PFRESTCloudCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BACBB72ECB77F59482B166BC28EA869 /* PFRESTCloudCommand.m */; }; - B454B8E5E316FFC8E1D2E1C730967866 /* PFPropertyInfo_Runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = 005D78329EE21D6E17E5C61CD7F99399 /* PFPropertyInfo_Runtime.h */; }; - B488F531B26E7BE8EB16185D9B3D33CB /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 7566A44BF4C7FE91F74365E72E1C4073 /* PFDecoder.m */; }; - B4BE97FFB864542992C29041C5185202 /* PFURLSessionCommandRunner.h in Headers */ = {isa = PBXBuildFile; fileRef = 4500DD87BF3AB695EEEF0D03C9E94067 /* PFURLSessionCommandRunner.h */; }; - B50C52582D730164A3C8A53F6F25239B /* PFErrorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 0638F31DB969AAA2089D7F79383493DD /* PFErrorUtilities.h */; }; + B0416CF20216A1C9A598CE958C8B2C47 /* PFObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = D639AB7043CB6DA1A6BE3D49D7D9368B /* PFObjectState.h */; }; + B1192665DC9C93F109D3D4A7C5F83F43 /* PFCommandCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F6D4D4C8E189ED660B99AFA5901A89BB /* PFCommandCache.m */; }; + B2AB6582389389DE491AB68BF28F7737 /* PFMultiProcessFileLockController.h in Headers */ = {isa = PBXBuildFile; fileRef = E8EEBAABE8D879BA98E6BDEB440DC3AF /* PFMultiProcessFileLockController.h */; }; + B3509517E43EB89AAEE0691907901C01 /* PFRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 891204204D388D19194E2B25AC4EC9CF /* PFRelationState.h */; }; + B43DAD49C7DB952A1671EEF20BD1727A /* PFRESTCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = F1597BC7BE1EC9A86FCCB75B11EAC04B /* PFRESTCommand.m */; }; + B47547A8DD4DBA73A1AE3C19B48D65FB /* PFObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 35F4C67236438881E09D5813BFA8BB6A /* PFObjectController.m */; }; + B586166AE0F8830D3720E2A1349D21FC /* PFUserConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = B745F5094B240A7BD83E4F246A86BBD8 /* PFUserConstants.m */; }; B5B86F0561840C9F3408D9A3CE3BADD0 /* POPDecayAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = B0CE575CDDE0B1795BB8B88E0B49ACA0 /* POPDecayAnimationInternal.h */; }; + B6B00390A7F7EC4B3604C04E0C98F498 /* PFOfflineQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = BEA3D87AE012FEF7F6B48E6F0D5F09F7 /* PFOfflineQueryController.m */; }; B6DA545595D3CE47BC8F81E673889B4B /* UnitBezier.h in Headers */ = {isa = PBXBuildFile; fileRef = 96015F1C746803D9318614B277F71BCB /* UnitBezier.h */; }; - B8876C85293D37E405FA3F56EC170BB2 /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = EC2BCF421E5556843D2FB60E51F79F87 /* PFAssert.h */; }; - B8BF169D2C7B9AB5A95C714C2A1E9BB0 /* PFMutableObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = E94D7BACCC5E81069DC1DA732C343E3D /* PFMutableObjectState.h */; }; + B701C1AB6D06324BC6CC23A5783F75ED /* PFInstallationIdentifierStore_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CC952D982119E3AE1061314E2B7C35D4 /* PFInstallationIdentifierStore_Private.h */; }; + B7944220338A46BC74DF8E3DB9895901 /* PFFieldOperationDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B8E6E53482F4B643407A15BA8B0F287 /* PFFieldOperationDecoder.h */; }; + B7AFE53318A19D6842F21C10377FF268 /* PFConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CC5D59716A7C77BE85C9B72C76F0A38 /* PFConstants.m */; }; + B88D88CD06342309AB76482FA60552B5 /* PFRESTFileCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AC5046C91AD0BF56975D1A7F382F946 /* PFRESTFileCommand.h */; }; + BA79DCD39D35E2EAAAF31A25A096902F /* PFPinningObjectStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D8851833E5439BBC098DCCB68455E8D8 /* PFPinningObjectStore.m */; }; BA9989C7128E968BA7D20CFEB392AE9D /* POPBasicAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 212068113F29FA47D17730ED388F8706 /* POPBasicAnimation.h */; }; - BB1D07345C56DB2E88AF60CBDAF05EAA /* PFUserConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EB9E22A1797EF8F815387B3148987B7 /* PFUserConstants.m */; }; - BB7BBA7B572300771B0DB9EDFF360F25 /* PFRESTAnalyticsCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D75702C8583CBA05067061643DEB98 /* PFRESTAnalyticsCommand.h */; }; - BB960D63E0B0D184BA67F74168A5038B /* PFDateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = D712B949F0E1E31622675FBDC8C2BD57 /* PFDateFormatter.m */; }; - BC0F7D8E0E2AD3BFBEEC7F2B78BC59C6 /* PFKeyValueCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 52DA55B0C48801979739E451008199A5 /* PFKeyValueCache_Private.h */; }; - BCBBA9D39E73E338C6A6C059CE03DFA7 /* PFUserAuthenticationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B31CEE7768E9065A1168B8DFC0BAB53 /* PFUserAuthenticationController.h */; }; - BCC550CB5440C1D466BB3BC4E78B83E1 /* PFSQLiteDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = C7A82AD0CBC0B85B3BC3F38D91D613A3 /* PFSQLiteDatabase.h */; }; + BD5FF8B5573BE7C19EA98B24C8F93F36 /* PFPropertyInfo_Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = 79D9D3FFDE344267236EECCAA6397DA3 /* PFPropertyInfo_Runtime.m */; }; BD6626643DD9C3A12AB86F9361EC89DB /* POPAnimatorPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0476012CEBFEB22B5F0926994E6AEEE3 /* POPAnimatorPrivate.h */; }; + BE1697124F67485E93A628B7F078B922 /* PFThreadsafety.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BE848028E2C509A4FA316D19E795CD7 /* PFThreadsafety.m */; }; BE267A18590772AAA04953604BC7B310 /* POPAnimationExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = C1B6A53BFD919966B87CD6FBFD89CE1B /* POPAnimationExtras.h */; }; - BEE7655DFBBC1AB9D4F484DDD2BC7347 /* PFAnalyticsUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 861462FD667FE3B82B6900562A7A672F /* PFAnalyticsUtilities.m */; }; - C06E01391A45E76121806BFE18C36C40 /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EE03D2CE9262E74BE101A9AD7F66934 /* Bolts.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - C195BEAD62324084932C336CD0F167F4 /* PFPushState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CBC8583C0448880C8739111436630AE3 /* PFPushState_Private.h */; }; - C26697DA5659534927CB60C187CA38B7 /* PFURLSessionJSONDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D874E8C6013F838D31865D7CACFFC8C /* PFURLSessionJSONDataTaskDelegate.h */; }; - C35E8AAC7757AF2A72F3F138CF303A5B /* PFSQLiteDatabaseResult.h in Headers */ = {isa = PBXBuildFile; fileRef = EB22EF6AA771F815D6776E538BF091A1 /* PFSQLiteDatabaseResult.h */; }; - C3C07815E5AFE68241C34F5DB2196C34 /* ParseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 22FDFA3B8D05D54B5BB969DABCBC6413 /* ParseManager.m */; }; - C5329C8CE1773B4034441DC996B07093 /* PFRESTQueryCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 4922CD9E2B9E78912E88BDDA753C4FB2 /* PFRESTQueryCommand.m */; }; - C5750E2AEE5F999C2FEA63E5A6071552 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = B4D6A8E418A8D134A61BFD6E094F65C4 /* BFCancellationTokenSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - C5FED0ECFCB113A0AD2C656D0BB62934 /* PFRESTObjectBatchCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EE3B22DE1F33BE14763458A191128C1 /* PFRESTObjectBatchCommand.m */; }; - C6087786013E123A5BA24CDA01D12829 /* PFACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 126E0178D6FE6C3AC0790CCA7F490DE8 /* PFACLState.h */; }; - C6596728704CF2E0D363D6F21E5C2F2F /* PFPropertyInfo_Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DBA1E4D4138BAC1EB874D74D4AE73C1 /* PFPropertyInfo_Runtime.m */; }; - C7BEC270DC7D5AA4DD7D8A81575E179F /* PFRESTQueryCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 43DDAC0517DD7E2A075642D9FB379D04 /* PFRESTQueryCommand.h */; }; - C82A861227CAC478415817B56AA81AB6 /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B0BA363E4B429F291596ABBFF279C44 /* PFGeoPointPrivate.h */; }; - C84077A6ADD4188E00247A89489A5E5E /* PFFileController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DEA9336EA629BC874D1CD9F3933E83C /* PFFileController.m */; }; - C8E14645C3547457621C6DFD0CC514C8 /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BE5F0A1B5CEA848AD6F87144411D8B7 /* PFObjectFileCodingLogic.h */; }; - C90B605396530B452AF99A7678EA51B3 /* PFSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D51B5DC898167C5060CB1C2CE1F6CA6A /* PFSession_Private.h */; }; - C9FB222E477526D6DF5C1EF357248970 /* PFMultiProcessFileLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C77B473F634527F1102E3093D9ECCFE /* PFMultiProcessFileLock.h */; }; - CAC625E628AAEF2445AB4B8D62123557 /* PFRESTUserCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EA667FBF478CB2CC7CFE38041F96D6F /* PFRESTUserCommand.h */; }; - CB466BFC29E239E0CAA89792EEB55773 /* PFHTTPURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 08FC3ACF4FB85302DB39490D9E032664 /* PFHTTPURLRequestConstructor.h */; }; - CE0621CDDA5B17681FA105A924E561B0 /* PFThreadsafety.h in Headers */ = {isa = PBXBuildFile; fileRef = F47B9418D1EB46362FA2A6190969EF8E /* PFThreadsafety.h */; }; - CF5B8E8AF1255B0F020DD1C5143FCE22 /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = A4680CAB4F1F20CE4E4FF134C9A11A0D /* PFObjectSubclassingController.m */; }; - CF6E9D57E0097D77F7D794534CA879BE /* PFQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = 895E6BCE8395CB2A323176F349B9EFC6 /* PFQueryState.m */; }; - CF90CCECF348956BB5DD62B17728C38D /* PFRelation.h in Headers */ = {isa = PBXBuildFile; fileRef = EADEB4FFD06A826AC14B90222A65ED15 /* PFRelation.h */; }; - CFE19C2B8337074ECB614B8E15535616 /* PFPushUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CFD4EDE572C72678AC61FDC5C92AAC4 /* PFPushUtilities.h */; }; - D044D268A07FEADE73CB38752603CB19 /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DD709EEB7F953B2BFD2FFBF243EF632 /* PFInternalUtils.h */; }; + BECF2F58F7E02B74509D304FFE07A644 /* PFQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 715B44864CC4816F9E241DBDAE6498CE /* PFQuery.h */; }; + BEFFE38E1E8C0426757AFD411F4ECC28 /* PFRESTObjectCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 106E039845795427C9E9FC7A626BF395 /* PFRESTObjectCommand.h */; }; + BFA580E3421FCBDA60EFC80446F5F827 /* PFOfflineQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = F11B5250697F6FBAF1331BF54A332420 /* PFOfflineQueryController.h */; }; + C1580926FB1C1390D09A615D658340EF /* PFSQLiteDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DFD8D064D883A41B1432E94742A1A879 /* PFSQLiteDatabase_Private.h */; }; + C1F432F11DB9BD57E3362B6957C1EF7C /* PFACLState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A666132F7688CB58789BC9FFAE5AB614 /* PFACLState_Private.h */; }; + C2D3FCAD9F82B00F0682B77F42C345B7 /* PFMutableRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 0524A1E79CBE55E8D0C538F4382D17B7 /* PFMutableRelationState.m */; }; + C302FB217081A69E712D54BBA15612FA /* PFConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F97CDDB1431E1D55E17DE205316A5B6 /* PFConfigController.h */; }; + C3534B5AFC24CDF4EEBD2E7455004776 /* PFCommandRunning.h in Headers */ = {isa = PBXBuildFile; fileRef = 39F8120161EADF847B985CB2751E4B2A /* PFCommandRunning.h */; }; + C3C2EA6FFF35A91DC79C6DCC8082FE95 /* PFAsyncTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = C0239D4A0C4788EB654381F621134ACB /* PFAsyncTaskQueue.h */; }; + C42E6522EF606545E8A2FAC0B86FA953 /* PFOfflineObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 76E34CF3E0809A86C3173F02A63233D2 /* PFOfflineObjectController.m */; }; + C4D1E4A8DF86647F268B2B3B5099E112 /* PFRESTPushCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 581264D483DB217A6F5ED83035A33E30 /* PFRESTPushCommand.m */; }; + C66CF47F117BB663AB5B1ADA991B0873 /* PFPushChannelsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B9C4FA9F02AD2C7B7F788126DA856F5 /* PFPushChannelsController.m */; }; + C75CBB06C3466C044296CB3A76C39124 /* PFCurrentUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CC4B1CA6C9A2DF20B2C8F69652BC62E /* PFCurrentUserController.h */; }; + C9A1866D93CA32DE4D93C03F83A9F935 /* PFObjectState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F3E10B801DC1EAB7C18648EA922D183 /* PFObjectState_Private.h */; }; + C9BA3DB96B743CFBE38D620BA1F21753 /* PFFileController.h in Headers */ = {isa = PBXBuildFile; fileRef = F92FD9C05C3DAFC2FDA01836F5F0516D /* PFFileController.h */; }; + C9D963064AA22F16470F6AF907BAEF1F /* PFGeoPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = CE510ACC52FD7B52F382F765AA7C38D6 /* PFGeoPoint.h */; }; + CA6F32BF249CC4F676BA2B2E1F0B2187 /* PFProduct.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E5AF4BFF040360310887AAACC8C323C /* PFProduct.m */; }; + CADB1639CC60E0010303A74644A2603B /* PFRESTObjectCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 099176EFCB8B1C379CDFD09F1B0290F4 /* PFRESTObjectCommand.m */; }; + CB2EF43804B9C179A60AF500104E4DE4 /* PFMultiProcessFileLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 2280179A3928340114FB48C1AF04368F /* PFMultiProcessFileLock.m */; }; + CB90858A2BAC0D76349EF1E1F8D62375 /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = B3814B9487A8A8F8F9A04F510A6B3AC5 /* BFCancellationTokenRegistration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + CC4D511200D693558A979423DD703DE3 /* PFObjectConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = C2884D9AD4EDF5B53F05C2631989A495 /* PFObjectConstants.h */; }; + CC8E8A57D3BBFA56A0E43A0E575B3953 /* PFAsyncTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 4220E05D6A608326E489CDA533392ED8 /* PFAsyncTaskQueue.m */; }; + CCFC440E3597BEDAC7796B03DE5A63CF /* PFInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = CFA6C4B46A860F2290E2C9F4AFAADFB9 /* PFInstallation.h */; }; + CCFCBBE62C9D209092C1A6C69BEBD2BB /* PFRESTObjectBatchCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C9C62664AD1CE0A3036EA774C72C69C /* PFRESTObjectBatchCommand.h */; }; + CD128BF4560D91E52D923A5E0800998D /* PFCloudCodeController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9142904B7E1F16BB09177E6409AF060F /* PFCloudCodeController.h */; }; + CDCD90E74BE99950B279D3B8A47CB748 /* PFBase64Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CD7A269A474E8BFCBF52EFC03BD796 /* PFBase64Encoder.h */; }; + CE5C3235213BC24CD1C18DF4054C62B9 /* PFURLSessionJSONDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ACFA0EE4D94D9AD3A656FFFB0D6DC16 /* PFURLSessionJSONDataTaskDelegate.h */; }; + CE7E600E6E370B6DEF0116643F7FD8DE /* PFFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A34F74808E75DF01FC097E2274D4116 /* PFFileManager.h */; }; + CF85BDB59935EB93ACFA51C5C530EDC1 /* PFLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F561B1D0F25670B287F11DE69B4A30C /* PFLogging.h */; }; + D0CFD3BCF7854439EBFFA50340677C48 /* PFPin.h in Headers */ = {isa = PBXBuildFile; fileRef = ED92DCF321683034F9F263E4083E6959 /* PFPin.h */; }; + D144A740430A65EA206B949452D309B9 /* PFConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F142A8509CC5040126EC51BDFDDE6E4 /* PFConstants.h */; }; + D2DC5F2DF23C18B8D3E71721F1CF8C54 /* PFObjectFileCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = E5331787DAA3B52CEE076DC2B62A6100 /* PFObjectFileCoder.m */; }; + D3AEE7BFCB370739A7466335493CBC36 /* PFBase64Encoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C38E6D6FFD2BE12F651C934B7BFCE1C /* PFBase64Encoder.m */; }; D4224969BAFBC6138FFC872CCC829FB9 /* POPDecayAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = B0F7BCEE9A871E1193D694931FA31E17 /* POPDecayAnimation.h */; }; + D441BA266DCA0FE4D2C6A3B18187A67C /* PFRESTCloudCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 80F676B2C080DCBC841173D2FC2CBA26 /* PFRESTCloudCommand.h */; }; + D458C6C955A5A584E1EE2532E6B6B9D9 /* PFRESTConfigCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A7FFA051B54FAFBAAF14E0C23C4641F /* PFRESTConfigCommand.m */; }; + D49D69813605DD09C1F06A6489EAD663 /* PFURLSessionCommandRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = FFE61F44A8E9B3147353EBFD396F02E7 /* PFURLSessionCommandRunner.m */; }; + D4D4DAA939A8A78C5FA6D96B5F7D72E9 /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 09E9F2F5DDCB3D2B60BDC018656F8355 /* BFCancellationToken.h */; }; D5792E05DB34C9521294B06A622AE040 /* POPAnimationTracer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E88590D291A3C131FC32F9BC9A80038 /* POPAnimationTracer.h */; }; - D609DB3153D08C9401FC6FD046270B24 /* BFTask+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E6CFB883952C27A92DBF7CF40F382619 /* BFTask+Private.h */; }; - D64AC9CDC6984455A31AF0E9AAFBFC10 /* PFRESTObjectCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = A3A336AAE714C90D57D61FFCE1F62540 /* PFRESTObjectCommand.m */; }; - D6E73AA34F7F1B47815DC967085A72EF /* PFObjectLocalIdStore.h in Headers */ = {isa = PBXBuildFile; fileRef = A3F9EF3F957FD4DB2D6C601F067168F7 /* PFObjectLocalIdStore.h */; }; - D7D4F9F182AC20F7C3BBA3592DA8404E /* PFProduct.m in Sources */ = {isa = PBXBuildFile; fileRef = 602F796D464ED522B3E9F48F6B4306A4 /* PFProduct.m */; }; + D5F1B35353D67059C7894FA00393D39E /* PFFileDataStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E29EFCB546410074B97DF506ABC1C98 /* PFFileDataStream.h */; }; + D6A3E5E2F6450BBD8E30C39855291F74 /* PFMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B5234B11242385CB74EE42A5CBE16D9 /* PFMulticastDelegate.m */; }; + D79AA81B759F1A80248C34F631B03EFF /* PFCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 23EFBFB21E3A2659446F462A44152817 /* PFCategoryLoader.m */; }; + D7E97759E6C76BA2331C5D8D3A056ACB /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = BA75D0EC4C508481F47EA13B39766654 /* PFInternalUtils.h */; }; + D7EF8899052A30529A12811A433ABAF7 /* PFCoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = CEFF62A508184DE729502142858C6AAA /* PFCoreManager.h */; }; + D818EB5E41E22563226772A8E632B3DF /* PFOfflineQueryLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 529877D68CE76A3FBD3B683DAFF9EAE6 /* PFOfflineQueryLogic.m */; }; D83868EA3920350C53488A4C4F9A5565 /* POPGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = 3155A15C877F794FB064A4A0CEEB2F13 /* POPGeometry.h */; }; - D8FAE63EFB668703E06E87D06E27DD10 /* PFInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = C1E1FCF7C3F2C64010D8E7CA6C8D29A3 /* PFInstallationController.h */; }; - D923EB05E2C32216B57B27EAB1F4E7E4 /* PFSQLiteStatement.h in Headers */ = {isa = PBXBuildFile; fileRef = E2E9E2D3066C78DC48958D6FD03ABADA /* PFSQLiteStatement.h */; }; - D9D15D14C4BCF21EEA86D07BF45B88B1 /* PFProductsRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = C623372365DC2AFFFE5053AB44C49CAB /* PFProductsRequestHandler.h */; }; - DA17F39593B4824BBC5926AD390390C2 /* PFPushState.m in Sources */ = {isa = PBXBuildFile; fileRef = 186E1997DE5BBBD9E2A895D71A7BC915 /* PFPushState.m */; }; - DA5A140E5FAF805F07B32A67DD6AF45F /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 4312B15964C63A373BA6C191FD761444 /* PFURLConstructor.m */; }; - DA7C2EEEC87D1F7FE3001B1E0DABFF5C /* PFURLSessionCommandRunner_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CEBD5ABCFEDE938F240830CC6F863AE9 /* PFURLSessionCommandRunner_Private.h */; }; - DB11B9F73D9B0D3F02327B6CDE23A9AF /* PFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FDB9AA6B98C04B1C0D671A64BEEFEED /* PFNetworkActivityIndicatorManager.m */; }; - DB29FAEB95798B3BD6680DD88F69AF85 /* PFSessionUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 972EBE95D808C0CA2DAD94DDC5AC5F1D /* PFSessionUtilities.h */; }; - DB47C8872FD56076325D22343CDD7B69 /* PFPaymentTransactionObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CC0DF9EFC230F428EBC36272C09AF04 /* PFPaymentTransactionObserver.h */; }; - DB7880E757BE6F38134F25167A2F59EC /* PFCachedQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CD1F5B90828B5EDD6A87F8F8B8CBEC5 /* PFCachedQueryController.h */; }; + D8572431C5A5A56F48C334D79A6336AE /* PFFieldOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 11BAD4B729ACB9404D4D1110F4EAD454 /* PFFieldOperation.m */; }; + D8ADFE9ECE18ADF00E4078785FED3EE2 /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 110790F94C28E100B1086C0F8B7D1198 /* PFObjectFileCodingLogic.h */; }; + D8D1BDAC175C1556633F19CFD6D07A50 /* PFObject+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = 21D9F2D1230AD40B645828FF1CFD4506 /* PFObject+Subclass.h */; }; + D8FE5C4D33B6D32B89424C8F18E196AB /* PFMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFA78A3405997CEFE0F4A84B480089B /* PFMacros.h */; }; + D961D58817C2A1A8B99A49BFAA840CD0 /* PFMutableRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A09D1AC6A988D2BC0012D3F2027B90C /* PFMutableRelationState.h */; }; + D962D24A9373D05F95BA2407DE1A9A0C /* PFFileDataStream.m in Sources */ = {isa = PBXBuildFile; fileRef = BA7F7022FC278524B2BE48AD1759AF42 /* PFFileDataStream.m */; }; + DA7B999E1677271A6399FA19E28AE870 /* PFCoreDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CB00E16E736A73AA516D8A0FA5DB28E /* PFCoreDataProvider.h */; }; + DB40B6A7404E09FB143FA7A52D0CA736 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + DB68821A5DA330EC6DB71D568020FC26 /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = A69CE4C29C33C8B3AEC1E73E847A4197 /* PFDecoder.m */; }; DBEF60495B33D1BA4C7BA3C8E3A24968 /* POPSpringAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7371F16336283F2D8BB2A199CD4DDEF5 /* POPSpringAnimation.h */; }; - DCD7B3F2B92EB5E095480309F3F6C813 /* PFWeakValue.h in Headers */ = {isa = PBXBuildFile; fileRef = AA2F4B0C1884B9FA8CA4005505904B4F /* PFWeakValue.h */; }; - DD102CB743C2258E153D8159D5C0EC14 /* PFQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2007FCF4B24326D21653DCD5F4F03D9E /* PFQueryController.m */; }; - DD7898873BF904FA0E114437CA1762B3 /* PFRESTSessionCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E0F1E598FDC4AD2B9344C0BE42CEF0A /* PFRESTSessionCommand.h */; }; - DD9352278D2CECD93F57DB53EC97D291 /* PFPurchase.m in Sources */ = {isa = PBXBuildFile; fileRef = F05B147B865A347DA8B9891D3D9B89BF /* PFPurchase.m */; }; - DDFA75763A11603500811925FE92E6BF /* PFPushController.m in Sources */ = {isa = PBXBuildFile; fileRef = B7EE7F890CF09AF26E1191C3D4540CE1 /* PFPushController.m */; }; - DE67E043D3E6DFA26ED0608672E9EDE4 /* PFCurrentObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FF980C8F6DFEF3C3FB8C7A56B963C15 /* PFCurrentObjectControlling.h */; }; - E0144A342BDA68B208D02A9FA946E3F3 /* PFWeakValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C42D1919287483D0731E55C7039390D /* PFWeakValue.m */; }; + DC4DAB9ECA41D83DC8DC29AFE6BC73B9 /* Parse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5057A97EFDC884111C4A5829863ADD7C /* Parse.h */; }; + DCE8E177A147347F73E86C4065D60299 /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 71EFF9FFB238B21E016BDB85AA6333DD /* PFUser.m */; }; + DEBB00005BF92FA417EA2EB71432F063 /* PFCloudCodeController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8357F198915C0DBFE26D33A3CFD62A56 /* PFCloudCodeController.m */; }; + DF25C24556E3261B0B580E89B1080CDF /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D07F2F153FA1A7D77D68027DBF1AA33 /* PFAssert.h */; }; + DF40D05E8A808693AEAD061BC751E6D3 /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = D1F61BF57518F0154F82CEF764C0F35D /* PFGeoPointPrivate.h */; }; + DFC8670E99D9BA07E6F493DA68D12043 /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 875A9098C4D90F40AE3128DC006E1B98 /* PFURLSession_Private.h */; }; + DFD0235CD7EF6A677A5B0CC1DF6C9462 /* PFKeyValueCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B113FA8703C60024B8FBA20DFB21B744 /* PFKeyValueCache_Private.h */; }; E03238690A5A21C9B8ADCC9737633061 /* POPAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8336CCF2280C58E6C367DF4EC0EBB7B3 /* POPAnimation.mm */; }; - E0822053495861CD160B22D518AA2282 /* PFLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B16B8588E9DCC56E87F38E324BE2E50 /* PFLogger.m */; }; - E23CC6BD6AE207AD1C89F018982D1BEB /* PFAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CD59F7A3B1C57C26A073580850CFD7F /* PFAnalytics.m */; }; - E4CA9C37AFA047E32E33ECF5C4184F51 /* PFNetworkCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 4671EA53DD8AE149FB0F02838CD24C37 /* PFNetworkCommand.h */; }; + E0DF71DB6998FAE77D5C39BEB24AB41B /* PFJSONSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DBBD6C38E3D91712C6414D4224376D3 /* PFJSONSerialization.h */; }; + E1393DAFC2E3D6FD28C314E970FB2973 /* PFAnalytics_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EC28357CF9D94A9F2E49253D3A16AFCD /* PFAnalytics_Private.h */; }; + E1A22FDBCBBF2D241041F87458597FC3 /* PFPurchaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B311513624F9614FA7EBA34D397F337 /* PFPurchaseController.h */; }; + E20B8CE9522CBFCF2037DC756B7AAA26 /* PFAnalyticsUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = DD2E7D85EAE9D93FB3EB497EE098D0E2 /* PFAnalyticsUtilities.h */; }; + E4A07CA965878A2042A19A9ABE5A1D1C /* PFUserPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = BF198CCAD2E6C2AE39D8BF68464A93CB /* PFUserPrivate.h */; }; + E51943C1A9FF65B5EE048CBF4F395D9B /* PFSubclassing.h in Headers */ = {isa = PBXBuildFile; fileRef = 17A4E3B51919C1813C70CF9A41D08C64 /* PFSubclassing.h */; }; + E51AF1267A478883DFA384597EDDB15A /* PFURLSessionJSONDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 331907AED7D09788ACC2D6029AB2604F /* PFURLSessionJSONDataTaskDelegate.m */; }; + E51AFF71C5470CEAB47D6B501FA5C00E /* PFPushUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = D22939E9625B5D422EC6E479E7048771 /* PFPushUtilities.m */; }; + E5914E5A4EB68DFFFE65AB01ED44B155 /* PFDateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 68900F0E0EB2E31F6E0B59E6692F1C5E /* PFDateFormatter.m */; }; + E595F2FFEA2AB67264D93F0C8D1C22C3 /* PFUserFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E393C3F2BB10DF131AB02A295297B88 /* PFUserFileCodingLogic.h */; }; + E620DDB4910DB912EB504ED542FEB907 /* PFQueryUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = CB8189117D5A0D245487C3423D73727D /* PFQueryUtilities.m */; }; + E644B27DC71808C09CE53B8E0F3664E2 /* PFPushState.m in Sources */ = {isa = PBXBuildFile; fileRef = 82E29BC8D2B7929DF1755FF61A7965EE /* PFPushState.m */; }; + E662115101B5163A7982610F06468C1B /* PFMulticastDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 75EBF2C2BD6CA4EB5FC5249BB70052D3 /* PFMulticastDelegate.h */; }; + E665D2FFA8C5E2DF0CF41646F343BF20 /* PFAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = A6F717725F4394E95525ABAFB9F33DB2 /* PFAnalytics.m */; }; E66A972C821119D091B99E54200F7FC0 /* POPAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 94815AA3EE3CBA04CEE85515701AD534 /* POPAnimator.h */; }; - E7E6855E0A73652B303B572355D3AAEE /* PFFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = C5CA9676B6BB4F73C05AB36945596A99 /* PFFileState.m */; }; - E7F1325DD18D11574F43630DF215C30C /* PFRESTObjectBatchCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = FC99C2A819C4722A15EE59C87645E47F /* PFRESTObjectBatchCommand.h */; }; - E896679BD643C694FAC4B7C1A5B43871 /* PFObject.m in Sources */ = {isa = PBXBuildFile; fileRef = C7A179A9BD2533E252132EB24EEEE7AF /* PFObject.m */; }; - E991C7550D546C3319735688EC5D0369 /* PFProductsRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 751B683157A512BFFD27276B937C7FD6 /* PFProductsRequestHandler.m */; }; - E99450CFF3FF02596EAB7E7D87FEDCA0 /* PFObjectFileCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = BBFB017F02B69A95630ECA78C0507891 /* PFObjectFileCoder.h */; }; - E9C084ED73C6D3CFEB4A0414EDFF8405 /* PFCommandCache.h in Headers */ = {isa = PBXBuildFile; fileRef = B0D65D1A09B22A4BB4B1C9A5BD78B77B /* PFCommandCache.h */; }; - E9DF1006C8F4119B1A23C8A964D4BDCF /* PFConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EB55315EB3A3AB23E3EB95B4B89971F /* PFConstants.h */; }; - EA78E9FEB71E4A999EE8B4FF325B4F8C /* PFRESTPushCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 943A16F9CDDE8E3F97A4CC444A9CBD38 /* PFRESTPushCommand.m */; }; + E8433C7C8B26411E6E7290E579C83F4E /* PFRelation.h in Headers */ = {isa = PBXBuildFile; fileRef = 92FCC3E21D3E8790768C5AF6D196F8E6 /* PFRelation.h */; }; + E8C1875783064DFD43523A4C35575FA2 /* PFAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 06C655052162786B845146B0DB31017F /* PFAnalytics.h */; }; + E925E091713124195ED1CD1EC8573CA9 /* PFTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = B2CC06448183660D517225325BC1F93A /* PFTaskQueue.h */; }; + E927E067F38B0E8A9795FECEA9D9CD97 /* PFPaymentTransactionObserver_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F6E1EDFB3356D1F65A376DA74B16746D /* PFPaymentTransactionObserver_Private.h */; }; + E98C8B10EF19A9D5799C9CBDBE2C91BA /* PFProduct+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A66170B5CA1BBCF22487EEE33E21A6C /* PFProduct+Private.h */; }; + E9F5FCFDDFC1197D97AD06C4C14BA2E4 /* PFDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8637E5A58491F08A00BD27912794B7 /* PFDevice.m */; }; + EA1270889DC45F05BD5349952FEC10DE /* PFConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 71FB977D682D8E9A3C20EB5A8FA8D44B /* PFConfig.h */; }; + EAE0AA415A5361DD0541D5373560E0B4 /* PFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 4113ABD9B9640D41ADFF4F04A28AF0C7 /* PFObject.h */; }; EB965B246F7206AE338A7DF882400A0E /* POPVector.h in Headers */ = {isa = PBXBuildFile; fileRef = D5CE48778301C24CD288B08DDA441605 /* POPVector.h */; }; - EBD4BC102DFB46F91C3141667D6C361D /* PFObjectSubclassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 791F22142433CB687B6BD4F07D0950F1 /* PFObjectSubclassInfo.m */; }; - EC6531B679723631C5F070DC36B56DE8 /* PFRESTPushCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 022E40D42E74E0C92C4963F2BE8E4FD5 /* PFRESTPushCommand.h */; }; - ECB81FD33F70B06684E4A50AB3F75976 /* PFLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 130E12A377FD4C1EC29AF55964B70A23 /* PFLocationManager.m */; }; ED0BF4FE2052871A5C209B796BA9D91E /* POPAnimator.mm in Sources */ = {isa = PBXBuildFile; fileRef = ECC48BF18D3BD01C21B65648709A45D6 /* POPAnimator.mm */; }; - ED28BE739856D7DFDE74F4C6488C0B09 /* PFFileStagingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BF3525974C036CC12A09FF5C9633C85 /* PFFileStagingController.h */; }; + ED3221AC0471FA6C715B09F71EF806A0 /* PFRESTUserCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = C3FEE284F1A3A64929DAC57EF28FBEA2 /* PFRESTUserCommand.m */; }; ED3821443DA3268139C3CE29A592C03C /* POPAction.h in Headers */ = {isa = PBXBuildFile; fileRef = F3A985A006B0CCD0116D8FC53C4D1834 /* POPAction.h */; }; - EDE32F3C5ED3FAD54ADE2A858DEC5B89 /* PFInstallationIdentifierStore.h in Headers */ = {isa = PBXBuildFile; fileRef = A3529F546C50E5FA9E92AE069C4127AA /* PFInstallationIdentifierStore.h */; }; - EE3A3C294C3462AA62E477D5E167306A /* PFAnalytics_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 56743024027A104903BB088C1FED631A /* PFAnalytics_Private.h */; }; - EE83BD490034A515070EA6E8E37E227D /* PFACL.h in Headers */ = {isa = PBXBuildFile; fileRef = 64541D2ABD36F76DA73F677AC3E20A1A /* PFACL.h */; }; - EEBDC1EBFFAA9C81CBE8579A76CC0A68 /* PFURLSessionJSONDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = EEA9CEB6EBD6F7D905225F3028208411 /* PFURLSessionJSONDataTaskDelegate.m */; }; - EEF00303ACA6F9A8159E892D01C4F702 /* PFURLSessionUploadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = BF8B668575E32B4BC03D5A86BBAEAE74 /* PFURLSessionUploadTaskDelegate.h */; }; - EF97F68ADAA1FA736F080BC613BF7252 /* PFPushUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9E249BDEE7198A0DA97A4426AE5431 /* PFPushUtilities.m */; }; - EFA2B49A8A6A4CC569BABF1A704B24CD /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = E35E8AB9F2B4D23971F6C53C0730A2F8 /* BFExecutor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - F0B30B2AC9671AA2F42D8919B8D3C642 /* PFPinningEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = C7F96DFC12AF4F8CB8DB480DC2A6B5DC /* PFPinningEventuallyQueue.m */; }; - F0C51D05571753A00CC8F350E7A39DDD /* PFGeoPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = E4FD3B2FD49993D574EF9A49D6C13261 /* PFGeoPoint.m */; }; - F13EE6B0A90AA4D1F41B773D316DC97F /* PFPushChannelsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 90F15F6DE2D590C1823069FF6E87E823 /* PFPushChannelsController.m */; }; - F16F2BD2412E71A0F0800BA0143A10C8 /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E5E6D3B44810118191C60A9772E4E48 /* BFTask+Private.m */; }; + ED53A85BF245B2C2031C3ED8ADE3BC69 /* PFInstallationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2515044ACEA23C32AC39FC89A3A0F6E0 /* PFInstallationPrivate.h */; }; + ED7A547801E2CF226D168EE9581DB321 /* PFAnonymousAuthenticationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A3CFC6CFCF3EBBA16C7CCEB59F009AD /* PFAnonymousAuthenticationProvider.m */; }; + EDFEBA20ACE8D9590AAE42ECCDC1E07C /* PFPin.m in Sources */ = {isa = PBXBuildFile; fileRef = B431D27F0705F097E581263224EF8C88 /* PFPin.m */; }; + EE20B2B23083B041332BC3C78D75FFCA /* PFMutableObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E5B06286F6DFAD5DAED57C3E9C5400B /* PFMutableObjectState.h */; }; + EFF59F0F5823C5E0AF46C1B33EEDFB7B /* PFRESTFileCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = A39433C5B2CFE6011222CBB72F0EAE5C /* PFRESTFileCommand.m */; }; + F0F3981F5CFA9D5FEE36528C4F57BE46 /* PFObjectSubclassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = E3ED5AFB7A3B2DC03C1D116039A73C3C /* PFObjectSubclassInfo.h */; }; + F178A1C8334EE76BE6CE0AF09483BECA /* PFSessionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 56D3E21616E0654B5CFD38290C9213A9 /* PFSessionController.m */; }; F1869B0A07F843009A3268A12F2F96CF /* POPBasicAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F59C51782AE555897A5B92D6B3CECD1 /* POPBasicAnimationInternal.h */; }; - F26B4E9439D05674BDC3EC6D47419E65 /* PFURLSessionDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 32D7E6743D001141788DFE84AF635291 /* PFURLSessionDataTaskDelegate.m */; }; - F296EDE13ABDBAD0A6C57038E5891C38 /* PFReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0F8BFFB2B329D3F8B455B14472E5E9 /* PFReachability.h */; }; - F2F202A53F25BCFF106B2F77136BF78C /* PFInstallationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 66B0DF4B48195D78B041D58D3C3AEE3F /* PFInstallationPrivate.h */; }; + F1893CC2C1C931703396D917026576E8 /* PFMutableACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = F05547667B76C441755A476C0996B67A /* PFMutableACLState.m */; }; F353B70A061E08623279B54744E15DA7 /* POPAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = ED596D85957A49EC6092EC8EC38FCE49 /* POPAnimationInternal.h */; }; F388B7C3B4B0325048D4B5E4C1BAF904 /* POPAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 14938EB08280063D294781C3164C8332 /* POPAnimation.h */; }; + F39072DEE0911AC516A6A0E2312E43FF /* PFURLSessionUploadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 484F5D6426BF8586F7203DC9DE6690A1 /* PFURLSessionUploadTaskDelegate.m */; }; F3A5D609595883FAB0550B75A0237C58 /* POPMath.mm in Sources */ = {isa = PBXBuildFile; fileRef = A19FD133843D5FCF16B8AF3B4E165515 /* POPMath.mm */; }; - F41FB512F52C7C721107DFC24193C18D /* PFURLSessionCommandRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E6180746342782338BDCA4EE5B65D72 /* PFURLSessionCommandRunner.m */; }; - F4E009870A5A3FFF06CE2805D238306B /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AF8C210F41A36E77FE11185CD850274 /* CoreLocation.framework */; }; - F4E711DBBE33C63D91C5EB82D7559094 /* PFInstallationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E6BECFF342BD360C868DC57ABEEC767 /* PFInstallationConstants.m */; }; + F3EB191FFE3A408094DE22C5702866C7 /* PFURLSessionCommandRunner.h in Headers */ = {isa = PBXBuildFile; fileRef = C6930DD80530DC03DCEC33CA1BE24BE7 /* PFURLSessionCommandRunner.h */; }; + F406237401551FF73ED1D6F46B9613FD /* PFInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = E6EC9018A6A5F9DC5F956E06A0A1DA5D /* PFInstallationController.h */; }; + F425727E94B1F6A5753C672782668DA5 /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 03BFBD31F2922FEFEDBE273BF9244C02 /* BFTask.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + F4922902A8496B92175E98875B1E43EE /* PFRESTCommand_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D52AB7265F316C1F4B4C5881D8EA52DC /* PFRESTCommand_Private.h */; }; F50CFC840B1B486D290EF5656C3AB5A4 /* TransformationMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 35574BADA6CDEA944F089CBC021F01AA /* TransformationMatrix.cpp */; }; - F7145179707A6982099A9639DB58CDD1 /* PFAnonymousAuthenticationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 832FCCE6C5FBEE8B8EDE5CB7506C1387 /* PFAnonymousAuthenticationProvider.h */; }; - F7D3BCD31F6408894D425BCC2F4FD82D /* PFCommandURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 54B2FDE08445C963E18042DD668FA776 /* PFCommandURLRequestConstructor.h */; }; + F67601BBBF33AFD98C62783D944447E7 /* PFMutableQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = A5C0755A44D6605CF4BE2DFE2EDE1D86 /* PFMutableQueryState.m */; }; + F6D940BA794B0671DA54F656020B4724 /* PFLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DD2128030F8E23F9B1C6141659F3B8C /* PFLocationManager.m */; }; + F752BA3F9DFCB0CFF12254ED534F812E /* PFPushController.h in Headers */ = {isa = PBXBuildFile; fileRef = DC04CA70DD902C38FD430C17D4244E92 /* PFPushController.h */; }; + F8CBAB6E6152105BE58195EABC8F3759 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 24A36B9D634B60BD2A1CAC408B8226A3 /* PFURLSessionFileDownloadTaskDelegate.h */; }; + F900480B0F50E907D9223FB00D113C81 /* PFURLSessionCommandRunner_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FCE60212A5F1B30DB0FA50C2C7FCBE17 /* PFURLSessionCommandRunner_Private.h */; }; F9627C89FA11AC0378E77DF8EF1535FF /* POPAnimationTracer.mm in Sources */ = {isa = PBXBuildFile; fileRef = C1E27C3CBB149C1873F6CDC55D998CE2 /* POPAnimationTracer.mm */; }; - F97EA210A1C7E07EE9CB9501FCC444F8 /* PFMutableQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = CB81D6A5051D8F542190EDFDC7456611 /* PFMutableQueryState.m */; }; - FACAABA588E76C9C2DD2AB634B0E9069 /* PFMutableObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 7962520325311C12136692F8AA4F4AD1 /* PFMutableObjectState.m */; }; - FBA278641B85C2C4DFB9D28E978268EB /* PFSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D157CA12EC27ADEB58C088EBB17D4CC /* PFSession.h */; }; - FC3E62E611240996AA6720A91B4EABB3 /* PFRESTCommand_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5857640427DCEDE7D0433F498D520085 /* PFRESTCommand_Private.h */; }; - FD7B3714953511B022F7BA9A3B788C27 /* PFPush.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E24261DA563B7612DBA518C8FEB0B6B /* PFPush.h */; }; - FDCA9B7C897364F5E3986CE205C27A92 /* PFPush.m in Sources */ = {isa = PBXBuildFile; fileRef = E1E17B04786B5816404325BFDBE700B8 /* PFPush.m */; }; - FDFF36E4566B4F31B50CC82D7987A738 /* PFPinningObjectStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 507594AEA30B179FEE12586498800470 /* PFPinningObjectStore.m */; }; - FF10EDB81D6724D8A7CBBF85ACC89082 /* PFAnalyticsUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 16B0BA102C5E8108137BE847C8377A1E /* PFAnalyticsUtilities.h */; }; - FFA7BE1A5108294991B631273306B337 /* PFURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 74CC29CB5720DF98AD22C289EBAA7FBD /* PFURLSession.m */; }; - FFA925D18B7C5F8BDF61C623CA2E9D73 /* PFRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = FD7F7F0634794A2E01436C4EF9CD8DFE /* PFRelationState.h */; }; - FFFD333600E0CF9D8AE5D00E36F147C2 /* PFHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DD7438CB8B7D0CE7BAEE6965CE86AEF /* PFHash.h */; }; + F97952FC246CFA2BD4D966B5559A56C8 /* PFCurrentConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 09D61EB0980687ECD7D678DA7465F846 /* PFCurrentConfigController.h */; }; + F9AF286C68FB0128D9E7F6BC6B633B21 /* PFBaseState.h in Headers */ = {isa = PBXBuildFile; fileRef = 2980A00A9C6B5DB5973D0870C4343CDF /* PFBaseState.h */; }; + FB133DC3F020B283A9C68C69221C4554 /* PFObjectLocalIdStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DE629D21A679A60A0F64440A0BAC324 /* PFObjectLocalIdStore.m */; }; + FB7AC681EC198DEB192BC63B632C175A /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = A9B5F4ADDFA617FF96FED75084262625 /* PFConfig.m */; }; + FC42B8D37F5C4C8274AE7BB705E67D04 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2AD64A1E39EF0EC17E66E7C8C765930 /* QuartzCore.framework */; }; + FC64B5EF6BA6F7E5F55223FB81992454 /* PFInstallationIdentifierStore.m in Sources */ = {isa = PBXBuildFile; fileRef = A266244911A0F90CFC3A6FF419F3140D /* PFInstallationIdentifierStore.m */; }; + FCDD1AECC17F3CDC339C3C5DD388C7F0 /* PFConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 750C23383E751070C38083B3DDED458E /* PFConfig_Private.h */; }; + FF543356567A2076067A44509DE5A382 /* BFTask+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 86B138E9858EDFEBAA891920A773BB74 /* BFTask+Private.h */; }; + FF6DC72BA5C030A41082FBB3A9214E57 /* PFKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 71AF2ED13A3973592E31F7D47D5D90F0 /* PFKeychainStore.h */; }; + FF8769831CEEAC994C0278991436D422 /* PFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4897F88BB4A784CD6F1DFE74C498732A /* PFNetworkActivityIndicatorManager.m */; }; + FF964C55BB9F3A9A6B4DAD0FBC56AACA /* PFCurrentUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = CA74286D523103A7357250A458466DC3 /* PFCurrentUserController.m */; }; + FFF2129425021FE43AAA3D726791994A /* PFNullability.h in Headers */ = {isa = PBXBuildFile; fileRef = 77C22DDD172F2AE628D146B1BD68824A /* PFNullability.h */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 38312B8FB651E2B23B6C5E889DC2C345 /* PBXContainerItemProxy */ = { + 0E31099F1DACDF2E2DCE828E4EED3984 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 3094A346FA0BA2A7016A256FB910F479; + remoteGlobalIDString = E1F0B29D8C274D3B4A2566B0DFA6A902; remoteInfo = Bolts; }; - 43DAF625E1C76FEDADD2A5A410AC7016 /* PBXContainerItemProxy */ = { + 384587FE181EB87FB186E5EABAF2646A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; remoteGlobalIDString = 47C800E42623009B7192B025B3DD25A1; remoteInfo = pop; }; - 6919D792BE090C23FDDA7F3F41ED1D7D /* PBXContainerItemProxy */ = { + A456FA0F15BA9B2536652B1701BAF644 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 3094A346FA0BA2A7016A256FB910F479; + remoteGlobalIDString = E1F0B29D8C274D3B4A2566B0DFA6A902; remoteInfo = Bolts; }; - 7B95C3C8CBBED75AFC0D447738B85785 /* PBXContainerItemProxy */ = { + AACED10EAE78F8427CE29A9FEE769081 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 6B21C5373E714B4D9498D17EE535A4D6; + remoteGlobalIDString = E2B6A7F9ABCCE48BC851C4EAE332D8FB; remoteInfo = Parse; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 0007F67CE44CDB26AC0B26E0B4438F17 /* PFMutableFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableFileState.m; path = Parse/Internal/File/State/PFMutableFileState.m; sourceTree = ""; }; - 003F04CCCCA9D217090A10F09B6A095B /* PFCommandResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandResult.h; path = Parse/Internal/PFCommandResult.h; sourceTree = ""; }; - 005D78329EE21D6E17E5C61CD7F99399 /* PFPropertyInfo_Runtime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Runtime.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h; sourceTree = ""; }; - 01760A57DC1D7F86DDC6BD37AF0773FD /* PFSessionUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionUtilities.m; path = Parse/Internal/Session/Utilities/PFSessionUtilities.m; sourceTree = ""; }; - 01B5421FED39CB875C6EB4E26A48BD0E /* PFCurrentUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentUserController.h; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.h; sourceTree = ""; }; - 01F9E3D986D34EB39EC1D2728FB49D75 /* PFCloud.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloud.m; path = Parse/PFCloud.m; sourceTree = ""; }; - 022E40D42E74E0C92C4963F2BE8E4FD5 /* PFRESTPushCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTPushCommand.h; path = Parse/Internal/Commands/PFRESTPushCommand.h; sourceTree = ""; }; - 023787FB361088A0CC1401AF3EF0BD44 /* PFUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState.h; path = Parse/Internal/User/State/PFUserState.h; sourceTree = ""; }; - 0241335D86A1EA4D1D2367A14A072B98 /* PFBase64Encoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBase64Encoder.h; path = Parse/Internal/PFBase64Encoder.h; sourceTree = ""; }; + 00835672E9411A4D0F46362CD9FC93C9 /* PFMutableObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableObjectState.m; path = Parse/Internal/Object/State/PFMutableObjectState.m; sourceTree = ""; }; + 00AC73B1D5A77DE4B493A990018DA825 /* PFCurrentConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentConfigController.m; path = Parse/Internal/Config/Controller/PFCurrentConfigController.m; sourceTree = ""; }; + 02ADA053F55CC3D3354BB334C196EA78 /* PFInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallation.m; path = Parse/PFInstallation.m; sourceTree = ""; }; + 03BFBD31F2922FEFEDBE273BF9244C02 /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; 0476012CEBFEB22B5F0926994E6AEEE3 /* POPAnimatorPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimatorPrivate.h; path = pop/POPAnimatorPrivate.h; sourceTree = ""; }; - 0638F31DB969AAA2089D7F79383493DD /* PFErrorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFErrorUtilities.h; path = Parse/Internal/PFErrorUtilities.h; sourceTree = ""; }; - 067C9B58B0E86A024F7699B9FC2F7E42 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - 06D0E06E5B5391A250E1E1200BADD9E1 /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; - 08D26CE5516D7D42D9222FD32B2EDB93 /* PFCategoryLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCategoryLoader.h; path = Parse/Internal/PFCategoryLoader.h; sourceTree = ""; }; - 08FC3ACF4FB85302DB39490D9E032664 /* PFHTTPURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPURLRequestConstructor.h; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h; sourceTree = ""; }; - 09FDB3ED688B893DC31F13212A092E58 /* ParseModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseModule.h; path = Parse/Internal/ParseModule.h; sourceTree = ""; }; - 0A7AF22DC435894F3927644A0B475DFA /* PFMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMacros.h; path = Parse/Internal/PFMacros.h; sourceTree = ""; }; - 0A8C828F2BF737F68E0CF5F2CE64D6C2 /* PFRole.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRole.h; path = Parse/PFRole.h; sourceTree = ""; }; + 050B2D7FC8433528EE96A73D6084FDCA /* PFThreadsafety.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFThreadsafety.h; path = Parse/Internal/ThreadSafety/PFThreadsafety.h; sourceTree = ""; }; + 0524A1E79CBE55E8D0C538F4382D17B7 /* PFMutableRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableRelationState.m; path = Parse/Internal/Relation/State/PFMutableRelationState.m; sourceTree = ""; }; + 06A34F6AE5214388ED772768B1AED0E1 /* PFEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyQueue.m; path = Parse/Internal/PFEventuallyQueue.m; sourceTree = ""; }; + 06C655052162786B845146B0DB31017F /* PFAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics.h; path = Parse/PFAnalytics.h; sourceTree = ""; }; + 078642F5D1917B58A6998424887BD706 /* PFWeakValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFWeakValue.h; path = Parse/Internal/PFWeakValue.h; sourceTree = ""; }; + 07A4A542A64193B1380E5346BCEBD316 /* PFObjectFilePersistenceController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFilePersistenceController.h; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h; sourceTree = ""; }; + 099176EFCB8B1C379CDFD09F1B0290F4 /* PFRESTObjectCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectCommand.m; path = Parse/Internal/Commands/PFRESTObjectCommand.m; sourceTree = ""; }; + 09D61EB0980687ECD7D678DA7465F846 /* PFCurrentConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentConfigController.h; path = Parse/Internal/Config/Controller/PFCurrentConfigController.h; sourceTree = ""; }; + 09E9F2F5DDCB3D2B60BDC018656F8355 /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; 0A9ED47A0EA56543BEB2F83DFD6122C8 /* POPCGUtils.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPCGUtils.mm; path = pop/POPCGUtils.mm; sourceTree = ""; }; - 0AF5597A50326B2C756F30471E7EA8BE /* PFPinningEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningEventuallyQueue.h; path = Parse/Internal/PFPinningEventuallyQueue.h; sourceTree = ""; }; - 0B7AF33E13FC52EAA4B353E736F48431 /* PFBaseState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBaseState.h; path = Parse/Internal/PFBaseState.h; sourceTree = ""; }; - 0C05D3A3DD0A525F6B31D006CCC2D2F4 /* PFProduct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProduct.h; path = Parse/PFProduct.h; sourceTree = ""; }; - 0C4513EB4F24A2BDEE3106F5C83A1664 /* ParseInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseInternal.h; path = Parse/Internal/ParseInternal.h; sourceTree = ""; }; - 0C8CEF3DB4AEFD83044AD62B8A9ABD41 /* PFPropertyInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo.m; sourceTree = ""; }; - 0DBAF5788AC957A98F8DA82DF0E007A8 /* PFFileController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileController.h; path = Parse/Internal/File/Controller/PFFileController.h; sourceTree = ""; }; - 0EA667FBF478CB2CC7CFE38041F96D6F /* PFRESTUserCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTUserCommand.h; path = Parse/Internal/Commands/PFRESTUserCommand.h; sourceTree = ""; }; - 0EB55315EB3A3AB23E3EB95B4B89971F /* PFConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConstants.h; path = Parse/PFConstants.h; sourceTree = ""; }; - 0F437AB63E48A5534A05700959E05607 /* PFFileStagingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileStagingController.m; path = Parse/Internal/File/Controller/PFFileStagingController.m; sourceTree = ""; }; - 0FAFDD952B22B5410869339CD24F946E /* PFFieldOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperation.m; path = Parse/Internal/FieldOperation/PFFieldOperation.m; sourceTree = ""; }; - 10634547D3CF0DBCA1FCF7438AB74C39 /* PFOfflineObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineObjectController.h; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h; sourceTree = ""; }; - 117B19051931B86306911BB447C05694 /* PFPinningObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningObjectStore.h; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.h; sourceTree = ""; }; - 126E0178D6FE6C3AC0790CCA7F490DE8 /* PFACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState.h; path = Parse/Internal/ACL/State/PFACLState.h; sourceTree = ""; }; - 12C263F3A518B7482AA7F6DA83C5BE2A /* PFAnalyticsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsController.h; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.h; sourceTree = ""; }; - 12C8B2712D809AA1B4EC70ADAB8C6809 /* PFMutableQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableQueryState.h; path = Parse/Internal/Query/State/PFMutableQueryState.h; sourceTree = ""; }; - 130E12A377FD4C1EC29AF55964B70A23 /* PFLocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLocationManager.m; path = Parse/Internal/PFLocationManager.m; sourceTree = ""; }; + 0B1F17F7CC5A76F9BE1ABD011A8AB9C7 /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; + 0B782D4B8E3CF13324D674E51D4AA45A /* PFCloud.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloud.m; path = Parse/PFCloud.m; sourceTree = ""; }; + 0C10587D5F82F53DEA74DF5129DD7312 /* PFMultiProcessFileLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLock.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h; sourceTree = ""; }; + 0CC5D59716A7C77BE85C9B72C76F0A38 /* PFConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConstants.m; path = Parse/PFConstants.m; sourceTree = ""; }; + 0D29BD0D675C84B8C7EF1F88FD36417D /* PFURLSessionFileDownloadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionFileDownloadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m; sourceTree = ""; }; + 0D322CC5914ECCF1403B38B9F1A7597F /* PFHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHash.m; path = Parse/Internal/PFHash.m; sourceTree = ""; }; + 0DD193A7608BB519CE6B1B91AE25E86C /* PFRole.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRole.m; path = Parse/PFRole.m; sourceTree = ""; }; + 1018BFE57D5EDCC0B72E6A255BEC0971 /* PFFileManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileManager.m; path = Parse/Internal/PFFileManager.m; sourceTree = ""; }; + 106E039845795427C9E9FC7A626BF395 /* PFRESTObjectCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectCommand.h; path = Parse/Internal/Commands/PFRESTObjectCommand.h; sourceTree = ""; }; + 110790F94C28E100B1086C0F8B7D1198 /* PFObjectFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCodingLogic.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h; sourceTree = ""; }; + 110F3B75E3D3EC4A08CEBF6AC5B01CE0 /* PFPushPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushPrivate.h; path = Parse/Internal/Push/PFPushPrivate.h; sourceTree = ""; }; + 1146110AA563CDAFA693A1B073292A1E /* PFObjectPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectPrivate.h; path = Parse/Internal/Object/PFObjectPrivate.h; sourceTree = ""; }; + 11BAD4B729ACB9404D4D1110F4EAD454 /* PFFieldOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperation.m; path = Parse/Internal/FieldOperation/PFFieldOperation.m; sourceTree = ""; }; + 12C95F161EE734C3016E891E9C306A42 /* PFSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSession.m; path = Parse/PFSession.m; sourceTree = ""; }; + 132074912F44DB77C37332C4CA8A3DAB /* PFInternalUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInternalUtils.m; path = Parse/Internal/PFInternalUtils.m; sourceTree = ""; }; + 132B11DB4450BB2DC8926A20B853B6AD /* PFRESTQueryCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTQueryCommand.m; path = Parse/Internal/Commands/PFRESTQueryCommand.m; sourceTree = ""; }; 134BDC30251FB7A5465C17F603FCAC5F /* POPPropertyAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPPropertyAnimationInternal.h; path = pop/POPPropertyAnimationInternal.h; sourceTree = ""; }; - 139FB17B5AD5B2BD40E10B8D2177BEDC /* Parse-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Parse-dummy.m"; sourceTree = ""; }; - 13EA057769889745EF622AD275B30A3F /* PFCommandCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandCache.m; path = Parse/Internal/PFCommandCache.m; sourceTree = ""; }; + 13AAF6B43993D5DCA1ABA1E0C06822F9 /* PFUserAuthenticationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationController.h; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h; sourceTree = ""; }; 14906790E82B81D5B68B2258E95425B4 /* pop.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = pop.xcconfig; sourceTree = ""; }; 14938EB08280063D294781C3164C8332 /* POPAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimation.h; path = pop/POPAnimation.h; sourceTree = ""; }; - 152FEBFF4B90D0D9894CED8063D4D7D0 /* PFAnonymousAuthenticationProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousAuthenticationProvider.m; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m; sourceTree = ""; }; 15A529C27057E4A57D259CBC6E6CE49C /* Pods-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-acknowledgements.markdown"; sourceTree = ""; }; - 16B0BA102C5E8108137BE847C8377A1E /* PFAnalyticsUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsUtilities.h; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h; sourceTree = ""; }; - 16E2644C0CFB5068F39B60EA663C06F8 /* PFInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallation.h; path = Parse/PFInstallation.h; sourceTree = ""; }; - 186E1997DE5BBBD9E2A895D71A7BC915 /* PFPushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushState.m; path = Parse/Internal/Push/State/PFPushState.m; sourceTree = ""; }; - 1969D32C99E438DDB5CD4D541DDC00CD /* PFPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPin.m; path = Parse/Internal/LocalDataStore/Pin/PFPin.m; sourceTree = ""; }; + 15C0132F3858BCC88CB28061A960F0D1 /* PFPinningEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningEventuallyQueue.h; path = Parse/Internal/PFPinningEventuallyQueue.h; sourceTree = ""; }; + 177ECEF6166CB8A176CA4C377BFFD54B /* PFRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelationState.m; path = Parse/Internal/Relation/State/PFRelationState.m; sourceTree = ""; }; + 17A4E3B51919C1813C70CF9A41D08C64 /* PFSubclassing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSubclassing.h; path = Parse/PFSubclassing.h; sourceTree = ""; }; + 17A73E112537B17232FB3245923658EF /* PFRESTSessionCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTSessionCommand.m; path = Parse/Internal/Commands/PFRESTSessionCommand.m; sourceTree = ""; }; + 17C4E65BFD7461A5C5B88B9650622AFA /* PFCommandCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache_Private.h; path = Parse/Internal/PFCommandCache_Private.h; sourceTree = ""; }; + 18EE5011502D312C68238751D67BA76A /* PFSQLiteDatabaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseController.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m; sourceTree = ""; }; 197635F0BFB93E63E82503F09B7AABBF /* POPLayerExtras.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPLayerExtras.mm; path = pop/POPLayerExtras.mm; sourceTree = ""; }; - 1A4880CA362DCF456DE8C64954480CEB /* PFRESTFileCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTFileCommand.h; path = Parse/Internal/Commands/PFRESTFileCommand.h; sourceTree = ""; }; - 1B0BA363E4B429F291596ABBFF279C44 /* PFGeoPointPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPointPrivate.h; path = Parse/Internal/PFGeoPointPrivate.h; sourceTree = ""; }; - 1CECC0578B9328DAEB8EA4E274B9D16A /* PFFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile.h; path = Parse/PFFile.h; sourceTree = ""; }; - 1CFD4EDE572C72678AC61FDC5C92AAC4 /* PFPushUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushUtilities.h; path = Parse/Internal/Push/Utilites/PFPushUtilities.h; sourceTree = ""; }; - 1EE03D2CE9262E74BE101A9AD7F66934 /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; - 1EE3B22DE1F33BE14763458A191128C1 /* PFRESTObjectBatchCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectBatchCommand.m; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.m; sourceTree = ""; }; - 1F1826EAEE4BB8BAD18008DEBA561577 /* PFMultiProcessFileLockController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLockController.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m; sourceTree = ""; }; - 1F56BA43A619F5C1A2ED1F36B30E29A4 /* PFPurchaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseController.h; path = Parse/Internal/Purchase/Controller/PFPurchaseController.h; sourceTree = ""; }; - 1FA13E8424FDF032B807EB307AF448F7 /* PFUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUser.m; path = Parse/PFUser.m; sourceTree = ""; }; - 1FDE3C12C2A761D6DD2E3EFE88D9A85C /* PFFieldOperationDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperationDecoder.m; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.m; sourceTree = ""; }; - 1FF980C8F6DFEF3C3FB8C7A56B963C15 /* PFCurrentObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentObjectControlling.h; path = Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h; sourceTree = ""; }; - 2007FCF4B24326D21653DCD5F4F03D9E /* PFQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryController.m; path = Parse/Internal/Query/Controller/PFQueryController.m; sourceTree = ""; }; + 1A90C53A523B75F828B57C0D0368595B /* PFAnalyticsUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsUtilities.m; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m; sourceTree = ""; }; + 1AD6E87805E310F6517D29CDFEEE9587 /* PFFieldOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperation.h; path = Parse/Internal/FieldOperation/PFFieldOperation.h; sourceTree = ""; }; + 1AF8F0B7303C117779BBEBE048717710 /* PFFileState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState_Private.h; path = Parse/Internal/File/State/PFFileState_Private.h; sourceTree = ""; }; + 1B4CDA57AC000136EA5B434611EF0426 /* PFURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h; sourceTree = ""; }; + 1C7CE32C1AC8296CA307938E551C3B91 /* PFCommandRunningConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunningConstants.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m; sourceTree = ""; }; + 1D07F2F153FA1A7D77D68027DBF1AA33 /* PFAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAssert.h; path = Parse/Internal/PFAssert.h; sourceTree = ""; }; + 1D3CEE52CB984D4C4DB6A4F7A4903BBC /* PFRESTPushCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTPushCommand.h; path = Parse/Internal/Commands/PFRESTPushCommand.h; sourceTree = ""; }; + 1FA17927867D6B7D6DADCC59515AAE7D /* PFInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationController.m; path = Parse/Internal/Installation/Controller/PFInstallationController.m; sourceTree = ""; }; + 1FC52A2F51F3D38AD751DF3CC9B7DA95 /* PFObjectBatchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectBatchController.m; path = Parse/Internal/Object/BatchController/PFObjectBatchController.m; sourceTree = ""; }; + 20AC43D5B60CA86B1AD76BC5D4591D96 /* PFPurchase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchase.m; path = Parse/PFPurchase.m; sourceTree = ""; }; + 20DFAAE476F60317DEAEE177019E41E9 /* PFHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHash.h; path = Parse/Internal/PFHash.h; sourceTree = ""; }; 212068113F29FA47D17730ED388F8706 /* POPBasicAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPBasicAnimation.h; path = pop/POPBasicAnimation.h; sourceTree = ""; }; - 2218553C181F20F306EC36D9B7169974 /* PFDefaultACLController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDefaultACLController.m; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m; sourceTree = ""; }; + 2127EF3ED0DD02367DA4C3463002ACB7 /* PFAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAlertView.h; path = Parse/Internal/PFAlertView.h; sourceTree = ""; }; + 2171BDF0DFBFCB33F05FC9A1AC8B42B5 /* PFMultiProcessFileLockController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLockController.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m; sourceTree = ""; }; + 21D9F2D1230AD40B645828FF1CFD4506 /* PFObject+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFObject+Subclass.h"; path = "Parse/PFObject+Subclass.h"; sourceTree = ""; }; + 2280179A3928340114FB48C1AF04368F /* PFMultiProcessFileLock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLock.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m; sourceTree = ""; }; 22DC4C87D619EF0F28631B5560E82333 /* POPAnimationExtras.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationExtras.mm; path = pop/POPAnimationExtras.mm; sourceTree = ""; }; - 22F8D68DF4AAD2C14B0AB430E0C5337F /* PFMulticastDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMulticastDelegate.m; path = Parse/Internal/PFMulticastDelegate.m; sourceTree = ""; }; - 22FDFA3B8D05D54B5BB969DABCBC6413 /* ParseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseManager.m; path = Parse/Internal/ParseManager.m; sourceTree = ""; }; - 26B663E68AA063970F54C5A4311360EA /* PFPushManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushManager.m; path = Parse/Internal/Push/Manager/PFPushManager.m; sourceTree = ""; }; - 26C358BF063BCDCE76707FB07B405CB6 /* PFOperationSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOperationSet.h; path = Parse/Internal/Object/OperationSet/PFOperationSet.h; sourceTree = ""; }; + 23EFBFB21E3A2659446F462A44152817 /* PFCategoryLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCategoryLoader.m; path = Parse/Internal/PFCategoryLoader.m; sourceTree = ""; }; + 248BBC0B2BBF2B01CCFCC79F7FE785AE /* PFObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectControlling.h; path = Parse/Internal/Object/Controller/PFObjectControlling.h; sourceTree = ""; }; + 24A36B9D634B60BD2A1CAC408B8226A3 /* PFURLSessionFileDownloadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionFileDownloadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h; sourceTree = ""; }; + 2515044ACEA23C32AC39FC89A3A0F6E0 /* PFInstallationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationPrivate.h; path = Parse/Internal/Installation/PFInstallationPrivate.h; sourceTree = ""; }; 2726A20CBCFFB77F9972C445E8972099 /* POPPropertyAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPPropertyAnimation.mm; path = pop/POPPropertyAnimation.mm; sourceTree = ""; }; - 27C57412F25313254CDCF65E3AB69F64 /* PFDateFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDateFormatter.h; path = Parse/Internal/PFDateFormatter.h; sourceTree = ""; }; 29386A5F2F357AA19B9627F8C57A8D14 /* Bolts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-prefix.pch"; sourceTree = ""; }; - 2B16B8588E9DCC56E87F38E324BE2E50 /* PFLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogger.m; path = Parse/Internal/PFLogger.m; sourceTree = ""; }; - 2B32B43DC93B94CD2FD151A51C7009B2 /* PFRESTUserCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTUserCommand.m; path = Parse/Internal/Commands/PFRESTUserCommand.m; sourceTree = ""; }; - 2C0B84AF80B3F79D3684EC294B10145D /* PFInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationController.m; path = Parse/Internal/Installation/Controller/PFInstallationController.m; sourceTree = ""; }; - 2C86B73BF7530888F6D5B7414D36E50E /* PFAnonymousUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils.h; path = Parse/PFAnonymousUtils.h; sourceTree = ""; }; - 2CDE17945AABA4BFAB91FD36A9002DB4 /* PFConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfig.m; path = Parse/PFConfig.m; sourceTree = ""; }; - 2DD709EEB7F953B2BFD2FFBF243EF632 /* PFInternalUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInternalUtils.h; path = Parse/Internal/PFInternalUtils.h; sourceTree = ""; }; + 2980A00A9C6B5DB5973D0870C4343CDF /* PFBaseState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBaseState.h; path = Parse/Internal/PFBaseState.h; sourceTree = ""; }; + 2A4C94256E730FF99DD4B0F41D9D749C /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; + 2A8F12B4902D7D8A8BBAF518DB7C37EF /* PFObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController.h; path = Parse/Internal/Object/Controller/PFObjectController.h; sourceTree = ""; }; + 2B07F2F4F2D16D912592A5F093A28DA6 /* PFMutableFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableFileState.m; path = Parse/Internal/File/State/PFMutableFileState.m; sourceTree = ""; }; + 2B52BDCCABD35EA2D1C44912753D79E1 /* PFDefaultACLController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDefaultACLController.h; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h; sourceTree = ""; }; + 2B9C4FA9F02AD2C7B7F788126DA856F5 /* PFPushChannelsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushChannelsController.m; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.m; sourceTree = ""; }; + 2C38E6D6FFD2BE12F651C934B7BFCE1C /* PFBase64Encoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBase64Encoder.m; path = Parse/Internal/PFBase64Encoder.m; sourceTree = ""; }; + 2CB00E16E736A73AA516D8A0FA5DB28E /* PFCoreDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreDataProvider.h; path = Parse/Internal/PFCoreDataProvider.h; sourceTree = ""; }; + 2CDBD2A39D34214C8D004ED2EB0D1624 /* PFUserFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserFileCodingLogic.m; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m; sourceTree = ""; }; + 2CE62F458530CD664224D3B0B7E49EAB /* PFCurrentInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentInstallationController.h; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h; sourceTree = ""; }; + 2DBBD6C38E3D91712C6414D4224376D3 /* PFJSONSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFJSONSerialization.h; path = Parse/Internal/PFJSONSerialization.h; sourceTree = ""; }; 2E056FF5C4EC38A55B45FB52F395D72E /* TransformationMatrix.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TransformationMatrix.h; path = pop/WebCore/TransformationMatrix.h; sourceTree = ""; }; 2E88590D291A3C131FC32F9BC9A80038 /* POPAnimationTracer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationTracer.h; path = pop/POPAnimationTracer.h; sourceTree = ""; }; - 2FE59B575E6D95DCA7C8B65A48397212 /* PFCommandRunningConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunningConstants.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m; sourceTree = ""; }; - 310661341392FCCCCA69B3D4AA745597 /* PFConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfigController.h; path = Parse/Internal/Config/Controller/PFConfigController.h; sourceTree = ""; }; + 2F561B1D0F25670B287F11DE69B4A30C /* PFLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogging.h; path = Parse/Internal/PFLogging.h; sourceTree = ""; }; + 312D446A8E99BA072B9A091616AB0DC2 /* PFHTTPURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHTTPURLRequestConstructor.m; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m; sourceTree = ""; }; 313669CF0D1BF49C96C85FC593F4BC1D /* POPAnimatableProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimatableProperty.h; path = pop/POPAnimatableProperty.h; sourceTree = ""; }; 3155A15C877F794FB064A4A0CEEB2F13 /* POPGeometry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPGeometry.h; path = pop/POPGeometry.h; sourceTree = ""; }; - 317ED8ACDA393EB59C813498345758A5 /* PFNullability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNullability.h; path = Parse/PFNullability.h; sourceTree = ""; }; - 3257C6D2F1664400BC0FA089A7A688A8 /* PFObjectFileCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCoder.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.m; sourceTree = ""; }; - 32D7E6743D001141788DFE84AF635291 /* PFURLSessionDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m; sourceTree = ""; }; - 3395CE4D4A4BF8134C0A8860F1672838 /* PFOfflineQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryController.h; path = Parse/Internal/Query/Controller/PFOfflineQueryController.h; sourceTree = ""; }; - 349789B8BAC6B5134BB027FB59B2DAE4 /* PFInstallationIdentifierStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationIdentifierStore.m; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m; sourceTree = ""; }; + 331907AED7D09788ACC2D6029AB2604F /* PFURLSessionJSONDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionJSONDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m; sourceTree = ""; }; + 33A4732FF27318AD75D549D9D4EF9CF7 /* PFPushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState.h; path = Parse/Internal/Push/State/PFPushState.h; sourceTree = ""; }; 35574BADA6CDEA944F089CBC021F01AA /* TransformationMatrix.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TransformationMatrix.cpp; path = pop/WebCore/TransformationMatrix.cpp; sourceTree = ""; }; - 365E961AFE93318B968A4EAD9C3042AD /* PFDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDecoder.h; path = Parse/Internal/PFDecoder.h; sourceTree = ""; }; - 36E5C28B728EEE2896643C1BD0BB1E3B /* PFKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeychainStore.m; path = Parse/Internal/PFKeychainStore.m; sourceTree = ""; }; - 378A8BDEE3062C91F84C778871060257 /* PFQueryUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryUtilities.h; path = Parse/Internal/Query/Utilities/PFQueryUtilities.h; sourceTree = ""; }; - 38386024B8BB9B3B8F22D7B1FD578A31 /* PFQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQuery.m; path = Parse/PFQuery.m; sourceTree = ""; }; + 35A7823CEFBFE2CF5ABB3556EF3D0995 /* PFPushController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushController.m; path = Parse/Internal/Push/Controller/PFPushController.m; sourceTree = ""; }; + 35F4C67236438881E09D5813BFA8BB6A /* PFObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectController.m; path = Parse/Internal/Object/Controller/PFObjectController.m; sourceTree = ""; }; + 372AEF8690F07BECE3E348391A87DEBD /* PFPurchaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseController.m; path = Parse/Internal/Purchase/Controller/PFPurchaseController.m; sourceTree = ""; }; + 381988C254ED0DACBFE2ED8164944325 /* PFObjectController_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController_Private.h; path = Parse/Internal/Object/Controller/PFObjectController_Private.h; sourceTree = ""; }; 38C1E5A4A6882760CB349FCABD22A9DC /* POP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POP.h; path = pop/POP.h; sourceTree = ""; }; - 39F54AA49BC2FD125A794644082419CE /* PFDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDevice.h; path = Parse/Internal/PFDevice.h; sourceTree = ""; }; + 397A9B2690E0D54158F63ECBF0C769B2 /* Bolts-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Bolts-Private.xcconfig"; sourceTree = ""; }; + 39F8120161EADF847B985CB2751E4B2A /* PFCommandRunning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunning.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.h; sourceTree = ""; }; + 3A3CFC6CFCF3EBBA16C7CCEB59F009AD /* PFAnonymousAuthenticationProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousAuthenticationProvider.m; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m; sourceTree = ""; }; + 3A56F696F9B2544A6A4DB58FB8E47809 /* PFMutableACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableACLState.h; path = Parse/Internal/ACL/State/PFMutableACLState.h; sourceTree = ""; }; 3A5F7AF86D19E519B94AD6D8CB98CC34 /* POPAnimationRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationRuntime.h; path = pop/POPAnimationRuntime.h; sourceTree = ""; }; - 3B3B39A4E421EE0FF21AB42B74EE1955 /* PFFileManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileManager.m; path = Parse/Internal/PFFileManager.m; sourceTree = ""; }; - 3CD1F5B90828B5EDD6A87F8F8B8CBEC5 /* PFCachedQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCachedQueryController.h; path = Parse/Internal/Query/Controller/PFCachedQueryController.h; sourceTree = ""; }; + 3AF05F518409F76124476457E2514771 /* PFHTTPURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPURLRequestConstructor.h; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h; sourceTree = ""; }; 3D02C6C7422645AB5529C759A1A86353 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; - 3D56DAEA6274547A9C5D871A0412DD30 /* PFQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQuery.h; path = Parse/PFQuery.h; sourceTree = ""; }; - 3DF189D36ECF2252091D16F77FBAA4B1 /* PFFieldOperationDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperationDecoder.h; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.h; sourceTree = ""; }; - 3E0F1E598FDC4AD2B9344C0BE42CEF0A /* PFRESTSessionCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTSessionCommand.h; path = Parse/Internal/Commands/PFRESTSessionCommand.h; sourceTree = ""; }; - 3ED31097D39E6FCF0F3C743613AFA30C /* BoltsVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BoltsVersion.h; path = Bolts/Common/BoltsVersion.h; sourceTree = ""; }; - 3ED3C7E0A4856FAB56766C096BB50FC4 /* PFUserAuthenticationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserAuthenticationController.m; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m; sourceTree = ""; }; - 3FF58ECD6BEDF747B767ABEBBB293774 /* PFFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState.h; path = Parse/Internal/File/State/PFFileState.h; sourceTree = ""; }; - 4051AFB557520935D16F093222B0C0BB /* PFMulticastDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMulticastDelegate.h; path = Parse/Internal/PFMulticastDelegate.h; sourceTree = ""; }; - 409D5D646200B0874F402A55B2054320 /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; + 3D8637E5A58491F08A00BD27912794B7 /* PFDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDevice.m; path = Parse/Internal/PFDevice.m; sourceTree = ""; }; + 3D98F818FBD7F97BBBBADD55203F244B /* PFMutableFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableFileState.h; path = Parse/Internal/File/State/PFMutableFileState.h; sourceTree = ""; }; + 3EBCC4FDAE51D4D5EBDF89A681AB0F7D /* PFPush.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPush.m; path = Parse/PFPush.m; sourceTree = ""; }; + 4073B51D97588127A6EF20481CEC3025 /* ParseModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseModule.h; path = Parse/Internal/ParseModule.h; sourceTree = ""; }; + 4113ABD9B9640D41ADFF4F04A28AF0C7 /* PFObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObject.h; path = Parse/PFObject.h; sourceTree = ""; }; + 4123F238BE00014D15B8B3DE34ADC447 /* PFSQLiteStatement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteStatement.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m; sourceTree = ""; }; 419B671E948384A84974D819F4F24FBA /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; - 41F8ECF258A9931347A9663B788331F1 /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; - 4312B15964C63A373BA6C191FD761444 /* PFURLConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLConstructor.m; path = Parse/Internal/HTTPRequest/PFURLConstructor.m; sourceTree = ""; }; - 431480C91CFCFE70AF20289CEECDDA2C /* PFCloud.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloud.h; path = Parse/PFCloud.h; sourceTree = ""; }; - 435286DE6414AD754A172CA441F36643 /* PFConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConstants.m; path = Parse/PFConstants.m; sourceTree = ""; }; - 43DDAC0517DD7E2A075642D9FB379D04 /* PFRESTQueryCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTQueryCommand.h; path = Parse/Internal/Commands/PFRESTQueryCommand.h; sourceTree = ""; }; - 43F7CA0102C3FA58C58F19240D8C4672 /* PFMutablePushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutablePushState.m; path = Parse/Internal/Push/State/PFMutablePushState.m; sourceTree = ""; }; - 43FEB98D92288E63383CA2110D5E1033 /* PFCurrentInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentInstallationController.h; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h; sourceTree = ""; }; - 4500DD87BF3AB695EEEF0D03C9E94067 /* PFURLSessionCommandRunner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h; sourceTree = ""; }; - 453D0F6EFB50B07FB491E7A1E373EAF6 /* PFURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h; sourceTree = ""; }; - 45C24BC4DD0B5F2B7F803B32EC634F9C /* PFPaymentTransactionObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPaymentTransactionObserver.m; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m; sourceTree = ""; }; - 4648A560C468826E346FA00C25F64545 /* PFObjectFilePersistenceController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFilePersistenceController.m; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m; sourceTree = ""; }; - 4671EA53DD8AE149FB0F02838CD24C37 /* PFNetworkCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkCommand.h; path = Parse/Internal/PFNetworkCommand.h; sourceTree = ""; }; - 478C891A77C52ACD2EE9267253F46B18 /* libParse.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libParse.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 47A6E2FEA4744CFF9330F4BDD5E274CE /* PFObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController.h; path = Parse/Internal/Object/Controller/PFObjectController.h; sourceTree = ""; }; - 48056B31A860AAD6950C3519A539F495 /* PFRESTConfigCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTConfigCommand.m; path = Parse/Internal/Commands/PFRESTConfigCommand.m; sourceTree = ""; }; - 4840DBE7CE64AE75599772CB21A51C7E /* PFUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUser.h; path = Parse/PFUser.h; sourceTree = ""; }; - 48764192F317D5037D89AF6584C95481 /* PFGeoPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPoint.h; path = Parse/PFGeoPoint.h; sourceTree = ""; }; - 4922CD9E2B9E78912E88BDDA753C4FB2 /* PFRESTQueryCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTQueryCommand.m; path = Parse/Internal/Commands/PFRESTQueryCommand.m; sourceTree = ""; }; - 4C28BCBA3F60C895444F215DF1A28EBF /* PFHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHash.m; path = Parse/Internal/PFHash.m; sourceTree = ""; }; + 41CD7A269A474E8BFCBF52EFC03BD796 /* PFBase64Encoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBase64Encoder.h; path = Parse/Internal/PFBase64Encoder.h; sourceTree = ""; }; + 42093BEF3F8BF73F39F33B7D65A8B184 /* PFReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFReachability.h; path = Parse/Internal/PFReachability.h; sourceTree = ""; }; + 420A2E467841126C406BA9FA83D75161 /* Parse_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse_Private.h; path = Parse/Internal/Parse_Private.h; sourceTree = ""; }; + 4220E05D6A608326E489CDA533392ED8 /* PFAsyncTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAsyncTaskQueue.m; path = Parse/Internal/PFAsyncTaskQueue.m; sourceTree = ""; }; + 425CA0B11664DBBBEAA5C27618F79FAD /* PFLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogger.m; path = Parse/Internal/PFLogger.m; sourceTree = ""; }; + 42763567F50A02D13E880143048C01A1 /* PFObjectFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCodingLogic.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m; sourceTree = ""; }; + 43D1212BEB11DE789DE0E4CC000FC9AF /* PFDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDevice.h; path = Parse/Internal/PFDevice.h; sourceTree = ""; }; + 440A7F77699899974219AB5825962822 /* PFQueryState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState_Private.h; path = Parse/Internal/Query/State/PFQueryState_Private.h; sourceTree = ""; }; + 4799A3AB2CC4C1F80574291738520C2F /* PFAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAlertView.m; path = Parse/Internal/PFAlertView.m; sourceTree = ""; }; + 484F5D6426BF8586F7203DC9DE6690A1 /* PFURLSessionUploadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionUploadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m; sourceTree = ""; }; + 4897F88BB4A784CD6F1DFE74C498732A /* PFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFNetworkActivityIndicatorManager.m; path = Parse/PFNetworkActivityIndicatorManager.m; sourceTree = ""; }; + 49274509C4FFAAEBBD45D8600A573B2B /* PFInstallationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationConstants.m; path = Parse/Internal/Installation/Constants/PFInstallationConstants.m; sourceTree = ""; }; + 4987E5DF7D6AE7BBDE4D3055F00A8B27 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; + 49E7AE33EEA74B98EDDEF13254E369C2 /* PFFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileState.m; path = Parse/Internal/File/State/PFFileState.m; sourceTree = ""; }; + 4A66170B5CA1BBCF22487EEE33E21A6C /* PFProduct+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFProduct+Private.h"; path = "Parse/Internal/Product/PFProduct+Private.h"; sourceTree = ""; }; + 4ACFA0EE4D94D9AD3A656FFFB0D6DC16 /* PFURLSessionJSONDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionJSONDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h; sourceTree = ""; }; + 4BFA78A3405997CEFE0F4A84B480089B /* PFMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMacros.h; path = Parse/Internal/PFMacros.h; sourceTree = ""; }; + 4C9C62664AD1CE0A3036EA774C72C69C /* PFRESTObjectBatchCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectBatchCommand.h; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.h; sourceTree = ""; }; 4CC05709207C91767940918CDD4779DC /* POPCGUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPCGUtils.h; path = pop/POPCGUtils.h; sourceTree = ""; }; - 4D5FFAB9AA9026C7A87341B6E4F0D9D7 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; - 4DC9003F64939358FF50986ADC0DF824 /* PFInternalUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInternalUtils.m; path = Parse/Internal/PFInternalUtils.m; sourceTree = ""; }; - 4E9D9F93BE35D535FACB0F23193B2668 /* PFDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDevice.m; path = Parse/Internal/PFDevice.m; sourceTree = ""; }; - 4EB9E22A1797EF8F815387B3148987B7 /* PFUserConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserConstants.m; path = Parse/Internal/User/Constants/PFUserConstants.m; sourceTree = ""; }; - 507594AEA30B179FEE12586498800470 /* PFPinningObjectStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningObjectStore.m; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.m; sourceTree = ""; }; - 50F5D5E8541B4E9B381B9D48639498A9 /* PFConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfigController.m; path = Parse/Internal/Config/Controller/PFConfigController.m; sourceTree = ""; }; - 512DF9E7249F58F9AF45B707F9C3949F /* PFEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyQueue.m; path = Parse/Internal/PFEventuallyQueue.m; sourceTree = ""; }; - 524FE09AA008388A357FA29376EBA283 /* PFLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogging.h; path = Parse/Internal/PFLogging.h; sourceTree = ""; }; - 527000AD7EF33A01F4034400FB51B6E9 /* PFURLSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h; sourceTree = ""; }; - 52DA55B0C48801979739E451008199A5 /* PFKeyValueCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache_Private.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h; sourceTree = ""; }; - 53FF030EF4F55FF673AA368E802BA1AD /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; - 549E8AA3A0932BA40BF11C59E1C2C7BD /* PFObjectFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCodingLogic.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m; sourceTree = ""; }; - 54B2FDE08445C963E18042DD668FA776 /* PFCommandURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandURLRequestConstructor.h; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h; sourceTree = ""; }; - 54BB29D5628B693DB06DEF1222114715 /* PFCloudCodeController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloudCodeController.h; path = Parse/Internal/CloudCode/PFCloudCodeController.h; sourceTree = ""; }; - 56743024027A104903BB088C1FED631A /* PFAnalytics_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics_Private.h; path = Parse/Internal/Analytics/PFAnalytics_Private.h; sourceTree = ""; }; + 4DE181E23B100CCECFB4B435A3DF9AD4 /* PFUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserController.h; path = Parse/Internal/User/Controller/PFUserController.h; sourceTree = ""; }; + 4E29EFCB546410074B97DF506ABC1C98 /* PFFileDataStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileDataStream.h; path = Parse/Internal/File/FileDataStream/PFFileDataStream.h; sourceTree = ""; }; + 4E8E5DE9CFE8C0FF513510782D08CD45 /* BFDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFDefines.h; path = Bolts/Common/BFDefines.h; sourceTree = ""; }; + 4F35A9095465C7A589E9D7FC2F4774D8 /* PFFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState.h; path = Parse/Internal/File/State/PFFileState.h; sourceTree = ""; }; + 5057A97EFDC884111C4A5829863ADD7C /* Parse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse.h; path = Parse/Parse.h; sourceTree = ""; }; + 50B0DDFFAD085BBF7A9EE5E4B41E834B /* PFKeyValueCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeyValueCache.m; path = Parse/Internal/KeyValueCache/PFKeyValueCache.m; sourceTree = ""; }; + 514CD500BD8BACEDB35A91E6F6135E56 /* PFRESTAnalyticsCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTAnalyticsCommand.h; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.h; sourceTree = ""; }; + 529877D68CE76A3FBD3B683DAFF9EAE6 /* PFOfflineQueryLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryLogic.m; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m; sourceTree = ""; }; + 53086C5F8B1EDBB0614BD2C21F7CBB35 /* PFCommandRunning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunning.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.m; sourceTree = ""; }; + 53F21E51B835CE481CAA7ADCD43FC400 /* PFCachedQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCachedQueryController.h; path = Parse/Internal/Query/Controller/PFCachedQueryController.h; sourceTree = ""; }; + 53F56D358828987779F91894A792A4CA /* PFInstallationIdentifierStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h; sourceTree = ""; }; + 546B14FA2F1DCF4C453346FC971CDDB6 /* PFApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFApplication.m; path = Parse/Internal/PFApplication.m; sourceTree = ""; }; + 56414F68055CC861BAB740091699D58B /* PFAnonymousUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousUtils.m; path = Parse/PFAnonymousUtils.m; sourceTree = ""; }; + 56D3E21616E0654B5CFD38290C9213A9 /* PFSessionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionController.m; path = Parse/Internal/Session/Controller/PFSessionController.m; sourceTree = ""; }; + 576B1125C947E14A49E22D7F411DC55C /* PFPinningObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningObjectStore.h; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.h; sourceTree = ""; }; 5785AD09C2208501D5161E950E701889 /* POPAnimationEventInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationEventInternal.h; path = pop/POPAnimationEventInternal.h; sourceTree = ""; }; - 5857640427DCEDE7D0433F498D520085 /* PFRESTCommand_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand_Private.h; path = Parse/Internal/Commands/PFRESTCommand_Private.h; sourceTree = ""; }; - 588102B50CAE5BFD6658FF5042965B9E /* Parse_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse_Private.h; path = Parse/Internal/Parse_Private.h; sourceTree = ""; }; - 58B7C9659B0B47DE31498D5601CC2E12 /* PFOperationSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOperationSet.m; path = Parse/Internal/Object/OperationSet/PFOperationSet.m; sourceTree = ""; }; + 57BAE3AE27D1DF554AB43ADF5CA1C592 /* PFRelation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelation.m; path = Parse/PFRelation.m; sourceTree = ""; }; + 581264D483DB217A6F5ED83035A33E30 /* PFRESTPushCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTPushCommand.m; path = Parse/Internal/Commands/PFRESTPushCommand.m; sourceTree = ""; }; + 5844FC1A0322F7909761B921AC033AC3 /* PFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkActivityIndicatorManager.h; path = Parse/PFNetworkActivityIndicatorManager.h; sourceTree = ""; }; + 5880D4CB5AA7C367A9C45BE209F6CED6 /* PFWeakValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFWeakValue.m; path = Parse/Internal/PFWeakValue.m; sourceTree = ""; }; + 59363C495BDE76341FC7C70BE565EF4A /* PFObjectEstimatedData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectEstimatedData.m; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m; sourceTree = ""; }; + 59A9225041C3DEB9A02CF97CE810A7F8 /* PFEncoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEncoder.h; path = Parse/Internal/PFEncoder.h; sourceTree = ""; }; 59B3FD41DEC22C5891C9B83C27BC25E0 /* pop-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "pop-dummy.m"; sourceTree = ""; }; - 59CC3868179641E97ED190501DFF4E05 /* PFDefaultACLController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDefaultACLController.h; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h; sourceTree = ""; }; - 5AAA36FB0A4E13DB1928E19770D8EFF8 /* PFMutableUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableUserState.m; path = Parse/Internal/User/State/PFMutableUserState.m; sourceTree = ""; }; + 5A09D1AC6A988D2BC0012D3F2027B90C /* PFMutableRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableRelationState.h; path = Parse/Internal/Relation/State/PFMutableRelationState.h; sourceTree = ""; }; + 5A71F8897B642BC983919241A133904D /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; + 5A7FFA051B54FAFBAAF14E0C23C4641F /* PFRESTConfigCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTConfigCommand.m; path = Parse/Internal/Commands/PFRESTConfigCommand.m; sourceTree = ""; }; 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "pop-Private.xcconfig"; sourceTree = ""; }; - 5B31CEE7768E9065A1168B8DFC0BAB53 /* PFUserAuthenticationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationController.h; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h; sourceTree = ""; }; - 5B8726A00CBE872AD6EEF361F3E1A9BE /* PFObjectSubclassingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassingController.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h; sourceTree = ""; }; - 5BB217AB66F98AB5F05CBAB65838FA70 /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; - 5C77B473F634527F1102E3093D9ECCFE /* PFMultiProcessFileLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLock.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h; sourceTree = ""; }; - 5CA96AB87A674FDD5847C707289446B2 /* PFRESTCloudCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCloudCommand.h; path = Parse/Internal/Commands/PFRESTCloudCommand.h; sourceTree = ""; }; - 5DBA1E4D4138BAC1EB874D74D4AE73C1 /* PFPropertyInfo_Runtime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo_Runtime.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m; sourceTree = ""; }; - 5DD7438CB8B7D0CE7BAEE6965CE86AEF /* PFHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHash.h; path = Parse/Internal/PFHash.h; sourceTree = ""; }; - 5E00A160407B37F025D21140BEA61FE9 /* PFOfflineObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineObjectController.m; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m; sourceTree = ""; }; - 5E6180746342782338BDCA4EE5B65D72 /* PFURLSessionCommandRunner.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionCommandRunner.m; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m; sourceTree = ""; }; - 5E6BECFF342BD360C868DC57ABEEC767 /* PFInstallationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationConstants.m; path = Parse/Internal/Installation/Constants/PFInstallationConstants.m; sourceTree = ""; }; - 5EA6C82779BDAB43BEF4E9F00620B3CE /* PFCategoryLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCategoryLoader.m; path = Parse/Internal/PFCategoryLoader.m; sourceTree = ""; }; - 5F2F5693477E620DC6D5E2C3F6627CDA /* PFTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTaskQueue.m; path = Parse/Internal/PFTaskQueue.m; sourceTree = ""; }; - 5FDB9AA6B98C04B1C0D671A64BEEFEED /* PFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFNetworkActivityIndicatorManager.m; path = Parse/PFNetworkActivityIndicatorManager.m; sourceTree = ""; }; - 6006204F33FEC54FE00EA9417DDC3F22 /* PFAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAlertView.m; path = Parse/Internal/PFAlertView.m; sourceTree = ""; }; - 602F796D464ED522B3E9F48F6B4306A4 /* PFProduct.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProduct.m; path = Parse/PFProduct.m; sourceTree = ""; }; - 6117D27B3E43E27D2717ADF042654E56 /* PFRESTAnalyticsCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTAnalyticsCommand.m; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.m; sourceTree = ""; }; - 62080F892890D93BE422B38D0ADD788B /* Parse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse.h; path = Parse/Parse.h; sourceTree = ""; }; - 63068DEB876F824B178AEFCD8421DB6A /* PFObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectControlling.h; path = Parse/Internal/Object/Controller/PFObjectControlling.h; sourceTree = ""; }; - 63298AA824390762997B9EF2E73DDBD6 /* PFObjectUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectUtilities.h; path = Parse/Internal/Object/Utilities/PFObjectUtilities.h; sourceTree = ""; }; + 5B311513624F9614FA7EBA34D397F337 /* PFPurchaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseController.h; path = Parse/Internal/Purchase/Controller/PFPurchaseController.h; sourceTree = ""; }; + 5B55D2A6F5C29F672688ABE3737712C1 /* PFRESTCloudCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCloudCommand.m; path = Parse/Internal/Commands/PFRESTCloudCommand.m; sourceTree = ""; }; + 5B8E6E53482F4B643407A15BA8B0F287 /* PFFieldOperationDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperationDecoder.h; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.h; sourceTree = ""; }; + 5BE848028E2C509A4FA316D19E795CD7 /* PFThreadsafety.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFThreadsafety.m; path = Parse/Internal/ThreadSafety/PFThreadsafety.m; sourceTree = ""; }; + 5C2B236ABC299A669D53E54FC6FF7414 /* PFInstallationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationConstants.h; path = Parse/Internal/Installation/Constants/PFInstallationConstants.h; sourceTree = ""; }; + 5F48FD0FD7AA215B6C44D0D0D2B89AA6 /* PFEventuallyPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyPin.h; path = Parse/Internal/PFEventuallyPin.h; sourceTree = ""; }; + 5F8C504A6034C0190584C29C9997115B /* PFRESTQueryCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTQueryCommand.h; path = Parse/Internal/Commands/PFRESTQueryCommand.h; sourceTree = ""; }; + 603F88D603FD21B1DB540C18DCB38780 /* PFSQLiteDatabaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseController.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h; sourceTree = ""; }; + 6082FD21FE81654EC989E13CFA913CAB /* PFSQLiteDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h; sourceTree = ""; }; + 608790F5A36AC5B2650CA3AB5EDB96D8 /* PFRESTAnalyticsCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTAnalyticsCommand.m; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.m; sourceTree = ""; }; + 60AC5AE111695E87D9942D028A5723AE /* PFTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTaskQueue.m; path = Parse/Internal/PFTaskQueue.m; sourceTree = ""; }; + 6104AB82845FA5625E51A56F2D3213B8 /* ParseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseManager.h; path = Parse/Internal/ParseManager.h; sourceTree = ""; }; + 611FEF49E42DDEF17150301DFA476527 /* PFCoreManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCoreManager.m; path = Parse/Internal/PFCoreManager.m; sourceTree = ""; }; + 619BA5C9745FABA615C1071117CF49AF /* PFUserConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserConstants.h; path = Parse/Internal/User/Constants/PFUserConstants.h; sourceTree = ""; }; + 623D1DB3CEA9317B7323E1B4435A4B04 /* PFFileStagingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileStagingController.m; path = Parse/Internal/File/Controller/PFFileStagingController.m; sourceTree = ""; }; 641AE05DD55E5E6AC1590CD7B4A18F97 /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = ""; }; - 64541D2ABD36F76DA73F677AC3E20A1A /* PFACL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACL.h; path = Parse/PFACL.h; sourceTree = ""; }; - 64A6FC072C0BE15E0FB1732E5E7BFA8F /* PFOfflineQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryController.m; path = Parse/Internal/Query/Controller/PFOfflineQueryController.m; sourceTree = ""; }; - 64CA497DEB5823668E1CF3AEF0FC8118 /* PFAnalyticsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsController.m; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.m; sourceTree = ""; }; - 6516FEAA3036D59756B8161A5A9E7918 /* PFFileDataStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileDataStream.h; path = Parse/Internal/File/FileDataStream/PFFileDataStream.h; sourceTree = ""; }; - 6577AD13A469645712E5462FABF1FD4F /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; - 66778E4EF145FC32D4ED5D0B3B643425 /* PFProduct+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFProduct+Private.h"; path = "Parse/Internal/Product/PFProduct+Private.h"; sourceTree = ""; }; - 66B0DF4B48195D78B041D58D3C3AEE3F /* PFInstallationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationPrivate.h; path = Parse/Internal/Installation/PFInstallationPrivate.h; sourceTree = ""; }; - 6753A9356424F2F8B192F9B14278EE8E /* PFRelationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationPrivate.h; path = Parse/Internal/Relation/PFRelationPrivate.h; sourceTree = ""; }; - 67B621259A8F197B0245C2C5B5003445 /* PFURLSessionFileDownloadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionFileDownloadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h; sourceTree = ""; }; - 68F8CC838971F8BE4FD097EA7C5BF494 /* PFKeyValueCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache.h; sourceTree = ""; }; + 66C84FE024EC45EF4AB8D3EE3366EAF3 /* PFQueryPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryPrivate.h; path = Parse/Internal/Query/PFQueryPrivate.h; sourceTree = ""; }; + 68900F0E0EB2E31F6E0B59E6692F1C5E /* PFDateFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDateFormatter.m; path = Parse/Internal/PFDateFormatter.m; sourceTree = ""; }; 6961E549FC85F85EB7560B887B11C928 /* POPSpringSolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringSolver.h; path = pop/POPSpringSolver.h; sourceTree = ""; }; - 696FA42E303EDB3CADE000C9A7F03B68 /* PFOfflineQueryLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryLogic.m; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m; sourceTree = ""; }; - 6A5BCCC7BC1F6EA4EF7FD3C7BB518BAB /* PFRESTCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCommand.m; path = Parse/Internal/Commands/PFRESTCommand.m; sourceTree = ""; }; - 6B12A0FF8B77277D84507AC79070FF41 /* PFCommandURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandURLRequestConstructor.m; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m; sourceTree = ""; }; - 6B2C19C0AF74CAAFAD47C599A4E9A495 /* PFMutablePushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutablePushState.h; path = Parse/Internal/Push/State/PFMutablePushState.h; sourceTree = ""; }; - 6B58384502B9F28F6975F16F9DB0EFF3 /* PFUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserController.h; path = Parse/Internal/User/Controller/PFUserController.h; sourceTree = ""; }; - 6CBB64CFFD32EF20996F33E08CE27F2B /* PFInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallation.m; path = Parse/PFInstallation.m; sourceTree = ""; }; - 6CC0DF9EFC230F428EBC36272C09AF04 /* PFPaymentTransactionObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h; sourceTree = ""; }; - 6D24EDB2D5A2B95E2AC01499F225F585 /* PFCoreManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreManager.h; path = Parse/Internal/PFCoreManager.h; sourceTree = ""; }; - 6D33981E62B4BA883B0FBE4A4DA1C812 /* PFObjectEstimatedData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectEstimatedData.m; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m; sourceTree = ""; }; - 6D47488328F5D210AF09C2E49EAF28AE /* PFApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFApplication.m; path = Parse/Internal/PFApplication.m; sourceTree = ""; }; - 6DB2F830CB43261A32A1658BB35A9006 /* PFSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSession.m; path = Parse/PFSession.m; sourceTree = ""; }; - 6DDEF20541344C4516B6DD22C1EB240F /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; - 6DE516CCF6D322CB4CA050FD6E52A70E /* ParseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseManager.h; path = Parse/Internal/ParseManager.h; sourceTree = ""; }; - 6E5E6D3B44810118191C60A9772E4E48 /* BFTask+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Private.m"; path = "Parse/Internal/BFTask+Private.m"; sourceTree = ""; }; - 6EA62081F6F193B86D2CDD0A04D0E99C /* PFRole.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRole.m; path = Parse/PFRole.m; sourceTree = ""; }; - 711043A9271B2D627CCBD4F5731F56B1 /* PFMultiProcessFileLock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLock.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m; sourceTree = ""; }; - 714C2B37BE3060D4E9F3C32DD8DA8D04 /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; - 714D2457E720A0BF6948DBDCD450623B /* PFEncoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEncoder.m; path = Parse/Internal/PFEncoder.m; sourceTree = ""; }; - 72761DCB73DE19D59EFDEF3DF961C4F3 /* PFObjectConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectConstants.h; path = Parse/Internal/Object/Constants/PFObjectConstants.h; sourceTree = ""; }; + 696CB0BED47C8B75EFCBA90955BB17EA /* PFGeoPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFGeoPoint.m; path = Parse/PFGeoPoint.m; sourceTree = ""; }; + 6A34F74808E75DF01FC097E2274D4116 /* PFFileManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileManager.h; path = Parse/Internal/PFFileManager.h; sourceTree = ""; }; + 6AC5046C91AD0BF56975D1A7F382F946 /* PFRESTFileCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTFileCommand.h; path = Parse/Internal/Commands/PFRESTFileCommand.h; sourceTree = ""; }; + 6AFE87339800D6E962F2EFEC155ABC75 /* PFObjectConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectConstants.m; path = Parse/Internal/Object/Constants/PFObjectConstants.m; sourceTree = ""; }; + 6BDA2CB539774B96EADA0171CEB88CC6 /* PFSQLiteDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabase.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m; sourceTree = ""; }; + 6C07AD7B01F99BCDAE94E6D7D0BF6038 /* PFLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocationManager.h; path = Parse/Internal/PFLocationManager.h; sourceTree = ""; }; + 6C364D224B5FE61E8BA844FB66D55C5F /* PFPushManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushManager.m; path = Parse/Internal/Push/Manager/PFPushManager.m; sourceTree = ""; }; + 6C3AFFA6C615F4519F0FD6DD4EA4194C /* PFURLSessionDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m; sourceTree = ""; }; + 6C3B93CF1C94B6DA6DEB3D31B9710F83 /* PFCommandRunningConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunningConstants.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h; sourceTree = ""; }; + 6C49C75467014FA33C9642023DA6F54D /* PFCachedQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCachedQueryController.m; path = Parse/Internal/Query/Controller/PFCachedQueryController.m; sourceTree = ""; }; + 6CCEA16112CA90E44E0E982B2A2B27D3 /* PFOfflineObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineObjectController.h; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h; sourceTree = ""; }; + 6DD2128030F8E23F9B1C6141659F3B8C /* PFLocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLocationManager.m; path = Parse/Internal/PFLocationManager.m; sourceTree = ""; }; + 6DDB11ED96EBA4EC3BB398585D212BD7 /* PFPurchase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchase.h; path = Parse/PFPurchase.h; sourceTree = ""; }; + 6DE629D21A679A60A0F64440A0BAC324 /* PFObjectLocalIdStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectLocalIdStore.m; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m; sourceTree = ""; }; + 6E393C3F2BB10DF131AB02A295297B88 /* PFUserFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserFileCodingLogic.h; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h; sourceTree = ""; }; + 6E5945950FBDA34F155BE025094F2F22 /* PFURLSessionDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h; sourceTree = ""; }; + 6E5AF4BFF040360310887AAACC8C323C /* PFProduct.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProduct.m; path = Parse/PFProduct.m; sourceTree = ""; }; + 6FC0F52242A2200901325143AB469063 /* PFCommandResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandResult.h; path = Parse/Internal/PFCommandResult.h; sourceTree = ""; }; + 707C0020EA94AD091665CAAD43AA717B /* PFRESTSessionCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTSessionCommand.h; path = Parse/Internal/Commands/PFRESTSessionCommand.h; sourceTree = ""; }; + 715B44864CC4816F9E241DBDAE6498CE /* PFQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQuery.h; path = Parse/PFQuery.h; sourceTree = ""; }; + 718BF86CB0A3C4DB13DBC0EAEA86A9EF /* PFObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObject.m; path = Parse/PFObject.m; sourceTree = ""; }; + 71AF2ED13A3973592E31F7D47D5D90F0 /* PFKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeychainStore.h; path = Parse/Internal/PFKeychainStore.h; sourceTree = ""; }; + 71D39E34A21D15F057EC75D91D396416 /* PFSQLiteStatement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteStatement.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h; sourceTree = ""; }; + 71EFF9FFB238B21E016BDB85AA6333DD /* PFUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUser.m; path = Parse/PFUser.m; sourceTree = ""; }; + 71FB977D682D8E9A3C20EB5A8FA8D44B /* PFConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig.h; path = Parse/PFConfig.h; sourceTree = ""; }; + 722BD969D4C4074223C4A656C0F6B7E7 /* PFAnalyticsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsController.m; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.m; sourceTree = ""; }; + 72BD4751F46AFBD16AE367CAE3FA8785 /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; + 72DCBBAC0FE8319BEC96154A134CD74B /* PFCurrentInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentInstallationController.m; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m; sourceTree = ""; }; + 72E4522345A892B89A84489DB3B8F316 /* PFMutableUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableUserState.h; path = Parse/Internal/User/State/PFMutableUserState.h; sourceTree = ""; }; + 7334DBEED1B1C3906828C55F380147ED /* PFPropertyInfo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Private.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h; sourceTree = ""; }; + 7363B398C79454A71B17ACDF25FAA393 /* PFUserAuthenticationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationDelegate.h; path = Parse/PFUserAuthenticationDelegate.h; sourceTree = ""; }; 7371F16336283F2D8BB2A199CD4DDEF5 /* POPSpringAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringAnimation.h; path = pop/POPSpringAnimation.h; sourceTree = ""; }; - 74ACACF597B47C752DF60C1269A50016 /* PFURLSessionFileDownloadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionFileDownloadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m; sourceTree = ""; }; - 74CC29CB5720DF98AD22C289EBAA7FBD /* PFURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSession.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m; sourceTree = ""; }; - 74EE96B44DF0116B1160526B21D7D189 /* PFMultiProcessFileLockController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLockController.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h; sourceTree = ""; }; - 751B683157A512BFFD27276B937C7FD6 /* PFProductsRequestHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductsRequestHandler.m; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m; sourceTree = ""; }; - 7566A44BF4C7FE91F74365E72E1C4073 /* PFDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDecoder.m; path = Parse/Internal/PFDecoder.m; sourceTree = ""; }; + 73BA46E681EC6D99B36A7E314941B82A /* PFEncoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEncoder.m; path = Parse/Internal/PFEncoder.m; sourceTree = ""; }; + 741AF064CFE86ABB229F37FBAFB71F22 /* PFDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDecoder.h; path = Parse/Internal/PFDecoder.h; sourceTree = ""; }; + 7461F51B0EABADB21626FF904B87CCE5 /* PFEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue.h; path = Parse/Internal/PFEventuallyQueue.h; sourceTree = ""; }; + 750C23383E751070C38083B3DDED458E /* PFConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig_Private.h; path = Parse/Internal/Config/PFConfig_Private.h; sourceTree = ""; }; + 75EBF2C2BD6CA4EB5FC5249BB70052D3 /* PFMulticastDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMulticastDelegate.h; path = Parse/Internal/PFMulticastDelegate.h; sourceTree = ""; }; + 76E34CF3E0809A86C3173F02A63233D2 /* PFOfflineObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineObjectController.m; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m; sourceTree = ""; }; 77312E9917F3B4071B52F28CD4A21EBC /* Bolts.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.xcconfig; sourceTree = ""; }; - 77409243AF81F02474E6071043269440 /* PFPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPin.h; path = Parse/Internal/LocalDataStore/Pin/PFPin.h; sourceTree = ""; }; - 776FA4A81A104C872B1C274D67CE18FE /* PFUserState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState_Private.h; path = Parse/Internal/User/State/PFUserState_Private.h; sourceTree = ""; }; - 791F22142433CB687B6BD4F07D0950F1 /* PFObjectSubclassInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassInfo.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m; sourceTree = ""; }; - 7962520325311C12136692F8AA4F4AD1 /* PFMutableObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableObjectState.m; path = Parse/Internal/Object/State/PFMutableObjectState.m; sourceTree = ""; }; - 797597C3E809F5E570660958DD8719D8 /* PFMutableRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableRelationState.h; path = Parse/Internal/Relation/State/PFMutableRelationState.h; sourceTree = ""; }; - 7AF8C210F41A36E77FE11185CD850274 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; }; - 7BEEAEF9152946B143C6C357FCF24E5A /* PFEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue.h; path = Parse/Internal/PFEventuallyQueue.h; sourceTree = ""; }; - 7BF3525974C036CC12A09FF5C9633C85 /* PFFileStagingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileStagingController.h; path = Parse/Internal/File/Controller/PFFileStagingController.h; sourceTree = ""; }; - 7DEA9336EA629BC874D1CD9F3933E83C /* PFFileController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileController.m; path = Parse/Internal/File/Controller/PFFileController.m; sourceTree = ""; }; + 77C22DDD172F2AE628D146B1BD68824A /* PFNullability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNullability.h; path = Parse/PFNullability.h; sourceTree = ""; }; + 792D4196F6AB3ECF94F94E4B1A786D9D /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + 7971DD333353B1B9C109052C86147DEA /* PFOfflineStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineStore.h; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h; sourceTree = ""; }; + 79D9D3FFDE344267236EECCAA6397DA3 /* PFPropertyInfo_Runtime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo_Runtime.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m; sourceTree = ""; }; + 7A9E8271F4A4A2FE0F545A52010B99A1 /* PFObjectUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectUtilities.m; path = Parse/Internal/Object/Utilities/PFObjectUtilities.m; sourceTree = ""; }; + 7ACE89D8884AAB54C96F063FF438FA31 /* PFObjectSubclassingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassingController.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h; sourceTree = ""; }; + 7C85AFD7ABA045B4FE8ED8BF948A7C60 /* PFQueryUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryUtilities.h; path = Parse/Internal/Query/Utilities/PFQueryUtilities.h; sourceTree = ""; }; + 7E3D63307A8DF22EE6CA58FBC364ACF4 /* PFObjectLocalIdStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectLocalIdStore.h; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h; sourceTree = ""; }; 7EA341866E76C794E960BB9753925294 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; + 7EE9007C583DF8ECE1AEF3F938312117 /* PFKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeychainStore.m; path = Parse/Internal/PFKeychainStore.m; sourceTree = ""; }; + 7F142A8509CC5040126EC51BDFDDE6E4 /* PFConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConstants.h; path = Parse/PFConstants.h; sourceTree = ""; }; 7F59C51782AE555897A5B92D6B3CECD1 /* POPBasicAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPBasicAnimationInternal.h; path = pop/POPBasicAnimationInternal.h; sourceTree = ""; }; - 80E779232DDE695E182A465B9AE80CB8 /* PFSQLiteDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabase.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m; sourceTree = ""; }; - 828F0C1371108640DCECDC077D80E6F9 /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; - 82A5F04959D1ADFDEFFC1808EF20F799 /* PFInstallationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationConstants.h; path = Parse/Internal/Installation/Constants/PFInstallationConstants.h; sourceTree = ""; }; - 82C15773B786AB50406081B6A022CFAA /* PFCachedQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCachedQueryController.m; path = Parse/Internal/Query/Controller/PFCachedQueryController.m; sourceTree = ""; }; - 832FCCE6C5FBEE8B8EDE5CB7506C1387 /* PFAnonymousAuthenticationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousAuthenticationProvider.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h; sourceTree = ""; }; + 7FAF3CA5F19C3EB426FBB8AC2A926793 /* PFPushChannelsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushChannelsController.h; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.h; sourceTree = ""; }; + 80F676B2C080DCBC841173D2FC2CBA26 /* PFRESTCloudCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCloudCommand.h; path = Parse/Internal/Commands/PFRESTCloudCommand.h; sourceTree = ""; }; + 8133C4680D6ED2FB7338EF30FC88BBCA /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; + 81397E9A1C30F99B66BB50321A4C5075 /* PFPropertyInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo.h; sourceTree = ""; }; + 82E29BC8D2B7929DF1755FF61A7965EE /* PFPushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushState.m; path = Parse/Internal/Push/State/PFPushState.m; sourceTree = ""; }; 8336CCF2280C58E6C367DF4EC0EBB7B3 /* POPAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimation.mm; path = pop/POPAnimation.mm; sourceTree = ""; }; - 83720EF13618F9740F2F7E1F7E8DE8B9 /* PFMutableUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableUserState.h; path = Parse/Internal/User/State/PFMutableUserState.h; sourceTree = ""; }; - 84C9421C2D04758A8862D5D9334EC3D3 /* PFBase64Encoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBase64Encoder.m; path = Parse/Internal/PFBase64Encoder.m; sourceTree = ""; }; - 84ECBFAB9763ED2C04848E86CC5D6C1D /* PFOfflineStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineStore.m; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m; sourceTree = ""; }; - 85AB3D3F633121769C963DCA3B59E6D6 /* PFCurrentConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentConfigController.m; path = Parse/Internal/Config/Controller/PFCurrentConfigController.m; sourceTree = ""; }; - 85C7493C5ED4D1548757C3A048535862 /* PFRESTConfigCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTConfigCommand.h; path = Parse/Internal/Commands/PFRESTConfigCommand.h; sourceTree = ""; }; - 861462FD667FE3B82B6900562A7A672F /* PFAnalyticsUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsUtilities.m; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m; sourceTree = ""; }; - 865C327D27A51821F5096832A0A79CD6 /* PFPaymentTransactionObserver_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver_Private.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h; sourceTree = ""; }; + 8357F198915C0DBFE26D33A3CFD62A56 /* PFCloudCodeController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloudCodeController.m; path = Parse/Internal/CloudCode/PFCloudCodeController.m; sourceTree = ""; }; + 840EF1BA3066E61DD0BA27741371AE22 /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; + 84279F3B0C8DD145E9A9E04D59B81C41 /* PFURLConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLConstructor.h; path = Parse/Internal/HTTPRequest/PFURLConstructor.h; sourceTree = ""; }; + 84B340A85871E94B6C963F8AC7AA61A3 /* PFCategoryLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCategoryLoader.h; path = Parse/Internal/PFCategoryLoader.h; sourceTree = ""; }; + 86589D24F969C8D7ABFA2C300F854F18 /* PFCommandURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandURLRequestConstructor.m; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m; sourceTree = ""; }; + 867A8434D57CE1DA9A2FFA7F45002F4D /* PFMutablePushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutablePushState.m; path = Parse/Internal/Push/State/PFMutablePushState.m; sourceTree = ""; }; + 869D3911E9F5718BD0B6815F0AB11EED /* PFACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACLState.m; path = Parse/Internal/ACL/State/PFACLState.m; sourceTree = ""; }; + 86B138E9858EDFEBAA891920A773BB74 /* BFTask+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Private.h"; path = "Parse/Internal/BFTask+Private.h"; sourceTree = ""; }; + 875A9098C4D90F40AE3128DC006E1B98 /* PFURLSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h; sourceTree = ""; }; + 875C18418E320318A1F79B5C8DE9BF08 /* PFDefaultACLController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDefaultACLController.m; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m; sourceTree = ""; }; + 880AE19807FD283D4EB9724F21F4E548 /* PFSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession.h; path = Parse/PFSession.h; sourceTree = ""; }; 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 89508E9160A4510C35341638A4A33FFC /* PFMutableACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableACLState.m; path = Parse/Internal/ACL/State/PFMutableACLState.m; sourceTree = ""; }; - 895E6BCE8395CB2A323176F349B9EFC6 /* PFQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryState.m; path = Parse/Internal/Query/State/PFQueryState.m; sourceTree = ""; }; - 8A01E3948888676B760B4B5642C2B3CD /* PFErrorUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFErrorUtilities.m; path = Parse/Internal/PFErrorUtilities.m; sourceTree = ""; }; - 8AC51F94ED4331609976AE134591C5FF /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; - 8BE5F0A1B5CEA848AD6F87144411D8B7 /* PFObjectFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCodingLogic.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h; sourceTree = ""; }; - 8C42D1919287483D0731E55C7039390D /* PFWeakValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFWeakValue.m; path = Parse/Internal/PFWeakValue.m; sourceTree = ""; }; - 8C954AD66C579F4C80C80E36A0D3E80B /* PFCoreDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreDataProvider.h; path = Parse/Internal/PFCoreDataProvider.h; sourceTree = ""; }; - 8CD59F7A3B1C57C26A073580850CFD7F /* PFAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalytics.m; path = Parse/PFAnalytics.m; sourceTree = ""; }; - 8D157CA12EC27ADEB58C088EBB17D4CC /* PFSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession.h; path = Parse/PFSession.h; sourceTree = ""; }; - 8D874E8C6013F838D31865D7CACFFC8C /* PFURLSessionJSONDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionJSONDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h; sourceTree = ""; }; - 8DCE002C62F26D3852FE0C2CB25CACEA /* PFConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig.h; path = Parse/PFConfig.h; sourceTree = ""; }; - 8E24261DA563B7612DBA518C8FEB0B6B /* PFPush.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPush.h; path = Parse/PFPush.h; sourceTree = ""; }; - 8E5C09D44589D6540714FF487D97E0C3 /* PFPropertyInfo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Private.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h; sourceTree = ""; }; + 8904B6096DEB568855A4A7625ED6CAE1 /* PFObjectBatchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectBatchController.h; path = Parse/Internal/Object/BatchController/PFObjectBatchController.h; sourceTree = ""; }; + 891204204D388D19194E2B25AC4EC9CF /* PFRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState.h; path = Parse/Internal/Relation/State/PFRelationState.h; sourceTree = ""; }; + 8A4BF349F63AC01086486C8E720D05AC /* PFObjectEstimatedData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectEstimatedData.h; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h; sourceTree = ""; }; + 8B5234B11242385CB74EE42A5CBE16D9 /* PFMulticastDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMulticastDelegate.m; path = Parse/Internal/PFMulticastDelegate.m; sourceTree = ""; }; + 8C43426FA34D5469526AAFBD7806A65C /* PFRole.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRole.h; path = Parse/PFRole.h; sourceTree = ""; }; + 8CC4B1CA6C9A2DF20B2C8F69652BC62E /* PFCurrentUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentUserController.h; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.h; sourceTree = ""; }; + 8E5B06286F6DFAD5DAED57C3E9C5400B /* PFMutableObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableObjectState.h; path = Parse/Internal/Object/State/PFMutableObjectState.h; sourceTree = ""; }; 8EC4FC6A3A06D9292C296C691005546B /* POPCustomAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPCustomAnimation.mm; path = pop/POPCustomAnimation.mm; sourceTree = ""; }; - 90908F63ED9505B2C6685248AE5457F4 /* PFRelationState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState_Private.h; path = Parse/Internal/Relation/State/PFRelationState_Private.h; sourceTree = ""; }; + 8EC7BE51CD7D82DB749F5857D70F22F1 /* PFPushUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushUtilities.h; path = Parse/Internal/Push/Utilites/PFPushUtilities.h; sourceTree = ""; }; + 8F6664FFA2E9D3FD4CE7F5A6C742742E /* PFFileStagingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileStagingController.h; path = Parse/Internal/File/Controller/PFFileStagingController.h; sourceTree = ""; }; + 8F97CDDB1431E1D55E17DE205316A5B6 /* PFConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfigController.h; path = Parse/Internal/Config/Controller/PFConfigController.h; sourceTree = ""; }; + 90312FA789CD74048F0D32BCC9C66D08 /* ParseModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseModule.m; path = Parse/Internal/ParseModule.m; sourceTree = ""; }; + 904E4BEABBDE0DE64491D4A2F274F91B /* PFObjectFileCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCoder.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.h; sourceTree = ""; }; 90DA3C63E9AD758336342BC51C0BB859 /* POPDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDefines.h; path = pop/POPDefines.h; sourceTree = ""; }; - 90F15F6DE2D590C1823069FF6E87E823 /* PFPushChannelsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushChannelsController.m; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.m; sourceTree = ""; }; - 9179D67A40E4CA93EA605BECE4456488 /* PFObjectBatchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectBatchController.h; path = Parse/Internal/Object/BatchController/PFObjectBatchController.h; sourceTree = ""; }; - 91C278F6237539322009B508C24CC49D /* PFPushController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushController.h; path = Parse/Internal/Push/Controller/PFPushController.h; sourceTree = ""; }; - 91C444E945365A3AEA1C0182D529EA62 /* PFAsyncTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAsyncTaskQueue.h; path = Parse/Internal/PFAsyncTaskQueue.h; sourceTree = ""; }; - 924397DD8F89F34DFFD235E510DCA00F /* PFObjectConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectConstants.m; path = Parse/Internal/Object/Constants/PFObjectConstants.m; sourceTree = ""; }; + 9142904B7E1F16BB09177E6409AF060F /* PFCloudCodeController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloudCodeController.h; path = Parse/Internal/CloudCode/PFCloudCodeController.h; sourceTree = ""; }; 928EC8B9105DA581C7896C2102E87BE2 /* POPCustomAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPCustomAnimation.h; path = pop/POPCustomAnimation.h; sourceTree = ""; }; - 92BE0A4991FB16CAC08DA54E2D9B4E4C /* PFObject+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFObject+Subclass.h"; path = "Parse/PFObject+Subclass.h"; sourceTree = ""; }; - 943A16F9CDDE8E3F97A4CC444A9CBD38 /* PFRESTPushCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTPushCommand.m; path = Parse/Internal/Commands/PFRESTPushCommand.m; sourceTree = ""; }; + 92FCC3E21D3E8790768C5AF6D196F8E6 /* PFRelation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelation.h; path = Parse/PFRelation.h; sourceTree = ""; }; + 931885B870C2D6166C233379707A6DBC /* PFObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectState.m; path = Parse/Internal/Object/State/PFObjectState.m; sourceTree = ""; }; + 9468278E36B3EB05C5CA530058F1C8D6 /* PFURLSessionDataTaskDelegate_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h; sourceTree = ""; }; 94815AA3EE3CBA04CEE85515701AD534 /* POPAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimator.h; path = pop/POPAnimator.h; sourceTree = ""; }; - 94DE9F283B3DD4A47D7A8EA13D83D2C1 /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; + 95C6F24D93DAFD0A99EFD6D457EB68B1 /* PFURLSessionUploadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionUploadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h; sourceTree = ""; }; 96015F1C746803D9318614B277F71BCB /* UnitBezier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UnitBezier.h; path = pop/WebCore/UnitBezier.h; sourceTree = ""; }; - 96444BC173DBE095E670C72753A21C51 /* PFQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryController.h; path = Parse/Internal/Query/Controller/PFQueryController.h; sourceTree = ""; }; 9663A817A809169745F3F8E987FFE076 /* POPLayerExtras.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPLayerExtras.h; path = pop/POPLayerExtras.h; sourceTree = ""; }; - 972EBE95D808C0CA2DAD94DDC5AC5F1D /* PFSessionUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionUtilities.h; path = Parse/Internal/Session/Utilities/PFSessionUtilities.h; sourceTree = ""; }; - 97519DB5264A8748FB5782787D62615B /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; + 97CC9DF74264B1EB7657386C54DD635B /* PFObjectFilePersistenceController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFilePersistenceController.m; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m; sourceTree = ""; }; 97EDF5367846B0B65AF31CA41D2B7812 /* Parse.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Parse.xcconfig; sourceTree = ""; }; - 98821C83404F255ED479CAA0E69D588A /* PFObjectSubclassInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassInfo.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h; sourceTree = ""; }; - 99AD17888337EB965D0DF3DEB606CAA4 /* PFSessionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionController.m; path = Parse/Internal/Session/Controller/PFSessionController.m; sourceTree = ""; }; - 99FC3FA412F7A62CE7905F3F3DB1A2B8 /* PFBaseState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBaseState.m; path = Parse/Internal/PFBaseState.m; sourceTree = ""; }; - 9A2313F192E2841C83555BDC26D3866B /* PFUserPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserPrivate.h; path = Parse/Internal/User/PFUserPrivate.h; sourceTree = ""; }; - 9BACBB72ECB77F59482B166BC28EA869 /* PFRESTCloudCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCloudCommand.m; path = Parse/Internal/Commands/PFRESTCloudCommand.m; sourceTree = ""; }; + 99C7C0C503A3D3A88614601190439E30 /* BFTask+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Private.m"; path = "Parse/Internal/BFTask+Private.m"; sourceTree = ""; }; + 9A132496AD1361AB641C6E65067049BF /* PFPropertyInfo_Runtime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Runtime.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h; sourceTree = ""; }; + 9C22BE2BFE0552D4CF4E6F400DCBF925 /* libBolts.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBolts.a; sourceTree = BUILT_PRODUCTS_DIR; }; 9C3FE18EB564AF4087573DE6F3F2D3D3 /* POPMath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPMath.h; path = pop/POPMath.h; sourceTree = ""; }; - 9D0F8BFFB2B329D3F8B455B14472E5E9 /* PFReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFReachability.h; path = Parse/Internal/PFReachability.h; sourceTree = ""; }; + 9C99D12456DCBCCB4B0A98B1D7C33FA9 /* PFAnonymousUtils_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils_Private.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h; sourceTree = ""; }; + 9CCF0135C67AEC40B93D2B426712CFC9 /* PFConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfigController.m; path = Parse/Internal/Config/Controller/PFConfigController.m; sourceTree = ""; }; + 9D4E5CDB238B4708D75EDFA04F2388C5 /* PFDateFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDateFormatter.h; path = Parse/Internal/PFDateFormatter.h; sourceTree = ""; }; 9DA58C3428E2A0E2F88C2A0522297274 /* POPAnimationTracerInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationTracerInternal.h; path = pop/POPAnimationTracerInternal.h; sourceTree = ""; }; - 9DB9AD91F894187B691D13713E1FB4D9 /* PFObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectController.m; path = Parse/Internal/Object/Controller/PFObjectController.m; sourceTree = ""; }; - 9EED13B4582C1463F725EE279074226F /* PFRESTObjectCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectCommand.h; path = Parse/Internal/Commands/PFRESTObjectCommand.h; sourceTree = ""; }; + 9DB1B89CDD385F67E440201640C7AFA4 /* PFSessionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionController.h; path = Parse/Internal/Session/Controller/PFSessionController.h; sourceTree = ""; }; + 9DF9D409D2807A34B747777E2DC97F14 /* PFOperationSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOperationSet.m; path = Parse/Internal/Object/OperationSet/PFOperationSet.m; sourceTree = ""; }; + 9E9FF91DD2DCE7D504DE6C0AC9CE6091 /* PFQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState.h; path = Parse/Internal/Query/State/PFQueryState.h; sourceTree = ""; }; + 9ED7955943D662DC1DC137B29185582D /* PFPushState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState_Private.h; path = Parse/Internal/Push/State/PFPushState_Private.h; sourceTree = ""; }; 9F210DEEA777E0BF1995DC3570CC616E /* POPAnimationEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationEvent.h; path = pop/POPAnimationEvent.h; sourceTree = ""; }; - 9F5A413E6DB1455C1427DAEBF27B2133 /* PFMutableACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableACLState.h; path = Parse/Internal/ACL/State/PFMutableACLState.h; sourceTree = ""; }; - 9FB82515BD6D0F9EC91327CB819F8BC6 /* PFFile_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile_Private.h; path = Parse/Internal/File/PFFile_Private.h; sourceTree = ""; }; - 9FD085377EDB67B301B8EE26D9310CCC /* PFQueryState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState_Private.h; path = Parse/Internal/Query/State/PFQueryState_Private.h; sourceTree = ""; }; - A091F705C56846E993F12A441C8A163B /* PFCurrentInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentInstallationController.m; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m; sourceTree = ""; }; - A0C39E3679DEC122C57CAF59AC4607D6 /* PFCurrentUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentUserController.m; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.m; sourceTree = ""; }; + 9F3472D80F0C7C53B06E64DD4D56B74D /* PFAnonymousUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils.h; path = Parse/PFAnonymousUtils.h; sourceTree = ""; }; + 9F3E10B801DC1EAB7C18648EA922D183 /* PFObjectState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState_Private.h; path = Parse/Internal/Object/State/PFObjectState_Private.h; sourceTree = ""; }; + A0F125F4185CBFE9AD59CB8DA8774D62 /* Parse-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Parse-dummy.m"; sourceTree = ""; }; + A12B04A764E33DA1C04C5C989B5C536C /* PFCloud.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloud.h; path = Parse/PFCloud.h; sourceTree = ""; }; A19FD133843D5FCF16B8AF3B4E165515 /* POPMath.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPMath.mm; path = pop/POPMath.mm; sourceTree = ""; }; - A211C4790E0A281B7800BE2B399091FF /* PFQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState.h; path = Parse/Internal/Query/State/PFQueryState.h; sourceTree = ""; }; - A2F0842045651D9FD30403B5033648D7 /* PFPushChannelsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushChannelsController.h; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.h; sourceTree = ""; }; - A3529F546C50E5FA9E92AE069C4127AA /* PFInstallationIdentifierStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h; sourceTree = ""; }; - A3A336AAE714C90D57D61FFCE1F62540 /* PFRESTObjectCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectCommand.m; path = Parse/Internal/Commands/PFRESTObjectCommand.m; sourceTree = ""; }; - A3ABEEBB2584C20918BF1285C34EA0E9 /* PFCurrentConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentConfigController.h; path = Parse/Internal/Config/Controller/PFCurrentConfigController.h; sourceTree = ""; }; - A3F9EF3F957FD4DB2D6C601F067168F7 /* PFObjectLocalIdStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectLocalIdStore.h; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h; sourceTree = ""; }; - A40C6F5379E163ACAB3BFEADF6BBF21B /* PFKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeychainStore.h; path = Parse/Internal/PFKeychainStore.h; sourceTree = ""; }; + A266244911A0F90CFC3A6FF419F3140D /* PFInstallationIdentifierStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationIdentifierStore.m; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m; sourceTree = ""; }; + A2E0CCEE8F29A9378B50A30B3F234FB8 /* PFErrorUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFErrorUtilities.m; path = Parse/Internal/PFErrorUtilities.m; sourceTree = ""; }; + A39433C5B2CFE6011222CBB72F0EAE5C /* PFRESTFileCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTFileCommand.m; path = Parse/Internal/Commands/PFRESTFileCommand.m; sourceTree = ""; }; A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libpop.a; sourceTree = BUILT_PRODUCTS_DIR; }; - A4680CAB4F1F20CE4E4FF134C9A11A0D /* PFObjectSubclassingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassingController.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m; sourceTree = ""; }; - A52285082871167215D3C139EB152B98 /* PFURLSessionDataTaskDelegate_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h; sourceTree = ""; }; - A52D3DEFF51B24F1DDCCC3F6705AB35B /* PFCommandRunning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunning.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.m; sourceTree = ""; }; - A696C6A7BB4CC0BCC4967D91315B61AC /* ParseModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseModule.m; path = Parse/Internal/ParseModule.m; sourceTree = ""; }; - A85428811E6DF1E07CDC7F512CC5CC56 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - A872DF33FEEBCB36CF6A53343C39C8D1 /* PFSubclassing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSubclassing.h; path = Parse/PFSubclassing.h; sourceTree = ""; }; - A9345BB3B8924E56D392BA3231701002 /* PFJSONSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFJSONSerialization.m; path = Parse/Internal/PFJSONSerialization.m; sourceTree = ""; }; - A94E11CCEE95914D7CE1B1B35E7C1F89 /* PFMutableRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableRelationState.m; path = Parse/Internal/Relation/State/PFMutableRelationState.m; sourceTree = ""; }; - A9ADF726213C599DDAE3F7A1849BDBF6 /* PFEncoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEncoder.h; path = Parse/Internal/PFEncoder.h; sourceTree = ""; }; - A9D75702C8583CBA05067061643DEB98 /* PFRESTAnalyticsCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTAnalyticsCommand.h; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.h; sourceTree = ""; }; - A9E567CF4EF740CD931B21421CDEF9E4 /* PFACLState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState_Private.h; path = Parse/Internal/ACL/State/PFACLState_Private.h; sourceTree = ""; }; - AA2F4B0C1884B9FA8CA4005505904B4F /* PFWeakValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFWeakValue.h; path = Parse/Internal/PFWeakValue.h; sourceTree = ""; }; - AA6EBD92B6893560E360E020C1911D5A /* PFPushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState.h; path = Parse/Internal/Push/State/PFPushState.h; sourceTree = ""; }; - AC00DC436BD41D96D7CDADBBE0CCBC63 /* PFUserFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserFileCodingLogic.m; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m; sourceTree = ""; }; - ACF9532A0D0C66EC20F4225EBD285526 /* PFObjectState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState_Private.h; path = Parse/Internal/Object/State/PFObjectState_Private.h; sourceTree = ""; }; - AF50C03C543FAF9B976475CB98E20B0D /* PFSQLiteStatement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteStatement.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m; sourceTree = ""; }; - AF9E249BDEE7198A0DA97A4426AE5431 /* PFPushUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushUtilities.m; path = Parse/Internal/Push/Utilites/PFPushUtilities.m; sourceTree = ""; }; + A5C0755A44D6605CF4BE2DFE2EDE1D86 /* PFMutableQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableQueryState.m; path = Parse/Internal/Query/State/PFMutableQueryState.m; sourceTree = ""; }; + A666132F7688CB58789BC9FFAE5AB614 /* PFACLState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState_Private.h; path = Parse/Internal/ACL/State/PFACLState_Private.h; sourceTree = ""; }; + A69CE4C29C33C8B3AEC1E73E847A4197 /* PFDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDecoder.m; path = Parse/Internal/PFDecoder.m; sourceTree = ""; }; + A6F717725F4394E95525ABAFB9F33DB2 /* PFAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalytics.m; path = Parse/PFAnalytics.m; sourceTree = ""; }; + A7B5535D819421EFD2C8509D19D9430E /* BoltsVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BoltsVersion.h; path = Bolts/Common/BoltsVersion.h; sourceTree = ""; }; + A7BDDE2CC83877DFC9CF1466C53CB68D /* PFDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDataProvider.h; path = Parse/Internal/PFDataProvider.h; sourceTree = ""; }; + A88229973FC49C97305F3F69622999F1 /* libParse.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libParse.a; sourceTree = BUILT_PRODUCTS_DIR; }; + A8D4C658312EAAA8ACC1463D1135ADCA /* PFNetworkCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkCommand.h; path = Parse/Internal/PFNetworkCommand.h; sourceTree = ""; }; + A9725E3A84362C8B373DA1D0A052B2CB /* PFObjectSubclassInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassInfo.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m; sourceTree = ""; }; + A9B5F4ADDFA617FF96FED75084262625 /* PFConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfig.m; path = Parse/PFConfig.m; sourceTree = ""; }; + AB1ABA6EB2984DFC25350DF75335526F /* PFUserState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState_Private.h; path = Parse/Internal/User/State/PFUserState_Private.h; sourceTree = ""; }; + ABF7E63586A26C19233745BAFC155684 /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; + AD088079F8066DB0050C23252546389D /* PFKeyValueCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache.h; sourceTree = ""; }; + AD0E30A8555AA525BA9AFC45114E9002 /* PFMutableQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableQueryState.h; path = Parse/Internal/Query/State/PFMutableQueryState.h; sourceTree = ""; }; + AD3CB420E4A0D3570A166616F7BC779E /* PFQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQuery.m; path = Parse/PFQuery.m; sourceTree = ""; }; + AEB7E49E278592D89DD351ACEB1287FA /* PFUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserController.m; path = Parse/Internal/User/Controller/PFUserController.m; sourceTree = ""; }; + AFBDA3EF95CECEB449D3303D17FA28C2 /* PFURLConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLConstructor.m; path = Parse/Internal/HTTPRequest/PFURLConstructor.m; sourceTree = ""; }; B0CE575CDDE0B1795BB8B88E0B49ACA0 /* POPDecayAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDecayAnimationInternal.h; path = pop/POPDecayAnimationInternal.h; sourceTree = ""; }; - B0D65D1A09B22A4BB4B1C9A5BD78B77B /* PFCommandCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache.h; path = Parse/Internal/PFCommandCache.h; sourceTree = ""; }; B0F7BCEE9A871E1193D694931FA31E17 /* POPDecayAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDecayAnimation.h; path = pop/POPDecayAnimation.h; sourceTree = ""; }; + B113FA8703C60024B8FBA20DFB21B744 /* PFKeyValueCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache_Private.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h; sourceTree = ""; }; + B2256E19F54D3528053251E979C5257B /* PFPush.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPush.h; path = Parse/PFPush.h; sourceTree = ""; }; + B23ED4E70AA813C755E036B0600606FA /* PFEventuallyQueue_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue_Private.h; path = Parse/Internal/PFEventuallyQueue_Private.h; sourceTree = ""; }; + B26254ACE198AC611B2797250DAECDFA /* PFCommandResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandResult.m; path = Parse/Internal/PFCommandResult.m; sourceTree = ""; }; + B2CC06448183660D517225325BC1F93A /* PFTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTaskQueue.h; path = Parse/Internal/PFTaskQueue.h; sourceTree = ""; }; + B322FB271A210C27577B6EAD8C5062CC /* PFObjectUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectUtilities.h; path = Parse/Internal/Object/Utilities/PFObjectUtilities.h; sourceTree = ""; }; B330BCF969EF6189E02E10926FB95CED /* POPGeometry.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPGeometry.mm; path = pop/POPGeometry.mm; sourceTree = ""; }; - B3919700A3759610223FD35F92AB0AA9 /* PFCloudCodeController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloudCodeController.m; path = Parse/Internal/CloudCode/PFCloudCodeController.m; sourceTree = ""; }; - B40C2F17FC5388F0013F8D1C257B70DC /* PFObjectPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectPrivate.h; path = Parse/Internal/Object/PFObjectPrivate.h; sourceTree = ""; }; - B4D6A8E418A8D134A61BFD6E094F65C4 /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; - B4F105DB0D9A5C8E74B80DB5C0C9BEFF /* PFHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPRequest.h; path = Parse/Internal/HTTPRequest/PFHTTPRequest.h; sourceTree = ""; }; - B507DE9CFF3C90B0CFF815EF53AF8474 /* PFJSONSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFJSONSerialization.h; path = Parse/Internal/PFJSONSerialization.h; sourceTree = ""; }; - B5AA5A6C3CB437DD04C72C5E6E53B305 /* PFApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFApplication.h; path = Parse/Internal/PFApplication.h; sourceTree = ""; }; - B6142CFCE45847BB7B5926039074D3DB /* PFUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserState.m; path = Parse/Internal/User/State/PFUserState.m; sourceTree = ""; }; - B63F361CAC0664EA5B1BDBD82688DB0A /* PFLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocationManager.h; path = Parse/Internal/PFLocationManager.h; sourceTree = ""; }; - B727105265500960B53BB43FD44AB19E /* PFQueryPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryPrivate.h; path = Parse/Internal/Query/PFQueryPrivate.h; sourceTree = ""; }; - B72923D868E99D0FEF748E99A0931A2F /* PFEventuallyQueue_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue_Private.h; path = Parse/Internal/PFEventuallyQueue_Private.h; sourceTree = ""; }; - B7CFA60CD26AF95E62DC7D82173BA5F6 /* PFMutableFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableFileState.h; path = Parse/Internal/File/State/PFMutableFileState.h; sourceTree = ""; }; - B7EE7F890CF09AF26E1191C3D4540CE1 /* PFPushController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushController.m; path = Parse/Internal/Push/Controller/PFPushController.m; sourceTree = ""; }; - B7F689B7A8A241A249C1A39110F19728 /* PFObjectLocalIdStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectLocalIdStore.m; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m; sourceTree = ""; }; - B854EEBA088DE9B81F5F84844F966B49 /* PFQueryUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryUtilities.m; path = Parse/Internal/Query/Utilities/PFQueryUtilities.m; sourceTree = ""; }; - B88FEBD183FE3500545B1AB65A492E8B /* PFAnonymousUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousUtils.m; path = Parse/PFAnonymousUtils.m; sourceTree = ""; }; - B9CD991531E7E5557C57269840034107 /* PFPurchase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchase.h; path = Parse/PFPurchase.h; sourceTree = ""; }; + B3814B9487A8A8F8F9A04F510A6B3AC5 /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; + B41C5D6C197E0FDC6E5D8533A0C1CE95 /* PFCurrentObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentObjectControlling.h; path = Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h; sourceTree = ""; }; + B431D27F0705F097E581263224EF8C88 /* PFPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPin.m; path = Parse/Internal/LocalDataStore/Pin/PFPin.m; sourceTree = ""; }; + B6D07518E33FDE1A7B76FABCCABCBCD6 /* PFRelationState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState_Private.h; path = Parse/Internal/Relation/State/PFRelationState_Private.h; sourceTree = ""; }; + B6EFD05D2D5F7A4F89CDF5EA8E64F2DE /* PFSQLiteDatabaseResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseResult.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h; sourceTree = ""; }; + B745F5094B240A7BD83E4F246A86BBD8 /* PFUserConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserConstants.m; path = Parse/Internal/User/Constants/PFUserConstants.m; sourceTree = ""; }; + B80259DBA1A3ADC7CA8707C772EB8531 /* PFBaseState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBaseState.m; path = Parse/Internal/PFBaseState.m; sourceTree = ""; }; + B962D108140D96784FC828D86963E605 /* PFReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFReachability.m; path = Parse/Internal/PFReachability.m; sourceTree = ""; }; BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - BA67CA21B8529E8E4280069C4CC1FA26 /* PFAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics.h; path = Parse/PFAnalytics.h; sourceTree = ""; }; - BAC76B9259ACF68B0E7869A148AE8EEE /* PFSessionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionController.h; path = Parse/Internal/Session/Controller/PFSessionController.h; sourceTree = ""; }; - BBFB017F02B69A95630ECA78C0507891 /* PFObjectFileCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCoder.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.h; sourceTree = ""; }; - BC8B4ABBE8DA9D24096F873234FCA24C /* PFURLConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLConstructor.h; path = Parse/Internal/HTTPRequest/PFURLConstructor.h; sourceTree = ""; }; - BD06D82A2D98EDF6AE058093F67CCA71 /* PFObjectEstimatedData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectEstimatedData.h; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h; sourceTree = ""; }; - BD53F748C3855917C34EE3DCD3CD3F92 /* PFPushPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushPrivate.h; path = Parse/Internal/Push/PFPushPrivate.h; sourceTree = ""; }; - BD96834E719E340094942FD1EC1DE357 /* PFUserFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserFileCodingLogic.h; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h; sourceTree = ""; }; - BDBDCD188680D0AF62B9AC8AE7D15A8C /* PFACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACLState.m; path = Parse/Internal/ACL/State/PFACLState.m; sourceTree = ""; }; - BDFFC646E1E0963C745694C371C7CA92 /* PFFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFile.m; path = Parse/PFFile.m; sourceTree = ""; }; - BF436F013E06183E4E80FEDB3EE6640C /* PFRESTCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand.h; path = Parse/Internal/Commands/PFRESTCommand.h; sourceTree = ""; }; - BF599E498617D2A09E55B46584A069AC /* PFAnonymousUtils_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils_Private.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h; sourceTree = ""; }; + BA75D0EC4C508481F47EA13B39766654 /* PFInternalUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInternalUtils.h; path = Parse/Internal/PFInternalUtils.h; sourceTree = ""; }; + BA7F7022FC278524B2BE48AD1759AF42 /* PFFileDataStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileDataStream.m; path = Parse/Internal/File/FileDataStream/PFFileDataStream.m; sourceTree = ""; }; + BC0C8A8C41DC1963D695265153E23911 /* PFQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryController.h; path = Parse/Internal/Query/Controller/PFQueryController.h; sourceTree = ""; }; + BC33018672D1C57CFC91D822DB867582 /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; + BE2646A9566B3A11A2F19AA8D5D15E62 /* PFMutableUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableUserState.m; path = Parse/Internal/User/State/PFMutableUserState.m; sourceTree = ""; }; + BEA3D87AE012FEF7F6B48E6F0D5F09F7 /* PFOfflineQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryController.m; path = Parse/Internal/Query/Controller/PFOfflineQueryController.m; sourceTree = ""; }; + BEDAC2F484B73C71F6B8E48C5B6FCB76 /* PFCommandURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandURLRequestConstructor.h; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h; sourceTree = ""; }; + BF198CCAD2E6C2AE39D8BF68464A93CB /* PFUserPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserPrivate.h; path = Parse/Internal/User/PFUserPrivate.h; sourceTree = ""; }; BF59BC15D23E1E1912C8F334E7236813 /* Pods-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-acknowledgements.plist"; sourceTree = ""; }; - BF8B668575E32B4BC03D5A86BBAEAE74 /* PFURLSessionUploadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionUploadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h; sourceTree = ""; }; + BF89107C38CFD5E5770EC87A79813462 /* ParseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseManager.m; path = Parse/Internal/ParseManager.m; sourceTree = ""; }; + BFDC9A22A2A96279B4BDF17190E2A775 /* PFRESTUserCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTUserCommand.h; path = Parse/Internal/Commands/PFRESTUserCommand.h; sourceTree = ""; }; + C0239D4A0C4788EB654381F621134ACB /* PFAsyncTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAsyncTaskQueue.h; path = Parse/Internal/PFAsyncTaskQueue.h; sourceTree = ""; }; C091E831068E3E504A40AC6932B39C87 /* FloatConversion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FloatConversion.h; path = pop/WebCore/FloatConversion.h; sourceTree = ""; }; C0DF3C83EBC5F7BF6DAAACEBD7D72791 /* POPAnimationEvent.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationEvent.mm; path = pop/POPAnimationEvent.mm; sourceTree = ""; }; - C0E20B62BF2BBA3C871D3C7A2F6BD617 /* BFDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFDefines.h; path = Bolts/Common/BFDefines.h; sourceTree = ""; }; + C0F939B16AC0EFB29DA8BB09980593E3 /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; + C13F91216CB47F63D6B60866FDDC2E12 /* PFLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogger.h; path = Parse/Internal/PFLogger.h; sourceTree = ""; }; C1B6A53BFD919966B87CD6FBFD89CE1B /* POPAnimationExtras.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationExtras.h; path = pop/POPAnimationExtras.h; sourceTree = ""; }; - C1E1FCF7C3F2C64010D8E7CA6C8D29A3 /* PFInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationController.h; path = Parse/Internal/Installation/Controller/PFInstallationController.h; sourceTree = ""; }; C1E27C3CBB149C1873F6CDC55D998CE2 /* POPAnimationTracer.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationTracer.mm; path = pop/POPAnimationTracer.mm; sourceTree = ""; }; C24554FAA71D841BC3C0759DA37874AE /* POPSpringAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPSpringAnimation.mm; path = pop/POPSpringAnimation.mm; sourceTree = ""; }; - C3DD022C4A01AA56BB0CF97F8B732F1E /* PFFileManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileManager.h; path = Parse/Internal/PFFileManager.h; sourceTree = ""; }; + C2884D9AD4EDF5B53F05C2631989A495 /* PFObjectConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectConstants.h; path = Parse/Internal/Object/Constants/PFObjectConstants.h; sourceTree = ""; }; + C3FEE284F1A3A64929DAC57EF28FBEA2 /* PFRESTUserCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTUserCommand.m; path = Parse/Internal/Commands/PFRESTUserCommand.m; sourceTree = ""; }; + C439FB0D5070895D69861DE4654C8D25 /* PFEventuallyPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyPin.m; path = Parse/Internal/PFEventuallyPin.m; sourceTree = ""; }; + C55B1243D9ED528D2D7760513B4D0FB2 /* Parse-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Parse-Private.xcconfig"; sourceTree = ""; }; C560616DDF5273CF7C53EF72EA6ED45A /* POPDecayAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPDecayAnimation.mm; path = pop/POPDecayAnimation.mm; sourceTree = ""; }; - C5B446A2C8083573E71F021EB732F282 /* PFObjectController_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController_Private.h; path = Parse/Internal/Object/Controller/PFObjectController_Private.h; sourceTree = ""; }; - C5CA9676B6BB4F73C05AB36945596A99 /* PFFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileState.m; path = Parse/Internal/File/State/PFFileState.m; sourceTree = ""; }; - C60907A5603A25A8E7EF01FCD0B44B11 /* PFRESTSessionCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTSessionCommand.m; path = Parse/Internal/Commands/PFRESTSessionCommand.m; sourceTree = ""; }; - C623372365DC2AFFFE5053AB44C49CAB /* PFProductsRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductsRequestHandler.h; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h; sourceTree = ""; }; - C73F19BD326FCF565056E28970ACD732 /* PFThreadsafety.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFThreadsafety.m; path = Parse/Internal/ThreadSafety/PFThreadsafety.m; sourceTree = ""; }; - C7A179A9BD2533E252132EB24EEEE7AF /* PFObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObject.m; path = Parse/PFObject.m; sourceTree = ""; }; - C7A82AD0CBC0B85B3BC3F38D91D613A3 /* PFSQLiteDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h; sourceTree = ""; }; - C7F96DFC12AF4F8CB8DB480DC2A6B5DC /* PFPinningEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningEventuallyQueue.m; path = Parse/Internal/PFPinningEventuallyQueue.m; sourceTree = ""; }; - C849D153FE3E4A235A12279407367FFB /* PFACL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACL.m; path = Parse/PFACL.m; sourceTree = ""; }; - C91998944DE097F05FC7342A6ABBD51F /* PFEventuallyPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyPin.m; path = Parse/Internal/PFEventuallyPin.m; sourceTree = ""; }; + C65B577617E60D4DCA6671103F519E4B /* PFSessionUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionUtilities.h; path = Parse/Internal/Session/Utilities/PFSessionUtilities.h; sourceTree = ""; }; + C6930DD80530DC03DCEC33CA1BE24BE7 /* PFURLSessionCommandRunner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h; sourceTree = ""; }; + C9076753B0A2E12983ECEFBE60C6E4A3 /* PFRelationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationPrivate.h; path = Parse/Internal/Relation/PFRelationPrivate.h; sourceTree = ""; }; C9565C73D5D4BE79747E60DCF1557E71 /* POPAnimatableProperty.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimatableProperty.mm; path = pop/POPAnimatableProperty.mm; sourceTree = ""; }; - CA696D9F1B6B454ADB7158523225ED1D /* PFRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelationState.m; path = Parse/Internal/Relation/State/PFRelationState.m; sourceTree = ""; }; - CAD41F16643CC7AF395C0955965F308A /* PFAsyncTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAsyncTaskQueue.m; path = Parse/Internal/PFAsyncTaskQueue.m; sourceTree = ""; }; - CB81D6A5051D8F542190EDFDC7456611 /* PFMutableQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableQueryState.m; path = Parse/Internal/Query/State/PFMutableQueryState.m; sourceTree = ""; }; - CBC8583C0448880C8739111436630AE3 /* PFPushState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState_Private.h; path = Parse/Internal/Push/State/PFPushState_Private.h; sourceTree = ""; }; - CC134A9DF660C6CC1845802A0025F10D /* PFObjectBatchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectBatchController.m; path = Parse/Internal/Object/BatchController/PFObjectBatchController.m; sourceTree = ""; }; - CCBD5F36E99EBF39758767076681F918 /* PFURLSessionDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h; sourceTree = ""; }; - CCF8CEA9A6064ADBBF6FE4C06F58AC6B /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; - CD5E24516E8C55549E6229A4A4A3E50C /* PFACLPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLPrivate.h; path = Parse/Internal/ACL/PFACLPrivate.h; sourceTree = ""; }; - CE1700FF476E3DF743FC31E536BEBEC6 /* Parse-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Parse-Private.xcconfig"; sourceTree = ""; }; - CEBD5ABCFEDE938F240830CC6F863AE9 /* PFURLSessionCommandRunner_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h; sourceTree = ""; }; - CF1EB66CAC009B756BA17A2817145984 /* PFSQLiteDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase_Private.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h; sourceTree = ""; }; - D003772BF7AE6C6E80062C919E2AA60F /* PFObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState.h; path = Parse/Internal/Object/State/PFObjectState.h; sourceTree = ""; }; - D0975C15C502A249A57E3EE7AABC42BE /* PFPushManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushManager.h; path = Parse/Internal/Push/Manager/PFPushManager.h; sourceTree = ""; }; - D0AE6501423148E55391488B3AC17AF1 /* PFOfflineQueryLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryLogic.h; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h; sourceTree = ""; }; - D0E2E71B86A138C5A13EEABD485A9EAB /* PFSQLiteDatabaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseController.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m; sourceTree = ""; }; + C96C8283235BCEAFB2B6F132CE911578 /* PFPushManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushManager.h; path = Parse/Internal/Push/Manager/PFPushManager.h; sourceTree = ""; }; + CA74286D523103A7357250A458466DC3 /* PFCurrentUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentUserController.m; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.m; sourceTree = ""; }; + CB36CF9B5806A0332F9E4955152BC86E /* PFFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile.h; path = Parse/PFFile.h; sourceTree = ""; }; + CB69D67914ACB9C94D9D8340F8255A72 /* PFURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSession.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m; sourceTree = ""; }; + CB8189117D5A0D245487C3423D73727D /* PFQueryUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryUtilities.m; path = Parse/Internal/Query/Utilities/PFQueryUtilities.m; sourceTree = ""; }; + CBA0A5B0F0E83001148599CCEC105E79 /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; + CC952D982119E3AE1061314E2B7C35D4 /* PFInstallationIdentifierStore_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore_Private.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h; sourceTree = ""; }; + CD24A497637B97FB13D87D8C73E642D5 /* ParseInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseInternal.h; path = Parse/Internal/ParseInternal.h; sourceTree = ""; }; + CE37BCDB0808A581D8F23138D5B2B412 /* PFUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUser.h; path = Parse/PFUser.h; sourceTree = ""; }; + CE510ACC52FD7B52F382F765AA7C38D6 /* PFGeoPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPoint.h; path = Parse/PFGeoPoint.h; sourceTree = ""; }; + CEC32F2ED903D3546EEEA22AC6E13F4E /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; + CEFF62A508184DE729502142858C6AAA /* PFCoreManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreManager.h; path = Parse/Internal/PFCoreManager.h; sourceTree = ""; }; + CF3B2B472A7B4B67DF8D50DADB4DBF03 /* PFACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState.h; path = Parse/Internal/ACL/State/PFACLState.h; sourceTree = ""; }; + CF75EB65BC1D473202CD8BD2F8F9879C /* PFCommandCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache.h; path = Parse/Internal/PFCommandCache.h; sourceTree = ""; }; + CFA6C4B46A860F2290E2C9F4AFAADFB9 /* PFInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallation.h; path = Parse/PFInstallation.h; sourceTree = ""; }; D0F22730A2A2917C6F9777B1BF5F179D /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = Parse/Resources/en.lproj; sourceTree = ""; }; - D1027683C24BF81936188B3CFC423274 /* libBolts.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBolts.a; sourceTree = BUILT_PRODUCTS_DIR; }; - D1DF8C126A878F1FFF7DB1A3BEB96647 /* PFReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFReachability.m; path = Parse/Internal/PFReachability.m; sourceTree = ""; }; - D1DFF36EC5F44CEE642F63092AE04BA3 /* PFDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDataProvider.h; path = Parse/Internal/PFDataProvider.h; sourceTree = ""; }; - D414E542C5F0101B04B821F89CB601B6 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - D51B5DC898167C5060CB1C2CE1F6CA6A /* PFSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession_Private.h; path = Parse/Internal/Session/PFSession_Private.h; sourceTree = ""; }; + D151C7604325CAC5209D9944C99E592A /* PFUserAuthenticationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserAuthenticationController.m; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m; sourceTree = ""; }; + D1F61BF57518F0154F82CEF764C0F35D /* PFGeoPointPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPointPrivate.h; path = Parse/Internal/PFGeoPointPrivate.h; sourceTree = ""; }; + D22939E9625B5D422EC6E479E7048771 /* PFPushUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushUtilities.m; path = Parse/Internal/Push/Utilites/PFPushUtilities.m; sourceTree = ""; }; + D342B7DAEB7FE6F3E3110ABADFD54C09 /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; + D3568213E494C4CA6E3B00B07B2AC4E4 /* PFAnalyticsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsController.h; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.h; sourceTree = ""; }; + D3F6C6FD6DBA4896546009DD948AE020 /* PFFieldOperationDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperationDecoder.m; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.m; sourceTree = ""; }; + D52AB7265F316C1F4B4C5881D8EA52DC /* PFRESTCommand_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand_Private.h; path = Parse/Internal/Commands/PFRESTCommand_Private.h; sourceTree = ""; }; + D552CBB2BF4CC751787C15E7A7B176DF /* PFOfflineQueryLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryLogic.h; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h; sourceTree = ""; }; + D5A05A4C5F9BA9C066877A324EE3B697 /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; D5CE48778301C24CD288B08DDA441605 /* POPVector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPVector.h; path = pop/POPVector.h; sourceTree = ""; }; - D712B949F0E1E31622675FBDC8C2BD57 /* PFDateFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDateFormatter.m; path = Parse/Internal/PFDateFormatter.m; sourceTree = ""; }; - D8453063C22C0EAA2AAC6F28CFBB7AC8 /* Bolts-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Bolts-Private.xcconfig"; sourceTree = ""; }; - DADC9D70AC397C40456C71C7BB5E5F45 /* PFInstallationIdentifierStore_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore_Private.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h; sourceTree = ""; }; - DD763184372CC604F25E4FDD0865B288 /* PFObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObject.h; path = Parse/PFObject.h; sourceTree = ""; }; - DD934234EB3517E8F2CAC1D699D9DC6C /* PFOfflineStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineStore.h; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h; sourceTree = ""; }; - DD991348470823191613124528FDAA2E /* PFObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectState.m; path = Parse/Internal/Object/State/PFObjectState.m; sourceTree = ""; }; - DDC7530978AD0E9150595DF76671ACD3 /* PFRelation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelation.m; path = Parse/PFRelation.m; sourceTree = ""; }; - DDE8EAF4000D3A40ED79006C50ACC68B /* PFKeyValueCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeyValueCache.m; path = Parse/Internal/KeyValueCache/PFKeyValueCache.m; sourceTree = ""; }; - DE8243581B97EEAD2F8781E6C48FD676 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; - E00C63837F9F051D3640CED99CD396F4 /* PFAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAlertView.h; path = Parse/Internal/PFAlertView.h; sourceTree = ""; }; - E0AF46F24F89ABCDCB18AAF5BD82D7BC /* PFPurchaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseController.m; path = Parse/Internal/Purchase/Controller/PFPurchaseController.m; sourceTree = ""; }; - E1247C54B1E28A1D1035FF148D7A8067 /* PFObjectUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectUtilities.m; path = Parse/Internal/Object/Utilities/PFObjectUtilities.m; sourceTree = ""; }; - E1E17B04786B5816404325BFDBE700B8 /* PFPush.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPush.m; path = Parse/PFPush.m; sourceTree = ""; }; - E210FB710EEFE34D8FB35378F3F6F935 /* PFConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig_Private.h; path = Parse/Internal/Config/PFConfig_Private.h; sourceTree = ""; }; - E2E9E2D3066C78DC48958D6FD03ABADA /* PFSQLiteStatement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteStatement.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h; sourceTree = ""; }; - E32EC19799A69A3384750AD614A93F67 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - E35E8AB9F2B4D23971F6C53C0730A2F8 /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; - E3CA74B2AFA8B7D355ED3CA3F92BDFD2 /* PFCommandRunning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunning.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.h; sourceTree = ""; }; - E43B375F1DC0B3C39D4F8CBCFA1B51A2 /* PFFileDataStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileDataStream.m; path = Parse/Internal/File/FileDataStream/PFFileDataStream.m; sourceTree = ""; }; - E4C23C917DC34380EB14D2D8BC9FAA1E /* PFRESTFileCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTFileCommand.m; path = Parse/Internal/Commands/PFRESTFileCommand.m; sourceTree = ""; }; - E4FD3B2FD49993D574EF9A49D6C13261 /* PFGeoPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFGeoPoint.m; path = Parse/PFGeoPoint.m; sourceTree = ""; }; - E57BA8CF64D8018BCFEB289F81C3B448 /* PFUserAuthenticationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationDelegate.h; path = Parse/PFUserAuthenticationDelegate.h; sourceTree = ""; }; - E6CFB883952C27A92DBF7CF40F382619 /* BFTask+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Private.h"; path = "Parse/Internal/BFTask+Private.h"; sourceTree = ""; }; - E6DCAF78DAAF81EC8FC6B8AFC7ADDD1B /* PFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkActivityIndicatorManager.h; path = Parse/PFNetworkActivityIndicatorManager.h; sourceTree = ""; }; + D639AB7043CB6DA1A6BE3D49D7D9368B /* PFObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState.h; path = Parse/Internal/Object/State/PFObjectState.h; sourceTree = ""; }; + D77774D5F665986858DAD577093BF4F4 /* PFRESTObjectBatchCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectBatchCommand.m; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.m; sourceTree = ""; }; + D8851833E5439BBC098DCCB68455E8D8 /* PFPinningObjectStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningObjectStore.m; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.m; sourceTree = ""; }; + D9AD8A2E0B442B2597A5EFD99859CE70 /* PFUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserState.m; path = Parse/Internal/User/State/PFUserState.m; sourceTree = ""; }; + D9F83A22B0271BB18AA8680451C70138 /* PFProduct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProduct.h; path = Parse/PFProduct.h; sourceTree = ""; }; + DC04CA70DD902C38FD430C17D4244E92 /* PFPushController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushController.h; path = Parse/Internal/Push/Controller/PFPushController.h; sourceTree = ""; }; + DC21BCC836700655FF0FC5118F41587C /* PFPropertyInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo.m; sourceTree = ""; }; + DD2E7D85EAE9D93FB3EB497EE098D0E2 /* PFAnalyticsUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsUtilities.h; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h; sourceTree = ""; }; + DDEB176EF3964EAF1E91BFCA999AC383 /* PFSessionUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionUtilities.m; path = Parse/Internal/Session/Utilities/PFSessionUtilities.m; sourceTree = ""; }; + DED2ECAD15A2BED79633C019904DB280 /* PFACL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACL.m; path = Parse/PFACL.m; sourceTree = ""; }; + DEEC86611B8BC477AFEF42C162C7DEC7 /* PFMutablePushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutablePushState.h; path = Parse/Internal/Push/State/PFMutablePushState.h; sourceTree = ""; }; + DEF74DE469E28BE80197C43305F5C003 /* PFSQLiteDatabaseResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseResult.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m; sourceTree = ""; }; + DFD8D064D883A41B1432E94742A1A879 /* PFSQLiteDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase_Private.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h; sourceTree = ""; }; + E09AFB4E5EAB3E98F681BBBEE934776D /* PFErrorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFErrorUtilities.h; path = Parse/Internal/PFErrorUtilities.h; sourceTree = ""; }; + E342EB169F41501EE41BB76D5CA176D6 /* PFOfflineStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineStore.m; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m; sourceTree = ""; }; + E3C0AB42ACF3767DE19D18A31901BC94 /* PFObjectSubclassingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassingController.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m; sourceTree = ""; }; + E3ED5AFB7A3B2DC03C1D116039A73C3C /* PFObjectSubclassInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassInfo.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h; sourceTree = ""; }; + E5331787DAA3B52CEE076DC2B62A6100 /* PFObjectFileCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCoder.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.m; sourceTree = ""; }; + E56771AE10D1052EB22D63A1F7631599 /* Parse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Parse.m; path = Parse/Parse.m; sourceTree = ""; }; + E64CFDC86F7294DC0F63391554852CAD /* PFSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession_Private.h; path = Parse/Internal/Session/PFSession_Private.h; sourceTree = ""; }; + E6EC9018A6A5F9DC5F956E06A0A1DA5D /* PFInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationController.h; path = Parse/Internal/Installation/Controller/PFInstallationController.h; sourceTree = ""; }; + E7CDC14FF480C0D409AF7711FADC9DF1 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; E85E0983DBE882A8009D0F7EAB591B91 /* POPAnimationRuntime.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationRuntime.mm; path = pop/POPAnimationRuntime.mm; sourceTree = ""; }; - E94D7BACCC5E81069DC1DA732C343E3D /* PFMutableObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableObjectState.h; path = Parse/Internal/Object/State/PFMutableObjectState.h; sourceTree = ""; }; - E9F025C441C961725285A53BA76899A7 /* PFUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserController.m; path = Parse/Internal/User/Controller/PFUserController.m; sourceTree = ""; }; - EADEB4FFD06A826AC14B90222A65ED15 /* PFRelation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelation.h; path = Parse/PFRelation.h; sourceTree = ""; }; - EB22EF6AA771F815D6776E538BF091A1 /* PFSQLiteDatabaseResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseResult.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h; sourceTree = ""; }; + E8EEBAABE8D879BA98E6BDEB440DC3AF /* PFMultiProcessFileLockController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLockController.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h; sourceTree = ""; }; + E9B49219DF626061CA1102BDDE09600A /* PFQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryState.m; path = Parse/Internal/Query/State/PFQueryState.m; sourceTree = ""; }; + EA32A2997B8869B495BB155A4CF0CDCA /* PFFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFile.m; path = Parse/PFFile.m; sourceTree = ""; }; + EA58A3816CEEB2481D5DE6BD6C227C8B /* PFACL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACL.h; path = Parse/PFACL.h; sourceTree = ""; }; + EAED133F8FBB016C53BC9D82E80C4D8E /* PFACLPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLPrivate.h; path = Parse/Internal/ACL/PFACLPrivate.h; sourceTree = ""; }; EB56BE02F1B0412A41C9D9834B04BC30 /* POPSpringAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringAnimationInternal.h; path = pop/POPSpringAnimationInternal.h; sourceTree = ""; }; - EB5DC17148922AD333F7571A1F2466E3 /* Parse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Parse.m; path = Parse/Parse.m; sourceTree = ""; }; + EBE833F5099FF7EFCCA0F9DF00B29E0D /* PFOperationSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOperationSet.h; path = Parse/Internal/Object/OperationSet/PFOperationSet.h; sourceTree = ""; }; EC10F21A5E230A911C2C2E5082CDAE4B /* POPAnimationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationPrivate.h; path = pop/POPAnimationPrivate.h; sourceTree = ""; }; - EC2BCF421E5556843D2FB60E51F79F87 /* PFAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAssert.h; path = Parse/Internal/PFAssert.h; sourceTree = ""; }; + EC28357CF9D94A9F2E49253D3A16AFCD /* PFAnalytics_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics_Private.h; path = Parse/Internal/Analytics/PFAnalytics_Private.h; sourceTree = ""; }; + EC3179640630E861C08F4D68C5D17E53 /* PFPaymentTransactionObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPaymentTransactionObserver.m; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m; sourceTree = ""; }; + EC70489BC426131AEC77A58EBC61D6A9 /* PFRESTConfigCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTConfigCommand.h; path = Parse/Internal/Commands/PFRESTConfigCommand.h; sourceTree = ""; }; ECC48BF18D3BD01C21B65648709A45D6 /* POPAnimator.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimator.mm; path = pop/POPAnimator.mm; sourceTree = ""; }; - ECEB10403A7DC566C15134DFE3373AC2 /* PFFileState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState_Private.h; path = Parse/Internal/File/State/PFFileState_Private.h; sourceTree = ""; }; + ECF03863A8796C16D65EE3AC73DEC5B8 /* PFHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPRequest.h; path = Parse/Internal/HTTPRequest/PFHTTPRequest.h; sourceTree = ""; }; ED596D85957A49EC6092EC8EC38FCE49 /* POPAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationInternal.h; path = pop/POPAnimationInternal.h; sourceTree = ""; }; - EE07F56B15CF5CA712EDB693EC0DE281 /* PFFieldOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperation.h; path = Parse/Internal/FieldOperation/PFFieldOperation.h; sourceTree = ""; }; - EEA9CEB6EBD6F7D905225F3028208411 /* PFURLSessionJSONDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionJSONDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m; sourceTree = ""; }; - F05B147B865A347DA8B9891D3D9B89BF /* PFPurchase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchase.m; path = Parse/PFPurchase.m; sourceTree = ""; }; - F09FE7B19C3276FA4D8099145F0898D3 /* PFCommandCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache_Private.h; path = Parse/Internal/PFCommandCache_Private.h; sourceTree = ""; }; + ED92DCF321683034F9F263E4083E6959 /* PFPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPin.h; path = Parse/Internal/LocalDataStore/Pin/PFPin.h; sourceTree = ""; }; + EE2CAAF3B10EA83469E9BF55744C5A56 /* PFJSONSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFJSONSerialization.m; path = Parse/Internal/PFJSONSerialization.m; sourceTree = ""; }; + EE6E133088AF492F15B3EEBDA616077B /* PFProductsRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductsRequestHandler.h; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h; sourceTree = ""; }; + EF733EE510CD105F55AD2996CF7D7F94 /* PFApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFApplication.h; path = Parse/Internal/PFApplication.h; sourceTree = ""; }; + F05547667B76C441755A476C0996B67A /* PFMutableACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableACLState.m; path = Parse/Internal/ACL/State/PFMutableACLState.m; sourceTree = ""; }; F0B4105C7EE2DA010EA4746E79138C7C /* POPVector.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPVector.mm; path = pop/POPVector.mm; sourceTree = ""; }; + F0B4809986AB679C74DF6F09D239764C /* PFProductsRequestHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductsRequestHandler.m; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m; sourceTree = ""; }; + F11B5250697F6FBAF1331BF54A332420 /* PFOfflineQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryController.h; path = Parse/Internal/Query/Controller/PFOfflineQueryController.h; sourceTree = ""; }; F12CAAA4B06857D4D5F8B8C7F8B0A6D6 /* pop-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "pop-prefix.pch"; sourceTree = ""; }; - F1C86CCCF50B7B1651DF1DDA93ECB2A7 /* PFUserConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserConstants.h; path = Parse/Internal/User/Constants/PFUserConstants.h; sourceTree = ""; }; - F25C4200A9FE7F2B396804D09A24AFC6 /* PFEventuallyPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyPin.h; path = Parse/Internal/PFEventuallyPin.h; sourceTree = ""; }; - F2F468A970FC15FC06B99390A1FB0614 /* PFSQLiteDatabaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseController.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h; sourceTree = ""; }; + F1597BC7BE1EC9A86FCCB75B11EAC04B /* PFRESTCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCommand.m; path = Parse/Internal/Commands/PFRESTCommand.m; sourceTree = ""; }; + F1B0914AB61CF2B1F9D7ECBDE1CDA9F1 /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; + F2AD64A1E39EF0EC17E66E7C8C765930 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + F31229637871A1DB25EEC72DEEA4CABF /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; }; + F38E2E7F98830316F576F45842FC59EF /* PFPinningEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningEventuallyQueue.m; path = Parse/Internal/PFPinningEventuallyQueue.m; sourceTree = ""; }; F3A985A006B0CCD0116D8FC53C4D1834 /* POPAction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAction.h; path = pop/POPAction.h; sourceTree = ""; }; - F3B17068042592957DB4087CD527AE51 /* PFCoreManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCoreManager.m; path = Parse/Internal/PFCoreManager.m; sourceTree = ""; }; - F3F84D9899A9D129807B810BCBE9535F /* PFCommandResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandResult.m; path = Parse/Internal/PFCommandResult.m; sourceTree = ""; }; + F3DCF42F9B5384302327ECB9D53A53DA /* PFQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryController.m; path = Parse/Internal/Query/Controller/PFQueryController.m; sourceTree = ""; }; F447802A042F9641D3483858FF8FF6FB /* Parse-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-prefix.pch"; sourceTree = ""; }; - F47B9418D1EB46362FA2A6190969EF8E /* PFThreadsafety.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFThreadsafety.h; path = Parse/Internal/ThreadSafety/PFThreadsafety.h; sourceTree = ""; }; F54B1AE39CAF0CA846C1C729B033E047 /* POPBasicAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPBasicAnimation.mm; path = pop/POPBasicAnimation.mm; sourceTree = ""; }; + F6D4D4C8E189ED660B99AFA5901A89BB /* PFCommandCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandCache.m; path = Parse/Internal/PFCommandCache.m; sourceTree = ""; }; + F6E1EDFB3356D1F65A376DA74B16746D /* PFPaymentTransactionObserver_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver_Private.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h; sourceTree = ""; }; F81BCD1B1E1DFA056533AFD9F925EA0C /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; F81E8633F1E784423FE8B9BE16D38981 /* POPPropertyAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPPropertyAnimation.h; path = pop/POPPropertyAnimation.h; sourceTree = ""; }; - F954000E663E08C66A7FF9913EFEA133 /* PFCommandRunningConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunningConstants.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h; sourceTree = ""; }; - F990476FB27C0034DB517BE7F8E8E297 /* PFHTTPURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHTTPURLRequestConstructor.m; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m; sourceTree = ""; }; - FA0E5057E1930B74D697F4D727731037 /* PFSQLiteDatabaseResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseResult.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m; sourceTree = ""; }; - FAACEF17AA010DB91B4F2D152A8E2E5A /* PFURLSessionUploadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionUploadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m; sourceTree = ""; }; - FBC24FBD24EFA4956FA52BFDBAE5DBB6 /* PFLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogger.h; path = Parse/Internal/PFLogger.h; sourceTree = ""; }; - FC99C2A819C4722A15EE59C87645E47F /* PFRESTObjectBatchCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectBatchCommand.h; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.h; sourceTree = ""; }; - FCF80651D0D3D3178E086F081B09AC3F /* PFTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTaskQueue.h; path = Parse/Internal/PFTaskQueue.h; sourceTree = ""; }; - FD18AA79D76C38588E1A0AE95A99AE0D /* PFObjectFilePersistenceController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFilePersistenceController.h; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h; sourceTree = ""; }; - FD7F7F0634794A2E01436C4EF9CD8DFE /* PFRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState.h; path = Parse/Internal/Relation/State/PFRelationState.h; sourceTree = ""; }; - FFA1F08A1EF895FBF3B8FD036E125613 /* PFPropertyInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo.h; sourceTree = ""; }; + F92FD9C05C3DAFC2FDA01836F5F0516D /* PFFileController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileController.h; path = Parse/Internal/File/Controller/PFFileController.h; sourceTree = ""; }; + FA3FD266385B8FB527CD25EAD4C3B537 /* PFFile_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile_Private.h; path = Parse/Internal/File/PFFile_Private.h; sourceTree = ""; }; + FC1EC8B36049F8C298B8193BA14B5E03 /* PFRESTCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand.h; path = Parse/Internal/Commands/PFRESTCommand.h; sourceTree = ""; }; + FCE60212A5F1B30DB0FA50C2C7FCBE17 /* PFURLSessionCommandRunner_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h; sourceTree = ""; }; + FD6EC1E48FAC08767E731AE5659D8A3E /* PFUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState.h; path = Parse/Internal/User/State/PFUserState.h; sourceTree = ""; }; + FD89DE98891CC69A6BDBE90F774426D7 /* PFFileController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileController.m; path = Parse/Internal/File/Controller/PFFileController.m; sourceTree = ""; }; + FE28A5553FE4AE0FD8390747D2847B04 /* PFPaymentTransactionObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h; sourceTree = ""; }; + FEA6E529E5BC10A92A3372E82A3225C3 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + FFA4C594B449FC01306DB29EAF4D8570 /* PFAnonymousAuthenticationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousAuthenticationProvider.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h; sourceTree = ""; }; + FFE61F44A8E9B3147353EBFD396F02E7 /* PFURLSessionCommandRunner.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionCommandRunner.m; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -923,35 +923,35 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 8C45497CBD83A66C8FBF1289DF39CE3D /* Frameworks */ = { + 731E687FCFFA7ECF41C73A5082D0B09F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2AD822A4C6DD9CA6D499CF6955198F4A /* Foundation.framework in Frameworks */, + 0FE84A5606D81B659C03C3C6102EAA92 /* AudioToolbox.framework in Frameworks */, + AA41B456224F2877941FE21127774A12 /* CFNetwork.framework in Frameworks */, + 99A627BEE8CDA9E8724214F1D7531161 /* CoreGraphics.framework in Frameworks */, + AD0C2B489AA20ED14E8199414FD83FF8 /* CoreLocation.framework in Frameworks */, + DB40B6A7404E09FB143FA7A52D0CA736 /* Foundation.framework in Frameworks */, + FC42B8D37F5C4C8274AE7BB705E67D04 /* QuartzCore.framework in Frameworks */, + A374D4B38EEA9377979680400B9D7AA9 /* Security.framework in Frameworks */, + AD5F099484D301EDC3BD3EE618F28A4B /* StoreKit.framework in Frameworks */, + 09F2FDD632622F34F5340789029EE07D /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B4E7CC86B3732BF1BCC75FF7D4C6DB92 /* Frameworks */ = { + 8C45497CBD83A66C8FBF1289DF39CE3D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4F6883A6C338249681BBEE3EDC5751A9 /* Foundation.framework in Frameworks */, + 2AD822A4C6DD9CA6D499CF6955198F4A /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - FD255F136A4B715136E15DABA3D815B5 /* Frameworks */ = { + BB7D88E900A22E45E6C2784D10858E80 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 484758EE625E2C5FE161DF5FC17451D2 /* AudioToolbox.framework in Frameworks */, - 672DE43F5009AB262B9AEF3F7D3B824A /* CFNetwork.framework in Frameworks */, - 2DACFE369A8EFCB713C6D983E5379A2F /* CoreGraphics.framework in Frameworks */, - F4E009870A5A3FFF06CE2805D238306B /* CoreLocation.framework in Frameworks */, - 253D23734B85142261E13FAA6BF114A8 /* Foundation.framework in Frameworks */, - B0E9BD1E45B086C6992F0EA64B78B46D /* QuartzCore.framework in Frameworks */, - 746236A021A40EFF2B68DA0B1D1835E0 /* Security.framework in Frameworks */, - 302E463F7711C0EEF94B3DCE8FF84125 /* StoreKit.framework in Frameworks */, - 20BA5067D5A5B862B598FC8E47FDA620 /* SystemConfiguration.framework in Frameworks */, + 27F2109F29A28421282EE42D0B9EF39E /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -961,350 +961,350 @@ 08C21DBD68BB3A37A0BE4BC2CA161F5E /* Parse */ = { isa = PBXGroup; children = ( - E6CFB883952C27A92DBF7CF40F382619 /* BFTask+Private.h */, - 6E5E6D3B44810118191C60A9772E4E48 /* BFTask+Private.m */, - 64541D2ABD36F76DA73F677AC3E20A1A /* PFACL.h */, - C849D153FE3E4A235A12279407367FFB /* PFACL.m */, - CD5E24516E8C55549E6229A4A4A3E50C /* PFACLPrivate.h */, - 126E0178D6FE6C3AC0790CCA7F490DE8 /* PFACLState.h */, - BDBDCD188680D0AF62B9AC8AE7D15A8C /* PFACLState.m */, - A9E567CF4EF740CD931B21421CDEF9E4 /* PFACLState_Private.h */, - E00C63837F9F051D3640CED99CD396F4 /* PFAlertView.h */, - 6006204F33FEC54FE00EA9417DDC3F22 /* PFAlertView.m */, - BA67CA21B8529E8E4280069C4CC1FA26 /* PFAnalytics.h */, - 8CD59F7A3B1C57C26A073580850CFD7F /* PFAnalytics.m */, - 12C263F3A518B7482AA7F6DA83C5BE2A /* PFAnalyticsController.h */, - 64CA497DEB5823668E1CF3AEF0FC8118 /* PFAnalyticsController.m */, - 16B0BA102C5E8108137BE847C8377A1E /* PFAnalyticsUtilities.h */, - 861462FD667FE3B82B6900562A7A672F /* PFAnalyticsUtilities.m */, - 56743024027A104903BB088C1FED631A /* PFAnalytics_Private.h */, - 832FCCE6C5FBEE8B8EDE5CB7506C1387 /* PFAnonymousAuthenticationProvider.h */, - 152FEBFF4B90D0D9894CED8063D4D7D0 /* PFAnonymousAuthenticationProvider.m */, - 2C86B73BF7530888F6D5B7414D36E50E /* PFAnonymousUtils.h */, - B88FEBD183FE3500545B1AB65A492E8B /* PFAnonymousUtils.m */, - BF599E498617D2A09E55B46584A069AC /* PFAnonymousUtils_Private.h */, - B5AA5A6C3CB437DD04C72C5E6E53B305 /* PFApplication.h */, - 6D47488328F5D210AF09C2E49EAF28AE /* PFApplication.m */, - EC2BCF421E5556843D2FB60E51F79F87 /* PFAssert.h */, - 91C444E945365A3AEA1C0182D529EA62 /* PFAsyncTaskQueue.h */, - CAD41F16643CC7AF395C0955965F308A /* PFAsyncTaskQueue.m */, - 0241335D86A1EA4D1D2367A14A072B98 /* PFBase64Encoder.h */, - 84C9421C2D04758A8862D5D9334EC3D3 /* PFBase64Encoder.m */, - 0B7AF33E13FC52EAA4B353E736F48431 /* PFBaseState.h */, - 99FC3FA412F7A62CE7905F3F3DB1A2B8 /* PFBaseState.m */, - 3CD1F5B90828B5EDD6A87F8F8B8CBEC5 /* PFCachedQueryController.h */, - 82C15773B786AB50406081B6A022CFAA /* PFCachedQueryController.m */, - 08D26CE5516D7D42D9222FD32B2EDB93 /* PFCategoryLoader.h */, - 5EA6C82779BDAB43BEF4E9F00620B3CE /* PFCategoryLoader.m */, - 431480C91CFCFE70AF20289CEECDDA2C /* PFCloud.h */, - 01F9E3D986D34EB39EC1D2728FB49D75 /* PFCloud.m */, - 54BB29D5628B693DB06DEF1222114715 /* PFCloudCodeController.h */, - B3919700A3759610223FD35F92AB0AA9 /* PFCloudCodeController.m */, - B0D65D1A09B22A4BB4B1C9A5BD78B77B /* PFCommandCache.h */, - 13EA057769889745EF622AD275B30A3F /* PFCommandCache.m */, - F09FE7B19C3276FA4D8099145F0898D3 /* PFCommandCache_Private.h */, - 003F04CCCCA9D217090A10F09B6A095B /* PFCommandResult.h */, - F3F84D9899A9D129807B810BCBE9535F /* PFCommandResult.m */, - E3CA74B2AFA8B7D355ED3CA3F92BDFD2 /* PFCommandRunning.h */, - A52D3DEFF51B24F1DDCCC3F6705AB35B /* PFCommandRunning.m */, - F954000E663E08C66A7FF9913EFEA133 /* PFCommandRunningConstants.h */, - 2FE59B575E6D95DCA7C8B65A48397212 /* PFCommandRunningConstants.m */, - 54B2FDE08445C963E18042DD668FA776 /* PFCommandURLRequestConstructor.h */, - 6B12A0FF8B77277D84507AC79070FF41 /* PFCommandURLRequestConstructor.m */, - 8DCE002C62F26D3852FE0C2CB25CACEA /* PFConfig.h */, - 2CDE17945AABA4BFAB91FD36A9002DB4 /* PFConfig.m */, - 310661341392FCCCCA69B3D4AA745597 /* PFConfigController.h */, - 50F5D5E8541B4E9B381B9D48639498A9 /* PFConfigController.m */, - E210FB710EEFE34D8FB35378F3F6F935 /* PFConfig_Private.h */, - 0EB55315EB3A3AB23E3EB95B4B89971F /* PFConstants.h */, - 435286DE6414AD754A172CA441F36643 /* PFConstants.m */, - 8C954AD66C579F4C80C80E36A0D3E80B /* PFCoreDataProvider.h */, - 6D24EDB2D5A2B95E2AC01499F225F585 /* PFCoreManager.h */, - F3B17068042592957DB4087CD527AE51 /* PFCoreManager.m */, - A3ABEEBB2584C20918BF1285C34EA0E9 /* PFCurrentConfigController.h */, - 85AB3D3F633121769C963DCA3B59E6D6 /* PFCurrentConfigController.m */, - 43FEB98D92288E63383CA2110D5E1033 /* PFCurrentInstallationController.h */, - A091F705C56846E993F12A441C8A163B /* PFCurrentInstallationController.m */, - 1FF980C8F6DFEF3C3FB8C7A56B963C15 /* PFCurrentObjectControlling.h */, - 01B5421FED39CB875C6EB4E26A48BD0E /* PFCurrentUserController.h */, - A0C39E3679DEC122C57CAF59AC4607D6 /* PFCurrentUserController.m */, - D1DFF36EC5F44CEE642F63092AE04BA3 /* PFDataProvider.h */, - 27C57412F25313254CDCF65E3AB69F64 /* PFDateFormatter.h */, - D712B949F0E1E31622675FBDC8C2BD57 /* PFDateFormatter.m */, - 365E961AFE93318B968A4EAD9C3042AD /* PFDecoder.h */, - 7566A44BF4C7FE91F74365E72E1C4073 /* PFDecoder.m */, - 59CC3868179641E97ED190501DFF4E05 /* PFDefaultACLController.h */, - 2218553C181F20F306EC36D9B7169974 /* PFDefaultACLController.m */, - 39F54AA49BC2FD125A794644082419CE /* PFDevice.h */, - 4E9D9F93BE35D535FACB0F23193B2668 /* PFDevice.m */, - A9ADF726213C599DDAE3F7A1849BDBF6 /* PFEncoder.h */, - 714D2457E720A0BF6948DBDCD450623B /* PFEncoder.m */, - 0638F31DB969AAA2089D7F79383493DD /* PFErrorUtilities.h */, - 8A01E3948888676B760B4B5642C2B3CD /* PFErrorUtilities.m */, - F25C4200A9FE7F2B396804D09A24AFC6 /* PFEventuallyPin.h */, - C91998944DE097F05FC7342A6ABBD51F /* PFEventuallyPin.m */, - 7BEEAEF9152946B143C6C357FCF24E5A /* PFEventuallyQueue.h */, - 512DF9E7249F58F9AF45B707F9C3949F /* PFEventuallyQueue.m */, - B72923D868E99D0FEF748E99A0931A2F /* PFEventuallyQueue_Private.h */, - EE07F56B15CF5CA712EDB693EC0DE281 /* PFFieldOperation.h */, - 0FAFDD952B22B5410869339CD24F946E /* PFFieldOperation.m */, - 3DF189D36ECF2252091D16F77FBAA4B1 /* PFFieldOperationDecoder.h */, - 1FDE3C12C2A761D6DD2E3EFE88D9A85C /* PFFieldOperationDecoder.m */, - 1CECC0578B9328DAEB8EA4E274B9D16A /* PFFile.h */, - BDFFC646E1E0963C745694C371C7CA92 /* PFFile.m */, - 0DBAF5788AC957A98F8DA82DF0E007A8 /* PFFileController.h */, - 7DEA9336EA629BC874D1CD9F3933E83C /* PFFileController.m */, - 6516FEAA3036D59756B8161A5A9E7918 /* PFFileDataStream.h */, - E43B375F1DC0B3C39D4F8CBCFA1B51A2 /* PFFileDataStream.m */, - C3DD022C4A01AA56BB0CF97F8B732F1E /* PFFileManager.h */, - 3B3B39A4E421EE0FF21AB42B74EE1955 /* PFFileManager.m */, - 7BF3525974C036CC12A09FF5C9633C85 /* PFFileStagingController.h */, - 0F437AB63E48A5534A05700959E05607 /* PFFileStagingController.m */, - 3FF58ECD6BEDF747B767ABEBBB293774 /* PFFileState.h */, - C5CA9676B6BB4F73C05AB36945596A99 /* PFFileState.m */, - ECEB10403A7DC566C15134DFE3373AC2 /* PFFileState_Private.h */, - 9FB82515BD6D0F9EC91327CB819F8BC6 /* PFFile_Private.h */, - 48764192F317D5037D89AF6584C95481 /* PFGeoPoint.h */, - E4FD3B2FD49993D574EF9A49D6C13261 /* PFGeoPoint.m */, - 1B0BA363E4B429F291596ABBFF279C44 /* PFGeoPointPrivate.h */, - B4F105DB0D9A5C8E74B80DB5C0C9BEFF /* PFHTTPRequest.h */, - 08FC3ACF4FB85302DB39490D9E032664 /* PFHTTPURLRequestConstructor.h */, - F990476FB27C0034DB517BE7F8E8E297 /* PFHTTPURLRequestConstructor.m */, - 5DD7438CB8B7D0CE7BAEE6965CE86AEF /* PFHash.h */, - 4C28BCBA3F60C895444F215DF1A28EBF /* PFHash.m */, - 16E2644C0CFB5068F39B60EA663C06F8 /* PFInstallation.h */, - 6CBB64CFFD32EF20996F33E08CE27F2B /* PFInstallation.m */, - 82A5F04959D1ADFDEFFC1808EF20F799 /* PFInstallationConstants.h */, - 5E6BECFF342BD360C868DC57ABEEC767 /* PFInstallationConstants.m */, - C1E1FCF7C3F2C64010D8E7CA6C8D29A3 /* PFInstallationController.h */, - 2C0B84AF80B3F79D3684EC294B10145D /* PFInstallationController.m */, - A3529F546C50E5FA9E92AE069C4127AA /* PFInstallationIdentifierStore.h */, - 349789B8BAC6B5134BB027FB59B2DAE4 /* PFInstallationIdentifierStore.m */, - DADC9D70AC397C40456C71C7BB5E5F45 /* PFInstallationIdentifierStore_Private.h */, - 66B0DF4B48195D78B041D58D3C3AEE3F /* PFInstallationPrivate.h */, - 2DD709EEB7F953B2BFD2FFBF243EF632 /* PFInternalUtils.h */, - 4DC9003F64939358FF50986ADC0DF824 /* PFInternalUtils.m */, - B507DE9CFF3C90B0CFF815EF53AF8474 /* PFJSONSerialization.h */, - A9345BB3B8924E56D392BA3231701002 /* PFJSONSerialization.m */, - 68F8CC838971F8BE4FD097EA7C5BF494 /* PFKeyValueCache.h */, - DDE8EAF4000D3A40ED79006C50ACC68B /* PFKeyValueCache.m */, - 52DA55B0C48801979739E451008199A5 /* PFKeyValueCache_Private.h */, - A40C6F5379E163ACAB3BFEADF6BBF21B /* PFKeychainStore.h */, - 36E5C28B728EEE2896643C1BD0BB1E3B /* PFKeychainStore.m */, - B63F361CAC0664EA5B1BDBD82688DB0A /* PFLocationManager.h */, - 130E12A377FD4C1EC29AF55964B70A23 /* PFLocationManager.m */, - FBC24FBD24EFA4956FA52BFDBAE5DBB6 /* PFLogger.h */, - 2B16B8588E9DCC56E87F38E324BE2E50 /* PFLogger.m */, - 524FE09AA008388A357FA29376EBA283 /* PFLogging.h */, - 0A7AF22DC435894F3927644A0B475DFA /* PFMacros.h */, - 5C77B473F634527F1102E3093D9ECCFE /* PFMultiProcessFileLock.h */, - 711043A9271B2D627CCBD4F5731F56B1 /* PFMultiProcessFileLock.m */, - 74EE96B44DF0116B1160526B21D7D189 /* PFMultiProcessFileLockController.h */, - 1F1826EAEE4BB8BAD18008DEBA561577 /* PFMultiProcessFileLockController.m */, - 4051AFB557520935D16F093222B0C0BB /* PFMulticastDelegate.h */, - 22F8D68DF4AAD2C14B0AB430E0C5337F /* PFMulticastDelegate.m */, - 9F5A413E6DB1455C1427DAEBF27B2133 /* PFMutableACLState.h */, - 89508E9160A4510C35341638A4A33FFC /* PFMutableACLState.m */, - B7CFA60CD26AF95E62DC7D82173BA5F6 /* PFMutableFileState.h */, - 0007F67CE44CDB26AC0B26E0B4438F17 /* PFMutableFileState.m */, - E94D7BACCC5E81069DC1DA732C343E3D /* PFMutableObjectState.h */, - 7962520325311C12136692F8AA4F4AD1 /* PFMutableObjectState.m */, - 6B2C19C0AF74CAAFAD47C599A4E9A495 /* PFMutablePushState.h */, - 43F7CA0102C3FA58C58F19240D8C4672 /* PFMutablePushState.m */, - 12C8B2712D809AA1B4EC70ADAB8C6809 /* PFMutableQueryState.h */, - CB81D6A5051D8F542190EDFDC7456611 /* PFMutableQueryState.m */, - 797597C3E809F5E570660958DD8719D8 /* PFMutableRelationState.h */, - A94E11CCEE95914D7CE1B1B35E7C1F89 /* PFMutableRelationState.m */, - 83720EF13618F9740F2F7E1F7E8DE8B9 /* PFMutableUserState.h */, - 5AAA36FB0A4E13DB1928E19770D8EFF8 /* PFMutableUserState.m */, - E6DCAF78DAAF81EC8FC6B8AFC7ADDD1B /* PFNetworkActivityIndicatorManager.h */, - 5FDB9AA6B98C04B1C0D671A64BEEFEED /* PFNetworkActivityIndicatorManager.m */, - 4671EA53DD8AE149FB0F02838CD24C37 /* PFNetworkCommand.h */, - 317ED8ACDA393EB59C813498345758A5 /* PFNullability.h */, - DD763184372CC604F25E4FDD0865B288 /* PFObject.h */, - C7A179A9BD2533E252132EB24EEEE7AF /* PFObject.m */, - 92BE0A4991FB16CAC08DA54E2D9B4E4C /* PFObject+Subclass.h */, - 9179D67A40E4CA93EA605BECE4456488 /* PFObjectBatchController.h */, - CC134A9DF660C6CC1845802A0025F10D /* PFObjectBatchController.m */, - 72761DCB73DE19D59EFDEF3DF961C4F3 /* PFObjectConstants.h */, - 924397DD8F89F34DFFD235E510DCA00F /* PFObjectConstants.m */, - 47A6E2FEA4744CFF9330F4BDD5E274CE /* PFObjectController.h */, - 9DB9AD91F894187B691D13713E1FB4D9 /* PFObjectController.m */, - C5B446A2C8083573E71F021EB732F282 /* PFObjectController_Private.h */, - 63068DEB876F824B178AEFCD8421DB6A /* PFObjectControlling.h */, - BD06D82A2D98EDF6AE058093F67CCA71 /* PFObjectEstimatedData.h */, - 6D33981E62B4BA883B0FBE4A4DA1C812 /* PFObjectEstimatedData.m */, - BBFB017F02B69A95630ECA78C0507891 /* PFObjectFileCoder.h */, - 3257C6D2F1664400BC0FA089A7A688A8 /* PFObjectFileCoder.m */, - 8BE5F0A1B5CEA848AD6F87144411D8B7 /* PFObjectFileCodingLogic.h */, - 549E8AA3A0932BA40BF11C59E1C2C7BD /* PFObjectFileCodingLogic.m */, - FD18AA79D76C38588E1A0AE95A99AE0D /* PFObjectFilePersistenceController.h */, - 4648A560C468826E346FA00C25F64545 /* PFObjectFilePersistenceController.m */, - A3F9EF3F957FD4DB2D6C601F067168F7 /* PFObjectLocalIdStore.h */, - B7F689B7A8A241A249C1A39110F19728 /* PFObjectLocalIdStore.m */, - B40C2F17FC5388F0013F8D1C257B70DC /* PFObjectPrivate.h */, - D003772BF7AE6C6E80062C919E2AA60F /* PFObjectState.h */, - DD991348470823191613124528FDAA2E /* PFObjectState.m */, - ACF9532A0D0C66EC20F4225EBD285526 /* PFObjectState_Private.h */, - 98821C83404F255ED479CAA0E69D588A /* PFObjectSubclassInfo.h */, - 791F22142433CB687B6BD4F07D0950F1 /* PFObjectSubclassInfo.m */, - 5B8726A00CBE872AD6EEF361F3E1A9BE /* PFObjectSubclassingController.h */, - A4680CAB4F1F20CE4E4FF134C9A11A0D /* PFObjectSubclassingController.m */, - 63298AA824390762997B9EF2E73DDBD6 /* PFObjectUtilities.h */, - E1247C54B1E28A1D1035FF148D7A8067 /* PFObjectUtilities.m */, - 10634547D3CF0DBCA1FCF7438AB74C39 /* PFOfflineObjectController.h */, - 5E00A160407B37F025D21140BEA61FE9 /* PFOfflineObjectController.m */, - 3395CE4D4A4BF8134C0A8860F1672838 /* PFOfflineQueryController.h */, - 64A6FC072C0BE15E0FB1732E5E7BFA8F /* PFOfflineQueryController.m */, - D0AE6501423148E55391488B3AC17AF1 /* PFOfflineQueryLogic.h */, - 696FA42E303EDB3CADE000C9A7F03B68 /* PFOfflineQueryLogic.m */, - DD934234EB3517E8F2CAC1D699D9DC6C /* PFOfflineStore.h */, - 84ECBFAB9763ED2C04848E86CC5D6C1D /* PFOfflineStore.m */, - 26C358BF063BCDCE76707FB07B405CB6 /* PFOperationSet.h */, - 58B7C9659B0B47DE31498D5601CC2E12 /* PFOperationSet.m */, - 6CC0DF9EFC230F428EBC36272C09AF04 /* PFPaymentTransactionObserver.h */, - 45C24BC4DD0B5F2B7F803B32EC634F9C /* PFPaymentTransactionObserver.m */, - 865C327D27A51821F5096832A0A79CD6 /* PFPaymentTransactionObserver_Private.h */, - 77409243AF81F02474E6071043269440 /* PFPin.h */, - 1969D32C99E438DDB5CD4D541DDC00CD /* PFPin.m */, - 0AF5597A50326B2C756F30471E7EA8BE /* PFPinningEventuallyQueue.h */, - C7F96DFC12AF4F8CB8DB480DC2A6B5DC /* PFPinningEventuallyQueue.m */, - 117B19051931B86306911BB447C05694 /* PFPinningObjectStore.h */, - 507594AEA30B179FEE12586498800470 /* PFPinningObjectStore.m */, - 0C05D3A3DD0A525F6B31D006CCC2D2F4 /* PFProduct.h */, - 602F796D464ED522B3E9F48F6B4306A4 /* PFProduct.m */, - 66778E4EF145FC32D4ED5D0B3B643425 /* PFProduct+Private.h */, - C623372365DC2AFFFE5053AB44C49CAB /* PFProductsRequestHandler.h */, - 751B683157A512BFFD27276B937C7FD6 /* PFProductsRequestHandler.m */, - FFA1F08A1EF895FBF3B8FD036E125613 /* PFPropertyInfo.h */, - 0C8CEF3DB4AEFD83044AD62B8A9ABD41 /* PFPropertyInfo.m */, - 8E5C09D44589D6540714FF487D97E0C3 /* PFPropertyInfo_Private.h */, - 005D78329EE21D6E17E5C61CD7F99399 /* PFPropertyInfo_Runtime.h */, - 5DBA1E4D4138BAC1EB874D74D4AE73C1 /* PFPropertyInfo_Runtime.m */, - B9CD991531E7E5557C57269840034107 /* PFPurchase.h */, - F05B147B865A347DA8B9891D3D9B89BF /* PFPurchase.m */, - 1F56BA43A619F5C1A2ED1F36B30E29A4 /* PFPurchaseController.h */, - E0AF46F24F89ABCDCB18AAF5BD82D7BC /* PFPurchaseController.m */, - 8E24261DA563B7612DBA518C8FEB0B6B /* PFPush.h */, - E1E17B04786B5816404325BFDBE700B8 /* PFPush.m */, - A2F0842045651D9FD30403B5033648D7 /* PFPushChannelsController.h */, - 90F15F6DE2D590C1823069FF6E87E823 /* PFPushChannelsController.m */, - 91C278F6237539322009B508C24CC49D /* PFPushController.h */, - B7EE7F890CF09AF26E1191C3D4540CE1 /* PFPushController.m */, - D0975C15C502A249A57E3EE7AABC42BE /* PFPushManager.h */, - 26B663E68AA063970F54C5A4311360EA /* PFPushManager.m */, - BD53F748C3855917C34EE3DCD3CD3F92 /* PFPushPrivate.h */, - AA6EBD92B6893560E360E020C1911D5A /* PFPushState.h */, - 186E1997DE5BBBD9E2A895D71A7BC915 /* PFPushState.m */, - CBC8583C0448880C8739111436630AE3 /* PFPushState_Private.h */, - 1CFD4EDE572C72678AC61FDC5C92AAC4 /* PFPushUtilities.h */, - AF9E249BDEE7198A0DA97A4426AE5431 /* PFPushUtilities.m */, - 3D56DAEA6274547A9C5D871A0412DD30 /* PFQuery.h */, - 38386024B8BB9B3B8F22D7B1FD578A31 /* PFQuery.m */, - 96444BC173DBE095E670C72753A21C51 /* PFQueryController.h */, - 2007FCF4B24326D21653DCD5F4F03D9E /* PFQueryController.m */, - B727105265500960B53BB43FD44AB19E /* PFQueryPrivate.h */, - A211C4790E0A281B7800BE2B399091FF /* PFQueryState.h */, - 895E6BCE8395CB2A323176F349B9EFC6 /* PFQueryState.m */, - 9FD085377EDB67B301B8EE26D9310CCC /* PFQueryState_Private.h */, - 378A8BDEE3062C91F84C778871060257 /* PFQueryUtilities.h */, - B854EEBA088DE9B81F5F84844F966B49 /* PFQueryUtilities.m */, - A9D75702C8583CBA05067061643DEB98 /* PFRESTAnalyticsCommand.h */, - 6117D27B3E43E27D2717ADF042654E56 /* PFRESTAnalyticsCommand.m */, - 5CA96AB87A674FDD5847C707289446B2 /* PFRESTCloudCommand.h */, - 9BACBB72ECB77F59482B166BC28EA869 /* PFRESTCloudCommand.m */, - BF436F013E06183E4E80FEDB3EE6640C /* PFRESTCommand.h */, - 6A5BCCC7BC1F6EA4EF7FD3C7BB518BAB /* PFRESTCommand.m */, - 5857640427DCEDE7D0433F498D520085 /* PFRESTCommand_Private.h */, - 85C7493C5ED4D1548757C3A048535862 /* PFRESTConfigCommand.h */, - 48056B31A860AAD6950C3519A539F495 /* PFRESTConfigCommand.m */, - 1A4880CA362DCF456DE8C64954480CEB /* PFRESTFileCommand.h */, - E4C23C917DC34380EB14D2D8BC9FAA1E /* PFRESTFileCommand.m */, - FC99C2A819C4722A15EE59C87645E47F /* PFRESTObjectBatchCommand.h */, - 1EE3B22DE1F33BE14763458A191128C1 /* PFRESTObjectBatchCommand.m */, - 9EED13B4582C1463F725EE279074226F /* PFRESTObjectCommand.h */, - A3A336AAE714C90D57D61FFCE1F62540 /* PFRESTObjectCommand.m */, - 022E40D42E74E0C92C4963F2BE8E4FD5 /* PFRESTPushCommand.h */, - 943A16F9CDDE8E3F97A4CC444A9CBD38 /* PFRESTPushCommand.m */, - 43DDAC0517DD7E2A075642D9FB379D04 /* PFRESTQueryCommand.h */, - 4922CD9E2B9E78912E88BDDA753C4FB2 /* PFRESTQueryCommand.m */, - 3E0F1E598FDC4AD2B9344C0BE42CEF0A /* PFRESTSessionCommand.h */, - C60907A5603A25A8E7EF01FCD0B44B11 /* PFRESTSessionCommand.m */, - 0EA667FBF478CB2CC7CFE38041F96D6F /* PFRESTUserCommand.h */, - 2B32B43DC93B94CD2FD151A51C7009B2 /* PFRESTUserCommand.m */, - 9D0F8BFFB2B329D3F8B455B14472E5E9 /* PFReachability.h */, - D1DF8C126A878F1FFF7DB1A3BEB96647 /* PFReachability.m */, - EADEB4FFD06A826AC14B90222A65ED15 /* PFRelation.h */, - DDC7530978AD0E9150595DF76671ACD3 /* PFRelation.m */, - 6753A9356424F2F8B192F9B14278EE8E /* PFRelationPrivate.h */, - FD7F7F0634794A2E01436C4EF9CD8DFE /* PFRelationState.h */, - CA696D9F1B6B454ADB7158523225ED1D /* PFRelationState.m */, - 90908F63ED9505B2C6685248AE5457F4 /* PFRelationState_Private.h */, - 0A8C828F2BF737F68E0CF5F2CE64D6C2 /* PFRole.h */, - 6EA62081F6F193B86D2CDD0A04D0E99C /* PFRole.m */, - C7A82AD0CBC0B85B3BC3F38D91D613A3 /* PFSQLiteDatabase.h */, - 80E779232DDE695E182A465B9AE80CB8 /* PFSQLiteDatabase.m */, - F2F468A970FC15FC06B99390A1FB0614 /* PFSQLiteDatabaseController.h */, - D0E2E71B86A138C5A13EEABD485A9EAB /* PFSQLiteDatabaseController.m */, - EB22EF6AA771F815D6776E538BF091A1 /* PFSQLiteDatabaseResult.h */, - FA0E5057E1930B74D697F4D727731037 /* PFSQLiteDatabaseResult.m */, - CF1EB66CAC009B756BA17A2817145984 /* PFSQLiteDatabase_Private.h */, - E2E9E2D3066C78DC48958D6FD03ABADA /* PFSQLiteStatement.h */, - AF50C03C543FAF9B976475CB98E20B0D /* PFSQLiteStatement.m */, - 8D157CA12EC27ADEB58C088EBB17D4CC /* PFSession.h */, - 6DB2F830CB43261A32A1658BB35A9006 /* PFSession.m */, - BAC76B9259ACF68B0E7869A148AE8EEE /* PFSessionController.h */, - 99AD17888337EB965D0DF3DEB606CAA4 /* PFSessionController.m */, - 972EBE95D808C0CA2DAD94DDC5AC5F1D /* PFSessionUtilities.h */, - 01760A57DC1D7F86DDC6BD37AF0773FD /* PFSessionUtilities.m */, - D51B5DC898167C5060CB1C2CE1F6CA6A /* PFSession_Private.h */, - A872DF33FEEBCB36CF6A53343C39C8D1 /* PFSubclassing.h */, - FCF80651D0D3D3178E086F081B09AC3F /* PFTaskQueue.h */, - 5F2F5693477E620DC6D5E2C3F6627CDA /* PFTaskQueue.m */, - F47B9418D1EB46362FA2A6190969EF8E /* PFThreadsafety.h */, - C73F19BD326FCF565056E28970ACD732 /* PFThreadsafety.m */, - BC8B4ABBE8DA9D24096F873234FCA24C /* PFURLConstructor.h */, - 4312B15964C63A373BA6C191FD761444 /* PFURLConstructor.m */, - 453D0F6EFB50B07FB491E7A1E373EAF6 /* PFURLSession.h */, - 74CC29CB5720DF98AD22C289EBAA7FBD /* PFURLSession.m */, - 4500DD87BF3AB695EEEF0D03C9E94067 /* PFURLSessionCommandRunner.h */, - 5E6180746342782338BDCA4EE5B65D72 /* PFURLSessionCommandRunner.m */, - CEBD5ABCFEDE938F240830CC6F863AE9 /* PFURLSessionCommandRunner_Private.h */, - CCBD5F36E99EBF39758767076681F918 /* PFURLSessionDataTaskDelegate.h */, - 32D7E6743D001141788DFE84AF635291 /* PFURLSessionDataTaskDelegate.m */, - A52285082871167215D3C139EB152B98 /* PFURLSessionDataTaskDelegate_Private.h */, - 67B621259A8F197B0245C2C5B5003445 /* PFURLSessionFileDownloadTaskDelegate.h */, - 74ACACF597B47C752DF60C1269A50016 /* PFURLSessionFileDownloadTaskDelegate.m */, - 8D874E8C6013F838D31865D7CACFFC8C /* PFURLSessionJSONDataTaskDelegate.h */, - EEA9CEB6EBD6F7D905225F3028208411 /* PFURLSessionJSONDataTaskDelegate.m */, - BF8B668575E32B4BC03D5A86BBAEAE74 /* PFURLSessionUploadTaskDelegate.h */, - FAACEF17AA010DB91B4F2D152A8E2E5A /* PFURLSessionUploadTaskDelegate.m */, - 527000AD7EF33A01F4034400FB51B6E9 /* PFURLSession_Private.h */, - 4840DBE7CE64AE75599772CB21A51C7E /* PFUser.h */, - 1FA13E8424FDF032B807EB307AF448F7 /* PFUser.m */, - 5B31CEE7768E9065A1168B8DFC0BAB53 /* PFUserAuthenticationController.h */, - 3ED3C7E0A4856FAB56766C096BB50FC4 /* PFUserAuthenticationController.m */, - E57BA8CF64D8018BCFEB289F81C3B448 /* PFUserAuthenticationDelegate.h */, - F1C86CCCF50B7B1651DF1DDA93ECB2A7 /* PFUserConstants.h */, - 4EB9E22A1797EF8F815387B3148987B7 /* PFUserConstants.m */, - 6B58384502B9F28F6975F16F9DB0EFF3 /* PFUserController.h */, - E9F025C441C961725285A53BA76899A7 /* PFUserController.m */, - BD96834E719E340094942FD1EC1DE357 /* PFUserFileCodingLogic.h */, - AC00DC436BD41D96D7CDADBBE0CCBC63 /* PFUserFileCodingLogic.m */, - 9A2313F192E2841C83555BDC26D3866B /* PFUserPrivate.h */, - 023787FB361088A0CC1401AF3EF0BD44 /* PFUserState.h */, - B6142CFCE45847BB7B5926039074D3DB /* PFUserState.m */, - 776FA4A81A104C872B1C274D67CE18FE /* PFUserState_Private.h */, - AA2F4B0C1884B9FA8CA4005505904B4F /* PFWeakValue.h */, - 8C42D1919287483D0731E55C7039390D /* PFWeakValue.m */, - 62080F892890D93BE422B38D0ADD788B /* Parse.h */, - EB5DC17148922AD333F7571A1F2466E3 /* Parse.m */, - 0C4513EB4F24A2BDEE3106F5C83A1664 /* ParseInternal.h */, - 6DE516CCF6D322CB4CA050FD6E52A70E /* ParseManager.h */, - 22FDFA3B8D05D54B5BB969DABCBC6413 /* ParseManager.m */, - 09FDB3ED688B893DC31F13212A092E58 /* ParseModule.h */, - A696C6A7BB4CC0BCC4967D91315B61AC /* ParseModule.m */, - 588102B50CAE5BFD6658FF5042965B9E /* Parse_Private.h */, + 86B138E9858EDFEBAA891920A773BB74 /* BFTask+Private.h */, + 99C7C0C503A3D3A88614601190439E30 /* BFTask+Private.m */, + EA58A3816CEEB2481D5DE6BD6C227C8B /* PFACL.h */, + DED2ECAD15A2BED79633C019904DB280 /* PFACL.m */, + EAED133F8FBB016C53BC9D82E80C4D8E /* PFACLPrivate.h */, + CF3B2B472A7B4B67DF8D50DADB4DBF03 /* PFACLState.h */, + 869D3911E9F5718BD0B6815F0AB11EED /* PFACLState.m */, + A666132F7688CB58789BC9FFAE5AB614 /* PFACLState_Private.h */, + 2127EF3ED0DD02367DA4C3463002ACB7 /* PFAlertView.h */, + 4799A3AB2CC4C1F80574291738520C2F /* PFAlertView.m */, + 06C655052162786B845146B0DB31017F /* PFAnalytics.h */, + A6F717725F4394E95525ABAFB9F33DB2 /* PFAnalytics.m */, + D3568213E494C4CA6E3B00B07B2AC4E4 /* PFAnalyticsController.h */, + 722BD969D4C4074223C4A656C0F6B7E7 /* PFAnalyticsController.m */, + DD2E7D85EAE9D93FB3EB497EE098D0E2 /* PFAnalyticsUtilities.h */, + 1A90C53A523B75F828B57C0D0368595B /* PFAnalyticsUtilities.m */, + EC28357CF9D94A9F2E49253D3A16AFCD /* PFAnalytics_Private.h */, + FFA4C594B449FC01306DB29EAF4D8570 /* PFAnonymousAuthenticationProvider.h */, + 3A3CFC6CFCF3EBBA16C7CCEB59F009AD /* PFAnonymousAuthenticationProvider.m */, + 9F3472D80F0C7C53B06E64DD4D56B74D /* PFAnonymousUtils.h */, + 56414F68055CC861BAB740091699D58B /* PFAnonymousUtils.m */, + 9C99D12456DCBCCB4B0A98B1D7C33FA9 /* PFAnonymousUtils_Private.h */, + EF733EE510CD105F55AD2996CF7D7F94 /* PFApplication.h */, + 546B14FA2F1DCF4C453346FC971CDDB6 /* PFApplication.m */, + 1D07F2F153FA1A7D77D68027DBF1AA33 /* PFAssert.h */, + C0239D4A0C4788EB654381F621134ACB /* PFAsyncTaskQueue.h */, + 4220E05D6A608326E489CDA533392ED8 /* PFAsyncTaskQueue.m */, + 41CD7A269A474E8BFCBF52EFC03BD796 /* PFBase64Encoder.h */, + 2C38E6D6FFD2BE12F651C934B7BFCE1C /* PFBase64Encoder.m */, + 2980A00A9C6B5DB5973D0870C4343CDF /* PFBaseState.h */, + B80259DBA1A3ADC7CA8707C772EB8531 /* PFBaseState.m */, + 53F21E51B835CE481CAA7ADCD43FC400 /* PFCachedQueryController.h */, + 6C49C75467014FA33C9642023DA6F54D /* PFCachedQueryController.m */, + 84B340A85871E94B6C963F8AC7AA61A3 /* PFCategoryLoader.h */, + 23EFBFB21E3A2659446F462A44152817 /* PFCategoryLoader.m */, + A12B04A764E33DA1C04C5C989B5C536C /* PFCloud.h */, + 0B782D4B8E3CF13324D674E51D4AA45A /* PFCloud.m */, + 9142904B7E1F16BB09177E6409AF060F /* PFCloudCodeController.h */, + 8357F198915C0DBFE26D33A3CFD62A56 /* PFCloudCodeController.m */, + CF75EB65BC1D473202CD8BD2F8F9879C /* PFCommandCache.h */, + F6D4D4C8E189ED660B99AFA5901A89BB /* PFCommandCache.m */, + 17C4E65BFD7461A5C5B88B9650622AFA /* PFCommandCache_Private.h */, + 6FC0F52242A2200901325143AB469063 /* PFCommandResult.h */, + B26254ACE198AC611B2797250DAECDFA /* PFCommandResult.m */, + 39F8120161EADF847B985CB2751E4B2A /* PFCommandRunning.h */, + 53086C5F8B1EDBB0614BD2C21F7CBB35 /* PFCommandRunning.m */, + 6C3B93CF1C94B6DA6DEB3D31B9710F83 /* PFCommandRunningConstants.h */, + 1C7CE32C1AC8296CA307938E551C3B91 /* PFCommandRunningConstants.m */, + BEDAC2F484B73C71F6B8E48C5B6FCB76 /* PFCommandURLRequestConstructor.h */, + 86589D24F969C8D7ABFA2C300F854F18 /* PFCommandURLRequestConstructor.m */, + 71FB977D682D8E9A3C20EB5A8FA8D44B /* PFConfig.h */, + A9B5F4ADDFA617FF96FED75084262625 /* PFConfig.m */, + 8F97CDDB1431E1D55E17DE205316A5B6 /* PFConfigController.h */, + 9CCF0135C67AEC40B93D2B426712CFC9 /* PFConfigController.m */, + 750C23383E751070C38083B3DDED458E /* PFConfig_Private.h */, + 7F142A8509CC5040126EC51BDFDDE6E4 /* PFConstants.h */, + 0CC5D59716A7C77BE85C9B72C76F0A38 /* PFConstants.m */, + 2CB00E16E736A73AA516D8A0FA5DB28E /* PFCoreDataProvider.h */, + CEFF62A508184DE729502142858C6AAA /* PFCoreManager.h */, + 611FEF49E42DDEF17150301DFA476527 /* PFCoreManager.m */, + 09D61EB0980687ECD7D678DA7465F846 /* PFCurrentConfigController.h */, + 00AC73B1D5A77DE4B493A990018DA825 /* PFCurrentConfigController.m */, + 2CE62F458530CD664224D3B0B7E49EAB /* PFCurrentInstallationController.h */, + 72DCBBAC0FE8319BEC96154A134CD74B /* PFCurrentInstallationController.m */, + B41C5D6C197E0FDC6E5D8533A0C1CE95 /* PFCurrentObjectControlling.h */, + 8CC4B1CA6C9A2DF20B2C8F69652BC62E /* PFCurrentUserController.h */, + CA74286D523103A7357250A458466DC3 /* PFCurrentUserController.m */, + A7BDDE2CC83877DFC9CF1466C53CB68D /* PFDataProvider.h */, + 9D4E5CDB238B4708D75EDFA04F2388C5 /* PFDateFormatter.h */, + 68900F0E0EB2E31F6E0B59E6692F1C5E /* PFDateFormatter.m */, + 741AF064CFE86ABB229F37FBAFB71F22 /* PFDecoder.h */, + A69CE4C29C33C8B3AEC1E73E847A4197 /* PFDecoder.m */, + 2B52BDCCABD35EA2D1C44912753D79E1 /* PFDefaultACLController.h */, + 875C18418E320318A1F79B5C8DE9BF08 /* PFDefaultACLController.m */, + 43D1212BEB11DE789DE0E4CC000FC9AF /* PFDevice.h */, + 3D8637E5A58491F08A00BD27912794B7 /* PFDevice.m */, + 59A9225041C3DEB9A02CF97CE810A7F8 /* PFEncoder.h */, + 73BA46E681EC6D99B36A7E314941B82A /* PFEncoder.m */, + E09AFB4E5EAB3E98F681BBBEE934776D /* PFErrorUtilities.h */, + A2E0CCEE8F29A9378B50A30B3F234FB8 /* PFErrorUtilities.m */, + 5F48FD0FD7AA215B6C44D0D0D2B89AA6 /* PFEventuallyPin.h */, + C439FB0D5070895D69861DE4654C8D25 /* PFEventuallyPin.m */, + 7461F51B0EABADB21626FF904B87CCE5 /* PFEventuallyQueue.h */, + 06A34F6AE5214388ED772768B1AED0E1 /* PFEventuallyQueue.m */, + B23ED4E70AA813C755E036B0600606FA /* PFEventuallyQueue_Private.h */, + 1AD6E87805E310F6517D29CDFEEE9587 /* PFFieldOperation.h */, + 11BAD4B729ACB9404D4D1110F4EAD454 /* PFFieldOperation.m */, + 5B8E6E53482F4B643407A15BA8B0F287 /* PFFieldOperationDecoder.h */, + D3F6C6FD6DBA4896546009DD948AE020 /* PFFieldOperationDecoder.m */, + CB36CF9B5806A0332F9E4955152BC86E /* PFFile.h */, + EA32A2997B8869B495BB155A4CF0CDCA /* PFFile.m */, + F92FD9C05C3DAFC2FDA01836F5F0516D /* PFFileController.h */, + FD89DE98891CC69A6BDBE90F774426D7 /* PFFileController.m */, + 4E29EFCB546410074B97DF506ABC1C98 /* PFFileDataStream.h */, + BA7F7022FC278524B2BE48AD1759AF42 /* PFFileDataStream.m */, + 6A34F74808E75DF01FC097E2274D4116 /* PFFileManager.h */, + 1018BFE57D5EDCC0B72E6A255BEC0971 /* PFFileManager.m */, + 8F6664FFA2E9D3FD4CE7F5A6C742742E /* PFFileStagingController.h */, + 623D1DB3CEA9317B7323E1B4435A4B04 /* PFFileStagingController.m */, + 4F35A9095465C7A589E9D7FC2F4774D8 /* PFFileState.h */, + 49E7AE33EEA74B98EDDEF13254E369C2 /* PFFileState.m */, + 1AF8F0B7303C117779BBEBE048717710 /* PFFileState_Private.h */, + FA3FD266385B8FB527CD25EAD4C3B537 /* PFFile_Private.h */, + CE510ACC52FD7B52F382F765AA7C38D6 /* PFGeoPoint.h */, + 696CB0BED47C8B75EFCBA90955BB17EA /* PFGeoPoint.m */, + D1F61BF57518F0154F82CEF764C0F35D /* PFGeoPointPrivate.h */, + ECF03863A8796C16D65EE3AC73DEC5B8 /* PFHTTPRequest.h */, + 3AF05F518409F76124476457E2514771 /* PFHTTPURLRequestConstructor.h */, + 312D446A8E99BA072B9A091616AB0DC2 /* PFHTTPURLRequestConstructor.m */, + 20DFAAE476F60317DEAEE177019E41E9 /* PFHash.h */, + 0D322CC5914ECCF1403B38B9F1A7597F /* PFHash.m */, + CFA6C4B46A860F2290E2C9F4AFAADFB9 /* PFInstallation.h */, + 02ADA053F55CC3D3354BB334C196EA78 /* PFInstallation.m */, + 5C2B236ABC299A669D53E54FC6FF7414 /* PFInstallationConstants.h */, + 49274509C4FFAAEBBD45D8600A573B2B /* PFInstallationConstants.m */, + E6EC9018A6A5F9DC5F956E06A0A1DA5D /* PFInstallationController.h */, + 1FA17927867D6B7D6DADCC59515AAE7D /* PFInstallationController.m */, + 53F56D358828987779F91894A792A4CA /* PFInstallationIdentifierStore.h */, + A266244911A0F90CFC3A6FF419F3140D /* PFInstallationIdentifierStore.m */, + CC952D982119E3AE1061314E2B7C35D4 /* PFInstallationIdentifierStore_Private.h */, + 2515044ACEA23C32AC39FC89A3A0F6E0 /* PFInstallationPrivate.h */, + BA75D0EC4C508481F47EA13B39766654 /* PFInternalUtils.h */, + 132074912F44DB77C37332C4CA8A3DAB /* PFInternalUtils.m */, + 2DBBD6C38E3D91712C6414D4224376D3 /* PFJSONSerialization.h */, + EE2CAAF3B10EA83469E9BF55744C5A56 /* PFJSONSerialization.m */, + AD088079F8066DB0050C23252546389D /* PFKeyValueCache.h */, + 50B0DDFFAD085BBF7A9EE5E4B41E834B /* PFKeyValueCache.m */, + B113FA8703C60024B8FBA20DFB21B744 /* PFKeyValueCache_Private.h */, + 71AF2ED13A3973592E31F7D47D5D90F0 /* PFKeychainStore.h */, + 7EE9007C583DF8ECE1AEF3F938312117 /* PFKeychainStore.m */, + 6C07AD7B01F99BCDAE94E6D7D0BF6038 /* PFLocationManager.h */, + 6DD2128030F8E23F9B1C6141659F3B8C /* PFLocationManager.m */, + C13F91216CB47F63D6B60866FDDC2E12 /* PFLogger.h */, + 425CA0B11664DBBBEAA5C27618F79FAD /* PFLogger.m */, + 2F561B1D0F25670B287F11DE69B4A30C /* PFLogging.h */, + 4BFA78A3405997CEFE0F4A84B480089B /* PFMacros.h */, + 0C10587D5F82F53DEA74DF5129DD7312 /* PFMultiProcessFileLock.h */, + 2280179A3928340114FB48C1AF04368F /* PFMultiProcessFileLock.m */, + E8EEBAABE8D879BA98E6BDEB440DC3AF /* PFMultiProcessFileLockController.h */, + 2171BDF0DFBFCB33F05FC9A1AC8B42B5 /* PFMultiProcessFileLockController.m */, + 75EBF2C2BD6CA4EB5FC5249BB70052D3 /* PFMulticastDelegate.h */, + 8B5234B11242385CB74EE42A5CBE16D9 /* PFMulticastDelegate.m */, + 3A56F696F9B2544A6A4DB58FB8E47809 /* PFMutableACLState.h */, + F05547667B76C441755A476C0996B67A /* PFMutableACLState.m */, + 3D98F818FBD7F97BBBBADD55203F244B /* PFMutableFileState.h */, + 2B07F2F4F2D16D912592A5F093A28DA6 /* PFMutableFileState.m */, + 8E5B06286F6DFAD5DAED57C3E9C5400B /* PFMutableObjectState.h */, + 00835672E9411A4D0F46362CD9FC93C9 /* PFMutableObjectState.m */, + DEEC86611B8BC477AFEF42C162C7DEC7 /* PFMutablePushState.h */, + 867A8434D57CE1DA9A2FFA7F45002F4D /* PFMutablePushState.m */, + AD0E30A8555AA525BA9AFC45114E9002 /* PFMutableQueryState.h */, + A5C0755A44D6605CF4BE2DFE2EDE1D86 /* PFMutableQueryState.m */, + 5A09D1AC6A988D2BC0012D3F2027B90C /* PFMutableRelationState.h */, + 0524A1E79CBE55E8D0C538F4382D17B7 /* PFMutableRelationState.m */, + 72E4522345A892B89A84489DB3B8F316 /* PFMutableUserState.h */, + BE2646A9566B3A11A2F19AA8D5D15E62 /* PFMutableUserState.m */, + 5844FC1A0322F7909761B921AC033AC3 /* PFNetworkActivityIndicatorManager.h */, + 4897F88BB4A784CD6F1DFE74C498732A /* PFNetworkActivityIndicatorManager.m */, + A8D4C658312EAAA8ACC1463D1135ADCA /* PFNetworkCommand.h */, + 77C22DDD172F2AE628D146B1BD68824A /* PFNullability.h */, + 4113ABD9B9640D41ADFF4F04A28AF0C7 /* PFObject.h */, + 718BF86CB0A3C4DB13DBC0EAEA86A9EF /* PFObject.m */, + 21D9F2D1230AD40B645828FF1CFD4506 /* PFObject+Subclass.h */, + 8904B6096DEB568855A4A7625ED6CAE1 /* PFObjectBatchController.h */, + 1FC52A2F51F3D38AD751DF3CC9B7DA95 /* PFObjectBatchController.m */, + C2884D9AD4EDF5B53F05C2631989A495 /* PFObjectConstants.h */, + 6AFE87339800D6E962F2EFEC155ABC75 /* PFObjectConstants.m */, + 2A8F12B4902D7D8A8BBAF518DB7C37EF /* PFObjectController.h */, + 35F4C67236438881E09D5813BFA8BB6A /* PFObjectController.m */, + 381988C254ED0DACBFE2ED8164944325 /* PFObjectController_Private.h */, + 248BBC0B2BBF2B01CCFCC79F7FE785AE /* PFObjectControlling.h */, + 8A4BF349F63AC01086486C8E720D05AC /* PFObjectEstimatedData.h */, + 59363C495BDE76341FC7C70BE565EF4A /* PFObjectEstimatedData.m */, + 904E4BEABBDE0DE64491D4A2F274F91B /* PFObjectFileCoder.h */, + E5331787DAA3B52CEE076DC2B62A6100 /* PFObjectFileCoder.m */, + 110790F94C28E100B1086C0F8B7D1198 /* PFObjectFileCodingLogic.h */, + 42763567F50A02D13E880143048C01A1 /* PFObjectFileCodingLogic.m */, + 07A4A542A64193B1380E5346BCEBD316 /* PFObjectFilePersistenceController.h */, + 97CC9DF74264B1EB7657386C54DD635B /* PFObjectFilePersistenceController.m */, + 7E3D63307A8DF22EE6CA58FBC364ACF4 /* PFObjectLocalIdStore.h */, + 6DE629D21A679A60A0F64440A0BAC324 /* PFObjectLocalIdStore.m */, + 1146110AA563CDAFA693A1B073292A1E /* PFObjectPrivate.h */, + D639AB7043CB6DA1A6BE3D49D7D9368B /* PFObjectState.h */, + 931885B870C2D6166C233379707A6DBC /* PFObjectState.m */, + 9F3E10B801DC1EAB7C18648EA922D183 /* PFObjectState_Private.h */, + E3ED5AFB7A3B2DC03C1D116039A73C3C /* PFObjectSubclassInfo.h */, + A9725E3A84362C8B373DA1D0A052B2CB /* PFObjectSubclassInfo.m */, + 7ACE89D8884AAB54C96F063FF438FA31 /* PFObjectSubclassingController.h */, + E3C0AB42ACF3767DE19D18A31901BC94 /* PFObjectSubclassingController.m */, + B322FB271A210C27577B6EAD8C5062CC /* PFObjectUtilities.h */, + 7A9E8271F4A4A2FE0F545A52010B99A1 /* PFObjectUtilities.m */, + 6CCEA16112CA90E44E0E982B2A2B27D3 /* PFOfflineObjectController.h */, + 76E34CF3E0809A86C3173F02A63233D2 /* PFOfflineObjectController.m */, + F11B5250697F6FBAF1331BF54A332420 /* PFOfflineQueryController.h */, + BEA3D87AE012FEF7F6B48E6F0D5F09F7 /* PFOfflineQueryController.m */, + D552CBB2BF4CC751787C15E7A7B176DF /* PFOfflineQueryLogic.h */, + 529877D68CE76A3FBD3B683DAFF9EAE6 /* PFOfflineQueryLogic.m */, + 7971DD333353B1B9C109052C86147DEA /* PFOfflineStore.h */, + E342EB169F41501EE41BB76D5CA176D6 /* PFOfflineStore.m */, + EBE833F5099FF7EFCCA0F9DF00B29E0D /* PFOperationSet.h */, + 9DF9D409D2807A34B747777E2DC97F14 /* PFOperationSet.m */, + FE28A5553FE4AE0FD8390747D2847B04 /* PFPaymentTransactionObserver.h */, + EC3179640630E861C08F4D68C5D17E53 /* PFPaymentTransactionObserver.m */, + F6E1EDFB3356D1F65A376DA74B16746D /* PFPaymentTransactionObserver_Private.h */, + ED92DCF321683034F9F263E4083E6959 /* PFPin.h */, + B431D27F0705F097E581263224EF8C88 /* PFPin.m */, + 15C0132F3858BCC88CB28061A960F0D1 /* PFPinningEventuallyQueue.h */, + F38E2E7F98830316F576F45842FC59EF /* PFPinningEventuallyQueue.m */, + 576B1125C947E14A49E22D7F411DC55C /* PFPinningObjectStore.h */, + D8851833E5439BBC098DCCB68455E8D8 /* PFPinningObjectStore.m */, + D9F83A22B0271BB18AA8680451C70138 /* PFProduct.h */, + 6E5AF4BFF040360310887AAACC8C323C /* PFProduct.m */, + 4A66170B5CA1BBCF22487EEE33E21A6C /* PFProduct+Private.h */, + EE6E133088AF492F15B3EEBDA616077B /* PFProductsRequestHandler.h */, + F0B4809986AB679C74DF6F09D239764C /* PFProductsRequestHandler.m */, + 81397E9A1C30F99B66BB50321A4C5075 /* PFPropertyInfo.h */, + DC21BCC836700655FF0FC5118F41587C /* PFPropertyInfo.m */, + 7334DBEED1B1C3906828C55F380147ED /* PFPropertyInfo_Private.h */, + 9A132496AD1361AB641C6E65067049BF /* PFPropertyInfo_Runtime.h */, + 79D9D3FFDE344267236EECCAA6397DA3 /* PFPropertyInfo_Runtime.m */, + 6DDB11ED96EBA4EC3BB398585D212BD7 /* PFPurchase.h */, + 20AC43D5B60CA86B1AD76BC5D4591D96 /* PFPurchase.m */, + 5B311513624F9614FA7EBA34D397F337 /* PFPurchaseController.h */, + 372AEF8690F07BECE3E348391A87DEBD /* PFPurchaseController.m */, + B2256E19F54D3528053251E979C5257B /* PFPush.h */, + 3EBCC4FDAE51D4D5EBDF89A681AB0F7D /* PFPush.m */, + 7FAF3CA5F19C3EB426FBB8AC2A926793 /* PFPushChannelsController.h */, + 2B9C4FA9F02AD2C7B7F788126DA856F5 /* PFPushChannelsController.m */, + DC04CA70DD902C38FD430C17D4244E92 /* PFPushController.h */, + 35A7823CEFBFE2CF5ABB3556EF3D0995 /* PFPushController.m */, + C96C8283235BCEAFB2B6F132CE911578 /* PFPushManager.h */, + 6C364D224B5FE61E8BA844FB66D55C5F /* PFPushManager.m */, + 110F3B75E3D3EC4A08CEBF6AC5B01CE0 /* PFPushPrivate.h */, + 33A4732FF27318AD75D549D9D4EF9CF7 /* PFPushState.h */, + 82E29BC8D2B7929DF1755FF61A7965EE /* PFPushState.m */, + 9ED7955943D662DC1DC137B29185582D /* PFPushState_Private.h */, + 8EC7BE51CD7D82DB749F5857D70F22F1 /* PFPushUtilities.h */, + D22939E9625B5D422EC6E479E7048771 /* PFPushUtilities.m */, + 715B44864CC4816F9E241DBDAE6498CE /* PFQuery.h */, + AD3CB420E4A0D3570A166616F7BC779E /* PFQuery.m */, + BC0C8A8C41DC1963D695265153E23911 /* PFQueryController.h */, + F3DCF42F9B5384302327ECB9D53A53DA /* PFQueryController.m */, + 66C84FE024EC45EF4AB8D3EE3366EAF3 /* PFQueryPrivate.h */, + 9E9FF91DD2DCE7D504DE6C0AC9CE6091 /* PFQueryState.h */, + E9B49219DF626061CA1102BDDE09600A /* PFQueryState.m */, + 440A7F77699899974219AB5825962822 /* PFQueryState_Private.h */, + 7C85AFD7ABA045B4FE8ED8BF948A7C60 /* PFQueryUtilities.h */, + CB8189117D5A0D245487C3423D73727D /* PFQueryUtilities.m */, + 514CD500BD8BACEDB35A91E6F6135E56 /* PFRESTAnalyticsCommand.h */, + 608790F5A36AC5B2650CA3AB5EDB96D8 /* PFRESTAnalyticsCommand.m */, + 80F676B2C080DCBC841173D2FC2CBA26 /* PFRESTCloudCommand.h */, + 5B55D2A6F5C29F672688ABE3737712C1 /* PFRESTCloudCommand.m */, + FC1EC8B36049F8C298B8193BA14B5E03 /* PFRESTCommand.h */, + F1597BC7BE1EC9A86FCCB75B11EAC04B /* PFRESTCommand.m */, + D52AB7265F316C1F4B4C5881D8EA52DC /* PFRESTCommand_Private.h */, + EC70489BC426131AEC77A58EBC61D6A9 /* PFRESTConfigCommand.h */, + 5A7FFA051B54FAFBAAF14E0C23C4641F /* PFRESTConfigCommand.m */, + 6AC5046C91AD0BF56975D1A7F382F946 /* PFRESTFileCommand.h */, + A39433C5B2CFE6011222CBB72F0EAE5C /* PFRESTFileCommand.m */, + 4C9C62664AD1CE0A3036EA774C72C69C /* PFRESTObjectBatchCommand.h */, + D77774D5F665986858DAD577093BF4F4 /* PFRESTObjectBatchCommand.m */, + 106E039845795427C9E9FC7A626BF395 /* PFRESTObjectCommand.h */, + 099176EFCB8B1C379CDFD09F1B0290F4 /* PFRESTObjectCommand.m */, + 1D3CEE52CB984D4C4DB6A4F7A4903BBC /* PFRESTPushCommand.h */, + 581264D483DB217A6F5ED83035A33E30 /* PFRESTPushCommand.m */, + 5F8C504A6034C0190584C29C9997115B /* PFRESTQueryCommand.h */, + 132B11DB4450BB2DC8926A20B853B6AD /* PFRESTQueryCommand.m */, + 707C0020EA94AD091665CAAD43AA717B /* PFRESTSessionCommand.h */, + 17A73E112537B17232FB3245923658EF /* PFRESTSessionCommand.m */, + BFDC9A22A2A96279B4BDF17190E2A775 /* PFRESTUserCommand.h */, + C3FEE284F1A3A64929DAC57EF28FBEA2 /* PFRESTUserCommand.m */, + 42093BEF3F8BF73F39F33B7D65A8B184 /* PFReachability.h */, + B962D108140D96784FC828D86963E605 /* PFReachability.m */, + 92FCC3E21D3E8790768C5AF6D196F8E6 /* PFRelation.h */, + 57BAE3AE27D1DF554AB43ADF5CA1C592 /* PFRelation.m */, + C9076753B0A2E12983ECEFBE60C6E4A3 /* PFRelationPrivate.h */, + 891204204D388D19194E2B25AC4EC9CF /* PFRelationState.h */, + 177ECEF6166CB8A176CA4C377BFFD54B /* PFRelationState.m */, + B6D07518E33FDE1A7B76FABCCABCBCD6 /* PFRelationState_Private.h */, + 8C43426FA34D5469526AAFBD7806A65C /* PFRole.h */, + 0DD193A7608BB519CE6B1B91AE25E86C /* PFRole.m */, + 6082FD21FE81654EC989E13CFA913CAB /* PFSQLiteDatabase.h */, + 6BDA2CB539774B96EADA0171CEB88CC6 /* PFSQLiteDatabase.m */, + 603F88D603FD21B1DB540C18DCB38780 /* PFSQLiteDatabaseController.h */, + 18EE5011502D312C68238751D67BA76A /* PFSQLiteDatabaseController.m */, + B6EFD05D2D5F7A4F89CDF5EA8E64F2DE /* PFSQLiteDatabaseResult.h */, + DEF74DE469E28BE80197C43305F5C003 /* PFSQLiteDatabaseResult.m */, + DFD8D064D883A41B1432E94742A1A879 /* PFSQLiteDatabase_Private.h */, + 71D39E34A21D15F057EC75D91D396416 /* PFSQLiteStatement.h */, + 4123F238BE00014D15B8B3DE34ADC447 /* PFSQLiteStatement.m */, + 880AE19807FD283D4EB9724F21F4E548 /* PFSession.h */, + 12C95F161EE734C3016E891E9C306A42 /* PFSession.m */, + 9DB1B89CDD385F67E440201640C7AFA4 /* PFSessionController.h */, + 56D3E21616E0654B5CFD38290C9213A9 /* PFSessionController.m */, + C65B577617E60D4DCA6671103F519E4B /* PFSessionUtilities.h */, + DDEB176EF3964EAF1E91BFCA999AC383 /* PFSessionUtilities.m */, + E64CFDC86F7294DC0F63391554852CAD /* PFSession_Private.h */, + 17A4E3B51919C1813C70CF9A41D08C64 /* PFSubclassing.h */, + B2CC06448183660D517225325BC1F93A /* PFTaskQueue.h */, + 60AC5AE111695E87D9942D028A5723AE /* PFTaskQueue.m */, + 050B2D7FC8433528EE96A73D6084FDCA /* PFThreadsafety.h */, + 5BE848028E2C509A4FA316D19E795CD7 /* PFThreadsafety.m */, + 84279F3B0C8DD145E9A9E04D59B81C41 /* PFURLConstructor.h */, + AFBDA3EF95CECEB449D3303D17FA28C2 /* PFURLConstructor.m */, + 1B4CDA57AC000136EA5B434611EF0426 /* PFURLSession.h */, + CB69D67914ACB9C94D9D8340F8255A72 /* PFURLSession.m */, + C6930DD80530DC03DCEC33CA1BE24BE7 /* PFURLSessionCommandRunner.h */, + FFE61F44A8E9B3147353EBFD396F02E7 /* PFURLSessionCommandRunner.m */, + FCE60212A5F1B30DB0FA50C2C7FCBE17 /* PFURLSessionCommandRunner_Private.h */, + 6E5945950FBDA34F155BE025094F2F22 /* PFURLSessionDataTaskDelegate.h */, + 6C3AFFA6C615F4519F0FD6DD4EA4194C /* PFURLSessionDataTaskDelegate.m */, + 9468278E36B3EB05C5CA530058F1C8D6 /* PFURLSessionDataTaskDelegate_Private.h */, + 24A36B9D634B60BD2A1CAC408B8226A3 /* PFURLSessionFileDownloadTaskDelegate.h */, + 0D29BD0D675C84B8C7EF1F88FD36417D /* PFURLSessionFileDownloadTaskDelegate.m */, + 4ACFA0EE4D94D9AD3A656FFFB0D6DC16 /* PFURLSessionJSONDataTaskDelegate.h */, + 331907AED7D09788ACC2D6029AB2604F /* PFURLSessionJSONDataTaskDelegate.m */, + 95C6F24D93DAFD0A99EFD6D457EB68B1 /* PFURLSessionUploadTaskDelegate.h */, + 484F5D6426BF8586F7203DC9DE6690A1 /* PFURLSessionUploadTaskDelegate.m */, + 875A9098C4D90F40AE3128DC006E1B98 /* PFURLSession_Private.h */, + CE37BCDB0808A581D8F23138D5B2B412 /* PFUser.h */, + 71EFF9FFB238B21E016BDB85AA6333DD /* PFUser.m */, + 13AAF6B43993D5DCA1ABA1E0C06822F9 /* PFUserAuthenticationController.h */, + D151C7604325CAC5209D9944C99E592A /* PFUserAuthenticationController.m */, + 7363B398C79454A71B17ACDF25FAA393 /* PFUserAuthenticationDelegate.h */, + 619BA5C9745FABA615C1071117CF49AF /* PFUserConstants.h */, + B745F5094B240A7BD83E4F246A86BBD8 /* PFUserConstants.m */, + 4DE181E23B100CCECFB4B435A3DF9AD4 /* PFUserController.h */, + AEB7E49E278592D89DD351ACEB1287FA /* PFUserController.m */, + 6E393C3F2BB10DF131AB02A295297B88 /* PFUserFileCodingLogic.h */, + 2CDBD2A39D34214C8D004ED2EB0D1624 /* PFUserFileCodingLogic.m */, + BF198CCAD2E6C2AE39D8BF68464A93CB /* PFUserPrivate.h */, + FD6EC1E48FAC08767E731AE5659D8A3E /* PFUserState.h */, + D9AD8A2E0B442B2597A5EFD99859CE70 /* PFUserState.m */, + AB1ABA6EB2984DFC25350DF75335526F /* PFUserState_Private.h */, + 078642F5D1917B58A6998424887BD706 /* PFWeakValue.h */, + 5880D4CB5AA7C367A9C45BE209F6CED6 /* PFWeakValue.m */, + 5057A97EFDC884111C4A5829863ADD7C /* Parse.h */, + E56771AE10D1052EB22D63A1F7631599 /* Parse.m */, + CD24A497637B97FB13D87D8C73E642D5 /* ParseInternal.h */, + 6104AB82845FA5625E51A56F2D3213B8 /* ParseManager.h */, + BF89107C38CFD5E5770EC87A79813462 /* ParseManager.m */, + 4073B51D97588127A6EF20481CEC3025 /* ParseModule.h */, + 90312FA789CD74048F0D32BCC9C66D08 /* ParseModule.m */, + 420A2E467841126C406BA9FA83D75161 /* Parse_Private.h */, DB22940D3278BA5A422F059D4EFE7C6B /* Resources */, 78131DF6EFB03A9654D9C718AB31087D /* Support Files */, ); @@ -1390,22 +1390,22 @@ 633DB105B84604115C888F5869A77ABC /* Tasks */ = { isa = PBXGroup; children = ( - 6DDEF20541344C4516B6DD22C1EB240F /* BFCancellationToken.h */, - CCF8CEA9A6064ADBBF6FE4C06F58AC6B /* BFCancellationToken.m */, - 94DE9F283B3DD4A47D7A8EA13D83D2C1 /* BFCancellationTokenRegistration.h */, - 97519DB5264A8748FB5782787D62615B /* BFCancellationTokenRegistration.m */, - 5BB217AB66F98AB5F05CBAB65838FA70 /* BFCancellationTokenSource.h */, - B4D6A8E418A8D134A61BFD6E094F65C4 /* BFCancellationTokenSource.m */, - C0E20B62BF2BBA3C871D3C7A2F6BD617 /* BFDefines.h */, - 06D0E06E5B5391A250E1E1200BADD9E1 /* BFExecutor.h */, - E35E8AB9F2B4D23971F6C53C0730A2F8 /* BFExecutor.m */, - 53FF030EF4F55FF673AA368E802BA1AD /* BFTask.h */, - 714C2B37BE3060D4E9F3C32DD8DA8D04 /* BFTask.m */, - 409D5D646200B0874F402A55B2054320 /* BFTaskCompletionSource.h */, - 828F0C1371108640DCECDC077D80E6F9 /* BFTaskCompletionSource.m */, - 41F8ECF258A9931347A9663B788331F1 /* Bolts.h */, - 1EE03D2CE9262E74BE101A9AD7F66934 /* Bolts.m */, - 3ED31097D39E6FCF0F3C743613AFA30C /* BoltsVersion.h */, + 09E9F2F5DDCB3D2B60BDC018656F8355 /* BFCancellationToken.h */, + C0F939B16AC0EFB29DA8BB09980593E3 /* BFCancellationToken.m */, + 72BD4751F46AFBD16AE367CAE3FA8785 /* BFCancellationTokenRegistration.h */, + B3814B9487A8A8F8F9A04F510A6B3AC5 /* BFCancellationTokenRegistration.m */, + 840EF1BA3066E61DD0BA27741371AE22 /* BFCancellationTokenSource.h */, + BC33018672D1C57CFC91D822DB867582 /* BFCancellationTokenSource.m */, + 4E8E5DE9CFE8C0FF513510782D08CD45 /* BFDefines.h */, + D342B7DAEB7FE6F3E3110ABADFD54C09 /* BFExecutor.h */, + CBA0A5B0F0E83001148599CCEC105E79 /* BFExecutor.m */, + ABF7E63586A26C19233745BAFC155684 /* BFTask.h */, + 03BFBD31F2922FEFEDBE273BF9244C02 /* BFTask.m */, + 0B1F17F7CC5A76F9BE1ABD011A8AB9C7 /* BFTaskCompletionSource.h */, + F1B0914AB61CF2B1F9D7ECBDE1CDA9F1 /* BFTaskCompletionSource.m */, + 8133C4680D6ED2FB7338EF30FC88BBCA /* Bolts.h */, + 2A4C94256E730FF99DD4B0F41D9D749C /* Bolts.m */, + A7B5535D819421EFD2C8509D19D9430E /* BoltsVersion.h */, ); name = Tasks; sourceTree = ""; @@ -1414,8 +1414,8 @@ isa = PBXGroup; children = ( 97EDF5367846B0B65AF31CA41D2B7812 /* Parse.xcconfig */, - CE1700FF476E3DF743FC31E536BEBEC6 /* Parse-Private.xcconfig */, - 139FB17B5AD5B2BD40E10B8D2177BEDC /* Parse-dummy.m */, + C55B1243D9ED528D2D7760513B4D0FB2 /* Parse-Private.xcconfig */, + A0F125F4185CBFE9AD59CB8DA8774D62 /* Parse-dummy.m */, F447802A042F9641D3483858FF8FF6FB /* Parse-prefix.pch */, ); name = "Support Files"; @@ -1463,8 +1463,8 @@ isa = PBXGroup; children = ( 77312E9917F3B4071B52F28CD4A21EBC /* Bolts.xcconfig */, - D8453063C22C0EAA2AAC6F28CFBB7AC8 /* Bolts-Private.xcconfig */, - 6577AD13A469645712E5462FABF1FD4F /* Bolts-dummy.m */, + 397A9B2690E0D54158F63ECBF0C769B2 /* Bolts-Private.xcconfig */, + D5A05A4C5F9BA9C066877A324EE3B697 /* Bolts-dummy.m */, 29386A5F2F357AA19B9627F8C57A8D14 /* Bolts-prefix.pch */, ); name = "Support Files"; @@ -1474,8 +1474,8 @@ CCA510CFBEA2D207524CDA0D73C3B561 /* Products */ = { isa = PBXGroup; children = ( - D1027683C24BF81936188B3CFC423274 /* libBolts.a */, - 478C891A77C52ACD2EE9267253F46B18 /* libParse.a */, + 9C22BE2BFE0552D4CF4E6F400DCBF925 /* libBolts.a */, + A88229973FC49C97305F3F69622999F1 /* libParse.a */, F81BCD1B1E1DFA056533AFD9F925EA0C /* libPods.a */, A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */, ); @@ -1501,15 +1501,15 @@ F9400E82BDA8E39AA40BABDC6CB12014 /* iOS */ = { isa = PBXGroup; children = ( - 8AC51F94ED4331609976AE134591C5FF /* AudioToolbox.framework */, - 4D5FFAB9AA9026C7A87341B6E4F0D9D7 /* CFNetwork.framework */, - E32EC19799A69A3384750AD614A93F67 /* CoreGraphics.framework */, - 7AF8C210F41A36E77FE11185CD850274 /* CoreLocation.framework */, + CEC32F2ED903D3546EEEA22AC6E13F4E /* AudioToolbox.framework */, + FEA6E529E5BC10A92A3372E82A3225C3 /* CFNetwork.framework */, + E7CDC14FF480C0D409AF7711FADC9DF1 /* CoreGraphics.framework */, + F31229637871A1DB25EEC72DEEA4CABF /* CoreLocation.framework */, 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */, - D414E542C5F0101B04B821F89CB601B6 /* QuartzCore.framework */, - A85428811E6DF1E07CDC7F512CC5CC56 /* Security.framework */, - DE8243581B97EEAD2F8781E6C48FD676 /* StoreKit.framework */, - 067C9B58B0E86A024F7699B9FC2F7E42 /* SystemConfiguration.framework */, + F2AD64A1E39EF0EC17E66E7C8C765930 /* QuartzCore.framework */, + 792D4196F6AB3ECF94F94E4B1A786D9D /* Security.framework */, + 4987E5DF7D6AE7BBDE4D3055F00A8B27 /* StoreKit.framework */, + 5A71F8897B642BC983919241A133904D /* SystemConfiguration.framework */, ); name = iOS; sourceTree = ""; @@ -1527,222 +1527,206 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 509E8AF80F557271E1098064FB89924E /* Headers */ = { + 2ED471274550E62AFAA4EF426E74A34D /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - D609DB3153D08C9401FC6FD046270B24 /* BFTask+Private.h in Headers */, - EE83BD490034A515070EA6E8E37E227D /* PFACL.h in Headers */, - 93B58C9AAFA9D0DC02CD2ACE750D9C96 /* PFACLPrivate.h in Headers */, - C6087786013E123A5BA24CDA01D12829 /* PFACLState.h in Headers */, - 4249688CFBB92CA26E922E6C47AFE8F0 /* PFACLState_Private.h in Headers */, - 34731100DF3C112C179EA805BCAF5BCB /* PFAlertView.h in Headers */, - 0844609AD157B2569405CC584D6D9679 /* PFAnalytics.h in Headers */, - 592AB331F20CA58D7CDBF114CA8C9050 /* PFAnalyticsController.h in Headers */, - FF10EDB81D6724D8A7CBBF85ACC89082 /* PFAnalyticsUtilities.h in Headers */, - EE3A3C294C3462AA62E477D5E167306A /* PFAnalytics_Private.h in Headers */, - F7145179707A6982099A9639DB58CDD1 /* PFAnonymousAuthenticationProvider.h in Headers */, - 4A364A41B24FE3CEA692690F01EC6C37 /* PFAnonymousUtils.h in Headers */, - 281E35FB8E35EC1E9F2ECC14AC06EE2F /* PFAnonymousUtils_Private.h in Headers */, - 3EB30C9EA4E091F05E2A7C5E855FFC16 /* PFApplication.h in Headers */, - B8876C85293D37E405FA3F56EC170BB2 /* PFAssert.h in Headers */, - 22DBE369440BD25CBD77C151C93A8F05 /* PFAsyncTaskQueue.h in Headers */, - B34504AFEE1AC70E9E0A1282A1986D2E /* PFBase64Encoder.h in Headers */, - 6ED4CEFEAA7F0414622FFE7917495648 /* PFBaseState.h in Headers */, - DB7880E757BE6F38134F25167A2F59EC /* PFCachedQueryController.h in Headers */, - 05F00A05A1F52FDF030A9ED3A65E4381 /* PFCategoryLoader.h in Headers */, - 2A06A476247DEFCD15C38C029E6D34DB /* PFCloud.h in Headers */, - 04F6C6E18CCF030F4D582EB215021992 /* PFCloudCodeController.h in Headers */, - E9C084ED73C6D3CFEB4A0414EDFF8405 /* PFCommandCache.h in Headers */, - 3E7AD54BEB829BE44D66654B265DAAFF /* PFCommandCache_Private.h in Headers */, - 04FDA7B957175B9AB41F12B581C39012 /* PFCommandResult.h in Headers */, - 309EB042B343BE9C616F85304F8ABDEC /* PFCommandRunning.h in Headers */, - 4D17AF3B64FAB28260209C8002E5FDCB /* PFCommandRunningConstants.h in Headers */, - F7D3BCD31F6408894D425BCC2F4FD82D /* PFCommandURLRequestConstructor.h in Headers */, - AD9492E2817C3879542A3391BD8BA9CE /* PFConfig.h in Headers */, - 70AB083C56EDE94F0CDC6A27CE2D00CE /* PFConfigController.h in Headers */, - 6F82531660EECBDAEF14269319E36A07 /* PFConfig_Private.h in Headers */, - E9DF1006C8F4119B1A23C8A964D4BDCF /* PFConstants.h in Headers */, - 6AB23830897DDB0C99C4F74A860D59B4 /* PFCoreDataProvider.h in Headers */, - 8AF4CC8804312196C7524D40045DDA52 /* PFCoreManager.h in Headers */, - 0D1CA8852FF8147C75A85B2F31117903 /* PFCurrentConfigController.h in Headers */, - 08B14D1DFFB905C7DA0922E60E93AFB4 /* PFCurrentInstallationController.h in Headers */, - DE67E043D3E6DFA26ED0608672E9EDE4 /* PFCurrentObjectControlling.h in Headers */, - 30AC63E9C9742D92BFB642A9A7F0FB08 /* PFCurrentUserController.h in Headers */, - 49ECD4E3A20E8D5FF2E8866D39CBAA21 /* PFDataProvider.h in Headers */, - 3802A63F68ECB3CA5DA20D75732A6DFD /* PFDateFormatter.h in Headers */, - 55545DCF029201A06D7DE175F9C42D33 /* PFDecoder.h in Headers */, - 14A9C6C340EF645292625C9BAA9D2E4C /* PFDefaultACLController.h in Headers */, - 3A4405B733E2F1770CF0AD8185D5DC10 /* PFDevice.h in Headers */, - 8FC831A96A9845FD32E258BC486937EA /* PFEncoder.h in Headers */, - B50C52582D730164A3C8A53F6F25239B /* PFErrorUtilities.h in Headers */, - 8A943C6875FF0162EF1AEC7EBE5A127A /* PFEventuallyPin.h in Headers */, - B0B417C67B226E210B5BAA71B6065E96 /* PFEventuallyQueue.h in Headers */, - 5D7484171082562F2D51A3AF11AF2363 /* PFEventuallyQueue_Private.h in Headers */, - 2D7F082E126EE359CEE014B2619D1661 /* PFFieldOperation.h in Headers */, - 26703E636E5C16D01C99FFBA0B9E8062 /* PFFieldOperationDecoder.h in Headers */, - 73182BB18ED83668DED496548790559E /* PFFile.h in Headers */, - 505024039D01133D2E06C44BBC09FC07 /* PFFileController.h in Headers */, - 7A128642C01CF8CA4F8EE6A6E4C72F00 /* PFFileDataStream.h in Headers */, - 547D96860F208D16B73B9DAE7DD796F0 /* PFFileManager.h in Headers */, - ED28BE739856D7DFDE74F4C6488C0B09 /* PFFileStagingController.h in Headers */, - 9D58D3CD652D24573594995023EA6D00 /* PFFileState.h in Headers */, - 9C53501EEB56F92B450024D8E97054BF /* PFFileState_Private.h in Headers */, - 82871F1A3C4D6E604FCC1567E42C1275 /* PFFile_Private.h in Headers */, - 18695B6FB1C1E432BBBED25F18E62976 /* PFGeoPoint.h in Headers */, - C82A861227CAC478415817B56AA81AB6 /* PFGeoPointPrivate.h in Headers */, - 5C5BD8C3EBACA8E787A84BAAB4A416DF /* PFHTTPRequest.h in Headers */, - CB466BFC29E239E0CAA89792EEB55773 /* PFHTTPURLRequestConstructor.h in Headers */, - FFFD333600E0CF9D8AE5D00E36F147C2 /* PFHash.h in Headers */, - 97D99230703F530162B00666ABC86E2B /* PFInstallation.h in Headers */, - 71F348ADDA3A9335484A60D7908EBE62 /* PFInstallationConstants.h in Headers */, - D8FAE63EFB668703E06E87D06E27DD10 /* PFInstallationController.h in Headers */, - EDE32F3C5ED3FAD54ADE2A858DEC5B89 /* PFInstallationIdentifierStore.h in Headers */, - 4FEF53FA4202399B466C4267631A2378 /* PFInstallationIdentifierStore_Private.h in Headers */, - F2F202A53F25BCFF106B2F77136BF78C /* PFInstallationPrivate.h in Headers */, - D044D268A07FEADE73CB38752603CB19 /* PFInternalUtils.h in Headers */, - 85131753F499D61CFB65053C9BB9F7C1 /* PFJSONSerialization.h in Headers */, - 994830D607E053C4CC8657055333C126 /* PFKeyValueCache.h in Headers */, - BC0F7D8E0E2AD3BFBEEC7F2B78BC59C6 /* PFKeyValueCache_Private.h in Headers */, - 0DDE88A3EC90392DDB022A0C399AFA04 /* PFKeychainStore.h in Headers */, - 35CA508E579AA77E74159A57D6C5464D /* PFLocationManager.h in Headers */, - AC116C2D91DD098890B38084CBF030EC /* PFLogger.h in Headers */, - 9EE27BE5368FE1C2920DAEC66AFE60E5 /* PFLogging.h in Headers */, - 8113CBFC7712DB6C088AA0E319CD74DE /* PFMacros.h in Headers */, - C9FB222E477526D6DF5C1EF357248970 /* PFMultiProcessFileLock.h in Headers */, - 956D98E26539A6A2F0E81468C820B569 /* PFMultiProcessFileLockController.h in Headers */, - 96DCFE0E10BC455B9673FDA3ADFC08B1 /* PFMulticastDelegate.h in Headers */, - 85996EC1B7350B6DB8689842667A01A6 /* PFMutableACLState.h in Headers */, - 11432DE55D0DE3BAB6D9BB8131CC576E /* PFMutableFileState.h in Headers */, - B8BF169D2C7B9AB5A95C714C2A1E9BB0 /* PFMutableObjectState.h in Headers */, - 7BAFF7E342EDAE7B1819B699CE406D2D /* PFMutablePushState.h in Headers */, - 1E95B670CEC8A958CBE78165F316F11B /* PFMutableQueryState.h in Headers */, - AD7773AD7D0B865CE5E4F516ED163DF2 /* PFMutableRelationState.h in Headers */, - 00EE2DBD1E7F59BFA1AE4F842706417C /* PFMutableUserState.h in Headers */, - 4600B58DFCD0B25BD4CD4945E02859FA /* PFNetworkActivityIndicatorManager.h in Headers */, - E4CA9C37AFA047E32E33ECF5C4184F51 /* PFNetworkCommand.h in Headers */, - 303D18C84C273A053FD1BA34006773BF /* PFNullability.h in Headers */, - 106AC3F7B15127B444B09D4BEC1C8B43 /* PFObject+Subclass.h in Headers */, - 8FA39AC641BAE708A7EE2141F22CD4BD /* PFObject.h in Headers */, - 347C0767BEFFB5F0CE309B5EB138A26F /* PFObjectBatchController.h in Headers */, - 0652F30DD0C4FE6F6F9CEB85F9B8D74E /* PFObjectConstants.h in Headers */, - B03E6AF1E598EC1DCAF4A7DDC0DD5489 /* PFObjectController.h in Headers */, - 976B4AA8300CDE0748E1737C6700E72B /* PFObjectController_Private.h in Headers */, - 1829B47CC2B07BF87040C0A5B17DCEE0 /* PFObjectControlling.h in Headers */, - 8E430CB3375D8ECB766249EA74730DEA /* PFObjectEstimatedData.h in Headers */, - E99450CFF3FF02596EAB7E7D87FEDCA0 /* PFObjectFileCoder.h in Headers */, - C8E14645C3547457621C6DFD0CC514C8 /* PFObjectFileCodingLogic.h in Headers */, - 893CB7651BD45123335D9DFF5FBF2995 /* PFObjectFilePersistenceController.h in Headers */, - D6E73AA34F7F1B47815DC967085A72EF /* PFObjectLocalIdStore.h in Headers */, - A3BD95AA5A59D14116D714D0BF6DE183 /* PFObjectPrivate.h in Headers */, - 1F6218FF21B87CE968615BF666391173 /* PFObjectState.h in Headers */, - 7EBC8051564BAF8D7D3FA8900D846FB2 /* PFObjectState_Private.h in Headers */, - 5B6CA23721DBD9125BA38228F7FD39D1 /* PFObjectSubclassInfo.h in Headers */, - 58B8E1D6990DB1F4816D4F32EE50A8EA /* PFObjectSubclassingController.h in Headers */, - 0C6374E8F087F3F9A7CDFAEB467FAA48 /* PFObjectUtilities.h in Headers */, - B21C1733EC906F80FE9CCD426D9442DC /* PFOfflineObjectController.h in Headers */, - 475F7963B4C61315A7E81764858166A6 /* PFOfflineQueryController.h in Headers */, - 61864772C3678C9ABEDD45DC028B0A16 /* PFOfflineQueryLogic.h in Headers */, - 8925A30FFB9B9FD7A1F77E75DD4BB4FA /* PFOfflineStore.h in Headers */, - AA3628EFC6E58E752EF07B229205B3EB /* PFOperationSet.h in Headers */, - DB47C8872FD56076325D22343CDD7B69 /* PFPaymentTransactionObserver.h in Headers */, - 55E308B2B58B975F0BAA49C27FC58AEC /* PFPaymentTransactionObserver_Private.h in Headers */, - 37C41E1C9ECD2240B829A8DA25B7FA86 /* PFPin.h in Headers */, - A03FD80CF4F2A5BE86D5337AA86EEEAB /* PFPinningEventuallyQueue.h in Headers */, - 13966B03B2D6769C16DD2374B5010932 /* PFPinningObjectStore.h in Headers */, - 6602802B478E4FBB6B7D42CC47DFB9FD /* PFProduct+Private.h in Headers */, - 7C3716AA37A820FD62570BB16F87ECB8 /* PFProduct.h in Headers */, - D9D15D14C4BCF21EEA86D07BF45B88B1 /* PFProductsRequestHandler.h in Headers */, - A37746B83E3B6776A578ACE28933CBD8 /* PFPropertyInfo.h in Headers */, - AC8E81AC6849346D82D690177DCF9150 /* PFPropertyInfo_Private.h in Headers */, - B454B8E5E316FFC8E1D2E1C730967866 /* PFPropertyInfo_Runtime.h in Headers */, - 39805A9A3BF2BC351B5F85500980E16B /* PFPurchase.h in Headers */, - 1B2262EFDAE0F192D7546683867AC14E /* PFPurchaseController.h in Headers */, - FD7B3714953511B022F7BA9A3B788C27 /* PFPush.h in Headers */, - A6C91C7166749D37E01ACCA5C2B74B5A /* PFPushChannelsController.h in Headers */, - 02C4B0A8B51D500CF0359C30EB77A55B /* PFPushController.h in Headers */, - 0F71054017CBECD2BF138C5EFD3ED57E /* PFPushManager.h in Headers */, - 09AE420645EA5821A4EB06CE5B22062D /* PFPushPrivate.h in Headers */, - 63B266F8B6708759E8409E2EDE1E5AEC /* PFPushState.h in Headers */, - C195BEAD62324084932C336CD0F167F4 /* PFPushState_Private.h in Headers */, - CFE19C2B8337074ECB614B8E15535616 /* PFPushUtilities.h in Headers */, - 0CE037AF386585DCEE8513CC3FDB551F /* PFQuery.h in Headers */, - 5EE490DADEA2FE08D4CAFBC21E35821C /* PFQueryController.h in Headers */, - 4BF28D461EB13C411BFD5E5F994CD533 /* PFQueryPrivate.h in Headers */, - 595FE58B33E24654D8C217CD9EB3F225 /* PFQueryState.h in Headers */, - 6B7257CD27F3B6B8D8591FA9BDE24943 /* PFQueryState_Private.h in Headers */, - 3D11FE763F5433C94FD28761CBB85E75 /* PFQueryUtilities.h in Headers */, - BB7BBA7B572300771B0DB9EDFF360F25 /* PFRESTAnalyticsCommand.h in Headers */, - 99E9F4422BD6659050CAD42953A4A7FE /* PFRESTCloudCommand.h in Headers */, - 9B7BB3DBA4067247D4AA58A5C0B52B11 /* PFRESTCommand.h in Headers */, - FC3E62E611240996AA6720A91B4EABB3 /* PFRESTCommand_Private.h in Headers */, - 3C0939EEFBF9C272642218B8BF390AF6 /* PFRESTConfigCommand.h in Headers */, - 4DFF084DEA71D9DBB38CBD17040A9BE6 /* PFRESTFileCommand.h in Headers */, - E7F1325DD18D11574F43630DF215C30C /* PFRESTObjectBatchCommand.h in Headers */, - 1E581CA0DC0AD8F9F538F6FD47B42F92 /* PFRESTObjectCommand.h in Headers */, - EC6531B679723631C5F070DC36B56DE8 /* PFRESTPushCommand.h in Headers */, - C7BEC270DC7D5AA4DD7D8A81575E179F /* PFRESTQueryCommand.h in Headers */, - DD7898873BF904FA0E114437CA1762B3 /* PFRESTSessionCommand.h in Headers */, - CAC625E628AAEF2445AB4B8D62123557 /* PFRESTUserCommand.h in Headers */, - F296EDE13ABDBAD0A6C57038E5891C38 /* PFReachability.h in Headers */, - CF90CCECF348956BB5DD62B17728C38D /* PFRelation.h in Headers */, - 861582A5DECCCCBC09E5D9B966806205 /* PFRelationPrivate.h in Headers */, - FFA925D18B7C5F8BDF61C623CA2E9D73 /* PFRelationState.h in Headers */, - 390C28D5DDFD9DDB5340A0F68CEB8C2E /* PFRelationState_Private.h in Headers */, - 8DB2D81BD3208535DD815967F6C49A4F /* PFRole.h in Headers */, - BCC550CB5440C1D466BB3BC4E78B83E1 /* PFSQLiteDatabase.h in Headers */, - 128270239F0FE9E10D4016298F09179F /* PFSQLiteDatabaseController.h in Headers */, - C35E8AAC7757AF2A72F3F138CF303A5B /* PFSQLiteDatabaseResult.h in Headers */, - 074E069D87C50D72053C5523956F1174 /* PFSQLiteDatabase_Private.h in Headers */, - D923EB05E2C32216B57B27EAB1F4E7E4 /* PFSQLiteStatement.h in Headers */, - FBA278641B85C2C4DFB9D28E978268EB /* PFSession.h in Headers */, - 58E120C5EE7D42D5D881715B390A2CBD /* PFSessionController.h in Headers */, - DB29FAEB95798B3BD6680DD88F69AF85 /* PFSessionUtilities.h in Headers */, - C90B605396530B452AF99A7678EA51B3 /* PFSession_Private.h in Headers */, - 49368492C042539DD291DAC1B71335C6 /* PFSubclassing.h in Headers */, - 42DC601C4CFF768DD66ADB341BC27B01 /* PFTaskQueue.h in Headers */, - CE0621CDDA5B17681FA105A924E561B0 /* PFThreadsafety.h in Headers */, - 95B2EDE938A1CF2D16213FB94E28D45A /* PFURLConstructor.h in Headers */, - 4F8683A479B5509C5B50AD9668CE72C6 /* PFURLSession.h in Headers */, - B4BE97FFB864542992C29041C5185202 /* PFURLSessionCommandRunner.h in Headers */, - DA7C2EEEC87D1F7FE3001B1E0DABFF5C /* PFURLSessionCommandRunner_Private.h in Headers */, - 6D06DC94B5F17AD59B6D8D7125E50C59 /* PFURLSessionDataTaskDelegate.h in Headers */, - 307D7DEC099E8172492DB3B8B843F347 /* PFURLSessionDataTaskDelegate_Private.h in Headers */, - 3A7507E3009ACF762200908D7CA0C0B7 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, - C26697DA5659534927CB60C187CA38B7 /* PFURLSessionJSONDataTaskDelegate.h in Headers */, - EEF00303ACA6F9A8159E892D01C4F702 /* PFURLSessionUploadTaskDelegate.h in Headers */, - A612764E17DB84BC666DE6C36AE5D431 /* PFURLSession_Private.h in Headers */, - B3CF982DD6F4DAAE77CBBBE9B1282C30 /* PFUser.h in Headers */, - BCBBA9D39E73E338C6A6C059CE03DFA7 /* PFUserAuthenticationController.h in Headers */, - 7FE988AA3ECD89B7101E701BB7302E21 /* PFUserAuthenticationDelegate.h in Headers */, - 930B72666B9FEA3D4172BEBB0EA55FF0 /* PFUserConstants.h in Headers */, - 91D0209E7085A403B6EF6BACBACD9D5D /* PFUserController.h in Headers */, - 569380E544C45B1C7B618A7A718A32AD /* PFUserFileCodingLogic.h in Headers */, - ACB9408C6FC53B87208559D1C21EC621 /* PFUserPrivate.h in Headers */, - 71553F54471B3ABC03CF3B999CE5915C /* PFUserState.h in Headers */, - 31750ADF61E36601124AF864C270BC3E /* PFUserState_Private.h in Headers */, - DCD7B3F2B92EB5E095480309F3F6C813 /* PFWeakValue.h in Headers */, - 01C20A13734E154707BCB74AA50AF6FA /* Parse.h in Headers */, - 61031A606EF2C5F521E09B81D4206B0B /* ParseInternal.h in Headers */, - 037922F25BE9EDF80206E267E32963F0 /* ParseManager.h in Headers */, - 635F29ADCD59325D8BA0238349FD779D /* ParseModule.h in Headers */, - 90DF839DD23B48C7F349F4E6C140CC53 /* Parse_Private.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 572F590DCD49A0CE84472F06D77F2403 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 0F666004816BD3E9D47E40000FCE0C87 /* BFCancellationToken.h in Headers */, - 86AB6AEEF3D388454B3C58953671251F /* BFCancellationTokenRegistration.h in Headers */, - 9CB9E73CBDB67F0BB0F98519571E6386 /* BFCancellationTokenSource.h in Headers */, - 42FB395EE90C8D23200DB0C4FECCD171 /* BFDefines.h in Headers */, - 16D3FC7241874C6948D2C9C3211B223B /* BFExecutor.h in Headers */, - 3AA82138BFF90068E1DF5B3C168ABB51 /* BFTask.h in Headers */, - 32D7AF079AE20056F6152EF4D46AECFD /* BFTaskCompletionSource.h in Headers */, - 6D9EB02700C618D8DBF48C2355B3406D /* Bolts.h in Headers */, - 25706CA63FDDB23DA6DBD73940E275FD /* BoltsVersion.h in Headers */, + FF543356567A2076067A44509DE5A382 /* BFTask+Private.h in Headers */, + 3DAE979FD23E68CCEDE5C9990E3AF75C /* PFACL.h in Headers */, + 40FE9D72CA9DA4CA46C68105DC932825 /* PFACLPrivate.h in Headers */, + 8F946B1B0CB71A2E076491477639AE22 /* PFACLState.h in Headers */, + C1F432F11DB9BD57E3362B6957C1EF7C /* PFACLState_Private.h in Headers */, + 569287C78D527E46F67C066FF86DF966 /* PFAlertView.h in Headers */, + E8C1875783064DFD43523A4C35575FA2 /* PFAnalytics.h in Headers */, + 18B2F23AF51EC0206B5D34C2C1CA20AF /* PFAnalyticsController.h in Headers */, + E20B8CE9522CBFCF2037DC756B7AAA26 /* PFAnalyticsUtilities.h in Headers */, + E1393DAFC2E3D6FD28C314E970FB2973 /* PFAnalytics_Private.h in Headers */, + 2D80A28041C979830EC19F3728752554 /* PFAnonymousAuthenticationProvider.h in Headers */, + 7D845F4DE461D22465CD1C2747BEBD06 /* PFAnonymousUtils.h in Headers */, + 04ACE9FD008EAD5D882046A427B6F000 /* PFAnonymousUtils_Private.h in Headers */, + 5C19F0A13BF4CF2730EC0980905D19C5 /* PFApplication.h in Headers */, + DF25C24556E3261B0B580E89B1080CDF /* PFAssert.h in Headers */, + C3C2EA6FFF35A91DC79C6DCC8082FE95 /* PFAsyncTaskQueue.h in Headers */, + CDCD90E74BE99950B279D3B8A47CB748 /* PFBase64Encoder.h in Headers */, + F9AF286C68FB0128D9E7F6BC6B633B21 /* PFBaseState.h in Headers */, + 6E5C3BB91BA09FB4513D0721465C4FFB /* PFCachedQueryController.h in Headers */, + 6A93F8BA7D137B0EDE155E86F464C4C0 /* PFCategoryLoader.h in Headers */, + 756DA89EA9395CB7359CC904E06BAA18 /* PFCloud.h in Headers */, + CD128BF4560D91E52D923A5E0800998D /* PFCloudCodeController.h in Headers */, + 5CED75FE18276FFAA65BA5C3736DBBAD /* PFCommandCache.h in Headers */, + 884AF83BEB07D814F2E85E5DF5D1AC9E /* PFCommandCache_Private.h in Headers */, + 396E7A1AB7916FBCD13664E19DE2BC76 /* PFCommandResult.h in Headers */, + C3534B5AFC24CDF4EEBD2E7455004776 /* PFCommandRunning.h in Headers */, + 9FBE3E9BC1A8E3243D0FEC88022BA5DA /* PFCommandRunningConstants.h in Headers */, + 025EEC0368FDBA71ACFCB68A39C3655D /* PFCommandURLRequestConstructor.h in Headers */, + EA1270889DC45F05BD5349952FEC10DE /* PFConfig.h in Headers */, + C302FB217081A69E712D54BBA15612FA /* PFConfigController.h in Headers */, + FCDD1AECC17F3CDC339C3C5DD388C7F0 /* PFConfig_Private.h in Headers */, + D144A740430A65EA206B949452D309B9 /* PFConstants.h in Headers */, + DA7B999E1677271A6399FA19E28AE870 /* PFCoreDataProvider.h in Headers */, + D7EF8899052A30529A12811A433ABAF7 /* PFCoreManager.h in Headers */, + F97952FC246CFA2BD4D966B5559A56C8 /* PFCurrentConfigController.h in Headers */, + 1EEDD4EA1C24F8C275BF3FDEC4F21220 /* PFCurrentInstallationController.h in Headers */, + 09919F2A8CC0DCFF455F2F7A8B9E5D46 /* PFCurrentObjectControlling.h in Headers */, + C75CBB06C3466C044296CB3A76C39124 /* PFCurrentUserController.h in Headers */, + 8EDDF70EB01189C643A552F542A5955E /* PFDataProvider.h in Headers */, + 5B685F83F56F617391F88FD766346D1A /* PFDateFormatter.h in Headers */, + ACFF1A205850EAA9CE547A839884E5FA /* PFDecoder.h in Headers */, + 6DD3D07AFA4F7CA2CD9C301E85689F27 /* PFDefaultACLController.h in Headers */, + 959FB0E5183326169568C347A926C0B8 /* PFDevice.h in Headers */, + 2B113DEE9FAAA55635324A5175A121C3 /* PFEncoder.h in Headers */, + 33D40C6A5051E866D76B0CCF67CF541C /* PFErrorUtilities.h in Headers */, + 9FE68887DC4906E768DC10E6FEC7BC39 /* PFEventuallyPin.h in Headers */, + 92F016328F4C0F799AD1B4A8E0DDE9A2 /* PFEventuallyQueue.h in Headers */, + 9FF0D77E5D6A8A71D3D00A6CC35E429B /* PFEventuallyQueue_Private.h in Headers */, + 6BFF6EDB4C8C521CD4F3DAA75AC1805A /* PFFieldOperation.h in Headers */, + B7944220338A46BC74DF8E3DB9895901 /* PFFieldOperationDecoder.h in Headers */, + 0886359057F4348C659E5B51CFDFB6EB /* PFFile.h in Headers */, + C9BA3DB96B743CFBE38D620BA1F21753 /* PFFileController.h in Headers */, + D5F1B35353D67059C7894FA00393D39E /* PFFileDataStream.h in Headers */, + CE7E600E6E370B6DEF0116643F7FD8DE /* PFFileManager.h in Headers */, + 03A25737600F83E8C55F2AB9779A8E7C /* PFFileStagingController.h in Headers */, + 443A4588858747A69D9B526ED5778AB0 /* PFFileState.h in Headers */, + 6625ABFFA433446F0AD935A23A5BBA3D /* PFFileState_Private.h in Headers */, + 0FDD8F5E664D0EA41C89347205454FF6 /* PFFile_Private.h in Headers */, + C9D963064AA22F16470F6AF907BAEF1F /* PFGeoPoint.h in Headers */, + DF40D05E8A808693AEAD061BC751E6D3 /* PFGeoPointPrivate.h in Headers */, + 721650D6F618B7A6F1C1ECBB033544BC /* PFHTTPRequest.h in Headers */, + 47DAE36CDA380C8BA9C0A17C781993E7 /* PFHTTPURLRequestConstructor.h in Headers */, + 2F21FA644C383C630A49A59124F4F297 /* PFHash.h in Headers */, + CCFC440E3597BEDAC7796B03DE5A63CF /* PFInstallation.h in Headers */, + 750884DBC2F9D2C41A1C81EAB8E11978 /* PFInstallationConstants.h in Headers */, + F406237401551FF73ED1D6F46B9613FD /* PFInstallationController.h in Headers */, + 686A7F89082DD9140CD3DDC0E6904483 /* PFInstallationIdentifierStore.h in Headers */, + B701C1AB6D06324BC6CC23A5783F75ED /* PFInstallationIdentifierStore_Private.h in Headers */, + ED53A85BF245B2C2031C3ED8ADE3BC69 /* PFInstallationPrivate.h in Headers */, + D7E97759E6C76BA2331C5D8D3A056ACB /* PFInternalUtils.h in Headers */, + E0DF71DB6998FAE77D5C39BEB24AB41B /* PFJSONSerialization.h in Headers */, + 7139362B02E25FDB87C5DE753807A988 /* PFKeyValueCache.h in Headers */, + DFD0235CD7EF6A677A5B0CC1DF6C9462 /* PFKeyValueCache_Private.h in Headers */, + FF6DC72BA5C030A41082FBB3A9214E57 /* PFKeychainStore.h in Headers */, + 316E54BAB18CE88AA1AF6A3FC1C06BCC /* PFLocationManager.h in Headers */, + 1A570F4695129D835CD30EB6BBFF6657 /* PFLogger.h in Headers */, + CF85BDB59935EB93ACFA51C5C530EDC1 /* PFLogging.h in Headers */, + D8FE5C4D33B6D32B89424C8F18E196AB /* PFMacros.h in Headers */, + 0448850F9AC7EAD3AFCF4F76B8E9A0CB /* PFMultiProcessFileLock.h in Headers */, + B2AB6582389389DE491AB68BF28F7737 /* PFMultiProcessFileLockController.h in Headers */, + E662115101B5163A7982610F06468C1B /* PFMulticastDelegate.h in Headers */, + 06198F665E7E5D5095FA80C3DE87FFF0 /* PFMutableACLState.h in Headers */, + 16BEED5DCCB91A2FA43E9F5E656F7F2E /* PFMutableFileState.h in Headers */, + EE20B2B23083B041332BC3C78D75FFCA /* PFMutableObjectState.h in Headers */, + 8C39E16E4A0EDC4C5864392126C2AB38 /* PFMutablePushState.h in Headers */, + 84826CB970129BA778C3A48CCB1B68A3 /* PFMutableQueryState.h in Headers */, + D961D58817C2A1A8B99A49BFAA840CD0 /* PFMutableRelationState.h in Headers */, + 59470446A0F13135B25E820D1B76EE20 /* PFMutableUserState.h in Headers */, + 39BAD8B311E33771256B966A57843B95 /* PFNetworkActivityIndicatorManager.h in Headers */, + 3F52D5FD7AA3B7AFFE181B47D6E7EDC7 /* PFNetworkCommand.h in Headers */, + FFF2129425021FE43AAA3D726791994A /* PFNullability.h in Headers */, + D8D1BDAC175C1556633F19CFD6D07A50 /* PFObject+Subclass.h in Headers */, + EAE0AA415A5361DD0541D5373560E0B4 /* PFObject.h in Headers */, + 0869A1319F02EA8C47B814645AD4AF4F /* PFObjectBatchController.h in Headers */, + CC4D511200D693558A979423DD703DE3 /* PFObjectConstants.h in Headers */, + 20EBA85FEE98957543B214F730AB4A8D /* PFObjectController.h in Headers */, + 9BDD798D159E329F52F7F8515EE88F7C /* PFObjectController_Private.h in Headers */, + 6EBFA4F90244DC3C8A8C531D0616F725 /* PFObjectControlling.h in Headers */, + 43F261FEEA8A1683059CFFE377B80DB3 /* PFObjectEstimatedData.h in Headers */, + 1B9AE1750A101AE8FF9B774B981088B3 /* PFObjectFileCoder.h in Headers */, + D8ADFE9ECE18ADF00E4078785FED3EE2 /* PFObjectFileCodingLogic.h in Headers */, + A283D115AB0163B72CF54838E83208EC /* PFObjectFilePersistenceController.h in Headers */, + 15891E0CDBB02CD8E27F08B0027DE0F3 /* PFObjectLocalIdStore.h in Headers */, + 166A51403710FA4669EFB0EF749BD63F /* PFObjectPrivate.h in Headers */, + B0416CF20216A1C9A598CE958C8B2C47 /* PFObjectState.h in Headers */, + C9A1866D93CA32DE4D93C03F83A9F935 /* PFObjectState_Private.h in Headers */, + F0F3981F5CFA9D5FEE36528C4F57BE46 /* PFObjectSubclassInfo.h in Headers */, + 7667FCD8500AD6A29077C9412887D793 /* PFObjectSubclassingController.h in Headers */, + ADF188B732A69F682114E2047DC0CBBB /* PFObjectUtilities.h in Headers */, + 72EDD8852F2BDAF5CEA81572EF096E58 /* PFOfflineObjectController.h in Headers */, + BFA580E3421FCBDA60EFC80446F5F827 /* PFOfflineQueryController.h in Headers */, + A07615C44B09A564A1D5AA636366CDDD /* PFOfflineQueryLogic.h in Headers */, + 496C5BBF325D1380F718B05EC92EA397 /* PFOfflineStore.h in Headers */, + 46E08CFA7AAF23F9DD6E3CA9BDF1377B /* PFOperationSet.h in Headers */, + 05FB5EA05407A51C90CE53EC75528A35 /* PFPaymentTransactionObserver.h in Headers */, + E927E067F38B0E8A9795FECEA9D9CD97 /* PFPaymentTransactionObserver_Private.h in Headers */, + D0CFD3BCF7854439EBFFA50340677C48 /* PFPin.h in Headers */, + 6DAE8FA462265C812F6E4DF0A55AEF3E /* PFPinningEventuallyQueue.h in Headers */, + 35C36CD9503D9EC4A28209B5E035D087 /* PFPinningObjectStore.h in Headers */, + E98C8B10EF19A9D5799C9CBDBE2C91BA /* PFProduct+Private.h in Headers */, + 69E80DB61969642C17191BC5BBA98A29 /* PFProduct.h in Headers */, + 6D95E647A7F297CD5158021B8FD3ECCE /* PFProductsRequestHandler.h in Headers */, + 3BA271FC19614D18554DCEB45AA7C8B3 /* PFPropertyInfo.h in Headers */, + 6F9126E3FFC98310534685D7A8B31E82 /* PFPropertyInfo_Private.h in Headers */, + 12A8CFFBCED5FBBFE861423D8EEED31A /* PFPropertyInfo_Runtime.h in Headers */, + 5F0405B82B5E4A4E8875AAAD48EAFF78 /* PFPurchase.h in Headers */, + E1A22FDBCBBF2D241041F87458597FC3 /* PFPurchaseController.h in Headers */, + 655081C07BD22C6D7E64FD52025748A0 /* PFPush.h in Headers */, + 5569DBBFB4ABCE878961443B04A8F22F /* PFPushChannelsController.h in Headers */, + F752BA3F9DFCB0CFF12254ED534F812E /* PFPushController.h in Headers */, + 4C3E4F71058661B73B9327E1BBED5B13 /* PFPushManager.h in Headers */, + 81A0777C4DAF87256B60351C9AEBA3E6 /* PFPushPrivate.h in Headers */, + 35416F01689A7DDCE6E0D5668322F1CE /* PFPushState.h in Headers */, + 7802CAB6E61C60D1015477E448730D85 /* PFPushState_Private.h in Headers */, + 7E7DEA7F45E08BD27B568717F16EAF0B /* PFPushUtilities.h in Headers */, + BECF2F58F7E02B74509D304FFE07A644 /* PFQuery.h in Headers */, + 799C410D6861767245C86294947EC504 /* PFQueryController.h in Headers */, + 222B13AB149B127438E6C3A0402F3B9A /* PFQueryPrivate.h in Headers */, + 59834354CB20F36C447DD2955928EDDE /* PFQueryState.h in Headers */, + A3AAF279B04666F0C05D7927CE27A26D /* PFQueryState_Private.h in Headers */, + 26EAB43BBB1FCD57FE349D3E8F930B89 /* PFQueryUtilities.h in Headers */, + 3066F217E0560A5956224017904AC0BA /* PFRESTAnalyticsCommand.h in Headers */, + D441BA266DCA0FE4D2C6A3B18187A67C /* PFRESTCloudCommand.h in Headers */, + 4A28BFE309A0D988EF39EE2EC9510164 /* PFRESTCommand.h in Headers */, + F4922902A8496B92175E98875B1E43EE /* PFRESTCommand_Private.h in Headers */, + 889D5DF1B5D854141AE48D0AE6AD24E8 /* PFRESTConfigCommand.h in Headers */, + B88D88CD06342309AB76482FA60552B5 /* PFRESTFileCommand.h in Headers */, + CCFCBBE62C9D209092C1A6C69BEBD2BB /* PFRESTObjectBatchCommand.h in Headers */, + BEFFE38E1E8C0426757AFD411F4ECC28 /* PFRESTObjectCommand.h in Headers */, + 3E74198746ACFE9E3471838F88A99221 /* PFRESTPushCommand.h in Headers */, + 39CC63B33F77D1681BF28E360F70F51E /* PFRESTQueryCommand.h in Headers */, + A86527EA3EF359DC5B93896035962C45 /* PFRESTSessionCommand.h in Headers */, + 45873E765FB3EAA10D59BFCEDCEC4320 /* PFRESTUserCommand.h in Headers */, + 7AE8BFA590D9C85818D795FAA6A3E120 /* PFReachability.h in Headers */, + E8433C7C8B26411E6E7290E579C83F4E /* PFRelation.h in Headers */, + 520C83141D41FC85B6C1A563CDA10C70 /* PFRelationPrivate.h in Headers */, + B3509517E43EB89AAEE0691907901C01 /* PFRelationState.h in Headers */, + 37F1E816600B8383A177AFA48F9B9551 /* PFRelationState_Private.h in Headers */, + AB06C3BFB45A1282141E1630F26DABCF /* PFRole.h in Headers */, + 8522518AEE7008DCC13F9A88897D023F /* PFSQLiteDatabase.h in Headers */, + A519820C333BF4B2BF7490C991DE1D96 /* PFSQLiteDatabaseController.h in Headers */, + 071BCA62D30752EC13996F5B307BFFEF /* PFSQLiteDatabaseResult.h in Headers */, + C1580926FB1C1390D09A615D658340EF /* PFSQLiteDatabase_Private.h in Headers */, + 4B4AB0A2CF5ECF807CC6D6BE5057AA22 /* PFSQLiteStatement.h in Headers */, + 72013EB65410BE1E5CA73DC32B0DFE11 /* PFSession.h in Headers */, + 885E3EC52D206058C4C8E9FDB31C6EC6 /* PFSessionController.h in Headers */, + 179F8265304E06A1E027D13136B5DECC /* PFSessionUtilities.h in Headers */, + 8A68AFFA32F2BBD210BBD27A1F1A4E63 /* PFSession_Private.h in Headers */, + E51943C1A9FF65B5EE048CBF4F395D9B /* PFSubclassing.h in Headers */, + E925E091713124195ED1CD1EC8573CA9 /* PFTaskQueue.h in Headers */, + 594661284E1136D1D927A831478A58C8 /* PFThreadsafety.h in Headers */, + 8490465F1BE562C84A9C2CF7F2125F13 /* PFURLConstructor.h in Headers */, + 3713BC71FAC8A9D24C899ACE945AEBE1 /* PFURLSession.h in Headers */, + F3EB191FFE3A408094DE22C5702866C7 /* PFURLSessionCommandRunner.h in Headers */, + F900480B0F50E907D9223FB00D113C81 /* PFURLSessionCommandRunner_Private.h in Headers */, + 7745A799CA4ED9892587851FBF71E345 /* PFURLSessionDataTaskDelegate.h in Headers */, + 7D485860692A0F8A7DFA3A8677E6BB1C /* PFURLSessionDataTaskDelegate_Private.h in Headers */, + F8CBAB6E6152105BE58195EABC8F3759 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, + CE5C3235213BC24CD1C18DF4054C62B9 /* PFURLSessionJSONDataTaskDelegate.h in Headers */, + 5374E8CE7E7C39178DE04676172D49A9 /* PFURLSessionUploadTaskDelegate.h in Headers */, + DFC8670E99D9BA07E6F493DA68D12043 /* PFURLSession_Private.h in Headers */, + 7ACEEE6226F28499972A0954D7E62D24 /* PFUser.h in Headers */, + 5E61BAC7772421369DA00363F31DBADE /* PFUserAuthenticationController.h in Headers */, + 2ADCD4987CEC04072FE60FD15CB4058D /* PFUserAuthenticationDelegate.h in Headers */, + 57BDE0042C46044BDA9F9731BE767BF2 /* PFUserConstants.h in Headers */, + 13E3B4D00549AFBC51E6C7305A7EA1DA /* PFUserController.h in Headers */, + E595F2FFEA2AB67264D93F0C8D1C22C3 /* PFUserFileCodingLogic.h in Headers */, + E4A07CA965878A2042A19A9ABE5A1D1C /* PFUserPrivate.h in Headers */, + 659C6F42D23ECCCD7B01C02A20779C9D /* PFUserState.h in Headers */, + 08AAE6FC8BAE4DFF3E2B00BF4957E2BA /* PFUserState_Private.h in Headers */, + 6B4B0E078B36ED6BA341705E30747327 /* PFWeakValue.h in Headers */, + DC4DAB9ECA41D83DC8DC29AFE6BC73B9 /* Parse.h in Headers */, + 6B8677DEC15D1D29722EFE9C0B6BF6E4 /* ParseInternal.h in Headers */, + 3503373C9952DD9070E7ECAE238838F3 /* ParseManager.h in Headers */, + 98F6FA069E3C79D86CEF1EEB5EDE283C /* ParseModule.h in Headers */, + 12CC1275B7906C440CAA09E6CD435DE2 /* Parse_Private.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1786,78 +1770,94 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + B1F5A4CD3EAA8902053406FEEF8F6B8A /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D4D4DAA939A8A78C5FA6D96B5F7D72E9 /* BFCancellationToken.h in Headers */, + 76B0379D807CF3B4B2097F46DD7F3865 /* BFCancellationTokenRegistration.h in Headers */, + 18EB839151EC2E5154EDD4CC83812E8B /* BFCancellationTokenSource.h in Headers */, + 29A5A8506AEFAC779C7872279E0978A0 /* BFDefines.h in Headers */, + A55836CDA983C1E665B1C57D7B7B71F9 /* BFExecutor.h in Headers */, + 1595244FE466EB44C6AEBBEA61B358BF /* BFTask.h in Headers */, + 5311B039E395DC406C7B4A16B4F20D57 /* BFTaskCompletionSource.h in Headers */, + 72C1E0F7FD22531F9422D5E312D251D0 /* Bolts.h in Headers */, + 50605C083705C4639C1DF50DCA513783 /* BoltsVersion.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 3094A346FA0BA2A7016A256FB910F479 /* Bolts */ = { + 47C800E42623009B7192B025B3DD25A1 /* pop */ = { isa = PBXNativeTarget; - buildConfigurationList = 59EACD0D7A24F90BA574CE0F659DE30D /* Build configuration list for PBXNativeTarget "Bolts" */; + buildConfigurationList = 62C75DE36F62F6DD244D1001268287F5 /* Build configuration list for PBXNativeTarget "pop" */; buildPhases = ( - 6816814F8FA59B67B6310DF761B95483 /* Sources */, - B4E7CC86B3732BF1BCC75FF7D4C6DB92 /* Frameworks */, - 572F590DCD49A0CE84472F06D77F2403 /* Headers */, + 0EA1208F3B72AAF8A7683795C5C61072 /* Sources */, + 8C45497CBD83A66C8FBF1289DF39CE3D /* Frameworks */, + 725D774220C4DF53E7316E8623730814 /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = Bolts; - productName = Bolts; - productReference = D1027683C24BF81936188B3CFC423274 /* libBolts.a */; + name = pop; + productName = pop; + productReference = A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */; productType = "com.apple.product-type.library.static"; }; - 47C800E42623009B7192B025B3DD25A1 /* pop */ = { + D219004FB928DD852E3C33624E58623C /* Pods */ = { isa = PBXNativeTarget; - buildConfigurationList = 62C75DE36F62F6DD244D1001268287F5 /* Build configuration list for PBXNativeTarget "pop" */; + buildConfigurationList = 762EB94DC5F957130C5BF308781008D2 /* Build configuration list for PBXNativeTarget "Pods" */; buildPhases = ( - 0EA1208F3B72AAF8A7683795C5C61072 /* Sources */, - 8C45497CBD83A66C8FBF1289DF39CE3D /* Frameworks */, - 725D774220C4DF53E7316E8623730814 /* Headers */, + 2E41E4119C3007C0FE602FC981DC4F68 /* Sources */, + 308CA5637F79668BCF7E6F999A59A50A /* Frameworks */, ); buildRules = ( ); dependencies = ( + C972B13B9130AEBC11060F7C2E61D8C7 /* PBXTargetDependency */, + 9B10575164CA1EFA8980256F26C95A06 /* PBXTargetDependency */, + 9408F168225A9295B417D7D9B496AE91 /* PBXTargetDependency */, ); - name = pop; - productName = pop; - productReference = A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */; + name = Pods; + productName = Pods; + productReference = F81BCD1B1E1DFA056533AFD9F925EA0C /* libPods.a */; productType = "com.apple.product-type.library.static"; }; - 6B21C5373E714B4D9498D17EE535A4D6 /* Parse */ = { + E1F0B29D8C274D3B4A2566B0DFA6A902 /* Bolts */ = { isa = PBXNativeTarget; - buildConfigurationList = 6E3F830824B8ABA99F201389718A5F33 /* Build configuration list for PBXNativeTarget "Parse" */; + buildConfigurationList = 737FE33D90851DA7D993D824EDBC7B82 /* Build configuration list for PBXNativeTarget "Bolts" */; buildPhases = ( - 84F8FDF2464BD2599AA62180586AF817 /* Sources */, - FD255F136A4B715136E15DABA3D815B5 /* Frameworks */, - 509E8AF80F557271E1098064FB89924E /* Headers */, + BCC095C76C87025BD855EC569A96E04F /* Sources */, + BB7D88E900A22E45E6C2784D10858E80 /* Frameworks */, + B1F5A4CD3EAA8902053406FEEF8F6B8A /* Headers */, ); buildRules = ( ); dependencies = ( - 2F8CA3FF9C1472ABEE78882ACBE29841 /* PBXTargetDependency */, ); - name = Parse; - productName = Parse; - productReference = 478C891A77C52ACD2EE9267253F46B18 /* libParse.a */; + name = Bolts; + productName = Bolts; + productReference = 9C22BE2BFE0552D4CF4E6F400DCBF925 /* libBolts.a */; productType = "com.apple.product-type.library.static"; }; - D219004FB928DD852E3C33624E58623C /* Pods */ = { + E2B6A7F9ABCCE48BC851C4EAE332D8FB /* Parse */ = { isa = PBXNativeTarget; - buildConfigurationList = 762EB94DC5F957130C5BF308781008D2 /* Build configuration list for PBXNativeTarget "Pods" */; + buildConfigurationList = 657E892C5C0C753EEFCFD7C80D8FB5BA /* Build configuration list for PBXNativeTarget "Parse" */; buildPhases = ( - 2E41E4119C3007C0FE602FC981DC4F68 /* Sources */, - 308CA5637F79668BCF7E6F999A59A50A /* Frameworks */, + 4EA5CD4A82FB587802E1A0F523C575A2 /* Sources */, + 731E687FCFFA7ECF41C73A5082D0B09F /* Frameworks */, + 2ED471274550E62AFAA4EF426E74A34D /* Headers */, ); buildRules = ( ); dependencies = ( - 2339569B36070B99A0021EFCDEFF8594 /* PBXTargetDependency */, - 0DA6F4834F7CDB933F01A3AF8EF1F5C6 /* PBXTargetDependency */, - E2B4D845E65AC45A122792D7BF0AA724 /* PBXTargetDependency */, + 3C7A257897C0B9619DF09701A8BFF0C9 /* PBXTargetDependency */, ); - name = Pods; - productName = Pods; - productReference = F81BCD1B1E1DFA056533AFD9F925EA0C /* libPods.a */; + name = Parse; + productName = Parse; + productReference = A88229973FC49C97305F3F69622999F1 /* libParse.a */; productType = "com.apple.product-type.library.static"; }; /* End PBXNativeTarget section */ @@ -1881,8 +1881,8 @@ projectDirPath = ""; projectRoot = ""; targets = ( - 3094A346FA0BA2A7016A256FB910F479 /* Bolts */, - 6B21C5373E714B4D9498D17EE535A4D6 /* Parse */, + E1F0B29D8C274D3B4A2566B0DFA6A902 /* Bolts */, + E2B6A7F9ABCCE48BC851C4EAE332D8FB /* Parse */, D219004FB928DD852E3C33624E58623C /* Pods */, 47C800E42623009B7192B025B3DD25A1 /* pop */, ); @@ -1924,238 +1924,238 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 6816814F8FA59B67B6310DF761B95483 /* Sources */ = { + 4EA5CD4A82FB587802E1A0F523C575A2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 925B22ED8DEB4DA9ACC946D2F9057997 /* BFCancellationToken.m in Sources */, - 7B00A9814CF626F0D53212A4918637CB /* BFCancellationTokenRegistration.m in Sources */, - C5750E2AEE5F999C2FEA63E5A6071552 /* BFCancellationTokenSource.m in Sources */, - EFA2B49A8A6A4CC569BABF1A704B24CD /* BFExecutor.m in Sources */, - 7D39BBF1D1FD51363802C929BB8C6515 /* BFTask.m in Sources */, - 073E677444C5A0E6864B45279F172EA7 /* BFTaskCompletionSource.m in Sources */, - 146C2DC0D3347B3616475EC3FACC440A /* Bolts-dummy.m in Sources */, - C06E01391A45E76121806BFE18C36C40 /* Bolts.m in Sources */, + 40931C180200922A9FA22B2987A25CA2 /* BFTask+Private.m in Sources */, + 6A533C5F4EC965A14EF04454F44BFF8F /* PFACL.m in Sources */, + 2BBC1EDE95D8FE18729151D68C31A20A /* PFACLState.m in Sources */, + 3A3493E61B348824D84A23B067E06AA8 /* PFAlertView.m in Sources */, + E665D2FFA8C5E2DF0CF41646F343BF20 /* PFAnalytics.m in Sources */, + 69154DBCC2477D0C7A4F745CA0DADE93 /* PFAnalyticsController.m in Sources */, + 2706615ED7F95EB8B15127341388A254 /* PFAnalyticsUtilities.m in Sources */, + ED7A547801E2CF226D168EE9581DB321 /* PFAnonymousAuthenticationProvider.m in Sources */, + 44F6BF9666346E13D5C6FBD2E3F1F026 /* PFAnonymousUtils.m in Sources */, + 918B88539BDE8BCE275FBABA8A963FBE /* PFApplication.m in Sources */, + CC8E8A57D3BBFA56A0E43A0E575B3953 /* PFAsyncTaskQueue.m in Sources */, + D3AEE7BFCB370739A7466335493CBC36 /* PFBase64Encoder.m in Sources */, + 23397013BE39F0E00040409845815FB6 /* PFBaseState.m in Sources */, + 40DDD41E4C564B7D3C9E0099BB6B9410 /* PFCachedQueryController.m in Sources */, + D79AA81B759F1A80248C34F631B03EFF /* PFCategoryLoader.m in Sources */, + 107544526752B586BB04FF44D35C5102 /* PFCloud.m in Sources */, + DEBB00005BF92FA417EA2EB71432F063 /* PFCloudCodeController.m in Sources */, + B1192665DC9C93F109D3D4A7C5F83F43 /* PFCommandCache.m in Sources */, + 3A8A15B0446E07D02673B6C26D33D1F1 /* PFCommandResult.m in Sources */, + 69AAC2D0D00269D9768C8D7F8682F0E5 /* PFCommandRunning.m in Sources */, + A0827A0C141A76B1517B3EE4198B0DF1 /* PFCommandRunningConstants.m in Sources */, + 687532EAB67048417C42A2035ABC94C5 /* PFCommandURLRequestConstructor.m in Sources */, + FB7AC681EC198DEB192BC63B632C175A /* PFConfig.m in Sources */, + 118377BB16D5D852E20EFBF6CB987907 /* PFConfigController.m in Sources */, + B7AFE53318A19D6842F21C10377FF268 /* PFConstants.m in Sources */, + 5D791BF555DC7EB786672923861195D2 /* PFCoreManager.m in Sources */, + 72E104B003B673F8875E48CD3A237C23 /* PFCurrentConfigController.m in Sources */, + 94C30DE66C124BFE8505467FB41BBEBD /* PFCurrentInstallationController.m in Sources */, + FF964C55BB9F3A9A6B4DAD0FBC56AACA /* PFCurrentUserController.m in Sources */, + E5914E5A4EB68DFFFE65AB01ED44B155 /* PFDateFormatter.m in Sources */, + DB68821A5DA330EC6DB71D568020FC26 /* PFDecoder.m in Sources */, + 0457F8E0768F1EA24F6BBF399A2575A9 /* PFDefaultACLController.m in Sources */, + E9F5FCFDDFC1197D97AD06C4C14BA2E4 /* PFDevice.m in Sources */, + 4A81A9C50FCE3083B83AB000B52A4C4B /* PFEncoder.m in Sources */, + 61432F6CE266B1C52A7F75C11A36DE54 /* PFErrorUtilities.m in Sources */, + 16000B68D460BA81C95837AD36045066 /* PFEventuallyPin.m in Sources */, + 0B846D612D91734A3934991CE63FC72D /* PFEventuallyQueue.m in Sources */, + D8572431C5A5A56F48C334D79A6336AE /* PFFieldOperation.m in Sources */, + 8F1E1935F365BC4F1F4235594B8E2EF4 /* PFFieldOperationDecoder.m in Sources */, + 329D4CC19C753FF40AFBD505075E71DE /* PFFile.m in Sources */, + 1CD0B28DDD42993BAFEC02CC2FFBBE0C /* PFFileController.m in Sources */, + D962D24A9373D05F95BA2407DE1A9A0C /* PFFileDataStream.m in Sources */, + 543A2634117075614FDC4858F28CE298 /* PFFileManager.m in Sources */, + 56D20A2BFB5FC35FAC94E73E472FD291 /* PFFileStagingController.m in Sources */, + 1C1E96A7BBF8E7F8D79356191F174ED5 /* PFFileState.m in Sources */, + 40BE6157F49EB2FAF540BF98C3446787 /* PFGeoPoint.m in Sources */, + 763613884EE6DB9A9FA19FDA216D2557 /* PFHTTPURLRequestConstructor.m in Sources */, + 1D5D77684A5F13E35BB4BA7BC6A40E7C /* PFHash.m in Sources */, + AA25A8F11F6A8404563A6472F80AE790 /* PFInstallation.m in Sources */, + AAB1AECCF78B4BDEF517BCCD31BE4737 /* PFInstallationConstants.m in Sources */, + 63E39227EDD9668A6E8BC71B368A468A /* PFInstallationController.m in Sources */, + FC64B5EF6BA6F7E5F55223FB81992454 /* PFInstallationIdentifierStore.m in Sources */, + 9A386672D6BC9A0FEBF694BDDF02F83C /* PFInternalUtils.m in Sources */, + 45748239D7FD943D62792FAD588CDFA1 /* PFJSONSerialization.m in Sources */, + 99839220426BCEDC551D14D33E965F73 /* PFKeyValueCache.m in Sources */, + 2474618B1A731CCC67E7E9E8E967BD07 /* PFKeychainStore.m in Sources */, + F6D940BA794B0671DA54F656020B4724 /* PFLocationManager.m in Sources */, + 7708D5EBFAEEC08D4A1484B5E19F1EC4 /* PFLogger.m in Sources */, + CB2EF43804B9C179A60AF500104E4DE4 /* PFMultiProcessFileLock.m in Sources */, + 9B996D4F00B2755BC7E39E84301B792D /* PFMultiProcessFileLockController.m in Sources */, + D6A3E5E2F6450BBD8E30C39855291F74 /* PFMulticastDelegate.m in Sources */, + F1893CC2C1C931703396D917026576E8 /* PFMutableACLState.m in Sources */, + 8D8D0D14DDE055C1F9A3B7AD5C30513C /* PFMutableFileState.m in Sources */, + 68D20B8A77AD61D8796513B9176D3290 /* PFMutableObjectState.m in Sources */, + 386430CD6BC461BEED2316A11FC8FE48 /* PFMutablePushState.m in Sources */, + F67601BBBF33AFD98C62783D944447E7 /* PFMutableQueryState.m in Sources */, + C2D3FCAD9F82B00F0682B77F42C345B7 /* PFMutableRelationState.m in Sources */, + 4F5DB886DFF123A9B153B4B09E6AE057 /* PFMutableUserState.m in Sources */, + FF8769831CEEAC994C0278991436D422 /* PFNetworkActivityIndicatorManager.m in Sources */, + 3E37D17B235B28EE15722A4EC6292082 /* PFObject.m in Sources */, + 4F6006F15CF4E92C3FABBB82AA76FECD /* PFObjectBatchController.m in Sources */, + 319B8E861E6F24AE259C346D7B14D5E4 /* PFObjectConstants.m in Sources */, + B47547A8DD4DBA73A1AE3C19B48D65FB /* PFObjectController.m in Sources */, + 7E1562F052AEDE34309BF03D4C00C34C /* PFObjectEstimatedData.m in Sources */, + D2DC5F2DF23C18B8D3E71721F1CF8C54 /* PFObjectFileCoder.m in Sources */, + 27CFA5673C9671412C57A625FCB0CBFD /* PFObjectFileCodingLogic.m in Sources */, + 3A7FA4B7E74C5E26CDE357F96FC98103 /* PFObjectFilePersistenceController.m in Sources */, + FB133DC3F020B283A9C68C69221C4554 /* PFObjectLocalIdStore.m in Sources */, + AE6D8714C88E965694D9862943ED9C03 /* PFObjectState.m in Sources */, + 430889BECFF5F51BE84FC1D36982B334 /* PFObjectSubclassInfo.m in Sources */, + 843A8657E58A5C6CF6439EDDFC6792C8 /* PFObjectSubclassingController.m in Sources */, + 8E0F15A272B998241EB984429079E746 /* PFObjectUtilities.m in Sources */, + C42E6522EF606545E8A2FAC0B86FA953 /* PFOfflineObjectController.m in Sources */, + B6B00390A7F7EC4B3604C04E0C98F498 /* PFOfflineQueryController.m in Sources */, + D818EB5E41E22563226772A8E632B3DF /* PFOfflineQueryLogic.m in Sources */, + 7A645555139B041ED6863030E619072B /* PFOfflineStore.m in Sources */, + 621279BB6006488862FBED865442AD17 /* PFOperationSet.m in Sources */, + 019F0B043AC4620E8D1ED11D6D250BAE /* PFPaymentTransactionObserver.m in Sources */, + EDFEBA20ACE8D9590AAE42ECCDC1E07C /* PFPin.m in Sources */, + 6398F44FC456E6FCA1592AD36FCDF9D4 /* PFPinningEventuallyQueue.m in Sources */, + BA79DCD39D35E2EAAAF31A25A096902F /* PFPinningObjectStore.m in Sources */, + CA6F32BF249CC4F676BA2B2E1F0B2187 /* PFProduct.m in Sources */, + 3CF4F8B20D4E0A674526ABC8D4FBCA50 /* PFProductsRequestHandler.m in Sources */, + 78C6EFE00AD49FD7773149CC43D5724A /* PFPropertyInfo.m in Sources */, + BD5FF8B5573BE7C19EA98B24C8F93F36 /* PFPropertyInfo_Runtime.m in Sources */, + 76917A212479DD1B43BF4D57305AB31D /* PFPurchase.m in Sources */, + 469CD764E4D9746AB3FE052DFC905A38 /* PFPurchaseController.m in Sources */, + 2E47D04C4E99302A4E0D5BCB44A7DA35 /* PFPush.m in Sources */, + C66CF47F117BB663AB5B1ADA991B0873 /* PFPushChannelsController.m in Sources */, + 6F6F629E71E042C4CBD0BEF41B092779 /* PFPushController.m in Sources */, + 3A4BDE3681900808879A0C40B8E2F1F1 /* PFPushManager.m in Sources */, + E644B27DC71808C09CE53B8E0F3664E2 /* PFPushState.m in Sources */, + E51AFF71C5470CEAB47D6B501FA5C00E /* PFPushUtilities.m in Sources */, + 0AD21100FCF0450862222785E05331C8 /* PFQuery.m in Sources */, + A57EE3F25E0818AE1A729712F7031779 /* PFQueryController.m in Sources */, + 7B42E1FCBFAF2E2E556BFBFB10A70A87 /* PFQueryState.m in Sources */, + E620DDB4910DB912EB504ED542FEB907 /* PFQueryUtilities.m in Sources */, + 1EA0550E7CBF55104A94BEB8BF651CE1 /* PFRESTAnalyticsCommand.m in Sources */, + 337CEF0FD2D5C1BB6678DD707EA56DA6 /* PFRESTCloudCommand.m in Sources */, + B43DAD49C7DB952A1671EEF20BD1727A /* PFRESTCommand.m in Sources */, + D458C6C955A5A584E1EE2532E6B6B9D9 /* PFRESTConfigCommand.m in Sources */, + EFF59F0F5823C5E0AF46C1B33EEDFB7B /* PFRESTFileCommand.m in Sources */, + 642D57D3B89C7A445FF70615D32FF5F8 /* PFRESTObjectBatchCommand.m in Sources */, + CADB1639CC60E0010303A74644A2603B /* PFRESTObjectCommand.m in Sources */, + C4D1E4A8DF86647F268B2B3B5099E112 /* PFRESTPushCommand.m in Sources */, + 6B36C3C0CC3704D7094501B152180465 /* PFRESTQueryCommand.m in Sources */, + 07BF9641830B6995B62971E3D7D08125 /* PFRESTSessionCommand.m in Sources */, + ED3221AC0471FA6C715B09F71EF806A0 /* PFRESTUserCommand.m in Sources */, + AAF0E5F5CB4203D4E7CE26E4C0BC3BC1 /* PFReachability.m in Sources */, + A8E9F368C383FD058B852D43922CF0F7 /* PFRelation.m in Sources */, + 12F6909B52C61D7E799B5B309749B735 /* PFRelationState.m in Sources */, + 26E76884A04FD6D5A7F3CD5DDB1755D0 /* PFRole.m in Sources */, + 1DA51F2E2858C95CE8D940AFDA4F7463 /* PFSQLiteDatabase.m in Sources */, + A7596C495E396AA4ADAFEDD15E895C54 /* PFSQLiteDatabaseController.m in Sources */, + 0BEC8B0B2E2717328E0F93CF88DDA5FF /* PFSQLiteDatabaseResult.m in Sources */, + 2D298D017CBD10AA0EA097AAF97DCBBB /* PFSQLiteStatement.m in Sources */, + 3599E28E04EAB539A5FD9D834DC5A75C /* PFSession.m in Sources */, + F178A1C8334EE76BE6CE0AF09483BECA /* PFSessionController.m in Sources */, + A1F6D97FD7A81F664C8F963087074FE3 /* PFSessionUtilities.m in Sources */, + 8A84163B84117C1B37D4A421EE6A8943 /* PFTaskQueue.m in Sources */, + BE1697124F67485E93A628B7F078B922 /* PFThreadsafety.m in Sources */, + 6E51AD72EEA9BB0640F71452899AE452 /* PFURLConstructor.m in Sources */, + 884628EDE5DAD0644DCE27A067163F03 /* PFURLSession.m in Sources */, + D49D69813605DD09C1F06A6489EAD663 /* PFURLSessionCommandRunner.m in Sources */, + 6920CB7ED6DC80E0D75D9F2FF4A32886 /* PFURLSessionDataTaskDelegate.m in Sources */, + 8D3EF8A73C774CBEC3A40FEBFAA6731B /* PFURLSessionFileDownloadTaskDelegate.m in Sources */, + E51AF1267A478883DFA384597EDDB15A /* PFURLSessionJSONDataTaskDelegate.m in Sources */, + F39072DEE0911AC516A6A0E2312E43FF /* PFURLSessionUploadTaskDelegate.m in Sources */, + DCE8E177A147347F73E86C4065D60299 /* PFUser.m in Sources */, + 35F26A4BE5FEFECFAA3193997D497ED8 /* PFUserAuthenticationController.m in Sources */, + B586166AE0F8830D3720E2A1349D21FC /* PFUserConstants.m in Sources */, + 9726AABD59B5FC7DFE5B754FBD4CCCE1 /* PFUserController.m in Sources */, + 3470652D4A3D8DF6369A8C303B7C433F /* PFUserFileCodingLogic.m in Sources */, + 8B8C2F0BB0FBC8744B2B789306086224 /* PFUserState.m in Sources */, + 6DBBFD7DD52BE4CDC38C8A5FB05F342E /* PFWeakValue.m in Sources */, + 7B2ACE85B665E6234E698BF5BFFC05DF /* Parse-dummy.m in Sources */, + 2E5CFA31157D42A4D6D2D5E58E0C6679 /* Parse.m in Sources */, + 2E3617FD5EAF3820AC2BE01858D14B55 /* ParseManager.m in Sources */, + 61ED0A41D76F0726400142A59D904E8D /* ParseModule.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 84F8FDF2464BD2599AA62180586AF817 /* Sources */ = { + BCC095C76C87025BD855EC569A96E04F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F16F2BD2412E71A0F0800BA0143A10C8 /* BFTask+Private.m in Sources */, - 5968EC5B21D336B66F3A27966F5F9D1A /* PFACL.m in Sources */, - 9B57BAF0B1A27BAEB40E6E17CA6355AB /* PFACLState.m in Sources */, - B31A69D71BE4A4F9C56CE52F2597B0B4 /* PFAlertView.m in Sources */, - E23CC6BD6AE207AD1C89F018982D1BEB /* PFAnalytics.m in Sources */, - 0B6ADB9B0F9070AA026BD69D2DBB3897 /* PFAnalyticsController.m in Sources */, - BEE7655DFBBC1AB9D4F484DDD2BC7347 /* PFAnalyticsUtilities.m in Sources */, - 439341734A48F1416D32E028917737A8 /* PFAnonymousAuthenticationProvider.m in Sources */, - 5D1AA90E597CD5C17D453D1E3C39BFD5 /* PFAnonymousUtils.m in Sources */, - 1833BA11A3F8B321D710AAA35A810D7D /* PFApplication.m in Sources */, - 9EFED924B760485386CCF5EB3BA87A63 /* PFAsyncTaskQueue.m in Sources */, - 6A1C6A825690B1907AE9796BE195E449 /* PFBase64Encoder.m in Sources */, - 77E89B2E0FF110D13685EF42B8AFFDDD /* PFBaseState.m in Sources */, - 523D293ECDD5E0641F0FC2A7F3520325 /* PFCachedQueryController.m in Sources */, - 7B3342EC54DBD89E80E6F767C016E0CA /* PFCategoryLoader.m in Sources */, - 44F7262AB6C8008A410A14E65A3838E8 /* PFCloud.m in Sources */, - 514CBE462E226552AE0071539F471C25 /* PFCloudCodeController.m in Sources */, - AB7CCA495BB2E31A67FBD113F45DF3A3 /* PFCommandCache.m in Sources */, - 50421F3920DB209CE4F4DE80A20C4FE1 /* PFCommandResult.m in Sources */, - 7E098727FB711EB6459D6FED443F53D5 /* PFCommandRunning.m in Sources */, - 3EE64147BDE55FEE67FF5E18995948CA /* PFCommandRunningConstants.m in Sources */, - 5028171FC9AF8B50968A95E11969D57E /* PFCommandURLRequestConstructor.m in Sources */, - 4603A217FF729DCD6DEA7AFB1FAB60E2 /* PFConfig.m in Sources */, - 63743E46FD2F8750E432BB83F546C054 /* PFConfigController.m in Sources */, - 3D83AE96FEF1D9DC83B211099BADCD42 /* PFConstants.m in Sources */, - 6D04FB4F8DD219426617F3AF0D840358 /* PFCoreManager.m in Sources */, - 3B2D709EB0DA90F1A0A645FDA783B79E /* PFCurrentConfigController.m in Sources */, - 0F6B98F865122CB525B9C6C262681217 /* PFCurrentInstallationController.m in Sources */, - 103A9E462566D7CB14E191DFE9D1C475 /* PFCurrentUserController.m in Sources */, - BB960D63E0B0D184BA67F74168A5038B /* PFDateFormatter.m in Sources */, - B488F531B26E7BE8EB16185D9B3D33CB /* PFDecoder.m in Sources */, - 792E4D8A30E2483D3D4E4154EEDA8636 /* PFDefaultACLController.m in Sources */, - 5390B6329EF5D9F0B82C429D8B1EA584 /* PFDevice.m in Sources */, - 1A77D51093B72D6AA09D9EB6C3C74F7F /* PFEncoder.m in Sources */, - 015FCB9B8DD7DC9A0488893D1B4E0015 /* PFErrorUtilities.m in Sources */, - 2317FF254CCFEF175822B7FD4CEDF7E1 /* PFEventuallyPin.m in Sources */, - A3534AED1EA0F6B4AF89B407FF2CCADE /* PFEventuallyQueue.m in Sources */, - 8E33299A86FF84E02098DA642AD6A10E /* PFFieldOperation.m in Sources */, - A23412D088BB709BA230993F0381C88C /* PFFieldOperationDecoder.m in Sources */, - 286C67C403A641645B5702A201BE0D77 /* PFFile.m in Sources */, - C84077A6ADD4188E00247A89489A5E5E /* PFFileController.m in Sources */, - 706A7F05867293F78C927FDF9C10E745 /* PFFileDataStream.m in Sources */, - ABA34CFCB348BB50E6661E3CCF434B1A /* PFFileManager.m in Sources */, - 0ADB28D8BBCF730DB3712BA235178983 /* PFFileStagingController.m in Sources */, - E7E6855E0A73652B303B572355D3AAEE /* PFFileState.m in Sources */, - F0C51D05571753A00CC8F350E7A39DDD /* PFGeoPoint.m in Sources */, - 01BEF3D787B13B3B2B56DDBCA08A0FAB /* PFHTTPURLRequestConstructor.m in Sources */, - 5E09B9BE3904EEA4708C2B696573E6F7 /* PFHash.m in Sources */, - B0BEB23FC1059482B01E0D220D6DA2B5 /* PFInstallation.m in Sources */, - F4E711DBBE33C63D91C5EB82D7559094 /* PFInstallationConstants.m in Sources */, - 6D56120FE9DC80605D0B11E028828E9A /* PFInstallationController.m in Sources */, - A7E2FFC1434BBFE824CE9EE09E6E2E1A /* PFInstallationIdentifierStore.m in Sources */, - ABB935DE5A114F1A4B541F17F2FA03A9 /* PFInternalUtils.m in Sources */, - 4C16A85DDD642113F35D0FBE466CC05D /* PFJSONSerialization.m in Sources */, - 7E9DA08882BFE2697F1C0E493DB63AC3 /* PFKeyValueCache.m in Sources */, - 5A1596920E1BBB2807BC094A7CFE4F6F /* PFKeychainStore.m in Sources */, - ECB81FD33F70B06684E4A50AB3F75976 /* PFLocationManager.m in Sources */, - E0822053495861CD160B22D518AA2282 /* PFLogger.m in Sources */, - 0BFCC38A10528D04D36495CB3A6255AB /* PFMultiProcessFileLock.m in Sources */, - 2A069E26EA47349AD78257CF3FD49650 /* PFMultiProcessFileLockController.m in Sources */, - 108491A1ADCD0F822D90DF4352AF93CF /* PFMulticastDelegate.m in Sources */, - 04095EC3D989BCA8B01629786D94BA53 /* PFMutableACLState.m in Sources */, - 7A19C849063F55F3F2897A6FA6040B00 /* PFMutableFileState.m in Sources */, - FACAABA588E76C9C2DD2AB634B0E9069 /* PFMutableObjectState.m in Sources */, - 88664732055B4AEB8258A9F776478825 /* PFMutablePushState.m in Sources */, - F97EA210A1C7E07EE9CB9501FCC444F8 /* PFMutableQueryState.m in Sources */, - 9D2280F3879F335F53726BAF1720A4F4 /* PFMutableRelationState.m in Sources */, - 29482C3313003A053F10A25BE5F80032 /* PFMutableUserState.m in Sources */, - DB11B9F73D9B0D3F02327B6CDE23A9AF /* PFNetworkActivityIndicatorManager.m in Sources */, - E896679BD643C694FAC4B7C1A5B43871 /* PFObject.m in Sources */, - 3DF9C26FB433C59C8D512FCE0C89BDF4 /* PFObjectBatchController.m in Sources */, - 0FAC72D8A00C1375FA0B2B71DA84E611 /* PFObjectConstants.m in Sources */, - 79D6635C152CD06216FD5C6439F3CFE2 /* PFObjectController.m in Sources */, - 8EF3091ED56E21658415F17799557ED4 /* PFObjectEstimatedData.m in Sources */, - 455345B64E2D163C4C7F33A5177BB9E2 /* PFObjectFileCoder.m in Sources */, - 4159DD3856C1195D30F92647848F82C2 /* PFObjectFileCodingLogic.m in Sources */, - 0B364D53F85A0FE8D3BF8829A280D22B /* PFObjectFilePersistenceController.m in Sources */, - 5878E73A35257C993AA48202DC4AEDEA /* PFObjectLocalIdStore.m in Sources */, - 3DEA9BC8FEFB0F3EDA1021F97034E551 /* PFObjectState.m in Sources */, - EBD4BC102DFB46F91C3141667D6C361D /* PFObjectSubclassInfo.m in Sources */, - CF5B8E8AF1255B0F020DD1C5143FCE22 /* PFObjectSubclassingController.m in Sources */, - 143BEC7D21D8844811A803F54131A9F0 /* PFObjectUtilities.m in Sources */, - 09E322410AA4B979A689B8FBC73E0F83 /* PFOfflineObjectController.m in Sources */, - 4BFF96298060C7DCE7D155E9DF5AE15F /* PFOfflineQueryController.m in Sources */, - 7BB08B1B05AD918C30AE988E95A09D50 /* PFOfflineQueryLogic.m in Sources */, - 88379476F82457BD1128F25055903097 /* PFOfflineStore.m in Sources */, - A1BA70FD107E98C3493B500B423C42E8 /* PFOperationSet.m in Sources */, - 73BDD98109DBD5F8CB2BC86755DA6963 /* PFPaymentTransactionObserver.m in Sources */, - 005695268BED154E9042211E12310C74 /* PFPin.m in Sources */, - F0B30B2AC9671AA2F42D8919B8D3C642 /* PFPinningEventuallyQueue.m in Sources */, - FDFF36E4566B4F31B50CC82D7987A738 /* PFPinningObjectStore.m in Sources */, - D7D4F9F182AC20F7C3BBA3592DA8404E /* PFProduct.m in Sources */, - E991C7550D546C3319735688EC5D0369 /* PFProductsRequestHandler.m in Sources */, - 14A0D60A7ABCCA3408ED26E3D0E0A819 /* PFPropertyInfo.m in Sources */, - C6596728704CF2E0D363D6F21E5C2F2F /* PFPropertyInfo_Runtime.m in Sources */, - DD9352278D2CECD93F57DB53EC97D291 /* PFPurchase.m in Sources */, - 5FAB5E76AB21A0CEEB8A3792F4905E01 /* PFPurchaseController.m in Sources */, - FDCA9B7C897364F5E3986CE205C27A92 /* PFPush.m in Sources */, - F13EE6B0A90AA4D1F41B773D316DC97F /* PFPushChannelsController.m in Sources */, - DDFA75763A11603500811925FE92E6BF /* PFPushController.m in Sources */, - 3E39A5289A0F29B5D83FF16C7428D27E /* PFPushManager.m in Sources */, - DA17F39593B4824BBC5926AD390390C2 /* PFPushState.m in Sources */, - EF97F68ADAA1FA736F080BC613BF7252 /* PFPushUtilities.m in Sources */, - 5842D3A6FC8E81680A5B79C48D17FC79 /* PFQuery.m in Sources */, - DD102CB743C2258E153D8159D5C0EC14 /* PFQueryController.m in Sources */, - CF6E9D57E0097D77F7D794534CA879BE /* PFQueryState.m in Sources */, - 289943F1E552820BA0858569400B2F7D /* PFQueryUtilities.m in Sources */, - 1690AC90F202B5DC511EA9C2933CB97D /* PFRESTAnalyticsCommand.m in Sources */, - B4380967482F62131B85509257CCCB2B /* PFRESTCloudCommand.m in Sources */, - 20254097B4CBEAC40E87858741364800 /* PFRESTCommand.m in Sources */, - 5CEE55D83FAA669CBB68FD3C8DD4AC6A /* PFRESTConfigCommand.m in Sources */, - 4AAC7855E322D7DAE7A0CA82444190E9 /* PFRESTFileCommand.m in Sources */, - C5FED0ECFCB113A0AD2C656D0BB62934 /* PFRESTObjectBatchCommand.m in Sources */, - D64AC9CDC6984455A31AF0E9AAFBFC10 /* PFRESTObjectCommand.m in Sources */, - EA78E9FEB71E4A999EE8B4FF325B4F8C /* PFRESTPushCommand.m in Sources */, - C5329C8CE1773B4034441DC996B07093 /* PFRESTQueryCommand.m in Sources */, - AF07EB1921C3ACFD1186E3827CAA5A38 /* PFRESTSessionCommand.m in Sources */, - 97B018ECAB99E02838108858A9C5D9ED /* PFRESTUserCommand.m in Sources */, - 5C383F280EBCA5293E7102391980CAFB /* PFReachability.m in Sources */, - 1D3EA938DC7748DF6184BCEC67838050 /* PFRelation.m in Sources */, - 7AF60B83195278F6A42385CCE9F4CB35 /* PFRelationState.m in Sources */, - 784BB509549AB4E658F95135964F8BAA /* PFRole.m in Sources */, - 677760404A1F4FC247880760F1EEC082 /* PFSQLiteDatabase.m in Sources */, - 32D4B780316F25D5B0849535BDF2CCB8 /* PFSQLiteDatabaseController.m in Sources */, - 1303B59C5400037F832BD657D7E0DB7B /* PFSQLiteDatabaseResult.m in Sources */, - A28BF51BFC8CE83AA10CA0882B57AD94 /* PFSQLiteStatement.m in Sources */, - 2A03349907D6F274E5E0BC4C4CE2B9D4 /* PFSession.m in Sources */, - 348C1F161E5A01BD89B9C748DB57C4D4 /* PFSessionController.m in Sources */, - 2B65D042FB690E283070BAB2D38C6AF1 /* PFSessionUtilities.m in Sources */, - 795A66B7F6728153ED7333F9304F9A7A /* PFTaskQueue.m in Sources */, - 47A6AEE5AABB891BEF9549399D9D73E7 /* PFThreadsafety.m in Sources */, - DA5A140E5FAF805F07B32A67DD6AF45F /* PFURLConstructor.m in Sources */, - FFA7BE1A5108294991B631273306B337 /* PFURLSession.m in Sources */, - F41FB512F52C7C721107DFC24193C18D /* PFURLSessionCommandRunner.m in Sources */, - F26B4E9439D05674BDC3EC6D47419E65 /* PFURLSessionDataTaskDelegate.m in Sources */, - 14F7FFC0E861870C067DF49031119473 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */, - EEBDC1EBFFAA9C81CBE8579A76CC0A68 /* PFURLSessionJSONDataTaskDelegate.m in Sources */, - 4BCF78FFDDD8496F50F1A118A174798A /* PFURLSessionUploadTaskDelegate.m in Sources */, - 776745BC8D80FF6CC924AB8DE9FF048C /* PFUser.m in Sources */, - 14B42C960D733C3D8791124A3284C393 /* PFUserAuthenticationController.m in Sources */, - BB1D07345C56DB2E88AF60CBDAF05EAA /* PFUserConstants.m in Sources */, - 2F0882CC2C95FBDFAAA2C4B2CC5DC28A /* PFUserController.m in Sources */, - 33364FE5E736249A1DE57AFF31737CD7 /* PFUserFileCodingLogic.m in Sources */, - 51690C672CFECB44023EC60A02654A47 /* PFUserState.m in Sources */, - E0144A342BDA68B208D02A9FA946E3F3 /* PFWeakValue.m in Sources */, - AEC0AABC2226F08C2EC024E94093A69E /* Parse-dummy.m in Sources */, - 0447D077E03CCB121A73F61FECE5D6BC /* Parse.m in Sources */, - C3C07815E5AFE68241C34F5DB2196C34 /* ParseManager.m in Sources */, - 2F1B5C4CE2C8923ECCB376D10D914260 /* ParseModule.m in Sources */, + 594CB78A508EC57A208E26DE4240AC4F /* BFCancellationToken.m in Sources */, + CB90858A2BAC0D76349EF1E1F8D62375 /* BFCancellationTokenRegistration.m in Sources */, + 9BF33FD7A487A930572B4018194FF4AF /* BFCancellationTokenSource.m in Sources */, + 04E0463B6BEA9B8021EF9D47A0D70D48 /* BFExecutor.m in Sources */, + F425727E94B1F6A5753C672782668DA5 /* BFTask.m in Sources */, + A3971E85AC1BFAFE9979360CCCCFA4BC /* BFTaskCompletionSource.m in Sources */, + 4D2107B82EB19D5552F0D8643B72A7F7 /* Bolts-dummy.m in Sources */, + 00119247713445361CB349494BD8721A /* Bolts.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 0DA6F4834F7CDB933F01A3AF8EF1F5C6 /* PBXTargetDependency */ = { + 3C7A257897C0B9619DF09701A8BFF0C9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Parse; - target = 6B21C5373E714B4D9498D17EE535A4D6 /* Parse */; - targetProxy = 7B95C3C8CBBED75AFC0D447738B85785 /* PBXContainerItemProxy */; + name = Bolts; + target = E1F0B29D8C274D3B4A2566B0DFA6A902 /* Bolts */; + targetProxy = A456FA0F15BA9B2536652B1701BAF644 /* PBXContainerItemProxy */; }; - 2339569B36070B99A0021EFCDEFF8594 /* PBXTargetDependency */ = { + 9408F168225A9295B417D7D9B496AE91 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Bolts; - target = 3094A346FA0BA2A7016A256FB910F479 /* Bolts */; - targetProxy = 38312B8FB651E2B23B6C5E889DC2C345 /* PBXContainerItemProxy */; + name = pop; + target = 47C800E42623009B7192B025B3DD25A1 /* pop */; + targetProxy = 384587FE181EB87FB186E5EABAF2646A /* PBXContainerItemProxy */; }; - 2F8CA3FF9C1472ABEE78882ACBE29841 /* PBXTargetDependency */ = { + 9B10575164CA1EFA8980256F26C95A06 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Bolts; - target = 3094A346FA0BA2A7016A256FB910F479 /* Bolts */; - targetProxy = 6919D792BE090C23FDDA7F3F41ED1D7D /* PBXContainerItemProxy */; + name = Parse; + target = E2B6A7F9ABCCE48BC851C4EAE332D8FB /* Parse */; + targetProxy = AACED10EAE78F8427CE29A9FEE769081 /* PBXContainerItemProxy */; }; - E2B4D845E65AC45A122792D7BF0AA724 /* PBXTargetDependency */ = { + C972B13B9130AEBC11060F7C2E61D8C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = pop; - target = 47C800E42623009B7192B025B3DD25A1 /* pop */; - targetProxy = 43DAF625E1C76FEDADD2A5A410AC7016 /* PBXContainerItemProxy */; + name = Bolts; + target = E1F0B29D8C274D3B4A2566B0DFA6A902 /* Bolts */; + targetProxy = 0E31099F1DACDF2E2DCE828E4EED3984 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 14FE85D82AC1EF857A39F3012343AF27 /* Debug */ = { + 04BA543D036558F1E4F6D48F13753506 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3D02C6C7422645AB5529C759A1A86353 /* Pods.debug.xcconfig */; + baseConfigurationReference = C55B1243D9ED528D2D7760513B4D0FB2 /* Parse-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = YES; + MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; - name = Debug; + name = Release; }; - 4ED0C8ED84E3F1212592CA0ED756796B /* Release */ = { + 14FE85D82AC1EF857A39F3012343AF27 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CE1700FF476E3DF743FC31E536BEBEC6 /* Parse-Private.xcconfig */; + baseConfigurationReference = 3D02C6C7422645AB5529C759A1A86353 /* Pods.debug.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; + MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; - name = Release; + name = Debug; }; 5CE5176205D06FF3FFE3DDDA9291E44B /* Debug */ = { isa = XCBuildConfiguration; @@ -2212,22 +2212,6 @@ }; name = Release; }; - 6D957BA9E9381347A91DCCDD642DF033 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D8453063C22C0EAA2AAC6F28CFBB7AC8 /* Bolts-Private.xcconfig */; - buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; 74857149DC1E0D599B8A01A78349A926 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2278,9 +2262,9 @@ }; name = Release; }; - AAF09E9E3CBBFF2A37E881D51D1C4D37 /* Release */ = { + 7A8565CA9694FB5A0C1E200FD6F4C766 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D8453063C22C0EAA2AAC6F28CFBB7AC8 /* Bolts-Private.xcconfig */; + baseConfigurationReference = 397A9B2690E0D54158F63ECBF0C769B2 /* Bolts-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; @@ -2294,12 +2278,12 @@ }; name = Release; }; - E69EFF8AAAC9CEFE6A33102476292CA8 /* Debug */ = { + 81C213DCEA4F28318CDB852D9783A55D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */; + baseConfigurationReference = 397A9B2690E0D54158F63ECBF0C769B2 /* Bolts-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/pop/pop-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; @@ -2310,9 +2294,9 @@ }; name = Debug; }; - F67A8FD39FAC25DF12C6C3ED1B6BE172 /* Debug */ = { + 84B1F85980300868DC94F0D5B3427AAA /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CE1700FF476E3DF743FC31E536BEBEC6 /* Parse-Private.xcconfig */; + baseConfigurationReference = C55B1243D9ED528D2D7760513B4D0FB2 /* Parse-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; @@ -2326,6 +2310,22 @@ }; name = Debug; }; + E69EFF8AAAC9CEFE6A33102476292CA8 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/pop/pop-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -2338,29 +2338,29 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 59EACD0D7A24F90BA574CE0F659DE30D /* Build configuration list for PBXNativeTarget "Bolts" */ = { + 62C75DE36F62F6DD244D1001268287F5 /* Build configuration list for PBXNativeTarget "pop" */ = { isa = XCConfigurationList; buildConfigurations = ( - 6D957BA9E9381347A91DCCDD642DF033 /* Debug */, - AAF09E9E3CBBFF2A37E881D51D1C4D37 /* Release */, + E69EFF8AAAC9CEFE6A33102476292CA8 /* Debug */, + 60DE5500BF969A0D17A617C2E4597711 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 62C75DE36F62F6DD244D1001268287F5 /* Build configuration list for PBXNativeTarget "pop" */ = { + 657E892C5C0C753EEFCFD7C80D8FB5BA /* Build configuration list for PBXNativeTarget "Parse" */ = { isa = XCConfigurationList; buildConfigurations = ( - E69EFF8AAAC9CEFE6A33102476292CA8 /* Debug */, - 60DE5500BF969A0D17A617C2E4597711 /* Release */, + 84B1F85980300868DC94F0D5B3427AAA /* Debug */, + 04BA543D036558F1E4F6D48F13753506 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 6E3F830824B8ABA99F201389718A5F33 /* Build configuration list for PBXNativeTarget "Parse" */ = { + 737FE33D90851DA7D993D824EDBC7B82 /* Build configuration list for PBXNativeTarget "Bolts" */ = { isa = XCConfigurationList; buildConfigurations = ( - F67A8FD39FAC25DF12C6C3ED1B6BE172 /* Debug */, - 4ED0C8ED84E3F1212592CA0ED756796B /* Release */, + 81C213DCEA4F28318CDB852D9783A55D /* Debug */, + 7A8565CA9694FB5A0C1E200FD6F4C766 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/BreakingBad/Pods/Target Support Files/pop/pop-Private.xcconfig b/BreakingBad/Pods/Target Support Files/pop/pop-Private.xcconfig new file mode 100644 index 0000000..91d383d --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/pop/pop-Private.xcconfig @@ -0,0 +1,8 @@ +#include "pop.xcconfig" +CLANG_CXX_LANGUAGE_STANDARD = ${POP_CLANG_CXX_LANGUAGE_STANDARD} +CLANG_CXX_LIBRARY = ${POP_CLANG_CXX_LIBRARY} +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/pop" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = ${POP_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} +SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/pop/pop-dummy.m b/BreakingBad/Pods/Target Support Files/pop/pop-dummy.m new file mode 100644 index 0000000..19ed261 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/pop/pop-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_pop : NSObject +@end +@implementation PodsDummy_pop +@end diff --git a/BreakingBad/Pods/Target Support Files/pop/pop-prefix.pch b/BreakingBad/Pods/Target Support Files/pop/pop-prefix.pch new file mode 100644 index 0000000..aa992a4 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/pop/pop-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/BreakingBad/Pods/Target Support Files/pop/pop.xcconfig b/BreakingBad/Pods/Target Support Files/pop/pop.xcconfig new file mode 100644 index 0000000..d4a59ed --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/pop/pop.xcconfig @@ -0,0 +1,3 @@ +POP_CLANG_CXX_LANGUAGE_STANDARD = c++11 +POP_CLANG_CXX_LIBRARY = libc++ +POP_OTHER_LDFLAGS = -l"c++" \ No newline at end of file diff --git a/BreakingBad/Pods/pop/LICENSE b/BreakingBad/Pods/pop/LICENSE new file mode 100644 index 0000000..642126f --- /dev/null +++ b/BreakingBad/Pods/pop/LICENSE @@ -0,0 +1,30 @@ +BSD License + +For Pop software + +Copyright (c) 2014, Facebook, Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name Facebook nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/BreakingBad/Pods/pop/README.md b/BreakingBad/Pods/pop/README.md new file mode 100644 index 0000000..addb18a --- /dev/null +++ b/BreakingBad/Pods/pop/README.md @@ -0,0 +1,203 @@ +![pop](https://github.com/facebook/pop/blob/master/Images/pop.gif?raw=true) + +Pop is an extensible animation engine for iOS and OS X. In addition to basic static animations, it supports spring and decay dynamic animations, making it useful for building realistic, physics-based interactions. The API allows quick integration with existing Objective-C codebases and enables the animation of any property on any object. It's a mature and well-tested framework that drives all the animations and transitions in [Paper](http://www.facebook.com/paper). + +[![Build Status](https://travis-ci.org/facebook/pop.svg)](https://travis-ci.org/facebook/pop) + +## Installation + +Pop is available on [CocoaPods](http://cocoapods.org). Just add the following to your project Podfile: + +```ruby +pod 'pop', '~> 1.0' +``` + +Bugs are first fixed in master and then made available via a designated release. If you tend to live on the bleeding edge, you can use Pop from master with the following Podfile entry: + +```ruby +pod 'pop', :git => 'https://github.com/facebook/pop.git' +``` + +## Non-CocoaPods Installation + +### iOS 8 Embedded Framework +By adding the project to your project and adding pop.embedded framework to the Embedded Binaries section on the General tab of your app's target, you can set up pop in seconds! This also enables `@import pop` syntax with header modules. + +**Note**: because of some awkward limitations with Xcode, embedded binaries must share the same name as the module and must have `.framework` as an extension. This means that you'll see two pop.frameworks when adding embedded binaries (one for OS X, and one for iOS). You'll need to be sure to add the iOS one, and since this list is populated in order of targets, it's safe to assume it's the second one. You can verify the correct one was chosen by checking the path next to the framework listed: `Debug-iphoneos`. + +![Embedded Binaries](Images/EmbeddedBinaries.png?raw=true) + +**Note 2**: this method does not currently play nicely with workspaces. For some unknown reason, Xcode simply rejects adding pop.framework as an embedded binary when pop.xcodeproj is placed in the workspace. This only works when pop.xcodeproj is added as a subproject to the current target's project. + +### Advanced +Alternatively, you can add the project to your workspace and adopt the provided configuration files or manually copy the files under the pop subdirectory into your project. If installing manually, ensure the C++ standard library is also linked by including `-lc++` to your project linker flags. + +## Usage + +Pop adopts the Core Animation explicit animation programming model. Use by including the following import: + +```objective-c +#import +``` + +or if you're using the embedded framework: + +```objective-c +@import pop; +``` + +### Start, Stop & Update + +To start an animation, add it to the object you wish to animate: + +```objective-c +POPSpringAnimation *anim = [POPSpringAnimation animation]; +... +[layer pop_addAnimation:anim forKey:@"myKey"]; +``` + +To stop an animation, remove it from the object referencing the key specified on start: + +```objective-c +[layer pop_removeAnimationForKey:@"myKey"]; +``` + +The key can also be used to query for the existence of an animation. Updating the toValue of a running animation can provide the most seamless way to change course: + +```objective-c +anim = [layer pop_animationForKey:@"myKey"]; +if (anim) { + /* update to value to new destination */ + anim.toValue = @(42.0); +} else { + /* create and start a new animation */ + .... +} +``` + +While a layer was used in the above examples, the Pop interface is implemented as a category addition on NSObject. Any NSObject or subclass can be animated. + +### Types + +There are four concrete animation types: spring, decay, basic and custom. + +Spring animations can be used to give objects a delightful bounce. In this example, we use a spring animation to animate a layer's bounds from its current value to (0, 0, 400, 400): + +```objective-c +POPSpringAnimation *anim = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerBounds]; +anim.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 400, 400)]; +[layer pop_addAnimation:anim forKey:@"size"]; +``` +Decay animations can be used to gradually slow an object to a halt. In this example, we decay a layer's positionX from it's current value and velocity 1000pts per second: + +```objective-c +POPDecayAnimation *anim = [POPDecayAnimation animationWithPropertyNamed:kPOPLayerPositionX]; +anim.velocity = @(1000.); +[layer pop_addAnimation:anim forKey:@"slide"]; +``` + +Basic animations can be used to interpolate values over a specified time period. To use an ease-in ease-out animation to animate a view's alpha from 0.0 to 1.0 over the default duration: +```objective-c +POPBasicAnimation *anim = [POPBasicAnimation animationWithPropertyNamed:kPOPViewAlpha]; +anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; +anim.fromValue = @(0.0); +anim.toValue = @(1.0); +[view pop_addAnimation:anim forKey:@"fade"]; +``` +`POPCustomAnimation` makes creating custom animations and transitions easier by handling CADisplayLink and associated time-step management. See header for more details. + + +### Properties + +The property animated is specified by the `POPAnimatableProperty` class. In this example we create a spring animation and explicitly set the animatable property corresponding to `-[CALayer bounds]`: + +```objective-c +POPSpringAnimation *anim = [POPSpringAnimation animation]; +anim.property = [POPAnimatableProperty propertyWithName:kPOPLayerBounds]; +``` + +The framework provides many common layer and view animatable properties out of box. You can animate a custom property by creating a new instance of the class. In this example, we declare a custom volume property: + +```objective-c +prop = [POPAnimatableProperty propertyWithName:@"com.foo.radio.volume" initializer:^(POPMutableAnimatableProperty *prop) { + // read value + prop.readBlock = ^(id obj, CGFloat values[]) { + values[0] = [obj volume]; + }; + // write value + prop.writeBlock = ^(id obj, const CGFloat values[]) { + [obj setVolume:values[0]]; + }; + // dynamics threshold + prop.threshold = 0.01; +}]; + +anim.property = prop; +``` + +For a complete listing of provided animatable properties, as well more information on declaring custom properties see `POPAnimatableProperty.h`. + + +### Debugging + +Here are a few tips when debugging. Pop obeys the Simulator's Toggle Slow Animations setting. Try enabling it to slow down animations and more easily observe interactions. + +Consider naming your animations. This will allow you to more easily identify them when referencing them, either via logging or in the debugger: + +```objective-c +anim.name = @"springOpen"; +``` + +Each animation comes with an associated tracer. The tracer allows you to record all animation-related events, in a fast and efficient manner, allowing you to query and analyze them after animation completion. The below example starts the tracer and configures it to log all events on animation completion: + +```objective-c +POPAnimationTracer *tracer = anim.tracer; +tracer.shouldLogAndResetOnCompletion = YES; +[tracer start]; +``` + +See `POPAnimationTracer.h` for more details. + +## Testing + +Pop has extensive unit test coverage. To install test dependencies, navigate to the root pop directory and type: + +```sh +pod install +``` + +Assuming CocoaPods is installed, this will include the necessary OCMock dependency to the unit test targets. + +## SceneKit + +Due to SceneKit requiring iOS 8 and OS X 10.9, POP's SceneKit extensions aren't provided out of box. Unfortunately, [weakly linked frameworks](https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html) cannot be used due to issues mentioned in the [Xcode 6.1 Release Notes](https://developer.apple.com/library/ios/releasenotes/DeveloperTools/RN-Xcode/Chapters/xc6_release_notes.html). + +To remedy this, you can easily opt-in to use SceneKit! Simply add this to the Preprocessor Macros section of your Xcode Project: + +``` +POP_USE_SCENEKIT=1 +``` + +## Resources + +A collection of links to external resources that may prove valuable: + +* [AGGeometryKit+POP - Animating Quadrilaterals with Pop](https://github.com/hfossli/aggeometrykit-pop) +* [Apple – Core Animation Programming Guide](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreAnimation_guide/Introduction/Introduction.html) +* [iOS Development Tips – UIScrollView-like deceleration with Pop](http://iosdevtips.co/post/84571595353/replicating-uiscrollviews-deceleration-with-facebook) +* [Pop Playground – Repository of Pop animation examples](https://github.com/callmeed/pop-playground) +* [Pop Playground 2 – Playing with Facebook's framework](http://victorbaro.com/2014/05/pop-playground-playing-with-facebooks-framework/) +* [POP-MCAnimate – Concise syntax for the Pop animation framework](https://github.com/matthewcheok/POP-MCAnimate) +* [Popping - Great examples in one project](https://github.com/schneiderandre/popping) +* [Rebound – Spring Animations for Android](http://facebook.github.io/rebound/) +* [Tapity Tutorial – Getting Started with Pop](http://tapity.com/tutorial-getting-started-with-pop/) +* [Tweaks – Easily adjust parameters for iOS apps in development](https://github.com/facebook/tweaks) +* [POP Tutorial in 5 steps](https://github.com/maxmyers/FacebookPop) +* [VBFPopFlatButton – Flat animatable button, using Pop to transition between states](https://github.com/victorBaro/VBFPopFlatButton) + +## Contributing +See the CONTRIBUTING file for how to help out. + +## License + +Pop is released under a BSD License. See LICENSE file for details. diff --git a/BreakingBad/Pods/pop/pop/POP.h b/BreakingBad/Pods/pop/pop/POP.h new file mode 100644 index 0000000..72adba7 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POP.h @@ -0,0 +1,29 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#ifndef POP_POP_H +#define POP_POP_H + +#import + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import + +#endif /* POP_POP_H */ diff --git a/BreakingBad/Pods/pop/pop/POPAction.h b/BreakingBad/Pods/pop/pop/POPAction.h new file mode 100644 index 0000000..85cca19 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPAction.h @@ -0,0 +1,67 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#ifndef POPACTION_H +#define POPACTION_H + +#import + +#import + +#ifdef __cplusplus + +namespace POP { + + /** + @abstract Disables Core Animation actions using RAII. + @discussion The disablement of actions is scoped to the current transaction. + */ + class ActionDisabler + { + BOOL state; + + public: + ActionDisabler() POP_NOTHROW + { + state = [CATransaction disableActions]; + [CATransaction setDisableActions:YES]; + } + + ~ActionDisabler() + { + [CATransaction setDisableActions:state]; + } + }; + + /** + @abstract Enables Core Animation actions using RAII. + @discussion The enablement of actions is scoped to the current transaction. + */ + class ActionEnabler + { + BOOL state; + + public: + ActionEnabler() POP_NOTHROW + { + state = [CATransaction disableActions]; + [CATransaction setDisableActions:NO]; + } + + ~ActionEnabler() + { + [CATransaction setDisableActions:state]; + } + }; + +} + +#endif /* __cplusplus */ + +#endif /* POPACTION_H */ diff --git a/BreakingBad/Pods/pop/pop/POPAnimatableProperty.h b/BreakingBad/Pods/pop/pop/POPAnimatableProperty.h new file mode 100644 index 0000000..1636783 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPAnimatableProperty.h @@ -0,0 +1,249 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import + +@class POPMutableAnimatableProperty; + +/** + @abstract Describes an animatable property. + */ +@interface POPAnimatableProperty : NSObject + +/** + @abstract Property accessor. + @param name The name of the property. + @return The animatable property with that name or nil if it does not exist. + @discussion Common animatable properties are included by default. Use the provided constants to reference. + */ ++ (id)propertyWithName:(NSString *)name; + +/** + @abstract The designated initializer. + @param name The name of the property. + @param block The block used to configure the property on creation. + @return The animatable property with name if it exists, otherwise a newly created instance configured by block. + @discussion Custom properties should use reverse-DNS naming. A newly created instance is only mutable in the scope of block. Once constructed, a property becomes immutable. + */ ++ (id)propertyWithName:(NSString *)name initializer:(void (^)(POPMutableAnimatableProperty *prop))block; + +/** + @abstract The name of the property. + @discussion Used to uniquely identify an animatable property. + */ +@property (readonly, nonatomic, copy) NSString *name; + +/** + @abstract Block used to read values from a property into an array of floats. + */ +@property (readonly, nonatomic, copy) void (^readBlock)(id obj, CGFloat values[]); + +/** + @abstract Block used to write values from an array of floats into a property. + */ +@property (readonly, nonatomic, copy) void (^writeBlock)(id obj, const CGFloat values[]); + +/** + @abstract The threshold value used when determining completion of dynamics simulations. + */ +@property (readonly, nonatomic, assign) CGFloat threshold; + +@end + +/** + @abstract A mutable animatable property intended for configuration. + */ +@interface POPMutableAnimatableProperty : POPAnimatableProperty + +/** + @abstract A read-write version of POPAnimatableProperty name property. + */ +@property (readwrite, nonatomic, copy) NSString *name; + +/** + @abstract A read-write version of POPAnimatableProperty readBlock property. + */ +@property (readwrite, nonatomic, copy) void (^readBlock)(id obj, CGFloat values[]); + +/** + @abstract A read-write version of POPAnimatableProperty writeBlock property. + */ +@property (readwrite, nonatomic, copy) void (^writeBlock)(id obj, const CGFloat values[]); + +/** + @abstract A read-write version of POPAnimatableProperty threshold property. + */ +@property (readwrite, nonatomic, assign) CGFloat threshold; + +@end + +/** + Common CALayer property names. + */ +extern NSString * const kPOPLayerBackgroundColor; +extern NSString * const kPOPLayerBounds; +extern NSString * const kPOPLayerCornerRadius; +extern NSString * const kPOPLayerBorderWidth; +extern NSString * const kPOPLayerBorderColor; +extern NSString * const kPOPLayerOpacity; +extern NSString * const kPOPLayerPosition; +extern NSString * const kPOPLayerPositionX; +extern NSString * const kPOPLayerPositionY; +extern NSString * const kPOPLayerRotation; +extern NSString * const kPOPLayerRotationX; +extern NSString * const kPOPLayerRotationY; +extern NSString * const kPOPLayerScaleX; +extern NSString * const kPOPLayerScaleXY; +extern NSString * const kPOPLayerScaleY; +extern NSString * const kPOPLayerSize; +extern NSString * const kPOPLayerSubscaleXY; +extern NSString * const kPOPLayerSubtranslationX; +extern NSString * const kPOPLayerSubtranslationXY; +extern NSString * const kPOPLayerSubtranslationY; +extern NSString * const kPOPLayerSubtranslationZ; +extern NSString * const kPOPLayerTranslationX; +extern NSString * const kPOPLayerTranslationXY; +extern NSString * const kPOPLayerTranslationY; +extern NSString * const kPOPLayerTranslationZ; +extern NSString * const kPOPLayerZPosition; +extern NSString * const kPOPLayerShadowColor; +extern NSString * const kPOPLayerShadowOffset; +extern NSString * const kPOPLayerShadowOpacity; +extern NSString * const kPOPLayerShadowRadius; + +/** + Common CAShapeLayer property names. + */ +extern NSString * const kPOPShapeLayerStrokeStart; +extern NSString * const kPOPShapeLayerStrokeEnd; +extern NSString * const kPOPShapeLayerStrokeColor; +extern NSString * const kPOPShapeLayerFillColor; +extern NSString * const kPOPShapeLayerLineWidth; + +/** + Common NSLayoutConstraint property names. + */ +extern NSString * const kPOPLayoutConstraintConstant; + + +#if TARGET_OS_IPHONE + +/** + Common UIView property names. + */ +extern NSString * const kPOPViewAlpha; +extern NSString * const kPOPViewBackgroundColor; +extern NSString * const kPOPViewBounds; +extern NSString * const kPOPViewCenter; +extern NSString * const kPOPViewFrame; +extern NSString * const kPOPViewScaleX; +extern NSString * const kPOPViewScaleXY; +extern NSString * const kPOPViewScaleY; +extern NSString * const kPOPViewSize; +extern NSString * const kPOPViewTintColor; + +/** + Common UIScrollView property names. + */ +extern NSString * const kPOPScrollViewContentOffset; +extern NSString * const kPOPScrollViewContentSize; +extern NSString * const kPOPScrollViewZoomScale; +extern NSString * const kPOPScrollViewContentInset; + +/** + Common UITableView property names. + */ +extern NSString * const kPOPTableViewContentOffset; +extern NSString * const kPOPTableViewContentSize; + +/** + Common UICollectionView property names. + */ +extern NSString * const kPOPCollectionViewContentOffset; +extern NSString * const kPOPCollectionViewContentSize; + +/** + Common UINavigationBar property names. + */ +extern NSString * const kPOPNavigationBarBarTintColor; + +/** + Common UIToolbar property names. + */ +extern NSString * const kPOPToolbarBarTintColor; + +/** + Common UITabBar property names. + */ +extern NSString * const kPOPTabBarBarTintColor; + +/** + Common UILabel property names. + */ +extern NSString * const kPOPLabelTextColor; + +#else + +/** + Common NSView property names. + */ +extern NSString * const kPOPViewFrame; +extern NSString * const kPOPViewBounds; +extern NSString * const kPOPViewAlphaValue; +extern NSString * const kPOPViewFrameRotation; +extern NSString * const kPOPViewFrameCenterRotation; +extern NSString * const kPOPViewBoundsRotation; + +/** + Common NSWindow property names. + */ +extern NSString * const kPOPWindowFrame; +extern NSString * const kPOPWindowAlphaValue; +extern NSString * const kPOPWindowBackgroundColor; + +#endif + +#if SCENEKIT_SDK_AVAILABLE + +/** + Common SceneKit property names. + */ +extern NSString * const kPOPSCNNodePosition; +extern NSString * const kPOPSCNNodePositionX; +extern NSString * const kPOPSCNNodePositionY; +extern NSString * const kPOPSCNNodePositionZ; +extern NSString * const kPOPSCNNodeTranslation; +extern NSString * const kPOPSCNNodeTranslationX; +extern NSString * const kPOPSCNNodeTranslationY; +extern NSString * const kPOPSCNNodeTranslationZ; +extern NSString * const kPOPSCNNodeRotation; +extern NSString * const kPOPSCNNodeRotationX; +extern NSString * const kPOPSCNNodeRotationY; +extern NSString * const kPOPSCNNodeRotationZ; +extern NSString * const kPOPSCNNodeRotationW; +extern NSString * const kPOPSCNNodeEulerAngles; +extern NSString * const kPOPSCNNodeEulerAnglesX; +extern NSString * const kPOPSCNNodeEulerAnglesY; +extern NSString * const kPOPSCNNodeEulerAnglesZ; +extern NSString * const kPOPSCNNodeOrientation; +extern NSString * const kPOPSCNNodeOrientationX; +extern NSString * const kPOPSCNNodeOrientationY; +extern NSString * const kPOPSCNNodeOrientationZ; +extern NSString * const kPOPSCNNodeOrientationW; +extern NSString * const kPOPSCNNodeScale; +extern NSString * const kPOPSCNNodeScaleX; +extern NSString * const kPOPSCNNodeScaleY; +extern NSString * const kPOPSCNNodeScaleZ; +extern NSString * const kPOPSCNNodeScaleXY; + +#endif diff --git a/BreakingBad/Pods/pop/pop/POPAnimatableProperty.mm b/BreakingBad/Pods/pop/pop/POPAnimatableProperty.mm new file mode 100644 index 0000000..c8b3130 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPAnimatableProperty.mm @@ -0,0 +1,1282 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "POPAnimatableProperty.h" + +#import + +#import "POPAnimationRuntime.h" +#import "POPCGUtils.h" +#import "POPDefines.h" +#import "POPLayerExtras.h" + +// common threshold definitions +static CGFloat const kPOPThresholdColor = 0.01; +static CGFloat const kPOPThresholdPoint = 1.0; +static CGFloat const kPOPThresholdOpacity = 0.01; +static CGFloat const kPOPThresholdScale = 0.005; +static CGFloat const kPOPThresholdRotation = 0.01; +static CGFloat const kPOPThresholdRadius = 0.01; + +#pragma mark - Static + +// CALayer +NSString * const kPOPLayerBackgroundColor = @"backgroundColor"; +NSString * const kPOPLayerBounds = @"bounds"; +NSString * const kPOPLayerCornerRadius = @"cornerRadius"; +NSString * const kPOPLayerBorderWidth = @"borderWidth"; +NSString * const kPOPLayerBorderColor = @"borderColor"; +NSString * const kPOPLayerOpacity = @"opacity"; +NSString * const kPOPLayerPosition = @"position"; +NSString * const kPOPLayerPositionX = @"positionX"; +NSString * const kPOPLayerPositionY = @"positionY"; +NSString * const kPOPLayerRotation = @"rotation"; +NSString * const kPOPLayerRotationX = @"rotationX"; +NSString * const kPOPLayerRotationY = @"rotationY"; +NSString * const kPOPLayerScaleX = @"scaleX"; +NSString * const kPOPLayerScaleXY = @"scaleXY"; +NSString * const kPOPLayerScaleY = @"scaleY"; +NSString * const kPOPLayerSize = @"size"; +NSString * const kPOPLayerSubscaleXY = @"subscaleXY"; +NSString * const kPOPLayerSubtranslationX = @"subtranslationX"; +NSString * const kPOPLayerSubtranslationXY = @"subtranslationXY"; +NSString * const kPOPLayerSubtranslationY = @"subtranslationY"; +NSString * const kPOPLayerSubtranslationZ = @"subtranslationZ"; +NSString * const kPOPLayerTranslationX = @"translationX"; +NSString * const kPOPLayerTranslationXY = @"translationXY"; +NSString * const kPOPLayerTranslationY = @"translationY"; +NSString * const kPOPLayerTranslationZ = @"translationZ"; +NSString * const kPOPLayerZPosition = @"zPosition"; +NSString * const kPOPLayerShadowColor = @"shadowColor"; +NSString * const kPOPLayerShadowOffset = @"shadowOffset"; +NSString * const kPOPLayerShadowOpacity = @"shadowOpacity"; +NSString * const kPOPLayerShadowRadius = @"shadowRadius"; + +// CAShapeLayer +NSString * const kPOPShapeLayerStrokeStart = @"shapeLayer.strokeStart"; +NSString * const kPOPShapeLayerStrokeEnd = @"shapeLayer.strokeEnd"; +NSString * const kPOPShapeLayerStrokeColor = @"shapeLayer.strokeColor"; +NSString * const kPOPShapeLayerFillColor = @"shapeLayer.fillColor"; +NSString * const kPOPShapeLayerLineWidth = @"shapeLayer.lineWidth"; + +// NSLayoutConstraint +NSString * const kPOPLayoutConstraintConstant = @"layoutConstraint.constant"; + +#if TARGET_OS_IPHONE + +// UIView +NSString * const kPOPViewAlpha = @"view.alpha"; +NSString * const kPOPViewBackgroundColor = @"view.backgroundColor"; +NSString * const kPOPViewBounds = kPOPLayerBounds; +NSString * const kPOPViewCenter = @"view.center"; +NSString * const kPOPViewFrame = @"view.frame"; +NSString * const kPOPViewScaleX = @"view.scaleX"; +NSString * const kPOPViewScaleXY = @"view.scaleXY"; +NSString * const kPOPViewScaleY = @"view.scaleY"; +NSString * const kPOPViewSize = kPOPLayerSize; +NSString * const kPOPViewTintColor = @"view.tintColor"; + +// UIScrollView +NSString * const kPOPScrollViewContentOffset = @"scrollView.contentOffset"; +NSString * const kPOPScrollViewContentSize = @"scrollView.contentSize"; +NSString * const kPOPScrollViewZoomScale = @"scrollView.zoomScale"; +NSString * const kPOPScrollViewContentInset = @"scrollView.contentInset"; + +// UITableView +NSString * const kPOPTableViewContentOffset = kPOPScrollViewContentOffset; +NSString * const kPOPTableViewContentSize = kPOPScrollViewContentSize; + +// UICollectionView +NSString * const kPOPCollectionViewContentOffset = kPOPScrollViewContentOffset; +NSString * const kPOPCollectionViewContentSize = kPOPScrollViewContentSize; + +// UINavigationBar +NSString * const kPOPNavigationBarBarTintColor = @"navigationBar.barTintColor"; + +// UIToolbar +NSString * const kPOPToolbarBarTintColor = kPOPNavigationBarBarTintColor; + +// UITabBar +NSString * const kPOPTabBarBarTintColor = kPOPNavigationBarBarTintColor; + +// UILabel +NSString * const kPOPLabelTextColor = @"label.textColor"; + +#else + +// NSView +NSString * const kPOPViewFrame = @"view.frame"; +NSString * const kPOPViewBounds = @"view.bounds"; +NSString * const kPOPViewAlphaValue = @"view.alphaValue"; +NSString * const kPOPViewFrameRotation = @"view.frameRotation"; +NSString * const kPOPViewFrameCenterRotation = @"view.frameCenterRotation"; +NSString * const kPOPViewBoundsRotation = @"view.boundsRotation"; + +// NSWindow +NSString * const kPOPWindowFrame = @"window.frame"; +NSString * const kPOPWindowAlphaValue = @"window.alphaValue"; +NSString * const kPOPWindowBackgroundColor = @"window.backgroundColor"; + +#endif + +#if SCENEKIT_SDK_AVAILABLE + +// SceneKit +NSString * const kPOPSCNNodePosition = @"scnode.position"; +NSString * const kPOPSCNNodePositionX = @"scnnode.position.x"; +NSString * const kPOPSCNNodePositionY = @"scnnode.position.y"; +NSString * const kPOPSCNNodePositionZ = @"scnnode.position.z"; +NSString * const kPOPSCNNodeTranslation = @"scnnode.translation"; +NSString * const kPOPSCNNodeTranslationX = @"scnnode.translation.x"; +NSString * const kPOPSCNNodeTranslationY = @"scnnode.translation.y"; +NSString * const kPOPSCNNodeTranslationZ = @"scnnode.translation.z"; +NSString * const kPOPSCNNodeRotation = @"scnnode.rotation"; +NSString * const kPOPSCNNodeRotationX = @"scnnode.rotation.x"; +NSString * const kPOPSCNNodeRotationY = @"scnnode.rotation.y"; +NSString * const kPOPSCNNodeRotationZ = @"scnnode.rotation.z"; +NSString * const kPOPSCNNodeRotationW = @"scnnode.rotation.w"; +NSString * const kPOPSCNNodeEulerAngles = @"scnnode.eulerAngles"; +NSString * const kPOPSCNNodeEulerAnglesX = @"scnnode.eulerAngles.x"; +NSString * const kPOPSCNNodeEulerAnglesY = @"scnnode.eulerAngles.y"; +NSString * const kPOPSCNNodeEulerAnglesZ = @"scnnode.eulerAngles.z"; +NSString * const kPOPSCNNodeOrientation = @"scnnode.orientation"; +NSString * const kPOPSCNNodeOrientationX = @"scnnode.orientation.x"; +NSString * const kPOPSCNNodeOrientationY = @"scnnode.orientation.y"; +NSString * const kPOPSCNNodeOrientationZ = @"scnnode.orientation.z"; +NSString * const kPOPSCNNodeOrientationW = @"scnnode.orientation.w"; +NSString * const kPOPSCNNodeScale = @"scnnode.scale"; +NSString * const kPOPSCNNodeScaleX = @"scnnode.scale.x"; +NSString * const kPOPSCNNodeScaleY = @"scnnode.scale.y"; +NSString * const kPOPSCNNodeScaleZ = @"scnnode.scale.z"; +NSString * const kPOPSCNNodeScaleXY = @"scnnode.scale.xy"; + +#endif + +/** + State structure internal to static animatable property. + */ +typedef struct +{ + NSString *name; + pop_animatable_read_block readBlock; + pop_animatable_write_block writeBlock; + CGFloat threshold; +} _POPStaticAnimatablePropertyState; +typedef _POPStaticAnimatablePropertyState POPStaticAnimatablePropertyState; + +static POPStaticAnimatablePropertyState _staticStates[] = +{ + /* CALayer */ + + {kPOPLayerBackgroundColor, + ^(CALayer *obj, CGFloat values[]) { + POPCGColorGetRGBAComponents(obj.backgroundColor, values); + }, + ^(CALayer *obj, const CGFloat values[]) { + CGColorRef color = POPCGColorRGBACreate(values); + [obj setBackgroundColor:color]; + CGColorRelease(color); + }, + kPOPThresholdColor + }, + + {kPOPLayerBounds, + ^(CALayer *obj, CGFloat values[]) { + values_from_rect(values, [obj bounds]); + }, + ^(CALayer *obj, const CGFloat values[]) { + [obj setBounds:values_to_rect(values)]; + }, + kPOPThresholdPoint + }, + + {kPOPLayerCornerRadius, + ^(CALayer *obj, CGFloat values[]) { + values[0] = [obj cornerRadius]; + }, + ^(CALayer *obj, const CGFloat values[]) { + [obj setCornerRadius:values[0]]; + }, + kPOPThresholdRadius + }, + + {kPOPLayerBorderWidth, + ^(CALayer *obj, CGFloat values[]) { + values[0] = [obj borderWidth]; + }, + ^(CALayer *obj, const CGFloat values[]) { + [obj setBorderWidth:values[0]]; + }, + 0.01 + }, + + {kPOPLayerBorderColor, + ^(CALayer *obj, CGFloat values[]) { + POPCGColorGetRGBAComponents(obj.borderColor, values); + }, + ^(CALayer *obj, const CGFloat values[]) { + CGColorRef color = POPCGColorRGBACreate(values); + [obj setBorderColor:color]; + CGColorRelease(color); + }, + kPOPThresholdColor + }, + + {kPOPLayerPosition, + ^(CALayer *obj, CGFloat values[]) { + values_from_point(values, [(CALayer *)obj position]); + }, + ^(CALayer *obj, const CGFloat values[]) { + [obj setPosition:values_to_point(values)]; + }, + kPOPThresholdPoint + }, + + {kPOPLayerPositionX, + ^(CALayer *obj, CGFloat values[]) { + values[0] = [(CALayer *)obj position].x; + }, + ^(CALayer *obj, const CGFloat values[]) { + CGPoint p = [(CALayer *)obj position]; + p.x = values[0]; + [obj setPosition:p]; + }, + kPOPThresholdPoint + }, + + {kPOPLayerPositionY, + ^(CALayer *obj, CGFloat values[]) { + values[0] = [(CALayer *)obj position].y; + }, + ^(CALayer *obj, const CGFloat values[]) { + CGPoint p = [(CALayer *)obj position]; + p.y = values[0]; + [obj setPosition:p]; + }, + kPOPThresholdPoint + }, + + {kPOPLayerOpacity, + ^(CALayer *obj, CGFloat values[]) { + values[0] = [obj opacity]; + }, + ^(CALayer *obj, const CGFloat values[]) { + [obj setOpacity:((float)values[0])]; + }, + kPOPThresholdOpacity + }, + + {kPOPLayerScaleX, + ^(CALayer *obj, CGFloat values[]) { + values[0] = POPLayerGetScaleX(obj); + }, + ^(CALayer *obj, const CGFloat values[]) { + POPLayerSetScaleX(obj, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPLayerScaleY, + ^(CALayer *obj, CGFloat values[]) { + values[0] = POPLayerGetScaleY(obj); + }, + ^(CALayer *obj, const CGFloat values[]) { + POPLayerSetScaleY(obj, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPLayerScaleXY, + ^(CALayer *obj, CGFloat values[]) { + values_from_point(values, POPLayerGetScaleXY(obj)); + }, + ^(CALayer *obj, const CGFloat values[]) { + POPLayerSetScaleXY(obj, values_to_point(values)); + }, + kPOPThresholdScale + }, + + {kPOPLayerSubscaleXY, + ^(CALayer *obj, CGFloat values[]) { + values_from_point(values, POPLayerGetSubScaleXY(obj)); + }, + ^(CALayer *obj, const CGFloat values[]) { + POPLayerSetSubScaleXY(obj, values_to_point(values)); + }, + kPOPThresholdScale + }, + + {kPOPLayerTranslationX, + ^(CALayer *obj, CGFloat values[]) { + values[0] = POPLayerGetTranslationX(obj); + }, + ^(CALayer *obj, const CGFloat values[]) { + POPLayerSetTranslationX(obj, values[0]); + }, + kPOPThresholdPoint + }, + + {kPOPLayerTranslationY, + ^(CALayer *obj, CGFloat values[]) { + values[0] = POPLayerGetTranslationY(obj); + }, + ^(CALayer *obj, const CGFloat values[]) { + POPLayerSetTranslationY(obj, values[0]); + }, + kPOPThresholdPoint + }, + + {kPOPLayerTranslationZ, + ^(CALayer *obj, CGFloat values[]) { + values[0] = POPLayerGetTranslationZ(obj); + }, + ^(CALayer *obj, const CGFloat values[]) { + POPLayerSetTranslationZ(obj, values[0]); + }, + kPOPThresholdPoint + }, + + {kPOPLayerTranslationXY, + ^(CALayer *obj, CGFloat values[]) { + values_from_point(values, POPLayerGetTranslationXY(obj)); + }, + ^(CALayer *obj, const CGFloat values[]) { + POPLayerSetTranslationXY(obj, values_to_point(values)); + }, + kPOPThresholdPoint + }, + + {kPOPLayerSubtranslationX, + ^(CALayer *obj, CGFloat values[]) { + values[0] = POPLayerGetSubTranslationX(obj); + }, + ^(CALayer *obj, const CGFloat values[]) { + POPLayerSetSubTranslationX(obj, values[0]); + }, + kPOPThresholdPoint + }, + + {kPOPLayerSubtranslationY, + ^(CALayer *obj, CGFloat values[]) { + values[0] = POPLayerGetSubTranslationY(obj); + }, + ^(CALayer *obj, const CGFloat values[]) { + POPLayerSetSubTranslationY(obj, values[0]); + }, + kPOPThresholdPoint + }, + + {kPOPLayerSubtranslationZ, + ^(CALayer *obj, CGFloat values[]) { + values[0] = POPLayerGetSubTranslationZ(obj); + }, + ^(CALayer *obj, const CGFloat values[]) { + POPLayerSetSubTranslationZ(obj, values[0]); + }, + kPOPThresholdPoint + }, + + {kPOPLayerSubtranslationXY, + ^(CALayer *obj, CGFloat values[]) { + values_from_point(values, POPLayerGetSubTranslationXY(obj)); + }, + ^(CALayer *obj, const CGFloat values[]) { + POPLayerSetSubTranslationXY(obj, values_to_point(values)); + }, + kPOPThresholdPoint + }, + + {kPOPLayerZPosition, + ^(CALayer *obj, CGFloat values[]) { + values[0] = [obj zPosition]; + }, + ^(CALayer *obj, const CGFloat values[]) { + [obj setZPosition:values[0]]; + }, + kPOPThresholdPoint + }, + + {kPOPLayerSize, + ^(CALayer *obj, CGFloat values[]) { + values_from_size(values, [obj bounds].size); + }, + ^(CALayer *obj, const CGFloat values[]) { + CGSize size = values_to_size(values); + if (size.width < 0. || size.height < 0.) + return; + + CGRect b = [obj bounds]; + b.size = size; + [obj setBounds:b]; + }, + kPOPThresholdPoint + }, + + {kPOPLayerRotation, + ^(CALayer *obj, CGFloat values[]) { + values[0] = POPLayerGetRotation(obj); + }, + ^(CALayer *obj, const CGFloat values[]) { + POPLayerSetRotation(obj, values[0]); + }, + kPOPThresholdRotation + }, + + {kPOPLayerRotationY, + ^(CALayer *obj, CGFloat values[]) { + values[0] = POPLayerGetRotationY(obj); + }, + ^(id obj, const CGFloat values[]) { + POPLayerSetRotationY(obj, values[0]); + }, + kPOPThresholdRotation + }, + + {kPOPLayerRotationX, + ^(CALayer *obj, CGFloat values[]) { + values[0] = POPLayerGetRotationX(obj); + }, + ^(CALayer *obj, const CGFloat values[]) { + POPLayerSetRotationX(obj, values[0]); + }, + kPOPThresholdRotation + }, + + {kPOPLayerShadowColor, + ^(CALayer *obj, CGFloat values[]) { + POPCGColorGetRGBAComponents(obj.shadowColor, values); + }, + ^(CALayer *obj, const CGFloat values[]) { + CGColorRef color = POPCGColorRGBACreate(values); + [obj setShadowColor:color]; + CGColorRelease(color); + }, + 0.01 + }, + + {kPOPLayerShadowOffset, + ^(CALayer *obj, CGFloat values[]) { + values_from_size(values, [obj shadowOffset]); + }, + ^(CALayer *obj, const CGFloat values[]) { + CGSize size = values_to_size(values); + [obj setShadowOffset:size]; + }, + 0.01 + }, + + {kPOPLayerShadowOpacity, + ^(CALayer *obj, CGFloat values[]) { + values[0] = [obj shadowOpacity]; + }, + ^(CALayer *obj, const CGFloat values[]) { + [obj setShadowOpacity:values[0]]; + }, + kPOPThresholdOpacity + }, + + {kPOPLayerShadowRadius, + ^(CALayer *obj, CGFloat values[]) { + values[0] = [obj shadowRadius]; + }, + ^(CALayer *obj, const CGFloat values[]) { + [obj setShadowRadius:values[0]]; + }, + kPOPThresholdRadius + }, + + /* CAShapeLayer */ + + {kPOPShapeLayerStrokeStart, + ^(CAShapeLayer *obj, CGFloat values[]) { + values[0] = obj.strokeStart; + }, + ^(CAShapeLayer *obj, const CGFloat values[]) { + obj.strokeStart = values[0]; + }, + 0.01 + }, + + {kPOPShapeLayerStrokeEnd, + ^(CAShapeLayer *obj, CGFloat values[]) { + values[0] = obj.strokeEnd; + }, + ^(CAShapeLayer *obj, const CGFloat values[]) { + obj.strokeEnd = values[0]; + }, + 0.01 + }, + + {kPOPShapeLayerStrokeColor, + ^(CAShapeLayer *obj, CGFloat values[]) { + POPCGColorGetRGBAComponents(obj.strokeColor, values); + }, + ^(CAShapeLayer *obj, const CGFloat values[]) { + CGColorRef color = POPCGColorRGBACreate(values); + [obj setStrokeColor:color]; + CGColorRelease(color); + }, + kPOPThresholdColor + }, + + {kPOPShapeLayerFillColor, + ^(CAShapeLayer *obj, CGFloat values[]) { + POPCGColorGetRGBAComponents(obj.fillColor, values); + }, + ^(CAShapeLayer *obj, const CGFloat values[]) { + CGColorRef color = POPCGColorRGBACreate(values); + [obj setFillColor:color]; + CGColorRelease(color); + }, + kPOPThresholdColor + }, + + {kPOPShapeLayerLineWidth, + ^(CAShapeLayer *obj, CGFloat values[]) { + values[0] = obj.lineWidth; + }, + ^(CAShapeLayer *obj, const CGFloat values[]) { + obj.lineWidth = values[0]; + }, + 0.01 + }, + + {kPOPLayoutConstraintConstant, + ^(NSLayoutConstraint *obj, CGFloat values[]) { + values[0] = obj.constant; + }, + ^(NSLayoutConstraint *obj, const CGFloat values[]) { + obj.constant = values[0]; + }, + 0.01 + }, + +#if TARGET_OS_IPHONE + + /* UIView */ + + {kPOPViewAlpha, + ^(UIView *obj, CGFloat values[]) { + values[0] = obj.alpha; + }, + ^(UIView *obj, const CGFloat values[]) { + obj.alpha = values[0]; + }, + kPOPThresholdOpacity + }, + + {kPOPViewBackgroundColor, + ^(UIView *obj, CGFloat values[]) { + POPUIColorGetRGBAComponents(obj.backgroundColor, values); + }, + ^(UIView *obj, const CGFloat values[]) { + obj.backgroundColor = POPUIColorRGBACreate(values); + }, + kPOPThresholdColor + }, + + {kPOPViewCenter, + ^(UIView *obj, CGFloat values[]) { + values_from_point(values, obj.center); + }, + ^(UIView *obj, const CGFloat values[]) { + obj.center = values_to_point(values); + }, + kPOPThresholdPoint + }, + + {kPOPViewFrame, + ^(UIView *obj, CGFloat values[]) { + values_from_rect(values, obj.frame); + }, + ^(UIView *obj, const CGFloat values[]) { + obj.frame = values_to_rect(values); + }, + kPOPThresholdPoint + }, + + {kPOPViewScaleX, + ^(UIView *obj, CGFloat values[]) { + values[0] = POPLayerGetScaleX(obj.layer); + }, + ^(UIView *obj, const CGFloat values[]) { + POPLayerSetScaleX(obj.layer, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPViewScaleY, + ^(UIView *obj, CGFloat values[]) { + values[0] = POPLayerGetScaleY(obj.layer); + }, + ^(UIView *obj, const CGFloat values[]) { + POPLayerSetScaleY(obj.layer, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPViewScaleXY, + ^(UIView *obj, CGFloat values[]) { + values_from_point(values, POPLayerGetScaleXY(obj.layer)); + }, + ^(UIView *obj, const CGFloat values[]) { + POPLayerSetScaleXY(obj.layer, values_to_point(values)); + }, + kPOPThresholdScale + }, + + {kPOPViewTintColor, + ^(UIView *obj, CGFloat values[]) { + POPUIColorGetRGBAComponents(obj.tintColor, values); + }, + ^(UIView *obj, const CGFloat values[]) { + obj.tintColor = POPUIColorRGBACreate(values); + }, + kPOPThresholdColor + }, + + /* UIScrollView */ + + {kPOPScrollViewContentOffset, + ^(UIScrollView *obj, CGFloat values[]) { + values_from_point(values, obj.contentOffset); + }, + ^(UIScrollView *obj, const CGFloat values[]) { + [obj setContentOffset:values_to_point(values) animated:NO]; + }, + kPOPThresholdPoint + }, + + {kPOPScrollViewContentSize, + ^(UIScrollView *obj, CGFloat values[]) { + values_from_size(values, obj.contentSize); + }, + ^(UIScrollView *obj, const CGFloat values[]) { + obj.contentSize = values_to_size(values); + }, + kPOPThresholdPoint + }, + + {kPOPScrollViewZoomScale, + ^(UIScrollView *obj, CGFloat values[]) { + values[0]=obj.zoomScale; + }, + ^(UIScrollView *obj, const CGFloat values[]) { + obj.zoomScale=values[0]; + }, + kPOPThresholdScale + }, + + {kPOPScrollViewContentInset, + ^(UIScrollView *obj, CGFloat values[]) { + values[0] = obj.contentInset.top; + values[1] = obj.contentInset.left; + values[2] = obj.contentInset.bottom; + values[3] = obj.contentInset.right; + }, + ^(UIScrollView *obj, const CGFloat values[]) { + obj.contentInset = values_to_edge_insets(values); + }, + kPOPThresholdPoint + }, + + /* UINavigationBar */ + + {kPOPNavigationBarBarTintColor, + ^(UINavigationBar *obj, CGFloat values[]) { + POPUIColorGetRGBAComponents(obj.barTintColor, values); + }, + ^(UINavigationBar *obj, const CGFloat values[]) { + obj.barTintColor = POPUIColorRGBACreate(values); + }, + kPOPThresholdColor + }, + + /* UILabel */ + + {kPOPLabelTextColor, + ^(UILabel *obj, CGFloat values[]) { + POPUIColorGetRGBAComponents(obj.textColor, values); + }, + ^(UILabel *obj, const CGFloat values[]) { + obj.textColor = POPUIColorRGBACreate(values); + }, + kPOPThresholdColor + }, + +#else + + /* NSView */ + + {kPOPViewFrame, + ^(NSView *obj, CGFloat values[]) { + values_from_rect(values, NSRectToCGRect(obj.frame)); + }, + ^(NSView *obj, const CGFloat values[]) { + obj.frame = NSRectFromCGRect(values_to_rect(values)); + }, + kPOPThresholdPoint + }, + + {kPOPViewBounds, + ^(NSView *obj, CGFloat values[]) { + values_from_rect(values, NSRectToCGRect(obj.frame)); + }, + ^(NSView *obj, const CGFloat values[]) { + obj.bounds = NSRectFromCGRect(values_to_rect(values)); + }, + kPOPThresholdPoint + }, + + {kPOPViewAlphaValue, + ^(NSView *obj, CGFloat values[]) { + values[0] = obj.alphaValue; + }, + ^(NSView *obj, const CGFloat values[]) { + obj.alphaValue = values[0]; + }, + kPOPThresholdOpacity + }, + + {kPOPViewFrameRotation, + ^(NSView *obj, CGFloat values[]) { + values[0] = obj.frameRotation; + }, + ^(NSView *obj, const CGFloat values[]) { + obj.frameRotation = values[0]; + }, + kPOPThresholdRotation + }, + + {kPOPViewFrameCenterRotation, + ^(NSView *obj, CGFloat values[]) { + values[0] = obj.frameCenterRotation; + }, + ^(NSView *obj, const CGFloat values[]) { + obj.frameCenterRotation = values[0]; + }, + kPOPThresholdRotation + }, + + {kPOPViewBoundsRotation, + ^(NSView *obj, CGFloat values[]) { + values[0] = obj.boundsRotation; + }, + ^(NSView *obj, const CGFloat values[]) { + obj.boundsRotation = values[0]; + }, + kPOPThresholdRotation + }, + + /* NSWindow */ + + {kPOPWindowFrame, + ^(NSWindow *obj, CGFloat values[]) { + values_from_rect(values, NSRectToCGRect(obj.frame)); + }, + ^(NSWindow *obj, const CGFloat values[]) { + [obj setFrame:NSRectFromCGRect(values_to_rect(values)) display:YES]; + }, + kPOPThresholdPoint + }, + + {kPOPWindowAlphaValue, + ^(NSWindow *obj, CGFloat values[]) { + values[0] = obj.alphaValue; + }, + ^(NSWindow *obj, const CGFloat values[]) { + obj.alphaValue = values[0]; + }, + kPOPThresholdOpacity + }, + + {kPOPWindowBackgroundColor, + ^(NSWindow *obj, CGFloat values[]) { + POPNSColorGetRGBAComponents(obj.backgroundColor, values); + }, + ^(NSWindow *obj, const CGFloat values[]) { + obj.backgroundColor = POPNSColorRGBACreate(values); + }, + kPOPThresholdColor + }, + +#endif + +#if SCENEKIT_SDK_AVAILABLE + + /* SceneKit */ + + {kPOPSCNNodePosition, + ^(SCNNode *obj, CGFloat values[]) { + values_from_vec3(values, obj.position); + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.position = values_to_vec3(values); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodePositionX, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.position.x; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.position = SCNVector3Make(values[0], obj.position.y, obj.position.z); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodePositionY, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.position.y; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.position = SCNVector3Make(obj.position.x, values[0], obj.position.z); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodePositionZ, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.position.z; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.position = SCNVector3Make(obj.position.x, obj.position.y, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeTranslation, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.transform.m41; + values[1] = obj.transform.m42; + values[2] = obj.transform.m43; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.transform = SCNMatrix4MakeTranslation(values[0], values[1], values[2]); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeTranslationX, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.transform.m41; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.transform = SCNMatrix4MakeTranslation(values[0], obj.transform.m42, obj.transform.m43); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeTranslationY, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.transform.m42; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.transform = SCNMatrix4MakeTranslation(obj.transform.m41, values[0], obj.transform.m43); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeTranslationY, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.transform.m43; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.transform = SCNMatrix4MakeTranslation(obj.transform.m41, obj.transform.m42, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeRotation, + ^(SCNNode *obj, CGFloat values[]) { + values_from_vec4(values, obj.rotation); + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.rotation = values_to_vec4(values); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeRotationX, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.rotation.x; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.rotation = SCNVector4Make(1.0, obj.rotation.y, obj.rotation.z, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeRotationY, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.rotation.y; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.rotation = SCNVector4Make(obj.rotation.x, 1.0, obj.rotation.z, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeRotationZ, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.rotation.z; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.rotation = SCNVector4Make(obj.rotation.x, obj.rotation.y, 1.0, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeRotationW, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.rotation.w; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.rotation = SCNVector4Make(obj.rotation.x, obj.rotation.y, obj.rotation.z, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeEulerAngles, + ^(SCNNode *obj, CGFloat values[]) { + values_from_vec3(values, obj.eulerAngles); + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.eulerAngles = values_to_vec3(values); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeEulerAnglesX, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.eulerAngles.x; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.eulerAngles = SCNVector3Make(values[0], obj.eulerAngles.y, obj.eulerAngles.z); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeEulerAnglesY, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.eulerAngles.y; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.eulerAngles = SCNVector3Make(obj.eulerAngles.x, values[0], obj.eulerAngles.z); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeEulerAnglesZ, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.eulerAngles.z; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.eulerAngles = SCNVector3Make(obj.eulerAngles.x, obj.eulerAngles.y, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeOrientation, + ^(SCNNode *obj, CGFloat values[]) { + values_from_vec4(values, obj.orientation); + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.orientation = values_to_vec4(values); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeOrientationX, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.orientation.x; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.orientation = SCNVector4Make(values[0], obj.orientation.y, obj.orientation.z, obj.orientation.w); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeOrientationY, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.orientation.y; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.orientation = SCNVector4Make(obj.orientation.x, values[0], obj.orientation.z, obj.orientation.w); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeOrientationZ, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.orientation.z; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.orientation = SCNVector4Make(obj.orientation.x, obj.orientation.y, values[0], obj.orientation.w); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeOrientationW, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.orientation.w; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.orientation = SCNVector4Make(obj.orientation.x, obj.orientation.y, obj.orientation.z, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeScale, + ^(SCNNode *obj, CGFloat values[]) { + values_from_vec3(values, obj.scale); + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.scale = values_to_vec3(values); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeScaleX, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.scale.x; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.scale = SCNVector3Make(values[0], obj.scale.y, obj.scale.z); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeScaleY, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.scale.y; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.position = SCNVector3Make(obj.scale.x, values[0], obj.scale.z); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeScaleZ, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.scale.z; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.scale = SCNVector3Make(obj.scale.x, obj.scale.y, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeScaleXY, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.scale.x; + values[1] = obj.scale.y; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.scale = SCNVector3Make(values[0], values[1], obj.scale.z); + }, + kPOPThresholdScale + }, + +#endif + +}; + +static NSUInteger staticIndexWithName(NSString *aName) +{ + NSUInteger idx = 0; + + while (idx < POP_ARRAY_COUNT(_staticStates)) { + if ([_staticStates[idx].name isEqualToString:aName]) + return idx; + idx++; + } + + return NSNotFound; +} + +/** + Concrete static property class. + */ +@interface POPStaticAnimatableProperty : POPAnimatableProperty +{ +@public + POPStaticAnimatablePropertyState *_state; +} +@end + +@implementation POPStaticAnimatableProperty + +- (NSString *)name +{ + return _state->name; +} + +- (pop_animatable_read_block)readBlock +{ + return _state->readBlock; +} + +- (pop_animatable_write_block)writeBlock +{ + return _state->writeBlock; +} + +- (CGFloat)threshold +{ + return _state->threshold; +} + +@end + +#pragma mark - Concrete + +/** + Concrete immutable property class. + */ +@interface POPConcreteAnimatableProperty : POPAnimatableProperty +- (instancetype)initWithName:(NSString *)name readBlock:(pop_animatable_read_block)read writeBlock:(pop_animatable_write_block)write threshold:(CGFloat)threshold; +@end + +@implementation POPConcreteAnimatableProperty + +// default synthesis +@synthesize name, readBlock, writeBlock, threshold; + +- (instancetype)initWithName:(NSString *)aName readBlock:(pop_animatable_read_block)aReadBlock writeBlock:(pop_animatable_write_block)aWriteBlock threshold:(CGFloat)aThreshold +{ + self = [super init]; + if (nil != self) { + name = [aName copy]; + readBlock = [aReadBlock copy]; + writeBlock = [aWriteBlock copy]; + threshold = aThreshold; + } + return self; +} +@end + +#pragma mark - Mutable + +@implementation POPMutableAnimatableProperty + +// default synthesis +@synthesize name, readBlock, writeBlock, threshold; + +@end + +#pragma mark - Cluster + +/** + Singleton placeholder property class to support class cluster. + */ +@interface POPPlaceholderAnimatableProperty : POPAnimatableProperty + +@end + +@implementation POPPlaceholderAnimatableProperty + +// default synthesis +@synthesize name, readBlock, writeBlock, threshold; + +@end + +/** + Cluster class. + */ +@implementation POPAnimatableProperty + +// avoid creating backing ivars +@dynamic name, readBlock, writeBlock, threshold; + +static POPAnimatableProperty *placeholder = nil; + ++ (void)initialize +{ + if (self == [POPAnimatableProperty class]) { + placeholder = [POPPlaceholderAnimatableProperty alloc]; + } +} + ++ (id)allocWithZone:(struct _NSZone *)zone +{ + if (self == [POPAnimatableProperty class]) { + if (nil == placeholder) { + placeholder = [super allocWithZone:zone]; + } + return placeholder; + } + return [super allocWithZone:zone]; +} + +- (id)copyWithZone:(NSZone *)zone +{ + if ([self isKindOfClass:[POPMutableAnimatableProperty class]]) { + POPConcreteAnimatableProperty *copyProperty = [[POPConcreteAnimatableProperty alloc] initWithName:self.name readBlock:self.readBlock writeBlock:self.writeBlock threshold:self.threshold]; + return copyProperty; + } else { + return self; + } +} + +- (id)mutableCopyWithZone:(NSZone *)zone +{ + POPMutableAnimatableProperty *copyProperty = [[POPMutableAnimatableProperty alloc] init]; + copyProperty.name = self.name; + copyProperty.readBlock = self.readBlock; + copyProperty.writeBlock = self.writeBlock; + copyProperty.threshold = self.threshold; + return copyProperty; +} + ++ (id)propertyWithName:(NSString *)aName +{ + return [self propertyWithName:aName initializer:NULL]; +} + ++ (id)propertyWithName:(NSString *)aName initializer:(void (^)(POPMutableAnimatableProperty *prop))aBlock +{ + POPAnimatableProperty *prop = nil; + + static NSMutableDictionary *_propertyDict = nil; + if (nil == _propertyDict) { + _propertyDict = [[NSMutableDictionary alloc] initWithCapacity:10]; + } + + prop = _propertyDict[aName]; + if (nil != prop) { + return prop; + } + + NSUInteger staticIdx = staticIndexWithName(aName); + + if (NSNotFound != staticIdx) { + POPStaticAnimatableProperty *staticProp = [[POPStaticAnimatableProperty alloc] init]; + staticProp->_state = &_staticStates[staticIdx]; + _propertyDict[aName] = staticProp; + prop = staticProp; + } else if (NULL != aBlock) { + POPMutableAnimatableProperty *mutableProp = [[POPMutableAnimatableProperty alloc] init]; + mutableProp.name = aName; + mutableProp.threshold = 1.0; + aBlock(mutableProp); + prop = [mutableProp copy]; + } + + return prop; +} + +- (NSString *)description +{ + NSMutableString *s = [NSMutableString stringWithFormat:@"%@ name:%@ threshold:%f", super.description, self.name, self.threshold]; + return s; +} + +@end diff --git a/BreakingBad/Pods/pop/pop/POPAnimation.h b/BreakingBad/Pods/pop/pop/POPAnimation.h new file mode 100644 index 0000000..3c710f2 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPAnimation.h @@ -0,0 +1,188 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import +#import + +@class CAMediaTimingFunction; + +/** + @abstract The abstract animation base class. + @discussion Instantiate and use one of the concrete animation subclasses. + */ +@interface POPAnimation : NSObject + +/** + @abstract The name of the animation. + @discussion Optional property to help identify the animation. + */ +@property (copy, nonatomic) NSString *name; + +/** + @abstract The beginTime of the animation in media time. + @discussion Defaults to 0 and starts immediately. + */ +@property (assign, nonatomic) CFTimeInterval beginTime; + +/** + @abstract The animation delegate. + @discussion See {@ref POPAnimationDelegate} for details. + */ +@property (weak, nonatomic) id delegate; + +/** + @abstract The animation tracer. + @discussion Returns the existing tracer, creating one if needed. Call start/stop on the tracer to toggle event collection. + */ +@property (readonly, nonatomic) POPAnimationTracer *tracer; + +/** + @abstract Optional block called on animation start. + */ +@property (copy, nonatomic) void (^animationDidStartBlock)(POPAnimation *anim); + +/** + @abstract Optional block called when value meets or exceeds to value. + */ +@property (copy, nonatomic) void (^animationDidReachToValueBlock)(POPAnimation *anim); + +/** + @abstract Optional block called on animation completion. + */ +@property (copy, nonatomic) void (^completionBlock)(POPAnimation *anim, BOOL finished); + +/** + @abstract Optional block called each frame animation is applied. + */ +@property (copy, nonatomic) void (^animationDidApplyBlock)(POPAnimation *anim); + +/** + @abstract Flag indicating whether animation should be removed on completion. + @discussion Setting to NO can facilitate animation reuse. Defaults to YES. + */ +@property (assign, nonatomic) BOOL removedOnCompletion; + +/** + @abstract Flag indicating whether animation is paused. + @discussion A paused animation is excluded from the list of active animations. On initial creation, defaults to YES. On animation addition, the animation is implicity unpaused. On animation completion, the animation is implicity paused including for animations with removedOnCompletion set to NO. + */ +@property (assign, nonatomic, getter = isPaused) BOOL paused; + +/** + @abstract Flag indicating whether animation autoreverses. + @discussion An animation that autoreverses will have twice the duration before it is considered finished. It will animate to the toValue, stop, then animate back to the original fromValue. The delegate methods are called as follows: + + 1) animationDidStart: is called at the beginning, as usual, and then after each toValue is reached and the autoreverse is going to start. + 2) animationDidReachToValue: is called every time the toValue is reached. The toValue is swapped with the fromValue at the end of each animation segment. This means that with autoreverses set to YES, the animationDidReachToValue: delegate method will be called a minimum of twice. + 3) animationDidStop:finished: is called every time the toValue is reached, the finished argument will be NO if the autoreverse is not yet complete. + */ +@property (assign, nonatomic) BOOL autoreverses; + +/** + @abstract The number of times to repeat the animation. + @discussion A repeatCount of 0 or 1 means that the animation will not repeat, just like Core Animation. A repeatCount of 2 or greater means that the animation will run that many times before stopping. The delegate methods are called as follows: + + 1) animationDidStart: is called at the beginning of each animation repeat. + 2) animationDidReachToValue: is called every time the toValue is reached. + 3) animationDidStop:finished: is called every time the toValue is reached, the finished argument will be NO if the autoreverse is not yet complete. + +When combined with the autoreverses property, a singular animation is effectively twice as long. + */ +@property (assign, nonatomic) NSInteger repeatCount; + +/** + @abstract Repeat the animation forever. + @discussion This property will make the animation repeat forever. The value of the repeatCount property is undefined when this property is set. The finished parameter of the delegate callback animationDidStop:finished: will always be NO. + */ +@property (assign, nonatomic) BOOL repeatForever; + +@end + +/** + @abstract The animation delegate. + */ +@protocol POPAnimationDelegate +@optional + +/** + @abstract Called on animation start. + @param anim The relevant animation. + */ +- (void)pop_animationDidStart:(POPAnimation *)anim; + +/** + @abstract Called when value meets or exceeds to value. + @param anim The relevant animation. + */ +- (void)pop_animationDidReachToValue:(POPAnimation *)anim; + +/** + @abstract Called on animation stop. + @param anim The relevant animation. + @param finished Flag indicating finished state. Flag is true if the animation reached completion before being removed. + */ +- (void)pop_animationDidStop:(POPAnimation *)anim finished:(BOOL)finished; + +/** + @abstract Called each frame animation is applied. + @param anim The relevant animation. + */ +- (void)pop_animationDidApply:(POPAnimation *)anim; + +@end + + +@interface NSObject (POP) + +/** + @abstract Add an animation to the reciver. + @param anim The animation to add. + @param key The key used to identify the animation. + @discussion The 'key' may be any string such that only one animation per unique key is added per object. + */ +- (void)pop_addAnimation:(POPAnimation *)anim forKey:(NSString *)key; + +/** + @abstract Remove all animations attached to the receiver. + */ +- (void)pop_removeAllAnimations; + +/** + @abstract Remove any animation attached to the receiver for 'key'. + @param key The key used to identify the animation. + */ +- (void)pop_removeAnimationForKey:(NSString *)key; + +/** + @abstract Returns an array containing the keys of all animations currently attached to the receiver. + @param The order of keys reflects the order in which animations will be applied. + */ +- (NSArray *)pop_animationKeys; + +/** + @abstract Returns any animation attached to the receiver. + @param key The key used to identify the animation. + @returns The animation currently attached, or nil if no such animation exists. + */ +- (id)pop_animationForKey:(NSString *)key; + +@end + +/** + * This implementation of NSCopying does not do any copying of animation's state, but only configuration. + * i.e. you cannot copy an animation and expect to apply it to a view and have the copied animation pick up where the original left off. + * Two common uses of copying animations: + * * you need to apply the same animation to multiple different views. + * * you need to absolutely ensure that the the caller of your function cannot mutate the animation once it's been passed in. + */ +@interface POPAnimation (NSCopying) + +@end diff --git a/BreakingBad/Pods/pop/pop/POPAnimation.mm b/BreakingBad/Pods/pop/pop/POPAnimation.mm new file mode 100644 index 0000000..75bdeb1 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPAnimation.mm @@ -0,0 +1,303 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "POPAnimationExtras.h" +#import "POPAnimationInternal.h" + +#import + +#import "POPAction.h" +#import "POPAnimationRuntime.h" +#import "POPAnimationTracerInternal.h" +#import "POPAnimatorPrivate.h" + +using namespace POP; + +#pragma mark - POPAnimation + +@implementation POPAnimation +@synthesize solver = _solver; +@synthesize currentValue = _currentValue; +@synthesize progressMarkers = _progressMarkers; + +#pragma mark - Lifecycle + +- (id)init +{ + [NSException raise:NSStringFromClass([self class]) format:@"Attempting to instantiate an abstract class. Use a concrete subclass instead."]; + return nil; +} + +- (id)_init +{ + self = [super init]; + if (nil != self) { + [self _initState]; + } + return self; +} + +- (void)_initState +{ + _state = new POPAnimationState(self); +} + +- (void)dealloc +{ + if (_state) { + delete _state; + _state = NULL; + }; +} + +#pragma mark - Properties + +- (id)delegate +{ + return _state->delegate; +} + +- (void)setDelegate:(id)delegate +{ + _state->setDelegate(delegate); +} + +- (BOOL)isPaused +{ + return _state->paused; +} + +- (void)setPaused:(BOOL)paused +{ + _state->setPaused(paused ? true : false); +} + +- (NSInteger)repeatCount +{ + if (_state->autoreverses) { + return _state->repeatCount / 2; + } else { + return _state->repeatCount; + } +} + +- (void)setRepeatCount:(NSInteger)repeatCount +{ + if (repeatCount > 0) { + if (repeatCount > NSIntegerMax / 2) { + repeatCount = NSIntegerMax / 2; + } + + if (_state->autoreverses) { + _state->repeatCount = (repeatCount * 2); + } else { + _state->repeatCount = repeatCount; + } + } +} + +- (BOOL)autoreverses +{ + return _state->autoreverses; +} + +- (void)setAutoreverses:(BOOL)autoreverses +{ + _state->autoreverses = autoreverses; + if (autoreverses) { + if (_state->repeatCount == 0) { + [self setRepeatCount:1]; + } + } +} + +FB_PROPERTY_GET(POPAnimationState, type, POPAnimationType); +DEFINE_RW_PROPERTY_OBJ_COPY(POPAnimationState, animationDidStartBlock, setAnimationDidStartBlock:, POPAnimationDidStartBlock); +DEFINE_RW_PROPERTY_OBJ_COPY(POPAnimationState, animationDidReachToValueBlock, setAnimationDidReachToValueBlock:, POPAnimationDidReachToValueBlock); +DEFINE_RW_PROPERTY_OBJ_COPY(POPAnimationState, completionBlock, setCompletionBlock:, POPAnimationCompletionBlock); +DEFINE_RW_PROPERTY_OBJ_COPY(POPAnimationState, animationDidApplyBlock, setAnimationDidApplyBlock:, POPAnimationDidApplyBlock); +DEFINE_RW_PROPERTY_OBJ_COPY(POPAnimationState, name, setName:, NSString*); +DEFINE_RW_PROPERTY(POPAnimationState, beginTime, setBeginTime:, CFTimeInterval); +DEFINE_RW_FLAG(POPAnimationState, removedOnCompletion, removedOnCompletion, setRemovedOnCompletion:); +DEFINE_RW_FLAG(POPAnimationState, repeatForever, repeatForever, setRepeatForever:); + +- (id)valueForUndefinedKey:(NSString *)key +{ + return _state->dict[key]; +} + +- (void)setValue:(id)value forUndefinedKey:(NSString *)key +{ + if (!value) { + [_state->dict removeObjectForKey:key]; + } else { + if (!_state->dict) + _state->dict = [[NSMutableDictionary alloc] init]; + _state->dict[key] = value; + } +} + +- (POPAnimationTracer *)tracer +{ + if (!_state->tracer) { + _state->tracer = [[POPAnimationTracer alloc] initWithAnimation:self]; + } + return _state->tracer; +} + +- (NSString *)description +{ + NSMutableString *s = [NSMutableString stringWithFormat:@"<%@:%p", NSStringFromClass([self class]), self]; + [self _appendDescription:s debug:NO]; + [s appendString:@">"]; + return s; +} + +- (NSString *)debugDescription +{ + NSMutableString *s = [NSMutableString stringWithFormat:@"<%@:%p", NSStringFromClass([self class]), self]; + [self _appendDescription:s debug:YES]; + [s appendString:@">"]; + return s; +} + +#pragma mark - Utility + +POPAnimationState *POPAnimationGetState(POPAnimation *a) +{ + return a->_state; +} + +- (BOOL)_advance:(id)object currentTime:(CFTimeInterval)currentTime elapsedTime:(CFTimeInterval)elapsedTime +{ + return YES; +} + +- (void)_appendDescription:(NSMutableString *)s debug:(BOOL)debug +{ + if (_state->name) + [s appendFormat:@"; name = %@", _state->name]; + + if (!self.removedOnCompletion) + [s appendFormat:@"; removedOnCompletion = %@", POPStringFromBOOL(self.removedOnCompletion)]; + + if (debug) { + if (_state->active) + [s appendFormat:@"; active = %@", POPStringFromBOOL(_state->active)]; + + if (_state->paused) + [s appendFormat:@"; paused = %@", POPStringFromBOOL(_state->paused)]; + } + + if (_state->beginTime) { + [s appendFormat:@"; beginTime = %f", _state->beginTime]; + } + + for (NSString *key in _state->dict) { + [s appendFormat:@"; %@ = %@", key, _state->dict[key]]; + } +} + +@end + + +#pragma mark - POPPropertyAnimation + +#pragma mark - POPBasicAnimation + +#pragma mark - POPDecayAnimation + +@implementation NSObject (POP) + +- (void)pop_addAnimation:(POPAnimation *)anim forKey:(NSString *)key +{ + [[POPAnimator sharedAnimator] addAnimation:anim forObject:self key:key]; +} + +- (void)pop_removeAllAnimations +{ + [[POPAnimator sharedAnimator] removeAllAnimationsForObject:self]; +} + +- (void)pop_removeAnimationForKey:(NSString *)key +{ + [[POPAnimator sharedAnimator] removeAnimationForObject:self key:key]; +} + +- (NSArray *)pop_animationKeys +{ + return [[POPAnimator sharedAnimator] animationKeysForObject:self]; +} + +- (id)pop_animationForKey:(NSString *)key +{ + return [[POPAnimator sharedAnimator] animationForObject:self key:key]; +} + +@end + +@implementation NSProxy (POP) + +- (void)pop_addAnimation:(POPAnimation *)anim forKey:(NSString *)key +{ + [[POPAnimator sharedAnimator] addAnimation:anim forObject:self key:key]; +} + +- (void)pop_removeAllAnimations +{ + [[POPAnimator sharedAnimator] removeAllAnimationsForObject:self]; +} + +- (void)pop_removeAnimationForKey:(NSString *)key +{ + [[POPAnimator sharedAnimator] removeAnimationForObject:self key:key]; +} + +- (NSArray *)pop_animationKeys +{ + return [[POPAnimator sharedAnimator] animationKeysForObject:self]; +} + +- (id)pop_animationForKey:(NSString *)key +{ + return [[POPAnimator sharedAnimator] animationForObject:self key:key]; +} + +@end + +@implementation POPAnimation (NSCopying) + +- (instancetype)copyWithZone:(NSZone *)zone +{ + /* + * Must use [self class] instead of POPAnimation so that subclasses can call this via super. + * Even though POPAnimation and POPPropertyAnimation throw exceptions on init, + * it's safe to call it since you can only copy objects that have been successfully created. + */ + POPAnimation *copy = [[[self class] allocWithZone:zone] init]; + + if (copy) { + copy.name = self.name; + copy.beginTime = self.beginTime; + copy.delegate = self.delegate; + copy.animationDidStartBlock = self.animationDidStartBlock; + copy.animationDidReachToValueBlock = self.animationDidReachToValueBlock; + copy.completionBlock = self.completionBlock; + copy.animationDidApplyBlock = self.animationDidApplyBlock; + copy.removedOnCompletion = self.removedOnCompletion; + + copy.autoreverses = self.autoreverses; + copy.repeatCount = self.repeatCount; + copy.repeatForever = self.repeatForever; + } + + return copy; +} + +@end \ No newline at end of file diff --git a/BreakingBad/Pods/pop/pop/POPAnimationEvent.h b/BreakingBad/Pods/pop/pop/POPAnimationEvent.h new file mode 100644 index 0000000..e761091 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPAnimationEvent.h @@ -0,0 +1,69 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +/** + @abstract Enumeraton of animation event types. + */ +typedef NS_ENUM(NSUInteger, POPAnimationEventType) { + kPOPAnimationEventPropertyRead = 0, + kPOPAnimationEventPropertyWrite, + kPOPAnimationEventToValueUpdate, + kPOPAnimationEventFromValueUpdate, + kPOPAnimationEventVelocityUpdate, + kPOPAnimationEventBouncinessUpdate, + kPOPAnimationEventSpeedUpdate, + kPOPAnimationEventFrictionUpdate, + kPOPAnimationEventMassUpdate, + kPOPAnimationEventTensionUpdate, + kPOPAnimationEventDidStart, + kPOPAnimationEventDidStop, + kPOPAnimationEventDidReachToValue, + kPOPAnimationEventAutoreversed +}; + +/** + @abstract The base animation event class. + */ +@interface POPAnimationEvent : NSObject + +/** + @abstract The event type. See {@ref POPAnimationEventType} for possible values. + */ +@property (readonly, nonatomic, assign) POPAnimationEventType type; + +/** + @abstract The time of event. + */ +@property (readonly, nonatomic, assign) CFTimeInterval time; + +/** + @abstract Optional string describing the animation at time of event. + */ +@property (readonly, nonatomic, copy) NSString *animationDescription; + +@end + +/** + @abstract An animation event subclass for recording value and velocity. + */ +@interface POPAnimationValueEvent : POPAnimationEvent + +/** + @abstract The value recorded. + */ +@property (readonly, nonatomic, strong) id value; + +/** + @abstract The velocity recorded, if any. + */ +@property (readonly, nonatomic, strong) id velocity; + +@end diff --git a/BreakingBad/Pods/pop/pop/POPAnimationEvent.mm b/BreakingBad/Pods/pop/pop/POPAnimationEvent.mm new file mode 100644 index 0000000..d3a13b6 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPAnimationEvent.mm @@ -0,0 +1,108 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "POPAnimationEvent.h" +#import "POPAnimationEventInternal.h" + +static NSString *stringFromType(POPAnimationEventType aType) +{ + switch (aType) { + case kPOPAnimationEventPropertyRead: + return @"read"; + case kPOPAnimationEventPropertyWrite: + return @"write"; + case kPOPAnimationEventToValueUpdate: + return @"toValue"; + case kPOPAnimationEventFromValueUpdate: + return @"fromValue"; + case kPOPAnimationEventVelocityUpdate: + return @"velocity"; + case kPOPAnimationEventSpeedUpdate: + return @"speed"; + case kPOPAnimationEventBouncinessUpdate: + return @"bounciness"; + case kPOPAnimationEventFrictionUpdate: + return @"friction"; + case kPOPAnimationEventMassUpdate: + return @"mass"; + case kPOPAnimationEventTensionUpdate: + return @"tension"; + case kPOPAnimationEventDidStart: + return @"didStart"; + case kPOPAnimationEventDidStop: + return @"didStop"; + case kPOPAnimationEventDidReachToValue: + return @"didReachToValue"; + case kPOPAnimationEventAutoreversed: + return @"autoreversed"; + default: + return nil; + } +} + +@implementation POPAnimationEvent +@synthesize type = _type; +@synthesize time = _time; +@synthesize animationDescription = _animationDescription; + +- (instancetype)initWithType:(POPAnimationEventType)aType time:(CFTimeInterval)aTime +{ + self = [super init]; + if (nil != self) { + _type = aType; + _time = aTime; + } + return self; +} + +- (NSString *)description +{ + NSMutableString *s = [NSMutableString stringWithFormat:@""]; + return s; +} + +// subclass override +- (void)_appendDescription:(NSMutableString *)s +{ + if (0 != _animationDescription.length) { + [s appendFormat:@"; animation = %@", _animationDescription]; + } +} + +@end + +@implementation POPAnimationValueEvent +@synthesize value = _value; +@synthesize velocity = _velocity; + +- (instancetype)initWithType:(POPAnimationEventType)aType time:(CFTimeInterval)aTime value:(id)aValue +{ + self = [self initWithType:aType time:aTime]; + if (nil != self) { + _value = aValue; + } + return self; +} + +- (void)_appendDescription:(NSMutableString *)s +{ + [super _appendDescription:s]; + + if (nil != _value) { + [s appendFormat:@"; value = %@", _value]; + } + + if (nil != _velocity) { + [s appendFormat:@"; velocity = %@", _velocity]; + } +} + +@end diff --git a/BreakingBad/Pods/pop/pop/POPAnimationEventInternal.h b/BreakingBad/Pods/pop/pop/POPAnimationEventInternal.h new file mode 100644 index 0000000..398d59b --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPAnimationEventInternal.h @@ -0,0 +1,41 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "POPAnimationEvent.h" + +@interface POPAnimationEvent () + +/** + @abstract Default initializer. + */ +- (instancetype)initWithType:(POPAnimationEventType)type time:(CFTimeInterval)time; + +/** + @abstract Readwrite redefinition of public property. + */ +@property (readwrite, nonatomic, copy) NSString *animationDescription; + +@end + +@interface POPAnimationValueEvent () + +/** + @abstract Default initializer. + */ +- (instancetype)initWithType:(POPAnimationEventType)type time:(CFTimeInterval)time value:(id)value; + +/** + @abstract Readwrite redefinition of public property. + */ +@property (readwrite, nonatomic, strong) id velocity; + +@end + diff --git a/BreakingBad/Pods/pop/pop/POPAnimationExtras.h b/BreakingBad/Pods/pop/pop/POPAnimationExtras.h new file mode 100644 index 0000000..4b3d237 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPAnimationExtras.h @@ -0,0 +1,43 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import +#import + +/** + @abstract The current drag coefficient. + @discussion A value greater than 1.0 indicates Simulator slow-motion animations are enabled. Defaults to 1.0. + */ +extern CGFloat POPAnimationDragCoefficient(); + +@interface CAAnimation (POPAnimationExtras) + +/** + @abstract Apply the current drag coefficient to animation speed. + @discussion Convenience utility to respect Simulator slow-motion animation settings. + */ +- (void)pop_applyDragCoefficient; + +@end + +@interface POPSpringAnimation (POPAnimationExtras) + +/** + @abstract Converts from spring bounciness and speed to tension, friction and mass dynamics values. + */ ++ (void)convertBounciness:(CGFloat)bounciness speed:(CGFloat)speed toTension:(CGFloat *)outTension friction:(CGFloat *)outFriction mass:(CGFloat *)outMass; + +/** + @abstract Converts from dynamics tension, friction and mass to spring bounciness and speed values. + */ ++ (void)convertTension:(CGFloat)tension friction:(CGFloat)friction toBounciness:(CGFloat *)outBounciness speed:(CGFloat *)outSpeed; + +@end diff --git a/BreakingBad/Pods/pop/pop/POPAnimationExtras.mm b/BreakingBad/Pods/pop/pop/POPAnimationExtras.mm new file mode 100644 index 0000000..0a6d6c9 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPAnimationExtras.mm @@ -0,0 +1,117 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "POPAnimationExtras.h" +#import "POPAnimationPrivate.h" + +#if TARGET_OS_IPHONE +#import +#endif + +#if TARGET_IPHONE_SIMULATOR +UIKIT_EXTERN float UIAnimationDragCoefficient(); // UIKit private drag coeffient, use judiciously +#endif + +#import "POPMath.h" + +CGFloat POPAnimationDragCoefficient() +{ +#if TARGET_IPHONE_SIMULATOR + return UIAnimationDragCoefficient(); +#else + return 1.0; +#endif +} + +@implementation CAAnimation (POPAnimationExtras) + +- (void)pop_applyDragCoefficient +{ + CGFloat k = POPAnimationDragCoefficient(); + if (k != 0 && k != 1) + self.speed = 1 / k; +} + +@end + +@implementation POPSpringAnimation (POPAnimationExtras) + +static const CGFloat POPBouncy3NormalizationRange = 20.0; +static const CGFloat POPBouncy3NormalizationScale = 1.7; +static const CGFloat POPBouncy3BouncinessNormalizedMin = 0.0; +static const CGFloat POPBouncy3BouncinessNormalizedMax = 0.8; +static const CGFloat POPBouncy3SpeedNormalizedMin = 0.5; +static const CGFloat POPBouncy3SpeedNormalizedMax = 200; +static const CGFloat POPBouncy3FrictionInterpolationMax = 0.01; + ++ (void)convertBounciness:(CGFloat)bounciness speed:(CGFloat)speed toTension:(CGFloat *)outTension friction:(CGFloat *)outFriction mass:(CGFloat *)outMass +{ + double b = POPNormalize(bounciness / POPBouncy3NormalizationScale, 0, POPBouncy3NormalizationRange); + b = POPProjectNormal(b, POPBouncy3BouncinessNormalizedMin, POPBouncy3BouncinessNormalizedMax); + + double s = POPNormalize(speed / POPBouncy3NormalizationScale, 0, POPBouncy3NormalizationRange); + + CGFloat tension = POPProjectNormal(s, POPBouncy3SpeedNormalizedMin, POPBouncy3SpeedNormalizedMax); + CGFloat friction = POPQuadraticOutInterpolation(b, POPBouncy3NoBounce(tension), POPBouncy3FrictionInterpolationMax); + + tension = POP_ANIMATION_TENSION_FOR_QC_TENSION(tension); + friction = POP_ANIMATION_FRICTION_FOR_QC_FRICTION(friction); + + if (outTension) { + *outTension = tension; + } + + if (outFriction) { + *outFriction = friction; + } + + if (outMass) { + *outMass = 1.0; + } +} + ++ (void)convertTension:(CGFloat)tension friction:(CGFloat)friction toBounciness:(CGFloat *)outBounciness speed:(CGFloat *)outSpeed +{ + // Convert to QC values, in which our calculations are done. + CGFloat qcFriction = QC_FRICTION_FOR_POP_ANIMATION_FRICTION(friction); + CGFloat qcTension = QC_TENSION_FOR_POP_ANIMATION_TENSION(tension); + + // Friction is a function of bounciness and tension, according to the following: + // friction = POPQuadraticOutInterpolation(b, POPBouncy3NoBounce(tension), POPBouncy3FrictionInterpolationMax); + // Solve for bounciness, given a tension and friction. + + CGFloat nobounceTension = POPBouncy3NoBounce(qcTension); + CGFloat bounciness1, bounciness2; + + POPQuadraticSolve((nobounceTension - POPBouncy3FrictionInterpolationMax), // a + 2 * (POPBouncy3FrictionInterpolationMax - nobounceTension), // b + (nobounceTension - qcFriction), // c + bounciness1, // x1 + bounciness2); // x2 + + + // Choose the quadratic solution within the normalized bounciness range + CGFloat projectedNormalizedBounciness = (bounciness2 < POPBouncy3BouncinessNormalizedMax) ? bounciness2 : bounciness1; + CGFloat projectedNormalizedSpeed = qcTension; + + // Reverse projection + normalization + CGFloat bounciness = ((POPBouncy3NormalizationRange * POPBouncy3NormalizationScale) / (POPBouncy3BouncinessNormalizedMax - POPBouncy3BouncinessNormalizedMin)) * (projectedNormalizedBounciness - POPBouncy3BouncinessNormalizedMin); + CGFloat speed = ((POPBouncy3NormalizationRange * POPBouncy3NormalizationScale) / (POPBouncy3SpeedNormalizedMax - POPBouncy3SpeedNormalizedMin)) * (projectedNormalizedSpeed - POPBouncy3SpeedNormalizedMin); + + // Write back results + if (outBounciness) { + *outBounciness = bounciness; + } + + if (outSpeed) { + *outSpeed = speed; + } +} + +@end diff --git a/BreakingBad/Pods/pop/pop/POPAnimationInternal.h b/BreakingBad/Pods/pop/pop/POPAnimationInternal.h new file mode 100644 index 0000000..317364f --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPAnimationInternal.h @@ -0,0 +1,505 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "POPAnimation.h" + +#import + +#import "POPAction.h" +#import "POPAnimationRuntime.h" +#import "POPAnimationTracerInternal.h" +#import "POPSpringSolver.h" + +using namespace POP; + +/** + Enumeration of supported animation types. + */ +enum POPAnimationType +{ + kPOPAnimationSpring, + kPOPAnimationDecay, + kPOPAnimationBasic, + kPOPAnimationCustom, +}; + +typedef struct +{ + CGFloat progress; + bool reached; +} POPProgressMarker; + +typedef void (^POPAnimationDidStartBlock)(POPAnimation *anim); +typedef void (^POPAnimationDidReachToValueBlock)(POPAnimation *anim); +typedef void (^POPAnimationCompletionBlock)(POPAnimation *anim, BOOL finished); +typedef void (^POPAnimationDidApplyBlock)(POPAnimation *anim); + +@interface POPAnimation() +- (instancetype)_init; + +@property (assign, nonatomic) SpringSolver4d *solver; +@property (readonly, nonatomic) POPAnimationType type; + +/** + The current animation value, updated while animation is progressing. + */ +@property (copy, nonatomic, readonly) id currentValue; + +/** + An array of optional progress markers. For each marker specified, the animation delegate will be informed when progress meets or exceeds the value specified. Specifying values outside of the [0, 1] range will give undefined results. + */ +@property (copy, nonatomic) NSArray *progressMarkers; + +/** + Return YES to indicate animation should continue animating. + */ +- (BOOL)_advance:(id)object currentTime:(CFTimeInterval)currentTime elapsedTime:(CFTimeInterval)elapsedTime; + +/** + Subclass override point to append animation description. + */ +- (void)_appendDescription:(NSMutableString *)s debug:(BOOL)debug; + +@end + +NS_INLINE NSString *describe(VectorConstRef vec) +{ + return NULL == vec ? @"null" : vec->toString(); +} + +NS_INLINE Vector4r vector4(VectorConstRef vec) +{ + return NULL == vec ? Vector4r::Zero() : vec->vector4r(); +} + +NS_INLINE Vector4d vector4d(VectorConstRef vec) +{ + if (NULL == vec) { + return Vector4d::Zero(); + } else { + return vec->vector4r().cast(); + } +} + +NS_INLINE bool vec_equal(VectorConstRef v1, VectorConstRef v2) +{ + if (v1 == v2) { + return true; + } + if (!v1 || !v2) { + return false; + } + return *v1 == *v2; +} + +NS_INLINE CGFloat * vec_data(VectorRef vec) +{ + return NULL == vec ? NULL : vec->data(); +} + +template +struct ComputeProgressFunctor { + CGFloat operator()(const T &value, const T &start, const T &end) const { + return 0; + } +}; + +template<> +struct ComputeProgressFunctor { + CGFloat operator()(const Vector4r &value, const Vector4r &start, const Vector4r &end) const { + CGFloat s = (value - start).squaredNorm(); // distance from start + CGFloat e = (value - end).squaredNorm(); // distance from end + CGFloat d = (end - start).squaredNorm(); // distance from start to end + + if (0 == d) { + return 1; + } else if (s > e) { + // s -------- p ---- e OR s ------- e ---- p + return sqrtr(s/d); + } else { + // s --- p --------- e OR p ---- s ------- e + return 1 - sqrtr(e/d); + } + } +}; + +struct _POPAnimationState; +struct _POPDecayAnimationState; +struct _POPPropertyAnimationState; + +extern _POPAnimationState *POPAnimationGetState(POPAnimation *a); + + +#define FB_FLAG_GET(stype, flag, getter) \ +- (BOOL)getter { \ + return ((stype *)_state)->flag; \ +} + +#define FB_FLAG_SET(stype, flag, mutator) \ +- (void)mutator (BOOL)value { \ + if (value == ((stype *)_state)->flag) \ + return; \ + ((stype *)_state)->flag = value; \ +} + +#define DEFINE_RW_FLAG(stype, flag, getter, mutator) \ + FB_FLAG_GET (stype, flag, getter) \ + FB_FLAG_SET (stype, flag, mutator) + +#define FB_PROPERTY_GET(stype, property, ctype) \ +- (ctype)property { \ + return ((stype *)_state)->property; \ +} + +#define FB_PROPERTY_SET(stype, property, mutator, ctype, ...) \ +- (void)mutator (ctype)value { \ + if (value == ((stype *)_state)->property) \ + return; \ + ((stype *)_state)->property = value; \ + __VA_ARGS__ \ +} + +#define FB_PROPERTY_SET_OBJ_COPY(stype, property, mutator, ctype, ...) \ +- (void)mutator (ctype)value { \ + if (value == ((stype *)_state)->property) \ + return; \ + ((stype *)_state)->property = [value copy]; \ + __VA_ARGS__ \ +} + +#define DEFINE_RW_PROPERTY(stype, flag, mutator, ctype, ...) \ + FB_PROPERTY_GET (stype, flag, ctype) \ + FB_PROPERTY_SET (stype, flag, mutator, ctype, __VA_ARGS__) + +#define DEFINE_RW_PROPERTY_OBJ(stype, flag, mutator, ctype, ...) \ + FB_PROPERTY_GET (stype, flag, ctype) \ + FB_PROPERTY_SET (stype, flag, mutator, ctype, __VA_ARGS__) + +#define DEFINE_RW_PROPERTY_OBJ_COPY(stype, flag, mutator, ctype, ...) \ + FB_PROPERTY_GET (stype, flag, ctype) \ + FB_PROPERTY_SET_OBJ_COPY (stype, flag, mutator, ctype, __VA_ARGS__) + + +/** + Internal delegate definition. + */ +@interface NSObject (POPAnimationDelegateInternal) +- (void)pop_animation:(POPAnimation *)anim didReachProgress:(CGFloat)progress; +@end + +struct _POPAnimationState +{ + id __unsafe_unretained self; + POPAnimationType type; + NSString *name; + NSUInteger ID; + CFTimeInterval beginTime; + CFTimeInterval startTime; + CFTimeInterval lastTime; + id __weak delegate; + POPAnimationDidStartBlock animationDidStartBlock; + POPAnimationDidReachToValueBlock animationDidReachToValueBlock; + POPAnimationCompletionBlock completionBlock; + POPAnimationDidApplyBlock animationDidApplyBlock; + NSMutableDictionary *dict; + POPAnimationTracer *tracer; + CGFloat progress; + NSInteger repeatCount; + + bool active:1; + bool paused:1; + bool removedOnCompletion:1; + + bool delegateDidStart:1; + bool delegateDidStop:1; + bool delegateDidProgress:1; + bool delegateDidApply:1; + bool delegateDidReachToValue:1; + + bool additive:1; + bool didReachToValue:1; + bool tracing:1; // corresponds to tracer started + bool userSpecifiedDynamics:1; + bool autoreverses:1; + bool repeatForever:1; + bool customFinished:1; + + _POPAnimationState(id __unsafe_unretained anim) : + self(anim), + type((POPAnimationType)0), + name(nil), + ID(0), + beginTime(0), + startTime(0), + lastTime(0), + delegate(nil), + animationDidStartBlock(nil), + animationDidReachToValueBlock(nil), + completionBlock(nil), + animationDidApplyBlock(nil), + dict(nil), + tracer(nil), + progress(0), + repeatCount(0), + active(false), + paused(true), + removedOnCompletion(true), + delegateDidStart(false), + delegateDidStop(false), + delegateDidProgress(false), + delegateDidApply(false), + delegateDidReachToValue(false), + additive(false), + didReachToValue(false), + tracing(false), + userSpecifiedDynamics(false), + autoreverses(false), + repeatForever(false), + customFinished(false) {} + + virtual ~_POPAnimationState() + { + name = nil; + dict = nil; + tracer = nil; + animationDidStartBlock = NULL; + animationDidReachToValueBlock = NULL; + completionBlock = NULL; + animationDidApplyBlock = NULL; + } + + bool isCustom() { + return kPOPAnimationCustom == type; + } + + bool isStarted() { + return 0 != startTime; + } + + id getDelegate() { + return delegate; + } + + void setDelegate(id d) { + if (d != delegate) { + delegate = d; + delegateDidStart = [d respondsToSelector:@selector(pop_animationDidStart:)]; + delegateDidStop = [d respondsToSelector:@selector(pop_animationDidStop:finished:)]; + delegateDidProgress = [d respondsToSelector:@selector(pop_animation:didReachProgress:)]; + delegateDidApply = [d respondsToSelector:@selector(pop_animationDidApply:)]; + delegateDidReachToValue = [d respondsToSelector:@selector(pop_animationDidReachToValue:)]; + } + } + + bool getPaused() { + return paused; + } + + void setPaused(bool f) { + if (f != paused) { + paused = f; + if (!paused) { + reset(false); + } + } + } + + CGFloat getProgress() { + return progress; + } + + /* returns true if started */ + bool startIfNeeded(id obj, CFTimeInterval time, CFTimeInterval offset) + { + bool started = false; + + // detect start based on time + if (0 == startTime && time >= beginTime + offset) { + + // activate & unpause + active = true; + setPaused(false); + + // note start time + startTime = lastTime = time; + started = true; + } + + // ensure values for running animation + bool running = active && !paused; + if (running) { + willRun(started, obj); + } + + // handle start + if (started) { + handleDidStart(); + } + + return started; + } + + void stop(bool removing, bool done) { + if (active) + { + // delegate progress one last time + if (done) { + delegateProgress(); + } + + if (removing) { + active = false; + } + + handleDidStop(done); + } else { + + // stopped before even started + // delegate start and stop regardless; matches CA behavior + if (!isStarted()) { + handleDidStart(); + handleDidStop(false); + } + } + + setPaused(true); + } + + virtual void handleDidStart() + { + if (delegateDidStart) { + ActionEnabler enabler; + [delegate pop_animationDidStart:self]; + } + + POPAnimationDidStartBlock block = animationDidStartBlock; + if (block != NULL) { + ActionEnabler enabler; + block(self); + } + + if (tracing) { + [tracer didStart]; + } + } + + void handleDidStop(BOOL done) + { + if (delegateDidStop) { + ActionEnabler enabler; + [delegate pop_animationDidStop:self finished:done]; + } + + // add another strong reference to completion block before callout + POPAnimationCompletionBlock block = completionBlock; + if (block != NULL) { + ActionEnabler enabler; + block(self, done); + } + + if (tracing) { + [tracer didStop:done]; + } + } + + /* virtual functions */ + virtual bool isDone() { + if (isCustom()) { + return customFinished; + } + + return false; + } + + bool advanceTime(CFTimeInterval time, id obj) { + bool advanced = false; + bool computedProgress = false; + CFTimeInterval dt = time - lastTime; + + switch (type) { + case kPOPAnimationSpring: + advanced = advance(time, dt, obj); + break; + case kPOPAnimationDecay: + advanced = advance(time, dt, obj); + break; + case kPOPAnimationBasic: { + advanced = advance(time, dt, obj); + computedProgress = true; + break; + } + case kPOPAnimationCustom: { + customFinished = [self _advance:obj currentTime:time elapsedTime:dt] ? false : true; + advanced = true; + break; + } + default: + break; + } + + if (advanced) { + + // estimate progress + if (!computedProgress) { + computeProgress(); + } + + // delegate progress + delegateProgress(); + + // update time + lastTime = time; + } + + return advanced; + } + + virtual void willRun(bool started, id obj) {} + virtual bool advance(CFTimeInterval time, CFTimeInterval dt, id obj) { return false; } + virtual void computeProgress() {} + virtual void delegateProgress() {} + + virtual void delegateApply() { + if (delegateDidApply) { + ActionEnabler enabler; + [delegate pop_animationDidApply:self]; + } + + POPAnimationDidApplyBlock block = animationDidApplyBlock; + if (block != NULL) { + ActionEnabler enabler; + block(self); + } + } + + virtual void reset(bool all) { + startTime = 0; + lastTime = 0; + } +}; + +typedef struct _POPAnimationState POPAnimationState; + + +@interface POPAnimation () +{ +@protected + struct _POPAnimationState *_state; +} + +@end + +// NSProxy extensions, for testing pursposes +@interface NSProxy (POP) +- (void)pop_addAnimation:(POPAnimation *)anim forKey:(NSString *)key; +- (void)pop_removeAllAnimations; +- (void)pop_removeAnimationForKey:(NSString *)key; +- (NSArray *)pop_animationKeys; +- (POPAnimation *)pop_animationForKey:(NSString *)key; +@end diff --git a/BreakingBad/Pods/pop/pop/POPAnimationPrivate.h b/BreakingBad/Pods/pop/pop/POPAnimationPrivate.h new file mode 100644 index 0000000..c0f06c5 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPAnimationPrivate.h @@ -0,0 +1,16 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#define POP_ANIMATION_FRICTION_FOR_QC_FRICTION(qcFriction) (25.0 + (((qcFriction - 8.0) / 2.0) * (25.0 - 19.0))) +#define POP_ANIMATION_TENSION_FOR_QC_TENSION(qcTension) (194.0 + (((qcTension - 30.0) / 50.0) * (375.0 - 194.0))) + +#define QC_FRICTION_FOR_POP_ANIMATION_FRICTION(fbFriction) (8.0 + 2.0 * ((fbFriction - 25.0)/(25.0 - 19.0))) +#define QC_TENSION_FOR_POP_ANIMATION_TENSION(fbTension) (30.0 + 50.0 * ((fbTension - 194.0)/(375.0 - 194.0))) diff --git a/BreakingBad/Pods/pop/pop/POPAnimationRuntime.h b/BreakingBad/Pods/pop/pop/POPAnimationRuntime.h new file mode 100644 index 0000000..902c312 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPAnimationRuntime.h @@ -0,0 +1,103 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "POPVector.h" + +enum POPValueType +{ + kPOPValueUnknown = 0, + kPOPValueInteger, + kPOPValueFloat, + kPOPValuePoint, + kPOPValueSize, + kPOPValueRect, + kPOPValueEdgeInsets, + kPOPValueAffineTransform, + kPOPValueTransform, + kPOPValueRange, + kPOPValueColor, + kPOPValueSCNVector3, + kPOPValueSCNVector4, +}; + +using namespace POP; + +/** + Returns value type based on objc type description, given list of supported value types and length. + */ +extern POPValueType POPSelectValueType(const char *objctype, const POPValueType *types, size_t length); + +/** + Returns value type based on objc object, given a list of supported value types and length. + */ +extern POPValueType POPSelectValueType(id obj, const POPValueType *types, size_t length); + +/** + Array of all value types. + */ +extern const POPValueType kPOPAnimatableAllTypes[12]; + +/** + Array of all value types supported for animation. + */ +extern const POPValueType kPOPAnimatableSupportTypes[10]; + +/** + Returns a string description of a value type. + */ +extern NSString *POPValueTypeToString(POPValueType t); + +/** + Returns a mutable dictionary of weak pointer keys to weak pointer values. + */ +extern CFMutableDictionaryRef POPDictionaryCreateMutableWeakPointerToWeakPointer(NSUInteger capacity) CF_RETURNS_RETAINED; + +/** + Returns a mutable dictionary of weak pointer keys to weak pointer values. + */ +extern CFMutableDictionaryRef POPDictionaryCreateMutableWeakPointerToStrongObject(NSUInteger capacity) CF_RETURNS_RETAINED; + +/** + Box a vector. + */ +extern id POPBox(VectorConstRef vec, POPValueType type, bool force = false); + +/** + Unbox a vector. + */ +extern VectorRef POPUnbox(id value, POPValueType &type, NSUInteger &count, bool validate); + +/** + Read/write block typedefs for convenience. + */ +typedef void(^pop_animatable_read_block)(id obj, CGFloat *value); +typedef void(^pop_animatable_write_block)(id obj, const CGFloat *value); + +/** + Read object value and return a Vector4r. + */ +NS_INLINE Vector4r read_values(pop_animatable_read_block read, id obj, size_t count) +{ + Vector4r vec = Vector4r::Zero(); + if (0 == count) + return vec; + + read(obj, vec.data()); + + return vec; +} + +NS_INLINE NSString *POPStringFromBOOL(BOOL value) +{ + return value ? @"YES" : @"NO"; +} diff --git a/BreakingBad/Pods/pop/pop/POPAnimationRuntime.mm b/BreakingBad/Pods/pop/pop/POPAnimationRuntime.mm new file mode 100644 index 0000000..371e009 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPAnimationRuntime.mm @@ -0,0 +1,329 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "POPAnimationRuntime.h" + +#import + +#import + +#if TARGET_OS_IPHONE +#import +#endif + +#import "POPCGUtils.h" +#import "POPDefines.h" +#import "POPGeometry.h" +#import "POPVector.h" + +static Boolean pointerEqual(const void *ptr1, const void *ptr2) { + return ptr1 == ptr2; +} + +static CFHashCode pointerHash(const void *ptr) { + return (CFHashCode)(ptr); +} + +CFMutableDictionaryRef POPDictionaryCreateMutableWeakPointerToWeakPointer(NSUInteger capacity) +{ + CFDictionaryKeyCallBacks kcb = kCFTypeDictionaryKeyCallBacks; + + // weak, pointer keys + kcb.retain = NULL; + kcb.release = NULL; + kcb.equal = pointerEqual; + kcb.hash = pointerHash; + + CFDictionaryValueCallBacks vcb = kCFTypeDictionaryValueCallBacks; + + // weak, pointer values + vcb.retain = NULL; + vcb.release = NULL; + vcb.equal = pointerEqual; + + return CFDictionaryCreateMutable(NULL, capacity, &kcb, &vcb); +} + +CFMutableDictionaryRef POPDictionaryCreateMutableWeakPointerToStrongObject(NSUInteger capacity) +{ + CFDictionaryKeyCallBacks kcb = kCFTypeDictionaryKeyCallBacks; + + // weak, pointer keys + kcb.retain = NULL; + kcb.release = NULL; + kcb.equal = pointerEqual; + kcb.hash = pointerHash; + + // strong, object values + CFDictionaryValueCallBacks vcb = kCFTypeDictionaryValueCallBacks; + + return CFDictionaryCreateMutable(NULL, capacity, &kcb, &vcb); +} + +static bool FBCompareTypeEncoding(const char *objctype, POPValueType type) +{ + switch (type) + { + case kPOPValueFloat: + return (strcmp(objctype, @encode(float)) == 0 + || strcmp(objctype, @encode(double)) == 0 + ); + + case kPOPValuePoint: + return (strcmp(objctype, @encode(CGPoint)) == 0 +#if !TARGET_OS_IPHONE + || strcmp(objctype, @encode(NSPoint)) == 0 +#endif + ); + + case kPOPValueSize: + return (strcmp(objctype, @encode(CGSize)) == 0 +#if !TARGET_OS_IPHONE + || strcmp(objctype, @encode(NSSize)) == 0 +#endif + ); + + case kPOPValueRect: + return (strcmp(objctype, @encode(CGRect)) == 0 +#if !TARGET_OS_IPHONE + || strcmp(objctype, @encode(NSRect)) == 0 +#endif + ); + case kPOPValueEdgeInsets: +#if TARGET_OS_IPHONE + return strcmp(objctype, @encode(UIEdgeInsets)) == 0; +#else + return false; +#endif + + case kPOPValueAffineTransform: + return strcmp(objctype, @encode(CGAffineTransform)) == 0; + + case kPOPValueTransform: + return strcmp(objctype, @encode(CATransform3D)) == 0; + + case kPOPValueRange: + return strcmp(objctype, @encode(CFRange)) == 0 + || strcmp(objctype, @encode (NSRange)) == 0; + + case kPOPValueInteger: + return (strcmp(objctype, @encode(int)) == 0 + || strcmp(objctype, @encode(unsigned int)) == 0 + || strcmp(objctype, @encode(short)) == 0 + || strcmp(objctype, @encode(unsigned short)) == 0 + || strcmp(objctype, @encode(long)) == 0 + || strcmp(objctype, @encode(unsigned long)) == 0 + || strcmp(objctype, @encode(long long)) == 0 + || strcmp(objctype, @encode(unsigned long long)) == 0 + ); + + case kPOPValueSCNVector3: +#if SCENEKIT_SDK_AVAILABLE + return strcmp(objctype, @encode(SCNVector3)) == 0; +#else + return false; +#endif + + case kPOPValueSCNVector4: +#if SCENEKIT_SDK_AVAILABLE + return strcmp(objctype, @encode(SCNVector4)) == 0; +#else + return false; +#endif + + default: + return false; + } +} + +POPValueType POPSelectValueType(const char *objctype, const POPValueType *types, size_t length) +{ + if (NULL != objctype) { + for (size_t idx = 0; idx < length; idx++) { + if (FBCompareTypeEncoding(objctype, types[idx])) + return types[idx]; + } + } + return kPOPValueUnknown; +} + +POPValueType POPSelectValueType(id obj, const POPValueType *types, size_t length) +{ + if ([obj isKindOfClass:[NSValue class]]) { + return POPSelectValueType([obj objCType], types, length); + } else if (NULL != POPCGColorWithColor(obj)) { + return kPOPValueColor; + } + return kPOPValueUnknown; +} + +const POPValueType kPOPAnimatableAllTypes[12] = {kPOPValueInteger, kPOPValueFloat, kPOPValuePoint, kPOPValueSize, kPOPValueRect, kPOPValueEdgeInsets, kPOPValueAffineTransform, kPOPValueTransform, kPOPValueRange, kPOPValueColor, kPOPValueSCNVector3, kPOPValueSCNVector4}; + +const POPValueType kPOPAnimatableSupportTypes[10] = {kPOPValueInteger, kPOPValueFloat, kPOPValuePoint, kPOPValueSize, kPOPValueRect, kPOPValueEdgeInsets, kPOPValueColor, kPOPValueSCNVector3, kPOPValueSCNVector4}; + +NSString *POPValueTypeToString(POPValueType t) +{ + switch (t) { + case kPOPValueUnknown: + return @"unknown"; + case kPOPValueInteger: + return @"int"; + case kPOPValueFloat: + return @"CGFloat"; + case kPOPValuePoint: + return @"CGPoint"; + case kPOPValueSize: + return @"CGSize"; + case kPOPValueRect: + return @"CGRect"; + case kPOPValueEdgeInsets: + return @"UIEdgeInsets"; + case kPOPValueAffineTransform: + return @"CGAffineTransform"; + case kPOPValueTransform: + return @"CATransform3D"; + case kPOPValueRange: + return @"CFRange"; + case kPOPValueColor: + return @"CGColorRef"; + case kPOPValueSCNVector3: + return @"SCNVector3"; + case kPOPValueSCNVector4: + return @"SCNVector4"; + default: + return nil; + } +} + +id POPBox(VectorConstRef vec, POPValueType type, bool force) +{ + if (NULL == vec) + return nil; + + switch (type) { + case kPOPValueInteger: + case kPOPValueFloat: + return @(vec->data()[0]); + break; + case kPOPValuePoint: + return [NSValue valueWithCGPoint:vec->cg_point()]; + break; + case kPOPValueSize: + return [NSValue valueWithCGSize:vec->cg_size()]; + break; + case kPOPValueRect: + return [NSValue valueWithCGRect:vec->cg_rect()]; + break; +#if TARGET_OS_IPHONE + case kPOPValueEdgeInsets: + return [NSValue valueWithUIEdgeInsets:vec->ui_edge_insets()]; + break; +#endif + case kPOPValueColor: { + return (__bridge_transfer id)vec->cg_color(); + break; + } +#if SCENEKIT_SDK_AVAILABLE + case kPOPValueSCNVector3: { + return [NSValue valueWithSCNVector3:vec->scn_vector3()]; + break; + } + case kPOPValueSCNVector4: { + return [NSValue valueWithSCNVector4:vec->scn_vector4()]; + break; + } +#endif + default: + return force ? [NSValue valueWithCGPoint:vec->cg_point()] : nil; + break; + } +} + +static VectorRef vectorize(id value, POPValueType type) +{ + Vector *vec = NULL; + + switch (type) { + case kPOPValueInteger: + case kPOPValueFloat: +#if CGFLOAT_IS_DOUBLE + vec = Vector::new_cg_float([value doubleValue]); +#else + vec = Vector::new_cg_float([value floatValue]); +#endif + break; + case kPOPValuePoint: + vec = Vector::new_cg_point([value CGPointValue]); + break; + case kPOPValueSize: + vec = Vector::new_cg_size([value CGSizeValue]); + break; + case kPOPValueRect: + vec = Vector::new_cg_rect([value CGRectValue]); + break; +#if TARGET_OS_IPHONE + case kPOPValueEdgeInsets: + vec = Vector::new_ui_edge_insets([value UIEdgeInsetsValue]); + break; +#endif + case kPOPValueAffineTransform: + vec = Vector::new_cg_affine_transform([value CGAffineTransformValue]); + break; + case kPOPValueColor: + vec = Vector::new_cg_color(POPCGColorWithColor(value)); + break; +#if SCENEKIT_SDK_AVAILABLE + case kPOPValueSCNVector3: + vec = Vector::new_scn_vector3([value SCNVector3Value]); + break; + case kPOPValueSCNVector4: + vec = Vector::new_scn_vector4([value SCNVector4Value]); + break; +#endif + default: + break; + } + + return VectorRef(vec); +} + +VectorRef POPUnbox(id value, POPValueType &animationType, NSUInteger &count, bool validate) +{ + if (nil == value) { + count = 0; + return VectorRef(NULL); + } + + // determine type of value + POPValueType valueType = POPSelectValueType(value, kPOPAnimatableSupportTypes, POP_ARRAY_COUNT(kPOPAnimatableSupportTypes)); + + // handle unknown types + if (kPOPValueUnknown == valueType) { + NSString *valueDesc = [[value class] description]; + [NSException raise:@"Unsuported value" format:@"Animating %@ values is not supported", valueDesc]; + } + + // vectorize + VectorRef vec = vectorize(value, valueType); + + if (kPOPValueUnknown == animationType || 0 == count) { + // update animation type based on value type + animationType = valueType; + if (NULL != vec) { + count = vec->size(); + } + } else if (validate) { + // allow for mismatched types, so long as vector size matches + if (count != vec->size()) { + [NSException raise:@"Invalid value" format:@"%@ should be of type %@", value, POPValueTypeToString(animationType)]; + } + } + + return vec; +} diff --git a/BreakingBad/Pods/pop/pop/POPAnimationTracer.h b/BreakingBad/Pods/pop/pop/POPAnimationTracer.h new file mode 100644 index 0000000..72b26c3 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPAnimationTracer.h @@ -0,0 +1,60 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +@class POPAnimation; + +/** + @abstract Tracer of animation events to fasciliate unit testing & debugging. + */ +@interface POPAnimationTracer : NSObject + +/** + @abstract Start recording events. + */ +- (void)start; + +/** + @abstract Stop recording events. + */ +- (void)stop; + +/** + @abstract Resets any recoded events. Continues recording events if already started. + */ +- (void)reset; + +/** + @abstract Property representing all recorded events. + @discussion Events are returned in order of occurence. + */ +@property (nonatomic, assign, readonly) NSArray *allEvents; + +/** + @abstract Property representing all recorded write events for convenience. + @discussion Events are returned in order of occurence. + */ +@property (nonatomic, assign, readonly) NSArray *writeEvents; + +/** + @abstract Queries for events of specified type. + @param type The type of event to return. + @returns An array of events of specified type in order of occurence. + */ +- (NSArray *)eventsWithType:(POPAnimationEventType)type; + +/** + @abstract Property indicating whether tracer should automatically log events and reset collection on animation completion. + */ +@property (nonatomic, assign) BOOL shouldLogAndResetOnCompletion; + +@end diff --git a/BreakingBad/Pods/pop/pop/POPAnimationTracer.mm b/BreakingBad/Pods/pop/pop/POPAnimationTracer.mm new file mode 100644 index 0000000..243fb9b --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPAnimationTracer.mm @@ -0,0 +1,191 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "POPAnimationTracer.h" + +#import + +#import "POPAnimationEventInternal.h" +#import "POPAnimationInternal.h" +#import "POPSpringAnimation.h" + +@implementation POPAnimationTracer +{ + __weak POPAnimation *_animation; + POPAnimationState *_animationState; + NSMutableArray *_events; + BOOL _animationHasVelocity; +} +@synthesize shouldLogAndResetOnCompletion = _shouldLogAndResetOnCompletion; + +static POPAnimationEvent *create_event(POPAnimationTracer *self, POPAnimationEventType type, id value = nil, bool recordAnimation = false) +{ + bool useLocalTime = 0 != self->_animationState->startTime; + CFTimeInterval time = useLocalTime + ? self->_animationState->lastTime - self->_animationState->startTime + : self->_animationState->lastTime; + + POPAnimationEvent *event; + + if (!value) { + event = [[POPAnimationEvent alloc] initWithType:type time:time]; + } else { + event = [[POPAnimationValueEvent alloc] initWithType:type time:time value:value]; + if (self->_animationHasVelocity) { + [(POPAnimationValueEvent *)event setVelocity:[(POPSpringAnimation *)self->_animation velocity]]; + } + } + + if (recordAnimation) { + event.animationDescription = [self->_animation description]; + } + + return event; +} + +- (id)initWithAnimation:(POPAnimation *)anAnim +{ + self = [super init]; + if (nil != self) { + _animation = anAnim; + _animationState = POPAnimationGetState(anAnim); + _events = [[NSMutableArray alloc] initWithCapacity:50]; + _animationHasVelocity = [anAnim respondsToSelector:@selector(velocity)]; + } + return self; +} + +- (void)readPropertyValue:(id)aValue +{ + POPAnimationEvent *event = create_event(self, kPOPAnimationEventPropertyRead, aValue); + [_events addObject:event]; +} + +- (void)writePropertyValue:(id)aValue +{ + POPAnimationEvent *event = create_event(self, kPOPAnimationEventPropertyWrite, aValue); + [_events addObject:event]; +} + +- (void)updateToValue:(id)aValue +{ + POPAnimationEvent *event = create_event(self, kPOPAnimationEventToValueUpdate, aValue); + [_events addObject:event]; +} + +- (void)updateFromValue:(id)aValue +{ + POPAnimationEvent *event = create_event(self, kPOPAnimationEventFromValueUpdate, aValue); + [_events addObject:event]; +} + +- (void)updateVelocity:(id)aValue +{ + POPAnimationEvent *event = create_event(self, kPOPAnimationEventVelocityUpdate, aValue); + [_events addObject:event]; +} + +- (void)updateSpeed:(float)aFloat +{ + POPAnimationEvent *event = create_event(self, kPOPAnimationEventSpeedUpdate, @(aFloat)); + [_events addObject:event]; +} + +- (void)updateBounciness:(float)aFloat +{ + POPAnimationEvent *event = create_event(self, kPOPAnimationEventBouncinessUpdate, @(aFloat)); + [_events addObject:event]; +} + +- (void)updateFriction:(float)aFloat +{ + POPAnimationEvent *event = create_event(self, kPOPAnimationEventFrictionUpdate, @(aFloat)); + [_events addObject:event]; +} + +- (void)updateMass:(float)aFloat +{ + POPAnimationEvent *event = create_event(self, kPOPAnimationEventMassUpdate, @(aFloat)); + [_events addObject:event]; +} + +- (void)updateTension:(float)aFloat +{ + POPAnimationEvent *event = create_event(self, kPOPAnimationEventTensionUpdate, @(aFloat)); + [_events addObject:event]; +} + +- (void)didStart +{ + POPAnimationEvent *event = create_event(self, kPOPAnimationEventDidStart, nil, true); + [_events addObject:event]; +} + +- (void)didStop:(BOOL)finished +{ + POPAnimationEvent *event = create_event(self, kPOPAnimationEventDidStop, @(finished), true); + [_events addObject:event]; + + if (_shouldLogAndResetOnCompletion) { + NSLog(@"events:%@", self.allEvents); + [self reset]; + } +} + +- (void)didReachToValue:(id)aValue +{ + POPAnimationEvent *event = create_event(self, kPOPAnimationEventDidReachToValue, aValue); + [_events addObject:event]; +} + +- (void)autoreversed +{ + POPAnimationEvent *event = create_event(self, kPOPAnimationEventAutoreversed); + [_events addObject:event]; +} + +- (void)start +{ + POPAnimationState *s = POPAnimationGetState(_animation); + s->tracing = true; +} + +- (void)stop +{ + POPAnimationState *s = POPAnimationGetState(_animation); + s->tracing = false; +} + +- (void)reset +{ + [_events removeAllObjects]; +} + +- (NSArray *)allEvents +{ + return [_events copy]; +} + +- (NSArray *)writeEvents +{ + return [self eventsWithType:kPOPAnimationEventPropertyWrite]; +} + +- (NSArray *)eventsWithType:(POPAnimationEventType)aType +{ + NSMutableArray *array = [NSMutableArray array]; + for (POPAnimationEvent *event in _events) { + if (aType == event.type) { + [array addObject:event]; + } + } + return array; +} + +@end diff --git a/BreakingBad/Pods/pop/pop/POPAnimationTracerInternal.h b/BreakingBad/Pods/pop/pop/POPAnimationTracerInternal.h new file mode 100644 index 0000000..00958e1 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPAnimationTracerInternal.h @@ -0,0 +1,96 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +@interface POPAnimationTracer (Internal) + +/** + @abstract Designated initalizer. Pass the animation being traced. + */ +- (instancetype)initWithAnimation:(POPAnimation *)anAnim; + +/** + @abstract Records read value. + */ +- (void)readPropertyValue:(id)aValue; + +/** + @abstract Records write value. + */ +- (void)writePropertyValue:(id)aValue; + +/** + Records to value update. + */ +- (void)updateToValue:(id)aValue; + +/** + @abstract Records from value update. + */ +- (void)updateFromValue:(id)aValue; + +/** + @abstract Records from value update. + */ +- (void)updateVelocity:(id)aValue; + +/** + @abstract Records bounciness update. + */ +- (void)updateBounciness:(float)aFloat; + +/** + @abstract Records speed update. + */ +- (void)updateSpeed:(float)aFloat; + +/** + @abstract Records friction update. + */ +- (void)updateFriction:(float)aFloat; + +/** + @abstract Records mass update. + */ +- (void)updateMass:(float)aFloat; + +/** + @abstract Records tension update. + */ +- (void)updateTension:(float)aFloat; + +/** + @abstract Records did add. + */ +- (void)didAdd; + +/** + @abstract Records did start. + */ +- (void)didStart; + +/** + @abstract Records did stop. + */ +- (void)didStop:(BOOL)finished; + +/** + @abstract Records did reach to value. + */ +- (void)didReachToValue:(id)aValue; + +/** + @abstract Records when an autoreverse animation takes place. + */ +- (void)autoreversed; + +@end diff --git a/BreakingBad/Pods/pop/pop/POPAnimator.h b/BreakingBad/Pods/pop/pop/POPAnimator.h new file mode 100644 index 0000000..5310bed --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPAnimator.h @@ -0,0 +1,47 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@protocol POPAnimatorDelegate; + +/** + @abstract The animator class renders animations. + */ +@interface POPAnimator : NSObject + +/** + @abstract The shared animator instance. + @discussion Consumers should generally use the shared instance in lieu of creating new instances. + */ ++ (instancetype)sharedAnimator; + +/** + @abstract The optional animator delegate. + */ +@property (weak, nonatomic) id delegate; + +@end + +/** + @abstract The animator delegate. + */ +@protocol POPAnimatorDelegate + +/** + @abstract Called on each frame before animation application. + */ +- (void)animatorWillAnimate:(POPAnimator *)animator; + +/** + @abstract Called on each frame after animation application. + */ +- (void)animatorDidAnimate:(POPAnimator *)animator; + +@end diff --git a/BreakingBad/Pods/pop/pop/POPAnimator.mm b/BreakingBad/Pods/pop/pop/POPAnimator.mm new file mode 100644 index 0000000..6b2a770 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPAnimator.mm @@ -0,0 +1,806 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "POPAnimator.h" +#import "POPAnimatorPrivate.h" + +#import +#import + +#if !TARGET_OS_IPHONE +#import +#endif + +#import + +#import + +#import "POPAnimation.h" +#import "POPAnimationExtras.h" +#import "POPBasicAnimationInternal.h" +#import "POPDecayAnimation.h" + +using namespace std; +using namespace POP; + +#define ENABLE_LOGGING_DEBUG 0 +#define ENABLE_LOGGING_INFO 0 + +#if ENABLE_LOGGING_DEBUG +#define FBLogAnimDebug NSLog +#else +#define FBLogAnimDebug(...) +#endif + +#if ENABLE_LOGGING_INFO +#define FBLogAnimInfo NSLog +#else +#define FBLogAnimInfo(...) +#endif + +class POPAnimatorItem +{ +public: + id __weak object; + NSString *key; + POPAnimation *animation; + NSInteger refCount; + id __unsafe_unretained unretainedObject; + + POPAnimatorItem(id o, NSString *k, POPAnimation *a) POP_NOTHROW + { + object = o; + key = [k copy]; + animation = a; + refCount = 1; + unretainedObject = o; + } + + ~POPAnimatorItem() + { + } + + bool operator==(const POPAnimatorItem& o) const { + return unretainedObject == o.unretainedObject && animation == o.animation && [key isEqualToString:o.key]; + } + +}; + +typedef std::shared_ptr POPAnimatorItemRef; +typedef std::shared_ptr POPAnimatorItemConstRef; + +typedef std::list POPAnimatorItemList; +typedef POPAnimatorItemList::iterator POPAnimatorItemListIterator; +typedef POPAnimatorItemList::const_iterator POPAnimatorItemListConstIterator; + +static BOOL _disableBackgroundThread = YES; + +@interface POPAnimator () +{ +#if TARGET_OS_IPHONE + CADisplayLink *_displayLink; +#else + CVDisplayLinkRef _displayLink; + int32_t _enqueuedRender; +#endif + POPAnimatorItemList _list; + CFMutableDictionaryRef _dict; + NSMutableArray *_observers; + POPAnimatorItemList _pendingList; + CFRunLoopObserverRef _pendingListObserver; + CFTimeInterval _slowMotionStartTime; + CFTimeInterval _slowMotionLastTime; + CFTimeInterval _slowMotionAccumulator; + CFTimeInterval _beginTime; + OSSpinLock _lock; + BOOL _disableDisplayLink; +} +@end + +@implementation POPAnimator +@synthesize delegate = _delegate; +@synthesize disableDisplayLink = _disableDisplayLink; +@synthesize beginTime = _beginTime; + +#if !TARGET_OS_IPHONE +static CVReturn displayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp *now, const CVTimeStamp *outputTime, CVOptionFlags flagsIn, CVOptionFlags *flagsOut, void *context) +{ + if (_disableBackgroundThread) { + __unsafe_unretained POPAnimator *pa = (__bridge POPAnimator *)context; + int32_t* enqueuedRender = &pa->_enqueuedRender; + if (*enqueuedRender == 0) { + OSAtomicIncrement32(enqueuedRender); + dispatch_async(dispatch_get_main_queue(), ^{ + [(__bridge POPAnimator*)context render]; + OSAtomicDecrement32(enqueuedRender); + }); + } + } else { + [(__bridge POPAnimator*)context render]; + } + return kCVReturnSuccess; +} +#endif + +// call while holding lock +static void updateDisplayLink(POPAnimator *self) +{ + BOOL paused = (0 == self->_observers.count && self->_list.empty()) || self->_disableDisplayLink; + +#if TARGET_OS_IPHONE + if (paused != self->_displayLink.paused) { + FBLogAnimInfo(paused ? @"pausing display link" : @"unpausing display link"); + self->_displayLink.paused = paused; + } +#else + if (paused == CVDisplayLinkIsRunning(self->_displayLink)) { + FBLogAnimInfo(paused ? @"pausing display link" : @"unpausing display link"); + if (paused) { + CVDisplayLinkStop(self->_displayLink); + } else { + CVDisplayLinkStart(self->_displayLink); + } + } +#endif +} + +static void updateAnimatable(id obj, POPPropertyAnimationState *anim, bool shouldAvoidExtraneousWrite = false) +{ + // handle user-initiated stop or pause; hault animation + if (!anim->active || anim->paused) + return; + + if (anim->hasValue()) { + pop_animatable_write_block write = anim->property.writeBlock; + if (NULL == write) + return; + + // current animation value + VectorRef currentVec = anim->currentValue(); + + if (!anim->additive) { + + // if avoiding extraneous writes and we have a read block defined + if (shouldAvoidExtraneousWrite) { + + pop_animatable_read_block read = anim->property.readBlock; + if (read) { + // compare current animation value with object value + Vector4r currentValue = currentVec->vector4r(); + Vector4r objectValue = read_values(read, obj, anim->valueCount); + if (objectValue == currentValue) { + return; + } + } + } + + // update previous values; support animation convergence + anim->previous2Vec = anim->previousVec; + anim->previousVec = currentVec; + + // write value + write(obj, currentVec->data()); + if (anim->tracing) { + [anim->tracer writePropertyValue:POPBox(currentVec, anim->valueType, true)]; + } + } else { + pop_animatable_read_block read = anim->property.readBlock; + NSCAssert(read, @"additive requires an animatable property readBlock"); + if (NULL == read) { + return; + } + + // object value + Vector4r objectValue = read_values(read, obj, anim->valueCount); + + // current value + Vector4r currentValue = currentVec->vector4r(); + + // determine animation change + if (anim->previousVec) { + Vector4r previousValue = anim->previousVec->vector4r(); + currentValue -= previousValue; + } + + // avoid writing no change + if (shouldAvoidExtraneousWrite && currentValue == Vector4r::Zero()) { + return; + } + + // add to object value + currentValue += objectValue; + + // update previous values; support animation convergence + anim->previous2Vec = anim->previousVec; + anim->previousVec = currentVec; + + // write value + write(obj, currentValue.data()); + if (anim->tracing) { + [anim->tracer writePropertyValue:POPBox(currentVec, anim->valueType, true)]; + } + } + } +} + +static void applyAnimationTime(id obj, POPAnimationState *state, CFTimeInterval time) +{ + if (!state->advanceTime(time, obj)) { + return; + } + + POPPropertyAnimationState *ps = dynamic_cast(state); + if (NULL != ps) { + updateAnimatable(obj, ps); + } + + state->delegateApply(); +} + +static void applyAnimationToValue(id obj, POPAnimationState *state) +{ + POPPropertyAnimationState *ps = dynamic_cast(state); + + if (NULL != ps) { + + // finalize progress + ps->finalizeProgress(); + + // write to value, updating only if needed + updateAnimatable(obj, ps, true); + } + + state->delegateApply(); +} + +static POPAnimation *deleteDictEntry(POPAnimator *self, id __unsafe_unretained obj, NSString *key, BOOL cleanup = YES) +{ + POPAnimation *anim = nil; + + // lock + OSSpinLockLock(&self->_lock); + + NSMutableDictionary *keyAnimationsDict = (__bridge id)CFDictionaryGetValue(self->_dict, (__bridge void *)obj); + if (keyAnimationsDict) { + + anim = keyAnimationsDict[key]; + if (anim) { + + // remove key + [keyAnimationsDict removeObjectForKey:key]; + + // cleanup empty dictionaries + if (cleanup && 0 == keyAnimationsDict.count) { + CFDictionaryRemoveValue(self->_dict, (__bridge void *)obj); + } + } + } + + // unlock + OSSpinLockUnlock(&self->_lock); + return anim; +} + +static void stopAndCleanup(POPAnimator *self, POPAnimatorItemRef item, bool shouldRemove, bool finished) +{ + // remove + if (shouldRemove) { + deleteDictEntry(self, item->unretainedObject, item->key); + } + + // stop + POPAnimationState *state = POPAnimationGetState(item->animation); + state->stop(shouldRemove, finished); + + if (shouldRemove) { + // lock + OSSpinLockLock(&self->_lock); + + // find item in list + // may have already been removed on animationDidStop: + POPAnimatorItemListIterator find_iter = find(self->_list.begin(), self->_list.end(), item); + BOOL found = find_iter != self->_list.end(); + + if (found) { + self->_list.erase(find_iter); + } + + // unlock + OSSpinLockUnlock(&self->_lock); + } +} + ++ (id)sharedAnimator +{ + static POPAnimator* _animator = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _animator = [[POPAnimator alloc] init]; + }); + return _animator; +} + ++ (BOOL)disableBackgroundThread +{ + return _disableBackgroundThread; +} + ++ (void)setDisableBackgroundThread:(BOOL)flag +{ + _disableBackgroundThread = flag; +} + +#pragma mark - Lifecycle + +- (id)init +{ + self = [super init]; + if (nil == self) return nil; + +#if TARGET_OS_IPHONE + _displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(render)]; + _displayLink.paused = YES; + [_displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes]; +#else + CVDisplayLinkCreateWithActiveCGDisplays(&_displayLink); + CVDisplayLinkSetOutputCallback(_displayLink, displayLinkCallback, (__bridge void *)self); +#endif + + _dict = POPDictionaryCreateMutableWeakPointerToStrongObject(5); + _lock = OS_SPINLOCK_INIT; + + return self; +} + +- (void)dealloc +{ +#if TARGET_OS_IPHONE + [_displayLink invalidate]; +#else + CVDisplayLinkStop(_displayLink); + CVDisplayLinkRelease(_displayLink); +#endif + [self _clearPendingListObserver]; +} + +#pragma mark - Utility + +- (void)_processPendingList +{ + // rendering pending animations + CFTimeInterval time = [self _currentRenderTime]; + [self _renderTime:(0 != _beginTime) ? _beginTime : time items:_pendingList]; + + // lock + OSSpinLockLock(&_lock); + + // clear list and observer + _pendingList.clear(); + [self _clearPendingListObserver]; + + // unlock + OSSpinLockUnlock(&_lock); +} + +- (void)_clearPendingListObserver +{ + if (_pendingListObserver) { + CFRunLoopRemoveObserver(CFRunLoopGetMain(), _pendingListObserver, kCFRunLoopCommonModes); + CFRelease(_pendingListObserver); + _pendingListObserver = NULL; + } +} + +- (void)_scheduleProcessPendingList +{ + // see WebKit for magic numbers, eg http://trac.webkit.org/changeset/166540 + static const CFIndex CATransactionCommitRunLoopOrder = 2000000; + static const CFIndex POPAnimationApplyRunLoopOrder = CATransactionCommitRunLoopOrder - 1; + + // lock + OSSpinLockLock(&_lock); + + if (!_pendingListObserver) { + __weak POPAnimator *weakSelf = self; + + _pendingListObserver = CFRunLoopObserverCreateWithHandler(kCFAllocatorDefault, kCFRunLoopBeforeWaiting | kCFRunLoopExit, false, POPAnimationApplyRunLoopOrder, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) { + [weakSelf _processPendingList]; + }); + + if (_pendingListObserver) { + CFRunLoopAddObserver(CFRunLoopGetMain(), _pendingListObserver, kCFRunLoopCommonModes); + } + } + + // unlock + OSSpinLockUnlock(&_lock); +} + +- (void)_renderTime:(CFTimeInterval)time items:(std::list)items +{ + // begin transaction with actions disabled + [CATransaction begin]; + [CATransaction setDisableActions:YES]; + + // notify delegate + __strong __typeof__(_delegate) delegate = _delegate; + [delegate animatorWillAnimate:self]; + + // lock + OSSpinLockLock(&_lock); + + // count active animations + const NSUInteger count = items.size(); + if (0 == count) { + // unlock + OSSpinLockUnlock(&_lock); + } else { + // copy list into vector + std::vector vector{ items.begin(), items.end() }; + + // unlock + OSSpinLockUnlock(&_lock); + + for (auto item : vector) { + [self _renderTime:time item:item]; + } + } + + // notify observers + for (id observer in self.observers) { + [observer animatorDidAnimate:(id)self]; + } + + // lock + OSSpinLockLock(&_lock); + + // update display link + updateDisplayLink(self); + + // unlock + OSSpinLockUnlock(&_lock); + + // notify delegate and commit + [delegate animatorDidAnimate:self]; + [CATransaction commit]; +} + +- (void)_renderTime:(CFTimeInterval)time item:(POPAnimatorItemRef)item +{ + id obj = item->object; + POPAnimation *anim = item->animation; + POPAnimationState *state = POPAnimationGetState(anim); + + if (nil == obj) { + // object exists not; stop animating + NSAssert(item->unretainedObject, @"object should exist"); + stopAndCleanup(self, item, true, false); + } else { + + // start if needed + state->startIfNeeded(obj, time, _slowMotionAccumulator); + + // only run active, not paused animations + if (state->active && !state->paused) { + // object exists; animate + applyAnimationTime(obj, state, time); + + FBLogAnimDebug(@"time:%f running:%@", time, item->animation); + if (state->isDone()) { + // set end value + applyAnimationToValue(obj, state); + + state->repeatCount--; + if (state->repeatForever || state->repeatCount > 0) { + if ([anim isKindOfClass:[POPPropertyAnimation class]]) { + POPPropertyAnimation *propAnim = (POPPropertyAnimation *)anim; + id oldFromValue = propAnim.fromValue; + propAnim.fromValue = propAnim.toValue; + + if (state->autoreverses) { + if (state->tracing) { + [state->tracer autoreversed]; + } + + if (state->type == kPOPAnimationDecay) { + POPDecayAnimation *decayAnimation = (POPDecayAnimation *)propAnim; + decayAnimation.velocity = [decayAnimation reversedVelocity]; + } else { + propAnim.toValue = oldFromValue; + } + } else { + if (state->type == kPOPAnimationDecay) { + POPDecayAnimation *decayAnimation = (POPDecayAnimation *)propAnim; + id originalVelocity = decayAnimation.originalVelocity; + decayAnimation.velocity = originalVelocity; + } else { + propAnim.fromValue = oldFromValue; + } + } + } + + state->stop(NO, NO); + state->reset(true); + + state->startIfNeeded(obj, time, _slowMotionAccumulator); + } else { + stopAndCleanup(self, item, state->removedOnCompletion, YES); + } + } + } + } +} + +#pragma mark - API + +- (NSArray *)observers +{ + // lock + OSSpinLockLock(&_lock); + + // get observers + NSArray *observers = 0 != _observers.count ? [_observers copy] : nil; + + // unlock + OSSpinLockUnlock(&_lock); + return observers; +} + +- (void)addAnimation:(POPAnimation *)anim forObject:(id)obj key:(NSString *)key +{ + if (!anim || !obj) { + return; + } + + // support arbitrarily many nil keys + if (!key) { + key = [[NSUUID UUID] UUIDString]; + } + + // lock + OSSpinLockLock(&_lock); + + // get key, animation dict associated with object + NSMutableDictionary *keyAnimationDict = (__bridge id)CFDictionaryGetValue(_dict, (__bridge void *)obj); + + // update associated animation state + if (nil == keyAnimationDict) { + keyAnimationDict = [NSMutableDictionary dictionary]; + CFDictionarySetValue(_dict, (__bridge void *)obj, (__bridge void *)keyAnimationDict); + } else { + // if the animation instance already exists, avoid cancelling only to restart + POPAnimation *existingAnim = keyAnimationDict[key]; + if (existingAnim) { + // unlock + OSSpinLockUnlock(&_lock); + + if (existingAnim == anim) { + return; + } + [self removeAnimationForObject:obj key:key cleanupDict:NO]; + + // lock + OSSpinLockLock(&_lock); + } + } + keyAnimationDict[key] = anim; + + // create entry after potential removal + POPAnimatorItemRef item(new POPAnimatorItem(obj, key, anim)); + + // add to list and pending list + _list.push_back(item); + _pendingList.push_back(item); + + // support animation re-use, reset all animation state + POPAnimationGetState(anim)->reset(true); + + // update display link + updateDisplayLink(self); + + // unlock + OSSpinLockUnlock(&_lock); + + // schedule runloop processing of pending animations + [self _scheduleProcessPendingList]; +} + +- (void)removeAllAnimationsForObject:(id)obj +{ + // lock + OSSpinLockLock(&_lock); + + NSArray *animations = [(__bridge id)CFDictionaryGetValue(_dict, (__bridge void *)obj) allValues]; + CFDictionaryRemoveValue(_dict, (__bridge void *)obj); + + // unlock + OSSpinLockUnlock(&_lock); + + if (0 == animations.count) { + return; + } + + NSHashTable *animationSet = [[NSHashTable alloc] initWithOptions:NSHashTableObjectPointerPersonality capacity:animations.count]; + for (id animation in animations) { + [animationSet addObject:animation]; + } + + // lock + OSSpinLockLock(&_lock); + + POPAnimatorItemRef item; + for (auto iter = _list.begin(); iter != _list.end();) { + item = *iter; + if(![animationSet containsObject:item->animation]) { + iter++; + } else { + iter = _list.erase(iter); + } + } + + // unlock + OSSpinLockUnlock(&_lock); + + for (POPAnimation *anim in animations) { + POPAnimationState *state = POPAnimationGetState(anim); + state->stop(true, !state->active); + } +} + +- (void)removeAnimationForObject:(id)obj key:(NSString *)key cleanupDict:(BOOL)cleanupDict +{ + POPAnimation *anim = deleteDictEntry(self, obj, key, cleanupDict); + if (nil == anim) { + return; + } + + // lock + OSSpinLockLock(&_lock); + + // remove from list + POPAnimatorItemRef item; + for (auto iter = _list.begin(); iter != _list.end();) { + item = *iter; + if(anim == item->animation) { + _list.erase(iter); + break; + } else { + iter++; + } + } + + // remove from pending list + for (auto iter = _pendingList.begin(); iter != _pendingList.end();) { + item = *iter; + if(anim == item->animation) { + _pendingList.erase(iter); + break; + } else { + iter++; + } + } + + // unlock + OSSpinLockUnlock(&_lock); + + // stop animation and callout + POPAnimationState *state = POPAnimationGetState(anim); + state->stop(true, (!state->active && !state->paused)); +} + +- (void)removeAnimationForObject:(id)obj key:(NSString *)key +{ + [self removeAnimationForObject:obj key:key cleanupDict:YES]; +} + +- (NSArray *)animationKeysForObject:(id)obj +{ + // lock + OSSpinLockLock(&_lock); + + // get keys + NSArray *keys = [(__bridge id)CFDictionaryGetValue(_dict, (__bridge void *)obj) allKeys]; + + // unlock + OSSpinLockUnlock(&_lock); + return keys; +} + +- (id)animationForObject:(id)obj key:(NSString *)key +{ + // lock + OSSpinLockLock(&_lock); + + // lookup animation + NSDictionary *keyAnimationsDict = (__bridge id)CFDictionaryGetValue(_dict, (__bridge void *)obj); + POPAnimation *animation = keyAnimationsDict[key]; + + // unlock + OSSpinLockUnlock(&_lock); + return animation; +} + +- (CFTimeInterval)_currentRenderTime +{ + CFTimeInterval time = CACurrentMediaTime(); + +#if TARGET_IPHONE_SIMULATOR + // support slow-motion animations + time += _slowMotionAccumulator; + float f = POPAnimationDragCoefficient(); + + if (f > 1.0) { + if (!_slowMotionStartTime) { + _slowMotionStartTime = time; + } else { + time = (time - _slowMotionStartTime) / f + _slowMotionStartTime; + _slowMotionLastTime = time; + } + } else if (_slowMotionStartTime) { + CFTimeInterval dt = (_slowMotionLastTime - time); + time += dt; + _slowMotionAccumulator += dt; + _slowMotionStartTime = 0; + } +#endif + + return time; +} + +- (void)render +{ + CFTimeInterval time = [self _currentRenderTime]; + [self renderTime:time]; +} + +- (void)renderTime:(CFTimeInterval)time +{ + [self _renderTime:time items:_list]; +} + +- (void)addObserver:(id)observer +{ + NSAssert(nil != observer, @"attempting to add nil %@ observer", self); + if (nil == observer) { + return; + } + + // lock + OSSpinLockLock(&_lock); + + if (!_observers) { + // use ordered collection for deterministic callout + _observers = [[NSMutableArray alloc] initWithCapacity:1]; + } + + [_observers addObject:observer]; + updateDisplayLink(self); + + // unlock + OSSpinLockUnlock(&_lock); +} + +- (void)removeObserver:(id)observer +{ + NSAssert(nil != observer, @"attempting to remove nil %@ observer", self); + if (nil == observer) { + return; + } + + // lock + OSSpinLockLock(&_lock); + + [_observers removeObject:observer]; + updateDisplayLink(self); + + // unlock + OSSpinLockUnlock(&_lock); +} + +@end diff --git a/BreakingBad/Pods/pop/pop/POPAnimatorPrivate.h b/BreakingBad/Pods/pop/pop/POPAnimatorPrivate.h new file mode 100644 index 0000000..5fba912 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPAnimatorPrivate.h @@ -0,0 +1,68 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@class POPAnimation; + +@protocol POPAnimatorObserving +@required + +/** + @abstract Called on each observer after animator has advanced. Core Animation actions are disabled by default. + */ +- (void)animatorDidAnimate:(POPAnimator *)animator; + +@end + +@interface POPAnimator () + +#if !TARGET_OS_IPHONE +/** + Determines whether or not to use a high priority background thread for animation updates. Using a background thread can result in faster, more responsive updates, but may be less compatible. Defaults to YES. + */ ++ (BOOL)disableBackgroundThread; ++ (void)setDisableBackgroundThread:(BOOL)flag; +#endif + +/** + Used for externally driven animator instances. + */ +@property (assign, nonatomic) BOOL disableDisplayLink; + +/** + Time used when starting animations. Defaults to 0 meaning current media time is used. Exposed for unit testing. + */ +@property (assign, nonatomic) CFTimeInterval beginTime; + +/** + Exposed for unit testing. + */ +- (void)renderTime:(CFTimeInterval)time; + +/** + Funnel methods for category additions. + */ +- (void)addAnimation:(POPAnimation *)anim forObject:(id)obj key:(NSString *)key; +- (void)removeAllAnimationsForObject:(id)obj; +- (void)removeAnimationForObject:(id)obj key:(NSString *)key; +- (NSArray *)animationKeysForObject:(id)obj; +- (POPAnimation *)animationForObject:(id)obj key:(NSString *)key; + +/** + @abstract Add an animator observer. Observer will be notified of each subsequent animator advance until removal. + */ +- (void)addObserver:(id)observer; + +/** + @abstract Remove an animator observer. + */ +- (void)removeObserver:(id)observer; + +@end diff --git a/BreakingBad/Pods/pop/pop/POPBasicAnimation.h b/BreakingBad/Pods/pop/pop/POPBasicAnimation.h new file mode 100644 index 0000000..ce2e23a --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPBasicAnimation.h @@ -0,0 +1,71 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +/** + @abstract A concrete basic animation class. + @discussion Animation is achieved through interpolation. + */ +@interface POPBasicAnimation : POPPropertyAnimation + +/** + @abstract The designated initializer. + @returns An instance of a basic animation. + */ ++ (instancetype)animation; + +/** + @abstract Convenience initializer that returns an animation with animatable property of name. + @param name The name of the animatable property. + @returns An instance of a basic animation configured with specified animatable property. + */ ++ (instancetype)animationWithPropertyNamed:(NSString *)name; + +/** + @abstract Convenience constructor. + @returns Returns a basic animation with kCAMediaTimingFunctionDefault timing function. + */ ++ (instancetype)defaultAnimation; + +/** + @abstract Convenience constructor. + @returns Returns a basic animation with kCAMediaTimingFunctionLinear timing function. + */ ++ (instancetype)linearAnimation; + +/** + @abstract Convenience constructor. + @returns Returns a basic animation with kCAMediaTimingFunctionEaseIn timing function. + */ ++ (instancetype)easeInAnimation; + +/** + @abstract Convenience constructor. + @returns Returns a basic animation with kCAMediaTimingFunctionEaseOut timing function. + */ ++ (instancetype)easeOutAnimation; + +/** + @abstract Convenience constructor. + @returns Returns a basic animation with kCAMediaTimingFunctionEaseInEaseOut timing function. + */ ++ (instancetype)easeInEaseOutAnimation; + +/** + @abstract The duration in seconds. Defaults to 0.4. + */ +@property (assign, nonatomic) CFTimeInterval duration; + +/** + @abstract A timing function defining the pacing of the animation. Defaults to nil indicating pacing according to kCAMediaTimingFunctionDefault. + */ +@property (strong, nonatomic) CAMediaTimingFunction *timingFunction; + +@end diff --git a/BreakingBad/Pods/pop/pop/POPBasicAnimation.mm b/BreakingBad/Pods/pop/pop/POPBasicAnimation.mm new file mode 100644 index 0000000..2843c99 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPBasicAnimation.mm @@ -0,0 +1,106 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "POPBasicAnimationInternal.h" + +@implementation POPBasicAnimation + +#undef __state +#define __state ((POPBasicAnimationState *)_state) + +#pragma mark - Lifecycle + ++ (instancetype)animation +{ + return [[self alloc] init]; +} + ++ (instancetype)animationWithPropertyNamed:(NSString *)aName +{ + POPBasicAnimation *anim = [self animation]; + anim.property = [POPAnimatableProperty propertyWithName:aName]; + return anim; +} + +- (void)_initState +{ + _state = new POPBasicAnimationState(self); +} + ++ (instancetype)linearAnimation +{ + POPBasicAnimation *anim = [self animation]; + anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; + return anim; +} + ++ (instancetype)easeInAnimation +{ + POPBasicAnimation *anim = [self animation]; + anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]; + return anim; +} + ++ (instancetype)easeOutAnimation +{ + POPBasicAnimation *anim = [self animation]; + anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; + return anim; +} + ++ (instancetype)easeInEaseOutAnimation +{ + POPBasicAnimation *anim = [self animation]; + anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; + return anim; +} + ++ (instancetype)defaultAnimation +{ + POPBasicAnimation *anim = [self animation]; + anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]; + return anim; +} + +- (id)init +{ + return [self _init]; +} + +#pragma mark - Properties + +DEFINE_RW_PROPERTY(POPBasicAnimationState, duration, setDuration:, CFTimeInterval); +DEFINE_RW_PROPERTY_OBJ(POPBasicAnimationState, timingFunction, setTimingFunction:, CAMediaTimingFunction*, __state->updatedTimingFunction();); + +#pragma mark - Utility + +- (void)_appendDescription:(NSMutableString *)s debug:(BOOL)debug +{ + [super _appendDescription:s debug:debug]; + if (__state->duration) + [s appendFormat:@"; duration = %f", __state->duration]; +} + +@end + +@implementation POPBasicAnimation (NSCopying) + +- (instancetype)copyWithZone:(NSZone *)zone { + + POPBasicAnimation *copy = [super copyWithZone:zone]; + + if (copy) { + copy.duration = self.duration; + copy.timingFunction = self.timingFunction; // not a 'copy', but timing functions are publicly immutable. + } + + return copy; +} + +@end \ No newline at end of file diff --git a/BreakingBad/Pods/pop/pop/POPBasicAnimationInternal.h b/BreakingBad/Pods/pop/pop/POPBasicAnimationInternal.h new file mode 100644 index 0000000..1027670 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPBasicAnimationInternal.h @@ -0,0 +1,97 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "POPBasicAnimation.h" + +#import "POPPropertyAnimationInternal.h" + +// default animation duration +static CGFloat const kPOPAnimationDurationDefault = 0.4; + +// progress threshold for computing done +static CGFloat const kPOPProgressThreshold = 1e-6; + +static void interpolate(POPValueType valueType, NSUInteger count, const CGFloat *fromVec, const CGFloat *toVec, CGFloat *outVec, CGFloat p) +{ + switch (valueType) { + case kPOPValueInteger: + case kPOPValueFloat: + case kPOPValuePoint: + case kPOPValueSize: + case kPOPValueRect: + case kPOPValueEdgeInsets: + case kPOPValueColor: + POPInterpolateVector(count, outVec, fromVec, toVec, p); + break; + default: + NSCAssert(false, @"unhandled type %d", valueType); + break; + } +} + +struct _POPBasicAnimationState : _POPPropertyAnimationState +{ + CAMediaTimingFunction *timingFunction; + double timingControlPoints[4]; + CFTimeInterval duration; + CFTimeInterval timeProgress; + + _POPBasicAnimationState(id __unsafe_unretained anim) : _POPPropertyAnimationState(anim), + timingFunction(nil), + timingControlPoints{0.}, + duration(kPOPAnimationDurationDefault), + timeProgress(0.) + { + type = kPOPAnimationBasic; + } + + bool isDone() { + if (_POPPropertyAnimationState::isDone()) { + return true; + } + return timeProgress + kPOPProgressThreshold >= 1.; + } + + void updatedTimingFunction() + { + float vec[4] = {0.}; + [timingFunction getControlPointAtIndex:1 values:&vec[0]]; + [timingFunction getControlPointAtIndex:2 values:&vec[2]]; + for (NSUInteger idx = 0; idx < POP_ARRAY_COUNT(vec); idx++) { + timingControlPoints[idx] = vec[idx]; + } + } + + bool advance(CFTimeInterval time, CFTimeInterval dt, id obj) { + // default timing function + if (!timingFunction) { + ((POPBasicAnimation *)self).timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]; + } + + // solve for normalized time, aka progresss [0, 1] + CGFloat p = 1.0f; + if (duration > 0.0f) { + // cap local time to duration + CFTimeInterval t = MIN(time - startTime, duration) / duration; + p = POPTimingFunctionSolve(timingControlPoints, t, SOLVE_EPS(duration)); + timeProgress = t; + } else { + timeProgress = 1.; + } + + // interpolate and advance + interpolate(valueType, valueCount, fromVec->data(), toVec->data(), currentVec->data(), p); + progress = p; + clampCurrentValue(); + + return true; + } +}; + +typedef struct _POPBasicAnimationState POPBasicAnimationState; diff --git a/BreakingBad/Pods/pop/pop/POPCGUtils.h b/BreakingBad/Pods/pop/pop/POPCGUtils.h new file mode 100644 index 0000000..c843947 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPCGUtils.h @@ -0,0 +1,152 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#if TARGET_OS_IPHONE +#import +#else +#import +#endif + +#import "POPDefines.h" + +#if SCENEKIT_SDK_AVAILABLE +#import +#endif + +POP_EXTERN_C_BEGIN + +NS_INLINE CGPoint values_to_point(const CGFloat values[]) +{ + return CGPointMake(values[0], values[1]); +} + +NS_INLINE CGSize values_to_size(const CGFloat values[]) +{ + return CGSizeMake(values[0], values[1]); +} + +NS_INLINE CGRect values_to_rect(const CGFloat values[]) +{ + return CGRectMake(values[0], values[1], values[2], values[3]); +} + +#if SCENEKIT_SDK_AVAILABLE +NS_INLINE SCNVector3 values_to_vec3(const CGFloat values[]) +{ + return SCNVector3Make(values[0], values[1], values[2]); +} + +NS_INLINE SCNVector4 values_to_vec4(const CGFloat values[]) +{ + return SCNVector4Make(values[0], values[1], values[2], values[3]); +} +#endif + +#if TARGET_OS_IPHONE + +NS_INLINE UIEdgeInsets values_to_edge_insets(const CGFloat values[]) +{ + return UIEdgeInsetsMake(values[0], values[1], values[2], values[3]); +} + +#endif + +NS_INLINE void values_from_point(CGFloat values[], CGPoint p) +{ + values[0] = p.x; + values[1] = p.y; +} + +NS_INLINE void values_from_size(CGFloat values[], CGSize s) +{ + values[0] = s.width; + values[1] = s.height; +} + +NS_INLINE void values_from_rect(CGFloat values[], CGRect r) +{ + values[0] = r.origin.x; + values[1] = r.origin.y; + values[2] = r.size.width; + values[3] = r.size.height; +} + +#if SCENEKIT_SDK_AVAILABLE +NS_INLINE void values_from_vec3(CGFloat values[], SCNVector3 v) +{ + values[0] = v.x; + values[1] = v.y; + values[2] = v.z; +} + +NS_INLINE void values_from_vec4(CGFloat values[], SCNVector4 v) +{ + values[0] = v.x; + values[1] = v.y; + values[2] = v.z; + values[3] = v.w; +} +#endif + +#if TARGET_OS_IPHONE + +NS_INLINE void values_from_edge_insets(CGFloat values[], UIEdgeInsets i) +{ + values[0] = i.top; + values[1] = i.left; + values[2] = i.bottom; + values[3] = i.right; +} + +#endif + +/** + Takes a CGColorRef and converts it into RGBA components, if necessary. + */ +extern void POPCGColorGetRGBAComponents(CGColorRef color, CGFloat components[]); + +/** + Takes RGBA components and returns a CGColorRef. + */ +extern CGColorRef POPCGColorRGBACreate(const CGFloat components[]) CF_RETURNS_RETAINED; + +/** + Takes a color reference and returns a CGColor. + */ +extern CGColorRef POPCGColorWithColor(id color) CF_RETURNS_NOT_RETAINED; + +#if TARGET_OS_IPHONE + +/** + Takes a UIColor and converts it into RGBA components, if necessary. + */ +extern void POPUIColorGetRGBAComponents(UIColor *color, CGFloat components[]); + +/** + Takes RGBA components and returns a UIColor. + */ +extern UIColor *POPUIColorRGBACreate(const CGFloat components[]) NS_RETURNS_RETAINED; + +#else + +/** + Takes a NSColor and converts it into RGBA components, if necessary. + */ +extern void POPNSColorGetRGBAComponents(NSColor *color, CGFloat components[]); + +/** + Takes RGBA components and returns a NSColor. + */ +extern NSColor *POPNSColorRGBACreate(const CGFloat components[]) NS_RETURNS_RETAINED; + +#endif + +POP_EXTERN_C_END diff --git a/BreakingBad/Pods/pop/pop/POPCGUtils.mm b/BreakingBad/Pods/pop/pop/POPCGUtils.mm new file mode 100644 index 0000000..72a2d36 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPCGUtils.mm @@ -0,0 +1,150 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "POPCGUtils.h" + +#import + +void POPCGColorGetRGBAComponents(CGColorRef color, CGFloat components[]) +{ + if (color) { + const CGFloat *colors = CGColorGetComponents(color); + size_t count = CGColorGetNumberOfComponents(color); + + if (4 == count) { + // RGB colorspace + components[0] = colors[0]; + components[1] = colors[1]; + components[2] = colors[2]; + components[3] = colors[3]; + } else if (2 == count) { + // Grey colorspace + components[0] = components[1] = components[2] = colors[0]; + components[3] = colors[1]; + } else { + // Use CI to convert + CIColor *ciColor = [CIColor colorWithCGColor:color]; + components[0] = ciColor.red; + components[1] = ciColor.green; + components[2] = ciColor.blue; + components[3] = ciColor.alpha; + } + } else { + memset(components, 0, 4 * sizeof(components[0])); + } +} + +CGColorRef POPCGColorRGBACreate(const CGFloat components[]) +{ +#if TARGET_OS_IPHONE + CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB(); + CGColorRef color = CGColorCreate(space, components); + CGColorSpaceRelease(space); + return color; +#else + return CGColorCreateGenericRGB(components[0], components[1], components[2], components[3]); +#endif +} + +CGColorRef POPCGColorWithColor(id color) +{ + if (CFGetTypeID((__bridge CFTypeRef)color) == CGColorGetTypeID()) { + return ((__bridge CGColorRef)color); + } +#if TARGET_OS_IPHONE + else if ([color isKindOfClass:[UIColor class]]) { + return [color CGColor]; + } +#else + else if ([color isKindOfClass:[NSColor class]]) { + // -[NSColor CGColor] is only supported since OSX 10.8+ + if ([color respondsToSelector:@selector(CGColor)]) { + return [color CGColor]; + } + + /* + * Otherwise create a CGColorRef manually. + * + * The original accessor is (or would be) declared as: + * @property(readonly) CGColorRef CGColor; + * - (CGColorRef)CGColor NS_RETURNS_INNER_POINTER CF_RETURNS_NOT_RETAINED; + * + * (Please note that OSX' accessor is atomic, while iOS' isn't.) + * + * The access to the NSColor object must thus be synchronized + * and the CGColorRef be stored as an associated object, + * to return a reference which doesn't need to be released manually. + */ + @synchronized(color) { + static const void* key = &key; + + CGColorRef colorRef = (__bridge CGColorRef)objc_getAssociatedObject(color, key); + + if (!colorRef) { + size_t numberOfComponents = [color numberOfComponents]; + CGFloat components[numberOfComponents]; + CGColorSpaceRef colorSpace = [[color colorSpace] CGColorSpace]; + + [color getComponents:components]; + + colorRef = CGColorCreate(colorSpace, components); + + objc_setAssociatedObject(color, key, (__bridge id)colorRef, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + CGColorRelease(colorRef); + } + + return colorRef; + } + } +#endif + return nil; +} + +#if TARGET_OS_IPHONE + +void POPUIColorGetRGBAComponents(UIColor *color, CGFloat components[]) +{ + return POPCGColorGetRGBAComponents(POPCGColorWithColor(color), components); +} + +UIColor *POPUIColorRGBACreate(const CGFloat components[]) +{ + CGColorRef colorRef = POPCGColorRGBACreate(components); + UIColor *color = [[UIColor alloc] initWithCGColor:colorRef]; + CGColorRelease(colorRef); + return color; +} + +#else + +void POPNSColorGetRGBAComponents(NSColor *color, CGFloat components[]) +{ + return POPCGColorGetRGBAComponents(POPCGColorWithColor(color), components); +} + +NSColor *POPNSColorRGBACreate(const CGFloat components[]) +{ + CGColorRef colorRef = POPCGColorRGBACreate(components); + NSColor *color = nil; + + if (colorRef) { + if ([NSColor respondsToSelector:@selector(colorWithCGColor:)]) { + color = [NSColor colorWithCGColor:colorRef]; + } else { + color = [NSColor colorWithCIColor:[CIColor colorWithCGColor:colorRef]]; + } + + CGColorRelease(colorRef); + } + + return color; +} + +#endif + diff --git a/BreakingBad/Pods/pop/pop/POPCustomAnimation.h b/BreakingBad/Pods/pop/pop/POPCustomAnimation.h new file mode 100644 index 0000000..501a755 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPCustomAnimation.h @@ -0,0 +1,46 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@class POPCustomAnimation; + +/** + @abstract POPCustomAnimationBlock is the callback block of a custom animation. + @discussion This block will be executed for each animation frame and should update the property or properties being animated based on current timing. + @param target The object being animated. Reference the passed in target to help avoid retain loops. + @param animation The custom animation instance. Use to determine the current and elapsed time since last callback. Reference the passed in animation to help avoid retain loops. + @return Flag indicating whether the animation should continue animating. Return NO to indicate animation is done. + */ +typedef BOOL (^POPCustomAnimationBlock)(id target, POPCustomAnimation *animation); + +/** + @abstract POPCustomAnimation is a concrete animation subclass for custom animations. + */ +@interface POPCustomAnimation : POPAnimation + +/** +@abstract Creates and returns an initialized custom animation instance. +@discussion This is the designated initializer. +@param block The custom animation callback block. See {@ref POPCustomAnimationBlock}. +@return The initialized custom animation instance. +*/ ++ (instancetype)animationWithBlock:(POPCustomAnimationBlock)block; + +/** + @abstract The current animation time at time of callback. + */ +@property (readonly, nonatomic) CFTimeInterval currentTime; + +/** + @abstract The elapsed animation time since last callback. + */ +@property (readonly, nonatomic) CFTimeInterval elapsedTime; + +@end diff --git a/BreakingBad/Pods/pop/pop/POPCustomAnimation.mm b/BreakingBad/Pods/pop/pop/POPCustomAnimation.mm new file mode 100644 index 0000000..8cb7913 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPCustomAnimation.mm @@ -0,0 +1,75 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "POPAnimationInternal.h" + +#import "POPCustomAnimation.h" + +@interface POPCustomAnimation () +@property (nonatomic, copy) POPCustomAnimationBlock animate; +@end + +@implementation POPCustomAnimation +@synthesize currentTime = _currentTime; +@synthesize elapsedTime = _elapsedTime; +@synthesize animate = _animate; + ++ (instancetype)animationWithBlock:(BOOL(^)(id target, POPCustomAnimation *))block +{ + POPCustomAnimation *b = [[self alloc] _init]; + b.animate = block; + return b; +} + +- (id)_init +{ + self = [super _init]; + if (nil != self) { + _state->type = kPOPAnimationCustom; + } + return self; +} + +- (CFTimeInterval)beginTime +{ + POPAnimationState *s = POPAnimationGetState(self); + return s->startTime > 0 ? s->startTime : s->beginTime; +} + +- (BOOL)_advance:(id)object currentTime:(CFTimeInterval)currentTime elapsedTime:(CFTimeInterval)elapsedTime +{ + _currentTime = currentTime; + _elapsedTime = elapsedTime; + return _animate(object, self); +} + +- (void)_appendDescription:(NSMutableString *)s debug:(BOOL)debug +{ + [s appendFormat:@"; elapsedTime = %f; currentTime = %f;", _elapsedTime, _currentTime]; +} + +@end + +/** + * Note that only the animate block is copied, but not the current/elapsed times + */ +@implementation POPCustomAnimation (NSCopying) + +- (instancetype)copyWithZone:(NSZone *)zone { + + POPCustomAnimation *copy = [super copyWithZone:zone]; + + if (copy) { + copy.animate = self.animate; + } + + return copy; +} + +@end \ No newline at end of file diff --git a/BreakingBad/Pods/pop/pop/POPDecayAnimation.h b/BreakingBad/Pods/pop/pop/POPDecayAnimation.h new file mode 100644 index 0000000..92c6b60 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPDecayAnimation.h @@ -0,0 +1,66 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +/** + @abstract A concrete decay animation class. + @discussion Animation is achieved through gradual decay of animation value. + */ +@interface POPDecayAnimation : POPPropertyAnimation + +/** + @abstract The designated initializer. + @returns An instance of a decay animation. + */ ++ (instancetype)animation; + +/** + @abstract Convenience initializer that returns an animation with animatable property of name. + @param name The name of the animatable property. + @returns An instance of a decay animation configured with specified animatable property. + */ ++ (instancetype)animationWithPropertyNamed:(NSString *)name; + +/** + @abstract The current velocity value. + @discussion Set before animation start to account for initial velocity. Expressed in change of value units per second. The only POPValueTypes supported for velocity are: kPOPValuePoint, kPOPValueInteger, kPOPValueFloat, kPOPValueRect, and kPOPValueSize. + */ +@property (copy, nonatomic) id velocity; + +/** + @abstract The original velocity value. + @discussion Since the velocity property is modified as the animation progresses, this property stores the original, passed in velocity to support autoreverse and repeatCount. + */ +@property (copy, nonatomic, readonly) id originalVelocity; + +/** + @abstract The deceleration factor. + @discussion Values specifies should be in the range [0, 1]. Lower values results in faster deceleration. Defaults to 0.998. + */ +@property (assign, nonatomic) CGFloat deceleration; + +/** + @abstract The expected duration. + @discussion Derived based on input velocity and deceleration values. + */ +@property (readonly, assign, nonatomic) CFTimeInterval duration; + +/** + The to value is derived based on input velocity and deceleration. + */ +- (void)setToValue:(id)toValue NS_UNAVAILABLE; + +/** + @abstract The reversed velocity. + @discussion The reversed velocity based on the originalVelocity when the animation was set up. + */ +- (id)reversedVelocity; + +@end diff --git a/BreakingBad/Pods/pop/pop/POPDecayAnimation.mm b/BreakingBad/Pods/pop/pop/POPDecayAnimation.mm new file mode 100644 index 0000000..4698fd0 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPDecayAnimation.mm @@ -0,0 +1,203 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "POPDecayAnimationInternal.h" + +#if TARGET_OS_IPHONE +#import +#endif + +const POPValueType supportedVelocityTypes[6] = { kPOPValuePoint, kPOPValueInteger, kPOPValueFloat, kPOPValueRect, kPOPValueSize, kPOPValueEdgeInsets }; + +@implementation POPDecayAnimation + +#pragma mark - Lifecycle + +#undef __state +#define __state ((POPDecayAnimationState *)_state) + ++ (instancetype)animation +{ + return [[self alloc] init]; +} + ++ (instancetype)animationWithPropertyNamed:(NSString *)aName +{ + POPDecayAnimation *anim = [self animation]; + anim.property = [POPAnimatableProperty propertyWithName:aName]; + return anim; +} + +- (id)init +{ + return [self _init]; +} + +- (void)_initState +{ + _state = new POPDecayAnimationState(self); +} + +#pragma mark - Properties + +DEFINE_RW_PROPERTY(POPDecayAnimationState, deceleration, setDeceleration:, CGFloat, __state->toVec = NULL;); + +@dynamic velocity; + +- (id)toValue +{ + [self _ensureComputedProperties]; + return POPBox(__state->toVec, __state->valueType); +} + +- (CFTimeInterval)duration +{ + [self _ensureComputedProperties]; + return __state->duration; +} + +- (void)setFromValue:(id)fromValue +{ + super.fromValue = fromValue; + [self _invalidateComputedProperties]; +} + +- (void)setToValue:(id)aValue +{ + // no-op + NSLog(@"ignoring to value on decay animation %@", self); +} + +- (id)reversedVelocity +{ + id reversedVelocity = nil; + + POPValueType velocityType = POPSelectValueType(self.originalVelocity, supportedVelocityTypes, POP_ARRAY_COUNT(supportedVelocityTypes)); + if (velocityType == kPOPValueFloat) { +#if CGFLOAT_IS_DOUBLE + CGFloat originalVelocityFloat = [(NSNumber *)self.originalVelocity doubleValue]; +#else + CGFloat originalVelocityFloat = [(NSNumber *)self.originalVelocity floatValue]; +#endif + NSNumber *negativeOriginalVelocityNumber = @(-originalVelocityFloat); + reversedVelocity = negativeOriginalVelocityNumber; + } else if (velocityType == kPOPValueInteger) { + NSInteger originalVelocityInteger = [(NSNumber *)self.originalVelocity integerValue]; + NSNumber *negativeOriginalVelocityNumber = @(-originalVelocityInteger); + reversedVelocity = negativeOriginalVelocityNumber; + } else if (velocityType == kPOPValuePoint) { + CGPoint originalVelocityPoint = [self.originalVelocity CGPointValue]; + CGPoint negativeOriginalVelocityPoint = CGPointMake(-originalVelocityPoint.x, -originalVelocityPoint.y); + reversedVelocity = [NSValue valueWithCGPoint:negativeOriginalVelocityPoint]; + } else if (velocityType == kPOPValueRect) { + CGRect originalVelocityRect = [self.originalVelocity CGRectValue]; + CGRect negativeOriginalVelocityRect = CGRectMake(-originalVelocityRect.origin.x, -originalVelocityRect.origin.y, -originalVelocityRect.size.width, -originalVelocityRect.size.height); + reversedVelocity = [NSValue valueWithCGRect:negativeOriginalVelocityRect]; + } else if (velocityType == kPOPValueSize) { + CGSize originalVelocitySize = [self.originalVelocity CGSizeValue]; + CGSize negativeOriginalVelocitySize = CGSizeMake(-originalVelocitySize.width, -originalVelocitySize.height); + reversedVelocity = [NSValue valueWithCGSize:negativeOriginalVelocitySize]; + } else if (velocityType == kPOPValueEdgeInsets) { +#if TARGET_OS_IPHONE + UIEdgeInsets originalVelocityInsets = [self.originalVelocity UIEdgeInsetsValue]; + UIEdgeInsets negativeOriginalVelocityInsets = UIEdgeInsetsMake(-originalVelocityInsets.top, -originalVelocityInsets.left, -originalVelocityInsets.bottom, -originalVelocityInsets.right); + reversedVelocity = [NSValue valueWithUIEdgeInsets:negativeOriginalVelocityInsets]; +#endif + } + + return reversedVelocity; +} + +- (id)originalVelocity +{ + return POPBox(__state->originalVelocityVec, __state->valueType); +} + +- (id)velocity +{ + return POPBox(__state->velocityVec, __state->valueType); +} + +- (void)setVelocity:(id)aValue +{ + POPValueType valueType = POPSelectValueType(aValue, supportedVelocityTypes, POP_ARRAY_COUNT(supportedVelocityTypes)); + if (valueType != kPOPValueUnknown) { + VectorRef vec = POPUnbox(aValue, __state->valueType, __state->valueCount, YES); + VectorRef origVec = POPUnbox(aValue, __state->valueType, __state->valueCount, YES); + + if (!vec_equal(vec, __state->velocityVec)) { + __state->velocityVec = vec; + __state->originalVelocityVec = origVec; + + if (__state->tracing) { + [__state->tracer updateVelocity:aValue]; + } + + [self _invalidateComputedProperties]; + + // automatically unpause active animations + if (__state->active && __state->paused) { + __state->fromVec = NULL; + __state->setPaused(false); + } + } + } else { + __state->velocityVec = NULL; + NSLog(@"Invalid velocity value for the decayAnimation: %@", aValue); + } +} + +#pragma mark - Utility + +- (void)_ensureComputedProperties +{ + if (NULL == __state->toVec) { + __state->computeDuration(); + __state->computeToValue(); + } +} + +- (void)_invalidateComputedProperties +{ + __state->toVec = NULL; + __state->duration = 0; +} + +- (void)_appendDescription:(NSMutableString *)s debug:(BOOL)debug +{ + [super _appendDescription:s debug:debug]; + + if (0 != self.duration) { + [s appendFormat:@"; duration = %f", self.duration]; + } + + if (__state->deceleration) { + [s appendFormat:@"; deceleration = %f", __state->deceleration]; + } +} + +@end + +@implementation POPDecayAnimation (NSCopying) + +- (instancetype)copyWithZone:(NSZone *)zone { + + POPDecayAnimation *copy = [super copyWithZone:zone]; + + if (copy) { + // Set the velocity to the animation's original velocity, not its current. + copy.velocity = self.originalVelocity; + copy.deceleration = self.deceleration; + + } + + return copy; +} + +@end \ No newline at end of file diff --git a/BreakingBad/Pods/pop/pop/POPDecayAnimationInternal.h b/BreakingBad/Pods/pop/pop/POPDecayAnimationInternal.h new file mode 100644 index 0000000..c101761 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPDecayAnimationInternal.h @@ -0,0 +1,127 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "POPDecayAnimation.h" + +#import + +#import "POPPropertyAnimationInternal.h" + +// minimal velocity factor before decay animation is considered complete, in units / s +static CGFloat kPOPAnimationDecayMinimalVelocityFactor = 5.; + +// default decay animation deceleration +static CGFloat kPOPAnimationDecayDecelerationDefault = 0.998; + +static void decay_position(CGFloat *x, CGFloat *v, NSUInteger count, CFTimeInterval dt, CGFloat deceleration) +{ + dt *= 1000; + + // v0 = v / 1000 + // v = v0 * powf(deceleration, dt); + // v = v * 1000; + + // x0 = x; + // x = x0 + v0 * deceleration * (1 - powf(deceleration, dt)) / (1 - deceleration) + float v0[count]; + float kv = powf(deceleration, dt); + float kx = deceleration * (1 - kv) / (1 - deceleration); + + for (NSUInteger idx = 0; idx < count; idx++) { + v0[idx] = v[idx] / 1000.; + v[idx] = v0[idx] * kv * 1000.; + x[idx] = x[idx] + v0[idx] * kx; + } +} + +struct _POPDecayAnimationState : _POPPropertyAnimationState +{ + double deceleration; + CFTimeInterval duration; + + _POPDecayAnimationState(id __unsafe_unretained anim) : + _POPPropertyAnimationState(anim), + deceleration(kPOPAnimationDecayDecelerationDefault), + duration(0) + { + type = kPOPAnimationDecay; + } + + bool isDone() { + if (_POPPropertyAnimationState::isDone()) { + return true; + } + + CGFloat f = dynamicsThreshold * kPOPAnimationDecayMinimalVelocityFactor; + const CGFloat *velocityValues = vec_data(velocityVec); + for (NSUInteger idx = 0; idx < valueCount; idx++) { + if (std::abs((velocityValues[idx])) >= f) + return false; + } + return true; + + } + + void computeDuration() { + + // compute duration till threshold velocity + Vector4r scaledVelocity = vector4(velocityVec) / 1000.; + + double k = dynamicsThreshold * kPOPAnimationDecayMinimalVelocityFactor / 1000.; + double vx = k / scaledVelocity.x; + double vy = k / scaledVelocity.y; + double vz = k / scaledVelocity.z; + double vw = k / scaledVelocity.w; + double d = log(deceleration) * 1000.; + duration = MAX(MAX(MAX(log(fabs(vx)) / d, log(fabs(vy)) / d), log(fabs(vz)) / d), log(fabs(vw)) / d); + + // ensure velocity threshold is exceeded + if (std::isnan(duration) || duration < 0) { + duration = 0; + } + } + + void computeToValue() { + // to value assuming final velocity as a factor of dynamics threshold + // derived from v' = v * d^dt used in decay_position + // to compute the to value with maximal dt, p' = p + (v * d) / (1 - d) + VectorRef fromValue = NULL != currentVec ? currentVec : fromVec; + if (!fromValue) { + return; + } + + // ensure duration is computed + if (0 == duration) { + computeDuration(); + } + + // compute to value + VectorRef toValue(Vector::new_vector(fromValue.get())); + Vector4r velocity = velocityVec->vector4r(); + decay_position(toValue->data(), velocity.data(), valueCount, duration, deceleration); + toVec = toValue; + } + + bool advance(CFTimeInterval time, CFTimeInterval dt, id obj) { + // advance past not yet initialized animations + if (NULL == currentVec) { + return false; + } + + decay_position(currentVec->data(), velocityVec->data(), valueCount, dt, deceleration); + + // clamp to compute end value; avoid possibility of decaying past + clampCurrentValue(kPOPAnimationClampEnd | clampMode); + + return true; + } + +}; + +typedef struct _POPDecayAnimationState POPDecayAnimationState; diff --git a/BreakingBad/Pods/pop/pop/POPDefines.h b/BreakingBad/Pods/pop/pop/POPDefines.h new file mode 100644 index 0000000..eb28781 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPDefines.h @@ -0,0 +1,37 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#ifndef POP_POPDefines_h +#define POP_POPDefines_h + +#import + +#ifdef __cplusplus +# define POP_EXTERN_C_BEGIN extern "C" { +# define POP_EXTERN_C_END } +#else +# define POP_EXTERN_C_BEGIN +# define POP_EXTERN_C_END +#endif + +#define POP_ARRAY_COUNT(x) sizeof(x) / sizeof(x[0]) + +#if defined (__cplusplus) && defined (__GNUC__) +# define POP_NOTHROW __attribute__ ((nothrow)) +#else +# define POP_NOTHROW +#endif + +#if TARGET_OS_MAC + #define SCENEKIT_SDK_AVAILABLE defined(POP_USE_SCENEKIT) +#elif TARGET_OS_IPHONE + #define SCENEKIT_SDK_AVAILABLE defined(POP_USE_SCENEKIT) +#endif + +#endif diff --git a/BreakingBad/Pods/pop/pop/POPGeometry.h b/BreakingBad/Pods/pop/pop/POPGeometry.h new file mode 100644 index 0000000..8ba07e3 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPGeometry.h @@ -0,0 +1,73 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#if TARGET_OS_IPHONE +#import +#endif + +#if !TARGET_OS_IPHONE + +/** NSValue extensions to support animatable types. */ +@interface NSValue (POP) + +/** + @abstract Creates an NSValue given a CGPoint. + */ ++ (NSValue *)valueWithCGPoint:(CGPoint)point; + +/** + @abstract Creates an NSValue given a CGSize. + */ ++ (NSValue *)valueWithCGSize:(CGSize)size; + +/** + @abstract Creates an NSValue given a CGRect. + */ ++ (NSValue *)valueWithCGRect:(CGRect)rect; + +/** + @abstract Creates an NSValue given a CFRange. + */ ++ (NSValue *)valueWithCFRange:(CFRange)range; + +/** + @abstract Creates an NSValue given a CGAffineTransform. + */ ++ (NSValue *)valueWithCGAffineTransform:(CGAffineTransform)transform; + +/** + @abstract Returns the underlying CGPoint value. + */ +- (CGPoint)CGPointValue; + +/** + @abstract Returns the underlying CGSize value. + */ +- (CGSize)CGSizeValue; + +/** + @abstract Returns the underlying CGRect value. + */ +- (CGRect)CGRectValue; + +/** + @abstract Returns the underlying CFRange value. + */ +- (CFRange)CFRangeValue; + +/** + @abstract Returns the underlying CGAffineTransform value. + */ +- (CGAffineTransform)CGAffineTransformValue; + +@end + +#endif diff --git a/BreakingBad/Pods/pop/pop/POPGeometry.mm b/BreakingBad/Pods/pop/pop/POPGeometry.mm new file mode 100644 index 0000000..41998b1 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPGeometry.mm @@ -0,0 +1,94 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "POPGeometry.h" + +#if !TARGET_OS_IPHONE +@implementation NSValue (POP) + ++ (NSValue *)valueWithCGPoint:(CGPoint)point { + return [NSValue valueWithBytes:&point objCType:@encode(CGPoint)]; +} + ++ (NSValue *)valueWithCGSize:(CGSize)size { + return [NSValue valueWithBytes:&size objCType:@encode(CGSize)]; +} + ++ (NSValue *)valueWithCGRect:(CGRect)rect { + return [NSValue valueWithBytes:&rect objCType:@encode(CGRect)]; +} + ++ (NSValue *)valueWithCFRange:(CFRange)range { + return [NSValue valueWithBytes:&range objCType:@encode(CFRange)]; +} + ++ (NSValue *)valueWithCGAffineTransform:(CGAffineTransform)transform +{ + return [NSValue valueWithBytes:&transform objCType:@encode(CGAffineTransform)]; +} + +- (CGPoint)CGPointValue { + CGPoint result; + [self getValue:&result]; + return result; +} + +- (CGSize)CGSizeValue { + CGSize result; + [self getValue:&result]; + return result; +} + +- (CGRect)CGRectValue { + CGRect result; + [self getValue:&result]; + return result; +} + +- (CFRange)CFRangeValue { + CFRange result; + [self getValue:&result]; + return result; +} + +- (CGAffineTransform)CGAffineTransformValue { + CGAffineTransform result; + [self getValue:&result]; + return result; +} +@end + +#endif + +#if TARGET_OS_IPHONE +#import "POPDefines.h" + +#if SCENEKIT_SDK_AVAILABLE +#import + +/** + Dirty hacks because iOS is weird and decided to define both SCNVector3's and SCNVector4's objCType as "t". However @encode(SCNVector3) and @encode(SCNVector4) both return the proper definition ("{SCNVector3=fff}" and "{SCNVector4=ffff}" respectively) + + [[NSValue valueWithSCNVector3:SCNVector3Make(0.0, 0.0, 0.0)] objcType] returns "t", whereas it should return "{SCNVector3=fff}". + + *flips table* + */ +@implementation NSValue (SceneKitFixes) + ++ (NSValue *)valueWithSCNVector3:(SCNVector3)vec3 { + return [NSValue valueWithBytes:&vec3 objCType:@encode(SCNVector3)]; +} + ++ (NSValue *)valueWithSCNVector4:(SCNVector4)vec4 { + return [NSValue valueWithBytes:&vec4 objCType:@encode(SCNVector4)]; +} + +@end +#endif +#endif diff --git a/BreakingBad/Pods/pop/pop/POPLayerExtras.h b/BreakingBad/Pods/pop/pop/POPLayerExtras.h new file mode 100644 index 0000000..ec4c29a --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPLayerExtras.h @@ -0,0 +1,196 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +POP_EXTERN_C_BEGIN + +#pragma mark - Scale + +/** + @abstract Returns layer scale factor for the x axis. + */ +extern CGFloat POPLayerGetScaleX(CALayer *l); + +/** + @abstract Set layer scale factor for the x axis. + */ +extern void POPLayerSetScaleX(CALayer *l, CGFloat f); + +/** + @abstract Returns layer scale factor for the y axis. + */ +extern CGFloat POPLayerGetScaleY(CALayer *l); + +/** + @abstract Set layer scale factor for the y axis. + */ +extern void POPLayerSetScaleY(CALayer *l, CGFloat f); + +/** + @abstract Returns layer scale factor for the z axis. + */ +extern CGFloat POPLayerGetScaleZ(CALayer *l); + +/** + @abstract Set layer scale factor for the z axis. + */ +extern void POPLayerSetScaleZ(CALayer *l, CGFloat f); + +/** + @abstract Returns layer scale factors for x and y access as point. + */ +extern CGPoint POPLayerGetScaleXY(CALayer *l); + +/** + @abstract Sets layer x and y scale factors given point. + */ +extern void POPLayerSetScaleXY(CALayer *l, CGPoint p); + +#pragma mark - Translation + +/** + @abstract Returns layer translation factor for the x axis. + */ +extern CGFloat POPLayerGetTranslationX(CALayer *l); + +/** + @abstract Set layer translation factor for the x axis. + */ +extern void POPLayerSetTranslationX(CALayer *l, CGFloat f); + +/** + @abstract Returns layer translation factor for the y axis. + */ +extern CGFloat POPLayerGetTranslationY(CALayer *l); + +/** + @abstract Set layer translation factor for the y axis. + */ +extern void POPLayerSetTranslationY(CALayer *l, CGFloat f); + +/** + @abstract Returns layer translation factor for the z axis. + */ +extern CGFloat POPLayerGetTranslationZ(CALayer *l); + +/** + @abstract Set layer translation factor for the z axis. + */ +extern void POPLayerSetTranslationZ(CALayer *l, CGFloat f); + +/** + @abstract Returns layer translation factors for x and y access as point. + */ +extern CGPoint POPLayerGetTranslationXY(CALayer *l); + +/** + @abstract Sets layer x and y translation factors given point. + */ +extern void POPLayerSetTranslationXY(CALayer *l, CGPoint p); + +#pragma mark - Rotation + +/** + @abstract Returns layer rotation, in radians, in the X axis. + */ +extern CGFloat POPLayerGetRotationX(CALayer *l); + +/** + @abstract Sets layer rotation, in radians, in the X axis. + */ +extern void POPLayerSetRotationX(CALayer *l, CGFloat f); + +/** + @abstract Returns layer rotation, in radians, in the Y axis. + */ +extern CGFloat POPLayerGetRotationY(CALayer *l); + +/** + @abstract Sets layer rotation, in radians, in the Y axis. + */ +extern void POPLayerSetRotationY(CALayer *l, CGFloat f); + +/** + @abstract Returns layer rotation, in radians, in the Z axis. + */ +extern CGFloat POPLayerGetRotationZ(CALayer *l); + +/** + @abstract Sets layer rotation, in radians, in the Z axis. + */ +extern void POPLayerSetRotationZ(CALayer *l, CGFloat f); + +/** + @abstract Returns layer rotation, in radians, in the Z axis. + */ +extern CGFloat POPLayerGetRotation(CALayer *l); + +/** + @abstract Sets layer rotation, in radians, in the Z axis. + */ +extern void POPLayerSetRotation(CALayer *l, CGFloat f); + +#pragma mark - Sublayer Scale + +/** + @abstract Returns sublayer scale factors for x and y access as point. + */ +extern CGPoint POPLayerGetSubScaleXY(CALayer *l); + +/** + @abstract Sets sublayer x and y scale factors given point. + */ +extern void POPLayerSetSubScaleXY(CALayer *l, CGPoint p); + +#pragma mark - Sublayer Translation + +/** + @abstract Returns sublayer translation factor for the x axis. + */ +extern CGFloat POPLayerGetSubTranslationX(CALayer *l); + +/** + @abstract Set sublayer translation factor for the x axis. + */ +extern void POPLayerSetSubTranslationX(CALayer *l, CGFloat f); + +/** + @abstract Returns sublayer translation factor for the y axis. + */ +extern CGFloat POPLayerGetSubTranslationY(CALayer *l); + +/** + @abstract Set sublayer translation factor for the y axis. + */ +extern void POPLayerSetSubTranslationY(CALayer *l, CGFloat f); + +/** + @abstract Returns sublayer translation factor for the z axis. + */ +extern CGFloat POPLayerGetSubTranslationZ(CALayer *l); + +/** + @abstract Set sublayer translation factor for the z axis. + */ +extern void POPLayerSetSubTranslationZ(CALayer *l, CGFloat f); + +/** + @abstract Returns sublayer translation factors for x and y access as point. + */ +extern CGPoint POPLayerGetSubTranslationXY(CALayer *l); + +/** + @abstract Sets sublayer x and y translation factors given point. + */ +extern void POPLayerSetSubTranslationXY(CALayer *l, CGPoint p); + +POP_EXTERN_C_END diff --git a/BreakingBad/Pods/pop/pop/POPLayerExtras.mm b/BreakingBad/Pods/pop/pop/POPLayerExtras.mm new file mode 100644 index 0000000..c8ad7f9 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPLayerExtras.mm @@ -0,0 +1,288 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "POPLayerExtras.h" + +#include "TransformationMatrix.h" + +using namespace WebCore; + +#define DECOMPOSE_TRANSFORM(L) \ + TransformationMatrix _m(L.transform); \ + TransformationMatrix::DecomposedType _d; \ + _m.decompose(_d); + +#define RECOMPOSE_TRANSFORM(L) \ + _m.recompose(_d); \ + L.transform = _m.transform3d(); + +#define RECOMPOSE_ROT_TRANSFORM(L) \ + _m.recompose(_d, true); \ + L.transform = _m.transform3d(); + +#define DECOMPOSE_SUBLAYER_TRANSFORM(L) \ + TransformationMatrix _m(L.sublayerTransform); \ + TransformationMatrix::DecomposedType _d; \ + _m.decompose(_d); + +#define RECOMPOSE_SUBLAYER_TRANSFORM(L) \ + _m.recompose(_d); \ + L.sublayerTransform = _m.transform3d(); + +#pragma mark - Scale + +NS_INLINE void ensureNonZeroValue(CGFloat &f) +{ + if (f == 0) { + f = 1e-6; + } +} + +NS_INLINE void ensureNonZeroValue(CGPoint &p) +{ + if (p.x == 0 && p.y == 0) { + p.x = 1e-6; + p.y = 1e-6; + } +} + +CGFloat POPLayerGetScaleX(CALayer *l) +{ + DECOMPOSE_TRANSFORM(l); + return _d.scaleX; +} + +void POPLayerSetScaleX(CALayer *l, CGFloat f) +{ + ensureNonZeroValue(f); + DECOMPOSE_TRANSFORM(l); + _d.scaleX = f; + RECOMPOSE_TRANSFORM(l); +} + +CGFloat POPLayerGetScaleY(CALayer *l) +{ + DECOMPOSE_TRANSFORM(l); + return _d.scaleY; +} + +void POPLayerSetScaleY(CALayer *l, CGFloat f) +{ + ensureNonZeroValue(f); + DECOMPOSE_TRANSFORM(l); + _d.scaleY = f; + RECOMPOSE_TRANSFORM(l); +} + +CGFloat POPLayerGetScaleZ(CALayer *l) +{ + DECOMPOSE_TRANSFORM(l); + return _d.scaleZ; +} + +void POPLayerSetScaleZ(CALayer *l, CGFloat f) +{ + ensureNonZeroValue(f); + DECOMPOSE_TRANSFORM(l); + _d.scaleZ = f; + RECOMPOSE_TRANSFORM(l); +} + +CGPoint POPLayerGetScaleXY(CALayer *l) +{ + DECOMPOSE_TRANSFORM(l); + return CGPointMake(_d.scaleX, _d.scaleY); +} + +void POPLayerSetScaleXY(CALayer *l, CGPoint p) +{ + ensureNonZeroValue(p); + DECOMPOSE_TRANSFORM(l); + _d.scaleX = p.x; + _d.scaleY = p.y; + RECOMPOSE_TRANSFORM(l); +} + +#pragma mark - Translation + +CGFloat POPLayerGetTranslationX(CALayer *l) +{ + DECOMPOSE_TRANSFORM(l); + return _d.translateX; +} + +void POPLayerSetTranslationX(CALayer *l, CGFloat f) +{ + DECOMPOSE_TRANSFORM(l); + _d.translateX = f; + RECOMPOSE_TRANSFORM(l); +} + +CGFloat POPLayerGetTranslationY(CALayer *l) +{ + DECOMPOSE_TRANSFORM(l); + return _d.translateY; +} + +void POPLayerSetTranslationY(CALayer *l, CGFloat f) +{ + DECOMPOSE_TRANSFORM(l); + _d.translateY = f; + RECOMPOSE_TRANSFORM(l); +} + +CGFloat POPLayerGetTranslationZ(CALayer *l) +{ + DECOMPOSE_TRANSFORM(l); + return _d.translateZ; +} + +void POPLayerSetTranslationZ(CALayer *l, CGFloat f) +{ + DECOMPOSE_TRANSFORM(l); + _d.translateZ = f; + RECOMPOSE_TRANSFORM(l); +} + +CGPoint POPLayerGetTranslationXY(CALayer *l) +{ + DECOMPOSE_TRANSFORM(l); + return CGPointMake(_d.translateX, _d.translateY); +} + +void POPLayerSetTranslationXY(CALayer *l, CGPoint p) +{ + DECOMPOSE_TRANSFORM(l); + _d.translateX = p.x; + _d.translateY = p.y; + RECOMPOSE_TRANSFORM(l); +} + +#pragma mark - Rotation + +CGFloat POPLayerGetRotationX(CALayer *l) +{ + DECOMPOSE_TRANSFORM(l); + return _d.rotateX; +} + +void POPLayerSetRotationX(CALayer *l, CGFloat f) +{ + DECOMPOSE_TRANSFORM(l); + _d.rotateX = f; + RECOMPOSE_ROT_TRANSFORM(l); +} + +CGFloat POPLayerGetRotationY(CALayer *l) +{ + DECOMPOSE_TRANSFORM(l); + return _d.rotateY; +} + +void POPLayerSetRotationY(CALayer *l, CGFloat f) +{ + DECOMPOSE_TRANSFORM(l); + _d.rotateY = f; + RECOMPOSE_ROT_TRANSFORM(l); +} + +CGFloat POPLayerGetRotationZ(CALayer *l) +{ + DECOMPOSE_TRANSFORM(l); + return _d.rotateZ; +} + +void POPLayerSetRotationZ(CALayer *l, CGFloat f) +{ + DECOMPOSE_TRANSFORM(l); + _d.rotateZ = f; + RECOMPOSE_ROT_TRANSFORM(l); +} + +CGFloat POPLayerGetRotation(CALayer *l) +{ + return POPLayerGetRotationZ(l); +} + +void POPLayerSetRotation(CALayer *l, CGFloat f) +{ + POPLayerSetRotationZ(l, f); +} + +#pragma mark - Sublayer Scale + +CGPoint POPLayerGetSubScaleXY(CALayer *l) +{ + DECOMPOSE_SUBLAYER_TRANSFORM(l); + return CGPointMake(_d.scaleX, _d.scaleY); +} + +void POPLayerSetSubScaleXY(CALayer *l, CGPoint p) +{ + ensureNonZeroValue(p); + DECOMPOSE_SUBLAYER_TRANSFORM(l); + _d.scaleX = p.x; + _d.scaleY = p.y; + RECOMPOSE_SUBLAYER_TRANSFORM(l); +} + +#pragma mark - Sublayer Translation + +extern CGFloat POPLayerGetSubTranslationX(CALayer *l) +{ + DECOMPOSE_SUBLAYER_TRANSFORM(l); + return _d.translateX; +} + +extern void POPLayerSetSubTranslationX(CALayer *l, CGFloat f) +{ + DECOMPOSE_SUBLAYER_TRANSFORM(l); + _d.translateX = f; + RECOMPOSE_SUBLAYER_TRANSFORM(l); +} + +extern CGFloat POPLayerGetSubTranslationY(CALayer *l) +{ + DECOMPOSE_SUBLAYER_TRANSFORM(l); + return _d.translateY; +} + +extern void POPLayerSetSubTranslationY(CALayer *l, CGFloat f) +{ + DECOMPOSE_SUBLAYER_TRANSFORM(l); + _d.translateY = f; + RECOMPOSE_SUBLAYER_TRANSFORM(l); +} + +extern CGFloat POPLayerGetSubTranslationZ(CALayer *l) +{ + DECOMPOSE_SUBLAYER_TRANSFORM(l); + return _d.translateZ; +} + +extern void POPLayerSetSubTranslationZ(CALayer *l, CGFloat f) +{ + DECOMPOSE_SUBLAYER_TRANSFORM(l); + _d.translateZ = f; + RECOMPOSE_SUBLAYER_TRANSFORM(l); +} + +extern CGPoint POPLayerGetSubTranslationXY(CALayer *l) +{ + DECOMPOSE_SUBLAYER_TRANSFORM(l); + return CGPointMake(_d.translateX, _d.translateY); +} + +extern void POPLayerSetSubTranslationXY(CALayer *l, CGPoint p) +{ + DECOMPOSE_SUBLAYER_TRANSFORM(l); + _d.translateX = p.x; + _d.translateY = p.y; + RECOMPOSE_SUBLAYER_TRANSFORM(l); +} diff --git a/BreakingBad/Pods/pop/pop/POPMath.h b/BreakingBad/Pods/pop/pop/POPMath.h new file mode 100644 index 0000000..0c6f5e2 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPMath.h @@ -0,0 +1,56 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import + +#import "POPDefines.h" +#import "POPVector.h" + +NS_INLINE CGFloat sqrtr(CGFloat f) +{ +#if CGFLOAT_IS_DOUBLE + return sqrt(f); +#else + return sqrtf(f); +#endif +} + +// round to nearest sub; pass 2.0 to round to every 0.5 (eg: retina pixels) +NS_INLINE CGFloat POPSubRound(CGFloat f, CGFloat sub) +{ + return round(f * sub) / sub; +} + +#define MIX(a, b, f) ((a) + (f) * ((b) - (a))) + +// the longer the duration, the higher the necessary precision +#define SOLVE_EPS(dur) (1. / (1000. * (dur))) + +#define _EQLF_(x, y, epsilon) (fabsf ((x) - (y)) < epsilon) + +extern void POPInterpolateVector(NSUInteger count, CGFloat *dst, const CGFloat *from, const CGFloat *to, CGFloat f); + +extern double POPTimingFunctionSolve(const double vec[4], double t, double eps); + +// quadratic mapping of t [0, 1] to [start, end] +extern double POPQuadraticOutInterpolation(double t, double start, double end); + +// normalize value to [0, 1] based on its range [startValue, endValue] +extern double POPNormalize(double value, double startValue, double endValue); + +// project a normalized value [0, 1] to a given range [start, end] +extern double POPProjectNormal(double n, double start, double end); + +// solve a quadratic equation of the form a * x^2 + b * x + c = 0 +extern void POPQuadraticSolve(CGFloat a, CGFloat b, CGFloat c, CGFloat &x1, CGFloat &x2); + +// for a given tension return the bouncy 3 friction that produces no bounce +extern double POPBouncy3NoBounce(double tension); diff --git a/BreakingBad/Pods/pop/pop/POPMath.mm b/BreakingBad/Pods/pop/pop/POPMath.mm new file mode 100644 index 0000000..69a506a --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPMath.mm @@ -0,0 +1,83 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "POPMath.h" + +#import "POPAnimationPrivate.h" +#import "UnitBezier.h" + +void POPInterpolateVector(NSUInteger count, CGFloat *dst, const CGFloat *from, const CGFloat *to, CGFloat f) +{ + for (NSUInteger idx = 0; idx < count; idx++) { + dst[idx] = MIX(from[idx], to[idx], f); + } +} + +double POPTimingFunctionSolve(const double vec[4], double t, double eps) +{ + WebCore::UnitBezier bezier(vec[0], vec[1], vec[2], vec[3]); + return bezier.solve(t, eps); +} + +double POPNormalize(double value, double startValue, double endValue) +{ + return (value - startValue) / (endValue - startValue); +} + +double POPProjectNormal(double n, double start, double end) +{ + return start + (n * (end - start)); +} + +static double linear_interpolation(double t, double start, double end) +{ + return t * end + (1.f - t) * start; +} + +double POPQuadraticOutInterpolation(double t, double start, double end) +{ + return linear_interpolation(2*t - t*t, start, end); +} + +static double b3_friction1(double x) +{ + return (0.0007 * pow(x, 3)) - (0.031 * pow(x, 2)) + 0.64 * x + 1.28; +} + +static double b3_friction2(double x) +{ + return (0.000044 * pow(x, 3)) - (0.006 * pow(x, 2)) + 0.36 * x + 2.; +} + +static double b3_friction3(double x) +{ + return (0.00000045 * pow(x, 3)) - (0.000332 * pow(x, 2)) + 0.1078 * x + 5.84; +} + +double POPBouncy3NoBounce(double tension) +{ + double friction = 0; + if (tension <= 18.) { + friction = b3_friction1(tension); + } else if (tension > 18 && tension <= 44) { + friction = b3_friction2(tension); + } else if (tension > 44) { + friction = b3_friction3(tension); + } else { + assert(false); + } + return friction; +} + +void POPQuadraticSolve(CGFloat a, CGFloat b, CGFloat c, CGFloat &x1, CGFloat &x2) +{ + CGFloat discriminant = sqrt(b * b - 4 * a * c); + x1 = (-b + discriminant) / (2 * a); + x2 = (-b - discriminant) / (2 * a); +} diff --git a/BreakingBad/Pods/pop/pop/POPPropertyAnimation.h b/BreakingBad/Pods/pop/pop/POPPropertyAnimation.h new file mode 100644 index 0000000..2861665 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPPropertyAnimation.h @@ -0,0 +1,65 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import +#import + +/** + @abstract Flags for clamping animation values. + @discussion Animation values can optionally be clamped to avoid overshoot. kPOPAnimationClampStart ensures values are more than fromValue and kPOPAnimationClampEnd ensures values are less than toValue. + */ +typedef NS_OPTIONS(NSUInteger, POPAnimationClampFlags) +{ + kPOPAnimationClampNone = 0, + kPOPAnimationClampStart = 1UL << 0, + kPOPAnimationClampEnd = 1UL << 1, + kPOPAnimationClampBoth = kPOPAnimationClampStart | kPOPAnimationClampEnd, +}; + +/** + @abstract The semi-concrete property animation subclass. + */ +@interface POPPropertyAnimation : POPAnimation + +/** + @abstract The property to animate. + */ +@property (strong, nonatomic) POPAnimatableProperty *property; + +/** + @abstract The value to animate from. + @discussion The value type should match the property. If unspecified, the value is initialized to the object's current value on animation start. + */ +@property (copy, nonatomic) id fromValue; + +/** + @abstract The value to animate to. + @discussion The value type should match the property. If unspecified, the value is initialized to the object's current value on animation start. + */ +@property (copy, nonatomic) id toValue; + +/** + @abstract The rounding factor applied to the current animated value. + @discussion Specify 1.0 to animate between integral values. Defaults to 0 meaning no rounding. + */ +@property (assign, nonatomic) CGFloat roundingFactor; + +/** + @abstract The clamp mode applied to the current animated value. + @discussion See {@ref POPAnimationClampFlags} for possible values. Defaults to kPOPAnimationClampNone. + */ +@property (assign, nonatomic) NSUInteger clampMode; + +/** + @abstract The flag indicating whether values should be "added" each frame, rather than set. + @discussion Addition may be type dependent. Defaults to NO. + */ +@property (assign, nonatomic, getter = isAdditive) BOOL additive; + +@end diff --git a/BreakingBad/Pods/pop/pop/POPPropertyAnimation.mm b/BreakingBad/Pods/pop/pop/POPPropertyAnimation.mm new file mode 100644 index 0000000..56a9e5c --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPPropertyAnimation.mm @@ -0,0 +1,125 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "POPPropertyAnimationInternal.h" + +@implementation POPPropertyAnimation + +#pragma mark - Lifecycle + +#undef __state +#define __state ((POPPropertyAnimationState *)_state) + +- (void)_initState +{ + _state = new POPPropertyAnimationState(self); +} + +#pragma mark - Properties + +DEFINE_RW_FLAG(POPPropertyAnimationState, additive, isAdditive, setAdditive:); +DEFINE_RW_PROPERTY(POPPropertyAnimationState, roundingFactor, setRoundingFactor:, CGFloat); +DEFINE_RW_PROPERTY(POPPropertyAnimationState, clampMode, setClampMode:, NSUInteger); +DEFINE_RW_PROPERTY_OBJ(POPPropertyAnimationState, property, setProperty:, POPAnimatableProperty*, ((POPPropertyAnimationState*)_state)->updatedDynamicsThreshold();); +DEFINE_RW_PROPERTY_OBJ_COPY(POPPropertyAnimationState, progressMarkers, setProgressMarkers:, NSArray*, ((POPPropertyAnimationState*)_state)->updatedProgressMarkers();); + +- (id)fromValue +{ + return POPBox(__state->fromVec, __state->valueType); +} + +- (void)setFromValue:(id)aValue +{ + POPPropertyAnimationState *s = __state; + VectorRef vec = POPUnbox(aValue, s->valueType, s->valueCount, YES); + if (!vec_equal(vec, s->fromVec)) { + s->fromVec = vec; + + if (s->tracing) { + [s->tracer updateFromValue:aValue]; + } + } +} + +- (id)toValue +{ + return POPBox(__state->toVec, __state->valueType); +} + +- (void)setToValue:(id)aValue +{ + POPPropertyAnimationState *s = __state; + VectorRef vec = POPUnbox(aValue, s->valueType, s->valueCount, YES); + + if (!vec_equal(vec, s->toVec)) { + s->toVec = vec; + + // invalidate to dependent state + s->didReachToValue = false; + s->distanceVec = NULL; + + if (s->tracing) { + [s->tracer updateToValue:aValue]; + } + + // automatically unpause active animations + if (s->active && s->paused) { + s->setPaused(false); + } + } +} + +- (id)currentValue +{ + return POPBox(__state->currentValue(), __state->valueType); +} + +#pragma mark - Utility + +- (void)_appendDescription:(NSMutableString *)s debug:(BOOL)debug +{ + [s appendFormat:@"; from = %@; to = %@", describe(__state->fromVec), describe(__state->toVec)]; + + if (_state->active) + [s appendFormat:@"; currentValue = %@", describe(__state->currentValue())]; + + if (__state->velocityVec && 0 != __state->velocityVec->norm()) + [s appendFormat:@"; velocity = %@", describe(__state->velocityVec)]; + + if (!self.removedOnCompletion) + [s appendFormat:@"; removedOnCompletion = %@", POPStringFromBOOL(self.removedOnCompletion)]; + + if (__state->progressMarkers) + [s appendFormat:@"; progressMarkers = [%@]", [__state->progressMarkers componentsJoinedByString:@", "]]; + + if (_state->active) + [s appendFormat:@"; progress = %f", __state->progress]; +} + +@end + +@implementation POPPropertyAnimation (NSCopying) + +- (instancetype)copyWithZone:(NSZone *)zone { + + POPPropertyAnimation *copy = [super copyWithZone:zone]; + + if (copy) { + copy.property = [self.property copyWithZone:zone]; + copy.fromValue = self.fromValue; + copy.toValue = self.toValue; + copy.roundingFactor = self.roundingFactor; + copy.clampMode = self.clampMode; + copy.additive = self.additive; + } + + return copy; +} + +@end \ No newline at end of file diff --git a/BreakingBad/Pods/pop/pop/POPPropertyAnimationInternal.h b/BreakingBad/Pods/pop/pop/POPPropertyAnimationInternal.h new file mode 100644 index 0000000..9f2aee4 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPPropertyAnimationInternal.h @@ -0,0 +1,359 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "POPAnimationInternal.h" +#import "POPPropertyAnimation.h" + +static void clampValue(CGFloat &value, CGFloat fromValue, CGFloat toValue, NSUInteger clamp) +{ + BOOL increasing = (toValue > fromValue); + + // Clamp start of animation. + if ((kPOPAnimationClampStart & clamp) && + ((increasing && (value < fromValue)) || (!increasing && (value > fromValue)))) { + value = fromValue; + } + + // Clamp end of animation. + if ((kPOPAnimationClampEnd & clamp) && + ((increasing && (value > toValue)) || (!increasing && (value < toValue)))) { + value = toValue; + } +} + +struct _POPPropertyAnimationState : _POPAnimationState +{ + POPAnimatableProperty *property; + POPValueType valueType; + NSUInteger valueCount; + VectorRef fromVec; + VectorRef toVec; + VectorRef currentVec; + VectorRef previousVec; + VectorRef previous2Vec; + VectorRef velocityVec; + VectorRef originalVelocityVec; + VectorRef distanceVec; + CGFloat roundingFactor; + NSUInteger clampMode; + NSArray *progressMarkers; + POPProgressMarker *progressMarkerState; + NSUInteger progressMarkerCount; + NSUInteger nextProgressMarkerIdx; + CGFloat dynamicsThreshold; + + _POPPropertyAnimationState(id __unsafe_unretained anim) : _POPAnimationState(anim), + property(nil), + valueType((POPValueType)0), + valueCount(0), + fromVec(nullptr), + toVec(nullptr), + currentVec(nullptr), + previousVec(nullptr), + previous2Vec(nullptr), + velocityVec(nullptr), + originalVelocityVec(nullptr), + distanceVec(nullptr), + roundingFactor(0), + clampMode(0), + progressMarkers(nil), + progressMarkerState(nil), + progressMarkerCount(0), + nextProgressMarkerIdx(0), + dynamicsThreshold(0) + { + type = kPOPAnimationBasic; + } + + ~_POPPropertyAnimationState() + { + if (progressMarkerState) { + free(progressMarkerState); + progressMarkerState = NULL; + } + } + + bool canProgress() { + return hasValue(); + } + + bool shouldRound() { + return 0 != roundingFactor; + } + + bool hasValue() { + return 0 != valueCount; + } + + bool isDone() { + // inherit done + if (_POPAnimationState::isDone()) { + return true; + } + + // consider an animation with no values done + if (!hasValue() && !isCustom()) { + return true; + } + + return false; + } + + // returns a copy of the currentVec, rounding if needed + VectorRef currentValue() { + VectorRef vec = VectorRef(Vector::new_vector(currentVec.get())); + if (shouldRound()) { + vec->subRound(1 / roundingFactor); + } + return vec; + } + + void resetProgressMarkerState() + { + for (NSUInteger idx = 0; idx < progressMarkerCount; idx++) + progressMarkerState[idx].reached = false; + + nextProgressMarkerIdx = 0; + } + + void updatedProgressMarkers() + { + if (progressMarkerState) { + free(progressMarkerState); + progressMarkerState = NULL; + } + + progressMarkerCount = progressMarkers.count; + + if (0 != progressMarkerCount) { + progressMarkerState = (POPProgressMarker *)malloc(progressMarkerCount * sizeof(POPProgressMarker)); + [progressMarkers enumerateObjectsUsingBlock:^(NSNumber *progressMarker, NSUInteger idx, BOOL *stop) { + progressMarkerState[idx].reached = false; + progressMarkerState[idx].progress = [progressMarker floatValue]; + }]; + } + + nextProgressMarkerIdx = 0; + } + + virtual void updatedDynamicsThreshold() + { + dynamicsThreshold = property.threshold; + } + + void finalizeProgress() + { + progress = 1.0; + NSUInteger count = valueCount; + VectorRef outVec(Vector::new_vector(count, NULL)); + + if (outVec && toVec) { + *outVec = *toVec; + } + + currentVec = outVec; + clampCurrentValue(); + delegateProgress(); + } + + void computeProgress() { + if (!canProgress()) { + return; + } + + static ComputeProgressFunctor func; + Vector4r v = vector4(currentVec); + Vector4r f = vector4(fromVec); + Vector4r t = vector4(toVec); + progress = func(v, f, t); + } + + void delegateProgress() { + if (!canProgress()) { + return; + } + + if (delegateDidProgress && progressMarkerState) { + + while (nextProgressMarkerIdx < progressMarkerCount) { + if (progress < progressMarkerState[nextProgressMarkerIdx].progress) + break; + + if (!progressMarkerState[nextProgressMarkerIdx].reached) { + ActionEnabler enabler; + [delegate pop_animation:self didReachProgress:progressMarkerState[nextProgressMarkerIdx].progress]; + progressMarkerState[nextProgressMarkerIdx].reached = true; + } + + nextProgressMarkerIdx++; + } + } + + if (!didReachToValue) { + bool didReachToValue = false; + if (0 == valueCount) { + didReachToValue = true; + } else { + Vector4r distance = toVec->vector4r(); + distance -= currentVec->vector4r(); + + if (0 == distance.squaredNorm()) { + didReachToValue = true; + } else { + // components + if (distanceVec) { + didReachToValue = true; + const CGFloat *distanceValues = distanceVec->data(); + for (NSUInteger idx = 0; idx < valueCount; idx++) { + didReachToValue &= (signbit(distance[idx]) != signbit(distanceValues[idx])); + } + } + } + } + + if (didReachToValue) { + handleDidReachToValue(); + } + } + } + + void handleDidReachToValue() { + didReachToValue = true; + + if (delegateDidReachToValue) { + ActionEnabler enabler; + [delegate pop_animationDidReachToValue:self]; + } + + POPAnimationDidReachToValueBlock block = animationDidReachToValueBlock; + if (block != NULL) { + ActionEnabler enabler; + block(self); + } + + if (tracing) { + [tracer didReachToValue:POPBox(currentValue(), valueType, true)]; + } + } + + void readObjectValue(VectorRef *ptrVec, id obj) + { + // use current object value as from value + pop_animatable_read_block read = property.readBlock; + if (NULL != read) { + + Vector4r vec = read_values(read, obj, valueCount); + *ptrVec = VectorRef(Vector::new_vector(valueCount, vec)); + + if (tracing) { + [tracer readPropertyValue:POPBox(*ptrVec, valueType, true)]; + } + } + } + + virtual void willRun(bool started, id obj) { + // ensure from value initialized + if (NULL == fromVec) { + readObjectValue(&fromVec, obj); + } + + // ensure to value initialized + if (NULL == toVec) { + // compute decay to value + if (kPOPAnimationDecay == type) { + [self toValue]; + } else { + // read to value + readObjectValue(&toVec, obj); + } + } + + // handle one time value initialization on start + if (started) { + + // initialize current vec + if (!currentVec) { + currentVec = VectorRef(Vector::new_vector(valueCount, NULL)); + + // initialize current value with from value + // only do this on initial creation to avoid overwriting current value + // on paused animation continuation + if (currentVec && fromVec) { + *currentVec = *fromVec; + } + } + + // ensure velocity values + if (!velocityVec) { + velocityVec = VectorRef(Vector::new_vector(valueCount, NULL)); + } + if (!originalVelocityVec) { + originalVelocityVec = VectorRef(Vector::new_vector(valueCount, NULL)); + } + } + + // ensure distance value initialized + // depends on current value set on one time start + if (NULL == distanceVec) { + + // not yet started animations may not have current value + VectorRef fromVec2 = NULL != currentVec ? currentVec : fromVec; + + if (fromVec2 && toVec) { + Vector4r distance = toVec->vector4r(); + distance -= fromVec2->vector4r(); + + if (0 != distance.squaredNorm()) { + distanceVec = VectorRef(Vector::new_vector(valueCount, distance)); + } + } + } + } + + virtual void reset(bool all) { + _POPAnimationState::reset(all); + + if (all) { + currentVec = NULL; + previousVec = NULL; + previous2Vec = NULL; + } + progress = 0; + resetProgressMarkerState(); + didReachToValue = false; + distanceVec = NULL; + } + + void clampCurrentValue(NSUInteger clamp) + { + if (kPOPAnimationClampNone == clamp) + return; + + // Clamp all vector values + CGFloat *currentValues = currentVec->data(); + const CGFloat *fromValues = fromVec->data(); + const CGFloat *toValues = toVec->data(); + + for (NSUInteger idx = 0; idx < valueCount; idx++) { + clampValue(currentValues[idx], fromValues[idx], toValues[idx], clamp); + } + } + + void clampCurrentValue() + { + clampCurrentValue(clampMode); + } +}; + +typedef struct _POPPropertyAnimationState POPPropertyAnimationState; + +@interface POPPropertyAnimation () + +@end + diff --git a/BreakingBad/Pods/pop/pop/POPSpringAnimation.h b/BreakingBad/Pods/pop/pop/POPSpringAnimation.h new file mode 100644 index 0000000..a22cd5b --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPSpringAnimation.h @@ -0,0 +1,67 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +/** + @abstract A concrete spring animation class. + @discussion Animation is achieved through modeling spring dynamics. + */ +@interface POPSpringAnimation : POPPropertyAnimation + +/** + @abstract The designated initializer. + @returns An instance of a spring animation. + */ ++ (instancetype)animation; + +/** + @abstract Convenience initializer that returns an animation with animatable property of name. + @param name The name of the animatable property. + @returns An instance of a spring animation configured with specified animatable property. + */ ++ (instancetype)animationWithPropertyNamed:(NSString *)name; + +/** + @abstract The current velocity value. + @discussion Set before animation start to account for initial velocity. Expressed in change of value units per second. + */ +@property (copy, nonatomic) id velocity; + +/** + @abstract The effective bounciness. + @discussion Use in conjunction with 'springSpeed' to change animation effect. Values are converted into corresponding dynamics constants. Higher values increase spring movement range resulting in more oscillations and springiness. Defined as a value in the range [0, 20]. Defaults to 4. + */ +@property (assign, nonatomic) CGFloat springBounciness; + +/** + @abstract The effective speed. + @discussion Use in conjunction with 'springBounciness' to change animation effect. Values are converted into corresponding dynamics constants. Higher values increase the dampening power of the spring resulting in a faster initial velocity and more rapid bounce slowdown. Defined as a value in the range [0, 20]. Defaults to 12. + */ +@property (assign, nonatomic) CGFloat springSpeed; + +/** + @abstract The tension used in the dynamics simulation. + @discussion Can be used over bounciness and speed for finer grain tweaking of animation effect. + */ +@property (assign, nonatomic) CGFloat dynamicsTension; + +/** + @abstract The friction used in the dynamics simulation. + @discussion Can be used over bounciness and speed for finer grain tweaking of animation effect. + */ +@property (assign, nonatomic) CGFloat dynamicsFriction; + +/** + @abstract The mass used in the dynamics simulation. + @discussion Can be used over bounciness and speed for finer grain tweaking of animation effect. + */ +@property (assign, nonatomic) CGFloat dynamicsMass; + +@end diff --git a/BreakingBad/Pods/pop/pop/POPSpringAnimation.mm b/BreakingBad/Pods/pop/pop/POPSpringAnimation.mm new file mode 100644 index 0000000..d299770 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPSpringAnimation.mm @@ -0,0 +1,192 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "POPSpringAnimationInternal.h" + +@implementation POPSpringAnimation + +#pragma mark - Lifecycle + +#undef __state +#define __state ((POPSpringAnimationState *)_state) + ++ (instancetype)animation +{ + return [[self alloc] init]; +} + ++ (instancetype)animationWithPropertyNamed:(NSString *)aName +{ + POPSpringAnimation *anim = [self animation]; + anim.property = [POPAnimatableProperty propertyWithName:aName]; + return anim; +} + +- (void)_initState +{ + _state = new POPSpringAnimationState(self); +} + +- (id)init +{ + self = [super _init]; + if (nil != self) { + __state->solver = new SpringSolver4d(1, 1, 1); + __state->updatedDynamicsThreshold(); + __state->updatedBouncinessAndSpeed(); + } + return self; +} + +- (void)dealloc +{ + if (__state) { + delete __state->solver; + __state->solver = NULL; + } +} + +#pragma mark - Properties + +- (id)velocity +{ + return POPBox(__state->velocityVec, __state->valueType); +} + +- (void)setVelocity:(id)aValue +{ + POPPropertyAnimationState *s = __state; + VectorRef vec = POPUnbox(aValue, s->valueType, s->valueCount, YES); + VectorRef origVec = POPUnbox(aValue, s->valueType, s->valueCount, YES); + if (!vec_equal(vec, s->velocityVec)) { + s->velocityVec = vec; + s->originalVelocityVec = origVec; + + if (s->tracing) { + [s->tracer updateVelocity:aValue]; + } + } +} + +DEFINE_RW_PROPERTY(POPSpringAnimationState, dynamicsTension, setDynamicsTension:, CGFloat, [self _updatedDynamicsTension];); +DEFINE_RW_PROPERTY(POPSpringAnimationState, dynamicsFriction, setDynamicsFriction:, CGFloat, [self _updatedDynamicsFriction];); +DEFINE_RW_PROPERTY(POPSpringAnimationState, dynamicsMass, setDynamicsMass:, CGFloat, [self _updatedDynamicsMass];); + +FB_PROPERTY_GET(POPSpringAnimationState, springSpeed, CGFloat); +- (void)setSpringSpeed:(CGFloat)aFloat +{ + POPSpringAnimationState *s = __state; + if (s->userSpecifiedDynamics || aFloat != s->springSpeed) { + s->springSpeed = aFloat; + s->userSpecifiedDynamics = false; + s->updatedBouncinessAndSpeed(); + if (s->tracing) { + [s->tracer updateSpeed:aFloat]; + } + } +} + +FB_PROPERTY_GET(POPSpringAnimationState, springBounciness, CGFloat); +- (void)setSpringBounciness:(CGFloat)aFloat +{ + POPSpringAnimationState *s = __state; + if (s->userSpecifiedDynamics || aFloat != s->springBounciness) { + s->springBounciness = aFloat; + s->userSpecifiedDynamics = false; + s->updatedBouncinessAndSpeed(); + if (s->tracing) { + [s->tracer updateBounciness:aFloat]; + } + } +} + +- (SpringSolver4d *)solver +{ + return __state->solver; +} + +- (void)setSolver:(SpringSolver4d *)aSolver +{ + if (aSolver != __state->solver) { + if (__state->solver) { + delete(__state->solver); + } + __state->solver = aSolver; + } +} + +#pragma mark - Utility + +- (void)_updatedDynamicsTension +{ + __state->userSpecifiedDynamics = true; + if(__state->tracing) { + [__state->tracer updateTension:__state->dynamicsTension]; + } + __state->updatedDynamics(); +} + +- (void)_updatedDynamicsFriction +{ + __state->userSpecifiedDynamics = true; + if(__state->tracing) { + [__state->tracer updateFriction:__state->dynamicsFriction]; + } + __state->updatedDynamics(); +} + +- (void)_updatedDynamicsMass +{ + __state->userSpecifiedDynamics = true; + if(__state->tracing) { + [__state->tracer updateMass:__state->dynamicsMass]; + } + __state->updatedDynamics(); +} + +- (void)_appendDescription:(NSMutableString *)s debug:(BOOL)debug +{ + [super _appendDescription:s debug:debug]; + + if (debug) { + if (_state->userSpecifiedDynamics) { + [s appendFormat:@"; dynamics = (tension:%f, friction:%f, mass:%f)", __state->dynamicsTension, __state->dynamicsFriction, __state->dynamicsMass]; + } else { + [s appendFormat:@"; bounciness = %f; speed = %f", __state->springBounciness, __state->springSpeed]; + } + } +} + +@end + +@implementation POPSpringAnimation (NSCopying) + +- (instancetype)copyWithZone:(NSZone *)zone { + + POPSpringAnimation *copy = [super copyWithZone:zone]; + + if (copy) { + id velocity = POPBox(__state->originalVelocityVec, __state->valueType); + + // If velocity never gets set, then POPBox will return nil, messing up __state->valueCount. + if (velocity) { + copy.velocity = velocity; + } + + copy.springBounciness = self.springBounciness; + copy.springSpeed = self.springSpeed; + copy.dynamicsTension = self.dynamicsTension; + copy.dynamicsFriction = self.dynamicsFriction; + copy.dynamicsMass = self.dynamicsMass; + } + + return copy; +} + +@end \ No newline at end of file diff --git a/BreakingBad/Pods/pop/pop/POPSpringAnimationInternal.h b/BreakingBad/Pods/pop/pop/POPSpringAnimationInternal.h new file mode 100644 index 0000000..6a72a43 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPSpringAnimationInternal.h @@ -0,0 +1,132 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "POPAnimationExtras.h" +#import "POPPropertyAnimationInternal.h" + +struct _POPSpringAnimationState : _POPPropertyAnimationState +{ + SpringSolver4d *solver; + CGFloat springSpeed; + CGFloat springBounciness; // normalized springiness + CGFloat dynamicsTension; // tension + CGFloat dynamicsFriction; // friction + CGFloat dynamicsMass; // mass + + _POPSpringAnimationState(id __unsafe_unretained anim) : _POPPropertyAnimationState(anim), + solver(nullptr), + springSpeed(12.), + springBounciness(4.), + dynamicsTension(0), + dynamicsFriction(0), + dynamicsMass(0) + { + type = kPOPAnimationSpring; + } + + bool hasConverged() + { + NSUInteger count = valueCount; + if (shouldRound()) { + return vec_equal(previous2Vec, previousVec) && vec_equal(previousVec, toVec); + } else { + if (!previousVec || !previous2Vec) + return false; + + CGFloat t = dynamicsThreshold / 5; + + const CGFloat *toValues = toVec->data(); + const CGFloat *previousValues = previousVec->data(); + const CGFloat *previous2Values = previous2Vec->data(); + + for (NSUInteger idx = 0; idx < count; idx++) { + if ((std::abs(toValues[idx] - previousValues[idx]) >= t) || (std::abs(previous2Values[idx] - previousValues[idx]) >= t)) { + return false; + } + } + return true; + } + } + + bool isDone() { + if (_POPPropertyAnimationState::isDone()) { + return true; + } + return solver->started() && (hasConverged() || solver->hasConverged()); + } + + void updatedDynamics() + { + if (NULL != solver) { + solver->setConstants(dynamicsTension, dynamicsFriction, dynamicsMass); + } + } + + void updatedDynamicsThreshold() + { + _POPPropertyAnimationState::updatedDynamicsThreshold(); + if (NULL != solver) { + solver->setThreshold(dynamicsThreshold); + } + } + + void updatedBouncinessAndSpeed() { + [POPSpringAnimation convertBounciness:springBounciness speed:springSpeed toTension:&dynamicsTension friction:&dynamicsFriction mass:&dynamicsMass]; + updatedDynamics(); + } + + bool advance(CFTimeInterval time, CFTimeInterval dt, id obj) { + // advance past not yet initialized animations + if (NULL == currentVec) { + return false; + } + + CFTimeInterval localTime = time - startTime; + + Vector4d value = vector4d(currentVec); + Vector4d toValue = vector4d(toVec); + Vector4d velocity = vector4d(velocityVec); + + SSState4d state; + state.p = toValue - value; + + // the solver assumes a spring of size zero + // flip the velocity from user perspective to solver perspective + state.v = velocity * -1; + + solver->advance(state, localTime, dt); + value = toValue - state.p; + + // flip velocity back to user perspective + velocity = state.v * -1; + + *currentVec = value; + + if (velocityVec) { + *velocityVec = velocity; + } + + clampCurrentValue(); + + return true; + } + + virtual void reset(bool all) { + _POPPropertyAnimationState::reset(all); + + if (solver) { + solver->setConstants(dynamicsTension, dynamicsFriction, dynamicsMass); + solver->reset(); + } + } +}; + +typedef struct _POPSpringAnimationState POPSpringAnimationState; diff --git a/BreakingBad/Pods/pop/pop/POPSpringSolver.h b/BreakingBad/Pods/pop/pop/POPSpringSolver.h new file mode 100644 index 0000000..df485bf --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPSpringSolver.h @@ -0,0 +1,190 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +#import "POPVector.h" + +namespace POP { + + template + struct SSState + { + T p; + T v; + }; + + template + struct SSDerivative + { + T dp; + T dv; + }; + + typedef SSState SSState4d; + typedef SSDerivative SSDerivative4d; + + const CFTimeInterval solverDt = 0.001f; + const CFTimeInterval maxSolverDt = 30.0f; + + /** + Templated spring solver class. + */ + template + class SpringSolver + { + double _k; // stiffness + double _b; // dampening + double _m; // mass + + double _tp; // threshold + double _tv; // threshold velocity + double _ta; // threshold acceleration + + CFTimeInterval _accumulatedTime; + SSState _lastState; + T _lastDv; + bool _started; + + public: + SpringSolver(double k, double b, double m = 1) : _k(k), _b(b), _m(m), _started(false) + { + _accumulatedTime = 0; + _lastState.p = T::Zero(); + _lastState.v = T::Zero(); + _lastDv = T::Zero(); + setThreshold(1.); + } + + ~SpringSolver() + { + } + + bool started() + { + return _started; + } + + void setConstants(double k, double b, double m) + { + _k = k; + _b = b; + _m = m; + } + + void setThreshold(double t) + { + _tp = t / 2; // half a unit + _tv = 25.0 * t; // 5 units per second, squared for comparison + _ta = 625.0 * t * t; // 5 units per second squared, squared for comparison + } + + T acceleration(const SSState &state, double t) + { + return state.p*(-_k/_m) - state.v*(_b/_m); + } + + SSDerivative evaluate(const SSState &initial, double t) + { + SSDerivative output; + output.dp = initial.v; + output.dv = acceleration(initial, t); + return output; + } + + SSDerivative evaluate(const SSState &initial, double t, double dt, const SSDerivative &d) + { + SSState state; + state.p = initial.p + d.dp*dt; + state.v = initial.v + d.dv*dt; + SSDerivative output; + output.dp = state.v; + output.dv = acceleration(state, t+dt); + return output; + } + + void integrate(SSState &state, double t, double dt) + { + SSDerivative a = evaluate(state, t); + SSDerivative b = evaluate(state, t, dt*0.5, a); + SSDerivative c = evaluate(state, t, dt*0.5, b); + SSDerivative d = evaluate(state, t, dt, c); + + T dpdt = (a.dp + (b.dp + c.dp)*2.0 + d.dp) * (1.0/6.0); + T dvdt = (a.dv + (b.dv + c.dv)*2.0 + d.dv) * (1.0/6.0); + + state.p = state.p + dpdt*dt; + state.v = state.v + dvdt*dt; + + _lastDv = dvdt; + } + + SSState interpolate(const SSState &previous, const SSState ¤t, double alpha) + { + SSState state; + state.p = current.p*alpha + previous.p*(1-alpha); + state.v = current.v*alpha + previous.v*(1-alpha); + return state; + } + + void advance(SSState &state, double t, double dt) + { + _started = true; + + if (dt > maxSolverDt) { + // excessive time step, force shut down + _lastDv = _lastState.v = _lastState.p = T::Zero(); + } else { + _accumulatedTime += dt; + + SSState previousState = state, currentState = state; + while (_accumulatedTime >= solverDt) { + previousState = currentState; + this->integrate(currentState, t, solverDt); + t += solverDt; + _accumulatedTime -= solverDt; + } + CFTimeInterval alpha = _accumulatedTime / solverDt; + _lastState = state = this->interpolate(previousState, currentState, alpha); + } + } + + bool hasConverged() + { + if (!_started) { + return false; + } + + for (size_t idx = 0; idx < _lastState.p.size(); idx++) { + if (fabs(_lastState.p(idx)) >= _tp) { + return false; + } + } + + return (_lastState.v.squaredNorm() < _tv) && (_lastDv.squaredNorm() < _ta); + } + + void reset() + { + _accumulatedTime = 0; + _lastState.p = T::Zero(); + _lastState.v = T::Zero(); + _lastDv = T::Zero(); + _started = false; + } + }; + + /** + Convenience spring solver type definitions. + */ + typedef SpringSolver SpringSolver2d; + typedef SpringSolver SpringSolver3d; + typedef SpringSolver SpringSolver4d; +} + diff --git a/BreakingBad/Pods/pop/pop/POPVector.h b/BreakingBad/Pods/pop/pop/POPVector.h new file mode 100644 index 0000000..44d4e9f --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPVector.h @@ -0,0 +1,394 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#ifndef __POP__FBVector__ +#define __POP__FBVector__ + +#include +#include + +#import + +#import + +#import "POPDefines.h" + +#if SCENEKIT_SDK_AVAILABLE +#import +#endif + +#if TARGET_OS_IPHONE +#import +#endif + +#import "POPMath.h" + +namespace POP { + + /** Fixed two-size vector class */ + template + struct Vector2 + { + private: + typedef T Vector2::* const _data[2]; + static const _data _v; + + public: + T x; + T y; + + // Zero vector + static const Vector2 Zero() { return Vector2(0); } + + // Constructors + Vector2() {} + explicit Vector2(T v) { x = v; y = v; }; + explicit Vector2(T x0, T y0) : x(x0), y(y0) {}; + explicit Vector2(const CGPoint &p) : x(p.x), y (p.y) {} + explicit Vector2(const CGSize &s) : x(s.width), y (s.height) {} + + // Copy constructor + template explicit Vector2(const Vector2 &v) : x(v.x), y(v.y) {} + + // Index operators + const T& operator[](size_t i) const { return this->*_v[i]; } + T& operator[](size_t i) { return this->*_v[i]; } + const T& operator()(size_t i) const { return this->*_v[i]; } + T& operator()(size_t i) { return this->*_v[i]; } + + // Backing data + T * data() { return &(this->*_v[0]); } + const T * data() const { return &(this->*_v[0]); } + + // Size + inline size_t size() const { return 2; } + + // Assignment + Vector2 &operator= (T v) { x = v; y = v; return *this;} + template Vector2 &operator= (const Vector2 &v) { x = v.x; y = v.y; return *this;} + + // Negation + Vector2 operator- (void) const { return Vector2(-x, -y); } + + // Equality + bool operator== (T v) const { return (x == v && y == v); } + bool operator== (const Vector2 &v) const { return (x == v.x && y == v.y); } + + // Inequality + bool operator!= (T v) const {return (x != v || y != v); } + bool operator!= (const Vector2 &v) const { return (x != v.x || y != v.y); } + + // Scalar Math + Vector2 operator+ (T v) const { return Vector2(x + v, y + v); } + Vector2 operator- (T v) const { return Vector2(x - v, y - v); } + Vector2 operator* (T v) const { return Vector2(x * v, y * v); } + Vector2 operator/ (T v) const { return Vector2(x / v, y / v); } + Vector2 &operator+= (T v) { x += v; y += v; return *this; }; + Vector2 &operator-= (T v) { x -= v; y -= v; return *this; }; + Vector2 &operator*= (T v) { x *= v; y *= v; return *this; }; + Vector2 &operator/= (T v) { x /= v; y /= v; return *this; }; + + // Vector Math + Vector2 operator+ (const Vector2 &v) const { return Vector2(x + v.x, y + v.y); } + Vector2 operator- (const Vector2 &v) const { return Vector2(x - v.x, y - v.y); } + Vector2 &operator+= (const Vector2 &v) { x += v.x; y += v.y; return *this; }; + Vector2 &operator-= (const Vector2 &v) { x -= v.x; y -= v.y; return *this; }; + + // Norms + CGFloat norm() const { return sqrtr(squaredNorm()); } + CGFloat squaredNorm() const { return x * x + y * y; } + + // Cast + template Vector2 cast() const { return Vector2(x, y); } + CGPoint cg_point() const { return CGPointMake(x, y); }; + }; + + template + const typename Vector2::_data Vector2::_v = { &Vector2::x, &Vector2::y }; + + /** Fixed three-size vector class */ + template + struct Vector3 + { + private: + typedef T Vector3::* const _data[3]; + static const _data _v; + + public: + T x; + T y; + T z; + + // Zero vector + static const Vector3 Zero() { return Vector3(0); }; + + // Constructors + Vector3() {} + explicit Vector3(T v) : x(v), y(v), z(v) {}; + explicit Vector3(T x0, T y0, T z0) : x(x0), y(y0), z(z0) {}; + + // Copy constructor + template explicit Vector3(const Vector3 &v) : x(v.x), y(v.y), z(v.z) {} + + // Index operators + const T& operator[](size_t i) const { return this->*_v[i]; } + T& operator[](size_t i) { return this->*_v[i]; } + const T& operator()(size_t i) const { return this->*_v[i]; } + T& operator()(size_t i) { return this->*_v[i]; } + + // Backing data + T * data() { return &(this->*_v[0]); } + const T * data() const { return &(this->*_v[0]); } + + // Size + inline size_t size() const { return 3; } + + // Assignment + Vector3 &operator= (T v) { x = v; y = v; z = v; return *this;} + template Vector3 &operator= (const Vector3 &v) { x = v.x; y = v.y; z = v.z; return *this;} + + // Negation + Vector3 operator- (void) const { return Vector3(-x, -y, -z); } + + // Equality + bool operator== (T v) const { return (x == v && y == v && z = v); } + bool operator== (const Vector3 &v) const { return (x == v.x && y == v.y && z == v.z); } + + // Inequality + bool operator!= (T v) const {return (x != v || y != v || z != v); } + bool operator!= (const Vector3 &v) const { return (x != v.x || y != v.y || z != v.z); } + + // Scalar Math + Vector3 operator+ (T v) const { return Vector3(x + v, y + v, z + v); } + Vector3 operator- (T v) const { return Vector3(x - v, y - v, z - v); } + Vector3 operator* (T v) const { return Vector3(x * v, y * v, z * v); } + Vector3 operator/ (T v) const { return Vector3(x / v, y / v, z / v); } + Vector3 &operator+= (T v) { x += v; y += v; z += v; return *this; }; + Vector3 &operator-= (T v) { x -= v; y -= v; z -= v; return *this; }; + Vector3 &operator*= (T v) { x *= v; y *= v; z *= v; return *this; }; + Vector3 &operator/= (T v) { x /= v; y /= v; z /= v; return *this; }; + + // Vector Math + Vector3 operator+ (const Vector3 &v) const { return Vector3(x + v.x, y + v.y, z + v.z); } + Vector3 operator- (const Vector3 &v) const { return Vector3(x - v.x, y - v.y, z - v.z); } + Vector3 &operator+= (const Vector3 &v) { x += v.x; y += v.y; z += v.z; return *this; }; + Vector3 &operator-= (const Vector3 &v) { x -= v.x; y -= v.y; z -= v.z; return *this; }; + + // Norms + CGFloat norm() const { return sqrtr(squaredNorm()); } + CGFloat squaredNorm() const { return x * x + y * y + z * z; } + + // Cast + template Vector3 cast() const { return Vector3(x, y, z); } + }; + + template + const typename Vector3::_data Vector3::_v = { &Vector3::x, &Vector3::y, &Vector3::z }; + + /** Fixed four-size vector class */ + template + struct Vector4 + { + private: + typedef T Vector4::* const _data[4]; + static const _data _v; + + public: + T x; + T y; + T z; + T w; + + // Zero vector + static const Vector4 Zero() { return Vector4(0); }; + + // Constructors + Vector4() {} + explicit Vector4(T v) : x(v), y(v), z(v), w(v) {}; + explicit Vector4(T x0, T y0, T z0, T w0) : x(x0), y(y0), z(z0), w(w0) {}; + + // Copy constructor + template explicit Vector4(const Vector4 &v) : x(v.x), y(v.y), z(v.z), w(v.w) {} + + // Index operators + const T& operator[](size_t i) const { return this->*_v[i]; } + T& operator[](size_t i) { return this->*_v[i]; } + const T& operator()(size_t i) const { return this->*_v[i]; } + T& operator()(size_t i) { return this->*_v[i]; } + + // Backing data + T * data() { return &(this->*_v[0]); } + const T * data() const { return &(this->*_v[0]); } + + // Size + inline size_t size() const { return 4; } + + // Assignment + Vector4 &operator= (T v) { x = v; y = v; z = v; w = v; return *this;} + template Vector4 &operator= (const Vector4 &v) { x = v.x; y = v.y; z = v.z; w = v.w; return *this;} + + // Negation + Vector4 operator- (void) const { return Vector4(-x, -y, -z, -w); } + + // Equality + bool operator== (T v) const { return (x == v && y == v && z = v, w = v); } + bool operator== (const Vector4 &v) const { return (x == v.x && y == v.y && z == v.z && w == v.w); } + + // Inequality + bool operator!= (T v) const {return (x != v || y != v || z != v || w != v); } + bool operator!= (const Vector4 &v) const { return (x != v.x || y != v.y || z != v.z || w != v.w); } + + // Scalar Math + Vector4 operator+ (T v) const { return Vector4(x + v, y + v, z + v, w + v); } + Vector4 operator- (T v) const { return Vector4(x - v, y - v, z - v, w - v); } + Vector4 operator* (T v) const { return Vector4(x * v, y * v, z * v, w * v); } + Vector4 operator/ (T v) const { return Vector4(x / v, y / v, z / v, w / v); } + Vector4 &operator+= (T v) { x += v; y += v; z += v; w += v; return *this; }; + Vector4 &operator-= (T v) { x -= v; y -= v; z -= v; w -= v; return *this; }; + Vector4 &operator*= (T v) { x *= v; y *= v; z *= v; w *= v; return *this; }; + Vector4 &operator/= (T v) { x /= v; y /= v; z /= v; w /= v; return *this; }; + + // Vector Math + Vector4 operator+ (const Vector4 &v) const { return Vector4(x + v.x, y + v.y, z + v.z, w + v.w); } + Vector4 operator- (const Vector4 &v) const { return Vector4(x - v.x, y - v.y, z - v.z, w - v.w); } + Vector4 &operator+= (const Vector4 &v) { x += v.x; y += v.y; z += v.z; w += v.w; return *this; }; + Vector4 &operator-= (const Vector4 &v) { x -= v.x; y -= v.y; z -= v.z; w -= v.w; return *this; }; + + // Norms + CGFloat norm() const { return sqrtr(squaredNorm()); } + CGFloat squaredNorm() const { return x * x + y * y + z * z + w * w; } + + // Cast + template Vector4 cast() const { return Vector4(x, y, z, w); } + }; + + template + const typename Vector4::_data Vector4::_v = { &Vector4::x, &Vector4::y, &Vector4::z, &Vector4::w }; + + /** Convenience typedefs */ + typedef Vector2 Vector2f; + typedef Vector2 Vector2d; + typedef Vector2 Vector2r; + typedef Vector3 Vector3f; + typedef Vector3 Vector3d; + typedef Vector3 Vector3r; + typedef Vector4 Vector4f; + typedef Vector4 Vector4d; + typedef Vector4 Vector4r; + + /** Variable-sized vector class */ + class Vector + { + size_t _count; + CGFloat *_values; + + private: + Vector(size_t); + Vector(const Vector& other); + + public: + ~Vector(); + + // Creates a new vector instance of count with values. Initializing a vector of size 0 returns NULL. + static Vector *new_vector(NSUInteger count, const CGFloat *values); + + // Creates a new vector given a pointer to another. Can return NULL. + static Vector *new_vector(const Vector * const other); + + // Creates a variable size vector given a static vector and count. + static Vector *new_vector(NSUInteger count, Vector4r vec); + + // Size of vector + NSUInteger size() const { return _count; } + + // Returns array of values + CGFloat *data () { return _values; } + const CGFloat *data () const { return _values; }; + + // Vector2r support + Vector2r vector2r() const; + + // Vector4r support + Vector4r vector4r() const; + + // CGFloat support + static Vector *new_cg_float(CGFloat f); + + // CGPoint support + CGPoint cg_point() const; + static Vector *new_cg_point(const CGPoint &p); + + // CGSize support + CGSize cg_size() const; + static Vector *new_cg_size(const CGSize &s); + + // CGRect support + CGRect cg_rect() const; + static Vector *new_cg_rect(const CGRect &r); + +#if TARGET_OS_IPHONE + // UIEdgeInsets support + UIEdgeInsets ui_edge_insets() const; + static Vector *new_ui_edge_insets(const UIEdgeInsets &i); +#endif + + // CGAffineTransform support + CGAffineTransform cg_affine_transform() const; + static Vector *new_cg_affine_transform(const CGAffineTransform &t); + + // CGColorRef support + CGColorRef cg_color() const CF_RETURNS_RETAINED; + static Vector *new_cg_color(CGColorRef color); + +#if SCENEKIT_SDK_AVAILABLE + // SCNVector3 support + SCNVector3 scn_vector3() const; + static Vector *new_scn_vector3(const SCNVector3 &vec3); + + // SCNVector4 support + SCNVector4 scn_vector4() const; + static Vector *new_scn_vector4(const SCNVector4 &vec4); +#endif + + // operator overloads + CGFloat &operator[](size_t i) const { + NSCAssert(size() > i, @"unexpected vector size:%lu", (unsigned long)size()); + return _values[i]; + } + + // Returns the mathematical length + CGFloat norm() const; + CGFloat squaredNorm() const; + + // Round to nearest sub + void subRound(CGFloat sub); + + // Returns string description + NSString * toString() const; + + // Operator overloads + template Vector& operator= (const Vector4& other) { + size_t count = MIN(_count, other.size()); + for (size_t i = 0; i < count; i++) { + _values[i] = other[i]; + } + return *this; + } + Vector& operator= (const Vector& other); + void swap(Vector &first, Vector &second); + bool operator==(const Vector &other) const; + bool operator!=(const Vector &other) const; + }; + + /** Convenience typedefs */ + typedef std::shared_ptr VectorRef; + typedef std::shared_ptr VectorConstRef; + +} +#endif /* defined(__POP__FBVector__) */ diff --git a/BreakingBad/Pods/pop/pop/POPVector.mm b/BreakingBad/Pods/pop/pop/POPVector.mm new file mode 100644 index 0000000..96cee24 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/POPVector.mm @@ -0,0 +1,334 @@ +/** + Copyright (c) 2014-present, Facebook, Inc. + All rights reserved. + + This source code is licensed under the BSD-style license found in the + LICENSE file in the root directory of this source tree. An additional grant + of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "POPVector.h" + +#import "POPDefines.h" +#import "POPCGUtils.h" + +namespace POP +{ + + Vector::Vector(const size_t count) + { + _count = count; + _values = 0 != count ? (CGFloat *)calloc(count, sizeof(CGFloat)) : NULL; + } + + Vector::Vector(const Vector& other) + { + _count = other.size(); + _values = 0 != _count ? (CGFloat *)calloc(_count, sizeof(CGFloat)) : NULL; + if (0 != _count) { + memcpy(_values, other.data(), _count * sizeof(CGFloat)); + } + } + + Vector::~Vector() + { + if (NULL != _values) { + free(_values); + _values = NULL; + } + _count = 0; + } + + void Vector::swap(Vector &first, Vector &second) + { + using std::swap; + swap(first._count, second._count); + swap(first._values, second._values); + } + + Vector& Vector::operator=(const Vector& other) + { + Vector temp(other); + swap(*this, temp); + return *this; + } + + bool Vector::operator==(const Vector &other) const { + if (_count != other.size()) { + return false; + } + + const CGFloat * const values = other.data(); + + for (NSUInteger idx = 0; idx < _count; idx++) { + if (_values[idx] != values[idx]) { + return false; + } + } + + return true; + } + + bool Vector::operator!=(const Vector &other) const { + if (_count == other.size()) { + return false; + } + + const CGFloat * const values = other.data(); + + for (NSUInteger idx = 0; idx < _count; idx++) { + if (_values[idx] != values[idx]) { + return false; + } + } + + return true; + } + + Vector *Vector::new_vector(NSUInteger count, const CGFloat *values) + { + if (0 == count) { + return NULL; + } + + Vector *v = new Vector(count); + if (NULL != values) { + memcpy(v->_values, values, count * sizeof(CGFloat)); + } + return v; + } + + Vector *Vector::new_vector(const Vector * const other) + { + if (NULL == other) { + return NULL; + } + + return Vector::new_vector(other->size(), other->data()); + } + + Vector *Vector::new_vector(NSUInteger count, Vector4r vec) + { + if (0 == count) { + return NULL; + } + + Vector *v = new Vector(count); + + NSCAssert(count <= 4, @"unexpected count %lu", (unsigned long)count); + for (NSUInteger i = 0; i < MIN(count, (NSUInteger)4); i++) { + v->_values[i] = vec[i]; + } + + return v; + } + + Vector4r Vector::vector4r() const + { + Vector4r v = Vector4r::Zero(); + for (size_t i = 0; i < _count; i++) { + v(i) = _values[i]; + } + return v; + } + + Vector2r Vector::vector2r() const + { + Vector2r v = Vector2r::Zero(); + if (_count > 0) v(0) = _values[0]; + if (_count > 1) v(1) = _values[1]; + return v; + } + + Vector *Vector::new_cg_float(CGFloat f) + { + Vector *v = new Vector(1); + v->_values[0] = f; + return v; + } + + CGPoint Vector::cg_point () const + { + Vector2r v = vector2r(); + return CGPointMake(v(0), v(1)); + } + + Vector *Vector::new_cg_point(const CGPoint &p) + { + Vector *v = new Vector(2); + v->_values[0] = p.x; + v->_values[1] = p.y; + return v; + } + + CGSize Vector::cg_size () const + { + Vector2r v = vector2r(); + return CGSizeMake(v(0), v(1)); + } + + Vector *Vector::new_cg_size(const CGSize &s) + { + Vector *v = new Vector(2); + v->_values[0] = s.width; + v->_values[1] = s.height; + return v; + } + + CGRect Vector::cg_rect() const + { + return _count < 4 ? CGRectZero : CGRectMake(_values[0], _values[1], _values[2], _values[3]); + } + + Vector *Vector::new_cg_rect(const CGRect &r) + { + Vector *v = new Vector(4); + v->_values[0] = r.origin.x; + v->_values[1] = r.origin.y; + v->_values[2] = r.size.width; + v->_values[3] = r.size.height; + return v; + } + +#if TARGET_OS_IPHONE + + UIEdgeInsets Vector::ui_edge_insets() const + { + return _count < 4 ? UIEdgeInsetsZero : UIEdgeInsetsMake(_values[0], _values[1], _values[2], _values[3]); + } + + Vector *Vector::new_ui_edge_insets(const UIEdgeInsets &i) + { + Vector *v = new Vector(4); + v->_values[0] = i.top; + v->_values[1] = i.left; + v->_values[2] = i.bottom; + v->_values[3] = i.right; + return v; + } + +#endif + + CGAffineTransform Vector::cg_affine_transform() const + { + if (_count < 6) { + return CGAffineTransformIdentity; + } + + NSCAssert(size() >= 6, @"unexpected vector size:%lu", (unsigned long)size()); + CGAffineTransform t; + t.a = _values[0]; + t.b = _values[1]; + t.c = _values[2]; + t.d = _values[3]; + t.tx = _values[4]; + t.ty = _values[5]; + return t; + } + + Vector *Vector::new_cg_affine_transform(const CGAffineTransform &t) + { + Vector *v = new Vector(6); + v->_values[0] = t.a; + v->_values[1] = t.b; + v->_values[2] = t.c; + v->_values[3] = t.d; + v->_values[4] = t.tx; + v->_values[5] = t.ty; + return v; + } + + CGColorRef Vector::cg_color() const + { + if (_count < 4) { + return NULL; + } + return POPCGColorRGBACreate(_values); + } + + Vector *Vector::new_cg_color(CGColorRef color) + { + CGFloat rgba[4]; + POPCGColorGetRGBAComponents(color, rgba); + return new_vector(4, rgba); + } + +#if SCENEKIT_SDK_AVAILABLE + SCNVector3 Vector::scn_vector3() const + { + return _count < 3 ? SCNVector3Make(0.0, 0.0, 0.0) : SCNVector3Make(_values[0], _values[1], _values[2]); + } + + Vector *Vector::new_scn_vector3(const SCNVector3 &vec3) + { + Vector *v = new Vector(3); + v->_values[0] = vec3.x; + v->_values[1] = vec3.y; + v->_values[2] = vec3.z; + return v; + } + + SCNVector4 Vector::scn_vector4() const + { + return _count < 4 ? SCNVector4Make(0.0, 0.0, 0.0, 0.0) : SCNVector4Make(_values[0], _values[1], _values[2], _values[3]); + } + + Vector *Vector::new_scn_vector4(const SCNVector4 &vec4) + { + Vector *v = new Vector(4); + v->_values[0] = vec4.x; + v->_values[1] = vec4.y; + v->_values[2] = vec4.z; + v->_values[3] = vec4.w; + return v; + } +#endif + + void Vector::subRound(CGFloat sub) + { + for (NSUInteger idx = 0; idx < _count; idx++) { + _values[idx] = POPSubRound(_values[idx], sub); + } + } + + CGFloat Vector::norm() const + { + return sqrtr(squaredNorm()); + } + + CGFloat Vector::squaredNorm() const + { + CGFloat d = 0; + for (NSUInteger idx = 0; idx < _count; idx++) { + d += (_values[idx] * _values[idx]); + } + return d; + } + + NSString * Vector::toString() const + { + if (0 == _count) + return @"()"; + + if (1 == _count) + return [NSString stringWithFormat:@"%f", _values[0]]; + + if (2 == _count) + return [NSString stringWithFormat:@"(%.3f, %.3f)", _values[0], _values[1]]; + + NSMutableString *s = [NSMutableString stringWithCapacity:10]; + + for (NSUInteger idx = 0; idx < _count; idx++) { + if (0 == idx) { + [s appendFormat:@"[%.3f", _values[idx]]; + } else if (idx == _count - 1) { + [s appendFormat:@", %.3f]", _values[idx]]; + } else { + [s appendFormat:@", %.3f", _values[idx]]; + } + } + + return s; + + } +} diff --git a/BreakingBad/Pods/pop/pop/WebCore/FloatConversion.h b/BreakingBad/Pods/pop/pop/WebCore/FloatConversion.h new file mode 100644 index 0000000..4a16166 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/WebCore/FloatConversion.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2007 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef FloatConversion_h +#define FloatConversion_h + +#include + +namespace WebCore { + + template + float narrowPrecisionToFloat(T); + + template<> + inline float narrowPrecisionToFloat(double number) + { + return static_cast(number); + } + + template + CGFloat narrowPrecisionToCGFloat(T); + + template<> + inline CGFloat narrowPrecisionToCGFloat(double number) + { + return static_cast(number); + } + +} // namespace WebCore + +#endif // FloatConversion_h diff --git a/BreakingBad/Pods/pop/pop/WebCore/TransformationMatrix.cpp b/BreakingBad/Pods/pop/pop/WebCore/TransformationMatrix.cpp new file mode 100644 index 0000000..7264ab5 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/WebCore/TransformationMatrix.cpp @@ -0,0 +1,1074 @@ +/* + * Copyright (C) 2005, 2006 Apple Computer, Inc. All rights reserved. + * Copyright (C) 2009 Torch Mobile, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "TransformationMatrix.h" + +#include + +#include "FloatConversion.h" + +inline double deg2rad(double d) { return d * M_PI / 180.0; } +inline double rad2deg(double r) { return r * 180.0 / M_PI; } +inline double deg2grad(double d) { return d * 400.0 / 360.0; } +inline double grad2deg(double g) { return g * 360.0 / 400.0; } +inline double turn2deg(double t) { return t * 360.0; } +inline double deg2turn(double d) { return d / 360.0; } +inline double rad2grad(double r) { return r * 200.0 / M_PI; } +inline double grad2rad(double g) { return g * M_PI / 200.0; } + +//using namespace std; + +namespace WebCore { + + // + // Supporting Math Functions + // + // This is a set of function from various places (attributed inline) to do things like + // inversion and decomposition of a 4x4 matrix. They are used throughout the code + // + + // + // Adapted from Matrix Inversion by Richard Carling, Graphics Gems . + + // EULA: The Graphics Gems code is copyright-protected. In other words, you cannot claim the text of the code + // as your own and resell it. Using the code is permitted in any program, product, or library, non-commercial + // or commercial. Giving credit is not required, though is a nice gesture. The code comes as-is, and if there + // are any flaws or problems with any Gems code, nobody involved with Gems - authors, editors, publishers, or + // webmasters - are to be held responsible. Basically, don't be a jerk, and remember that anything free comes + // with no guarantee. + + // A clarification about the storage of matrix elements + // + // This class uses a 2 dimensional array internally to store the elements of the matrix. The first index into + // the array refers to the column that the element lies in; the second index refers to the row. + // + // In other words, this is the layout of the matrix: + // + // | m_matrix[0][0] m_matrix[1][0] m_matrix[2][0] m_matrix[3][0] | + // | m_matrix[0][1] m_matrix[1][1] m_matrix[2][1] m_matrix[3][1] | + // | m_matrix[0][2] m_matrix[1][2] m_matrix[2][2] m_matrix[3][2] | + // | m_matrix[0][3] m_matrix[1][3] m_matrix[2][3] m_matrix[3][3] | + + typedef double Vector4[4]; + typedef double Vector3[3]; + + const double SMALL_NUMBER = 1.e-8; + + // inverse(original_matrix, inverse_matrix) + // + // calculate the inverse of a 4x4 matrix + // + // -1 + // A = ___1__ adjoint A + // det A + + // double = determinant2x2(double a, double b, double c, double d) + // + // calculate the determinant of a 2x2 matrix. + + static double determinant2x2(double a, double b, double c, double d) + { + return a * d - b * c; + } + + // double = determinant3x3(a1, a2, a3, b1, b2, b3, c1, c2, c3) + // + // Calculate the determinant of a 3x3 matrix + // in the form + // + // | a1, b1, c1 | + // | a2, b2, c2 | + // | a3, b3, c3 | + + static double determinant3x3(double a1, double a2, double a3, double b1, double b2, double b3, double c1, double c2, double c3) + { + return a1 * determinant2x2(b2, b3, c2, c3) + - b1 * determinant2x2(a2, a3, c2, c3) + + c1 * determinant2x2(a2, a3, b2, b3); + } + + // double = determinant4x4(matrix) + // + // calculate the determinant of a 4x4 matrix. + + static double determinant4x4(const TransformationMatrix::Matrix4& m) + { + // Assign to individual variable names to aid selecting + // correct elements + + double a1 = m[0][0]; + double b1 = m[0][1]; + double c1 = m[0][2]; + double d1 = m[0][3]; + + double a2 = m[1][0]; + double b2 = m[1][1]; + double c2 = m[1][2]; + double d2 = m[1][3]; + + double a3 = m[2][0]; + double b3 = m[2][1]; + double c3 = m[2][2]; + double d3 = m[2][3]; + + double a4 = m[3][0]; + double b4 = m[3][1]; + double c4 = m[3][2]; + double d4 = m[3][3]; + + return a1 * determinant3x3(b2, b3, b4, c2, c3, c4, d2, d3, d4) + - b1 * determinant3x3(a2, a3, a4, c2, c3, c4, d2, d3, d4) + + c1 * determinant3x3(a2, a3, a4, b2, b3, b4, d2, d3, d4) + - d1 * determinant3x3(a2, a3, a4, b2, b3, b4, c2, c3, c4); + } + + // adjoint( original_matrix, inverse_matrix ) + // + // calculate the adjoint of a 4x4 matrix + // + // Let a denote the minor determinant of matrix A obtained by + // ij + // + // deleting the ith row and jth column from A. + // + // i+j + // Let b = (-1) a + // ij ji + // + // The matrix B = (b ) is the adjoint of A + // ij + + static void adjoint(const TransformationMatrix::Matrix4& matrix, TransformationMatrix::Matrix4& result) + { + // Assign to individual variable names to aid + // selecting correct values + double a1 = matrix[0][0]; + double b1 = matrix[0][1]; + double c1 = matrix[0][2]; + double d1 = matrix[0][3]; + + double a2 = matrix[1][0]; + double b2 = matrix[1][1]; + double c2 = matrix[1][2]; + double d2 = matrix[1][3]; + + double a3 = matrix[2][0]; + double b3 = matrix[2][1]; + double c3 = matrix[2][2]; + double d3 = matrix[2][3]; + + double a4 = matrix[3][0]; + double b4 = matrix[3][1]; + double c4 = matrix[3][2]; + double d4 = matrix[3][3]; + + // Row column labeling reversed since we transpose rows & columns + result[0][0] = determinant3x3(b2, b3, b4, c2, c3, c4, d2, d3, d4); + result[1][0] = - determinant3x3(a2, a3, a4, c2, c3, c4, d2, d3, d4); + result[2][0] = determinant3x3(a2, a3, a4, b2, b3, b4, d2, d3, d4); + result[3][0] = - determinant3x3(a2, a3, a4, b2, b3, b4, c2, c3, c4); + + result[0][1] = - determinant3x3(b1, b3, b4, c1, c3, c4, d1, d3, d4); + result[1][1] = determinant3x3(a1, a3, a4, c1, c3, c4, d1, d3, d4); + result[2][1] = - determinant3x3(a1, a3, a4, b1, b3, b4, d1, d3, d4); + result[3][1] = determinant3x3(a1, a3, a4, b1, b3, b4, c1, c3, c4); + + result[0][2] = determinant3x3(b1, b2, b4, c1, c2, c4, d1, d2, d4); + result[1][2] = - determinant3x3(a1, a2, a4, c1, c2, c4, d1, d2, d4); + result[2][2] = determinant3x3(a1, a2, a4, b1, b2, b4, d1, d2, d4); + result[3][2] = - determinant3x3(a1, a2, a4, b1, b2, b4, c1, c2, c4); + + result[0][3] = - determinant3x3(b1, b2, b3, c1, c2, c3, d1, d2, d3); + result[1][3] = determinant3x3(a1, a2, a3, c1, c2, c3, d1, d2, d3); + result[2][3] = - determinant3x3(a1, a2, a3, b1, b2, b3, d1, d2, d3); + result[3][3] = determinant3x3(a1, a2, a3, b1, b2, b3, c1, c2, c3); + } + + // Returns false if the matrix is not invertible + static bool inverse(const TransformationMatrix::Matrix4& matrix, TransformationMatrix::Matrix4& result) + { + // Calculate the adjoint matrix + adjoint(matrix, result); + + // Calculate the 4x4 determinant + // If the determinant is zero, + // then the inverse matrix is not unique. + double det = determinant4x4(matrix); + + if (fabs(det) < SMALL_NUMBER) + return false; + + // Scale the adjoint matrix to get the inverse + + for (int i = 0; i < 4; i++) + for (int j = 0; j < 4; j++) + result[i][j] = result[i][j] / det; + + return true; + } + + // End of code adapted from Matrix Inversion by Richard Carling + + // Perform a decomposition on the passed matrix, return false if unsuccessful + // From Graphics Gems: unmatrix.c + + // Transpose rotation portion of matrix a, return b + static void transposeMatrix4(const TransformationMatrix::Matrix4& a, TransformationMatrix::Matrix4& b) + { + for (int i = 0; i < 4; i++) + for (int j = 0; j < 4; j++) + b[i][j] = a[j][i]; + } + + // Multiply a homogeneous point by a matrix and return the transformed point + static void v4MulPointByMatrix(const Vector4 p, const TransformationMatrix::Matrix4& m, Vector4 result) + { + result[0] = (p[0] * m[0][0]) + (p[1] * m[1][0]) + + (p[2] * m[2][0]) + (p[3] * m[3][0]); + result[1] = (p[0] * m[0][1]) + (p[1] * m[1][1]) + + (p[2] * m[2][1]) + (p[3] * m[3][1]); + result[2] = (p[0] * m[0][2]) + (p[1] * m[1][2]) + + (p[2] * m[2][2]) + (p[3] * m[3][2]); + result[3] = (p[0] * m[0][3]) + (p[1] * m[1][3]) + + (p[2] * m[2][3]) + (p[3] * m[3][3]); + } + + static double v3Length(Vector3 a) + { + return sqrt((a[0] * a[0]) + (a[1] * a[1]) + (a[2] * a[2])); + } + + static void v3Scale(Vector3 v, double desiredLength) + { + double len = v3Length(v); + if (len != 0) { + double l = desiredLength / len; + v[0] *= l; + v[1] *= l; + v[2] *= l; + } + } + + static double v3Dot(const Vector3 a, const Vector3 b) + { + return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]); + } + + // Make a linear combination of two vectors and return the result. + // result = (a * ascl) + (b * bscl) + static void v3Combine(const Vector3 a, const Vector3 b, Vector3 result, double ascl, double bscl) + { + result[0] = (ascl * a[0]) + (bscl * b[0]); + result[1] = (ascl * a[1]) + (bscl * b[1]); + result[2] = (ascl * a[2]) + (bscl * b[2]); + } + + // Return the cross product result = a cross b */ + static void v3Cross(const Vector3 a, const Vector3 b, Vector3 result) + { + result[0] = (a[1] * b[2]) - (a[2] * b[1]); + result[1] = (a[2] * b[0]) - (a[0] * b[2]); + result[2] = (a[0] * b[1]) - (a[1] * b[0]); + } + + static bool decompose(const TransformationMatrix::Matrix4& mat, TransformationMatrix::DecomposedType& result) + { + TransformationMatrix::Matrix4 localMatrix; + memcpy(localMatrix, mat, sizeof(TransformationMatrix::Matrix4)); + + // Normalize the matrix. + if (localMatrix[3][3] == 0) + return false; + + int i, j; + for (i = 0; i < 4; i++) + for (j = 0; j < 4; j++) + localMatrix[i][j] /= localMatrix[3][3]; + + // perspectiveMatrix is used to solve for perspective, but it also provides + // an easy way to test for singularity of the upper 3x3 component. + TransformationMatrix::Matrix4 perspectiveMatrix; + memcpy(perspectiveMatrix, localMatrix, sizeof(TransformationMatrix::Matrix4)); + for (i = 0; i < 3; i++) + perspectiveMatrix[i][3] = 0; + perspectiveMatrix[3][3] = 1; + + if (determinant4x4(perspectiveMatrix) == 0) + return false; + + // First, isolate perspective. This is the messiest. + if (localMatrix[0][3] != 0 || localMatrix[1][3] != 0 || localMatrix[2][3] != 0) { + // rightHandSide is the right hand side of the equation. + Vector4 rightHandSide; + rightHandSide[0] = localMatrix[0][3]; + rightHandSide[1] = localMatrix[1][3]; + rightHandSide[2] = localMatrix[2][3]; + rightHandSide[3] = localMatrix[3][3]; + + // Solve the equation by inverting perspectiveMatrix and multiplying + // rightHandSide by the inverse. (This is the easiest way, not + // necessarily the best.) + TransformationMatrix::Matrix4 inversePerspectiveMatrix, transposedInversePerspectiveMatrix; + inverse(perspectiveMatrix, inversePerspectiveMatrix); + transposeMatrix4(inversePerspectiveMatrix, transposedInversePerspectiveMatrix); + + Vector4 perspectivePoint; + v4MulPointByMatrix(rightHandSide, transposedInversePerspectiveMatrix, perspectivePoint); + + result.perspectiveX = perspectivePoint[0]; + result.perspectiveY = perspectivePoint[1]; + result.perspectiveZ = perspectivePoint[2]; + result.perspectiveW = perspectivePoint[3]; + + // Clear the perspective partition + localMatrix[0][3] = localMatrix[1][3] = localMatrix[2][3] = 0; + localMatrix[3][3] = 1; + } else { + // No perspective. + result.perspectiveX = result.perspectiveY = result.perspectiveZ = 0; + result.perspectiveW = 1; + } + + // Next take care of translation (easy). + result.translateX = localMatrix[3][0]; + localMatrix[3][0] = 0; + result.translateY = localMatrix[3][1]; + localMatrix[3][1] = 0; + result.translateZ = localMatrix[3][2]; + localMatrix[3][2] = 0; + + // Vector4 type and functions need to be added to the common set. + Vector3 row[3], pdum3; + + // Now get scale and shear. + for (i = 0; i < 3; i++) { + row[i][0] = localMatrix[i][0]; + row[i][1] = localMatrix[i][1]; + row[i][2] = localMatrix[i][2]; + } + + // Compute X scale factor and normalize first row. + result.scaleX = v3Length(row[0]); + v3Scale(row[0], 1.0); + + // Compute XY shear factor and make 2nd row orthogonal to 1st. + result.skewXY = v3Dot(row[0], row[1]); + v3Combine(row[1], row[0], row[1], 1.0, -result.skewXY); + + // Now, compute Y scale and normalize 2nd row. + result.scaleY = v3Length(row[1]); + v3Scale(row[1], 1.0); + result.skewXY /= result.scaleY; + + // Compute XZ and YZ shears, orthogonalize 3rd row. + result.skewXZ = v3Dot(row[0], row[2]); + v3Combine(row[2], row[0], row[2], 1.0, -result.skewXZ); + result.skewYZ = v3Dot(row[1], row[2]); + v3Combine(row[2], row[1], row[2], 1.0, -result.skewYZ); + + // Next, get Z scale and normalize 3rd row. + result.scaleZ = v3Length(row[2]); + v3Scale(row[2], 1.0); + result.skewXZ /= result.scaleZ; + result.skewYZ /= result.scaleZ; + + // At this point, the matrix (in rows[]) is orthonormal. + // Check for a coordinate system flip. If the determinant + // is -1, then negate the matrix and the scaling factors. + v3Cross(row[1], row[2], pdum3); + if (v3Dot(row[0], pdum3) < 0) { + + result.scaleX *= -1; + result.scaleY *= -1; + result.scaleZ *= -1; + + for (i = 0; i < 3; i++) { + row[i][0] *= -1; + row[i][1] *= -1; + row[i][2] *= -1; + } + } + + // Now, get the rotations out, as described in the gem. + + result.rotateY = asin(-row[0][2]); + if (cos(result.rotateY) != 0) { + result.rotateX = atan2(row[1][2], row[2][2]); + result.rotateZ = atan2(row[0][1], row[0][0]); + } else { + result.rotateX = atan2(-row[2][0], row[1][1]); + result.rotateZ = 0; + } + + double s, t, x, y, z, w; + + t = row[0][0] + row[1][1] + row[2][2] + 1.0; + + if (t > 1e-4) { + s = 0.5 / sqrt(t); + w = 0.25 / s; + x = (row[2][1] - row[1][2]) * s; + y = (row[0][2] - row[2][0]) * s; + z = (row[1][0] - row[0][1]) * s; + } else if (row[0][0] > row[1][1] && row[0][0] > row[2][2]) { + s = sqrt (1.0 + row[0][0] - row[1][1] - row[2][2]) * 2.0; // S=4*qx + x = 0.25 * s; + y = (row[0][1] + row[1][0]) / s; + z = (row[0][2] + row[2][0]) / s; + w = (row[2][1] - row[1][2]) / s; + } else if (row[1][1] > row[2][2]) { + s = sqrt (1.0 + row[1][1] - row[0][0] - row[2][2]) * 2.0; // S=4*qy + x = (row[0][1] + row[1][0]) / s; + y = 0.25 * s; + z = (row[1][2] + row[2][1]) / s; + w = (row[0][2] - row[2][0]) / s; + } else { + s = sqrt(1.0 + row[2][2] - row[0][0] - row[1][1]) * 2.0; // S=4*qz + x = (row[0][2] + row[2][0]) / s; + y = (row[1][2] + row[2][1]) / s; + z = 0.25 * s; + w = (row[1][0] - row[0][1]) / s; + } + + result.quaternionX = x; + result.quaternionY = y; + result.quaternionZ = z; + result.quaternionW = w; + + return true; + } + + // Perform a spherical linear interpolation between the two + // passed quaternions with 0 <= t <= 1 + static void slerp(double qa[4], const double qb[4], double t) + { + double ax, ay, az, aw; + double bx, by, bz, bw; + double cx, cy, cz, cw; + double angle; + double th, invth, scale, invscale; + + ax = qa[0]; ay = qa[1]; az = qa[2]; aw = qa[3]; + bx = qb[0]; by = qb[1]; bz = qb[2]; bw = qb[3]; + + angle = ax * bx + ay * by + az * bz + aw * bw; + + if (angle < 0.0) { + ax = -ax; ay = -ay; + az = -az; aw = -aw; + angle = -angle; + } + + if (angle + 1.0 > .05) { + if (1.0 - angle >= .05) { + th = acos (angle); + invth = 1.0 / sin (th); + scale = sin (th * (1.0 - t)) * invth; + invscale = sin (th * t) * invth; + } else { + scale = 1.0 - t; + invscale = t; + } + } else { + bx = -ay; + by = ax; + bz = -aw; + bw = az; + scale = sin(M_PI * (.5 - t)); + invscale = sin (M_PI * t); + } + + cx = ax * scale + bx * invscale; + cy = ay * scale + by * invscale; + cz = az * scale + bz * invscale; + cw = aw * scale + bw * invscale; + + qa[0] = cx; qa[1] = cy; qa[2] = cz; qa[3] = cw; + } + + // End of Supporting Math Functions + + TransformationMatrix::TransformationMatrix(const CGAffineTransform& t) + { + setMatrix(t.a, t.b, t.c, t.d, t.tx, t.ty); + } + + TransformationMatrix::TransformationMatrix(const CATransform3D& t) + { + setMatrix( + t.m11, t.m12, t.m13, t.m14, + t.m21, t.m22, t.m23, t.m24, + t.m31, t.m32, t.m33, t.m34, + t.m41, t.m42, t.m43, t.m44); + } + + CATransform3D TransformationMatrix::transform3d() const + { + CATransform3D t; + t.m11 = narrowPrecisionToFloat(m11()); + t.m12 = narrowPrecisionToFloat(m12()); + t.m13 = narrowPrecisionToFloat(m13()); + t.m14 = narrowPrecisionToFloat(m14()); + t.m21 = narrowPrecisionToFloat(m21()); + t.m22 = narrowPrecisionToFloat(m22()); + t.m23 = narrowPrecisionToFloat(m23()); + t.m24 = narrowPrecisionToFloat(m24()); + t.m31 = narrowPrecisionToFloat(m31()); + t.m32 = narrowPrecisionToFloat(m32()); + t.m33 = narrowPrecisionToFloat(m33()); + t.m34 = narrowPrecisionToFloat(m34()); + t.m41 = narrowPrecisionToFloat(m41()); + t.m42 = narrowPrecisionToFloat(m42()); + t.m43 = narrowPrecisionToFloat(m43()); + t.m44 = narrowPrecisionToFloat(m44()); + return t; + } + + CGAffineTransform TransformationMatrix::affineTransform () const + { + CGAffineTransform t; + t.a = narrowPrecisionToFloat(m11()); + t.b = narrowPrecisionToFloat(m12()); + t.c = narrowPrecisionToFloat(m21()); + t.d = narrowPrecisionToFloat(m22()); + t.tx = narrowPrecisionToFloat(m41()); + t.ty = narrowPrecisionToFloat(m42()); + return t; + } + + TransformationMatrix::operator CATransform3D() const + { + return transform3d(); + } + + TransformationMatrix& TransformationMatrix::scale(double s) + { + return scaleNonUniform(s, s); + } + + TransformationMatrix& TransformationMatrix::rotateFromVector(double x, double y) + { + return rotate(rad2deg(atan2(y, x))); + } + + TransformationMatrix& TransformationMatrix::flipX() + { + return scaleNonUniform(-1.0, 1.0); + } + + TransformationMatrix& TransformationMatrix::flipY() + { + return scaleNonUniform(1.0, -1.0); + } + + TransformationMatrix& TransformationMatrix::scaleNonUniform(double sx, double sy) + { + m_matrix[0][0] *= sx; + m_matrix[0][1] *= sx; + m_matrix[0][2] *= sx; + m_matrix[0][3] *= sx; + + m_matrix[1][0] *= sy; + m_matrix[1][1] *= sy; + m_matrix[1][2] *= sy; + m_matrix[1][3] *= sy; + return *this; + } + + TransformationMatrix& TransformationMatrix::scale3d(double sx, double sy, double sz) + { + scaleNonUniform(sx, sy); + + m_matrix[2][0] *= sz; + m_matrix[2][1] *= sz; + m_matrix[2][2] *= sz; + m_matrix[2][3] *= sz; + return *this; + } + + TransformationMatrix& TransformationMatrix::rotate3d(double x, double y, double z, double angle) + { + // Normalize the axis of rotation + double length = sqrt(x * x + y * y + z * z); + if (length == 0) { + // A direction vector that cannot be normalized, such as [0, 0, 0], will cause the rotation to not be applied. + return *this; + } else if (length != 1) { + x /= length; + y /= length; + z /= length; + } + + // Angles are in degrees. Switch to radians. + angle = deg2rad(angle); + + double sinTheta = sin(angle); + double cosTheta = cos(angle); + + TransformationMatrix mat; + + // Optimize cases where the axis is along a major axis + if (x == 1.0 && y == 0.0 && z == 0.0) { + mat.m_matrix[0][0] = 1.0; + mat.m_matrix[0][1] = 0.0; + mat.m_matrix[0][2] = 0.0; + mat.m_matrix[1][0] = 0.0; + mat.m_matrix[1][1] = cosTheta; + mat.m_matrix[1][2] = sinTheta; + mat.m_matrix[2][0] = 0.0; + mat.m_matrix[2][1] = -sinTheta; + mat.m_matrix[2][2] = cosTheta; + mat.m_matrix[0][3] = mat.m_matrix[1][3] = mat.m_matrix[2][3] = 0.0; + mat.m_matrix[3][0] = mat.m_matrix[3][1] = mat.m_matrix[3][2] = 0.0; + mat.m_matrix[3][3] = 1.0; + } else if (x == 0.0 && y == 1.0 && z == 0.0) { + mat.m_matrix[0][0] = cosTheta; + mat.m_matrix[0][1] = 0.0; + mat.m_matrix[0][2] = -sinTheta; + mat.m_matrix[1][0] = 0.0; + mat.m_matrix[1][1] = 1.0; + mat.m_matrix[1][2] = 0.0; + mat.m_matrix[2][0] = sinTheta; + mat.m_matrix[2][1] = 0.0; + mat.m_matrix[2][2] = cosTheta; + mat.m_matrix[0][3] = mat.m_matrix[1][3] = mat.m_matrix[2][3] = 0.0; + mat.m_matrix[3][0] = mat.m_matrix[3][1] = mat.m_matrix[3][2] = 0.0; + mat.m_matrix[3][3] = 1.0; + } else if (x == 0.0 && y == 0.0 && z == 1.0) { + mat.m_matrix[0][0] = cosTheta; + mat.m_matrix[0][1] = sinTheta; + mat.m_matrix[0][2] = 0.0; + mat.m_matrix[1][0] = -sinTheta; + mat.m_matrix[1][1] = cosTheta; + mat.m_matrix[1][2] = 0.0; + mat.m_matrix[2][0] = 0.0; + mat.m_matrix[2][1] = 0.0; + mat.m_matrix[2][2] = 1.0; + mat.m_matrix[0][3] = mat.m_matrix[1][3] = mat.m_matrix[2][3] = 0.0; + mat.m_matrix[3][0] = mat.m_matrix[3][1] = mat.m_matrix[3][2] = 0.0; + mat.m_matrix[3][3] = 1.0; + } else { + // This case is the rotation about an arbitrary unit vector. + // + // Formula is adapted from Wikipedia article on Rotation matrix, + // http://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_from_axis_and_angle + // + // An alternate resource with the same matrix: http://www.fastgraph.com/makegames/3drotation/ + // + double oneMinusCosTheta = 1 - cosTheta; + mat.m_matrix[0][0] = cosTheta + x * x * oneMinusCosTheta; + mat.m_matrix[0][1] = y * x * oneMinusCosTheta + z * sinTheta; + mat.m_matrix[0][2] = z * x * oneMinusCosTheta - y * sinTheta; + mat.m_matrix[1][0] = x * y * oneMinusCosTheta - z * sinTheta; + mat.m_matrix[1][1] = cosTheta + y * y * oneMinusCosTheta; + mat.m_matrix[1][2] = z * y * oneMinusCosTheta + x * sinTheta; + mat.m_matrix[2][0] = x * z * oneMinusCosTheta + y * sinTheta; + mat.m_matrix[2][1] = y * z * oneMinusCosTheta - x * sinTheta; + mat.m_matrix[2][2] = cosTheta + z * z * oneMinusCosTheta; + mat.m_matrix[0][3] = mat.m_matrix[1][3] = mat.m_matrix[2][3] = 0.0; + mat.m_matrix[3][0] = mat.m_matrix[3][1] = mat.m_matrix[3][2] = 0.0; + mat.m_matrix[3][3] = 1.0; + } + multiply(mat); + return *this; + } + + TransformationMatrix& TransformationMatrix::rotate3d(double rx, double ry, double rz) + { + // Angles are in degrees. Switch to radians. + rx = deg2rad(rx); + ry = deg2rad(ry); + rz = deg2rad(rz); + + TransformationMatrix mat; + + double sinTheta = sin(rz); + double cosTheta = cos(rz); + + mat.m_matrix[0][0] = cosTheta; + mat.m_matrix[0][1] = sinTheta; + mat.m_matrix[0][2] = 0.0; + mat.m_matrix[1][0] = -sinTheta; + mat.m_matrix[1][1] = cosTheta; + mat.m_matrix[1][2] = 0.0; + mat.m_matrix[2][0] = 0.0; + mat.m_matrix[2][1] = 0.0; + mat.m_matrix[2][2] = 1.0; + mat.m_matrix[0][3] = mat.m_matrix[1][3] = mat.m_matrix[2][3] = 0.0; + mat.m_matrix[3][0] = mat.m_matrix[3][1] = mat.m_matrix[3][2] = 0.0; + mat.m_matrix[3][3] = 1.0; + + TransformationMatrix rmat(mat); + + sinTheta = sin(ry); + cosTheta = cos(ry); + + mat.m_matrix[0][0] = cosTheta; + mat.m_matrix[0][1] = 0.0; + mat.m_matrix[0][2] = -sinTheta; + mat.m_matrix[1][0] = 0.0; + mat.m_matrix[1][1] = 1.0; + mat.m_matrix[1][2] = 0.0; + mat.m_matrix[2][0] = sinTheta; + mat.m_matrix[2][1] = 0.0; + mat.m_matrix[2][2] = cosTheta; + mat.m_matrix[0][3] = mat.m_matrix[1][3] = mat.m_matrix[2][3] = 0.0; + mat.m_matrix[3][0] = mat.m_matrix[3][1] = mat.m_matrix[3][2] = 0.0; + mat.m_matrix[3][3] = 1.0; + + rmat.multiply(mat); + + sinTheta = sin(rx); + cosTheta = cos(rx); + + mat.m_matrix[0][0] = 1.0; + mat.m_matrix[0][1] = 0.0; + mat.m_matrix[0][2] = 0.0; + mat.m_matrix[1][0] = 0.0; + mat.m_matrix[1][1] = cosTheta; + mat.m_matrix[1][2] = sinTheta; + mat.m_matrix[2][0] = 0.0; + mat.m_matrix[2][1] = -sinTheta; + mat.m_matrix[2][2] = cosTheta; + mat.m_matrix[0][3] = mat.m_matrix[1][3] = mat.m_matrix[2][3] = 0.0; + mat.m_matrix[3][0] = mat.m_matrix[3][1] = mat.m_matrix[3][2] = 0.0; + mat.m_matrix[3][3] = 1.0; + + rmat.multiply(mat); + + multiply(rmat); + return *this; + } + + TransformationMatrix& TransformationMatrix::translate(double tx, double ty) + { + m_matrix[3][0] += tx * m_matrix[0][0] + ty * m_matrix[1][0]; + m_matrix[3][1] += tx * m_matrix[0][1] + ty * m_matrix[1][1]; + m_matrix[3][2] += tx * m_matrix[0][2] + ty * m_matrix[1][2]; + m_matrix[3][3] += tx * m_matrix[0][3] + ty * m_matrix[1][3]; + return *this; + } + + TransformationMatrix& TransformationMatrix::translate3d(double tx, double ty, double tz) + { + m_matrix[3][0] += tx * m_matrix[0][0] + ty * m_matrix[1][0] + tz * m_matrix[2][0]; + m_matrix[3][1] += tx * m_matrix[0][1] + ty * m_matrix[1][1] + tz * m_matrix[2][1]; + m_matrix[3][2] += tx * m_matrix[0][2] + ty * m_matrix[1][2] + tz * m_matrix[2][2]; + m_matrix[3][3] += tx * m_matrix[0][3] + ty * m_matrix[1][3] + tz * m_matrix[2][3]; + return *this; + } + + TransformationMatrix& TransformationMatrix::translateRight(double tx, double ty) + { + if (tx != 0) { + m_matrix[0][0] += m_matrix[0][3] * tx; + m_matrix[1][0] += m_matrix[1][3] * tx; + m_matrix[2][0] += m_matrix[2][3] * tx; + m_matrix[3][0] += m_matrix[3][3] * tx; + } + + if (ty != 0) { + m_matrix[0][1] += m_matrix[0][3] * ty; + m_matrix[1][1] += m_matrix[1][3] * ty; + m_matrix[2][1] += m_matrix[2][3] * ty; + m_matrix[3][1] += m_matrix[3][3] * ty; + } + + return *this; + } + + TransformationMatrix& TransformationMatrix::translateRight3d(double tx, double ty, double tz) + { + translateRight(tx, ty); + if (tz != 0) { + m_matrix[0][2] += m_matrix[0][3] * tz; + m_matrix[1][2] += m_matrix[1][3] * tz; + m_matrix[2][2] += m_matrix[2][3] * tz; + m_matrix[3][2] += m_matrix[3][3] * tz; + } + + return *this; + } + + TransformationMatrix& TransformationMatrix::skew(double sx, double sy) + { + // angles are in degrees. Switch to radians + sx = deg2rad(sx); + sy = deg2rad(sy); + + TransformationMatrix mat; + mat.m_matrix[0][1] = tan(sy); // note that the y shear goes in the first row + mat.m_matrix[1][0] = tan(sx); // and the x shear in the second row + + multiply(mat); + return *this; + } + + TransformationMatrix& TransformationMatrix::applyPerspective(double p) + { + TransformationMatrix mat; + if (p != 0) + mat.m_matrix[2][3] = -1/p; + + multiply(mat); + return *this; + } + + // this = mat * this. + TransformationMatrix& TransformationMatrix::multiply(const TransformationMatrix& mat) + { + Matrix4 tmp; + + tmp[0][0] = (mat.m_matrix[0][0] * m_matrix[0][0] + mat.m_matrix[0][1] * m_matrix[1][0] + + mat.m_matrix[0][2] * m_matrix[2][0] + mat.m_matrix[0][3] * m_matrix[3][0]); + tmp[0][1] = (mat.m_matrix[0][0] * m_matrix[0][1] + mat.m_matrix[0][1] * m_matrix[1][1] + + mat.m_matrix[0][2] * m_matrix[2][1] + mat.m_matrix[0][3] * m_matrix[3][1]); + tmp[0][2] = (mat.m_matrix[0][0] * m_matrix[0][2] + mat.m_matrix[0][1] * m_matrix[1][2] + + mat.m_matrix[0][2] * m_matrix[2][2] + mat.m_matrix[0][3] * m_matrix[3][2]); + tmp[0][3] = (mat.m_matrix[0][0] * m_matrix[0][3] + mat.m_matrix[0][1] * m_matrix[1][3] + + mat.m_matrix[0][2] * m_matrix[2][3] + mat.m_matrix[0][3] * m_matrix[3][3]); + + tmp[1][0] = (mat.m_matrix[1][0] * m_matrix[0][0] + mat.m_matrix[1][1] * m_matrix[1][0] + + mat.m_matrix[1][2] * m_matrix[2][0] + mat.m_matrix[1][3] * m_matrix[3][0]); + tmp[1][1] = (mat.m_matrix[1][0] * m_matrix[0][1] + mat.m_matrix[1][1] * m_matrix[1][1] + + mat.m_matrix[1][2] * m_matrix[2][1] + mat.m_matrix[1][3] * m_matrix[3][1]); + tmp[1][2] = (mat.m_matrix[1][0] * m_matrix[0][2] + mat.m_matrix[1][1] * m_matrix[1][2] + + mat.m_matrix[1][2] * m_matrix[2][2] + mat.m_matrix[1][3] * m_matrix[3][2]); + tmp[1][3] = (mat.m_matrix[1][0] * m_matrix[0][3] + mat.m_matrix[1][1] * m_matrix[1][3] + + mat.m_matrix[1][2] * m_matrix[2][3] + mat.m_matrix[1][3] * m_matrix[3][3]); + + tmp[2][0] = (mat.m_matrix[2][0] * m_matrix[0][0] + mat.m_matrix[2][1] * m_matrix[1][0] + + mat.m_matrix[2][2] * m_matrix[2][0] + mat.m_matrix[2][3] * m_matrix[3][0]); + tmp[2][1] = (mat.m_matrix[2][0] * m_matrix[0][1] + mat.m_matrix[2][1] * m_matrix[1][1] + + mat.m_matrix[2][2] * m_matrix[2][1] + mat.m_matrix[2][3] * m_matrix[3][1]); + tmp[2][2] = (mat.m_matrix[2][0] * m_matrix[0][2] + mat.m_matrix[2][1] * m_matrix[1][2] + + mat.m_matrix[2][2] * m_matrix[2][2] + mat.m_matrix[2][3] * m_matrix[3][2]); + tmp[2][3] = (mat.m_matrix[2][0] * m_matrix[0][3] + mat.m_matrix[2][1] * m_matrix[1][3] + + mat.m_matrix[2][2] * m_matrix[2][3] + mat.m_matrix[2][3] * m_matrix[3][3]); + + tmp[3][0] = (mat.m_matrix[3][0] * m_matrix[0][0] + mat.m_matrix[3][1] * m_matrix[1][0] + + mat.m_matrix[3][2] * m_matrix[2][0] + mat.m_matrix[3][3] * m_matrix[3][0]); + tmp[3][1] = (mat.m_matrix[3][0] * m_matrix[0][1] + mat.m_matrix[3][1] * m_matrix[1][1] + + mat.m_matrix[3][2] * m_matrix[2][1] + mat.m_matrix[3][3] * m_matrix[3][1]); + tmp[3][2] = (mat.m_matrix[3][0] * m_matrix[0][2] + mat.m_matrix[3][1] * m_matrix[1][2] + + mat.m_matrix[3][2] * m_matrix[2][2] + mat.m_matrix[3][3] * m_matrix[3][2]); + tmp[3][3] = (mat.m_matrix[3][0] * m_matrix[0][3] + mat.m_matrix[3][1] * m_matrix[1][3] + + mat.m_matrix[3][2] * m_matrix[2][3] + mat.m_matrix[3][3] * m_matrix[3][3]); + + setMatrix(tmp); + return *this; + } + + void TransformationMatrix::multVecMatrix(double x, double y, double& resultX, double& resultY) const + { + resultX = m_matrix[3][0] + x * m_matrix[0][0] + y * m_matrix[1][0]; + resultY = m_matrix[3][1] + x * m_matrix[0][1] + y * m_matrix[1][1]; + double w = m_matrix[3][3] + x * m_matrix[0][3] + y * m_matrix[1][3]; + if (w != 1 && w != 0) { + resultX /= w; + resultY /= w; + } + } + + void TransformationMatrix::multVecMatrix(double x, double y, double z, double& resultX, double& resultY, double& resultZ) const + { + resultX = m_matrix[3][0] + x * m_matrix[0][0] + y * m_matrix[1][0] + z * m_matrix[2][0]; + resultY = m_matrix[3][1] + x * m_matrix[0][1] + y * m_matrix[1][1] + z * m_matrix[2][1]; + resultZ = m_matrix[3][2] + x * m_matrix[0][2] + y * m_matrix[1][2] + z * m_matrix[2][2]; + double w = m_matrix[3][3] + x * m_matrix[0][3] + y * m_matrix[1][3] + z * m_matrix[2][3]; + if (w != 1 && w != 0) { + resultX /= w; + resultY /= w; + resultZ /= w; + } + } + + bool TransformationMatrix::isInvertible() const + { + if (isIdentityOrTranslation()) + return true; + + double det = WebCore::determinant4x4(m_matrix); + + if (fabs(det) < SMALL_NUMBER) + return false; + + return true; + } + + TransformationMatrix TransformationMatrix::inverse() const + { + if (isIdentityOrTranslation()) { + // identity matrix + if (m_matrix[3][0] == 0 && m_matrix[3][1] == 0 && m_matrix[3][2] == 0) + return TransformationMatrix(); + + // translation + return TransformationMatrix(1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + -m_matrix[3][0], -m_matrix[3][1], -m_matrix[3][2], 1); + } + + TransformationMatrix invMat; + bool inverted = WebCore::inverse(m_matrix, invMat.m_matrix); + if (!inverted) + return TransformationMatrix(); + + return invMat; + } + + void TransformationMatrix::makeAffine() + { + m_matrix[0][2] = 0; + m_matrix[0][3] = 0; + + m_matrix[1][2] = 0; + m_matrix[1][3] = 0; + + m_matrix[2][0] = 0; + m_matrix[2][1] = 0; + m_matrix[2][2] = 1; + m_matrix[2][3] = 0; + + m_matrix[3][2] = 0; + m_matrix[3][3] = 1; + } + + static inline void blendFloat(double& from, double to, double progress) + { + if (from != to) + from = from + (to - from) * progress; + } + + void TransformationMatrix::blend(const TransformationMatrix& from, double progress) + { + if (from.isIdentity() && isIdentity()) + return; + + // decompose + DecomposedType fromDecomp; + DecomposedType toDecomp; + from.decompose(fromDecomp); + decompose(toDecomp); + + // interpolate + blendFloat(fromDecomp.scaleX, toDecomp.scaleX, progress); + blendFloat(fromDecomp.scaleY, toDecomp.scaleY, progress); + blendFloat(fromDecomp.scaleZ, toDecomp.scaleZ, progress); + blendFloat(fromDecomp.skewXY, toDecomp.skewXY, progress); + blendFloat(fromDecomp.skewXZ, toDecomp.skewXZ, progress); + blendFloat(fromDecomp.skewYZ, toDecomp.skewYZ, progress); + blendFloat(fromDecomp.translateX, toDecomp.translateX, progress); + blendFloat(fromDecomp.translateY, toDecomp.translateY, progress); + blendFloat(fromDecomp.translateZ, toDecomp.translateZ, progress); + blendFloat(fromDecomp.perspectiveX, toDecomp.perspectiveX, progress); + blendFloat(fromDecomp.perspectiveY, toDecomp.perspectiveY, progress); + blendFloat(fromDecomp.perspectiveZ, toDecomp.perspectiveZ, progress); + blendFloat(fromDecomp.perspectiveW, toDecomp.perspectiveW, progress); + + slerp(&fromDecomp.quaternionX, &toDecomp.quaternionX, progress); + + // recompose + recompose(fromDecomp); + } + + bool TransformationMatrix::decompose(DecomposedType& decomp) const + { + if (isIdentity()) { + memset(&decomp, 0, sizeof(decomp)); + decomp.perspectiveW = 1; + decomp.scaleX = 1; + decomp.scaleY = 1; + decomp.scaleZ = 1; + } + + if (!WebCore::decompose(m_matrix, decomp)) + return false; + return true; + } + + void TransformationMatrix::recompose(const DecomposedType& decomp, bool useEulerAngle) + { + makeIdentity(); + + // first apply perspective + m_matrix[0][3] = decomp.perspectiveX; + m_matrix[1][3] = decomp.perspectiveY; + m_matrix[2][3] = decomp.perspectiveZ; + m_matrix[3][3] = decomp.perspectiveW; + + // now translate + translate3d(decomp.translateX, decomp.translateY, decomp.translateZ); + + if (!useEulerAngle) { + // apply rotation + double xx = decomp.quaternionX * decomp.quaternionX; + double xy = decomp.quaternionX * decomp.quaternionY; + double xz = decomp.quaternionX * decomp.quaternionZ; + double xw = decomp.quaternionX * decomp.quaternionW; + double yy = decomp.quaternionY * decomp.quaternionY; + double yz = decomp.quaternionY * decomp.quaternionZ; + double yw = decomp.quaternionY * decomp.quaternionW; + double zz = decomp.quaternionZ * decomp.quaternionZ; + double zw = decomp.quaternionZ * decomp.quaternionW; + + // Construct a composite rotation matrix from the quaternion values + TransformationMatrix rotationMatrix(1 - 2 * (yy + zz), 2 * (xy - zw), 2 * (xz + yw), 0, + 2 * (xy + zw), 1 - 2 * (xx + zz), 2 * (yz - xw), 0, + 2 * (xz - yw), 2 * (yz + xw), 1 - 2 * (xx + yy), 0, + 0, 0, 0, 1); + + multiply(rotationMatrix); + } else { + rotate3d(1.0, 0.0, 0.0, rad2deg(decomp.rotateX)); + rotate3d(0.0, 1.0, 0.0, rad2deg(decomp.rotateY)); + rotate3d(0.0, 0.0, 1.0, rad2deg(decomp.rotateZ)); + } + + // now apply skew + if (decomp.skewYZ) { + TransformationMatrix tmp; + tmp.setM32(decomp.skewYZ); + multiply(tmp); + } + + if (decomp.skewXZ) { + TransformationMatrix tmp; + tmp.setM31(decomp.skewXZ); + multiply(tmp); + } + + if (decomp.skewXY) { + TransformationMatrix tmp; + tmp.setM21(decomp.skewXY); + multiply(tmp); + } + + // finally, apply scale + scale3d(decomp.scaleX, decomp.scaleY, decomp.scaleZ); + } +} \ No newline at end of file diff --git a/BreakingBad/Pods/pop/pop/WebCore/TransformationMatrix.h b/BreakingBad/Pods/pop/pop/WebCore/TransformationMatrix.h new file mode 100644 index 0000000..b99ae89 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/WebCore/TransformationMatrix.h @@ -0,0 +1,279 @@ +/* + * Copyright (C) 2005, 2006 Apple Computer, Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef TransformationMatrix_h +#define TransformationMatrix_h + +#include //for memcpy + +#include + +#include + +namespace WebCore { + + class TransformationMatrix { + public: + + typedef double Matrix4[4][4]; + + TransformationMatrix() { makeIdentity(); } + TransformationMatrix(const TransformationMatrix& t) { *this = t; } + TransformationMatrix(double a, double b, double c, double d, double e, double f) { setMatrix(a, b, c, d, e, f); } + TransformationMatrix(double m11, double m12, double m13, double m14, + double m21, double m22, double m23, double m24, + double m31, double m32, double m33, double m34, + double m41, double m42, double m43, double m44) + { + setMatrix(m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44); + } + + void setMatrix(double a, double b, double c, double d, double e, double f) + { + m_matrix[0][0] = a; m_matrix[0][1] = b; m_matrix[0][2] = 0; m_matrix[0][3] = 0; + m_matrix[1][0] = c; m_matrix[1][1] = d; m_matrix[1][2] = 0; m_matrix[1][3] = 0; + m_matrix[2][0] = 0; m_matrix[2][1] = 0; m_matrix[2][2] = 1; m_matrix[2][3] = 0; + m_matrix[3][0] = e; m_matrix[3][1] = f; m_matrix[3][2] = 0; m_matrix[3][3] = 1; + } + + void setMatrix(double m11, double m12, double m13, double m14, + double m21, double m22, double m23, double m24, + double m31, double m32, double m33, double m34, + double m41, double m42, double m43, double m44) + { + m_matrix[0][0] = m11; m_matrix[0][1] = m12; m_matrix[0][2] = m13; m_matrix[0][3] = m14; + m_matrix[1][0] = m21; m_matrix[1][1] = m22; m_matrix[1][2] = m23; m_matrix[1][3] = m24; + m_matrix[2][0] = m31; m_matrix[2][1] = m32; m_matrix[2][2] = m33; m_matrix[2][3] = m34; + m_matrix[3][0] = m41; m_matrix[3][1] = m42; m_matrix[3][2] = m43; m_matrix[3][3] = m44; + } + + TransformationMatrix& operator =(const TransformationMatrix &t) + { + setMatrix(t.m_matrix); + return *this; + } + + TransformationMatrix& makeIdentity() + { + setMatrix(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); + return *this; + } + + bool isIdentity() const + { + return m_matrix[0][0] == 1 && m_matrix[0][1] == 0 && m_matrix[0][2] == 0 && m_matrix[0][3] == 0 && + m_matrix[1][0] == 0 && m_matrix[1][1] == 1 && m_matrix[1][2] == 0 && m_matrix[1][3] == 0 && + m_matrix[2][0] == 0 && m_matrix[2][1] == 0 && m_matrix[2][2] == 1 && m_matrix[2][3] == 0 && + m_matrix[3][0] == 0 && m_matrix[3][1] == 0 && m_matrix[3][2] == 0 && m_matrix[3][3] == 1; + } + + // This form preserves the double math from input to output + void map(double x, double y, double& x2, double& y2) const { multVecMatrix(x, y, x2, y2); } + + double m11() const { return m_matrix[0][0]; } + void setM11(double f) { m_matrix[0][0] = f; } + double m12() const { return m_matrix[0][1]; } + void setM12(double f) { m_matrix[0][1] = f; } + double m13() const { return m_matrix[0][2]; } + void setM13(double f) { m_matrix[0][2] = f; } + double m14() const { return m_matrix[0][3]; } + void setM14(double f) { m_matrix[0][3] = f; } + double m21() const { return m_matrix[1][0]; } + void setM21(double f) { m_matrix[1][0] = f; } + double m22() const { return m_matrix[1][1]; } + void setM22(double f) { m_matrix[1][1] = f; } + double m23() const { return m_matrix[1][2]; } + void setM23(double f) { m_matrix[1][2] = f; } + double m24() const { return m_matrix[1][3]; } + void setM24(double f) { m_matrix[1][3] = f; } + double m31() const { return m_matrix[2][0]; } + void setM31(double f) { m_matrix[2][0] = f; } + double m32() const { return m_matrix[2][1]; } + void setM32(double f) { m_matrix[2][1] = f; } + double m33() const { return m_matrix[2][2]; } + void setM33(double f) { m_matrix[2][2] = f; } + double m34() const { return m_matrix[2][3]; } + void setM34(double f) { m_matrix[2][3] = f; } + double m41() const { return m_matrix[3][0]; } + void setM41(double f) { m_matrix[3][0] = f; } + double m42() const { return m_matrix[3][1]; } + void setM42(double f) { m_matrix[3][1] = f; } + double m43() const { return m_matrix[3][2]; } + void setM43(double f) { m_matrix[3][2] = f; } + double m44() const { return m_matrix[3][3]; } + void setM44(double f) { m_matrix[3][3] = f; } + + double a() const { return m_matrix[0][0]; } + void setA(double a) { m_matrix[0][0] = a; } + + double b() const { return m_matrix[0][1]; } + void setB(double b) { m_matrix[0][1] = b; } + + double c() const { return m_matrix[1][0]; } + void setC(double c) { m_matrix[1][0] = c; } + + double d() const { return m_matrix[1][1]; } + void setD(double d) { m_matrix[1][1] = d; } + + double e() const { return m_matrix[3][0]; } + void setE(double e) { m_matrix[3][0] = e; } + + double f() const { return m_matrix[3][1]; } + void setF(double f) { m_matrix[3][1] = f; } + + // this = this * mat + TransformationMatrix& multiply(const TransformationMatrix&); + + TransformationMatrix& scale(double); + TransformationMatrix& scaleNonUniform(double sx, double sy); + TransformationMatrix& scale3d(double sx, double sy, double sz); + + TransformationMatrix& rotate(double d) { return rotate3d(0, 0, d); } + TransformationMatrix& rotateFromVector(double x, double y); + TransformationMatrix& rotate3d(double rx, double ry, double rz); + + // The vector (x,y,z) is normalized if it's not already. A vector of + // (0,0,0) uses a vector of (0,0,1). + TransformationMatrix& rotate3d(double x, double y, double z, double angle); + + TransformationMatrix& translate(double tx, double ty); + TransformationMatrix& translate3d(double tx, double ty, double tz); + + // translation added with a post-multiply + TransformationMatrix& translateRight(double tx, double ty); + TransformationMatrix& translateRight3d(double tx, double ty, double tz); + + TransformationMatrix& flipX(); + TransformationMatrix& flipY(); + TransformationMatrix& skew(double angleX, double angleY); + TransformationMatrix& skewX(double angle) { return skew(angle, 0); } + TransformationMatrix& skewY(double angle) { return skew(0, angle); } + + TransformationMatrix& applyPerspective(double p); + bool hasPerspective() const { return m_matrix[2][3] != 0.0f; } + + bool isInvertible() const; + + // This method returns the identity matrix if it is not invertible. + // Use isInvertible() before calling this if you need to know. + TransformationMatrix inverse() const; + + // decompose the matrix into its component parts + typedef struct { + double scaleX, scaleY, scaleZ; + double skewXY, skewXZ, skewYZ; + double rotateX, rotateY, rotateZ; + double quaternionX, quaternionY, quaternionZ, quaternionW; + double translateX, translateY, translateZ; + double perspectiveX, perspectiveY, perspectiveZ, perspectiveW; + } DecomposedType; + + bool decompose(DecomposedType& decomp) const; + void recompose(const DecomposedType& decomp, bool useEulerAngle = false); + + void blend(const TransformationMatrix& from, double progress); + + bool isAffine() const + { + return (m13() == 0 && m14() == 0 && m23() == 0 && m24() == 0 && + m31() == 0 && m32() == 0 && m33() == 1 && m34() == 0 && m43() == 0 && m44() == 1); + } + + // Throw away the non-affine parts of the matrix (lossy!) + void makeAffine(); + + bool operator==(const TransformationMatrix& m2) const + { + return (m_matrix[0][0] == m2.m_matrix[0][0] && + m_matrix[0][1] == m2.m_matrix[0][1] && + m_matrix[0][2] == m2.m_matrix[0][2] && + m_matrix[0][3] == m2.m_matrix[0][3] && + m_matrix[1][0] == m2.m_matrix[1][0] && + m_matrix[1][1] == m2.m_matrix[1][1] && + m_matrix[1][2] == m2.m_matrix[1][2] && + m_matrix[1][3] == m2.m_matrix[1][3] && + m_matrix[2][0] == m2.m_matrix[2][0] && + m_matrix[2][1] == m2.m_matrix[2][1] && + m_matrix[2][2] == m2.m_matrix[2][2] && + m_matrix[2][3] == m2.m_matrix[2][3] && + m_matrix[3][0] == m2.m_matrix[3][0] && + m_matrix[3][1] == m2.m_matrix[3][1] && + m_matrix[3][2] == m2.m_matrix[3][2] && + m_matrix[3][3] == m2.m_matrix[3][3]); + } + + bool operator!=(const TransformationMatrix& other) const { return !(*this == other); } + + // *this = *this * t (i.e., a multRight) + TransformationMatrix& operator*=(const TransformationMatrix& t) + { + return multiply(t); + } + + // result = *this * t (i.e., a multRight) + TransformationMatrix operator*(const TransformationMatrix& t) + { + TransformationMatrix result = *this; + result.multiply(t); + return result; + } + + CATransform3D transform3d () const; + CGAffineTransform affineTransform () const; + + TransformationMatrix(const CATransform3D&); + operator CATransform3D() const; + + TransformationMatrix(const CGAffineTransform&); + operator CGAffineTransform() const; + + private: + + // multiply passed 2D point by matrix (assume z=0) + void multVecMatrix(double x, double y, double& dstX, double& dstY) const; + + // multiply passed 3D point by matrix + void multVecMatrix(double x, double y, double z, double& dstX, double& dstY, double& dstZ) const; + + void setMatrix(const Matrix4 m) + { + if (m && m != m_matrix) + memcpy(m_matrix, m, sizeof(Matrix4)); + } + + bool isIdentityOrTranslation() const + { + return m_matrix[0][0] == 1 && m_matrix[0][1] == 0 && m_matrix[0][2] == 0 && m_matrix[0][3] == 0 && + m_matrix[1][0] == 0 && m_matrix[1][1] == 1 && m_matrix[1][2] == 0 && m_matrix[1][3] == 0 && + m_matrix[2][0] == 0 && m_matrix[2][1] == 0 && m_matrix[2][2] == 1 && m_matrix[2][3] == 0 && + m_matrix[3][3] == 1; + } + + Matrix4 m_matrix; + }; + +} // namespace WebCore + +#endif // TransformationMatrix_h diff --git a/BreakingBad/Pods/pop/pop/WebCore/UnitBezier.h b/BreakingBad/Pods/pop/pop/WebCore/UnitBezier.h new file mode 100644 index 0000000..0f847a0 --- /dev/null +++ b/BreakingBad/Pods/pop/pop/WebCore/UnitBezier.h @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2008 Apple Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef UnitBezier_h +#define UnitBezier_h + +#include + +namespace WebCore { + + struct UnitBezier { + UnitBezier(double p1x, double p1y, double p2x, double p2y) + { + // Calculate the polynomial coefficients, implicit first and last control points are (0,0) and (1,1). + cx = 3.0 * p1x; + bx = 3.0 * (p2x - p1x) - cx; + ax = 1.0 - cx -bx; + + cy = 3.0 * p1y; + by = 3.0 * (p2y - p1y) - cy; + ay = 1.0 - cy - by; + } + + double sampleCurveX(double t) + { + // `ax t^3 + bx t^2 + cx t' expanded using Horner's rule. + return ((ax * t + bx) * t + cx) * t; + } + + double sampleCurveY(double t) + { + return ((ay * t + by) * t + cy) * t; + } + + double sampleCurveDerivativeX(double t) + { + return (3.0 * ax * t + 2.0 * bx) * t + cx; + } + + // Given an x value, find a parametric value it came from. + double solveCurveX(double x, double epsilon) + { + double t0; + double t1; + double t2; + double x2; + double d2; + int i; + + // First try a few iterations of Newton's method -- normally very fast. + for (t2 = x, i = 0; i < 8; i++) { + x2 = sampleCurveX(t2) - x; + if (fabs (x2) < epsilon) + return t2; + d2 = sampleCurveDerivativeX(t2); + if (fabs(d2) < 1e-6) + break; + t2 = t2 - x2 / d2; + } + + // Fall back to the bisection method for reliability. + t0 = 0.0; + t1 = 1.0; + t2 = x; + + if (t2 < t0) + return t0; + if (t2 > t1) + return t1; + + while (t0 < t1) { + x2 = sampleCurveX(t2); + if (fabs(x2 - x) < epsilon) + return t2; + if (x > x2) + t0 = t2; + else + t1 = t2; + t2 = (t1 - t0) * .5 + t0; + } + + // Failure. + return t2; + } + + double solve(double x, double epsilon) + { + return sampleCurveY(solveCurveX(x, epsilon)); + } + + private: + double ax; + double bx; + double cx; + + double ay; + double by; + double cy; + }; +} +#endif From 833d0eb12c1558f48673631d791cc48891dbd55b Mon Sep 17 00:00:00 2001 From: Mesfin Date: Mon, 12 Oct 2015 00:40:04 -0400 Subject: [PATCH 07/44] Made password fields secure and made sure the checks for password fields are working correctly --- .../BreakingBad.xcodeproj/project.pbxproj | 2 +- .../BreakingBad/Base.lproj/Main.storyboard | 8 ++++---- .../BreakingBad/CustomModalViewController.m | 17 ++++++++++++----- BreakingBad/BreakingBad/Info.plist | 2 -- .../BreakingBad/PresentingAnimationController.m | 2 +- 5 files changed, 18 insertions(+), 13 deletions(-) diff --git a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj index 08f66f4..1927473 100644 --- a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj +++ b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj @@ -136,8 +136,8 @@ 5FEAE2631BCB055A00201A0E /* CustomModalViewController.m */, 5FEAE26C1BCB125100201A0E /* PresentingAnimationController.h */, 5FEAE26D1BCB125A00201A0E /* PresentingAnimationController.m */, - 5FEAE2701BCB126700201A0E /* DismissingAnimationController.m */, 5FEAE26F1BCB126200201A0E /* DismissingAnimationController.h */, + 5FEAE2701BCB126700201A0E /* DismissingAnimationController.m */, ); name = PopAnimation; sourceTree = ""; diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index 472486a..ff25f6a 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -45,7 +45,7 @@ - + @@ -70,7 +70,7 @@ - + @@ -264,7 +264,7 @@ - + @@ -272,7 +272,7 @@ - + diff --git a/BreakingBad/BreakingBad/CustomModalViewController.m b/BreakingBad/BreakingBad/CustomModalViewController.m index 32d13ba..be54a86 100644 --- a/BreakingBad/BreakingBad/CustomModalViewController.m +++ b/BreakingBad/BreakingBad/CustomModalViewController.m @@ -14,7 +14,7 @@ @implementation CustomModalViewController - (IBAction)didClickClose:(id)sender { - if ([self.passwordTextField isEqual:self.confirmPasswordTextField]) { + if ([self.passwordTextField.text isEqualToString:self.confirmPasswordTextField.text] && self.passwordTextField.text.length !=0) { PFUser *thisUser = [PFUser user]; thisUser.email = self.emailTextField.text; thisUser.username = self.usernameTextField.text; @@ -23,16 +23,23 @@ - (IBAction)didClickClose:(id)sender { [thisUser signUpInBackgroundWithBlock:^(BOOL succeeded, NSError * _Nullable error) { //add segue here }]; - + [self dismissViewControllerAnimated:YES completion:nil]; } else { - UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"The two password you entered do not match" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Error" message:@"The password field is either empty or does not match the confirm password field" preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [alertController dismissViewControllerAnimated:YES completion:nil]; + }]; + + [alertController addAction:okAction]; + + [self presentViewController:alertController animated:YES completion:nil]; - [alert show]; } - [self dismissViewControllerAnimated:YES completion:nil]; + } diff --git a/BreakingBad/BreakingBad/Info.plist b/BreakingBad/BreakingBad/Info.plist index 6905cc6..6c48029 100644 --- a/BreakingBad/BreakingBad/Info.plist +++ b/BreakingBad/BreakingBad/Info.plist @@ -33,8 +33,6 @@ UISupportedInterfaceOrientations UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight diff --git a/BreakingBad/BreakingBad/PresentingAnimationController.m b/BreakingBad/BreakingBad/PresentingAnimationController.m index 793a37d..536ec24 100644 --- a/BreakingBad/BreakingBad/PresentingAnimationController.m +++ b/BreakingBad/BreakingBad/PresentingAnimationController.m @@ -25,7 +25,7 @@ - (void)animateTransition:(id )transitionC toView.frame = CGRectMake(0, 0, CGRectGetWidth(transitionContext.containerView.bounds) - 100.f, - CGRectGetHeight(transitionContext.containerView.bounds) - 280.f); + CGRectGetHeight(transitionContext.containerView.bounds) - 220.f); CGPoint p = CGPointMake(transitionContext.containerView.center.x, -transitionContext.containerView.center.y); toView.center = p; From c1a422e24e6fdcce02868b1b6cdea492cac25abc Mon Sep 17 00:00:00 2001 From: Mesfin Date: Mon, 12 Oct 2015 19:49:18 -0400 Subject: [PATCH 08/44] Added pickerview datasource --- .../BreakingBad.xcodeproj/project.pbxproj | 34 +++-- .../BreakingBad/Base.lproj/Main.storyboard | 41 +++++- .../BreakingBad/CustomModalViewController.m | 9 ++ BreakingBad/BreakingBad/HabitList.h | 17 +++ BreakingBad/BreakingBad/HabitList.m | 32 ++++ BreakingBad/BreakingBad/Info.plist | 2 + BreakingBad/BreakingBad/ViewController.m | 139 ++++++++++-------- 7 files changed, 197 insertions(+), 77 deletions(-) create mode 100644 BreakingBad/BreakingBad/HabitList.h create mode 100644 BreakingBad/BreakingBad/HabitList.m diff --git a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj index 1927473..0e55153 100644 --- a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj +++ b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj @@ -24,6 +24,7 @@ DC2DC18E1BCAC0A700A627E2 /* Entry.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC18D1BCAC0A700A627E2 /* Entry.m */; settings = {ASSET_TAGS = (); }; }; DC2DC1911BCAE7E600A627E2 /* Step.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC1901BCAE7E600A627E2 /* Step.m */; settings = {ASSET_TAGS = (); }; }; DC2DC1941BCAEB8D00A627E2 /* BBUser.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC1931BCAEB8D00A627E2 /* BBUser.m */; settings = {ASSET_TAGS = (); }; }; + DC51A76B1BCC4CD60044984B /* HabitList.m in Sources */ = {isa = PBXBuildFile; fileRef = DC51A76A1BCC4CD60044984B /* HabitList.m */; settings = {ASSET_TAGS = (); }; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -59,6 +60,8 @@ DC2DC1901BCAE7E600A627E2 /* Step.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Step.m; sourceTree = ""; }; DC2DC1921BCAEB8D00A627E2 /* BBUser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBUser.h; sourceTree = ""; }; DC2DC1931BCAEB8D00A627E2 /* BBUser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBUser.m; sourceTree = ""; }; + DC51A7691BCC4CD60044984B /* HabitList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HabitList.h; sourceTree = ""; }; + DC51A76A1BCC4CD60044984B /* HabitList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HabitList.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -96,18 +99,11 @@ children = ( 5F8FF99A1BC9A9CD00855DFB /* AppDelegate.h */, 5F8FF99B1BC9A9CD00855DFB /* AppDelegate.m */, - DC2DC1921BCAEB8D00A627E2 /* BBUser.h */, - DC2DC1931BCAEB8D00A627E2 /* BBUser.m */, - DC2DC1861BCAC00500A627E2 /* Habit.h */, - DC2DC1871BCAC00500A627E2 /* Habit.m */, - DC2DC1891BCAC08700A627E2 /* Goal.h */, - DC2DC18A1BCAC08700A627E2 /* Goal.m */, - DC2DC18C1BCAC0A700A627E2 /* Entry.h */, - DC2DC18D1BCAC0A700A627E2 /* Entry.m */, - DC2DC18F1BCAE7E600A627E2 /* Step.h */, - DC2DC1901BCAE7E600A627E2 /* Step.m */, 5F8FF99D1BC9A9CD00855DFB /* ViewController.h */, 5F8FF99E1BC9A9CD00855DFB /* ViewController.m */, + DC51A7691BCC4CD60044984B /* HabitList.h */, + DC51A76A1BCC4CD60044984B /* HabitList.m */, + DC51A7651BCC1D4A0044984B /* BBModel */, 5FEAE26B1BCB0D7C00201A0E /* PopAnimation */, 5F8FF9A01BC9A9CD00855DFB /* Main.storyboard */, 5F8FF9A61BC9A9CD00855DFB /* Assets.xcassets */, @@ -159,6 +155,23 @@ name = Frameworks; sourceTree = ""; }; + DC51A7651BCC1D4A0044984B /* BBModel */ = { + isa = PBXGroup; + children = ( + DC2DC1921BCAEB8D00A627E2 /* BBUser.h */, + DC2DC1931BCAEB8D00A627E2 /* BBUser.m */, + DC2DC1861BCAC00500A627E2 /* Habit.h */, + DC2DC1871BCAC00500A627E2 /* Habit.m */, + DC2DC1891BCAC08700A627E2 /* Goal.h */, + DC2DC18A1BCAC08700A627E2 /* Goal.m */, + DC2DC18C1BCAC0A700A627E2 /* Entry.h */, + DC2DC18D1BCAC0A700A627E2 /* Entry.m */, + DC2DC18F1BCAE7E600A627E2 /* Step.h */, + DC2DC1901BCAE7E600A627E2 /* Step.m */, + ); + name = BBModel; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -277,6 +290,7 @@ 5F8FF9A51BC9A9CD00855DFB /* BreakingBad.xcdatamodeld in Sources */, 5FEAE2711BCB126700201A0E /* DismissingAnimationController.m in Sources */, DC2DC1941BCAEB8D00A627E2 /* BBUser.m in Sources */, + DC51A76B1BCC4CD60044984B /* HabitList.m in Sources */, 5F8FF9991BC9A9CD00855DFB /* main.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index ff25f6a..79ef2b7 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -3,7 +3,6 @@ - @@ -44,9 +43,6 @@ - - - @@ -61,25 +57,51 @@ + + + + + + + + + + + + + + + + + + + + + + + - - + - - + + + + + + @@ -187,6 +209,9 @@ + + + diff --git a/BreakingBad/BreakingBad/CustomModalViewController.m b/BreakingBad/BreakingBad/CustomModalViewController.m index be54a86..0e95c92 100644 --- a/BreakingBad/BreakingBad/CustomModalViewController.m +++ b/BreakingBad/BreakingBad/CustomModalViewController.m @@ -14,6 +14,15 @@ @implementation CustomModalViewController - (IBAction)didClickClose:(id)sender { + PFUser *thisUser = [PFUser user]; + if(![[thisUser objectForKey:@"emailVerified"] boolValue]){ + [thisUser fetch]; + } +// if (![[thisUser objectForKey:@"emailVerified"] boolValue]) { +// [self redirectWithMessage:@"You must verify your email address for cake"]; +// return; +// } + if ([self.passwordTextField.text isEqualToString:self.confirmPasswordTextField.text] && self.passwordTextField.text.length !=0) { PFUser *thisUser = [PFUser user]; thisUser.email = self.emailTextField.text; diff --git a/BreakingBad/BreakingBad/HabitList.h b/BreakingBad/BreakingBad/HabitList.h new file mode 100644 index 0000000..8f0e78b --- /dev/null +++ b/BreakingBad/BreakingBad/HabitList.h @@ -0,0 +1,17 @@ +// +// HabitList.h +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/12/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import + +@interface HabitList : NSObject + + ++ (NSMutableArray *)listOfHabits; + + +@end diff --git a/BreakingBad/BreakingBad/HabitList.m b/BreakingBad/BreakingBad/HabitList.m new file mode 100644 index 0000000..57cde34 --- /dev/null +++ b/BreakingBad/BreakingBad/HabitList.m @@ -0,0 +1,32 @@ +// +// HabitList.m +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/12/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "HabitList.h" + +@implementation HabitList + + ++ (NSMutableArray *)listOfHabits{ + + + NSArray *habitList = @[@"Smoking", + @"Bitting your nails", + @"Cocaine Addiction", + @"Biting your lips", + @"Eating unhealthy", + @"Excessive Drinking", + @"Facebook"]; + + NSMutableArray *hl = [NSMutableArray new]; + + [hl addObjectsFromArray:habitList]; + + return hl; +} + +@end diff --git a/BreakingBad/BreakingBad/Info.plist b/BreakingBad/BreakingBad/Info.plist index 6c48029..6905cc6 100644 --- a/BreakingBad/BreakingBad/Info.plist +++ b/BreakingBad/BreakingBad/Info.plist @@ -33,6 +33,8 @@ UISupportedInterfaceOrientations UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight diff --git a/BreakingBad/BreakingBad/ViewController.m b/BreakingBad/BreakingBad/ViewController.m index ea0a101..449c26d 100644 --- a/BreakingBad/BreakingBad/ViewController.m +++ b/BreakingBad/BreakingBad/ViewController.m @@ -13,9 +13,11 @@ #import "Goal.h" #import "Entry.h" #import "Step.h" +#import "HabitList.h" -@interface ViewController () +@interface ViewController () +@property (weak, nonatomic) IBOutlet UIPickerView *habitsPickerView; @end @@ -23,69 +25,88 @@ @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; + self.habitsPickerView.delegate = self; + self.habitsPickerView.dataSource = self; +// BBUser *user = (BBUser *)[PFUser object]; +// +// user.email = @"ab1c@gmail.com"; +// user.password = @"mesfinnotcool"; +// user.username = @"nc3j"; +// +// +// Habit *habit = [Habit new]; +// habit.name = @"Smoking"; +// +// Entry *entry = [Entry new]; +// entry.entryLog = @"Bitting nails"; +// +// +// Step *step1 = [Step new]; +// step1.stepDescription = @"1. No pack for a whole day"; +// step1.completed = 1; +// +// Step *step2 = [Step new]; +// step2.stepDescription = @"1. No pack for a whole week"; +// step2.completed = 0; +// +// Goal *goal = [Goal new]; +// goal.name = @"Quit Smoking"; +// goal.steps = [NSMutableArray new]; +// +// [goal.steps addObject:step1]; +// [goal.steps addObject:step2]; +// +// +// habit.entries = [NSMutableArray new]; +// habit.goals = [NSMutableArray new]; +// habit.name = @"Zouf says we need to talk, ...whatever"; +// +// [habit.entries addObject:entry]; +// [habit.goals addObject:goal]; +// +// +// if([user objectForKey:@"habits"]==nil){ +// user.habits = [NSMutableArray new]; +// [user.habits addObject:habit]; +// } +// +// [user signUpInBackground]; +// [user saveInBackground]; +// +// +// PFQuery *query = [PFQuery queryWithClassName:@"_User"]; +// [query findObjectsInBackgroundWithBlock:^(NSArray * _Nullable objects, NSError * _Nullable error) { +// ; +// NSLog(@"%@",objects); +// }]; +// +// BBUser *currentUser = (BBUser *)[PFUser currentUser]; +// [currentUser objectForKey:@"habits"]; +// [currentUser fetchIfNeeded]; +// NSLog(@"%@",currentUser.habits); - BBUser *user = (BBUser *)[PFUser object]; - - user.email = @"ab1c@gmail.com"; - user.password = @"mesfinnotcool"; - user.username = @"nc3j"; - - - Habit *habit = [Habit new]; - habit.name = @"Smoking"; - - Entry *entry = [Entry new]; - entry.entryLog = @"Bitting nails"; - - - Step *step1 = [Step new]; - step1.stepDescription = @"1. No pack for a whole day"; - step1.completed = 1; - - Step *step2 = [Step new]; - step2.stepDescription = @"1. No pack for a whole week"; - step2.completed = 0; - - Goal *goal = [Goal new]; - goal.name = @"Quit Smoking"; - goal.steps = [NSMutableArray new]; - - [goal.steps addObject:step1]; - [goal.steps addObject:step2]; - - - habit.entries = [NSMutableArray new]; - habit.goals = [NSMutableArray new]; - habit.name = @"Zouf says we need to talk, ...whatever"; - - [habit.entries addObject:entry]; - [habit.goals addObject:goal]; - - - if([user objectForKey:@"habits"]==nil){ - user.habits = [NSMutableArray new]; - [user.habits addObject:habit]; - } - - [user signUpInBackground]; - [user saveInBackground]; - - - PFQuery *query = [PFQuery queryWithClassName:@"_User"]; - [query findObjectsInBackgroundWithBlock:^(NSArray * _Nullable objects, NSError * _Nullable error) { - ; - NSLog(@"%@",objects); - }]; - - BBUser *currentUser = (BBUser *)[PFUser currentUser]; - [currentUser objectForKey:@"habits"]; - [currentUser fetchIfNeeded]; - NSLog(@"%@",currentUser.habits); - } +#pragma mark +#pragma UIPickerView DataSource Methods + +-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ + return 1; +} + +- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ + return [HabitList listOfHabits].count; +} + +- (nullable NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ + return [HabitList listOfHabits][row]; +} + + + + @end From 13d184c26f4de1d4cead49bc2cdb4236553d1dfd Mon Sep 17 00:00:00 2001 From: Mesfin Date: Mon, 12 Oct 2015 19:56:08 -0400 Subject: [PATCH 09/44] made entry cards clickable --- .../BreakingBad/Base.lproj/Main.storyboard | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index 79ef2b7..637c44a 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -110,27 +110,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 0b81744193cb23921514efa5fa77cba6826e53d9 Mon Sep 17 00:00:00 2001 From: Zoufishan Mehdi Date: Mon, 12 Oct 2015 23:32:04 -0400 Subject: [PATCH 10/44] working on grid cells --- .../BreakingBad.xcodeproj/project.pbxproj | 6 + .../BreakingBad/Base.lproj/Main.storyboard | 174 +++++++++++++++++- BreakingBad/BreakingBad/HabitList.m | 2 +- BreakingBad/BreakingBad/ViewController.m | 31 ++++ BreakingBad/BreakingBad/questionDetailVC.h | 15 ++ BreakingBad/BreakingBad/questionDetailVC.m | 55 ++++++ 6 files changed, 275 insertions(+), 8 deletions(-) create mode 100644 BreakingBad/BreakingBad/questionDetailVC.h create mode 100644 BreakingBad/BreakingBad/questionDetailVC.m diff --git a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj index 0e55153..b9a77e7 100644 --- a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj +++ b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj @@ -15,6 +15,7 @@ 5F8FF9A51BC9A9CD00855DFB /* BreakingBad.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 5F8FF9A31BC9A9CD00855DFB /* BreakingBad.xcdatamodeld */; }; 5F8FF9A71BC9A9CD00855DFB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5F8FF9A61BC9A9CD00855DFB /* Assets.xcassets */; }; 5F8FF9AA1BC9A9CD00855DFB /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5F8FF9A81BC9A9CD00855DFB /* LaunchScreen.storyboard */; }; + 5F9B082F1BCC9ECD00460FF2 /* questionDetailVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F9B082E1BCC9ECC00460FF2 /* questionDetailVC.m */; }; 5FEAE2611BCB053F00201A0E /* CustomVCTransitionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE2601BCB053F00201A0E /* CustomVCTransitionViewController.m */; }; 5FEAE2641BCB055A00201A0E /* CustomModalViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE2631BCB055A00201A0E /* CustomModalViewController.m */; }; 5FEAE26E1BCB125A00201A0E /* PresentingAnimationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE26D1BCB125A00201A0E /* PresentingAnimationController.m */; }; @@ -41,6 +42,8 @@ 5F8FF9A61BC9A9CD00855DFB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 5F8FF9A91BC9A9CD00855DFB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 5F8FF9AB1BC9A9CD00855DFB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 5F9B082D1BCC9ECC00460FF2 /* questionDetailVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = questionDetailVC.h; sourceTree = ""; }; + 5F9B082E1BCC9ECC00460FF2 /* questionDetailVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = questionDetailVC.m; sourceTree = ""; }; 5FEAE25F1BCB053F00201A0E /* CustomVCTransitionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomVCTransitionViewController.h; sourceTree = ""; }; 5FEAE2601BCB053F00201A0E /* CustomVCTransitionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomVCTransitionViewController.m; sourceTree = ""; }; 5FEAE2621BCB055A00201A0E /* CustomModalViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomModalViewController.h; sourceTree = ""; }; @@ -101,6 +104,8 @@ 5F8FF99B1BC9A9CD00855DFB /* AppDelegate.m */, 5F8FF99D1BC9A9CD00855DFB /* ViewController.h */, 5F8FF99E1BC9A9CD00855DFB /* ViewController.m */, + 5F9B082D1BCC9ECC00460FF2 /* questionDetailVC.h */, + 5F9B082E1BCC9ECC00460FF2 /* questionDetailVC.m */, DC51A7691BCC4CD60044984B /* HabitList.h */, DC51A76A1BCC4CD60044984B /* HabitList.m */, DC51A7651BCC1D4A0044984B /* BBModel */, @@ -285,6 +290,7 @@ DC2DC18B1BCAC08700A627E2 /* Goal.m in Sources */, 5FEAE26E1BCB125A00201A0E /* PresentingAnimationController.m in Sources */, 5F8FF99F1BC9A9CD00855DFB /* ViewController.m in Sources */, + 5F9B082F1BCC9ECD00460FF2 /* questionDetailVC.m in Sources */, DC2DC18E1BCAC0A700A627E2 /* Entry.m in Sources */, 5F8FF99C1BC9A9CD00855DFB /* AppDelegate.m in Sources */, 5F8FF9A51BC9A9CD00855DFB /* BreakingBad.xcdatamodeld in Sources */, diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index 637c44a..2d26812 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -1,8 +1,9 @@ - + - + + @@ -113,6 +114,10 @@ @@ -128,6 +133,10 @@ @@ -141,8 +150,13 @@ - @@ -156,8 +170,13 @@ - @@ -171,8 +190,13 @@ - @@ -186,8 +210,13 @@ - @@ -277,11 +306,142 @@ + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda. + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BreakingBad/BreakingBad/HabitList.m b/BreakingBad/BreakingBad/HabitList.m index 57cde34..b617421 100644 --- a/BreakingBad/BreakingBad/HabitList.m +++ b/BreakingBad/BreakingBad/HabitList.m @@ -15,7 +15,7 @@ + (NSMutableArray *)listOfHabits{ NSArray *habitList = @[@"Smoking", - @"Bitting your nails", + @"Biting your nails", @"Cocaine Addiction", @"Biting your lips", @"Eating unhealthy", diff --git a/BreakingBad/BreakingBad/ViewController.m b/BreakingBad/BreakingBad/ViewController.m index 449c26d..8e2d875 100644 --- a/BreakingBad/BreakingBad/ViewController.m +++ b/BreakingBad/BreakingBad/ViewController.m @@ -14,15 +14,46 @@ #import "Entry.h" #import "Step.h" #import "HabitList.h" +#import "questionDetailVC.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIPickerView *habitsPickerView; +@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *question; + @end @implementation ViewController +- (IBAction)questionButtonTapped:(UIButton *)sender { + + + [self performSegueWithIdentifier:@"showQDetailSegue" sender:sender]; + +} + +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UIButton *)sender { + NSString *title = sender.currentTitle; + // do what you need with the title +} + + +//passing data to a new VC +/* + if([segue.identifier isEqualToString:@"showQDetailSegue"]){ + ViewControllerB *controller = (ViewControllerB *)segue.destinationViewController; + controller.isSomethingEnabled = YES; + */ + +//selector pushViewController is not declared +// questionDetailVC *qDetailVC = [[questionDetailVC alloc] initWithNibName:@"questionDetailVC" bundle:nil]; +// //initWithNib:@"questionDetailVC" bundle:nil]; +// qDetailVC.isSomethingEnabled = YES; +// [self pushViewController:qDetailVC animated:YES]; + + + - (void)viewDidLoad { [super viewDidLoad]; self.habitsPickerView.delegate = self; diff --git a/BreakingBad/BreakingBad/questionDetailVC.h b/BreakingBad/BreakingBad/questionDetailVC.h new file mode 100644 index 0000000..387c7e0 --- /dev/null +++ b/BreakingBad/BreakingBad/questionDetailVC.h @@ -0,0 +1,15 @@ +// +// questionDetailVC.h +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/12/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import + +@interface questionDetailVC : UIViewController + +@property(nonatomic) BOOL *isSomethingEnabled; + +@end diff --git a/BreakingBad/BreakingBad/questionDetailVC.m b/BreakingBad/BreakingBad/questionDetailVC.m new file mode 100644 index 0000000..4c9dfc9 --- /dev/null +++ b/BreakingBad/BreakingBad/questionDetailVC.m @@ -0,0 +1,55 @@ +// +// questionDetailVC.m +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/12/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "questionDetailVC.h" +#import "ViewController.h" + +@interface questionDetailVC () +@property (weak, nonatomic) IBOutlet UILabel *questionLabel; +@property (weak, nonatomic) IBOutlet UITextView *answerTextView; + +@end + + +@implementation questionDetailVC + + +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UIButton *)sender { + NSString *title = sender.currentTitle; + // do what you need with the title + title = self.questionLabel.text; +} + + +//for (UIButton* button in _question) { +// if(button.tag==1){ +// //add text +// +// +// } if(button.tag==2){ +// //add text +// +// } if(button.tag==3){ +// +// //add text +// } if(button.tag==4){ +// +// //add text +// } if(button.tag==5){ +// +// //add text +// } if(button.tag==6){ +// +// //add text +// } +// +//} + + + +@end From bd047522ef3bb08a8203daffac2b3e70c2c8532c Mon Sep 17 00:00:00 2001 From: Mesfin Date: Tue, 13 Oct 2015 01:47:53 -0400 Subject: [PATCH 11/44] Transition from grid cell to question detail view controller --- .../BreakingBad.xcodeproj/project.pbxproj | 12 +- .../BreakingBad/Base.lproj/Main.storyboard | 209 +++++++----------- BreakingBad/BreakingBad/QuestionDetailVC.h | 18 ++ BreakingBad/BreakingBad/QuestionDetailVC.m | 33 +++ BreakingBad/BreakingBad/ViewController.m | 13 +- BreakingBad/BreakingBad/questionDetailVC.h | 15 -- BreakingBad/BreakingBad/questionDetailVC.m | 55 ----- 7 files changed, 147 insertions(+), 208 deletions(-) create mode 100644 BreakingBad/BreakingBad/QuestionDetailVC.h create mode 100644 BreakingBad/BreakingBad/QuestionDetailVC.m delete mode 100644 BreakingBad/BreakingBad/questionDetailVC.h delete mode 100644 BreakingBad/BreakingBad/questionDetailVC.m diff --git a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj index b9a77e7..b1c847a 100644 --- a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj +++ b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj @@ -15,7 +15,7 @@ 5F8FF9A51BC9A9CD00855DFB /* BreakingBad.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 5F8FF9A31BC9A9CD00855DFB /* BreakingBad.xcdatamodeld */; }; 5F8FF9A71BC9A9CD00855DFB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5F8FF9A61BC9A9CD00855DFB /* Assets.xcassets */; }; 5F8FF9AA1BC9A9CD00855DFB /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5F8FF9A81BC9A9CD00855DFB /* LaunchScreen.storyboard */; }; - 5F9B082F1BCC9ECD00460FF2 /* questionDetailVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F9B082E1BCC9ECC00460FF2 /* questionDetailVC.m */; }; + 5F9B082F1BCC9ECD00460FF2 /* QuestionDetailVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F9B082E1BCC9ECC00460FF2 /* QuestionDetailVC.m */; }; 5FEAE2611BCB053F00201A0E /* CustomVCTransitionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE2601BCB053F00201A0E /* CustomVCTransitionViewController.m */; }; 5FEAE2641BCB055A00201A0E /* CustomModalViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE2631BCB055A00201A0E /* CustomModalViewController.m */; }; 5FEAE26E1BCB125A00201A0E /* PresentingAnimationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE26D1BCB125A00201A0E /* PresentingAnimationController.m */; }; @@ -42,8 +42,8 @@ 5F8FF9A61BC9A9CD00855DFB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 5F8FF9A91BC9A9CD00855DFB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 5F8FF9AB1BC9A9CD00855DFB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5F9B082D1BCC9ECC00460FF2 /* questionDetailVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = questionDetailVC.h; sourceTree = ""; }; - 5F9B082E1BCC9ECC00460FF2 /* questionDetailVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = questionDetailVC.m; sourceTree = ""; }; + 5F9B082D1BCC9ECC00460FF2 /* QuestionDetailVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuestionDetailVC.h; sourceTree = ""; }; + 5F9B082E1BCC9ECC00460FF2 /* QuestionDetailVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QuestionDetailVC.m; sourceTree = ""; }; 5FEAE25F1BCB053F00201A0E /* CustomVCTransitionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomVCTransitionViewController.h; sourceTree = ""; }; 5FEAE2601BCB053F00201A0E /* CustomVCTransitionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomVCTransitionViewController.m; sourceTree = ""; }; 5FEAE2621BCB055A00201A0E /* CustomModalViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomModalViewController.h; sourceTree = ""; }; @@ -104,8 +104,8 @@ 5F8FF99B1BC9A9CD00855DFB /* AppDelegate.m */, 5F8FF99D1BC9A9CD00855DFB /* ViewController.h */, 5F8FF99E1BC9A9CD00855DFB /* ViewController.m */, - 5F9B082D1BCC9ECC00460FF2 /* questionDetailVC.h */, - 5F9B082E1BCC9ECC00460FF2 /* questionDetailVC.m */, + 5F9B082D1BCC9ECC00460FF2 /* QuestionDetailVC.h */, + 5F9B082E1BCC9ECC00460FF2 /* QuestionDetailVC.m */, DC51A7691BCC4CD60044984B /* HabitList.h */, DC51A76A1BCC4CD60044984B /* HabitList.m */, DC51A7651BCC1D4A0044984B /* BBModel */, @@ -290,7 +290,7 @@ DC2DC18B1BCAC08700A627E2 /* Goal.m in Sources */, 5FEAE26E1BCB125A00201A0E /* PresentingAnimationController.m in Sources */, 5F8FF99F1BC9A9CD00855DFB /* ViewController.m in Sources */, - 5F9B082F1BCC9ECD00460FF2 /* questionDetailVC.m in Sources */, + 5F9B082F1BCC9ECD00460FF2 /* QuestionDetailVC.m in Sources */, DC2DC18E1BCAC0A700A627E2 /* Entry.m in Sources */, 5F8FF99C1BC9A9CD00855DFB /* AppDelegate.m in Sources */, 5F8FF9A51BC9A9CD00855DFB /* BreakingBad.xcdatamodeld in Sources */, diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index 2d26812..913c543 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -1,9 +1,8 @@ - + - + - @@ -21,7 +20,7 @@ - + @@ -114,6 +113,7 @@ + - - - - Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda. - - - - + + + + - - - - + + + + + + + + + + + + + - + - - + + - + @@ -474,7 +419,7 @@ - + @@ -488,8 +433,8 @@ - - - + + - - + + - - + + - - + + - + + + + + + + + + + + + + + + + + diff --git a/BreakingBad/BreakingBad/QuestionDetailVC.h b/BreakingBad/BreakingBad/QuestionDetailVC.h new file mode 100644 index 0000000..167873b --- /dev/null +++ b/BreakingBad/BreakingBad/QuestionDetailVC.h @@ -0,0 +1,18 @@ +// +// questionDetailVC.h +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/12/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import + +@interface QuestionDetailVC : UIViewController + +@property (nonatomic) IBOutlet UILabel *questionLabel; +@property (weak, nonatomic) IBOutlet UITextView *answerTextView; + +@property (nonatomic) NSString *question; + +@end diff --git a/BreakingBad/BreakingBad/QuestionDetailVC.m b/BreakingBad/BreakingBad/QuestionDetailVC.m new file mode 100644 index 0000000..435f93b --- /dev/null +++ b/BreakingBad/BreakingBad/QuestionDetailVC.m @@ -0,0 +1,33 @@ +// +// questionDetailVC.m +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/12/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "QuestionDetailVC.h" +#import "ViewController.h" + +@interface QuestionDetailVC () + + +@end + + +@implementation QuestionDetailVC + + +- (void)viewDidLoad{ + [super viewDidLoad]; + + self.questionLabel.text = self.question; + +} + +- (IBAction)doneButtonTapped:(UIButton *)sender { + [self dismissViewControllerAnimated:YES completion:nil]; +} + + +@end diff --git a/BreakingBad/BreakingBad/ViewController.m b/BreakingBad/BreakingBad/ViewController.m index 8e2d875..a073949 100644 --- a/BreakingBad/BreakingBad/ViewController.m +++ b/BreakingBad/BreakingBad/ViewController.m @@ -14,7 +14,7 @@ #import "Entry.h" #import "Step.h" #import "HabitList.h" -#import "questionDetailVC.h" +#import "QuestionDetailVC.h" @interface ViewController () @@ -27,16 +27,11 @@ @interface ViewController () @implementation ViewController - (IBAction)questionButtonTapped:(UIButton *)sender { - - - [self performSegueWithIdentifier:@"showQDetailSegue" sender:sender]; - + QuestionDetailVC *qvc = (QuestionDetailVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"showQDetailSegue"]; + qvc.question = sender.titleLabel.text; + [self presentViewController:qvc animated:YES completion:nil]; } -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UIButton *)sender { - NSString *title = sender.currentTitle; - // do what you need with the title -} //passing data to a new VC diff --git a/BreakingBad/BreakingBad/questionDetailVC.h b/BreakingBad/BreakingBad/questionDetailVC.h deleted file mode 100644 index 387c7e0..0000000 --- a/BreakingBad/BreakingBad/questionDetailVC.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// questionDetailVC.h -// BreakingBad -// -// Created by Zoufishan Mehdi on 10/12/15. -// Copyright © 2015 Zoufishan Mehdi. All rights reserved. -// - -#import - -@interface questionDetailVC : UIViewController - -@property(nonatomic) BOOL *isSomethingEnabled; - -@end diff --git a/BreakingBad/BreakingBad/questionDetailVC.m b/BreakingBad/BreakingBad/questionDetailVC.m deleted file mode 100644 index 4c9dfc9..0000000 --- a/BreakingBad/BreakingBad/questionDetailVC.m +++ /dev/null @@ -1,55 +0,0 @@ -// -// questionDetailVC.m -// BreakingBad -// -// Created by Zoufishan Mehdi on 10/12/15. -// Copyright © 2015 Zoufishan Mehdi. All rights reserved. -// - -#import "questionDetailVC.h" -#import "ViewController.h" - -@interface questionDetailVC () -@property (weak, nonatomic) IBOutlet UILabel *questionLabel; -@property (weak, nonatomic) IBOutlet UITextView *answerTextView; - -@end - - -@implementation questionDetailVC - - -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UIButton *)sender { - NSString *title = sender.currentTitle; - // do what you need with the title - title = self.questionLabel.text; -} - - -//for (UIButton* button in _question) { -// if(button.tag==1){ -// //add text -// -// -// } if(button.tag==2){ -// //add text -// -// } if(button.tag==3){ -// -// //add text -// } if(button.tag==4){ -// -// //add text -// } if(button.tag==5){ -// -// //add text -// } if(button.tag==6){ -// -// //add text -// } -// -//} - - - -@end From 714343a78bdfe8cd76ba8ca4b30dc6b8271d7297 Mon Sep 17 00:00:00 2001 From: Mesfin Date: Tue, 13 Oct 2015 01:54:28 -0400 Subject: [PATCH 12/44] Working version of grid cells and detail view controller, questions label is cutting the questions tho --- BreakingBad/BreakingBad/Base.lproj/Main.storyboard | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index 913c543..c635195 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -344,8 +344,8 @@ - From 660e2ed6f674c155263f8c428319ae2b9413823d Mon Sep 17 00:00:00 2001 From: Zoufishan Mehdi Date: Tue, 13 Oct 2015 11:07:16 -0400 Subject: [PATCH 13/44] worked on QuestionDetailVC UI and passing data back to landing pg --- .../BreakingBad/Base.lproj/Main.storyboard | 106 ++++++++++++++++-- BreakingBad/BreakingBad/QuestionDetailVC.h | 10 ++ BreakingBad/BreakingBad/QuestionDetailVC.m | 8 ++ BreakingBad/BreakingBad/ViewController.m | 18 ++- 4 files changed, 130 insertions(+), 12 deletions(-) diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index c635195..d2bea05 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -1,7 +1,7 @@ - + - + @@ -119,13 +119,25 @@ + + + + @@ -139,12 +151,24 @@ + + + + @@ -159,12 +183,24 @@ + + + + @@ -179,12 +215,24 @@ + + + + @@ -199,13 +247,25 @@ + + + + @@ -219,10 +279,22 @@ + + + + @@ -306,6 +378,12 @@ + + + + + + @@ -313,6 +391,12 @@ + + + + + + @@ -331,11 +415,11 @@ - - - + + + - + - From f9fb9cabe3fc7c6ddd477dae9457d4478216ab46 Mon Sep 17 00:00:00 2001 From: Zoufishan Mehdi Date: Tue, 13 Oct 2015 14:47:54 -0400 Subject: [PATCH 15/44] able to pass answer frm VC to QuestionDetailVC --- .../BreakingBad/Base.lproj/Main.storyboard | 34 ++++++++----------- BreakingBad/BreakingBad/QuestionDetailVC.h | 9 ++--- BreakingBad/BreakingBad/QuestionDetailVC.m | 1 + BreakingBad/BreakingBad/ViewController.m | 32 ++++++++++++----- 4 files changed, 43 insertions(+), 33 deletions(-) diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index 5e8a4f9..8394ec2 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -1,7 +1,7 @@ - + - + @@ -25,7 +25,7 @@ - + @@ -111,7 +111,7 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BreakingBad/BreakingBad/CustomModalViewController.m b/BreakingBad/BreakingBad/CustomModalViewController.m index 0e95c92..c3d7764 100644 --- a/BreakingBad/BreakingBad/CustomModalViewController.m +++ b/BreakingBad/BreakingBad/CustomModalViewController.m @@ -8,6 +8,7 @@ #import "CustomModalViewController.h" #import +#import "MainPageVC.h" @implementation CustomModalViewController @@ -18,10 +19,6 @@ - (IBAction)didClickClose:(id)sender { if(![[thisUser objectForKey:@"emailVerified"] boolValue]){ [thisUser fetch]; } -// if (![[thisUser objectForKey:@"emailVerified"] boolValue]) { -// [self redirectWithMessage:@"You must verify your email address for cake"]; -// return; -// } if ([self.passwordTextField.text isEqualToString:self.confirmPasswordTextField.text] && self.passwordTextField.text.length !=0) { PFUser *thisUser = [PFUser user]; @@ -30,9 +27,12 @@ - (IBAction)didClickClose:(id)sender { thisUser.password = self.passwordTextField.text; [thisUser signUpInBackgroundWithBlock:^(BOOL succeeded, NSError * _Nullable error) { - //add segue here + //add segue }]; - [self dismissViewControllerAnimated:YES completion:nil]; + MainPageVC *mvc = (MainPageVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"showMainPgVC"]; + [self presentViewController:mvc animated:YES completion:nil]; + //[self dismissViewControllerAnimated:YES completion:nil]; + } else { UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Error" message:@"The password field is either empty or does not match the confirm password field" preferredStyle:UIAlertControllerStyleAlert]; diff --git a/BreakingBad/BreakingBad/HabitList.h b/BreakingBad/BreakingBad/HabitList.h index 8f0e78b..52a121e 100644 --- a/BreakingBad/BreakingBad/HabitList.h +++ b/BreakingBad/BreakingBad/HabitList.h @@ -10,8 +10,11 @@ @interface HabitList : NSObject +@property (nonatomic) NSMutableArray *habits; -+ (NSMutableArray *)listOfHabits; +//+ (NSMutableArray *)listOfHabits; +- (NSMutableArray *)habitsList; + @end diff --git a/BreakingBad/BreakingBad/HabitList.m b/BreakingBad/BreakingBad/HabitList.m index b617421..682edbc 100644 --- a/BreakingBad/BreakingBad/HabitList.m +++ b/BreakingBad/BreakingBad/HabitList.m @@ -7,13 +7,32 @@ // #import "HabitList.h" +#import "ViewController.h" +#import "QuestionDetailVC.h" @implementation HabitList -+ (NSMutableArray *)listOfHabits{ - - +//+ (NSMutableArray *)listOfHabits{ +// +// +// NSArray *habitList = @[@"Smoking", +// @"Biting your nails", +// @"Cocaine Addiction", +// @"Biting your lips", +// @"Eating unhealthy", +// @"Excessive Drinking", +// @"Facebook"]; +// +// +// +//// [ addObjectsFromArray:habitList]; +// +// +// return nil; +//} + +- (NSMutableArray *)habitsList{ NSArray *habitList = @[@"Smoking", @"Biting your nails", @"Cocaine Addiction", @@ -22,11 +41,8 @@ + (NSMutableArray *)listOfHabits{ @"Excessive Drinking", @"Facebook"]; - NSMutableArray *hl = [NSMutableArray new]; - - [hl addObjectsFromArray:habitList]; - - return hl; + self.habits = [[NSMutableArray alloc] initWithArray:habitList]; + return self.habits; } @end diff --git a/BreakingBad/BreakingBad/MainPageVC.h b/BreakingBad/BreakingBad/MainPageVC.h new file mode 100644 index 0000000..f403cc4 --- /dev/null +++ b/BreakingBad/BreakingBad/MainPageVC.h @@ -0,0 +1,13 @@ +// +// MainPageVC.h +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/13/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import + +@interface MainPageVC : UIViewController + +@end diff --git a/BreakingBad/BreakingBad/MainPageVC.m b/BreakingBad/BreakingBad/MainPageVC.m new file mode 100644 index 0000000..8354440 --- /dev/null +++ b/BreakingBad/BreakingBad/MainPageVC.m @@ -0,0 +1,70 @@ +// +// MainPageVC.m +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/13/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "MainPageVC.h" +#import "SharedManager.h" + +@interface MainPageVC () +@property (weak, nonatomic) IBOutlet UIPickerView *habitPickerView; +@property (weak, nonatomic) IBOutlet UITextField *habitTextField; +@property (weak, nonatomic) IBOutlet UIButton *doneButton; + +@property (strong, nonatomic) IBOutletCollection(UILabel) NSArray *reply; + + +@end + + + +@implementation MainPageVC + +- (IBAction)doneButtonTapped:(UIButton *)sender { + + [[SharedManager sharedModel].habitArray addObject:self.habitTextField.text]; + [self.habitPickerView reloadAllComponents]; + +// [self.habitsArray addObject:self.createNewHabit.text]; +// [self.habitsPickerView reloadAllComponents]; +} + + +- (void)viewDidLoad{ + [super viewDidLoad]; + self.habitPickerView.delegate = self; + + //MainPageVC.navigationItem.title = @"MyTitle"; +} + +//- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated { +// +// [SharedManager sharedModel].habitArray[row] +//} + + + +#pragma mark +#pragma UIPickerView DataSource Methods + +-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ + return 1; +} + +- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ + + return [SharedManager sharedModel].habitArray.count; + //self.habitsArray.count; +} + +- (nullable NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ + + return [SharedManager sharedModel].habitArray[row]; + + //self.habitsArray[row]; +} + +@end diff --git a/BreakingBad/BreakingBad/ViewController.h b/BreakingBad/BreakingBad/ViewController.h index ccec381..25762af 100644 --- a/BreakingBad/BreakingBad/ViewController.h +++ b/BreakingBad/BreakingBad/ViewController.h @@ -11,5 +11,6 @@ @interface ViewController : UIViewController + @end diff --git a/BreakingBad/BreakingBad/ViewController.m b/BreakingBad/BreakingBad/ViewController.m index d0dcb69..0163f83 100644 --- a/BreakingBad/BreakingBad/ViewController.m +++ b/BreakingBad/BreakingBad/ViewController.m @@ -18,12 +18,16 @@ -@interface ViewController () +@interface ViewController () @property (weak, nonatomic) IBOutlet UIPickerView *habitsPickerView; -@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *question; +@property (weak, nonatomic) IBOutlet UITextField *createNewHabit; + +@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *question; @property (strong, nonatomic) IBOutletCollection(UILabel) NSArray *answer; +@property (nonatomic) NSMutableArray *habitsArray; + @end @implementation ViewController @@ -38,6 +42,12 @@ - (IBAction)questionButtonTapped:(UIButton *)sender { } +- (IBAction)habitDoneButtonTapped:(UIButton *)sender { + [self.habitsArray addObject:self.createNewHabit.text]; + [self.habitsPickerView reloadAllComponents]; +} + + - (void)finishedAnswering:(QuestionDetailVC *)qvc withAnswer:(NSString *)answer { @@ -56,6 +66,11 @@ - (void)viewDidLoad { [super viewDidLoad]; self.habitsPickerView.delegate = self; self.habitsPickerView.dataSource = self; + self.habitsArray = [NSMutableArray new]; + HabitList *hl = [HabitList new]; + self.habitsArray = hl.habitsList; + + // BBUser *user = (BBUser *)[PFUser object]; // // user.email = @"ab1c@gmail.com"; @@ -126,11 +141,13 @@ -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ } - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ - return [HabitList listOfHabits].count; + + return self.habitsArray.count; } - (nullable NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ - return [HabitList listOfHabits][row]; + + return self.habitsArray[row]; } diff --git a/BreakingBad/Podfile b/BreakingBad/Podfile index 1d351c3..5437664 100644 --- a/BreakingBad/Podfile +++ b/BreakingBad/Podfile @@ -1,3 +1,5 @@ pod ‘pop’, ‘~> 1.0’ -pod 'Parse' \ No newline at end of file +pod 'Parse' + +pod "AFNetworking", "~> 2.0" From 9bf3b9fe834eadd6e4ca9cef5414465cfe06a333 Mon Sep 17 00:00:00 2001 From: Mesfin Date: Tue, 13 Oct 2015 23:24:34 -0400 Subject: [PATCH 19/44] got the home screen after sign up working --- .../BreakingBad.xcodeproj/project.pbxproj | 12 +- .../BreakingBad/Base.lproj/Main.storyboard | 15 +- BreakingBad/BreakingBad/MainPageVC.m | 28 ++-- BreakingBad/BreakingBad/SharedManager.h | 26 ++++ BreakingBad/BreakingBad/SharedManager.m | 54 +++++++ BreakingBad/BreakingBad/ViewController.m | 134 ++++++++++-------- 6 files changed, 181 insertions(+), 88 deletions(-) create mode 100644 BreakingBad/BreakingBad/SharedManager.h create mode 100644 BreakingBad/BreakingBad/SharedManager.m diff --git a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj index e35b126..0d0a542 100644 --- a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj +++ b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj @@ -17,7 +17,6 @@ 5F8FF9AA1BC9A9CD00855DFB /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5F8FF9A81BC9A9CD00855DFB /* LaunchScreen.storyboard */; }; 5F9B082F1BCC9ECD00460FF2 /* QuestionDetailVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F9B082E1BCC9ECC00460FF2 /* QuestionDetailVC.m */; }; 5F9B08321BCDAD1500460FF2 /* MainPageVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F9B08311BCDAD1500460FF2 /* MainPageVC.m */; }; - 5F9B08351BCDC0B100460FF2 /* SharedManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F9B08341BCDC0B000460FF2 /* SharedManager.m */; }; 5FEAE2611BCB053F00201A0E /* CustomVCTransitionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE2601BCB053F00201A0E /* CustomVCTransitionViewController.m */; }; 5FEAE2641BCB055A00201A0E /* CustomModalViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE2631BCB055A00201A0E /* CustomModalViewController.m */; }; 5FEAE26E1BCB125A00201A0E /* PresentingAnimationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE26D1BCB125A00201A0E /* PresentingAnimationController.m */; }; @@ -28,6 +27,7 @@ DC2DC1911BCAE7E600A627E2 /* Step.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC1901BCAE7E600A627E2 /* Step.m */; settings = {ASSET_TAGS = (); }; }; DC2DC1941BCAEB8D00A627E2 /* BBUser.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC1931BCAEB8D00A627E2 /* BBUser.m */; settings = {ASSET_TAGS = (); }; }; DC51A76B1BCC4CD60044984B /* HabitList.m in Sources */ = {isa = PBXBuildFile; fileRef = DC51A76A1BCC4CD60044984B /* HabitList.m */; settings = {ASSET_TAGS = (); }; }; + DCBA27C21BCDE85800E61721 /* SharedManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DCBA27C11BCDE85800E61721 /* SharedManager.m */; settings = {ASSET_TAGS = (); }; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -48,8 +48,6 @@ 5F9B082E1BCC9ECC00460FF2 /* QuestionDetailVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QuestionDetailVC.m; sourceTree = ""; }; 5F9B08301BCDAD1500460FF2 /* MainPageVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainPageVC.h; sourceTree = ""; }; 5F9B08311BCDAD1500460FF2 /* MainPageVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainPageVC.m; sourceTree = ""; }; - 5F9B08331BCDC0B000460FF2 /* SharedManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SharedManager.h; sourceTree = ""; }; - 5F9B08341BCDC0B000460FF2 /* SharedManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SharedManager.m; sourceTree = ""; }; 5FEAE25F1BCB053F00201A0E /* CustomVCTransitionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomVCTransitionViewController.h; sourceTree = ""; }; 5FEAE2601BCB053F00201A0E /* CustomVCTransitionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomVCTransitionViewController.m; sourceTree = ""; }; 5FEAE2621BCB055A00201A0E /* CustomModalViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomModalViewController.h; sourceTree = ""; }; @@ -71,6 +69,8 @@ DC2DC1931BCAEB8D00A627E2 /* BBUser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBUser.m; sourceTree = ""; }; DC51A7691BCC4CD60044984B /* HabitList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HabitList.h; sourceTree = ""; }; DC51A76A1BCC4CD60044984B /* HabitList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HabitList.m; sourceTree = ""; }; + DCBA27C01BCDE85800E61721 /* SharedManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SharedManager.h; sourceTree = ""; }; + DCBA27C11BCDE85800E61721 /* SharedManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SharedManager.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -116,8 +116,8 @@ 5F9B082E1BCC9ECC00460FF2 /* QuestionDetailVC.m */, 5F9B08301BCDAD1500460FF2 /* MainPageVC.h */, 5F9B08311BCDAD1500460FF2 /* MainPageVC.m */, - 5F9B08331BCDC0B000460FF2 /* SharedManager.h */, - 5F9B08341BCDC0B000460FF2 /* SharedManager.m */, + DCBA27C01BCDE85800E61721 /* SharedManager.h */, + DCBA27C11BCDE85800E61721 /* SharedManager.m */, DC51A7651BCC1D4A0044984B /* BBModel */, 5FEAE26B1BCB0D7C00201A0E /* PopAnimation */, 5F8FF9A01BC9A9CD00855DFB /* Main.storyboard */, @@ -304,7 +304,7 @@ 5F9B082F1BCC9ECD00460FF2 /* QuestionDetailVC.m in Sources */, DC2DC18E1BCAC0A700A627E2 /* Entry.m in Sources */, 5F8FF99C1BC9A9CD00855DFB /* AppDelegate.m in Sources */, - 5F9B08351BCDC0B100460FF2 /* SharedManager.m in Sources */, + DCBA27C21BCDE85800E61721 /* SharedManager.m in Sources */, 5F8FF9A51BC9A9CD00855DFB /* BreakingBad.xcdatamodeld in Sources */, 5FEAE2711BCB126700201A0E /* DismissingAnimationController.m in Sources */, DC2DC1941BCAEB8D00A627E2 /* BBUser.m in Sources */, diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index 6af6f95..e886f43 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -1,7 +1,7 @@ - + - + @@ -682,8 +682,8 @@ - + @@ -961,11 +961,11 @@ - - - + + + @@ -977,6 +977,9 @@ + + + diff --git a/BreakingBad/BreakingBad/MainPageVC.m b/BreakingBad/BreakingBad/MainPageVC.m index 8354440..4be2f44 100644 --- a/BreakingBad/BreakingBad/MainPageVC.m +++ b/BreakingBad/BreakingBad/MainPageVC.m @@ -27,26 +27,29 @@ - (IBAction)doneButtonTapped:(UIButton *)sender { [[SharedManager sharedModel].habitArray addObject:self.habitTextField.text]; [self.habitPickerView reloadAllComponents]; - -// [self.habitsArray addObject:self.createNewHabit.text]; -// [self.habitsPickerView reloadAllComponents]; } +-(void)answersFromPreviousScreen{ + for (int i=0; i +#import "HabitList.h" +#import "ViewController.h" + +@interface SharedManager : NSObject + +@property (nonatomic) HabitList *habitListData; + +@property (nonatomic) NSMutableArray *habitArray; +@property (nonatomic) NSInteger selectedRow; +@property (nonatomic) NSMutableArray *answersLabel; + + ++ (SharedManager *)sharedModel; + +-(void)initializeData; + +@end diff --git a/BreakingBad/BreakingBad/SharedManager.m b/BreakingBad/BreakingBad/SharedManager.m new file mode 100644 index 0000000..57c80f9 --- /dev/null +++ b/BreakingBad/BreakingBad/SharedManager.m @@ -0,0 +1,54 @@ +// +// SharedManager.m +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/13/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "SharedManager.h" + +@implementation SharedManager + ++ (SharedManager *)sharedModel { + static SharedManager *sharedMyManager = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedMyManager = [[self alloc] init]; + [sharedMyManager initializeData]; + }); + return sharedMyManager; + +} + +//+ (SharedManager *)sharedInstance +//{ +// static dispatch_once_t predicate = 0; +// __strong static id sharedObject = nil; +// //static id sharedObject = nil; //if you're not using ARC +// dispatch_once(&predicate, ^{ +// sharedObject = [[self alloc] init]; +// +// [SharedManager in +// //sharedObject = [[[self alloc] init] retain]; // if you're not using ARC +// }); +// return sharedObject; +//} + + + +-(void)initializeData{ + + self.habitListData = [[HabitList alloc] init]; + + self.habitArray = @[@"Smoking", + @"Biting your nails", + @"Cocaine Addiction", + @"Biting your lips", + @"Eating unhealthy", + @"Excessive Drinking", + @"Facebook"].mutableCopy; + +} + +@end diff --git a/BreakingBad/BreakingBad/ViewController.m b/BreakingBad/BreakingBad/ViewController.m index 0163f83..cc9de47 100644 --- a/BreakingBad/BreakingBad/ViewController.m +++ b/BreakingBad/BreakingBad/ViewController.m @@ -15,6 +15,7 @@ #import "Step.h" #import "HabitList.h" #import "QuestionDetailVC.h" +#import "SharedManager.h" @@ -35,15 +36,15 @@ @implementation ViewController - (IBAction)questionButtonTapped:(UIButton *)sender { QuestionDetailVC *qvc = (QuestionDetailVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"showQDetailSegue"]; qvc.question = sender.titleLabel.text; - qvc.delegate = self; - qvc.tag = sender.tag; + qvc.delegate = self; + qvc.tag = sender.tag; [self presentViewController:qvc animated:YES completion:nil]; } - (IBAction)habitDoneButtonTapped:(UIButton *)sender { - [self.habitsArray addObject:self.createNewHabit.text]; + [self.habitsArray addObject:self.createNewHabit.text]; [self.habitsPickerView reloadAllComponents]; } @@ -51,12 +52,18 @@ - (IBAction)habitDoneButtonTapped:(UIButton *)sender { - (void)finishedAnswering:(QuestionDetailVC *)qvc withAnswer:(NSString *)answer { + if(! [SharedManager sharedModel].answersLabel) + { + [SharedManager sharedModel].answersLabel = [NSMutableArray new]; + } for (int i = 0; i < self.answer.count; i++) { UIButton *currentButton = (UIButton *)self.question[i]; if (qvc.tag == currentButton.tag) { UILabel *currentLabel = (UILabel *)self.answer[i]; - currentLabel.text = answer; + currentLabel.text = answer; + + [[SharedManager sharedModel].answersLabel addObject:currentLabel]; } } @@ -71,63 +78,63 @@ - (void)viewDidLoad { self.habitsArray = hl.habitsList; -// BBUser *user = (BBUser *)[PFUser object]; -// -// user.email = @"ab1c@gmail.com"; -// user.password = @"mesfinnotcool"; -// user.username = @"nc3j"; -// -// -// Habit *habit = [Habit new]; -// habit.name = @"Smoking"; -// -// Entry *entry = [Entry new]; -// entry.entryLog = @"Bitting nails"; -// -// -// Step *step1 = [Step new]; -// step1.stepDescription = @"1. No pack for a whole day"; -// step1.completed = 1; -// -// Step *step2 = [Step new]; -// step2.stepDescription = @"1. No pack for a whole week"; -// step2.completed = 0; -// -// Goal *goal = [Goal new]; -// goal.name = @"Quit Smoking"; -// goal.steps = [NSMutableArray new]; -// -// [goal.steps addObject:step1]; -// [goal.steps addObject:step2]; -// -// -// habit.entries = [NSMutableArray new]; -// habit.goals = [NSMutableArray new]; -// habit.name = @"Zouf says we need to talk, ...whatever"; -// -// [habit.entries addObject:entry]; -// [habit.goals addObject:goal]; -// -// -// if([user objectForKey:@"habits"]==nil){ -// user.habits = [NSMutableArray new]; -// [user.habits addObject:habit]; -// } -// -// [user signUpInBackground]; -// [user saveInBackground]; -// -// -// PFQuery *query = [PFQuery queryWithClassName:@"_User"]; -// [query findObjectsInBackgroundWithBlock:^(NSArray * _Nullable objects, NSError * _Nullable error) { -// ; -// NSLog(@"%@",objects); -// }]; -// -// BBUser *currentUser = (BBUser *)[PFUser currentUser]; -// [currentUser objectForKey:@"habits"]; -// [currentUser fetchIfNeeded]; -// NSLog(@"%@",currentUser.habits); + // BBUser *user = (BBUser *)[PFUser object]; + // + // user.email = @"ab1c@gmail.com"; + // user.password = @"mesfinnotcool"; + // user.username = @"nc3j"; + // + // + // Habit *habit = [Habit new]; + // habit.name = @"Smoking"; + // + // Entry *entry = [Entry new]; + // entry.entryLog = @"Bitting nails"; + // + // + // Step *step1 = [Step new]; + // step1.stepDescription = @"1. No pack for a whole day"; + // step1.completed = 1; + // + // Step *step2 = [Step new]; + // step2.stepDescription = @"1. No pack for a whole week"; + // step2.completed = 0; + // + // Goal *goal = [Goal new]; + // goal.name = @"Quit Smoking"; + // goal.steps = [NSMutableArray new]; + // + // [goal.steps addObject:step1]; + // [goal.steps addObject:step2]; + // + // + // habit.entries = [NSMutableArray new]; + // habit.goals = [NSMutableArray new]; + // habit.name = @"Zouf says we need to talk, ...whatever"; + // + // [habit.entries addObject:entry]; + // [habit.goals addObject:goal]; + // + // + // if([user objectForKey:@"habits"]==nil){ + // user.habits = [NSMutableArray new]; + // [user.habits addObject:habit]; + // } + // + // [user signUpInBackground]; + // [user saveInBackground]; + // + // + // PFQuery *query = [PFQuery queryWithClassName:@"_User"]; + // [query findObjectsInBackgroundWithBlock:^(NSArray * _Nullable objects, NSError * _Nullable error) { + // ; + // NSLog(@"%@",objects); + // }]; + // + // BBUser *currentUser = (BBUser *)[PFUser currentUser]; + // [currentUser objectForKey:@"habits"]; + // [currentUser fetchIfNeeded]; + // NSLog(@"%@",currentUser.habits); } @@ -146,10 +153,13 @@ - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSIn } - (nullable NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ - + return self.habitsArray[row]; } +- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ + [SharedManager sharedModel].selectedRow = row; +} From 75785c620ca4edfc87f2aa8a4f40b8e88e444680 Mon Sep 17 00:00:00 2001 From: Mesfin Date: Wed, 14 Oct 2015 15:56:32 -0400 Subject: [PATCH 20/44] Added functional menu --- .../BreakingBad.xcodeproj/project.pbxproj | 16 + .../BreakingBad/Assets.xcassets/Contents.json | 6 + .../cancel.imageset/Contents.json | 21 + .../cancel.imageset/Delete-50.png | Bin 0 -> 450 bytes .../check_progress.imageset/Contents.json | 21 + .../Positive Dynamic-50.png | Bin 0 -> 414 bytes .../goals.imageset/Contents.json | 21 + .../goals.imageset/Todo List-50.png | Bin 0 -> 424 bytes .../info.imageset/Contents.json | 21 + .../info.imageset/Info Squared-50.png | Bin 0 -> 314 bytes .../menu.imageset/Contents.json | 21 + .../Assets.xcassets/menu.imageset/Menu-50.png | Bin 0 -> 219 bytes .../my_habits.imageset/Contents.json | 21 + .../my_habits.imageset/Meditation Guru-50.png | Bin 0 -> 1195 bytes .../BreakingBad/Base.lproj/Main.storyboard | 34 + .../BreakingBad/CheckProgressViewController.h | 13 + .../BreakingBad/CheckProgressViewController.m | 37 + .../BreakingBad/CustomContextTableViewCell.h | 17 + .../BreakingBad/CustomContextTableViewCell.m | 37 + .../CustomContextTableViewCell.xib | 62 + BreakingBad/BreakingBad/MainPageVC.m | 119 +- BreakingBad/Podfile | 2 + BreakingBad/Podfile.lock | 26 + .../AFNetworking/AFHTTPRequestOperation.h | 70 + .../AFNetworking/AFHTTPRequestOperation.m | 206 + .../AFHTTPRequestOperationManager.h | 326 ++ .../AFHTTPRequestOperationManager.m | 284 ++ .../AFNetworking/AFHTTPSessionManager.h | 253 ++ .../AFNetworking/AFHTTPSessionManager.m | 323 ++ .../AFNetworkReachabilityManager.h | 207 + .../AFNetworkReachabilityManager.m | 262 ++ .../AFNetworking/AFNetworking/AFNetworking.h | 46 + .../AFNetworking/AFSecurityPolicy.h | 142 + .../AFNetworking/AFSecurityPolicy.m | 311 ++ .../AFNetworking/AFURLConnectionOperation.h | 344 ++ .../AFNetworking/AFURLConnectionOperation.m | 792 ++++ .../AFNetworking/AFURLRequestSerialization.h | 473 ++ .../AFNetworking/AFURLRequestSerialization.m | 1425 ++++++ .../AFNetworking/AFURLResponseSerialization.h | 311 ++ .../AFNetworking/AFURLResponseSerialization.m | 825 ++++ .../AFNetworking/AFURLSessionManager.h | 554 +++ .../AFNetworking/AFURLSessionManager.m | 1171 +++++ BreakingBad/Pods/AFNetworking/LICENSE | 19 + BreakingBad/Pods/AFNetworking/README.md | 394 ++ .../AFNetworkActivityIndicatorManager.h | 80 + .../AFNetworkActivityIndicatorManager.m | 170 + .../UIActivityIndicatorView+AFNetworking.h | 63 + .../UIActivityIndicatorView+AFNetworking.m | 171 + .../UIAlertView+AFNetworking.h | 99 + .../UIAlertView+AFNetworking.m | 141 + .../UIButton+AFNetworking.h | 186 + .../UIButton+AFNetworking.m | 293 ++ .../UIKit+AFNetworking/UIImage+AFNetworking.h | 35 + .../UIImageView+AFNetworking.h | 146 + .../UIImageView+AFNetworking.m | 215 + .../UIKit+AFNetworking/UIKit+AFNetworking.h | 39 + .../UIProgressView+AFNetworking.h | 91 + .../UIProgressView+AFNetworking.m | 182 + .../UIRefreshControl+AFNetworking.h | 68 + .../UIRefreshControl+AFNetworking.m | 166 + .../UIWebView+AFNetworking.h | 86 + .../UIWebView+AFNetworking.m | 159 + BreakingBad/Pods/ContextMenu.iOS/LICENSE | 202 + BreakingBad/Pods/ContextMenu.iOS/README.md | 110 + .../YALContextMenu/UIView+YALConstraints.h | 15 + .../YALContextMenu/UIView+YALConstraints.m | 53 + .../YALContextMenu/YALContextMenuCell.h | 20 + .../YALContextMenu/YALContextMenuTableView.h | 73 + .../YALContextMenu/YALContextMenuTableView.m | 360 ++ .../AFNetworking/AFHTTPRequestOperation.h | 1 + .../AFHTTPRequestOperationManager.h | 1 + .../AFNetworking/AFHTTPSessionManager.h | 1 + .../AFNetworkActivityIndicatorManager.h | 1 + .../AFNetworkReachabilityManager.h | 1 + .../Private/AFNetworking/AFNetworking.h | 1 + .../Private/AFNetworking/AFSecurityPolicy.h | 1 + .../AFNetworking/AFURLConnectionOperation.h | 1 + .../AFNetworking/AFURLRequestSerialization.h | 1 + .../AFNetworking/AFURLResponseSerialization.h | 1 + .../AFNetworking/AFURLSessionManager.h | 1 + .../UIActivityIndicatorView+AFNetworking.h | 1 + .../AFNetworking/UIAlertView+AFNetworking.h | 1 + .../AFNetworking/UIButton+AFNetworking.h | 1 + .../AFNetworking/UIImage+AFNetworking.h | 1 + .../AFNetworking/UIImageView+AFNetworking.h | 1 + .../Private/AFNetworking/UIKit+AFNetworking.h | 1 + .../UIProgressView+AFNetworking.h | 1 + .../UIRefreshControl+AFNetworking.h | 1 + .../AFNetworking/UIWebView+AFNetworking.h | 1 + .../ContextMenu.iOS/UIView+YALConstraints.h | 1 + .../ContextMenu.iOS/YALContextMenuCell.h | 1 + .../ContextMenu.iOS/YALContextMenuTableView.h | 1 + .../AFNetworking/AFHTTPRequestOperation.h | 1 + .../AFHTTPRequestOperationManager.h | 1 + .../AFNetworking/AFHTTPSessionManager.h | 1 + .../AFNetworkActivityIndicatorManager.h | 1 + .../AFNetworkReachabilityManager.h | 1 + .../Public/AFNetworking/AFNetworking.h | 1 + .../Public/AFNetworking/AFSecurityPolicy.h | 1 + .../AFNetworking/AFURLConnectionOperation.h | 1 + .../AFNetworking/AFURLRequestSerialization.h | 1 + .../AFNetworking/AFURLResponseSerialization.h | 1 + .../Public/AFNetworking/AFURLSessionManager.h | 1 + .../UIActivityIndicatorView+AFNetworking.h | 1 + .../AFNetworking/UIAlertView+AFNetworking.h | 1 + .../AFNetworking/UIButton+AFNetworking.h | 1 + .../AFNetworking/UIImage+AFNetworking.h | 1 + .../AFNetworking/UIImageView+AFNetworking.h | 1 + .../Public/AFNetworking/UIKit+AFNetworking.h | 1 + .../UIProgressView+AFNetworking.h | 1 + .../UIRefreshControl+AFNetworking.h | 1 + .../AFNetworking/UIWebView+AFNetworking.h | 1 + .../ContextMenu.iOS/UIView+YALConstraints.h | 1 + .../ContextMenu.iOS/YALContextMenuCell.h | 1 + .../ContextMenu.iOS/YALContextMenuTableView.h | 1 + BreakingBad/Pods/Manifest.lock | 26 + .../Pods/Pods.xcodeproj/project.pbxproj | 3812 ++++++++++------- .../AFNetworking-Private.xcconfig | 6 + .../AFNetworking/AFNetworking-dummy.m | 5 + .../AFNetworking/AFNetworking-prefix.pch | 11 + .../AFNetworking/AFNetworking.xcconfig | 1 + .../Bolts/Bolts-Private.xcconfig | 2 +- .../ContextMenu.iOS-Private.xcconfig | 6 + .../ContextMenu.iOS/ContextMenu.iOS-dummy.m | 5 + .../ContextMenu.iOS-prefix.pch | 4 + .../ContextMenu.iOS/ContextMenu.iOS.xcconfig | 1 + .../Parse/Parse-Private.xcconfig | 2 +- .../Pods/Pods-acknowledgements.markdown | 229 + .../Pods/Pods-acknowledgements.plist | 237 + .../Pods/Pods.debug.xcconfig | 6 +- .../Pods/Pods.release.xcconfig | 6 +- .../pop/pop-Private.xcconfig | 2 +- 132 files changed, 15188 insertions(+), 1675 deletions(-) create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/Contents.json create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/cancel.imageset/Contents.json create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/cancel.imageset/Delete-50.png create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/check_progress.imageset/Contents.json create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/check_progress.imageset/Positive Dynamic-50.png create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/goals.imageset/Contents.json create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/goals.imageset/Todo List-50.png create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/info.imageset/Contents.json create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/info.imageset/Info Squared-50.png create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/menu.imageset/Contents.json create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/menu.imageset/Menu-50.png create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/my_habits.imageset/Contents.json create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/my_habits.imageset/Meditation Guru-50.png create mode 100644 BreakingBad/BreakingBad/CheckProgressViewController.h create mode 100644 BreakingBad/BreakingBad/CheckProgressViewController.m create mode 100644 BreakingBad/BreakingBad/CustomContextTableViewCell.h create mode 100644 BreakingBad/BreakingBad/CustomContextTableViewCell.m create mode 100644 BreakingBad/BreakingBad/CustomContextTableViewCell.xib create mode 100644 BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.h create mode 100644 BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m create mode 100644 BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h create mode 100644 BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.m create mode 100644 BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h create mode 100644 BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m create mode 100644 BreakingBad/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h create mode 100644 BreakingBad/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m create mode 100644 BreakingBad/Pods/AFNetworking/AFNetworking/AFNetworking.h create mode 100644 BreakingBad/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h create mode 100644 BreakingBad/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m create mode 100644 BreakingBad/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h create mode 100644 BreakingBad/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.m create mode 100644 BreakingBad/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h create mode 100644 BreakingBad/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m create mode 100644 BreakingBad/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h create mode 100644 BreakingBad/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m create mode 100644 BreakingBad/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h create mode 100644 BreakingBad/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m create mode 100644 BreakingBad/Pods/AFNetworking/LICENSE create mode 100644 BreakingBad/Pods/AFNetworking/README.md create mode 100644 BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h create mode 100644 BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m create mode 100644 BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h create mode 100644 BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m create mode 100644 BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h create mode 100644 BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m create mode 100644 BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h create mode 100644 BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m create mode 100644 BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIImage+AFNetworking.h create mode 100644 BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h create mode 100644 BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m create mode 100644 BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h create mode 100644 BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h create mode 100644 BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m create mode 100644 BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h create mode 100644 BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m create mode 100644 BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h create mode 100644 BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m create mode 100644 BreakingBad/Pods/ContextMenu.iOS/LICENSE create mode 100644 BreakingBad/Pods/ContextMenu.iOS/README.md create mode 100644 BreakingBad/Pods/ContextMenu.iOS/YALContextMenu/UIView+YALConstraints.h create mode 100644 BreakingBad/Pods/ContextMenu.iOS/YALContextMenu/UIView+YALConstraints.m create mode 100644 BreakingBad/Pods/ContextMenu.iOS/YALContextMenu/YALContextMenuCell.h create mode 100644 BreakingBad/Pods/ContextMenu.iOS/YALContextMenu/YALContextMenuTableView.h create mode 100644 BreakingBad/Pods/ContextMenu.iOS/YALContextMenu/YALContextMenuTableView.m create mode 120000 BreakingBad/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperation.h create mode 120000 BreakingBad/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperationManager.h create mode 120000 BreakingBad/Pods/Headers/Private/AFNetworking/AFHTTPSessionManager.h create mode 120000 BreakingBad/Pods/Headers/Private/AFNetworking/AFNetworkActivityIndicatorManager.h create mode 120000 BreakingBad/Pods/Headers/Private/AFNetworking/AFNetworkReachabilityManager.h create mode 120000 BreakingBad/Pods/Headers/Private/AFNetworking/AFNetworking.h create mode 120000 BreakingBad/Pods/Headers/Private/AFNetworking/AFSecurityPolicy.h create mode 120000 BreakingBad/Pods/Headers/Private/AFNetworking/AFURLConnectionOperation.h create mode 120000 BreakingBad/Pods/Headers/Private/AFNetworking/AFURLRequestSerialization.h create mode 120000 BreakingBad/Pods/Headers/Private/AFNetworking/AFURLResponseSerialization.h create mode 120000 BreakingBad/Pods/Headers/Private/AFNetworking/AFURLSessionManager.h create mode 120000 BreakingBad/Pods/Headers/Private/AFNetworking/UIActivityIndicatorView+AFNetworking.h create mode 120000 BreakingBad/Pods/Headers/Private/AFNetworking/UIAlertView+AFNetworking.h create mode 120000 BreakingBad/Pods/Headers/Private/AFNetworking/UIButton+AFNetworking.h create mode 120000 BreakingBad/Pods/Headers/Private/AFNetworking/UIImage+AFNetworking.h create mode 120000 BreakingBad/Pods/Headers/Private/AFNetworking/UIImageView+AFNetworking.h create mode 120000 BreakingBad/Pods/Headers/Private/AFNetworking/UIKit+AFNetworking.h create mode 120000 BreakingBad/Pods/Headers/Private/AFNetworking/UIProgressView+AFNetworking.h create mode 120000 BreakingBad/Pods/Headers/Private/AFNetworking/UIRefreshControl+AFNetworking.h create mode 120000 BreakingBad/Pods/Headers/Private/AFNetworking/UIWebView+AFNetworking.h create mode 120000 BreakingBad/Pods/Headers/Private/ContextMenu.iOS/UIView+YALConstraints.h create mode 120000 BreakingBad/Pods/Headers/Private/ContextMenu.iOS/YALContextMenuCell.h create mode 120000 BreakingBad/Pods/Headers/Private/ContextMenu.iOS/YALContextMenuTableView.h create mode 120000 BreakingBad/Pods/Headers/Public/AFNetworking/AFHTTPRequestOperation.h create mode 120000 BreakingBad/Pods/Headers/Public/AFNetworking/AFHTTPRequestOperationManager.h create mode 120000 BreakingBad/Pods/Headers/Public/AFNetworking/AFHTTPSessionManager.h create mode 120000 BreakingBad/Pods/Headers/Public/AFNetworking/AFNetworkActivityIndicatorManager.h create mode 120000 BreakingBad/Pods/Headers/Public/AFNetworking/AFNetworkReachabilityManager.h create mode 120000 BreakingBad/Pods/Headers/Public/AFNetworking/AFNetworking.h create mode 120000 BreakingBad/Pods/Headers/Public/AFNetworking/AFSecurityPolicy.h create mode 120000 BreakingBad/Pods/Headers/Public/AFNetworking/AFURLConnectionOperation.h create mode 120000 BreakingBad/Pods/Headers/Public/AFNetworking/AFURLRequestSerialization.h create mode 120000 BreakingBad/Pods/Headers/Public/AFNetworking/AFURLResponseSerialization.h create mode 120000 BreakingBad/Pods/Headers/Public/AFNetworking/AFURLSessionManager.h create mode 120000 BreakingBad/Pods/Headers/Public/AFNetworking/UIActivityIndicatorView+AFNetworking.h create mode 120000 BreakingBad/Pods/Headers/Public/AFNetworking/UIAlertView+AFNetworking.h create mode 120000 BreakingBad/Pods/Headers/Public/AFNetworking/UIButton+AFNetworking.h create mode 120000 BreakingBad/Pods/Headers/Public/AFNetworking/UIImage+AFNetworking.h create mode 120000 BreakingBad/Pods/Headers/Public/AFNetworking/UIImageView+AFNetworking.h create mode 120000 BreakingBad/Pods/Headers/Public/AFNetworking/UIKit+AFNetworking.h create mode 120000 BreakingBad/Pods/Headers/Public/AFNetworking/UIProgressView+AFNetworking.h create mode 120000 BreakingBad/Pods/Headers/Public/AFNetworking/UIRefreshControl+AFNetworking.h create mode 120000 BreakingBad/Pods/Headers/Public/AFNetworking/UIWebView+AFNetworking.h create mode 120000 BreakingBad/Pods/Headers/Public/ContextMenu.iOS/UIView+YALConstraints.h create mode 120000 BreakingBad/Pods/Headers/Public/ContextMenu.iOS/YALContextMenuCell.h create mode 120000 BreakingBad/Pods/Headers/Public/ContextMenu.iOS/YALContextMenuTableView.h create mode 100644 BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-Private.xcconfig create mode 100644 BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-dummy.m create mode 100644 BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch create mode 100644 BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig create mode 100644 BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-Private.xcconfig create mode 100644 BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-dummy.m create mode 100644 BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-prefix.pch create mode 100644 BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS.xcconfig diff --git a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj index 0d0a542..7fa7ec7 100644 --- a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj +++ b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj @@ -21,6 +21,7 @@ 5FEAE2641BCB055A00201A0E /* CustomModalViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE2631BCB055A00201A0E /* CustomModalViewController.m */; }; 5FEAE26E1BCB125A00201A0E /* PresentingAnimationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE26D1BCB125A00201A0E /* PresentingAnimationController.m */; }; 5FEAE2711BCB126700201A0E /* DismissingAnimationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE2701BCB126700201A0E /* DismissingAnimationController.m */; }; + DC22D49F1BCEE95A00D1E214 /* CheckProgressViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DC22D49E1BCEE95A00D1E214 /* CheckProgressViewController.m */; settings = {ASSET_TAGS = (); }; }; DC2DC1881BCAC00500A627E2 /* Habit.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC1871BCAC00500A627E2 /* Habit.m */; settings = {ASSET_TAGS = (); }; }; DC2DC18B1BCAC08700A627E2 /* Goal.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC18A1BCAC08700A627E2 /* Goal.m */; settings = {ASSET_TAGS = (); }; }; DC2DC18E1BCAC0A700A627E2 /* Entry.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC18D1BCAC0A700A627E2 /* Entry.m */; settings = {ASSET_TAGS = (); }; }; @@ -28,6 +29,8 @@ DC2DC1941BCAEB8D00A627E2 /* BBUser.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC1931BCAEB8D00A627E2 /* BBUser.m */; settings = {ASSET_TAGS = (); }; }; DC51A76B1BCC4CD60044984B /* HabitList.m in Sources */ = {isa = PBXBuildFile; fileRef = DC51A76A1BCC4CD60044984B /* HabitList.m */; settings = {ASSET_TAGS = (); }; }; DCBA27C21BCDE85800E61721 /* SharedManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DCBA27C11BCDE85800E61721 /* SharedManager.m */; settings = {ASSET_TAGS = (); }; }; + DCBA27C61BCED16E00E61721 /* CustomContextTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = DCBA27C41BCED16E00E61721 /* CustomContextTableViewCell.m */; settings = {ASSET_TAGS = (); }; }; + DCBA27C71BCED16E00E61721 /* CustomContextTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = DCBA27C51BCED16E00E61721 /* CustomContextTableViewCell.xib */; settings = {ASSET_TAGS = (); }; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -57,6 +60,8 @@ 5FEAE26F1BCB126200201A0E /* DismissingAnimationController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DismissingAnimationController.h; sourceTree = ""; }; 5FEAE2701BCB126700201A0E /* DismissingAnimationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DismissingAnimationController.m; sourceTree = ""; }; B57E170B6FA09C54334C0536 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; + DC22D49D1BCEE95A00D1E214 /* CheckProgressViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CheckProgressViewController.h; sourceTree = ""; }; + DC22D49E1BCEE95A00D1E214 /* CheckProgressViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CheckProgressViewController.m; sourceTree = ""; }; DC2DC1861BCAC00500A627E2 /* Habit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Habit.h; sourceTree = ""; }; DC2DC1871BCAC00500A627E2 /* Habit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Habit.m; sourceTree = ""; }; DC2DC1891BCAC08700A627E2 /* Goal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Goal.h; sourceTree = ""; }; @@ -71,6 +76,9 @@ DC51A76A1BCC4CD60044984B /* HabitList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HabitList.m; sourceTree = ""; }; DCBA27C01BCDE85800E61721 /* SharedManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SharedManager.h; sourceTree = ""; }; DCBA27C11BCDE85800E61721 /* SharedManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SharedManager.m; sourceTree = ""; }; + DCBA27C31BCED16E00E61721 /* CustomContextTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomContextTableViewCell.h; sourceTree = ""; }; + DCBA27C41BCED16E00E61721 /* CustomContextTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomContextTableViewCell.m; sourceTree = ""; }; + DCBA27C51BCED16E00E61721 /* CustomContextTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CustomContextTableViewCell.xib; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -114,8 +122,13 @@ 5F8FF99E1BC9A9CD00855DFB /* ViewController.m */, 5F9B082D1BCC9ECC00460FF2 /* QuestionDetailVC.h */, 5F9B082E1BCC9ECC00460FF2 /* QuestionDetailVC.m */, + DC22D49D1BCEE95A00D1E214 /* CheckProgressViewController.h */, + DC22D49E1BCEE95A00D1E214 /* CheckProgressViewController.m */, 5F9B08301BCDAD1500460FF2 /* MainPageVC.h */, 5F9B08311BCDAD1500460FF2 /* MainPageVC.m */, + DCBA27C31BCED16E00E61721 /* CustomContextTableViewCell.h */, + DCBA27C41BCED16E00E61721 /* CustomContextTableViewCell.m */, + DCBA27C51BCED16E00E61721 /* CustomContextTableViewCell.xib */, DCBA27C01BCDE85800E61721 /* SharedManager.h */, DCBA27C11BCDE85800E61721 /* SharedManager.m */, DC51A7651BCC1D4A0044984B /* BBModel */, @@ -249,6 +262,7 @@ files = ( 5F8FF9AA1BC9A9CD00855DFB /* LaunchScreen.storyboard in Resources */, 5F8FF9A71BC9A9CD00855DFB /* Assets.xcassets in Resources */, + DCBA27C71BCED16E00E61721 /* CustomContextTableViewCell.xib in Resources */, 5F8FF9A21BC9A9CD00855DFB /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -302,7 +316,9 @@ 5FEAE26E1BCB125A00201A0E /* PresentingAnimationController.m in Sources */, 5F8FF99F1BC9A9CD00855DFB /* ViewController.m in Sources */, 5F9B082F1BCC9ECD00460FF2 /* QuestionDetailVC.m in Sources */, + DC22D49F1BCEE95A00D1E214 /* CheckProgressViewController.m in Sources */, DC2DC18E1BCAC0A700A627E2 /* Entry.m in Sources */, + DCBA27C61BCED16E00E61721 /* CustomContextTableViewCell.m in Sources */, 5F8FF99C1BC9A9CD00855DFB /* AppDelegate.m in Sources */, DCBA27C21BCDE85800E61721 /* SharedManager.m in Sources */, 5F8FF9A51BC9A9CD00855DFB /* BreakingBad.xcdatamodeld in Sources */, diff --git a/BreakingBad/BreakingBad/Assets.xcassets/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/BreakingBad/BreakingBad/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/BreakingBad/BreakingBad/Assets.xcassets/cancel.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/cancel.imageset/Contents.json new file mode 100644 index 0000000..44cb34c --- /dev/null +++ b/BreakingBad/BreakingBad/Assets.xcassets/cancel.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Delete-50.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/BreakingBad/BreakingBad/Assets.xcassets/cancel.imageset/Delete-50.png b/BreakingBad/BreakingBad/Assets.xcassets/cancel.imageset/Delete-50.png new file mode 100644 index 0000000000000000000000000000000000000000..831a56b63cd23243f961e4f0bc5f4409f1824fba GIT binary patch literal 450 zcmV;z0X_bSP)`-GrAq#c5<5Si?f7&DJjiu; z5C?Y1y+v}5$bXB-3BWgi%is@x0&oWKvGyHXQ_B#a0Db_x4#XJZ3&8OY^1g)Gf>;9< zjpu=wIpP<<%i4gp7W+ty8(|S@LF}0km=MAX>5T~^B9LB~6e0>yW73EWM1?6KvJf_= zjHp0Z7z&~asbXjd1|*B2B3O_phK^uDych|B4QXLy2nA#fWA~?{_~t1#oA-DQjhVJ@ z51Q77siJH@`E8m$lQ)FGfKI-l6Al>2+LSa! zOp#0xkfhcPz>esTWPRe&zr!Sk?f|w#Ym)VeOY1@A3~d0M033n=&4GjvR{(nt(-g=Q z;t1d&0C|aW3ZFw=8?hL~6Ts*cXZ>m*a}X{-8W1Y{j}7Xisp|hAngLmYXaa-+v3d|H zgaf(wTnx{YrJ}^$SE4<_fmm{Q?tgZW5)hJfWGPY#A}dHqh-@IGA+mtffJhFafl&2I zg0^OMvuhy2h;qyC*d`?_zh{3ba`y?>in}hB^Qjz3smOR5OCZ!ao)Ux;{n*&mC}JQ! z0;WicKuB+hwnu^pOjA*nnq4YVwZ%wzj&uh?O}C^uoVZQe!RWyvgs{CnFLp$F< zA`z^rs3~HKe48z+TCujj>pjA~@=l*~s?3imQpJ&=c!=!30eN)MGyMs}WdHyG07*qo IM6N<$f=VW`mH+?% literal 0 HcmV?d00001 diff --git a/BreakingBad/BreakingBad/Assets.xcassets/goals.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/goals.imageset/Contents.json new file mode 100644 index 0000000..78e7a69 --- /dev/null +++ b/BreakingBad/BreakingBad/Assets.xcassets/goals.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Todo List-50.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/BreakingBad/BreakingBad/Assets.xcassets/goals.imageset/Todo List-50.png b/BreakingBad/BreakingBad/Assets.xcassets/goals.imageset/Todo List-50.png new file mode 100644 index 0000000000000000000000000000000000000000..8d7e684fe35ab85d2e6ea3b4d71b35c80676bfa4 GIT binary patch literal 424 zcmV;Z0ayNsP)r`S^wY< zNxSzU>EeQcJjFn8pg?j{@~#yb0W)BilPV#KyaLa_8hFVCj4zNCumOIID#u#{B6ixF z#^<+cE!h_*Kz_5bROyH&YYFpWneU2i4!{KXGL~v{)Newo{pr09v2DHT{Nj7iXsJ)Y9}DhxhhXZHlDsC%E2S1JU#w>>G!PzSh$8>p*I+A+CyO z`t3z?_he1KntmhN%lh#_zx}3Qzo~}n@%vx>IoDMn&Qv8DsEQ;a+PTbN6uAHnWMDIv Shcj*f0000IbOSeV1vk-Y*LUwbuiqVwjII$K zG%Mr^%qLQ%6R>i*_A7FqhzKwLkdWGubA~_jl#r1TR7FNEfOmLRL>0;8KykEoz}AY{ z17OpPkqxl6*&cyIZ05an#f3C; z){>Af2nwy(9u-JjybdgM=fL@ys|YxW=SaDvN=KaWU= z(8_cj5n8Fx%H?G0xWVu27hsY4Xqn=jfu)OG`yUR2J&=&WRu$Uu0XGwZGh*79e*gdg M07*qoM6N<$g4L9SKmY&$ literal 0 HcmV?d00001 diff --git a/BreakingBad/BreakingBad/Assets.xcassets/menu.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/menu.imageset/Contents.json new file mode 100644 index 0000000..c1a7c64 --- /dev/null +++ b/BreakingBad/BreakingBad/Assets.xcassets/menu.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Menu-50.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/BreakingBad/BreakingBad/Assets.xcassets/menu.imageset/Menu-50.png b/BreakingBad/BreakingBad/Assets.xcassets/menu.imageset/Menu-50.png new file mode 100644 index 0000000000000000000000000000000000000000..4c8b2e76708a7fcc739a3b24057437a8ba99b984 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nETMV>B>AsNnZryt}zU?6aK(%<&H zOm_i^p1}WRmM@uJ+A80do%z_pW432+hKkF9t6Ysox6Yr)zP!6BxLKs|sr$!G#bq;> zxEaM%u6DE7?GvOdxo%IW@|;+;l@ocw?^%8QHTS3dL%Z%tao?0A{|A~Znkc{+uFWEL zJ&R>AH>;@-Q+M|Ao-=#u(%BAH-xQg%OW8N!W28yb#nvV%PM}Rv2VXcH6kpNErn@e4 S`!t|y89ZJ6T-G@yGywo-c2txA literal 0 HcmV?d00001 diff --git a/BreakingBad/BreakingBad/Assets.xcassets/my_habits.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/my_habits.imageset/Contents.json new file mode 100644 index 0000000..63ed5c9 --- /dev/null +++ b/BreakingBad/BreakingBad/Assets.xcassets/my_habits.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Meditation Guru-50.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/BreakingBad/BreakingBad/Assets.xcassets/my_habits.imageset/Meditation Guru-50.png b/BreakingBad/BreakingBad/Assets.xcassets/my_habits.imageset/Meditation Guru-50.png new file mode 100644 index 0000000000000000000000000000000000000000..b13923795bd0468be48353879160197d78e3678a GIT binary patch literal 1195 zcmV;c1XTNpP)GE~za+hv^!*T64h7_e zq{kJ5UrKs18_Xeqe3o>5F_Z{=S^nlTBEGn)8vw=L5^i^qLuwqXB}r-!56|MnV^7wtI{Cce86|L@)*claX2m8Zep7#q!Jn zp$Jk80YuR&g^VtsAON_IR;H}k5y2>ozrR>VF^mP#h4NGqS#H{z3B;9~)Z3GONx`x5 z?*g?K2o!-Xc$X%zT-21fs2$~^i6n|dX>&ul2METa2MhMcl7a9vFLbiD08I1{J(0V- z+*H$5SERNA!4Og?3r`|iYoUCw^}>B?i@it^zK_&h+p7v{D-hR#Eb~xT@H~rVk+fV} z&Uk>x>d-%XYyskEK&3TZ_#s^TwsgXLMtz}4Z0Ue&P;EFWTY$Jv%6ck$*pz}gSp<9c zo)QtfjJGqdK_vz$I$Rc=G3nM+tLX*W5*eb`y+$MA_9CMd1~8kD(QFV7ATwP`tTVk@ zGtKUZxN5g(g@#;PB48WH9(=!+nM|*t>OUG0d%2_)o<{@dA|`;S32VmQ1Qktg0TRUDGMfG zi5R-b+7PZ^ONO*zjX2b`f`-8uUv|N6BzYjfqAo1<+A*rN*LD8Y8xe0Bk8hw8{Koh= zf7p2RQhJ?eaeoPlDDeW6Ddyv)sX)9b4$LRE0-6EAc;*P+$?-&C?ZJR$J}-?Y zau`75Y<%k7g*WVl!${BRZz&lNr^nW0#{-$_080vm8gM&nL3+jPR;5`_G9X!Nf-$c8 z*%;evczIt}tC9inCat5Kt_N*J5ejiLLuNpr4WUJJfPu4kJ}!60!zr@?4qbQ%bEa$_ zC1pTd&7l}z{>LKAkz|@ZTn`Y8kKS23h@K6QY)6Di8URQ$-5)3O9zsYy_@Mv*002ov JPDHLkV1l9t6pH`= literal 0 HcmV?d00001 diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index e886f43..6fd1c30 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -694,6 +694,17 @@ + @@ -705,10 +716,12 @@ + + @@ -986,5 +999,26 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/BreakingBad/BreakingBad/CheckProgressViewController.h b/BreakingBad/BreakingBad/CheckProgressViewController.h new file mode 100644 index 0000000..04ce324 --- /dev/null +++ b/BreakingBad/BreakingBad/CheckProgressViewController.h @@ -0,0 +1,13 @@ +// +// CheckProgressViewController.h +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/14/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import + +@interface CheckProgressViewController : UIViewController + +@end diff --git a/BreakingBad/BreakingBad/CheckProgressViewController.m b/BreakingBad/BreakingBad/CheckProgressViewController.m new file mode 100644 index 0000000..7d81b25 --- /dev/null +++ b/BreakingBad/BreakingBad/CheckProgressViewController.m @@ -0,0 +1,37 @@ +// +// CheckProgressViewController.m +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/14/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "CheckProgressViewController.h" + +@interface CheckProgressViewController () + +@end + +@implementation CheckProgressViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/BreakingBad/BreakingBad/CustomContextTableViewCell.h b/BreakingBad/BreakingBad/CustomContextTableViewCell.h new file mode 100644 index 0000000..7f26407 --- /dev/null +++ b/BreakingBad/BreakingBad/CustomContextTableViewCell.h @@ -0,0 +1,17 @@ +// +// CustomContextTableViewCell.h +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/14/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import +#import "YALContextMenuCell.h" + +@interface CustomContextTableViewCell : UITableViewCell + +@property (weak, nonatomic) IBOutlet UIImageView *menuTitleImage; +@property (weak, nonatomic) IBOutlet UILabel *menuTitleLabel; + +@end diff --git a/BreakingBad/BreakingBad/CustomContextTableViewCell.m b/BreakingBad/BreakingBad/CustomContextTableViewCell.m new file mode 100644 index 0000000..b82dd27 --- /dev/null +++ b/BreakingBad/BreakingBad/CustomContextTableViewCell.m @@ -0,0 +1,37 @@ +// +// CustomContextTableViewCell.m +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/14/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "CustomContextTableViewCell.h" + +@implementation CustomContextTableViewCell + +- (void)awakeFromNib { + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + self.selectionStyle = UITableViewCellSelectionStyleNone; + self.layer.masksToBounds = YES; + self.layer.shadowOffset = CGSizeMake(0, 2); + self.layer.shadowColor = [[UIColor colorWithRed:181.0/255.0 green:181.0/255.0 blue:181.0/255.0 alpha:1] CGColor]; + self.layer.shadowRadius = 5; + self.layer.shadowOpacity = 0.5; +} + +-(UIView *)animatedContent{ + return self.menuTitleLabel; +} + +-(UIView *)animatedIcon{ + return self.menuTitleImage; +} + + +@end diff --git a/BreakingBad/BreakingBad/CustomContextTableViewCell.xib b/BreakingBad/BreakingBad/CustomContextTableViewCell.xib new file mode 100644 index 0000000..7bbe921 --- /dev/null +++ b/BreakingBad/BreakingBad/CustomContextTableViewCell.xib @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BreakingBad/BreakingBad/MainPageVC.m b/BreakingBad/BreakingBad/MainPageVC.m index 4be2f44..a4a7fea 100644 --- a/BreakingBad/BreakingBad/MainPageVC.m +++ b/BreakingBad/BreakingBad/MainPageVC.m @@ -8,13 +8,26 @@ #import "MainPageVC.h" #import "SharedManager.h" +#import "YALContextMenuTableView.h" +#import "CustomContextTableViewCell.h" +#import "CheckProgressViewController.h" + +@interface MainPageVC () +< +UIPickerViewDataSource, +UIPickerViewDelegate, +UITableViewDataSource, +UITableViewDelegate +> -@interface MainPageVC () @property (weak, nonatomic) IBOutlet UIPickerView *habitPickerView; @property (weak, nonatomic) IBOutlet UITextField *habitTextField; @property (weak, nonatomic) IBOutlet UIButton *doneButton; @property (strong, nonatomic) IBOutletCollection(UILabel) NSArray *reply; +@property (nonatomic) YALContextMenuTableView *contextMenuTableView; +@property (nonatomic) NSArray *menuTitles; +@property (nonatomic) NSArray *menuIcons; @end @@ -23,6 +36,64 @@ @interface MainPageVC () @implementation MainPageVC +#pragma mark +#pragma Context Menu methods +- (IBAction)menuButtonTapped:(UIButton *)sender { + if(!self.contextMenuTableView){ + self.contextMenuTableView = [[YALContextMenuTableView alloc] initWithTableViewDelegateDataSource:self]; + self.contextMenuTableView.animationDuration = 0.15; + self.contextMenuTableView.delegate = self; + + //register nib + + UINib *cellNib = [UINib nibWithNibName:@"CustomContextTableViewCell" bundle:nil]; + [self.contextMenuTableView registerNib:cellNib forCellReuseIdentifier:@"contextMenuCellReuseId"]; + } + // it is better to use this method only for proper animation + [self.contextMenuTableView showInView:self.view withEdgeInsets:UIEdgeInsetsZero animated:YES]; + +} + +- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{ + //should be called after rotation animation completed + [self.contextMenuTableView reloadData]; +} + +- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { + [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; + + [self.contextMenuTableView updateAlongsideRotation]; +} + +- (void)viewWillTransitionToSize:(CGSize)size + withTransitionCoordinator:(id)coordinator { + + [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; + + + [coordinator animateAlongsideTransition:nil completion:^(id context) { + //should be called after rotation animation completed + [self.contextMenuTableView reloadData]; + }]; + [self.contextMenuTableView updateAlongsideRotation]; +} + +- (void)initiateMenuOptions { + self.menuTitles = @[@"", + @"My Habits", + @"Check Progress", + @"Set Goals", + @"Info"]; + + self.menuIcons = @[[UIImage imageNamed:@"cancel"], + [UIImage imageNamed:@"my_habits"], + [UIImage imageNamed:@"check_progress"], + [UIImage imageNamed:@"goals"], + [UIImage imageNamed:@"info"]]; +} + +#pragma mark +#pragma Values from Singleton - (IBAction)doneButtonTapped:(UIButton *)sender { [[SharedManager sharedModel].habitArray addObject:self.habitTextField.text]; @@ -42,10 +113,56 @@ -(void)answersFromPreviousScreen{ } } +#pragma mark - YALContextMenuTableViewDelegate + +- (void)contextMenuTableView:(YALContextMenuTableView *)contextMenuTableView didDismissWithIndexPath:(NSIndexPath *)indexPath{ + NSLog(@"Menu dismissed with indexpath = %@", indexPath); +} + +#pragma mark - UITableViewDataSource, UITableViewDelegate + +- (void)tableView:(YALContextMenuTableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + if(indexPath.row == 2){ + CheckProgressViewController *cp = (CheckProgressViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"checkProgressID"]; + [self presentViewController:cp animated:YES completion:nil]; + } + + [tableView dismisWithIndexPath:indexPath]; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + return 65; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.menuTitles.count; +} + +- (UITableViewCell *)tableView:(YALContextMenuTableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + CustomContextTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"contextMenuCellReuseId" forIndexPath:indexPath]; + + if (cell) { + cell.backgroundColor = [UIColor orangeColor]; + cell.menuTitleLabel.text = [self.menuTitles objectAtIndex:indexPath.row]; + cell.menuTitleImage.image = [self.menuIcons objectAtIndex:indexPath.row]; + cell.menuTitleLabel.backgroundColor = [UIColor clearColor]; + } + + return cell; +} + + + + +#pragma mark +#pragma Life Cycle Methods + - (void)viewDidLoad{ [super viewDidLoad]; self.habitPickerView.delegate = self; [self answersFromPreviousScreen]; + [self initiateMenuOptions]; [self.habitPickerView selectRow:[SharedManager sharedModel].selectedRow inComponent:0 animated:YES]; } diff --git a/BreakingBad/Podfile b/BreakingBad/Podfile index 5437664..7b0c83d 100644 --- a/BreakingBad/Podfile +++ b/BreakingBad/Podfile @@ -3,3 +3,5 @@ pod ‘pop’, ‘~> 1.0’ pod 'Parse' pod "AFNetworking", "~> 2.0" + +pod 'ContextMenu.iOS', '~> 1.0.0' \ No newline at end of file diff --git a/BreakingBad/Podfile.lock b/BreakingBad/Podfile.lock index e523c5a..1ef2cd3 100644 --- a/BreakingBad/Podfile.lock +++ b/BreakingBad/Podfile.lock @@ -1,15 +1,41 @@ PODS: + - AFNetworking (2.6.1): + - AFNetworking/NSURLConnection (= 2.6.1) + - AFNetworking/NSURLSession (= 2.6.1) + - AFNetworking/Reachability (= 2.6.1) + - AFNetworking/Security (= 2.6.1) + - AFNetworking/Serialization (= 2.6.1) + - AFNetworking/UIKit (= 2.6.1) + - AFNetworking/NSURLConnection (2.6.1): + - AFNetworking/Reachability + - AFNetworking/Security + - AFNetworking/Serialization + - AFNetworking/NSURLSession (2.6.1): + - AFNetworking/Reachability + - AFNetworking/Security + - AFNetworking/Serialization + - AFNetworking/Reachability (2.6.1) + - AFNetworking/Security (2.6.1) + - AFNetworking/Serialization (2.6.1) + - AFNetworking/UIKit (2.6.1): + - AFNetworking/NSURLConnection + - AFNetworking/NSURLSession - Bolts/Tasks (1.3.0) + - ContextMenu.iOS (1.0.0) - Parse (1.9.0): - Bolts/Tasks (>= 1.3.0) - pop (1.0.8) DEPENDENCIES: + - AFNetworking (~> 2.0) + - ContextMenu.iOS (~> 1.0.0) - Parse - pop (~> 1.0) SPEC CHECKSUMS: + AFNetworking: 8e4e60500beb8bec644cf575beee72990a76d399 Bolts: 805a4a87413e49d4a0c2b7d469084cbc46b09342 + ContextMenu.iOS: 7da78b3f99e604669b75e55146c6c33147f64f99 Parse: 712efbc476d4f47b0f96b70db7e53101575753aa pop: bb773ae2c791ca2629de13b347e7a8b450fa6a57 diff --git a/BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.h b/BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.h new file mode 100644 index 0000000..cf6def4 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.h @@ -0,0 +1,70 @@ +// AFHTTPRequestOperation.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import +#import "AFURLConnectionOperation.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + `AFHTTPRequestOperation` is a subclass of `AFURLConnectionOperation` for requests using the HTTP or HTTPS protocols. It encapsulates the concept of acceptable status codes and content types, which determine the success or failure of a request. + */ +@interface AFHTTPRequestOperation : AFURLConnectionOperation + +///------------------------------------------------ +/// @name Getting HTTP URL Connection Information +///------------------------------------------------ + +/** + The last HTTP response received by the operation's connection. + */ +@property (readonly, nonatomic, strong, nullable) NSHTTPURLResponse *response; + +/** + Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an AFHTTPResponse serializer, which uses the raw data as its response object. The serializer validates the status code to be in the `2XX` range, denoting success. If the response serializer generates an error in `-responseObjectForResponse:data:error:`, the `failure` callback of the session task or request operation will be executed; otherwise, the `success` callback will be executed. + + @warning `responseSerializer` must not be `nil`. Setting a response serializer will clear out any cached value + */ +@property (nonatomic, strong) AFHTTPResponseSerializer * responseSerializer; + +/** + An object constructed by the `responseSerializer` from the response and response data. Returns `nil` unless the operation `isFinished`, has a `response`, and has `responseData` with non-zero content length. If an error occurs during serialization, `nil` will be returned, and the `error` property will be populated with the serialization error. + */ +@property (readonly, nonatomic, strong, nullable) id responseObject; + +///----------------------------------------------------------- +/// @name Setting Completion Block Success / Failure Callbacks +///----------------------------------------------------------- + +/** + Sets the `completionBlock` property with a block that executes either the specified success or failure block, depending on the state of the request on completion. If `error` returns a value, which can be caused by an unacceptable status code or content type, then `failure` is executed. Otherwise, `success` is executed. + + This method should be overridden in subclasses in order to specify the response object passed into the success block. + + @param success The block to be executed on the completion of a successful request. This block has no return value and takes two arguments: the receiver operation and the object constructed from the response data of the request. + @param failure The block to be executed on the completion of an unsuccessful request. This block has no return value and takes two arguments: the receiver operation and the error that occurred during the request. + */ +- (void)setCompletionBlockWithSuccess:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m b/BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m new file mode 100644 index 0000000..b8deda8 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m @@ -0,0 +1,206 @@ +// AFHTTPRequestOperation.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import "AFHTTPRequestOperation.h" + +static dispatch_queue_t http_request_operation_processing_queue() { + static dispatch_queue_t af_http_request_operation_processing_queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_http_request_operation_processing_queue = dispatch_queue_create("com.alamofire.networking.http-request.processing", DISPATCH_QUEUE_CONCURRENT); + }); + + return af_http_request_operation_processing_queue; +} + +static dispatch_group_t http_request_operation_completion_group() { + static dispatch_group_t af_http_request_operation_completion_group; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_http_request_operation_completion_group = dispatch_group_create(); + }); + + return af_http_request_operation_completion_group; +} + +#pragma mark - + +@interface AFURLConnectionOperation () +@property (readwrite, nonatomic, strong) NSURLRequest *request; +@property (readwrite, nonatomic, strong) NSURLResponse *response; +@end + +@interface AFHTTPRequestOperation () +@property (readwrite, nonatomic, strong) NSHTTPURLResponse *response; +@property (readwrite, nonatomic, strong) id responseObject; +@property (readwrite, nonatomic, strong) NSError *responseSerializationError; +@property (readwrite, nonatomic, strong) NSRecursiveLock *lock; +@end + +@implementation AFHTTPRequestOperation +@dynamic response; +@dynamic lock; + +- (instancetype)initWithRequest:(NSURLRequest *)urlRequest { + self = [super initWithRequest:urlRequest]; + if (!self) { + return nil; + } + + self.responseSerializer = [AFHTTPResponseSerializer serializer]; + + return self; +} + +- (void)setResponseSerializer:(AFHTTPResponseSerializer *)responseSerializer { + NSParameterAssert(responseSerializer); + + [self.lock lock]; + _responseSerializer = responseSerializer; + self.responseObject = nil; + self.responseSerializationError = nil; + [self.lock unlock]; +} + +- (id)responseObject { + [self.lock lock]; + if (!_responseObject && [self isFinished] && !self.error) { + NSError *error = nil; + self.responseObject = [self.responseSerializer responseObjectForResponse:self.response data:self.responseData error:&error]; + if (error) { + self.responseSerializationError = error; + } + } + [self.lock unlock]; + + return _responseObject; +} + +- (NSError *)error { + if (_responseSerializationError) { + return _responseSerializationError; + } else { + return [super error]; + } +} + +#pragma mark - AFHTTPRequestOperation + +- (void)setCompletionBlockWithSuccess:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + // completionBlock is manually nilled out in AFURLConnectionOperation to break the retain cycle. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-retain-cycles" +#pragma clang diagnostic ignored "-Wgnu" + self.completionBlock = ^{ + if (self.completionGroup) { + dispatch_group_enter(self.completionGroup); + } + + dispatch_async(http_request_operation_processing_queue(), ^{ + if (self.error) { + if (failure) { + dispatch_group_async(self.completionGroup ?: http_request_operation_completion_group(), self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(self, self.error); + }); + } + } else { + id responseObject = self.responseObject; + if (self.error) { + if (failure) { + dispatch_group_async(self.completionGroup ?: http_request_operation_completion_group(), self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(self, self.error); + }); + } + } else { + if (success) { + dispatch_group_async(self.completionGroup ?: http_request_operation_completion_group(), self.completionQueue ?: dispatch_get_main_queue(), ^{ + success(self, responseObject); + }); + } + } + } + + if (self.completionGroup) { + dispatch_group_leave(self.completionGroup); + } + }); + }; +#pragma clang diagnostic pop +} + +#pragma mark - AFURLRequestOperation + +- (void)pause { + [super pause]; + + u_int64_t offset = 0; + if ([self.outputStream propertyForKey:NSStreamFileCurrentOffsetKey]) { + offset = [(NSNumber *)[self.outputStream propertyForKey:NSStreamFileCurrentOffsetKey] unsignedLongLongValue]; + } else { + offset = [(NSData *)[self.outputStream propertyForKey:NSStreamDataWrittenToMemoryStreamKey] length]; + } + + NSMutableURLRequest *mutableURLRequest = [self.request mutableCopy]; + if ([self.response respondsToSelector:@selector(allHeaderFields)] && [[self.response allHeaderFields] valueForKey:@"ETag"]) { + [mutableURLRequest setValue:[[self.response allHeaderFields] valueForKey:@"ETag"] forHTTPHeaderField:@"If-Range"]; + } + [mutableURLRequest setValue:[NSString stringWithFormat:@"bytes=%llu-", offset] forHTTPHeaderField:@"Range"]; + self.request = mutableURLRequest; +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.responseSerializer = [decoder decodeObjectOfClass:[AFHTTPResponseSerializer class] forKey:NSStringFromSelector(@selector(responseSerializer))]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:self.responseSerializer forKey:NSStringFromSelector(@selector(responseSerializer))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFHTTPRequestOperation *operation = [super copyWithZone:zone]; + + operation.responseSerializer = [self.responseSerializer copyWithZone:zone]; + operation.completionQueue = self.completionQueue; + operation.completionGroup = self.completionGroup; + + return operation; +} + +@end diff --git a/BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h b/BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h new file mode 100644 index 0000000..d2385ed --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h @@ -0,0 +1,326 @@ +// AFHTTPRequestOperationManager.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import +#import +#import + +#if __IPHONE_OS_VERSION_MIN_REQUIRED +#import +#else +#import +#endif + +#import "AFHTTPRequestOperation.h" +#import "AFURLResponseSerialization.h" +#import "AFURLRequestSerialization.h" +#import "AFSecurityPolicy.h" +#import "AFNetworkReachabilityManager.h" + +#ifndef NS_DESIGNATED_INITIALIZER +#if __has_attribute(objc_designated_initializer) +#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) +#else +#define NS_DESIGNATED_INITIALIZER +#endif +#endif + +NS_ASSUME_NONNULL_BEGIN + +/** + `AFHTTPRequestOperationManager` encapsulates the common patterns of communicating with a web application over HTTP, including request creation, response serialization, network reachability monitoring, and security, as well as request operation management. + + ## Subclassing Notes + + Developers targeting iOS 7 or Mac OS X 10.9 or later that deal extensively with a web service are encouraged to subclass `AFHTTPSessionManager`, providing a class method that returns a shared singleton object on which authentication and other configuration can be shared across the application. + + For developers targeting iOS 6 or Mac OS X 10.8 or earlier, `AFHTTPRequestOperationManager` may be used to similar effect. + + ## Methods to Override + + To change the behavior of all request operation construction for an `AFHTTPRequestOperationManager` subclass, override `HTTPRequestOperationWithRequest:success:failure`. + + ## Serialization + + Requests created by an HTTP client will contain default headers and encode parameters according to the `requestSerializer` property, which is an object conforming to ``. + + Responses received from the server are automatically validated and serialized by the `responseSerializers` property, which is an object conforming to `` + + ## URL Construction Using Relative Paths + + For HTTP convenience methods, the request serializer constructs URLs from the path relative to the `-baseURL`, using `NSURL +URLWithString:relativeToURL:`, when provided. If `baseURL` is `nil`, `path` needs to resolve to a valid `NSURL` object using `NSURL +URLWithString:`. + + Below are a few examples of how `baseURL` and relative paths interact: + + NSURL *baseURL = [NSURL URLWithString:@"http://example.com/v1/"]; + [NSURL URLWithString:@"foo" relativeToURL:baseURL]; // http://example.com/v1/foo + [NSURL URLWithString:@"foo?bar=baz" relativeToURL:baseURL]; // http://example.com/v1/foo?bar=baz + [NSURL URLWithString:@"/foo" relativeToURL:baseURL]; // http://example.com/foo + [NSURL URLWithString:@"foo/" relativeToURL:baseURL]; // http://example.com/v1/foo + [NSURL URLWithString:@"/foo/" relativeToURL:baseURL]; // http://example.com/foo/ + [NSURL URLWithString:@"http://example2.com/" relativeToURL:baseURL]; // http://example2.com/ + + Also important to note is that a trailing slash will be added to any `baseURL` without one. This would otherwise cause unexpected behavior when constructing URLs using paths without a leading slash. + + ## Network Reachability Monitoring + + Network reachability status and change monitoring is available through the `reachabilityManager` property. Applications may choose to monitor network reachability conditions in order to prevent or suspend any outbound requests. See `AFNetworkReachabilityManager` for more details. + + ## NSSecureCoding & NSCopying Caveats + + `AFHTTPRequestOperationManager` conforms to the `NSSecureCoding` and `NSCopying` protocols, allowing operations to be archived to disk, and copied in memory, respectively. There are a few minor caveats to keep in mind, however: + + - Archives and copies of HTTP clients will be initialized with an empty operation queue. + - NSSecureCoding cannot serialize / deserialize block properties, so an archive of an HTTP client will not include any reachability callback block that may be set. + */ +@interface AFHTTPRequestOperationManager : NSObject + +/** + The URL used to monitor reachability, and construct requests from relative paths in methods like `requestWithMethod:URLString:parameters:`, and the `GET` / `POST` / et al. convenience methods. + */ +@property (readonly, nonatomic, strong, nullable) NSURL *baseURL; + +/** + Requests created with `requestWithMethod:URLString:parameters:` & `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:` are constructed with a set of default headers using a parameter serialization specified by this property. By default, this is set to an instance of `AFHTTPRequestSerializer`, which serializes query string parameters for `GET`, `HEAD`, and `DELETE` requests, or otherwise URL-form-encodes HTTP message bodies. + + @warning `requestSerializer` must not be `nil`. + */ +@property (nonatomic, strong) AFHTTPRequestSerializer * requestSerializer; + +/** + Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to a JSON serializer, which serializes data from responses with a `application/json` MIME type, and falls back to the raw data object. The serializer validates the status code to be in the `2XX` range, denoting success. If the response serializer generates an error in `-responseObjectForResponse:data:error:`, the `failure` callback of the session task or request operation will be executed; otherwise, the `success` callback will be executed. + + @warning `responseSerializer` must not be `nil`. + */ +@property (nonatomic, strong) AFHTTPResponseSerializer * responseSerializer; + +/** + The operation queue on which request operations are scheduled and run. + */ +@property (nonatomic, strong) NSOperationQueue *operationQueue; + +///------------------------------- +/// @name Managing URL Credentials +///------------------------------- + +/** + Whether request operations should consult the credential storage for authenticating the connection. `YES` by default. + + @see AFURLConnectionOperation -shouldUseCredentialStorage + */ +@property (nonatomic, assign) BOOL shouldUseCredentialStorage; + +/** + The credential used by request operations for authentication challenges. + + @see AFURLConnectionOperation -credential + */ +@property (nonatomic, strong, nullable) NSURLCredential *credential; + +///------------------------------- +/// @name Managing Security Policy +///------------------------------- + +/** + The security policy used by created request operations to evaluate server trust for secure connections. `AFHTTPRequestOperationManager` uses the `defaultPolicy` unless otherwise specified. + */ +@property (nonatomic, strong) AFSecurityPolicy *securityPolicy; + +///------------------------------------ +/// @name Managing Network Reachability +///------------------------------------ + +/** + The network reachability manager. `AFHTTPRequestOperationManager` uses the `sharedManager` by default. + */ +@property (readwrite, nonatomic, strong) AFNetworkReachabilityManager *reachabilityManager; + +///------------------------------- +/// @name Managing Callback Queues +///------------------------------- + +/** + The dispatch queue for the `completionBlock` of request operations. If `NULL` (default), the main queue is used. + */ +#if OS_OBJECT_HAVE_OBJC_SUPPORT +@property (nonatomic, strong, nullable) dispatch_queue_t completionQueue; +#else +@property (nonatomic, assign, nullable) dispatch_queue_t completionQueue; +#endif + +/** + The dispatch group for the `completionBlock` of request operations. If `NULL` (default), a private dispatch group is used. + */ +#if OS_OBJECT_HAVE_OBJC_SUPPORT +@property (nonatomic, strong, nullable) dispatch_group_t completionGroup; +#else +@property (nonatomic, assign, nullable) dispatch_group_t completionGroup; +#endif + +///--------------------------------------------- +/// @name Creating and Initializing HTTP Clients +///--------------------------------------------- + +/** + Creates and returns an `AFHTTPRequestOperationManager` object. + */ ++ (instancetype)manager; + +/** + Initializes an `AFHTTPRequestOperationManager` object with the specified base URL. + + This is the designated initializer. + + @param url The base URL for the HTTP client. + + @return The newly-initialized HTTP client + */ +- (instancetype)initWithBaseURL:(nullable NSURL *)url NS_DESIGNATED_INITIALIZER; + +///--------------------------------------- +/// @name Managing HTTP Request Operations +///--------------------------------------- + +/** + Creates an `AFHTTPRequestOperation`, and sets the response serializers to that of the HTTP client. + + @param request The request object to be loaded asynchronously during execution of the operation. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the created request operation and the object created from the response data of request. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes two arguments:, the created request operation and the `NSError` object describing the network or parsing error that occurred. + */ +- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)request + success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +///--------------------------- +/// @name Making HTTP Requests +///--------------------------- + +/** + Creates and runs an `AFHTTPRequestOperation` with a `GET` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. + + @see -HTTPRequestOperationWithRequest:success:failure: + */ +- (nullable AFHTTPRequestOperation *)GET:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +/** + Creates and runs an `AFHTTPRequestOperation` with a `HEAD` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes a single arguments: the request operation. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. + + @see -HTTPRequestOperationWithRequest:success:failure: + */ +- (nullable AFHTTPRequestOperation *)HEAD:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(AFHTTPRequestOperation *operation))success + failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +/** + Creates and runs an `AFHTTPRequestOperation` with a `POST` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. + + @see -HTTPRequestOperationWithRequest:success:failure: + */ +- (nullable AFHTTPRequestOperation *)POST:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +/** + Creates and runs an `AFHTTPRequestOperation` with a multipart `POST` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. + + @see -HTTPRequestOperationWithRequest:success:failure: + */ +- (nullable AFHTTPRequestOperation *)POST:(NSString *)URLString + parameters:(nullable id)parameters + constructingBodyWithBlock:(nullable void (^)(id formData))block + success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +/** + Creates and runs an `AFHTTPRequestOperation` with a `PUT` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. + + @see -HTTPRequestOperationWithRequest:success:failure: + */ +- (nullable AFHTTPRequestOperation *)PUT:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +/** + Creates and runs an `AFHTTPRequestOperation` with a `PATCH` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. + + @see -HTTPRequestOperationWithRequest:success:failure: + */ +- (nullable AFHTTPRequestOperation *)PATCH:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +/** + Creates and runs an `AFHTTPRequestOperation` with a `DELETE` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. + + @see -HTTPRequestOperationWithRequest:success:failure: + */ +- (nullable AFHTTPRequestOperation *)DELETE:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.m b/BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.m new file mode 100644 index 0000000..60739e5 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.m @@ -0,0 +1,284 @@ +// AFHTTPRequestOperationManager.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import + +#import "AFHTTPRequestOperationManager.h" +#import "AFHTTPRequestOperation.h" + +#import +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +#import +#endif + +@interface AFHTTPRequestOperationManager () +@property (readwrite, nonatomic, strong) NSURL *baseURL; +@end + +@implementation AFHTTPRequestOperationManager + ++ (instancetype)manager { + return [[self alloc] initWithBaseURL:nil]; +} + +- (instancetype)init { + return [self initWithBaseURL:nil]; +} + +- (instancetype)initWithBaseURL:(NSURL *)url { + self = [super init]; + if (!self) { + return nil; + } + + // Ensure terminal slash for baseURL path, so that NSURL +URLWithString:relativeToURL: works as expected + if ([[url path] length] > 0 && ![[url absoluteString] hasSuffix:@"/"]) { + url = [url URLByAppendingPathComponent:@""]; + } + + self.baseURL = url; + + self.requestSerializer = [AFHTTPRequestSerializer serializer]; + self.responseSerializer = [AFJSONResponseSerializer serializer]; + + self.securityPolicy = [AFSecurityPolicy defaultPolicy]; + + self.reachabilityManager = [AFNetworkReachabilityManager sharedManager]; + + self.operationQueue = [[NSOperationQueue alloc] init]; + + self.shouldUseCredentialStorage = YES; + + return self; +} + +#pragma mark - + +#ifdef _SYSTEMCONFIGURATION_H +#endif + +- (void)setRequestSerializer:(AFHTTPRequestSerializer *)requestSerializer { + NSParameterAssert(requestSerializer); + + _requestSerializer = requestSerializer; +} + +- (void)setResponseSerializer:(AFHTTPResponseSerializer *)responseSerializer { + NSParameterAssert(responseSerializer); + + _responseSerializer = responseSerializer; +} + +#pragma mark - + +- (AFHTTPRequestOperation *)HTTPRequestOperationWithHTTPMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + NSError *serializationError = nil; + NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:method URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:&serializationError]; + if (serializationError) { + if (failure) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(nil, serializationError); + }); +#pragma clang diagnostic pop + } + + return nil; + } + + return [self HTTPRequestOperationWithRequest:request success:success failure:failure]; +} + +- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)request + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + operation.responseSerializer = self.responseSerializer; + operation.shouldUseCredentialStorage = self.shouldUseCredentialStorage; + operation.credential = self.credential; + operation.securityPolicy = self.securityPolicy; + + [operation setCompletionBlockWithSuccess:success failure:failure]; + operation.completionQueue = self.completionQueue; + operation.completionGroup = self.completionGroup; + + return operation; +} + +#pragma mark - + +- (AFHTTPRequestOperation *)GET:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"GET" URLString:URLString parameters:parameters success:success failure:failure]; + + [self.operationQueue addOperation:operation]; + + return operation; +} + +- (AFHTTPRequestOperation *)HEAD:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"HEAD" URLString:URLString parameters:parameters success:^(AFHTTPRequestOperation *requestOperation, __unused id responseObject) { + if (success) { + success(requestOperation); + } + } failure:failure]; + + [self.operationQueue addOperation:operation]; + + return operation; +} + +- (AFHTTPRequestOperation *)POST:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"POST" URLString:URLString parameters:parameters success:success failure:failure]; + + [self.operationQueue addOperation:operation]; + + return operation; +} + +- (AFHTTPRequestOperation *)POST:(NSString *)URLString + parameters:(id)parameters + constructingBodyWithBlock:(void (^)(id formData))block + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + NSError *serializationError = nil; + NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters constructingBodyWithBlock:block error:&serializationError]; + if (serializationError) { + if (failure) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(nil, serializationError); + }); +#pragma clang diagnostic pop + } + + return nil; + } + + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure]; + + [self.operationQueue addOperation:operation]; + + return operation; +} + +- (AFHTTPRequestOperation *)PUT:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"PUT" URLString:URLString parameters:parameters success:success failure:failure]; + + [self.operationQueue addOperation:operation]; + + return operation; +} + +- (AFHTTPRequestOperation *)PATCH:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"PATCH" URLString:URLString parameters:parameters success:success failure:failure]; + + [self.operationQueue addOperation:operation]; + + return operation; +} + +- (AFHTTPRequestOperation *)DELETE:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"DELETE" URLString:URLString parameters:parameters success:success failure:failure]; + + [self.operationQueue addOperation:operation]; + + return operation; +} + +#pragma mark - NSObject + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p, baseURL: %@, operationQueue: %@>", NSStringFromClass([self class]), self, [self.baseURL absoluteString], self.operationQueue]; +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder { + NSURL *baseURL = [decoder decodeObjectForKey:NSStringFromSelector(@selector(baseURL))]; + + self = [self initWithBaseURL:baseURL]; + if (!self) { + return nil; + } + + self.requestSerializer = [decoder decodeObjectOfClass:[AFHTTPRequestSerializer class] forKey:NSStringFromSelector(@selector(requestSerializer))]; + self.responseSerializer = [decoder decodeObjectOfClass:[AFHTTPResponseSerializer class] forKey:NSStringFromSelector(@selector(responseSerializer))]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:self.baseURL forKey:NSStringFromSelector(@selector(baseURL))]; + [coder encodeObject:self.requestSerializer forKey:NSStringFromSelector(@selector(requestSerializer))]; + [coder encodeObject:self.responseSerializer forKey:NSStringFromSelector(@selector(responseSerializer))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFHTTPRequestOperationManager *HTTPClient = [[[self class] allocWithZone:zone] initWithBaseURL:self.baseURL]; + + HTTPClient.requestSerializer = [self.requestSerializer copyWithZone:zone]; + HTTPClient.responseSerializer = [self.responseSerializer copyWithZone:zone]; + + return HTTPClient; +} + +@end diff --git a/BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h b/BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h new file mode 100644 index 0000000..e516e6d --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h @@ -0,0 +1,253 @@ +// AFHTTPSessionManager.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import +#if !TARGET_OS_WATCH +#import +#endif +#import + +#if __IPHONE_OS_VERSION_MIN_REQUIRED +#import +#else +#import +#endif + +#import "AFURLSessionManager.h" + +#ifndef NS_DESIGNATED_INITIALIZER +#if __has_attribute(objc_designated_initializer) +#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) +#else +#define NS_DESIGNATED_INITIALIZER +#endif +#endif + +/** + `AFHTTPSessionManager` is a subclass of `AFURLSessionManager` with convenience methods for making HTTP requests. When a `baseURL` is provided, requests made with the `GET` / `POST` / et al. convenience methods can be made with relative paths. + + ## Subclassing Notes + + Developers targeting iOS 7 or Mac OS X 10.9 or later that deal extensively with a web service are encouraged to subclass `AFHTTPSessionManager`, providing a class method that returns a shared singleton object on which authentication and other configuration can be shared across the application. + + For developers targeting iOS 6 or Mac OS X 10.8 or earlier, `AFHTTPRequestOperationManager` may be used to similar effect. + + ## Methods to Override + + To change the behavior of all data task operation construction, which is also used in the `GET` / `POST` / et al. convenience methods, override `dataTaskWithRequest:completionHandler:`. + + ## Serialization + + Requests created by an HTTP client will contain default headers and encode parameters according to the `requestSerializer` property, which is an object conforming to ``. + + Responses received from the server are automatically validated and serialized by the `responseSerializers` property, which is an object conforming to `` + + ## URL Construction Using Relative Paths + + For HTTP convenience methods, the request serializer constructs URLs from the path relative to the `-baseURL`, using `NSURL +URLWithString:relativeToURL:`, when provided. If `baseURL` is `nil`, `path` needs to resolve to a valid `NSURL` object using `NSURL +URLWithString:`. + + Below are a few examples of how `baseURL` and relative paths interact: + + NSURL *baseURL = [NSURL URLWithString:@"http://example.com/v1/"]; + [NSURL URLWithString:@"foo" relativeToURL:baseURL]; // http://example.com/v1/foo + [NSURL URLWithString:@"foo?bar=baz" relativeToURL:baseURL]; // http://example.com/v1/foo?bar=baz + [NSURL URLWithString:@"/foo" relativeToURL:baseURL]; // http://example.com/foo + [NSURL URLWithString:@"foo/" relativeToURL:baseURL]; // http://example.com/v1/foo + [NSURL URLWithString:@"/foo/" relativeToURL:baseURL]; // http://example.com/foo/ + [NSURL URLWithString:@"http://example2.com/" relativeToURL:baseURL]; // http://example2.com/ + + Also important to note is that a trailing slash will be added to any `baseURL` without one. This would otherwise cause unexpected behavior when constructing URLs using paths without a leading slash. + + @warning Managers for background sessions must be owned for the duration of their use. This can be accomplished by creating an application-wide or shared singleton instance. + */ + +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) || TARGET_OS_WATCH + +NS_ASSUME_NONNULL_BEGIN + +@interface AFHTTPSessionManager : AFURLSessionManager + +/** + The URL used to construct requests from relative paths in methods like `requestWithMethod:URLString:parameters:`, and the `GET` / `POST` / et al. convenience methods. + */ +@property (readonly, nonatomic, strong, nullable) NSURL *baseURL; + +/** + Requests created with `requestWithMethod:URLString:parameters:` & `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:` are constructed with a set of default headers using a parameter serialization specified by this property. By default, this is set to an instance of `AFHTTPRequestSerializer`, which serializes query string parameters for `GET`, `HEAD`, and `DELETE` requests, or otherwise URL-form-encodes HTTP message bodies. + + @warning `requestSerializer` must not be `nil`. + */ +@property (nonatomic, strong) AFHTTPRequestSerializer * requestSerializer; + +/** + Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an instance of `AFJSONResponseSerializer`. + + @warning `responseSerializer` must not be `nil`. + */ +@property (nonatomic, strong) AFHTTPResponseSerializer * responseSerializer; + +///--------------------- +/// @name Initialization +///--------------------- + +/** + Creates and returns an `AFHTTPSessionManager` object. + */ ++ (instancetype)manager; + +/** + Initializes an `AFHTTPSessionManager` object with the specified base URL. + + @param url The base URL for the HTTP client. + + @return The newly-initialized HTTP client + */ +- (instancetype)initWithBaseURL:(nullable NSURL *)url; + +/** + Initializes an `AFHTTPSessionManager` object with the specified base URL. + + This is the designated initializer. + + @param url The base URL for the HTTP client. + @param configuration The configuration used to create the managed session. + + @return The newly-initialized HTTP client + */ +- (instancetype)initWithBaseURL:(nullable NSURL *)url + sessionConfiguration:(nullable NSURLSessionConfiguration *)configuration NS_DESIGNATED_INITIALIZER; + +///--------------------------- +/// @name Making HTTP Requests +///--------------------------- + +/** + Creates and runs an `NSURLSessionDataTask` with a `GET` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)GET:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `HEAD` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes a single arguments: the data task. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)HEAD:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task))success + failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `POST` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a multipart `POST` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(nullable id)parameters + constructingBodyWithBlock:(nullable void (^)(id formData))block + success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `PUT` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)PUT:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `PATCH` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)PATCH:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `DELETE` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)DELETE:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m b/BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m new file mode 100644 index 0000000..bd9163f --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m @@ -0,0 +1,323 @@ +// AFHTTPSessionManager.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import "AFHTTPSessionManager.h" + +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) || TARGET_WATCH_OS + +#import "AFURLRequestSerialization.h" +#import "AFURLResponseSerialization.h" + +#import +#import + +#ifdef _SYSTEMCONFIGURATION_H +#import +#import +#import +#import +#import +#endif + +#if TARGET_OS_IOS +#import +#elif TARGET_OS_WATCH +#import +#endif + +@interface AFHTTPSessionManager () +@property (readwrite, nonatomic, strong) NSURL *baseURL; +@end + +@implementation AFHTTPSessionManager +@dynamic responseSerializer; + ++ (instancetype)manager { + return [[[self class] alloc] initWithBaseURL:nil]; +} + +- (instancetype)init { + return [self initWithBaseURL:nil]; +} + +- (instancetype)initWithBaseURL:(NSURL *)url { + return [self initWithBaseURL:url sessionConfiguration:nil]; +} + +- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration { + return [self initWithBaseURL:nil sessionConfiguration:configuration]; +} + +- (instancetype)initWithBaseURL:(NSURL *)url + sessionConfiguration:(NSURLSessionConfiguration *)configuration +{ + self = [super initWithSessionConfiguration:configuration]; + if (!self) { + return nil; + } + + // Ensure terminal slash for baseURL path, so that NSURL +URLWithString:relativeToURL: works as expected + if ([[url path] length] > 0 && ![[url absoluteString] hasSuffix:@"/"]) { + url = [url URLByAppendingPathComponent:@""]; + } + + self.baseURL = url; + + self.requestSerializer = [AFHTTPRequestSerializer serializer]; + self.responseSerializer = [AFJSONResponseSerializer serializer]; + + return self; +} + +#pragma mark - + +#ifdef _SYSTEMCONFIGURATION_H +#endif + +- (void)setRequestSerializer:(AFHTTPRequestSerializer *)requestSerializer { + NSParameterAssert(requestSerializer); + + _requestSerializer = requestSerializer; +} + +- (void)setResponseSerializer:(AFHTTPResponseSerializer *)responseSerializer { + NSParameterAssert(responseSerializer); + + [super setResponseSerializer:responseSerializer]; +} + +#pragma mark - + +- (NSURLSessionDataTask *)GET:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"GET" URLString:URLString parameters:parameters success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)HEAD:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"HEAD" URLString:URLString parameters:parameters success:^(NSURLSessionDataTask *task, __unused id responseObject) { + if (success) { + success(task); + } + } failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"POST" URLString:URLString parameters:parameters success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(id)parameters + constructingBodyWithBlock:(void (^)(id formData))block + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSError *serializationError = nil; + NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters constructingBodyWithBlock:block error:&serializationError]; + if (serializationError) { + if (failure) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(nil, serializationError); + }); +#pragma clang diagnostic pop + } + + return nil; + } + + __block NSURLSessionDataTask *task = [self uploadTaskWithStreamedRequest:request progress:nil completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) { + if (error) { + if (failure) { + failure(task, error); + } + } else { + if (success) { + success(task, responseObject); + } + } + }]; + + [task resume]; + + return task; +} + +- (NSURLSessionDataTask *)PUT:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"PUT" URLString:URLString parameters:parameters success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)PATCH:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"PATCH" URLString:URLString parameters:parameters success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)DELETE:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"DELETE" URLString:URLString parameters:parameters success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *, id))success + failure:(void (^)(NSURLSessionDataTask *, NSError *))failure +{ + NSError *serializationError = nil; + NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:method URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:&serializationError]; + if (serializationError) { + if (failure) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(nil, serializationError); + }); +#pragma clang diagnostic pop + } + + return nil; + } + + __block NSURLSessionDataTask *dataTask = nil; + dataTask = [self dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) { + if (error) { + if (failure) { + failure(dataTask, error); + } + } else { + if (success) { + success(dataTask, responseObject); + } + } + }]; + + return dataTask; +} + +#pragma mark - NSObject + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p, baseURL: %@, session: %@, operationQueue: %@>", NSStringFromClass([self class]), self, [self.baseURL absoluteString], self.session, self.operationQueue]; +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder { + NSURL *baseURL = [decoder decodeObjectOfClass:[NSURL class] forKey:NSStringFromSelector(@selector(baseURL))]; + NSURLSessionConfiguration *configuration = [decoder decodeObjectOfClass:[NSURLSessionConfiguration class] forKey:@"sessionConfiguration"]; + if (!configuration) { + NSString *configurationIdentifier = [decoder decodeObjectOfClass:[NSString class] forKey:@"identifier"]; + if (configurationIdentifier) { +#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1100) + configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:configurationIdentifier]; +#else + configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:configurationIdentifier]; +#endif + } + } + + self = [self initWithBaseURL:baseURL sessionConfiguration:configuration]; + if (!self) { + return nil; + } + + self.requestSerializer = [decoder decodeObjectOfClass:[AFHTTPRequestSerializer class] forKey:NSStringFromSelector(@selector(requestSerializer))]; + self.responseSerializer = [decoder decodeObjectOfClass:[AFHTTPResponseSerializer class] forKey:NSStringFromSelector(@selector(responseSerializer))]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:self.baseURL forKey:NSStringFromSelector(@selector(baseURL))]; + if ([self.session.configuration conformsToProtocol:@protocol(NSCoding)]) { + [coder encodeObject:self.session.configuration forKey:@"sessionConfiguration"]; + } else { + [coder encodeObject:self.session.configuration.identifier forKey:@"identifier"]; + } + [coder encodeObject:self.requestSerializer forKey:NSStringFromSelector(@selector(requestSerializer))]; + [coder encodeObject:self.responseSerializer forKey:NSStringFromSelector(@selector(responseSerializer))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFHTTPSessionManager *HTTPClient = [[[self class] allocWithZone:zone] initWithBaseURL:self.baseURL sessionConfiguration:self.session.configuration]; + + HTTPClient.requestSerializer = [self.requestSerializer copyWithZone:zone]; + HTTPClient.responseSerializer = [self.responseSerializer copyWithZone:zone]; + + return HTTPClient; +} + +@end + +#endif diff --git a/BreakingBad/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h b/BreakingBad/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h new file mode 100644 index 0000000..e2eb945 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h @@ -0,0 +1,207 @@ +// AFNetworkReachabilityManager.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import + +#if !TARGET_OS_WATCH +#import + +#ifndef NS_DESIGNATED_INITIALIZER +#if __has_attribute(objc_designated_initializer) +#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) +#else +#define NS_DESIGNATED_INITIALIZER +#endif +#endif + +typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) { + AFNetworkReachabilityStatusUnknown = -1, + AFNetworkReachabilityStatusNotReachable = 0, + AFNetworkReachabilityStatusReachableViaWWAN = 1, + AFNetworkReachabilityStatusReachableViaWiFi = 2, +}; + +NS_ASSUME_NONNULL_BEGIN + +/** + `AFNetworkReachabilityManager` monitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces. + + Reachability can be used to determine background information about why a network operation failed, or to trigger a network operation retrying when a connection is established. It should not be used to prevent a user from initiating a network request, as it's possible that an initial request may be required to establish reachability. + + See Apple's Reachability Sample Code (https://developer.apple.com/library/ios/samplecode/reachability/) + + @warning Instances of `AFNetworkReachabilityManager` must be started with `-startMonitoring` before reachability status can be determined. + */ +@interface AFNetworkReachabilityManager : NSObject + +/** + The current network reachability status. + */ +@property (readonly, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus; + +/** + Whether or not the network is currently reachable. + */ +@property (readonly, nonatomic, assign, getter = isReachable) BOOL reachable; + +/** + Whether or not the network is currently reachable via WWAN. + */ +@property (readonly, nonatomic, assign, getter = isReachableViaWWAN) BOOL reachableViaWWAN; + +/** + Whether or not the network is currently reachable via WiFi. + */ +@property (readonly, nonatomic, assign, getter = isReachableViaWiFi) BOOL reachableViaWiFi; + +///--------------------- +/// @name Initialization +///--------------------- + +/** + Returns the shared network reachability manager. + */ ++ (instancetype)sharedManager; + +/** + Creates and returns a network reachability manager for the specified domain. + + @param domain The domain used to evaluate network reachability. + + @return An initialized network reachability manager, actively monitoring the specified domain. + */ ++ (instancetype)managerForDomain:(NSString *)domain; + +/** + Creates and returns a network reachability manager for the socket address. + + @param address The socket address (`sockaddr_in`) used to evaluate network reachability. + + @return An initialized network reachability manager, actively monitoring the specified socket address. + */ ++ (instancetype)managerForAddress:(const void *)address; + +/** + Initializes an instance of a network reachability manager from the specified reachability object. + + @param reachability The reachability object to monitor. + + @return An initialized network reachability manager, actively monitoring the specified reachability. + */ +- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability NS_DESIGNATED_INITIALIZER; + +///-------------------------------------------------- +/// @name Starting & Stopping Reachability Monitoring +///-------------------------------------------------- + +/** + Starts monitoring for changes in network reachability status. + */ +- (void)startMonitoring; + +/** + Stops monitoring for changes in network reachability status. + */ +- (void)stopMonitoring; + +///------------------------------------------------- +/// @name Getting Localized Reachability Description +///------------------------------------------------- + +/** + Returns a localized string representation of the current network reachability status. + */ +- (NSString *)localizedNetworkReachabilityStatusString; + +///--------------------------------------------------- +/// @name Setting Network Reachability Change Callback +///--------------------------------------------------- + +/** + Sets a callback to be executed when the network availability of the `baseURL` host changes. + + @param block A block object to be executed when the network availability of the `baseURL` host changes.. This block has no return value and takes a single argument which represents the various reachability states from the device to the `baseURL`. + */ +- (void)setReachabilityStatusChangeBlock:(nullable void (^)(AFNetworkReachabilityStatus status))block; + +@end + +///---------------- +/// @name Constants +///---------------- + +/** + ## Network Reachability + + The following constants are provided by `AFNetworkReachabilityManager` as possible network reachability statuses. + + enum { + AFNetworkReachabilityStatusUnknown, + AFNetworkReachabilityStatusNotReachable, + AFNetworkReachabilityStatusReachableViaWWAN, + AFNetworkReachabilityStatusReachableViaWiFi, + } + + `AFNetworkReachabilityStatusUnknown` + The `baseURL` host reachability is not known. + + `AFNetworkReachabilityStatusNotReachable` + The `baseURL` host cannot be reached. + + `AFNetworkReachabilityStatusReachableViaWWAN` + The `baseURL` host can be reached via a cellular connection, such as EDGE or GPRS. + + `AFNetworkReachabilityStatusReachableViaWiFi` + The `baseURL` host can be reached via a Wi-Fi connection. + + ### Keys for Notification UserInfo Dictionary + + Strings that are used as keys in a `userInfo` dictionary in a network reachability status change notification. + + `AFNetworkingReachabilityNotificationStatusItem` + A key in the userInfo dictionary in a `AFNetworkingReachabilityDidChangeNotification` notification. + The corresponding value is an `NSNumber` object representing the `AFNetworkReachabilityStatus` value for the current reachability status. + */ + +///-------------------- +/// @name Notifications +///-------------------- + +/** + Posted when network reachability changes. + This notification assigns no notification object. The `userInfo` dictionary contains an `NSNumber` object under the `AFNetworkingReachabilityNotificationStatusItem` key, representing the `AFNetworkReachabilityStatus` value for the current network reachability. + + @warning In order for network reachability to be monitored, include the `SystemConfiguration` framework in the active target's "Link Binary With Library" build phase, and add `#import ` to the header prefix of the project (`Prefix.pch`). + */ +FOUNDATION_EXPORT NSString * const AFNetworkingReachabilityDidChangeNotification; +FOUNDATION_EXPORT NSString * const AFNetworkingReachabilityNotificationStatusItem; + +///-------------------- +/// @name Functions +///-------------------- + +/** + Returns a localized string representation of an `AFNetworkReachabilityStatus` value. + */ +FOUNDATION_EXPORT NSString * AFStringFromNetworkReachabilityStatus(AFNetworkReachabilityStatus status); + +NS_ASSUME_NONNULL_END +#endif diff --git a/BreakingBad/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m b/BreakingBad/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m new file mode 100644 index 0000000..2e5e2ed --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m @@ -0,0 +1,262 @@ +// AFNetworkReachabilityManager.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import "AFNetworkReachabilityManager.h" +#if !TARGET_OS_WATCH + +#import +#import +#import +#import +#import + +NSString * const AFNetworkingReachabilityDidChangeNotification = @"com.alamofire.networking.reachability.change"; +NSString * const AFNetworkingReachabilityNotificationStatusItem = @"AFNetworkingReachabilityNotificationStatusItem"; + +typedef void (^AFNetworkReachabilityStatusBlock)(AFNetworkReachabilityStatus status); + +typedef NS_ENUM(NSUInteger, AFNetworkReachabilityAssociation) { + AFNetworkReachabilityForAddress = 1, + AFNetworkReachabilityForAddressPair = 2, + AFNetworkReachabilityForName = 3, +}; + +NSString * AFStringFromNetworkReachabilityStatus(AFNetworkReachabilityStatus status) { + switch (status) { + case AFNetworkReachabilityStatusNotReachable: + return NSLocalizedStringFromTable(@"Not Reachable", @"AFNetworking", nil); + case AFNetworkReachabilityStatusReachableViaWWAN: + return NSLocalizedStringFromTable(@"Reachable via WWAN", @"AFNetworking", nil); + case AFNetworkReachabilityStatusReachableViaWiFi: + return NSLocalizedStringFromTable(@"Reachable via WiFi", @"AFNetworking", nil); + case AFNetworkReachabilityStatusUnknown: + default: + return NSLocalizedStringFromTable(@"Unknown", @"AFNetworking", nil); + } +} + +static AFNetworkReachabilityStatus AFNetworkReachabilityStatusForFlags(SCNetworkReachabilityFlags flags) { + BOOL isReachable = ((flags & kSCNetworkReachabilityFlagsReachable) != 0); + BOOL needsConnection = ((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0); + BOOL canConnectionAutomatically = (((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) || ((flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0)); + BOOL canConnectWithoutUserInteraction = (canConnectionAutomatically && (flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0); + BOOL isNetworkReachable = (isReachable && (!needsConnection || canConnectWithoutUserInteraction)); + + AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusUnknown; + if (isNetworkReachable == NO) { + status = AFNetworkReachabilityStatusNotReachable; + } +#if TARGET_OS_IPHONE + else if ((flags & kSCNetworkReachabilityFlagsIsWWAN) != 0) { + status = AFNetworkReachabilityStatusReachableViaWWAN; + } +#endif + else { + status = AFNetworkReachabilityStatusReachableViaWiFi; + } + + return status; +} + +static void AFNetworkReachabilityCallback(SCNetworkReachabilityRef __unused target, SCNetworkReachabilityFlags flags, void *info) { + AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusForFlags(flags); + AFNetworkReachabilityStatusBlock block = (__bridge AFNetworkReachabilityStatusBlock)info; + if (block) { + block(status); + } + + + dispatch_async(dispatch_get_main_queue(), ^{ + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + NSDictionary *userInfo = @{ AFNetworkingReachabilityNotificationStatusItem: @(status) }; + [notificationCenter postNotificationName:AFNetworkingReachabilityDidChangeNotification object:nil userInfo:userInfo]; + }); + +} + +static const void * AFNetworkReachabilityRetainCallback(const void *info) { + return Block_copy(info); +} + +static void AFNetworkReachabilityReleaseCallback(const void *info) { + if (info) { + Block_release(info); + } +} + +@interface AFNetworkReachabilityManager () +@property (readwrite, nonatomic, strong) id networkReachability; +@property (readwrite, nonatomic, assign) AFNetworkReachabilityAssociation networkReachabilityAssociation; +@property (readwrite, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus; +@property (readwrite, nonatomic, copy) AFNetworkReachabilityStatusBlock networkReachabilityStatusBlock; +@end + +@implementation AFNetworkReachabilityManager + ++ (instancetype)sharedManager { + static AFNetworkReachabilityManager *_sharedManager = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + struct sockaddr_in address; + bzero(&address, sizeof(address)); + address.sin_len = sizeof(address); + address.sin_family = AF_INET; + + _sharedManager = [self managerForAddress:&address]; + }); + + return _sharedManager; +} + ++ (instancetype)managerForDomain:(NSString *)domain { + SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, [domain UTF8String]); + + AFNetworkReachabilityManager *manager = [[self alloc] initWithReachability:reachability]; + manager.networkReachabilityAssociation = AFNetworkReachabilityForName; + + return manager; +} + ++ (instancetype)managerForAddress:(const void *)address { + SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *)address); + + AFNetworkReachabilityManager *manager = [[self alloc] initWithReachability:reachability]; + manager.networkReachabilityAssociation = AFNetworkReachabilityForAddress; + + return manager; +} + +- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability { + self = [super init]; + if (!self) { + return nil; + } + + self.networkReachability = CFBridgingRelease(reachability); + self.networkReachabilityStatus = AFNetworkReachabilityStatusUnknown; + + return self; +} + +- (instancetype)init NS_UNAVAILABLE +{ + return nil; +} + +- (void)dealloc { + [self stopMonitoring]; +} + +#pragma mark - + +- (BOOL)isReachable { + return [self isReachableViaWWAN] || [self isReachableViaWiFi]; +} + +- (BOOL)isReachableViaWWAN { + return self.networkReachabilityStatus == AFNetworkReachabilityStatusReachableViaWWAN; +} + +- (BOOL)isReachableViaWiFi { + return self.networkReachabilityStatus == AFNetworkReachabilityStatusReachableViaWiFi; +} + +#pragma mark - + +- (void)startMonitoring { + [self stopMonitoring]; + + if (!self.networkReachability) { + return; + } + + __weak __typeof(self)weakSelf = self; + AFNetworkReachabilityStatusBlock callback = ^(AFNetworkReachabilityStatus status) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + + strongSelf.networkReachabilityStatus = status; + if (strongSelf.networkReachabilityStatusBlock) { + strongSelf.networkReachabilityStatusBlock(status); + } + + }; + + id networkReachability = self.networkReachability; + SCNetworkReachabilityContext context = {0, (__bridge void *)callback, AFNetworkReachabilityRetainCallback, AFNetworkReachabilityReleaseCallback, NULL}; + SCNetworkReachabilitySetCallback((__bridge SCNetworkReachabilityRef)networkReachability, AFNetworkReachabilityCallback, &context); + SCNetworkReachabilityScheduleWithRunLoop((__bridge SCNetworkReachabilityRef)networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes); + + switch (self.networkReachabilityAssociation) { + case AFNetworkReachabilityForName: + break; + case AFNetworkReachabilityForAddress: + case AFNetworkReachabilityForAddressPair: + default: { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),^{ + SCNetworkReachabilityFlags flags; + SCNetworkReachabilityGetFlags((__bridge SCNetworkReachabilityRef)networkReachability, &flags); + AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusForFlags(flags); + dispatch_async(dispatch_get_main_queue(), ^{ + callback(status); + + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter postNotificationName:AFNetworkingReachabilityDidChangeNotification object:nil userInfo:@{ AFNetworkingReachabilityNotificationStatusItem: @(status) }]; + + + }); + }); + } + break; + } +} + +- (void)stopMonitoring { + if (!self.networkReachability) { + return; + } + + SCNetworkReachabilityUnscheduleFromRunLoop((__bridge SCNetworkReachabilityRef)self.networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes); +} + +#pragma mark - + +- (NSString *)localizedNetworkReachabilityStatusString { + return AFStringFromNetworkReachabilityStatus(self.networkReachabilityStatus); +} + +#pragma mark - + +- (void)setReachabilityStatusChangeBlock:(void (^)(AFNetworkReachabilityStatus status))block { + self.networkReachabilityStatusBlock = block; +} + +#pragma mark - NSKeyValueObserving + ++ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key { + if ([key isEqualToString:@"reachable"] || [key isEqualToString:@"reachableViaWWAN"] || [key isEqualToString:@"reachableViaWiFi"]) { + return [NSSet setWithObject:@"networkReachabilityStatus"]; + } + + return [super keyPathsForValuesAffectingValueForKey:key]; +} + +@end +#endif diff --git a/BreakingBad/Pods/AFNetworking/AFNetworking/AFNetworking.h b/BreakingBad/Pods/AFNetworking/AFNetworking/AFNetworking.h new file mode 100644 index 0000000..6d442bb --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/AFNetworking/AFNetworking.h @@ -0,0 +1,46 @@ +// AFNetworking.h +// +// Copyright (c) 2013 AFNetworking (http://afnetworking.com/) +// +// 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. + +#import +#import + +#ifndef _AFNETWORKING_ + #define _AFNETWORKING_ + + #import "AFURLRequestSerialization.h" + #import "AFURLResponseSerialization.h" + #import "AFSecurityPolicy.h" +#if !TARGET_OS_WATCH + #import "AFNetworkReachabilityManager.h" + #import "AFURLConnectionOperation.h" + #import "AFHTTPRequestOperation.h" + #import "AFHTTPRequestOperationManager.h" +#endif + +#if ( ( defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) || \ + ( defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 ) || \ + TARGET_OS_WATCH ) + #import "AFURLSessionManager.h" + #import "AFHTTPSessionManager.h" +#endif + +#endif /* _AFNETWORKING_ */ diff --git a/BreakingBad/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h b/BreakingBad/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h new file mode 100644 index 0000000..3c38da8 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h @@ -0,0 +1,142 @@ +// AFSecurityPolicy.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import +#import + +typedef NS_ENUM(NSUInteger, AFSSLPinningMode) { + AFSSLPinningModeNone, + AFSSLPinningModePublicKey, + AFSSLPinningModeCertificate, +}; + +/** + `AFSecurityPolicy` evaluates server trust against pinned X.509 certificates and public keys over secure connections. + + Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled. + */ + +NS_ASSUME_NONNULL_BEGIN + +@interface AFSecurityPolicy : NSObject + +/** + The criteria by which server trust should be evaluated against the pinned SSL certificates. Defaults to `AFSSLPinningModeNone`. + */ +@property (readonly, nonatomic, assign) AFSSLPinningMode SSLPinningMode; + +/** + The certificates used to evaluate server trust according to the SSL pinning mode. By default, this property is set to any (`.cer`) certificates included in the app bundle. Note that if you create an array with duplicate certificates, the duplicate certificates will be removed. Note that if pinning is enabled, `evaluateServerTrust:forDomain:` will return true if any pinned certificate matches. + */ +@property (nonatomic, strong, nullable) NSArray *pinnedCertificates; + +/** + Whether or not to trust servers with an invalid or expired SSL certificates. Defaults to `NO`. + */ +@property (nonatomic, assign) BOOL allowInvalidCertificates; + +/** + Whether or not to validate the domain name in the certificate's CN field. Defaults to `YES`. + */ +@property (nonatomic, assign) BOOL validatesDomainName; + +///----------------------------------------- +/// @name Getting Specific Security Policies +///----------------------------------------- + +/** + Returns the shared default security policy, which does not allow invalid certificates, validates domain name, and does not validate against pinned certificates or public keys. + + @return The default security policy. + */ ++ (instancetype)defaultPolicy; + +///--------------------- +/// @name Initialization +///--------------------- + +/** + Creates and returns a security policy with the specified pinning mode. + + @param pinningMode The SSL pinning mode. + + @return A new security policy. + */ ++ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode; + +///------------------------------ +/// @name Evaluating Server Trust +///------------------------------ + +/** + Whether or not the specified server trust should be accepted, based on the security policy. + + This method should be used when responding to an authentication challenge from a server. + + @param serverTrust The X.509 certificate trust of the server. + + @return Whether or not to trust the server. + + @warning This method has been deprecated in favor of `-evaluateServerTrust:forDomain:`. + */ +- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust DEPRECATED_ATTRIBUTE; + +/** + Whether or not the specified server trust should be accepted, based on the security policy. + + This method should be used when responding to an authentication challenge from a server. + + @param serverTrust The X.509 certificate trust of the server. + @param domain The domain of serverTrust. If `nil`, the domain will not be validated. + + @return Whether or not to trust the server. + */ +- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust + forDomain:(nullable NSString *)domain; + +@end + +NS_ASSUME_NONNULL_END + +///---------------- +/// @name Constants +///---------------- + +/** + ## SSL Pinning Modes + + The following constants are provided by `AFSSLPinningMode` as possible SSL pinning modes. + + enum { + AFSSLPinningModeNone, + AFSSLPinningModePublicKey, + AFSSLPinningModeCertificate, + } + + `AFSSLPinningModeNone` + Do not used pinned certificates to validate servers. + + `AFSSLPinningModePublicKey` + Validate host certificates against public keys of pinned certificates. + + `AFSSLPinningModeCertificate` + Validate host certificates against pinned certificates. +*/ diff --git a/BreakingBad/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m b/BreakingBad/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m new file mode 100644 index 0000000..e8eaa65 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m @@ -0,0 +1,311 @@ +// AFSecurityPolicy.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import "AFSecurityPolicy.h" + +#import + +#if !TARGET_OS_IOS && !TARGET_OS_WATCH +static NSData * AFSecKeyGetData(SecKeyRef key) { + CFDataRef data = NULL; + + __Require_noErr_Quiet(SecItemExport(key, kSecFormatUnknown, kSecItemPemArmour, NULL, &data), _out); + + return (__bridge_transfer NSData *)data; + +_out: + if (data) { + CFRelease(data); + } + + return nil; +} +#endif + +static BOOL AFSecKeyIsEqualToKey(SecKeyRef key1, SecKeyRef key2) { +#if TARGET_OS_IOS || TARGET_OS_WATCH + return [(__bridge id)key1 isEqual:(__bridge id)key2]; +#else + return [AFSecKeyGetData(key1) isEqual:AFSecKeyGetData(key2)]; +#endif +} + +static id AFPublicKeyForCertificate(NSData *certificate) { + id allowedPublicKey = nil; + SecCertificateRef allowedCertificate; + SecCertificateRef allowedCertificates[1]; + CFArrayRef tempCertificates = nil; + SecPolicyRef policy = nil; + SecTrustRef allowedTrust = nil; + SecTrustResultType result; + + allowedCertificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificate); + __Require_Quiet(allowedCertificate != NULL, _out); + + allowedCertificates[0] = allowedCertificate; + tempCertificates = CFArrayCreate(NULL, (const void **)allowedCertificates, 1, NULL); + + policy = SecPolicyCreateBasicX509(); + __Require_noErr_Quiet(SecTrustCreateWithCertificates(tempCertificates, policy, &allowedTrust), _out); + __Require_noErr_Quiet(SecTrustEvaluate(allowedTrust, &result), _out); + + allowedPublicKey = (__bridge_transfer id)SecTrustCopyPublicKey(allowedTrust); + +_out: + if (allowedTrust) { + CFRelease(allowedTrust); + } + + if (policy) { + CFRelease(policy); + } + + if (tempCertificates) { + CFRelease(tempCertificates); + } + + if (allowedCertificate) { + CFRelease(allowedCertificate); + } + + return allowedPublicKey; +} + +static BOOL AFServerTrustIsValid(SecTrustRef serverTrust) { + BOOL isValid = NO; + SecTrustResultType result; + __Require_noErr_Quiet(SecTrustEvaluate(serverTrust, &result), _out); + + isValid = (result == kSecTrustResultUnspecified || result == kSecTrustResultProceed); + +_out: + return isValid; +} + +static NSArray * AFCertificateTrustChainForServerTrust(SecTrustRef serverTrust) { + CFIndex certificateCount = SecTrustGetCertificateCount(serverTrust); + NSMutableArray *trustChain = [NSMutableArray arrayWithCapacity:(NSUInteger)certificateCount]; + + for (CFIndex i = 0; i < certificateCount; i++) { + SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, i); + [trustChain addObject:(__bridge_transfer NSData *)SecCertificateCopyData(certificate)]; + } + + return [NSArray arrayWithArray:trustChain]; +} + +static NSArray * AFPublicKeyTrustChainForServerTrust(SecTrustRef serverTrust) { + SecPolicyRef policy = SecPolicyCreateBasicX509(); + CFIndex certificateCount = SecTrustGetCertificateCount(serverTrust); + NSMutableArray *trustChain = [NSMutableArray arrayWithCapacity:(NSUInteger)certificateCount]; + for (CFIndex i = 0; i < certificateCount; i++) { + SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, i); + + SecCertificateRef someCertificates[] = {certificate}; + CFArrayRef certificates = CFArrayCreate(NULL, (const void **)someCertificates, 1, NULL); + + SecTrustRef trust; + __Require_noErr_Quiet(SecTrustCreateWithCertificates(certificates, policy, &trust), _out); + + SecTrustResultType result; + __Require_noErr_Quiet(SecTrustEvaluate(trust, &result), _out); + + [trustChain addObject:(__bridge_transfer id)SecTrustCopyPublicKey(trust)]; + + _out: + if (trust) { + CFRelease(trust); + } + + if (certificates) { + CFRelease(certificates); + } + + continue; + } + CFRelease(policy); + + return [NSArray arrayWithArray:trustChain]; +} + +#pragma mark - + +@interface AFSecurityPolicy() +@property (readwrite, nonatomic, assign) AFSSLPinningMode SSLPinningMode; +@property (readwrite, nonatomic, strong) NSArray *pinnedPublicKeys; +@end + +@implementation AFSecurityPolicy + ++ (NSArray *)defaultPinnedCertificates { + static NSArray *_defaultPinnedCertificates = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + NSArray *paths = [bundle pathsForResourcesOfType:@"cer" inDirectory:@"."]; + + NSMutableArray *certificates = [NSMutableArray arrayWithCapacity:[paths count]]; + for (NSString *path in paths) { + NSData *certificateData = [NSData dataWithContentsOfFile:path]; + [certificates addObject:certificateData]; + } + + _defaultPinnedCertificates = [[NSArray alloc] initWithArray:certificates]; + }); + + return _defaultPinnedCertificates; +} + ++ (instancetype)defaultPolicy { + AFSecurityPolicy *securityPolicy = [[self alloc] init]; + securityPolicy.SSLPinningMode = AFSSLPinningModeNone; + + return securityPolicy; +} + ++ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode { + AFSecurityPolicy *securityPolicy = [[self alloc] init]; + securityPolicy.SSLPinningMode = pinningMode; + + [securityPolicy setPinnedCertificates:[self defaultPinnedCertificates]]; + + return securityPolicy; +} + +- (id)init { + self = [super init]; + if (!self) { + return nil; + } + + self.validatesDomainName = YES; + + return self; +} + +- (void)setPinnedCertificates:(NSArray *)pinnedCertificates { + _pinnedCertificates = [[NSOrderedSet orderedSetWithArray:pinnedCertificates] array]; + + if (self.pinnedCertificates) { + NSMutableArray *mutablePinnedPublicKeys = [NSMutableArray arrayWithCapacity:[self.pinnedCertificates count]]; + for (NSData *certificate in self.pinnedCertificates) { + id publicKey = AFPublicKeyForCertificate(certificate); + if (!publicKey) { + continue; + } + [mutablePinnedPublicKeys addObject:publicKey]; + } + self.pinnedPublicKeys = [NSArray arrayWithArray:mutablePinnedPublicKeys]; + } else { + self.pinnedPublicKeys = nil; + } +} + +#pragma mark - + +- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust { + return [self evaluateServerTrust:serverTrust forDomain:nil]; +} + +- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust + forDomain:(NSString *)domain +{ + if (domain && self.allowInvalidCertificates && self.validatesDomainName && (self.SSLPinningMode == AFSSLPinningModeNone || [self.pinnedCertificates count] == 0)) { + // https://developer.apple.com/library/mac/documentation/NetworkingInternet/Conceptual/NetworkingTopics/Articles/OverridingSSLChainValidationCorrectly.html + // According to the docs, you should only trust your provided certs for evaluation. + // Pinned certificates are added to the trust. Without pinned certificates, + // there is nothing to evaluate against. + // + // From Apple Docs: + // "Do not implicitly trust self-signed certificates as anchors (kSecTrustOptionImplicitAnchors). + // Instead, add your own (self-signed) CA certificate to the list of trusted anchors." + NSLog(@"In order to validate a domain name for self signed certificates, you MUST use pinning."); + return NO; + } + + NSMutableArray *policies = [NSMutableArray array]; + if (self.validatesDomainName) { + [policies addObject:(__bridge_transfer id)SecPolicyCreateSSL(true, (__bridge CFStringRef)domain)]; + } else { + [policies addObject:(__bridge_transfer id)SecPolicyCreateBasicX509()]; + } + + SecTrustSetPolicies(serverTrust, (__bridge CFArrayRef)policies); + + if (self.SSLPinningMode == AFSSLPinningModeNone) { + if (self.allowInvalidCertificates || AFServerTrustIsValid(serverTrust)){ + return YES; + } else { + return NO; + } + } else if (!AFServerTrustIsValid(serverTrust) && !self.allowInvalidCertificates) { + return NO; + } + + NSArray *serverCertificates = AFCertificateTrustChainForServerTrust(serverTrust); + switch (self.SSLPinningMode) { + case AFSSLPinningModeNone: + default: + return NO; + case AFSSLPinningModeCertificate: { + NSMutableArray *pinnedCertificates = [NSMutableArray array]; + for (NSData *certificateData in self.pinnedCertificates) { + [pinnedCertificates addObject:(__bridge_transfer id)SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData)]; + } + SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)pinnedCertificates); + + if (!AFServerTrustIsValid(serverTrust)) { + return NO; + } + + NSUInteger trustedCertificateCount = 0; + for (NSData *trustChainCertificate in serverCertificates) { + if ([self.pinnedCertificates containsObject:trustChainCertificate]) { + trustedCertificateCount++; + } + } + return trustedCertificateCount > 0; + } + case AFSSLPinningModePublicKey: { + NSUInteger trustedPublicKeyCount = 0; + NSArray *publicKeys = AFPublicKeyTrustChainForServerTrust(serverTrust); + + for (id trustChainPublicKey in publicKeys) { + for (id pinnedPublicKey in self.pinnedPublicKeys) { + if (AFSecKeyIsEqualToKey((__bridge SecKeyRef)trustChainPublicKey, (__bridge SecKeyRef)pinnedPublicKey)) { + trustedPublicKeyCount += 1; + } + } + } + return trustedPublicKeyCount > 0; + } + } + + return NO; +} + +#pragma mark - NSKeyValueObserving + ++ (NSSet *)keyPathsForValuesAffectingPinnedPublicKeys { + return [NSSet setWithObject:@"pinnedCertificates"]; +} + +@end diff --git a/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h b/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h new file mode 100644 index 0000000..c21119e --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h @@ -0,0 +1,344 @@ +// AFURLConnectionOperation.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import + +#import +#import "AFURLRequestSerialization.h" +#import "AFURLResponseSerialization.h" +#import "AFSecurityPolicy.h" + +#ifndef NS_DESIGNATED_INITIALIZER +#if __has_attribute(objc_designated_initializer) +#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) +#else +#define NS_DESIGNATED_INITIALIZER +#endif +#endif + +/** + `AFURLConnectionOperation` is a subclass of `NSOperation` that implements `NSURLConnection` delegate methods. + + ## Subclassing Notes + + This is the base class of all network request operations. You may wish to create your own subclass in order to implement additional `NSURLConnection` delegate methods (see "`NSURLConnection` Delegate Methods" below), or to provide additional properties and/or class constructors. + + If you are creating a subclass that communicates over the HTTP or HTTPS protocols, you may want to consider subclassing `AFHTTPRequestOperation` instead, as it supports specifying acceptable content types or status codes. + + ## NSURLConnection Delegate Methods + + `AFURLConnectionOperation` implements the following `NSURLConnection` delegate methods: + + - `connection:didReceiveResponse:` + - `connection:didReceiveData:` + - `connectionDidFinishLoading:` + - `connection:didFailWithError:` + - `connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:` + - `connection:willCacheResponse:` + - `connectionShouldUseCredentialStorage:` + - `connection:needNewBodyStream:` + - `connection:willSendRequestForAuthenticationChallenge:` + + If any of these methods are overridden in a subclass, they _must_ call the `super` implementation first. + + ## Callbacks and Completion Blocks + + The built-in `completionBlock` provided by `NSOperation` allows for custom behavior to be executed after the request finishes. It is a common pattern for class constructors in subclasses to take callback block parameters, and execute them conditionally in the body of its `completionBlock`. Make sure to handle cancelled operations appropriately when setting a `completionBlock` (i.e. returning early before parsing response data). See the implementation of any of the `AFHTTPRequestOperation` subclasses for an example of this. + + Subclasses are strongly discouraged from overriding `setCompletionBlock:`, as `AFURLConnectionOperation`'s implementation includes a workaround to mitigate retain cycles, and what Apple rather ominously refers to as ["The Deallocation Problem"](http://developer.apple.com/library/ios/#technotes/tn2109/). + + ## SSL Pinning + + Relying on the CA trust model to validate SSL certificates exposes your app to security vulnerabilities, such as man-in-the-middle attacks. For applications that connect to known servers, SSL certificate pinning provides an increased level of security, by checking server certificate validity against those specified in the app bundle. + + SSL with certificate pinning is strongly recommended for any application that transmits sensitive information to an external webservice. + + Connections will be validated on all matching certificates with a `.cer` extension in the bundle root. + + ## NSCoding & NSCopying Conformance + + `AFURLConnectionOperation` conforms to the `NSCoding` and `NSCopying` protocols, allowing operations to be archived to disk, and copied in memory, respectively. However, because of the intrinsic limitations of capturing the exact state of an operation at a particular moment, there are some important caveats to keep in mind: + + ### NSCoding Caveats + + - Encoded operations do not include any block or stream properties. Be sure to set `completionBlock`, `outputStream`, and any callback blocks as necessary when using `-initWithCoder:` or `NSKeyedUnarchiver`. + - Operations are paused on `encodeWithCoder:`. If the operation was encoded while paused or still executing, its archived state will return `YES` for `isReady`. Otherwise, the state of an operation when encoding will remain unchanged. + + ### NSCopying Caveats + + - `-copy` and `-copyWithZone:` return a new operation with the `NSURLRequest` of the original. So rather than an exact copy of the operation at that particular instant, the copying mechanism returns a completely new instance, which can be useful for retrying operations. + - A copy of an operation will not include the `outputStream` of the original. + - Operation copies do not include `completionBlock`, as it often strongly captures a reference to `self`, which would otherwise have the unintuitive side-effect of pointing to the _original_ operation when copied. + */ + +NS_ASSUME_NONNULL_BEGIN + +@interface AFURLConnectionOperation : NSOperation + +///------------------------------- +/// @name Accessing Run Loop Modes +///------------------------------- + +/** + The run loop modes in which the operation will run on the network thread. By default, this is a single-member set containing `NSRunLoopCommonModes`. + */ +@property (nonatomic, strong) NSSet *runLoopModes; + +///----------------------------------------- +/// @name Getting URL Connection Information +///----------------------------------------- + +/** + The request used by the operation's connection. + */ +@property (readonly, nonatomic, strong) NSURLRequest *request; + +/** + The last response received by the operation's connection. + */ +@property (readonly, nonatomic, strong, nullable) NSURLResponse *response; + +/** + The error, if any, that occurred in the lifecycle of the request. + */ +@property (readonly, nonatomic, strong, nullable) NSError *error; + +///---------------------------- +/// @name Getting Response Data +///---------------------------- + +/** + The data received during the request. + */ +@property (readonly, nonatomic, strong, nullable) NSData *responseData; + +/** + The string representation of the response data. + */ +@property (readonly, nonatomic, copy, nullable) NSString *responseString; + +/** + The string encoding of the response. + + If the response does not specify a valid string encoding, `responseStringEncoding` will return `NSUTF8StringEncoding`. + */ +@property (readonly, nonatomic, assign) NSStringEncoding responseStringEncoding; + +///------------------------------- +/// @name Managing URL Credentials +///------------------------------- + +/** + Whether the URL connection should consult the credential storage for authenticating the connection. `YES` by default. + + This is the value that is returned in the `NSURLConnectionDelegate` method `-connectionShouldUseCredentialStorage:`. + */ +@property (nonatomic, assign) BOOL shouldUseCredentialStorage; + +/** + The credential used for authentication challenges in `-connection:didReceiveAuthenticationChallenge:`. + + This will be overridden by any shared credentials that exist for the username or password of the request URL, if present. + */ +@property (nonatomic, strong, nullable) NSURLCredential *credential; + +///------------------------------- +/// @name Managing Security Policy +///------------------------------- + +/** + The security policy used to evaluate server trust for secure connections. + */ +@property (nonatomic, strong) AFSecurityPolicy *securityPolicy; + +///------------------------ +/// @name Accessing Streams +///------------------------ + +/** + The input stream used to read data to be sent during the request. + + This property acts as a proxy to the `HTTPBodyStream` property of `request`. + */ +@property (nonatomic, strong) NSInputStream *inputStream; + +/** + The output stream that is used to write data received until the request is finished. + + By default, data is accumulated into a buffer that is stored into `responseData` upon completion of the request, with the intermediary `outputStream` property set to `nil`. When `outputStream` is set, the data will not be accumulated into an internal buffer, and as a result, the `responseData` property of the completed request will be `nil`. The output stream will be scheduled in the network thread runloop upon being set. + */ +@property (nonatomic, strong, nullable) NSOutputStream *outputStream; + +///--------------------------------- +/// @name Managing Callback Queues +///--------------------------------- + +/** + The dispatch queue for `completionBlock`. If `NULL` (default), the main queue is used. + */ +#if OS_OBJECT_USE_OBJC +@property (nonatomic, strong, nullable) dispatch_queue_t completionQueue; +#else +@property (nonatomic, assign, nullable) dispatch_queue_t completionQueue; +#endif + +/** + The dispatch group for `completionBlock`. If `NULL` (default), a private dispatch group is used. + */ +#if OS_OBJECT_USE_OBJC +@property (nonatomic, strong, nullable) dispatch_group_t completionGroup; +#else +@property (nonatomic, assign, nullable) dispatch_group_t completionGroup; +#endif + +///--------------------------------------------- +/// @name Managing Request Operation Information +///--------------------------------------------- + +/** + The user info dictionary for the receiver. + */ +@property (nonatomic, strong) NSDictionary *userInfo; +// FIXME: It doesn't seem that this userInfo is used anywhere in the implementation. + +///------------------------------------------------------ +/// @name Initializing an AFURLConnectionOperation Object +///------------------------------------------------------ + +/** + Initializes and returns a newly allocated operation object with a url connection configured with the specified url request. + + This is the designated initializer. + + @param urlRequest The request object to be used by the operation connection. + */ +- (instancetype)initWithRequest:(NSURLRequest *)urlRequest NS_DESIGNATED_INITIALIZER; + +///---------------------------------- +/// @name Pausing / Resuming Requests +///---------------------------------- + +/** + Pauses the execution of the request operation. + + A paused operation returns `NO` for `-isReady`, `-isExecuting`, and `-isFinished`. As such, it will remain in an `NSOperationQueue` until it is either cancelled or resumed. Pausing a finished, cancelled, or paused operation has no effect. + */ +- (void)pause; + +/** + Whether the request operation is currently paused. + + @return `YES` if the operation is currently paused, otherwise `NO`. + */ +- (BOOL)isPaused; + +/** + Resumes the execution of the paused request operation. + + Pause/Resume behavior varies depending on the underlying implementation for the operation class. In its base implementation, resuming a paused requests restarts the original request. However, since HTTP defines a specification for how to request a specific content range, `AFHTTPRequestOperation` will resume downloading the request from where it left off, instead of restarting the original request. + */ +- (void)resume; + +///---------------------------------------------- +/// @name Configuring Backgrounding Task Behavior +///---------------------------------------------- + +/** + Specifies that the operation should continue execution after the app has entered the background, and the expiration handler for that background task. + + @param handler A handler to be called shortly before the application’s remaining background time reaches 0. The handler is wrapped in a block that cancels the operation, and cleans up and marks the end of execution, unlike the `handler` parameter in `UIApplication -beginBackgroundTaskWithExpirationHandler:`, which expects this to be done in the handler itself. The handler is called synchronously on the main thread, thus blocking the application’s suspension momentarily while the application is notified. + */ +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +- (void)setShouldExecuteAsBackgroundTaskWithExpirationHandler:(nullable void (^)(void))handler NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extensions."); +#endif + +///--------------------------------- +/// @name Setting Progress Callbacks +///--------------------------------- + +/** + Sets a callback to be called when an undetermined number of bytes have been uploaded to the server. + + @param block A block object to be called when an undetermined number of bytes have been uploaded to the server. This block has no return value and takes three arguments: the number of bytes written since the last time the upload progress block was called, the total bytes written, and the total bytes expected to be written during the request, as initially determined by the length of the HTTP body. This block may be called multiple times, and will execute on the main thread. + */ +- (void)setUploadProgressBlock:(nullable void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))block; + +/** + Sets a callback to be called when an undetermined number of bytes have been downloaded from the server. + + @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the main thread. + */ +- (void)setDownloadProgressBlock:(nullable void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block; + +///------------------------------------------------- +/// @name Setting NSURLConnection Delegate Callbacks +///------------------------------------------------- + +/** + Sets a block to be executed when the connection will authenticate a challenge in order to download its request, as handled by the `NSURLConnectionDelegate` method `connection:willSendRequestForAuthenticationChallenge:`. + + @param block A block object to be executed when the connection will authenticate a challenge in order to download its request. The block has no return type and takes two arguments: the URL connection object, and the challenge that must be authenticated. This block must invoke one of the challenge-responder methods (NSURLAuthenticationChallengeSender protocol). + + If `allowsInvalidSSLCertificate` is set to YES, `connection:willSendRequestForAuthenticationChallenge:` will attempt to have the challenge sender use credentials with invalid SSL certificates. + */ +- (void)setWillSendRequestForAuthenticationChallengeBlock:(nullable void (^)(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge))block; + +/** + Sets a block to be executed when the server redirects the request from one URL to another URL, or when the request URL changed by the `NSURLProtocol` subclass handling the request in order to standardize its format, as handled by the `NSURLConnectionDataDelegate` method `connection:willSendRequest:redirectResponse:`. + + @param block A block object to be executed when the request URL was changed. The block returns an `NSURLRequest` object, the URL request to redirect, and takes three arguments: the URL connection object, the the proposed redirected request, and the URL response that caused the redirect. + */ +- (void)setRedirectResponseBlock:(nullable NSURLRequest * (^)(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse))block; + + +/** + Sets a block to be executed to modify the response a connection will cache, if any, as handled by the `NSURLConnectionDelegate` method `connection:willCacheResponse:`. + + @param block A block object to be executed to determine what response a connection will cache, if any. The block returns an `NSCachedURLResponse` object, the cached response to store in memory or `nil` to prevent the response from being cached, and takes two arguments: the URL connection object, and the cached response provided for the request. + */ +- (void)setCacheResponseBlock:(nullable NSCachedURLResponse * (^)(NSURLConnection *connection, NSCachedURLResponse *cachedResponse))block; + +/// + +/** + + */ ++ (NSArray *)batchOfRequestOperations:(nullable NSArray *)operations + progressBlock:(nullable void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock + completionBlock:(nullable void (^)(NSArray *operations))completionBlock; + +@end + +///-------------------- +/// @name Notifications +///-------------------- + +/** + Posted when an operation begins executing. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingOperationDidStartNotification; + +/** + Posted when an operation finishes. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingOperationDidFinishNotification; + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.m b/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.m new file mode 100644 index 0000000..0568005 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.m @@ -0,0 +1,792 @@ +// AFURLConnectionOperation.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import "AFURLConnectionOperation.h" + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +#import +#endif + +#if !__has_feature(objc_arc) +#error AFNetworking must be built with ARC. +// You can turn on ARC for only AFNetworking files by adding -fobjc-arc to the build phase for each of its files. +#endif + +typedef NS_ENUM(NSInteger, AFOperationState) { + AFOperationPausedState = -1, + AFOperationReadyState = 1, + AFOperationExecutingState = 2, + AFOperationFinishedState = 3, +}; + +static dispatch_group_t url_request_operation_completion_group() { + static dispatch_group_t af_url_request_operation_completion_group; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_url_request_operation_completion_group = dispatch_group_create(); + }); + + return af_url_request_operation_completion_group; +} + +static dispatch_queue_t url_request_operation_completion_queue() { + static dispatch_queue_t af_url_request_operation_completion_queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_url_request_operation_completion_queue = dispatch_queue_create("com.alamofire.networking.operation.queue", DISPATCH_QUEUE_CONCURRENT ); + }); + + return af_url_request_operation_completion_queue; +} + +static NSString * const kAFNetworkingLockName = @"com.alamofire.networking.operation.lock"; + +NSString * const AFNetworkingOperationDidStartNotification = @"com.alamofire.networking.operation.start"; +NSString * const AFNetworkingOperationDidFinishNotification = @"com.alamofire.networking.operation.finish"; + +typedef void (^AFURLConnectionOperationProgressBlock)(NSUInteger bytes, long long totalBytes, long long totalBytesExpected); +typedef void (^AFURLConnectionOperationAuthenticationChallengeBlock)(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge); +typedef NSCachedURLResponse * (^AFURLConnectionOperationCacheResponseBlock)(NSURLConnection *connection, NSCachedURLResponse *cachedResponse); +typedef NSURLRequest * (^AFURLConnectionOperationRedirectResponseBlock)(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse); +typedef void (^AFURLConnectionOperationBackgroundTaskCleanupBlock)(); + +static inline NSString * AFKeyPathFromOperationState(AFOperationState state) { + switch (state) { + case AFOperationReadyState: + return @"isReady"; + case AFOperationExecutingState: + return @"isExecuting"; + case AFOperationFinishedState: + return @"isFinished"; + case AFOperationPausedState: + return @"isPaused"; + default: { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunreachable-code" + return @"state"; +#pragma clang diagnostic pop + } + } +} + +static inline BOOL AFStateTransitionIsValid(AFOperationState fromState, AFOperationState toState, BOOL isCancelled) { + switch (fromState) { + case AFOperationReadyState: + switch (toState) { + case AFOperationPausedState: + case AFOperationExecutingState: + return YES; + case AFOperationFinishedState: + return isCancelled; + default: + return NO; + } + case AFOperationExecutingState: + switch (toState) { + case AFOperationPausedState: + case AFOperationFinishedState: + return YES; + default: + return NO; + } + case AFOperationFinishedState: + return NO; + case AFOperationPausedState: + return toState == AFOperationReadyState; + default: { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunreachable-code" + switch (toState) { + case AFOperationPausedState: + case AFOperationReadyState: + case AFOperationExecutingState: + case AFOperationFinishedState: + return YES; + default: + return NO; + } + } +#pragma clang diagnostic pop + } +} + +@interface AFURLConnectionOperation () +@property (readwrite, nonatomic, assign) AFOperationState state; +@property (readwrite, nonatomic, strong) NSRecursiveLock *lock; +@property (readwrite, nonatomic, strong) NSURLConnection *connection; +@property (readwrite, nonatomic, strong) NSURLRequest *request; +@property (readwrite, nonatomic, strong) NSURLResponse *response; +@property (readwrite, nonatomic, strong) NSError *error; +@property (readwrite, nonatomic, strong) NSData *responseData; +@property (readwrite, nonatomic, copy) NSString *responseString; +@property (readwrite, nonatomic, assign) NSStringEncoding responseStringEncoding; +@property (readwrite, nonatomic, assign) long long totalBytesRead; +@property (readwrite, nonatomic, copy) AFURLConnectionOperationBackgroundTaskCleanupBlock backgroundTaskCleanup; +@property (readwrite, nonatomic, copy) AFURLConnectionOperationProgressBlock uploadProgress; +@property (readwrite, nonatomic, copy) AFURLConnectionOperationProgressBlock downloadProgress; +@property (readwrite, nonatomic, copy) AFURLConnectionOperationAuthenticationChallengeBlock authenticationChallenge; +@property (readwrite, nonatomic, copy) AFURLConnectionOperationCacheResponseBlock cacheResponse; +@property (readwrite, nonatomic, copy) AFURLConnectionOperationRedirectResponseBlock redirectResponse; + +- (void)operationDidStart; +- (void)finish; +- (void)cancelConnection; +@end + +@implementation AFURLConnectionOperation +@synthesize outputStream = _outputStream; + ++ (void)networkRequestThreadEntryPoint:(id)__unused object { + @autoreleasepool { + [[NSThread currentThread] setName:@"AFNetworking"]; + + NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; + [runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode]; + [runLoop run]; + } +} + ++ (NSThread *)networkRequestThread { + static NSThread *_networkRequestThread = nil; + static dispatch_once_t oncePredicate; + dispatch_once(&oncePredicate, ^{ + _networkRequestThread = [[NSThread alloc] initWithTarget:self selector:@selector(networkRequestThreadEntryPoint:) object:nil]; + [_networkRequestThread start]; + }); + + return _networkRequestThread; +} + +- (instancetype)initWithRequest:(NSURLRequest *)urlRequest { + NSParameterAssert(urlRequest); + + self = [super init]; + if (!self) { + return nil; + } + + _state = AFOperationReadyState; + + self.lock = [[NSRecursiveLock alloc] init]; + self.lock.name = kAFNetworkingLockName; + + self.runLoopModes = [NSSet setWithObject:NSRunLoopCommonModes]; + + self.request = urlRequest; + + self.shouldUseCredentialStorage = YES; + + self.securityPolicy = [AFSecurityPolicy defaultPolicy]; + + return self; +} + +- (instancetype)init NS_UNAVAILABLE +{ + return nil; +} + +- (void)dealloc { + if (_outputStream) { + [_outputStream close]; + _outputStream = nil; + } + + if (_backgroundTaskCleanup) { + _backgroundTaskCleanup(); + } +} + +#pragma mark - + +- (void)setResponseData:(NSData *)responseData { + [self.lock lock]; + if (!responseData) { + _responseData = nil; + } else { + _responseData = [NSData dataWithBytes:responseData.bytes length:responseData.length]; + } + [self.lock unlock]; +} + +- (NSString *)responseString { + [self.lock lock]; + if (!_responseString && self.response && self.responseData) { + self.responseString = [[NSString alloc] initWithData:self.responseData encoding:self.responseStringEncoding]; + } + [self.lock unlock]; + + return _responseString; +} + +- (NSStringEncoding)responseStringEncoding { + [self.lock lock]; + if (!_responseStringEncoding && self.response) { + NSStringEncoding stringEncoding = NSUTF8StringEncoding; + if (self.response.textEncodingName) { + CFStringEncoding IANAEncoding = CFStringConvertIANACharSetNameToEncoding((__bridge CFStringRef)self.response.textEncodingName); + if (IANAEncoding != kCFStringEncodingInvalidId) { + stringEncoding = CFStringConvertEncodingToNSStringEncoding(IANAEncoding); + } + } + + self.responseStringEncoding = stringEncoding; + } + [self.lock unlock]; + + return _responseStringEncoding; +} + +- (NSInputStream *)inputStream { + return self.request.HTTPBodyStream; +} + +- (void)setInputStream:(NSInputStream *)inputStream { + NSMutableURLRequest *mutableRequest = [self.request mutableCopy]; + mutableRequest.HTTPBodyStream = inputStream; + self.request = mutableRequest; +} + +- (NSOutputStream *)outputStream { + if (!_outputStream) { + self.outputStream = [NSOutputStream outputStreamToMemory]; + } + + return _outputStream; +} + +- (void)setOutputStream:(NSOutputStream *)outputStream { + [self.lock lock]; + if (outputStream != _outputStream) { + if (_outputStream) { + [_outputStream close]; + } + + _outputStream = outputStream; + } + [self.lock unlock]; +} + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +- (void)setShouldExecuteAsBackgroundTaskWithExpirationHandler:(void (^)(void))handler { + [self.lock lock]; + if (!self.backgroundTaskCleanup) { + UIApplication *application = [UIApplication sharedApplication]; + UIBackgroundTaskIdentifier __block backgroundTaskIdentifier = UIBackgroundTaskInvalid; + __weak __typeof(self)weakSelf = self; + + self.backgroundTaskCleanup = ^(){ + if (backgroundTaskIdentifier != UIBackgroundTaskInvalid) { + [[UIApplication sharedApplication] endBackgroundTask:backgroundTaskIdentifier]; + backgroundTaskIdentifier = UIBackgroundTaskInvalid; + } + }; + + backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^{ + __strong __typeof(weakSelf)strongSelf = weakSelf; + + if (handler) { + handler(); + } + + if (strongSelf) { + [strongSelf cancel]; + strongSelf.backgroundTaskCleanup(); + } + }]; + } + [self.lock unlock]; +} +#endif + +#pragma mark - + +- (void)setState:(AFOperationState)state { + if (!AFStateTransitionIsValid(self.state, state, [self isCancelled])) { + return; + } + + [self.lock lock]; + NSString *oldStateKey = AFKeyPathFromOperationState(self.state); + NSString *newStateKey = AFKeyPathFromOperationState(state); + + [self willChangeValueForKey:newStateKey]; + [self willChangeValueForKey:oldStateKey]; + _state = state; + [self didChangeValueForKey:oldStateKey]; + [self didChangeValueForKey:newStateKey]; + [self.lock unlock]; +} + +- (void)pause { + if ([self isPaused] || [self isFinished] || [self isCancelled]) { + return; + } + + [self.lock lock]; + if ([self isExecuting]) { + [self performSelector:@selector(operationDidPause) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; + + dispatch_async(dispatch_get_main_queue(), ^{ + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter postNotificationName:AFNetworkingOperationDidFinishNotification object:self]; + }); + } + + self.state = AFOperationPausedState; + [self.lock unlock]; +} + +- (void)operationDidPause { + [self.lock lock]; + [self.connection cancel]; + [self.lock unlock]; +} + +- (BOOL)isPaused { + return self.state == AFOperationPausedState; +} + +- (void)resume { + if (![self isPaused]) { + return; + } + + [self.lock lock]; + self.state = AFOperationReadyState; + + [self start]; + [self.lock unlock]; +} + +#pragma mark - + +- (void)setUploadProgressBlock:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))block { + self.uploadProgress = block; +} + +- (void)setDownloadProgressBlock:(void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block { + self.downloadProgress = block; +} + +- (void)setWillSendRequestForAuthenticationChallengeBlock:(void (^)(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge))block { + self.authenticationChallenge = block; +} + +- (void)setCacheResponseBlock:(NSCachedURLResponse * (^)(NSURLConnection *connection, NSCachedURLResponse *cachedResponse))block { + self.cacheResponse = block; +} + +- (void)setRedirectResponseBlock:(NSURLRequest * (^)(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse))block { + self.redirectResponse = block; +} + +#pragma mark - NSOperation + +- (void)setCompletionBlock:(void (^)(void))block { + [self.lock lock]; + if (!block) { + [super setCompletionBlock:nil]; + } else { + __weak __typeof(self)weakSelf = self; + [super setCompletionBlock:^ { + __strong __typeof(weakSelf)strongSelf = weakSelf; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + dispatch_group_t group = strongSelf.completionGroup ?: url_request_operation_completion_group(); + dispatch_queue_t queue = strongSelf.completionQueue ?: dispatch_get_main_queue(); +#pragma clang diagnostic pop + + dispatch_group_async(group, queue, ^{ + block(); + }); + + dispatch_group_notify(group, url_request_operation_completion_queue(), ^{ + [strongSelf setCompletionBlock:nil]; + }); + }]; + } + [self.lock unlock]; +} + +- (BOOL)isReady { + return self.state == AFOperationReadyState && [super isReady]; +} + +- (BOOL)isExecuting { + return self.state == AFOperationExecutingState; +} + +- (BOOL)isFinished { + return self.state == AFOperationFinishedState; +} + +- (BOOL)isConcurrent { + return YES; +} + +- (void)start { + [self.lock lock]; + if ([self isCancelled]) { + [self performSelector:@selector(cancelConnection) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; + } else if ([self isReady]) { + self.state = AFOperationExecutingState; + + [self performSelector:@selector(operationDidStart) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; + } + [self.lock unlock]; +} + +- (void)operationDidStart { + [self.lock lock]; + if (![self isCancelled]) { + self.connection = [[NSURLConnection alloc] initWithRequest:self.request delegate:self startImmediately:NO]; + + NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; + for (NSString *runLoopMode in self.runLoopModes) { + [self.connection scheduleInRunLoop:runLoop forMode:runLoopMode]; + [self.outputStream scheduleInRunLoop:runLoop forMode:runLoopMode]; + } + + [self.outputStream open]; + [self.connection start]; + } + [self.lock unlock]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingOperationDidStartNotification object:self]; + }); +} + +- (void)finish { + [self.lock lock]; + self.state = AFOperationFinishedState; + [self.lock unlock]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingOperationDidFinishNotification object:self]; + }); +} + +- (void)cancel { + [self.lock lock]; + if (![self isFinished] && ![self isCancelled]) { + [super cancel]; + + if ([self isExecuting]) { + [self performSelector:@selector(cancelConnection) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; + } + } + [self.lock unlock]; +} + +- (void)cancelConnection { + NSDictionary *userInfo = nil; + if ([self.request URL]) { + userInfo = @{NSURLErrorFailingURLErrorKey : [self.request URL]}; + } + NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorCancelled userInfo:userInfo]; + + if (![self isFinished]) { + if (self.connection) { + [self.connection cancel]; + [self performSelector:@selector(connection:didFailWithError:) withObject:self.connection withObject:error]; + } else { + // Accommodate race condition where `self.connection` has not yet been set before cancellation + self.error = error; + [self finish]; + } + } +} + +#pragma mark - + ++ (NSArray *)batchOfRequestOperations:(NSArray *)operations + progressBlock:(void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock + completionBlock:(void (^)(NSArray *operations))completionBlock +{ + if (!operations || [operations count] == 0) { + return @[[NSBlockOperation blockOperationWithBlock:^{ + dispatch_async(dispatch_get_main_queue(), ^{ + if (completionBlock) { + completionBlock(@[]); + } + }); + }]]; + } + + __block dispatch_group_t group = dispatch_group_create(); + NSBlockOperation *batchedOperation = [NSBlockOperation blockOperationWithBlock:^{ + dispatch_group_notify(group, dispatch_get_main_queue(), ^{ + if (completionBlock) { + completionBlock(operations); + } + }); + }]; + + for (AFURLConnectionOperation *operation in operations) { + operation.completionGroup = group; + void (^originalCompletionBlock)(void) = [operation.completionBlock copy]; + __weak __typeof(operation)weakOperation = operation; + operation.completionBlock = ^{ + __strong __typeof(weakOperation)strongOperation = weakOperation; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + dispatch_queue_t queue = strongOperation.completionQueue ?: dispatch_get_main_queue(); +#pragma clang diagnostic pop + dispatch_group_async(group, queue, ^{ + if (originalCompletionBlock) { + originalCompletionBlock(); + } + + NSUInteger numberOfFinishedOperations = [[operations indexesOfObjectsPassingTest:^BOOL(id op, NSUInteger __unused idx, BOOL __unused *stop) { + return [op isFinished]; + }] count]; + + if (progressBlock) { + progressBlock(numberOfFinishedOperations, [operations count]); + } + + dispatch_group_leave(group); + }); + }; + + dispatch_group_enter(group); + [batchedOperation addDependency:operation]; + } + + return [operations arrayByAddingObject:batchedOperation]; +} + +#pragma mark - NSObject + +- (NSString *)description { + [self.lock lock]; + NSString *description = [NSString stringWithFormat:@"<%@: %p, state: %@, cancelled: %@ request: %@, response: %@>", NSStringFromClass([self class]), self, AFKeyPathFromOperationState(self.state), ([self isCancelled] ? @"YES" : @"NO"), self.request, self.response]; + [self.lock unlock]; + return description; +} + +#pragma mark - NSURLConnectionDelegate + +- (void)connection:(NSURLConnection *)connection +willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge +{ + if (self.authenticationChallenge) { + self.authenticationChallenge(connection, challenge); + return; + } + + if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { + if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { + NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; + [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge]; + } else { + [[challenge sender] cancelAuthenticationChallenge:challenge]; + } + } else { + if ([challenge previousFailureCount] == 0) { + if (self.credential) { + [[challenge sender] useCredential:self.credential forAuthenticationChallenge:challenge]; + } else { + [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge]; + } + } else { + [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge]; + } + } +} + +- (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection __unused *)connection { + return self.shouldUseCredentialStorage; +} + +- (NSURLRequest *)connection:(NSURLConnection *)connection + willSendRequest:(NSURLRequest *)request + redirectResponse:(NSURLResponse *)redirectResponse +{ + if (self.redirectResponse) { + return self.redirectResponse(connection, request, redirectResponse); + } else { + return request; + } +} + +- (void)connection:(NSURLConnection __unused *)connection + didSendBodyData:(NSInteger)bytesWritten + totalBytesWritten:(NSInteger)totalBytesWritten +totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite +{ + dispatch_async(dispatch_get_main_queue(), ^{ + if (self.uploadProgress) { + self.uploadProgress((NSUInteger)bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); + } + }); +} + +- (void)connection:(NSURLConnection __unused *)connection +didReceiveResponse:(NSURLResponse *)response +{ + self.response = response; +} + +- (void)connection:(NSURLConnection __unused *)connection + didReceiveData:(NSData *)data +{ + NSUInteger length = [data length]; + while (YES) { + NSInteger totalNumberOfBytesWritten = 0; + if ([self.outputStream hasSpaceAvailable]) { + const uint8_t *dataBuffer = (uint8_t *)[data bytes]; + + NSInteger numberOfBytesWritten = 0; + while (totalNumberOfBytesWritten < (NSInteger)length) { + numberOfBytesWritten = [self.outputStream write:&dataBuffer[(NSUInteger)totalNumberOfBytesWritten] maxLength:(length - (NSUInteger)totalNumberOfBytesWritten)]; + if (numberOfBytesWritten == -1) { + break; + } + + totalNumberOfBytesWritten += numberOfBytesWritten; + } + + break; + } else { + [self.connection cancel]; + if (self.outputStream.streamError) { + [self performSelector:@selector(connection:didFailWithError:) withObject:self.connection withObject:self.outputStream.streamError]; + } + return; + } + } + + dispatch_async(dispatch_get_main_queue(), ^{ + self.totalBytesRead += (long long)length; + + if (self.downloadProgress) { + self.downloadProgress(length, self.totalBytesRead, self.response.expectedContentLength); + } + }); +} + +- (void)connectionDidFinishLoading:(NSURLConnection __unused *)connection { + self.responseData = [self.outputStream propertyForKey:NSStreamDataWrittenToMemoryStreamKey]; + + [self.outputStream close]; + if (self.responseData) { + self.outputStream = nil; + } + + self.connection = nil; + + [self finish]; +} + +- (void)connection:(NSURLConnection __unused *)connection + didFailWithError:(NSError *)error +{ + self.error = error; + + [self.outputStream close]; + if (self.responseData) { + self.outputStream = nil; + } + + self.connection = nil; + + [self finish]; +} + +- (NSCachedURLResponse *)connection:(NSURLConnection *)connection + willCacheResponse:(NSCachedURLResponse *)cachedResponse +{ + if (self.cacheResponse) { + return self.cacheResponse(connection, cachedResponse); + } else { + if ([self isCancelled]) { + return nil; + } + + return cachedResponse; + } +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder { + NSURLRequest *request = [decoder decodeObjectOfClass:[NSURLRequest class] forKey:NSStringFromSelector(@selector(request))]; + + self = [self initWithRequest:request]; + if (!self) { + return nil; + } + + self.state = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(state))] integerValue]; + self.response = [decoder decodeObjectOfClass:[NSHTTPURLResponse class] forKey:NSStringFromSelector(@selector(response))]; + self.error = [decoder decodeObjectOfClass:[NSError class] forKey:NSStringFromSelector(@selector(error))]; + self.responseData = [decoder decodeObjectOfClass:[NSData class] forKey:NSStringFromSelector(@selector(responseData))]; + self.totalBytesRead = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(totalBytesRead))] longLongValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [self pause]; + + [coder encodeObject:self.request forKey:NSStringFromSelector(@selector(request))]; + + switch (self.state) { + case AFOperationExecutingState: + case AFOperationPausedState: + [coder encodeInteger:AFOperationReadyState forKey:NSStringFromSelector(@selector(state))]; + break; + default: + [coder encodeInteger:self.state forKey:NSStringFromSelector(@selector(state))]; + break; + } + + [coder encodeObject:self.response forKey:NSStringFromSelector(@selector(response))]; + [coder encodeObject:self.error forKey:NSStringFromSelector(@selector(error))]; + [coder encodeObject:self.responseData forKey:NSStringFromSelector(@selector(responseData))]; + [coder encodeInt64:self.totalBytesRead forKey:NSStringFromSelector(@selector(totalBytesRead))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFURLConnectionOperation *operation = [(AFURLConnectionOperation *)[[self class] allocWithZone:zone] initWithRequest:self.request]; + + operation.uploadProgress = self.uploadProgress; + operation.downloadProgress = self.downloadProgress; + operation.authenticationChallenge = self.authenticationChallenge; + operation.cacheResponse = self.cacheResponse; + operation.redirectResponse = self.redirectResponse; + operation.completionQueue = self.completionQueue; + operation.completionGroup = self.completionGroup; + + return operation; +} + +@end diff --git a/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h b/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h new file mode 100644 index 0000000..ef4d366 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h @@ -0,0 +1,473 @@ +// AFURLRequestSerialization.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import +#if TARGET_OS_IOS +#import +#elif TARGET_OS_WATCH +#import +#endif + +NS_ASSUME_NONNULL_BEGIN + +/** + The `AFURLRequestSerialization` protocol is adopted by an object that encodes parameters for a specified HTTP requests. Request serializers may encode parameters as query strings, HTTP bodies, setting the appropriate HTTP header fields as necessary. + + For example, a JSON request serializer may set the HTTP body of the request to a JSON representation, and set the `Content-Type` HTTP header field value to `application/json`. + */ +@protocol AFURLRequestSerialization + +/** + Returns a request with the specified parameters encoded into a copy of the original request. + + @param request The original request. + @param parameters The parameters to be encoded. + @param error The error that occurred while attempting to encode the request parameters. + + @return A serialized request. + */ +- (nullable NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(nullable id)parameters + error:(NSError * __nullable __autoreleasing *)error; + +@end + +#pragma mark - + +/** + + */ +typedef NS_ENUM(NSUInteger, AFHTTPRequestQueryStringSerializationStyle) { + AFHTTPRequestQueryStringDefaultStyle = 0, +}; + +@protocol AFMultipartFormData; + +/** + `AFHTTPRequestSerializer` conforms to the `AFURLRequestSerialization` & `AFURLResponseSerialization` protocols, offering a concrete base implementation of query string / URL form-encoded parameter serialization and default request headers, as well as response status code and content type validation. + + Any request or response serializer dealing with HTTP is encouraged to subclass `AFHTTPRequestSerializer` in order to ensure consistent default behavior. + */ +@interface AFHTTPRequestSerializer : NSObject + +/** + The string encoding used to serialize parameters. `NSUTF8StringEncoding` by default. + */ +@property (nonatomic, assign) NSStringEncoding stringEncoding; + +/** + Whether created requests can use the device’s cellular radio (if present). `YES` by default. + + @see NSMutableURLRequest -setAllowsCellularAccess: + */ +@property (nonatomic, assign) BOOL allowsCellularAccess; + +/** + The cache policy of created requests. `NSURLRequestUseProtocolCachePolicy` by default. + + @see NSMutableURLRequest -setCachePolicy: + */ +@property (nonatomic, assign) NSURLRequestCachePolicy cachePolicy; + +/** + Whether created requests should use the default cookie handling. `YES` by default. + + @see NSMutableURLRequest -setHTTPShouldHandleCookies: + */ +@property (nonatomic, assign) BOOL HTTPShouldHandleCookies; + +/** + Whether created requests can continue transmitting data before receiving a response from an earlier transmission. `NO` by default + + @see NSMutableURLRequest -setHTTPShouldUsePipelining: + */ +@property (nonatomic, assign) BOOL HTTPShouldUsePipelining; + +/** + The network service type for created requests. `NSURLNetworkServiceTypeDefault` by default. + + @see NSMutableURLRequest -setNetworkServiceType: + */ +@property (nonatomic, assign) NSURLRequestNetworkServiceType networkServiceType; + +/** + The timeout interval, in seconds, for created requests. The default timeout interval is 60 seconds. + + @see NSMutableURLRequest -setTimeoutInterval: + */ +@property (nonatomic, assign) NSTimeInterval timeoutInterval; + +///--------------------------------------- +/// @name Configuring HTTP Request Headers +///--------------------------------------- + +/** + Default HTTP header field values to be applied to serialized requests. By default, these include the following: + + - `Accept-Language` with the contents of `NSLocale +preferredLanguages` + - `User-Agent` with the contents of various bundle identifiers and OS designations + + @discussion To add or remove default request headers, use `setValue:forHTTPHeaderField:`. + */ +@property (readonly, nonatomic, strong) NSDictionary *HTTPRequestHeaders; + +/** + Creates and returns a serializer with default configuration. + */ ++ (instancetype)serializer; + +/** + Sets the value for the HTTP headers set in request objects made by the HTTP client. If `nil`, removes the existing value for that header. + + @param field The HTTP header to set a default value for + @param value The value set as default for the specified header, or `nil` + */ +- (void)setValue:(nullable NSString *)value +forHTTPHeaderField:(NSString *)field; + +/** + Returns the value for the HTTP headers set in the request serializer. + + @param field The HTTP header to retrieve the default value for + + @return The value set as default for the specified header, or `nil` + */ +- (nullable NSString *)valueForHTTPHeaderField:(NSString *)field; + +/** + Sets the "Authorization" HTTP header set in request objects made by the HTTP client to a basic authentication value with Base64-encoded username and password. This overwrites any existing value for this header. + + @param username The HTTP basic auth username + @param password The HTTP basic auth password + */ +- (void)setAuthorizationHeaderFieldWithUsername:(NSString *)username + password:(NSString *)password; + +/** + @deprecated This method has been deprecated. Use -setValue:forHTTPHeaderField: instead. + */ +- (void)setAuthorizationHeaderFieldWithToken:(NSString *)token DEPRECATED_ATTRIBUTE; + + +/** + Clears any existing value for the "Authorization" HTTP header. + */ +- (void)clearAuthorizationHeader; + +///------------------------------------------------------- +/// @name Configuring Query String Parameter Serialization +///------------------------------------------------------- + +/** + HTTP methods for which serialized requests will encode parameters as a query string. `GET`, `HEAD`, and `DELETE` by default. + */ +@property (nonatomic, strong) NSSet *HTTPMethodsEncodingParametersInURI; + +/** + Set the method of query string serialization according to one of the pre-defined styles. + + @param style The serialization style. + + @see AFHTTPRequestQueryStringSerializationStyle + */ +- (void)setQueryStringSerializationWithStyle:(AFHTTPRequestQueryStringSerializationStyle)style; + +/** + Set the a custom method of query string serialization according to the specified block. + + @param block A block that defines a process of encoding parameters into a query string. This block returns the query string and takes three arguments: the request, the parameters to encode, and the error that occurred when attempting to encode parameters for the given request. + */ +- (void)setQueryStringSerializationWithBlock:(nullable NSString * (^)(NSURLRequest *request, id parameters, NSError * __autoreleasing *error))block; + +///------------------------------- +/// @name Creating Request Objects +///------------------------------- + +/** + @deprecated This method has been deprecated. Use -requestWithMethod:URLString:parameters:error: instead. + */ +- (NSMutableURLRequest *)requestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(id)parameters DEPRECATED_ATTRIBUTE; + +/** + Creates an `NSMutableURLRequest` object with the specified HTTP method and URL string. + + If the HTTP method is `GET`, `HEAD`, or `DELETE`, the parameters will be used to construct a url-encoded query string that is appended to the request's URL. Otherwise, the parameters will be encoded according to the value of the `parameterEncoding` property, and set as the request body. + + @param method The HTTP method for the request, such as `GET`, `POST`, `PUT`, or `DELETE`. This parameter must not be `nil`. + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be either set as a query string for `GET` requests, or the request HTTP body. + @param error The error that occurred while constructing the request. + + @return An `NSMutableURLRequest` object. + */ +- (NSMutableURLRequest *)requestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(nullable id)parameters + error:(NSError * __nullable __autoreleasing *)error; + +/** + @deprecated This method has been deprecated. Use -multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error: instead. + */ +- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(NSDictionary *)parameters + constructingBodyWithBlock:(void (^)(id formData))block DEPRECATED_ATTRIBUTE; + +/** + Creates an `NSMutableURLRequest` object with the specified HTTP method and URLString, and constructs a `multipart/form-data` HTTP body, using the specified parameters and multipart form data block. See http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.2 + + Multipart form requests are automatically streamed, reading files directly from disk along with in-memory data in a single HTTP body. The resulting `NSMutableURLRequest` object has an `HTTPBodyStream` property, so refrain from setting `HTTPBodyStream` or `HTTPBody` on this request object, as it will clear out the multipart form body stream. + + @param method The HTTP method for the request. This parameter must not be `GET` or `HEAD`, or `nil`. + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded and set in the request HTTP body. + @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. + @param error The error that occurred while constructing the request. + + @return An `NSMutableURLRequest` object + */ +- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(nullable NSDictionary *)parameters + constructingBodyWithBlock:(nullable void (^)(id formData))block + error:(NSError * __nullable __autoreleasing *)error; + +/** + Creates an `NSMutableURLRequest` by removing the `HTTPBodyStream` from a request, and asynchronously writing its contents into the specified file, invoking the completion handler when finished. + + @param request The multipart form request. The `HTTPBodyStream` property of `request` must not be `nil`. + @param fileURL The file URL to write multipart form contents to. + @param handler A handler block to execute. + + @discussion There is a bug in `NSURLSessionTask` that causes requests to not send a `Content-Length` header when streaming contents from an HTTP body, which is notably problematic when interacting with the Amazon S3 webservice. As a workaround, this method takes a request constructed with `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error:`, or any other request with an `HTTPBodyStream`, writes the contents to the specified file and returns a copy of the original request with the `HTTPBodyStream` property set to `nil`. From here, the file can either be passed to `AFURLSessionManager -uploadTaskWithRequest:fromFile:progress:completionHandler:`, or have its contents read into an `NSData` that's assigned to the `HTTPBody` property of the request. + + @see https://github.com/AFNetworking/AFNetworking/issues/1398 + */ +- (NSMutableURLRequest *)requestWithMultipartFormRequest:(NSURLRequest *)request + writingStreamContentsToFile:(NSURL *)fileURL + completionHandler:(nullable void (^)(NSError * __nullable error))handler; + +@end + +#pragma mark - + +/** + The `AFMultipartFormData` protocol defines the methods supported by the parameter in the block argument of `AFHTTPRequestSerializer -multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:`. + */ +@protocol AFMultipartFormData + +/** + Appends the HTTP header `Content-Disposition: file; filename=#{generated filename}; name=#{name}"` and `Content-Type: #{generated mimeType}`, followed by the encoded file data and the multipart form boundary. + + The filename and MIME type for this data in the form will be automatically generated, using the last path component of the `fileURL` and system associated MIME type for the `fileURL` extension, respectively. + + @param fileURL The URL corresponding to the file whose content will be appended to the form. This parameter must not be `nil`. + @param name The name to be associated with the specified data. This parameter must not be `nil`. + @param error If an error occurs, upon return contains an `NSError` object that describes the problem. + + @return `YES` if the file data was successfully appended, otherwise `NO`. + */ +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + error:(NSError * __nullable __autoreleasing *)error; + +/** + Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the encoded file data and the multipart form boundary. + + @param fileURL The URL corresponding to the file whose content will be appended to the form. This parameter must not be `nil`. + @param name The name to be associated with the specified data. This parameter must not be `nil`. + @param fileName The file name to be used in the `Content-Disposition` header. This parameter must not be `nil`. + @param mimeType The declared MIME type of the file data. This parameter must not be `nil`. + @param error If an error occurs, upon return contains an `NSError` object that describes the problem. + + @return `YES` if the file data was successfully appended otherwise `NO`. + */ +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType + error:(NSError * __nullable __autoreleasing *)error; + +/** + Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the data from the input stream and the multipart form boundary. + + @param inputStream The input stream to be appended to the form data + @param name The name to be associated with the specified input stream. This parameter must not be `nil`. + @param fileName The filename to be associated with the specified input stream. This parameter must not be `nil`. + @param length The length of the specified input stream in bytes. + @param mimeType The MIME type of the specified data. (For example, the MIME type for a JPEG image is image/jpeg.) For a list of valid MIME types, see http://www.iana.org/assignments/media-types/. This parameter must not be `nil`. + */ +- (void)appendPartWithInputStream:(nullable NSInputStream *)inputStream + name:(NSString *)name + fileName:(NSString *)fileName + length:(int64_t)length + mimeType:(NSString *)mimeType; + +/** + Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the encoded file data and the multipart form boundary. + + @param data The data to be encoded and appended to the form data. + @param name The name to be associated with the specified data. This parameter must not be `nil`. + @param fileName The filename to be associated with the specified data. This parameter must not be `nil`. + @param mimeType The MIME type of the specified data. (For example, the MIME type for a JPEG image is image/jpeg.) For a list of valid MIME types, see http://www.iana.org/assignments/media-types/. This parameter must not be `nil`. + */ +- (void)appendPartWithFileData:(NSData *)data + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType; + +/** + Appends the HTTP headers `Content-Disposition: form-data; name=#{name}"`, followed by the encoded data and the multipart form boundary. + + @param data The data to be encoded and appended to the form data. + @param name The name to be associated with the specified data. This parameter must not be `nil`. + */ + +- (void)appendPartWithFormData:(NSData *)data + name:(NSString *)name; + + +/** + Appends HTTP headers, followed by the encoded data and the multipart form boundary. + + @param headers The HTTP headers to be appended to the form data. + @param body The data to be encoded and appended to the form data. This parameter must not be `nil`. + */ +- (void)appendPartWithHeaders:(nullable NSDictionary *)headers + body:(NSData *)body; + +/** + Throttles request bandwidth by limiting the packet size and adding a delay for each chunk read from the upload stream. + + When uploading over a 3G or EDGE connection, requests may fail with "request body stream exhausted". Setting a maximum packet size and delay according to the recommended values (`kAFUploadStream3GSuggestedPacketSize` and `kAFUploadStream3GSuggestedDelay`) lowers the risk of the input stream exceeding its allocated bandwidth. Unfortunately, there is no definite way to distinguish between a 3G, EDGE, or LTE connection over `NSURLConnection`. As such, it is not recommended that you throttle bandwidth based solely on network reachability. Instead, you should consider checking for the "request body stream exhausted" in a failure block, and then retrying the request with throttled bandwidth. + + @param numberOfBytes Maximum packet size, in number of bytes. The default packet size for an input stream is 16kb. + @param delay Duration of delay each time a packet is read. By default, no delay is set. + */ +- (void)throttleBandwidthWithPacketSize:(NSUInteger)numberOfBytes + delay:(NSTimeInterval)delay; + +@end + +#pragma mark - + +/** + `AFJSONRequestSerializer` is a subclass of `AFHTTPRequestSerializer` that encodes parameters as JSON using `NSJSONSerialization`, setting the `Content-Type` of the encoded request to `application/json`. + */ +@interface AFJSONRequestSerializer : AFHTTPRequestSerializer + +/** + Options for writing the request JSON data from Foundation objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONWritingOptions". `0` by default. + */ +@property (nonatomic, assign) NSJSONWritingOptions writingOptions; + +/** + Creates and returns a JSON serializer with specified reading and writing options. + + @param writingOptions The specified JSON writing options. + */ ++ (instancetype)serializerWithWritingOptions:(NSJSONWritingOptions)writingOptions; + +@end + +#pragma mark - + +/** + `AFPropertyListRequestSerializer` is a subclass of `AFHTTPRequestSerializer` that encodes parameters as JSON using `NSPropertyListSerializer`, setting the `Content-Type` of the encoded request to `application/x-plist`. + */ +@interface AFPropertyListRequestSerializer : AFHTTPRequestSerializer + +/** + The property list format. Possible values are described in "NSPropertyListFormat". + */ +@property (nonatomic, assign) NSPropertyListFormat format; + +/** + @warning The `writeOptions` property is currently unused. + */ +@property (nonatomic, assign) NSPropertyListWriteOptions writeOptions; + +/** + Creates and returns a property list serializer with a specified format, read options, and write options. + + @param format The property list format. + @param writeOptions The property list write options. + + @warning The `writeOptions` property is currently unused. + */ ++ (instancetype)serializerWithFormat:(NSPropertyListFormat)format + writeOptions:(NSPropertyListWriteOptions)writeOptions; + +@end + +#pragma mark - + +///---------------- +/// @name Constants +///---------------- + +/** + ## Error Domains + + The following error domain is predefined. + + - `NSString * const AFURLRequestSerializationErrorDomain` + + ### Constants + + `AFURLRequestSerializationErrorDomain` + AFURLRequestSerializer errors. Error codes for `AFURLRequestSerializationErrorDomain` correspond to codes in `NSURLErrorDomain`. + */ +FOUNDATION_EXPORT NSString * const AFURLRequestSerializationErrorDomain; + +/** + ## User info dictionary keys + + These keys may exist in the user info dictionary, in addition to those defined for NSError. + + - `NSString * const AFNetworkingOperationFailingURLRequestErrorKey` + + ### Constants + + `AFNetworkingOperationFailingURLRequestErrorKey` + The corresponding value is an `NSURLRequest` containing the request of the operation associated with an error. This key is only present in the `AFURLRequestSerializationErrorDomain`. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingOperationFailingURLRequestErrorKey; + +/** + ## Throttling Bandwidth for HTTP Request Input Streams + + @see -throttleBandwidthWithPacketSize:delay: + + ### Constants + + `kAFUploadStream3GSuggestedPacketSize` + Maximum packet size, in number of bytes. Equal to 16kb. + + `kAFUploadStream3GSuggestedDelay` + Duration of delay each time a packet is read. Equal to 0.2 seconds. + */ +FOUNDATION_EXPORT NSUInteger const kAFUploadStream3GSuggestedPacketSize; +FOUNDATION_EXPORT NSTimeInterval const kAFUploadStream3GSuggestedDelay; + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m b/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m new file mode 100644 index 0000000..e387c24 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m @@ -0,0 +1,1425 @@ +// AFURLRequestSerialization.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import "AFURLRequestSerialization.h" + +#if __IPHONE_OS_VERSION_MIN_REQUIRED +#import +#else +#import +#endif + +NSString * const AFURLRequestSerializationErrorDomain = @"com.alamofire.error.serialization.request"; +NSString * const AFNetworkingOperationFailingURLRequestErrorKey = @"com.alamofire.serialization.request.error.response"; + +typedef NSString * (^AFQueryStringSerializationBlock)(NSURLRequest *request, id parameters, NSError *__autoreleasing *error); + +static NSString * AFBase64EncodedStringFromString(NSString *string) { + NSData *data = [NSData dataWithBytes:[string UTF8String] length:[string lengthOfBytesUsingEncoding:NSUTF8StringEncoding]]; + NSUInteger length = [data length]; + NSMutableData *mutableData = [NSMutableData dataWithLength:((length + 2) / 3) * 4]; + + uint8_t *input = (uint8_t *)[data bytes]; + uint8_t *output = (uint8_t *)[mutableData mutableBytes]; + + for (NSUInteger i = 0; i < length; i += 3) { + NSUInteger value = 0; + for (NSUInteger j = i; j < (i + 3); j++) { + value <<= 8; + if (j < length) { + value |= (0xFF & input[j]); + } + } + + static uint8_t const kAFBase64EncodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + + NSUInteger idx = (i / 3) * 4; + output[idx + 0] = kAFBase64EncodingTable[(value >> 18) & 0x3F]; + output[idx + 1] = kAFBase64EncodingTable[(value >> 12) & 0x3F]; + output[idx + 2] = (i + 1) < length ? kAFBase64EncodingTable[(value >> 6) & 0x3F] : '='; + output[idx + 3] = (i + 2) < length ? kAFBase64EncodingTable[(value >> 0) & 0x3F] : '='; + } + + return [[NSString alloc] initWithData:mutableData encoding:NSASCIIStringEncoding]; +} + +/** + Returns a percent-escaped string following RFC 3986 for a query string key or value. + RFC 3986 states that the following characters are "reserved" characters. + - General Delimiters: ":", "#", "[", "]", "@", "?", "/" + - Sub-Delimiters: "!", "$", "&", "'", "(", ")", "*", "+", ",", ";", "=" + + In RFC 3986 - Section 3.4, it states that the "?" and "/" characters should not be escaped to allow + query strings to include a URL. Therefore, all "reserved" characters with the exception of "?" and "/" + should be percent-escaped in the query string. + - parameter string: The string to be percent-escaped. + - returns: The percent-escaped string. + */ +static NSString * AFPercentEscapedStringFromString(NSString *string) { + static NSString * const kAFCharactersGeneralDelimitersToEncode = @":#[]@"; // does not include "?" or "/" due to RFC 3986 - Section 3.4 + static NSString * const kAFCharactersSubDelimitersToEncode = @"!$&'()*+,;="; + + NSMutableCharacterSet * allowedCharacterSet = [[NSCharacterSet URLQueryAllowedCharacterSet] mutableCopy]; + [allowedCharacterSet removeCharactersInString:[kAFCharactersGeneralDelimitersToEncode stringByAppendingString:kAFCharactersSubDelimitersToEncode]]; + + // FIXME: https://github.com/AFNetworking/AFNetworking/pull/3028 + // return [string stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacterSet]; + + static NSUInteger const batchSize = 50; + + NSInteger index = 0; + NSMutableString *escaped = @"".mutableCopy; + + while (index < string.length) { + NSUInteger length = MIN(string.length - index, batchSize); + NSRange range = NSMakeRange(index, length); + + // To avoid breaking up character sequences such as 👴🏻👮🏽 + range = [string rangeOfComposedCharacterSequencesForRange:range]; + + NSString *substring = [string substringWithRange:range]; + NSString *encoded = [substring stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacterSet]; + [escaped appendString:encoded]; + + index += range.length; + } + + return escaped; +} + +#pragma mark - + +@interface AFQueryStringPair : NSObject +@property (readwrite, nonatomic, strong) id field; +@property (readwrite, nonatomic, strong) id value; + +- (id)initWithField:(id)field value:(id)value; + +- (NSString *)URLEncodedStringValue; +@end + +@implementation AFQueryStringPair + +- (id)initWithField:(id)field value:(id)value { + self = [super init]; + if (!self) { + return nil; + } + + self.field = field; + self.value = value; + + return self; +} + +- (NSString *)URLEncodedStringValue { + if (!self.value || [self.value isEqual:[NSNull null]]) { + return AFPercentEscapedStringFromString([self.field description]); + } else { + return [NSString stringWithFormat:@"%@=%@", AFPercentEscapedStringFromString([self.field description]), AFPercentEscapedStringFromString([self.value description])]; + } +} + +@end + +#pragma mark - + +FOUNDATION_EXPORT NSArray * AFQueryStringPairsFromDictionary(NSDictionary *dictionary); +FOUNDATION_EXPORT NSArray * AFQueryStringPairsFromKeyAndValue(NSString *key, id value); + +static NSString * AFQueryStringFromParameters(NSDictionary *parameters) { + NSMutableArray *mutablePairs = [NSMutableArray array]; + for (AFQueryStringPair *pair in AFQueryStringPairsFromDictionary(parameters)) { + [mutablePairs addObject:[pair URLEncodedStringValue]]; + } + + return [mutablePairs componentsJoinedByString:@"&"]; +} + +NSArray * AFQueryStringPairsFromDictionary(NSDictionary *dictionary) { + return AFQueryStringPairsFromKeyAndValue(nil, dictionary); +} + +NSArray * AFQueryStringPairsFromKeyAndValue(NSString *key, id value) { + NSMutableArray *mutableQueryStringComponents = [NSMutableArray array]; + + NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES selector:@selector(compare:)]; + + if ([value isKindOfClass:[NSDictionary class]]) { + NSDictionary *dictionary = value; + // Sort dictionary keys to ensure consistent ordering in query string, which is important when deserializing potentially ambiguous sequences, such as an array of dictionaries + for (id nestedKey in [dictionary.allKeys sortedArrayUsingDescriptors:@[ sortDescriptor ]]) { + id nestedValue = dictionary[nestedKey]; + if (nestedValue) { + [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue((key ? [NSString stringWithFormat:@"%@[%@]", key, nestedKey] : nestedKey), nestedValue)]; + } + } + } else if ([value isKindOfClass:[NSArray class]]) { + NSArray *array = value; + for (id nestedValue in array) { + [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue([NSString stringWithFormat:@"%@[]", key], nestedValue)]; + } + } else if ([value isKindOfClass:[NSSet class]]) { + NSSet *set = value; + for (id obj in [set sortedArrayUsingDescriptors:@[ sortDescriptor ]]) { + [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue(key, obj)]; + } + } else { + [mutableQueryStringComponents addObject:[[AFQueryStringPair alloc] initWithField:key value:value]]; + } + + return mutableQueryStringComponents; +} + +#pragma mark - + +@interface AFStreamingMultipartFormData : NSObject +- (instancetype)initWithURLRequest:(NSMutableURLRequest *)urlRequest + stringEncoding:(NSStringEncoding)encoding; + +- (NSMutableURLRequest *)requestByFinalizingMultipartFormData; +@end + +#pragma mark - + +static NSArray * AFHTTPRequestSerializerObservedKeyPaths() { + static NSArray *_AFHTTPRequestSerializerObservedKeyPaths = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _AFHTTPRequestSerializerObservedKeyPaths = @[NSStringFromSelector(@selector(allowsCellularAccess)), NSStringFromSelector(@selector(cachePolicy)), NSStringFromSelector(@selector(HTTPShouldHandleCookies)), NSStringFromSelector(@selector(HTTPShouldUsePipelining)), NSStringFromSelector(@selector(networkServiceType)), NSStringFromSelector(@selector(timeoutInterval))]; + }); + + return _AFHTTPRequestSerializerObservedKeyPaths; +} + +static void *AFHTTPRequestSerializerObserverContext = &AFHTTPRequestSerializerObserverContext; + +@interface AFHTTPRequestSerializer () +@property (readwrite, nonatomic, strong) NSMutableSet *mutableObservedChangedKeyPaths; +@property (readwrite, nonatomic, strong) NSMutableDictionary *mutableHTTPRequestHeaders; +@property (readwrite, nonatomic, assign) AFHTTPRequestQueryStringSerializationStyle queryStringSerializationStyle; +@property (readwrite, nonatomic, copy) AFQueryStringSerializationBlock queryStringSerialization; +@end + +@implementation AFHTTPRequestSerializer + ++ (instancetype)serializer { + return [[self alloc] init]; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.stringEncoding = NSUTF8StringEncoding; + + self.mutableHTTPRequestHeaders = [NSMutableDictionary dictionary]; + + // Accept-Language HTTP Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4 + NSMutableArray *acceptLanguagesComponents = [NSMutableArray array]; + [[NSLocale preferredLanguages] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + float q = 1.0f - (idx * 0.1f); + [acceptLanguagesComponents addObject:[NSString stringWithFormat:@"%@;q=%0.1g", obj, q]]; + *stop = q <= 0.5f; + }]; + [self setValue:[acceptLanguagesComponents componentsJoinedByString:@", "] forHTTPHeaderField:@"Accept-Language"]; + + NSString *userAgent = nil; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" +#if TARGET_OS_IOS + // User-Agent Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43 + userAgent = [NSString stringWithFormat:@"%@/%@ (%@; iOS %@; Scale/%0.2f)", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion], [[UIScreen mainScreen] scale]]; +#elif TARGET_OS_WATCH + // User-Agent Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43 + userAgent = [NSString stringWithFormat:@"%@/%@ (%@; watchOS %@; Scale/%0.2f)", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[WKInterfaceDevice currentDevice] model], [[WKInterfaceDevice currentDevice] systemVersion], [[WKInterfaceDevice currentDevice] screenScale]]; +#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) + userAgent = [NSString stringWithFormat:@"%@/%@ (Mac OS X %@)", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[NSProcessInfo processInfo] operatingSystemVersionString]]; +#endif +#pragma clang diagnostic pop + if (userAgent) { + if (![userAgent canBeConvertedToEncoding:NSASCIIStringEncoding]) { + NSMutableString *mutableUserAgent = [userAgent mutableCopy]; + if (CFStringTransform((__bridge CFMutableStringRef)(mutableUserAgent), NULL, (__bridge CFStringRef)@"Any-Latin; Latin-ASCII; [:^ASCII:] Remove", false)) { + userAgent = mutableUserAgent; + } + } + [self setValue:userAgent forHTTPHeaderField:@"User-Agent"]; + } + + // HTTP Method Definitions; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html + self.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", @"DELETE", nil]; + + self.mutableObservedChangedKeyPaths = [NSMutableSet set]; + for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) { + if ([self respondsToSelector:NSSelectorFromString(keyPath)]) { + [self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:AFHTTPRequestSerializerObserverContext]; + } + } + + return self; +} + +- (void)dealloc { + for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) { + if ([self respondsToSelector:NSSelectorFromString(keyPath)]) { + [self removeObserver:self forKeyPath:keyPath context:AFHTTPRequestSerializerObserverContext]; + } + } +} + +#pragma mark - + +// Workarounds for crashing behavior using Key-Value Observing with XCTest +// See https://github.com/AFNetworking/AFNetworking/issues/2523 + +- (void)setAllowsCellularAccess:(BOOL)allowsCellularAccess { + [self willChangeValueForKey:NSStringFromSelector(@selector(allowsCellularAccess))]; + _allowsCellularAccess = allowsCellularAccess; + [self didChangeValueForKey:NSStringFromSelector(@selector(allowsCellularAccess))]; +} + +- (void)setCachePolicy:(NSURLRequestCachePolicy)cachePolicy { + [self willChangeValueForKey:NSStringFromSelector(@selector(cachePolicy))]; + _cachePolicy = cachePolicy; + [self didChangeValueForKey:NSStringFromSelector(@selector(cachePolicy))]; +} + +- (void)setHTTPShouldHandleCookies:(BOOL)HTTPShouldHandleCookies { + [self willChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldHandleCookies))]; + _HTTPShouldHandleCookies = HTTPShouldHandleCookies; + [self didChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldHandleCookies))]; +} + +- (void)setHTTPShouldUsePipelining:(BOOL)HTTPShouldUsePipelining { + [self willChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldUsePipelining))]; + _HTTPShouldUsePipelining = HTTPShouldUsePipelining; + [self didChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldUsePipelining))]; +} + +- (void)setNetworkServiceType:(NSURLRequestNetworkServiceType)networkServiceType { + [self willChangeValueForKey:NSStringFromSelector(@selector(networkServiceType))]; + _networkServiceType = networkServiceType; + [self didChangeValueForKey:NSStringFromSelector(@selector(networkServiceType))]; +} + +- (void)setTimeoutInterval:(NSTimeInterval)timeoutInterval { + [self willChangeValueForKey:NSStringFromSelector(@selector(timeoutInterval))]; + _timeoutInterval = timeoutInterval; + [self didChangeValueForKey:NSStringFromSelector(@selector(timeoutInterval))]; +} + +#pragma mark - + +- (NSDictionary *)HTTPRequestHeaders { + return [NSDictionary dictionaryWithDictionary:self.mutableHTTPRequestHeaders]; +} + +- (void)setValue:(NSString *)value +forHTTPHeaderField:(NSString *)field +{ + [self.mutableHTTPRequestHeaders setValue:value forKey:field]; +} + +- (NSString *)valueForHTTPHeaderField:(NSString *)field { + return [self.mutableHTTPRequestHeaders valueForKey:field]; +} + +- (void)setAuthorizationHeaderFieldWithUsername:(NSString *)username + password:(NSString *)password +{ + NSString *basicAuthCredentials = [NSString stringWithFormat:@"%@:%@", username, password]; + [self setValue:[NSString stringWithFormat:@"Basic %@", AFBase64EncodedStringFromString(basicAuthCredentials)] forHTTPHeaderField:@"Authorization"]; +} + +- (void)setAuthorizationHeaderFieldWithToken:(NSString *)token { + [self setValue:[NSString stringWithFormat:@"Token token=\"%@\"", token] forHTTPHeaderField:@"Authorization"]; +} + +- (void)clearAuthorizationHeader { + [self.mutableHTTPRequestHeaders removeObjectForKey:@"Authorization"]; +} + +#pragma mark - + +- (void)setQueryStringSerializationWithStyle:(AFHTTPRequestQueryStringSerializationStyle)style { + self.queryStringSerializationStyle = style; + self.queryStringSerialization = nil; +} + +- (void)setQueryStringSerializationWithBlock:(NSString *(^)(NSURLRequest *, id, NSError *__autoreleasing *))block { + self.queryStringSerialization = block; +} + +#pragma mark - + +- (NSMutableURLRequest *)requestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(id)parameters +{ + return [self requestWithMethod:method URLString:URLString parameters:parameters error:nil]; +} + +- (NSMutableURLRequest *)requestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(id)parameters + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(method); + NSParameterAssert(URLString); + + NSURL *url = [NSURL URLWithString:URLString]; + + NSParameterAssert(url); + + NSMutableURLRequest *mutableRequest = [[NSMutableURLRequest alloc] initWithURL:url]; + mutableRequest.HTTPMethod = method; + + for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) { + if ([self.mutableObservedChangedKeyPaths containsObject:keyPath]) { + [mutableRequest setValue:[self valueForKeyPath:keyPath] forKey:keyPath]; + } + } + + mutableRequest = [[self requestBySerializingRequest:mutableRequest withParameters:parameters error:error] mutableCopy]; + + return mutableRequest; +} + +- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(NSDictionary *)parameters + constructingBodyWithBlock:(void (^)(id formData))block +{ + return [self multipartFormRequestWithMethod:method URLString:URLString parameters:parameters constructingBodyWithBlock:block error:nil]; +} + +- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(NSDictionary *)parameters + constructingBodyWithBlock:(void (^)(id formData))block + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(method); + NSParameterAssert(![method isEqualToString:@"GET"] && ![method isEqualToString:@"HEAD"]); + + NSMutableURLRequest *mutableRequest = [self requestWithMethod:method URLString:URLString parameters:nil error:error]; + + __block AFStreamingMultipartFormData *formData = [[AFStreamingMultipartFormData alloc] initWithURLRequest:mutableRequest stringEncoding:NSUTF8StringEncoding]; + + if (parameters) { + for (AFQueryStringPair *pair in AFQueryStringPairsFromDictionary(parameters)) { + NSData *data = nil; + if ([pair.value isKindOfClass:[NSData class]]) { + data = pair.value; + } else if ([pair.value isEqual:[NSNull null]]) { + data = [NSData data]; + } else { + data = [[pair.value description] dataUsingEncoding:self.stringEncoding]; + } + + if (data) { + [formData appendPartWithFormData:data name:[pair.field description]]; + } + } + } + + if (block) { + block(formData); + } + + return [formData requestByFinalizingMultipartFormData]; +} + +- (NSMutableURLRequest *)requestWithMultipartFormRequest:(NSURLRequest *)request + writingStreamContentsToFile:(NSURL *)fileURL + completionHandler:(void (^)(NSError *error))handler +{ + NSParameterAssert(request.HTTPBodyStream); + NSParameterAssert([fileURL isFileURL]); + + NSInputStream *inputStream = request.HTTPBodyStream; + NSOutputStream *outputStream = [[NSOutputStream alloc] initWithURL:fileURL append:NO]; + __block NSError *error = nil; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; + [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; + + [inputStream open]; + [outputStream open]; + + while ([inputStream hasBytesAvailable] && [outputStream hasSpaceAvailable]) { + uint8_t buffer[1024]; + + NSInteger bytesRead = [inputStream read:buffer maxLength:1024]; + if (inputStream.streamError || bytesRead < 0) { + error = inputStream.streamError; + break; + } + + NSInteger bytesWritten = [outputStream write:buffer maxLength:(NSUInteger)bytesRead]; + if (outputStream.streamError || bytesWritten < 0) { + error = outputStream.streamError; + break; + } + + if (bytesRead == 0 && bytesWritten == 0) { + break; + } + } + + [outputStream close]; + [inputStream close]; + + if (handler) { + dispatch_async(dispatch_get_main_queue(), ^{ + handler(error); + }); + } + }); + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + mutableRequest.HTTPBodyStream = nil; + + return mutableRequest; +} + +#pragma mark - AFURLRequestSerialization + +- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(id)parameters + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(request); + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + + [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { + if (![request valueForHTTPHeaderField:field]) { + [mutableRequest setValue:value forHTTPHeaderField:field]; + } + }]; + + NSString *query = nil; + if (parameters) { + if (self.queryStringSerialization) { + NSError *serializationError; + query = self.queryStringSerialization(request, parameters, &serializationError); + + if (serializationError) { + if (error) { + *error = serializationError; + } + + return nil; + } + } else { + switch (self.queryStringSerializationStyle) { + case AFHTTPRequestQueryStringDefaultStyle: + query = AFQueryStringFromParameters(parameters); + break; + } + } + } + + if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { + if (query) { + mutableRequest.URL = [NSURL URLWithString:[[mutableRequest.URL absoluteString] stringByAppendingFormat:mutableRequest.URL.query ? @"&%@" : @"?%@", query]]; + } + } else { + // #2864: an empty string is a valid x-www-form-urlencoded payload + if (!query) { + query = @""; + } + if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { + [mutableRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; + } + [mutableRequest setHTTPBody:[query dataUsingEncoding:self.stringEncoding]]; + } + + return mutableRequest; +} + +#pragma mark - NSKeyValueObserving + ++ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key { + if ([AFHTTPRequestSerializerObservedKeyPaths() containsObject:key]) { + return NO; + } + + return [super automaticallyNotifiesObserversForKey:key]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath + ofObject:(__unused id)object + change:(NSDictionary *)change + context:(void *)context +{ + if (context == AFHTTPRequestSerializerObserverContext) { + if ([change[NSKeyValueChangeNewKey] isEqual:[NSNull null]]) { + [self.mutableObservedChangedKeyPaths removeObject:keyPath]; + } else { + [self.mutableObservedChangedKeyPaths addObject:keyPath]; + } + } +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder { + self = [self init]; + if (!self) { + return nil; + } + + self.mutableHTTPRequestHeaders = [[decoder decodeObjectOfClass:[NSDictionary class] forKey:NSStringFromSelector(@selector(mutableHTTPRequestHeaders))] mutableCopy]; + self.queryStringSerializationStyle = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(queryStringSerializationStyle))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:self.mutableHTTPRequestHeaders forKey:NSStringFromSelector(@selector(mutableHTTPRequestHeaders))]; + [coder encodeInteger:self.queryStringSerializationStyle forKey:NSStringFromSelector(@selector(queryStringSerializationStyle))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFHTTPRequestSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.mutableHTTPRequestHeaders = [self.mutableHTTPRequestHeaders mutableCopyWithZone:zone]; + serializer.queryStringSerializationStyle = self.queryStringSerializationStyle; + serializer.queryStringSerialization = self.queryStringSerialization; + + return serializer; +} + +@end + +#pragma mark - + +static NSString * AFCreateMultipartFormBoundary() { + return [NSString stringWithFormat:@"Boundary+%08X%08X", arc4random(), arc4random()]; +} + +static NSString * const kAFMultipartFormCRLF = @"\r\n"; + +static inline NSString * AFMultipartFormInitialBoundary(NSString *boundary) { + return [NSString stringWithFormat:@"--%@%@", boundary, kAFMultipartFormCRLF]; +} + +static inline NSString * AFMultipartFormEncapsulationBoundary(NSString *boundary) { + return [NSString stringWithFormat:@"%@--%@%@", kAFMultipartFormCRLF, boundary, kAFMultipartFormCRLF]; +} + +static inline NSString * AFMultipartFormFinalBoundary(NSString *boundary) { + return [NSString stringWithFormat:@"%@--%@--%@", kAFMultipartFormCRLF, boundary, kAFMultipartFormCRLF]; +} + +static inline NSString * AFContentTypeForPathExtension(NSString *extension) { +#ifdef __UTTYPE__ + NSString *UTI = (__bridge_transfer NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)extension, NULL); + NSString *contentType = (__bridge_transfer NSString *)UTTypeCopyPreferredTagWithClass((__bridge CFStringRef)UTI, kUTTagClassMIMEType); + if (!contentType) { + return @"application/octet-stream"; + } else { + return contentType; + } +#else +#pragma unused (extension) + return @"application/octet-stream"; +#endif +} + +NSUInteger const kAFUploadStream3GSuggestedPacketSize = 1024 * 16; +NSTimeInterval const kAFUploadStream3GSuggestedDelay = 0.2; + +@interface AFHTTPBodyPart : NSObject +@property (nonatomic, assign) NSStringEncoding stringEncoding; +@property (nonatomic, strong) NSDictionary *headers; +@property (nonatomic, copy) NSString *boundary; +@property (nonatomic, strong) id body; +@property (nonatomic, assign) unsigned long long bodyContentLength; +@property (nonatomic, strong) NSInputStream *inputStream; + +@property (nonatomic, assign) BOOL hasInitialBoundary; +@property (nonatomic, assign) BOOL hasFinalBoundary; + +@property (readonly, nonatomic, assign, getter = hasBytesAvailable) BOOL bytesAvailable; +@property (readonly, nonatomic, assign) unsigned long long contentLength; + +- (NSInteger)read:(uint8_t *)buffer + maxLength:(NSUInteger)length; +@end + +@interface AFMultipartBodyStream : NSInputStream +@property (nonatomic, assign) NSUInteger numberOfBytesInPacket; +@property (nonatomic, assign) NSTimeInterval delay; +@property (nonatomic, strong) NSInputStream *inputStream; +@property (readonly, nonatomic, assign) unsigned long long contentLength; +@property (readonly, nonatomic, assign, getter = isEmpty) BOOL empty; + +- (id)initWithStringEncoding:(NSStringEncoding)encoding; +- (void)setInitialAndFinalBoundaries; +- (void)appendHTTPBodyPart:(AFHTTPBodyPart *)bodyPart; +@end + +#pragma mark - + +@interface AFStreamingMultipartFormData () +@property (readwrite, nonatomic, copy) NSMutableURLRequest *request; +@property (readwrite, nonatomic, assign) NSStringEncoding stringEncoding; +@property (readwrite, nonatomic, copy) NSString *boundary; +@property (readwrite, nonatomic, strong) AFMultipartBodyStream *bodyStream; +@end + +@implementation AFStreamingMultipartFormData + +- (id)initWithURLRequest:(NSMutableURLRequest *)urlRequest + stringEncoding:(NSStringEncoding)encoding +{ + self = [super init]; + if (!self) { + return nil; + } + + self.request = urlRequest; + self.stringEncoding = encoding; + self.boundary = AFCreateMultipartFormBoundary(); + self.bodyStream = [[AFMultipartBodyStream alloc] initWithStringEncoding:encoding]; + + return self; +} + +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + error:(NSError * __autoreleasing *)error +{ + NSParameterAssert(fileURL); + NSParameterAssert(name); + + NSString *fileName = [fileURL lastPathComponent]; + NSString *mimeType = AFContentTypeForPathExtension([fileURL pathExtension]); + + return [self appendPartWithFileURL:fileURL name:name fileName:fileName mimeType:mimeType error:error]; +} + +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType + error:(NSError * __autoreleasing *)error +{ + NSParameterAssert(fileURL); + NSParameterAssert(name); + NSParameterAssert(fileName); + NSParameterAssert(mimeType); + + if (![fileURL isFileURL]) { + NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey: NSLocalizedStringFromTable(@"Expected URL to be a file URL", @"AFNetworking", nil)}; + if (error) { + *error = [[NSError alloc] initWithDomain:AFURLRequestSerializationErrorDomain code:NSURLErrorBadURL userInfo:userInfo]; + } + + return NO; + } else if ([fileURL checkResourceIsReachableAndReturnError:error] == NO) { + NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey: NSLocalizedStringFromTable(@"File URL not reachable.", @"AFNetworking", nil)}; + if (error) { + *error = [[NSError alloc] initWithDomain:AFURLRequestSerializationErrorDomain code:NSURLErrorBadURL userInfo:userInfo]; + } + + return NO; + } + + NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[fileURL path] error:error]; + if (!fileAttributes) { + return NO; + } + + NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; + [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; + [mutableHeaders setValue:mimeType forKey:@"Content-Type"]; + + AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init]; + bodyPart.stringEncoding = self.stringEncoding; + bodyPart.headers = mutableHeaders; + bodyPart.boundary = self.boundary; + bodyPart.body = fileURL; + bodyPart.bodyContentLength = [fileAttributes[NSFileSize] unsignedLongLongValue]; + [self.bodyStream appendHTTPBodyPart:bodyPart]; + + return YES; +} + +- (void)appendPartWithInputStream:(NSInputStream *)inputStream + name:(NSString *)name + fileName:(NSString *)fileName + length:(int64_t)length + mimeType:(NSString *)mimeType +{ + NSParameterAssert(name); + NSParameterAssert(fileName); + NSParameterAssert(mimeType); + + NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; + [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; + [mutableHeaders setValue:mimeType forKey:@"Content-Type"]; + + AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init]; + bodyPart.stringEncoding = self.stringEncoding; + bodyPart.headers = mutableHeaders; + bodyPart.boundary = self.boundary; + bodyPart.body = inputStream; + + bodyPart.bodyContentLength = (unsigned long long)length; + + [self.bodyStream appendHTTPBodyPart:bodyPart]; +} + +- (void)appendPartWithFileData:(NSData *)data + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType +{ + NSParameterAssert(name); + NSParameterAssert(fileName); + NSParameterAssert(mimeType); + + NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; + [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; + [mutableHeaders setValue:mimeType forKey:@"Content-Type"]; + + [self appendPartWithHeaders:mutableHeaders body:data]; +} + +- (void)appendPartWithFormData:(NSData *)data + name:(NSString *)name +{ + NSParameterAssert(name); + + NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; + [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"", name] forKey:@"Content-Disposition"]; + + [self appendPartWithHeaders:mutableHeaders body:data]; +} + +- (void)appendPartWithHeaders:(NSDictionary *)headers + body:(NSData *)body +{ + NSParameterAssert(body); + + AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init]; + bodyPart.stringEncoding = self.stringEncoding; + bodyPart.headers = headers; + bodyPart.boundary = self.boundary; + bodyPart.bodyContentLength = [body length]; + bodyPart.body = body; + + [self.bodyStream appendHTTPBodyPart:bodyPart]; +} + +- (void)throttleBandwidthWithPacketSize:(NSUInteger)numberOfBytes + delay:(NSTimeInterval)delay +{ + self.bodyStream.numberOfBytesInPacket = numberOfBytes; + self.bodyStream.delay = delay; +} + +- (NSMutableURLRequest *)requestByFinalizingMultipartFormData { + if ([self.bodyStream isEmpty]) { + return self.request; + } + + // Reset the initial and final boundaries to ensure correct Content-Length + [self.bodyStream setInitialAndFinalBoundaries]; + [self.request setHTTPBodyStream:self.bodyStream]; + + [self.request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", self.boundary] forHTTPHeaderField:@"Content-Type"]; + [self.request setValue:[NSString stringWithFormat:@"%llu", [self.bodyStream contentLength]] forHTTPHeaderField:@"Content-Length"]; + + return self.request; +} + +@end + +#pragma mark - + +@interface NSStream () +@property (readwrite) NSStreamStatus streamStatus; +@property (readwrite, copy) NSError *streamError; +@end + +@interface AFMultipartBodyStream () +@property (readwrite, nonatomic, assign) NSStringEncoding stringEncoding; +@property (readwrite, nonatomic, strong) NSMutableArray *HTTPBodyParts; +@property (readwrite, nonatomic, strong) NSEnumerator *HTTPBodyPartEnumerator; +@property (readwrite, nonatomic, strong) AFHTTPBodyPart *currentHTTPBodyPart; +@property (readwrite, nonatomic, strong) NSOutputStream *outputStream; +@property (readwrite, nonatomic, strong) NSMutableData *buffer; +@end + +@implementation AFMultipartBodyStream +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wimplicit-atomic-properties" +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1100) +@synthesize delegate; +#endif +@synthesize streamStatus; +@synthesize streamError; +#pragma clang diagnostic pop + +- (id)initWithStringEncoding:(NSStringEncoding)encoding { + self = [super init]; + if (!self) { + return nil; + } + + self.stringEncoding = encoding; + self.HTTPBodyParts = [NSMutableArray array]; + self.numberOfBytesInPacket = NSIntegerMax; + + return self; +} + +- (void)setInitialAndFinalBoundaries { + if ([self.HTTPBodyParts count] > 0) { + for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) { + bodyPart.hasInitialBoundary = NO; + bodyPart.hasFinalBoundary = NO; + } + + [[self.HTTPBodyParts firstObject] setHasInitialBoundary:YES]; + [[self.HTTPBodyParts lastObject] setHasFinalBoundary:YES]; + } +} + +- (void)appendHTTPBodyPart:(AFHTTPBodyPart *)bodyPart { + [self.HTTPBodyParts addObject:bodyPart]; +} + +- (BOOL)isEmpty { + return [self.HTTPBodyParts count] == 0; +} + +#pragma mark - NSInputStream + +- (NSInteger)read:(uint8_t *)buffer + maxLength:(NSUInteger)length +{ + if ([self streamStatus] == NSStreamStatusClosed) { + return 0; + } + + NSInteger totalNumberOfBytesRead = 0; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + while ((NSUInteger)totalNumberOfBytesRead < MIN(length, self.numberOfBytesInPacket)) { + if (!self.currentHTTPBodyPart || ![self.currentHTTPBodyPart hasBytesAvailable]) { + if (!(self.currentHTTPBodyPart = [self.HTTPBodyPartEnumerator nextObject])) { + break; + } + } else { + NSUInteger maxLength = length - (NSUInteger)totalNumberOfBytesRead; + NSInteger numberOfBytesRead = [self.currentHTTPBodyPart read:&buffer[totalNumberOfBytesRead] maxLength:maxLength]; + if (numberOfBytesRead == -1) { + self.streamError = self.currentHTTPBodyPart.inputStream.streamError; + break; + } else { + totalNumberOfBytesRead += numberOfBytesRead; + + if (self.delay > 0.0f) { + [NSThread sleepForTimeInterval:self.delay]; + } + } + } + } +#pragma clang diagnostic pop + + return totalNumberOfBytesRead; +} + +- (BOOL)getBuffer:(__unused uint8_t **)buffer + length:(__unused NSUInteger *)len +{ + return NO; +} + +- (BOOL)hasBytesAvailable { + return [self streamStatus] == NSStreamStatusOpen; +} + +#pragma mark - NSStream + +- (void)open { + if (self.streamStatus == NSStreamStatusOpen) { + return; + } + + self.streamStatus = NSStreamStatusOpen; + + [self setInitialAndFinalBoundaries]; + self.HTTPBodyPartEnumerator = [self.HTTPBodyParts objectEnumerator]; +} + +- (void)close { + self.streamStatus = NSStreamStatusClosed; +} + +- (id)propertyForKey:(__unused NSString *)key { + return nil; +} + +- (BOOL)setProperty:(__unused id)property + forKey:(__unused NSString *)key +{ + return NO; +} + +- (void)scheduleInRunLoop:(__unused NSRunLoop *)aRunLoop + forMode:(__unused NSString *)mode +{} + +- (void)removeFromRunLoop:(__unused NSRunLoop *)aRunLoop + forMode:(__unused NSString *)mode +{} + +- (unsigned long long)contentLength { + unsigned long long length = 0; + for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) { + length += [bodyPart contentLength]; + } + + return length; +} + +#pragma mark - Undocumented CFReadStream Bridged Methods + +- (void)_scheduleInCFRunLoop:(__unused CFRunLoopRef)aRunLoop + forMode:(__unused CFStringRef)aMode +{} + +- (void)_unscheduleFromCFRunLoop:(__unused CFRunLoopRef)aRunLoop + forMode:(__unused CFStringRef)aMode +{} + +- (BOOL)_setCFClientFlags:(__unused CFOptionFlags)inFlags + callback:(__unused CFReadStreamClientCallBack)inCallback + context:(__unused CFStreamClientContext *)inContext { + return NO; +} + +#pragma mark - NSCopying + +-(id)copyWithZone:(NSZone *)zone { + AFMultipartBodyStream *bodyStreamCopy = [[[self class] allocWithZone:zone] initWithStringEncoding:self.stringEncoding]; + + for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) { + [bodyStreamCopy appendHTTPBodyPart:[bodyPart copy]]; + } + + [bodyStreamCopy setInitialAndFinalBoundaries]; + + return bodyStreamCopy; +} + +@end + +#pragma mark - + +typedef enum { + AFEncapsulationBoundaryPhase = 1, + AFHeaderPhase = 2, + AFBodyPhase = 3, + AFFinalBoundaryPhase = 4, +} AFHTTPBodyPartReadPhase; + +@interface AFHTTPBodyPart () { + AFHTTPBodyPartReadPhase _phase; + NSInputStream *_inputStream; + unsigned long long _phaseReadOffset; +} + +- (BOOL)transitionToNextPhase; +- (NSInteger)readData:(NSData *)data + intoBuffer:(uint8_t *)buffer + maxLength:(NSUInteger)length; +@end + +@implementation AFHTTPBodyPart + +- (id)init { + self = [super init]; + if (!self) { + return nil; + } + + [self transitionToNextPhase]; + + return self; +} + +- (void)dealloc { + if (_inputStream) { + [_inputStream close]; + _inputStream = nil; + } +} + +- (NSInputStream *)inputStream { + if (!_inputStream) { + if ([self.body isKindOfClass:[NSData class]]) { + _inputStream = [NSInputStream inputStreamWithData:self.body]; + } else if ([self.body isKindOfClass:[NSURL class]]) { + _inputStream = [NSInputStream inputStreamWithURL:self.body]; + } else if ([self.body isKindOfClass:[NSInputStream class]]) { + _inputStream = self.body; + } else { + _inputStream = [NSInputStream inputStreamWithData:[NSData data]]; + } + } + + return _inputStream; +} + +- (NSString *)stringForHeaders { + NSMutableString *headerString = [NSMutableString string]; + for (NSString *field in [self.headers allKeys]) { + [headerString appendString:[NSString stringWithFormat:@"%@: %@%@", field, [self.headers valueForKey:field], kAFMultipartFormCRLF]]; + } + [headerString appendString:kAFMultipartFormCRLF]; + + return [NSString stringWithString:headerString]; +} + +- (unsigned long long)contentLength { + unsigned long long length = 0; + + NSData *encapsulationBoundaryData = [([self hasInitialBoundary] ? AFMultipartFormInitialBoundary(self.boundary) : AFMultipartFormEncapsulationBoundary(self.boundary)) dataUsingEncoding:self.stringEncoding]; + length += [encapsulationBoundaryData length]; + + NSData *headersData = [[self stringForHeaders] dataUsingEncoding:self.stringEncoding]; + length += [headersData length]; + + length += _bodyContentLength; + + NSData *closingBoundaryData = ([self hasFinalBoundary] ? [AFMultipartFormFinalBoundary(self.boundary) dataUsingEncoding:self.stringEncoding] : [NSData data]); + length += [closingBoundaryData length]; + + return length; +} + +- (BOOL)hasBytesAvailable { + // Allows `read:maxLength:` to be called again if `AFMultipartFormFinalBoundary` doesn't fit into the available buffer + if (_phase == AFFinalBoundaryPhase) { + return YES; + } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wcovered-switch-default" + switch (self.inputStream.streamStatus) { + case NSStreamStatusNotOpen: + case NSStreamStatusOpening: + case NSStreamStatusOpen: + case NSStreamStatusReading: + case NSStreamStatusWriting: + return YES; + case NSStreamStatusAtEnd: + case NSStreamStatusClosed: + case NSStreamStatusError: + default: + return NO; + } +#pragma clang diagnostic pop +} + +- (NSInteger)read:(uint8_t *)buffer + maxLength:(NSUInteger)length +{ + NSInteger totalNumberOfBytesRead = 0; + + if (_phase == AFEncapsulationBoundaryPhase) { + NSData *encapsulationBoundaryData = [([self hasInitialBoundary] ? AFMultipartFormInitialBoundary(self.boundary) : AFMultipartFormEncapsulationBoundary(self.boundary)) dataUsingEncoding:self.stringEncoding]; + totalNumberOfBytesRead += [self readData:encapsulationBoundaryData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; + } + + if (_phase == AFHeaderPhase) { + NSData *headersData = [[self stringForHeaders] dataUsingEncoding:self.stringEncoding]; + totalNumberOfBytesRead += [self readData:headersData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; + } + + if (_phase == AFBodyPhase) { + NSInteger numberOfBytesRead = 0; + + numberOfBytesRead = [self.inputStream read:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; + if (numberOfBytesRead == -1) { + return -1; + } else { + totalNumberOfBytesRead += numberOfBytesRead; + + if ([self.inputStream streamStatus] >= NSStreamStatusAtEnd) { + [self transitionToNextPhase]; + } + } + } + + if (_phase == AFFinalBoundaryPhase) { + NSData *closingBoundaryData = ([self hasFinalBoundary] ? [AFMultipartFormFinalBoundary(self.boundary) dataUsingEncoding:self.stringEncoding] : [NSData data]); + totalNumberOfBytesRead += [self readData:closingBoundaryData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; + } + + return totalNumberOfBytesRead; +} + +- (NSInteger)readData:(NSData *)data + intoBuffer:(uint8_t *)buffer + maxLength:(NSUInteger)length +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + NSRange range = NSMakeRange((NSUInteger)_phaseReadOffset, MIN([data length] - ((NSUInteger)_phaseReadOffset), length)); + [data getBytes:buffer range:range]; +#pragma clang diagnostic pop + + _phaseReadOffset += range.length; + + if (((NSUInteger)_phaseReadOffset) >= [data length]) { + [self transitionToNextPhase]; + } + + return (NSInteger)range.length; +} + +- (BOOL)transitionToNextPhase { + if (![[NSThread currentThread] isMainThread]) { + dispatch_sync(dispatch_get_main_queue(), ^{ + [self transitionToNextPhase]; + }); + return YES; + } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wcovered-switch-default" + switch (_phase) { + case AFEncapsulationBoundaryPhase: + _phase = AFHeaderPhase; + break; + case AFHeaderPhase: + [self.inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; + [self.inputStream open]; + _phase = AFBodyPhase; + break; + case AFBodyPhase: + [self.inputStream close]; + _phase = AFFinalBoundaryPhase; + break; + case AFFinalBoundaryPhase: + default: + _phase = AFEncapsulationBoundaryPhase; + break; + } + _phaseReadOffset = 0; +#pragma clang diagnostic pop + + return YES; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFHTTPBodyPart *bodyPart = [[[self class] allocWithZone:zone] init]; + + bodyPart.stringEncoding = self.stringEncoding; + bodyPart.headers = self.headers; + bodyPart.bodyContentLength = self.bodyContentLength; + bodyPart.body = self.body; + bodyPart.boundary = self.boundary; + + return bodyPart; +} + +@end + +#pragma mark - + +@implementation AFJSONRequestSerializer + ++ (instancetype)serializer { + return [self serializerWithWritingOptions:(NSJSONWritingOptions)0]; +} + ++ (instancetype)serializerWithWritingOptions:(NSJSONWritingOptions)writingOptions +{ + AFJSONRequestSerializer *serializer = [[self alloc] init]; + serializer.writingOptions = writingOptions; + + return serializer; +} + +#pragma mark - AFURLRequestSerialization + +- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(id)parameters + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(request); + + if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { + return [super requestBySerializingRequest:request withParameters:parameters error:error]; + } + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + + [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { + if (![request valueForHTTPHeaderField:field]) { + [mutableRequest setValue:value forHTTPHeaderField:field]; + } + }]; + + if (parameters) { + if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { + [mutableRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; + } + + [mutableRequest setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters options:self.writingOptions error:error]]; + } + + return mutableRequest; +} + +#pragma mark - NSSecureCoding + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.writingOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(writingOptions))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeInteger:self.writingOptions forKey:NSStringFromSelector(@selector(writingOptions))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFJSONRequestSerializer *serializer = [super copyWithZone:zone]; + serializer.writingOptions = self.writingOptions; + + return serializer; +} + +@end + +#pragma mark - + +@implementation AFPropertyListRequestSerializer + ++ (instancetype)serializer { + return [self serializerWithFormat:NSPropertyListXMLFormat_v1_0 writeOptions:0]; +} + ++ (instancetype)serializerWithFormat:(NSPropertyListFormat)format + writeOptions:(NSPropertyListWriteOptions)writeOptions +{ + AFPropertyListRequestSerializer *serializer = [[self alloc] init]; + serializer.format = format; + serializer.writeOptions = writeOptions; + + return serializer; +} + +#pragma mark - AFURLRequestSerializer + +- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(id)parameters + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(request); + + if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { + return [super requestBySerializingRequest:request withParameters:parameters error:error]; + } + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + + [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { + if (![request valueForHTTPHeaderField:field]) { + [mutableRequest setValue:value forHTTPHeaderField:field]; + } + }]; + + if (parameters) { + if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { + [mutableRequest setValue:@"application/x-plist" forHTTPHeaderField:@"Content-Type"]; + } + + [mutableRequest setHTTPBody:[NSPropertyListSerialization dataWithPropertyList:parameters format:self.format options:self.writeOptions error:error]]; + } + + return mutableRequest; +} + +#pragma mark - NSSecureCoding + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.format = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(format))] unsignedIntegerValue]; + self.writeOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(writeOptions))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeInteger:self.format forKey:NSStringFromSelector(@selector(format))]; + [coder encodeObject:@(self.writeOptions) forKey:NSStringFromSelector(@selector(writeOptions))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFPropertyListRequestSerializer *serializer = [super copyWithZone:zone]; + serializer.format = self.format; + serializer.writeOptions = self.writeOptions; + + return serializer; +} + +@end diff --git a/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h b/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h new file mode 100644 index 0000000..1396cfb --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h @@ -0,0 +1,311 @@ +// AFURLResponseSerialization.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + The `AFURLResponseSerialization` protocol is adopted by an object that decodes data into a more useful object representation, according to details in the server response. Response serializers may additionally perform validation on the incoming response and data. + + For example, a JSON response serializer may check for an acceptable status code (`2XX` range) and content type (`application/json`), decoding a valid JSON response into an object. + */ +@protocol AFURLResponseSerialization + +/** + The response object decoded from the data associated with a specified response. + + @param response The response to be processed. + @param data The response data to be decoded. + @param error The error that occurred while attempting to decode the response data. + + @return The object decoded from the specified response data. + */ +- (nullable id)responseObjectForResponse:(nullable NSURLResponse *)response + data:(nullable NSData *)data + error:(NSError * __nullable __autoreleasing *)error; + +@end + +#pragma mark - + +/** + `AFHTTPResponseSerializer` conforms to the `AFURLRequestSerialization` & `AFURLResponseSerialization` protocols, offering a concrete base implementation of query string / URL form-encoded parameter serialization and default request headers, as well as response status code and content type validation. + + Any request or response serializer dealing with HTTP is encouraged to subclass `AFHTTPResponseSerializer` in order to ensure consistent default behavior. + */ +@interface AFHTTPResponseSerializer : NSObject + +- (instancetype)init; + +/** + The string encoding used to serialize data received from the server, when no string encoding is specified by the response. `NSUTF8StringEncoding` by default. + */ +@property (nonatomic, assign) NSStringEncoding stringEncoding; + +/** + Creates and returns a serializer with default configuration. + */ ++ (instancetype)serializer; + +///----------------------------------------- +/// @name Configuring Response Serialization +///----------------------------------------- + +/** + The acceptable HTTP status codes for responses. When non-`nil`, responses with status codes not contained by the set will result in an error during validation. + + See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html + */ +@property (nonatomic, copy, nullable) NSIndexSet *acceptableStatusCodes; + +/** + The acceptable MIME types for responses. When non-`nil`, responses with a `Content-Type` with MIME types that do not intersect with the set will result in an error during validation. + */ +@property (nonatomic, copy, nullable) NSSet *acceptableContentTypes; + +/** + Validates the specified response and data. + + In its base implementation, this method checks for an acceptable status code and content type. Subclasses may wish to add other domain-specific checks. + + @param response The response to be validated. + @param data The data associated with the response. + @param error The error that occurred while attempting to validate the response. + + @return `YES` if the response is valid, otherwise `NO`. + */ +- (BOOL)validateResponse:(nullable NSHTTPURLResponse *)response + data:(nullable NSData *)data + error:(NSError * __nullable __autoreleasing *)error; + +@end + +#pragma mark - + + +/** + `AFJSONResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes JSON responses. + + By default, `AFJSONResponseSerializer` accepts the following MIME types, which includes the official standard, `application/json`, as well as other commonly-used types: + + - `application/json` + - `text/json` + - `text/javascript` + */ +@interface AFJSONResponseSerializer : AFHTTPResponseSerializer + +- (instancetype)init; + +/** + Options for reading the response JSON data and creating the Foundation objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONReadingOptions". `0` by default. + */ +@property (nonatomic, assign) NSJSONReadingOptions readingOptions; + +/** + Whether to remove keys with `NSNull` values from response JSON. Defaults to `NO`. + */ +@property (nonatomic, assign) BOOL removesKeysWithNullValues; + +/** + Creates and returns a JSON serializer with specified reading and writing options. + + @param readingOptions The specified JSON reading options. + */ ++ (instancetype)serializerWithReadingOptions:(NSJSONReadingOptions)readingOptions; + +@end + +#pragma mark - + +/** + `AFXMLParserResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLParser` objects. + + By default, `AFXMLParserResponseSerializer` accepts the following MIME types, which includes the official standard, `application/xml`, as well as other commonly-used types: + + - `application/xml` + - `text/xml` + */ +@interface AFXMLParserResponseSerializer : AFHTTPResponseSerializer + +@end + +#pragma mark - + +#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED + +/** + `AFXMLDocumentResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLDocument` objects. + + By default, `AFXMLDocumentResponseSerializer` accepts the following MIME types, which includes the official standard, `application/xml`, as well as other commonly-used types: + + - `application/xml` + - `text/xml` + */ +@interface AFXMLDocumentResponseSerializer : AFHTTPResponseSerializer + +- (instancetype)init; + +/** + Input and output options specifically intended for `NSXMLDocument` objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONReadingOptions". `0` by default. + */ +@property (nonatomic, assign) NSUInteger options; + +/** + Creates and returns an XML document serializer with the specified options. + + @param mask The XML document options. + */ ++ (instancetype)serializerWithXMLDocumentOptions:(NSUInteger)mask; + +@end + +#endif + +#pragma mark - + +/** + `AFPropertyListResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLDocument` objects. + + By default, `AFPropertyListResponseSerializer` accepts the following MIME types: + + - `application/x-plist` + */ +@interface AFPropertyListResponseSerializer : AFHTTPResponseSerializer + +- (instancetype)init; + +/** + The property list format. Possible values are described in "NSPropertyListFormat". + */ +@property (nonatomic, assign) NSPropertyListFormat format; + +/** + The property list reading options. Possible values are described in "NSPropertyListMutabilityOptions." + */ +@property (nonatomic, assign) NSPropertyListReadOptions readOptions; + +/** + Creates and returns a property list serializer with a specified format, read options, and write options. + + @param format The property list format. + @param readOptions The property list reading options. + */ ++ (instancetype)serializerWithFormat:(NSPropertyListFormat)format + readOptions:(NSPropertyListReadOptions)readOptions; + +@end + +#pragma mark - + +/** + `AFImageResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes image responses. + + By default, `AFImageResponseSerializer` accepts the following MIME types, which correspond to the image formats supported by UIImage or NSImage: + + - `image/tiff` + - `image/jpeg` + - `image/gif` + - `image/png` + - `image/ico` + - `image/x-icon` + - `image/bmp` + - `image/x-bmp` + - `image/x-xbitmap` + - `image/x-win-bitmap` + */ +@interface AFImageResponseSerializer : AFHTTPResponseSerializer + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +/** + The scale factor used when interpreting the image data to construct `responseImage`. Specifying a scale factor of 1.0 results in an image whose size matches the pixel-based dimensions of the image. Applying a different scale factor changes the size of the image as reported by the size property. This is set to the value of scale of the main screen by default, which automatically scales images for retina displays, for instance. + */ +@property (nonatomic, assign) CGFloat imageScale; + +/** + Whether to automatically inflate response image data for compressed formats (such as PNG or JPEG). Enabling this can significantly improve drawing performance on iOS when used with `setCompletionBlockWithSuccess:failure:`, as it allows a bitmap representation to be constructed in the background rather than on the main thread. `YES` by default. + */ +@property (nonatomic, assign) BOOL automaticallyInflatesResponseImage; +#endif + +@end + +#pragma mark - + +/** + `AFCompoundSerializer` is a subclass of `AFHTTPResponseSerializer` that delegates the response serialization to the first `AFHTTPResponseSerializer` object that returns an object for `responseObjectForResponse:data:error:`, falling back on the default behavior of `AFHTTPResponseSerializer`. This is useful for supporting multiple potential types and structures of server responses with a single serializer. + */ +@interface AFCompoundResponseSerializer : AFHTTPResponseSerializer + +/** + The component response serializers. + */ +@property (readonly, nonatomic, copy) NSArray *responseSerializers; + +/** + Creates and returns a compound serializer comprised of the specified response serializers. + + @warning Each response serializer specified must be a subclass of `AFHTTPResponseSerializer`, and response to `-validateResponse:data:error:`. + */ ++ (instancetype)compoundSerializerWithResponseSerializers:(NSArray *)responseSerializers; + +@end + +///---------------- +/// @name Constants +///---------------- + +/** + ## Error Domains + + The following error domain is predefined. + + - `NSString * const AFURLResponseSerializationErrorDomain` + + ### Constants + + `AFURLResponseSerializationErrorDomain` + AFURLResponseSerializer errors. Error codes for `AFURLResponseSerializationErrorDomain` correspond to codes in `NSURLErrorDomain`. + */ +FOUNDATION_EXPORT NSString * const AFURLResponseSerializationErrorDomain; + +/** + ## User info dictionary keys + + These keys may exist in the user info dictionary, in addition to those defined for NSError. + + - `NSString * const AFNetworkingOperationFailingURLResponseErrorKey` + - `NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey` + + ### Constants + + `AFNetworkingOperationFailingURLResponseErrorKey` + The corresponding value is an `NSURLResponse` containing the response of the operation associated with an error. This key is only present in the `AFURLResponseSerializationErrorDomain`. + + `AFNetworkingOperationFailingURLResponseDataErrorKey` + The corresponding value is an `NSData` containing the original data of the operation associated with an error. This key is only present in the `AFURLResponseSerializationErrorDomain`. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingOperationFailingURLResponseErrorKey; + +FOUNDATION_EXPORT NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey; + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m b/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m new file mode 100644 index 0000000..f95834f --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m @@ -0,0 +1,825 @@ +// AFURLResponseSerialization.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import "AFURLResponseSerialization.h" + +#if TARGET_OS_IOS +#import +#elif TARGET_OS_WATCH +#import +#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) +#import +#endif + +NSString * const AFURLResponseSerializationErrorDomain = @"com.alamofire.error.serialization.response"; +NSString * const AFNetworkingOperationFailingURLResponseErrorKey = @"com.alamofire.serialization.response.error.response"; +NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey = @"com.alamofire.serialization.response.error.data"; + +static NSError * AFErrorWithUnderlyingError(NSError *error, NSError *underlyingError) { + if (!error) { + return underlyingError; + } + + if (!underlyingError || error.userInfo[NSUnderlyingErrorKey]) { + return error; + } + + NSMutableDictionary *mutableUserInfo = [error.userInfo mutableCopy]; + mutableUserInfo[NSUnderlyingErrorKey] = underlyingError; + + return [[NSError alloc] initWithDomain:error.domain code:error.code userInfo:mutableUserInfo]; +} + +static BOOL AFErrorOrUnderlyingErrorHasCodeInDomain(NSError *error, NSInteger code, NSString *domain) { + if ([error.domain isEqualToString:domain] && error.code == code) { + return YES; + } else if (error.userInfo[NSUnderlyingErrorKey]) { + return AFErrorOrUnderlyingErrorHasCodeInDomain(error.userInfo[NSUnderlyingErrorKey], code, domain); + } + + return NO; +} + +static id AFJSONObjectByRemovingKeysWithNullValues(id JSONObject, NSJSONReadingOptions readingOptions) { + if ([JSONObject isKindOfClass:[NSArray class]]) { + NSMutableArray *mutableArray = [NSMutableArray arrayWithCapacity:[(NSArray *)JSONObject count]]; + for (id value in (NSArray *)JSONObject) { + [mutableArray addObject:AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions)]; + } + + return (readingOptions & NSJSONReadingMutableContainers) ? mutableArray : [NSArray arrayWithArray:mutableArray]; + } else if ([JSONObject isKindOfClass:[NSDictionary class]]) { + NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithDictionary:JSONObject]; + for (id key in [(NSDictionary *)JSONObject allKeys]) { + id value = (NSDictionary *)JSONObject[key]; + if (!value || [value isEqual:[NSNull null]]) { + [mutableDictionary removeObjectForKey:key]; + } else if ([value isKindOfClass:[NSArray class]] || [value isKindOfClass:[NSDictionary class]]) { + mutableDictionary[key] = AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions); + } + } + + return (readingOptions & NSJSONReadingMutableContainers) ? mutableDictionary : [NSDictionary dictionaryWithDictionary:mutableDictionary]; + } + + return JSONObject; +} + +@implementation AFHTTPResponseSerializer + ++ (instancetype)serializer { + return [[self alloc] init]; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.stringEncoding = NSUTF8StringEncoding; + + self.acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 100)]; + self.acceptableContentTypes = nil; + + return self; +} + +#pragma mark - + +- (BOOL)validateResponse:(NSHTTPURLResponse *)response + data:(NSData *)data + error:(NSError * __autoreleasing *)error +{ + BOOL responseIsValid = YES; + NSError *validationError = nil; + + if (response && [response isKindOfClass:[NSHTTPURLResponse class]]) { + if (self.acceptableContentTypes && ![self.acceptableContentTypes containsObject:[response MIMEType]]) { + if ([data length] > 0 && [response URL]) { + NSMutableDictionary *mutableUserInfo = [@{ + NSLocalizedDescriptionKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@"Request failed: unacceptable content-type: %@", @"AFNetworking", nil), [response MIMEType]], + NSURLErrorFailingURLErrorKey:[response URL], + AFNetworkingOperationFailingURLResponseErrorKey: response, + } mutableCopy]; + if (data) { + mutableUserInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] = data; + } + + validationError = AFErrorWithUnderlyingError([NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorCannotDecodeContentData userInfo:mutableUserInfo], validationError); + } + + responseIsValid = NO; + } + + if (self.acceptableStatusCodes && ![self.acceptableStatusCodes containsIndex:(NSUInteger)response.statusCode] && [response URL]) { + NSMutableDictionary *mutableUserInfo = [@{ + NSLocalizedDescriptionKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@"Request failed: %@ (%ld)", @"AFNetworking", nil), [NSHTTPURLResponse localizedStringForStatusCode:response.statusCode], (long)response.statusCode], + NSURLErrorFailingURLErrorKey:[response URL], + AFNetworkingOperationFailingURLResponseErrorKey: response, + } mutableCopy]; + + if (data) { + mutableUserInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] = data; + } + + validationError = AFErrorWithUnderlyingError([NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorBadServerResponse userInfo:mutableUserInfo], validationError); + + responseIsValid = NO; + } + } + + if (error && !responseIsValid) { + *error = validationError; + } + + return responseIsValid; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + [self validateResponse:(NSHTTPURLResponse *)response data:data error:error]; + + return data; +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder { + self = [self init]; + if (!self) { + return nil; + } + + self.acceptableStatusCodes = [decoder decodeObjectOfClass:[NSIndexSet class] forKey:NSStringFromSelector(@selector(acceptableStatusCodes))]; + self.acceptableContentTypes = [decoder decodeObjectOfClass:[NSIndexSet class] forKey:NSStringFromSelector(@selector(acceptableContentTypes))]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:self.acceptableStatusCodes forKey:NSStringFromSelector(@selector(acceptableStatusCodes))]; + [coder encodeObject:self.acceptableContentTypes forKey:NSStringFromSelector(@selector(acceptableContentTypes))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFHTTPResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.acceptableStatusCodes = [self.acceptableStatusCodes copyWithZone:zone]; + serializer.acceptableContentTypes = [self.acceptableContentTypes copyWithZone:zone]; + + return serializer; +} + +@end + +#pragma mark - + +@implementation AFJSONResponseSerializer + ++ (instancetype)serializer { + return [self serializerWithReadingOptions:(NSJSONReadingOptions)0]; +} + ++ (instancetype)serializerWithReadingOptions:(NSJSONReadingOptions)readingOptions { + AFJSONResponseSerializer *serializer = [[self alloc] init]; + serializer.readingOptions = readingOptions; + + return serializer; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil]; + + return self; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + + // Workaround for behavior of Rails to return a single space for `head :ok` (a workaround for a bug in Safari), which is not interpreted as valid input by NSJSONSerialization. + // See https://github.com/rails/rails/issues/1742 + NSStringEncoding stringEncoding = self.stringEncoding; + if (response.textEncodingName) { + CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)response.textEncodingName); + if (encoding != kCFStringEncodingInvalidId) { + stringEncoding = CFStringConvertEncodingToNSStringEncoding(encoding); + } + } + + id responseObject = nil; + NSError *serializationError = nil; + @autoreleasepool { + NSString *responseString = [[NSString alloc] initWithData:data encoding:stringEncoding]; + if (responseString && ![responseString isEqualToString:@" "]) { + // Workaround for a bug in NSJSONSerialization when Unicode character escape codes are used instead of the actual character + // See http://stackoverflow.com/a/12843465/157142 + data = [responseString dataUsingEncoding:NSUTF8StringEncoding]; + + if (data) { + if ([data length] > 0) { + responseObject = [NSJSONSerialization JSONObjectWithData:data options:self.readingOptions error:&serializationError]; + } else { + return nil; + } + } else { + NSDictionary *userInfo = @{ + NSLocalizedDescriptionKey: NSLocalizedStringFromTable(@"Data failed decoding as a UTF-8 string", @"AFNetworking", nil), + NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@"Could not decode string: %@", @"AFNetworking", nil), responseString] + }; + + serializationError = [NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorCannotDecodeContentData userInfo:userInfo]; + } + } + } + + if (self.removesKeysWithNullValues && responseObject) { + responseObject = AFJSONObjectByRemovingKeysWithNullValues(responseObject, self.readingOptions); + } + + if (error) { + *error = AFErrorWithUnderlyingError(serializationError, *error); + } + + return responseObject; +} + +#pragma mark - NSSecureCoding + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.readingOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(readingOptions))] unsignedIntegerValue]; + self.removesKeysWithNullValues = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(removesKeysWithNullValues))] boolValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:@(self.readingOptions) forKey:NSStringFromSelector(@selector(readingOptions))]; + [coder encodeObject:@(self.removesKeysWithNullValues) forKey:NSStringFromSelector(@selector(removesKeysWithNullValues))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFJSONResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.readingOptions = self.readingOptions; + serializer.removesKeysWithNullValues = self.removesKeysWithNullValues; + + return serializer; +} + +@end + +#pragma mark - + +@implementation AFXMLParserResponseSerializer + ++ (instancetype)serializer { + AFXMLParserResponseSerializer *serializer = [[self alloc] init]; + + return serializer; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/xml", @"text/xml", nil]; + + return self; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSHTTPURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + + return [[NSXMLParser alloc] initWithData:data]; +} + +@end + +#pragma mark - + +#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED + +@implementation AFXMLDocumentResponseSerializer + ++ (instancetype)serializer { + return [self serializerWithXMLDocumentOptions:0]; +} + ++ (instancetype)serializerWithXMLDocumentOptions:(NSUInteger)mask { + AFXMLDocumentResponseSerializer *serializer = [[self alloc] init]; + serializer.options = mask; + + return serializer; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/xml", @"text/xml", nil]; + + return self; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + + NSError *serializationError = nil; + NSXMLDocument *document = [[NSXMLDocument alloc] initWithData:data options:self.options error:&serializationError]; + + if (error) { + *error = AFErrorWithUnderlyingError(serializationError, *error); + } + + return document; +} + +#pragma mark - NSSecureCoding + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.options = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(options))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:@(self.options) forKey:NSStringFromSelector(@selector(options))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFXMLDocumentResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.options = self.options; + + return serializer; +} + +@end + +#endif + +#pragma mark - + +@implementation AFPropertyListResponseSerializer + ++ (instancetype)serializer { + return [self serializerWithFormat:NSPropertyListXMLFormat_v1_0 readOptions:0]; +} + ++ (instancetype)serializerWithFormat:(NSPropertyListFormat)format + readOptions:(NSPropertyListReadOptions)readOptions +{ + AFPropertyListResponseSerializer *serializer = [[self alloc] init]; + serializer.format = format; + serializer.readOptions = readOptions; + + return serializer; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/x-plist", nil]; + + return self; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + + id responseObject; + NSError *serializationError = nil; + + if (data) { + responseObject = [NSPropertyListSerialization propertyListWithData:data options:self.readOptions format:NULL error:&serializationError]; + } + + if (error) { + *error = AFErrorWithUnderlyingError(serializationError, *error); + } + + return responseObject; +} + +#pragma mark - NSSecureCoding + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.format = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(format))] unsignedIntegerValue]; + self.readOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(readOptions))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:@(self.format) forKey:NSStringFromSelector(@selector(format))]; + [coder encodeObject:@(self.readOptions) forKey:NSStringFromSelector(@selector(readOptions))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFPropertyListResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.format = self.format; + serializer.readOptions = self.readOptions; + + return serializer; +} + +@end + +#pragma mark - + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +#import + +@interface UIImage (AFNetworkingSafeImageLoading) ++ (UIImage *)af_safeImageWithData:(NSData *)data; +@end + +static NSLock* imageLock = nil; + +@implementation UIImage (AFNetworkingSafeImageLoading) + ++ (UIImage *)af_safeImageWithData:(NSData *)data { + UIImage* image = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + imageLock = [[NSLock alloc] init]; + }); + + [imageLock lock]; + image = [UIImage imageWithData:data]; + [imageLock unlock]; + return image; +} + +@end + +static UIImage * AFImageWithDataAtScale(NSData *data, CGFloat scale) { + UIImage *image = [UIImage af_safeImageWithData:data]; + if (image.images) { + return image; + } + + return [[UIImage alloc] initWithCGImage:[image CGImage] scale:scale orientation:image.imageOrientation]; +} + +static UIImage * AFInflatedImageFromResponseWithDataAtScale(NSHTTPURLResponse *response, NSData *data, CGFloat scale) { + if (!data || [data length] == 0) { + return nil; + } + + CGImageRef imageRef = NULL; + CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data); + + if ([response.MIMEType isEqualToString:@"image/png"]) { + imageRef = CGImageCreateWithPNGDataProvider(dataProvider, NULL, true, kCGRenderingIntentDefault); + } else if ([response.MIMEType isEqualToString:@"image/jpeg"]) { + imageRef = CGImageCreateWithJPEGDataProvider(dataProvider, NULL, true, kCGRenderingIntentDefault); + + if (imageRef) { + CGColorSpaceRef imageColorSpace = CGImageGetColorSpace(imageRef); + CGColorSpaceModel imageColorSpaceModel = CGColorSpaceGetModel(imageColorSpace); + + // CGImageCreateWithJPEGDataProvider does not properly handle CMKY, so fall back to AFImageWithDataAtScale + if (imageColorSpaceModel == kCGColorSpaceModelCMYK) { + CGImageRelease(imageRef); + imageRef = NULL; + } + } + } + + CGDataProviderRelease(dataProvider); + + UIImage *image = AFImageWithDataAtScale(data, scale); + if (!imageRef) { + if (image.images || !image) { + return image; + } + + imageRef = CGImageCreateCopy([image CGImage]); + if (!imageRef) { + return nil; + } + } + + size_t width = CGImageGetWidth(imageRef); + size_t height = CGImageGetHeight(imageRef); + size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef); + + if (width * height > 1024 * 1024 || bitsPerComponent > 8) { + CGImageRelease(imageRef); + + return image; + } + + // CGImageGetBytesPerRow() calculates incorrectly in iOS 5.0, so defer to CGBitmapContextCreate + size_t bytesPerRow = 0; + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + CGColorSpaceModel colorSpaceModel = CGColorSpaceGetModel(colorSpace); + CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); + + if (colorSpaceModel == kCGColorSpaceModelRGB) { + uint32_t alpha = (bitmapInfo & kCGBitmapAlphaInfoMask); +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wassign-enum" + if (alpha == kCGImageAlphaNone) { + bitmapInfo &= ~kCGBitmapAlphaInfoMask; + bitmapInfo |= kCGImageAlphaNoneSkipFirst; + } else if (!(alpha == kCGImageAlphaNoneSkipFirst || alpha == kCGImageAlphaNoneSkipLast)) { + bitmapInfo &= ~kCGBitmapAlphaInfoMask; + bitmapInfo |= kCGImageAlphaPremultipliedFirst; + } +#pragma clang diagnostic pop + } + + CGContextRef context = CGBitmapContextCreate(NULL, width, height, bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo); + + CGColorSpaceRelease(colorSpace); + + if (!context) { + CGImageRelease(imageRef); + + return image; + } + + CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, width, height), imageRef); + CGImageRef inflatedImageRef = CGBitmapContextCreateImage(context); + + CGContextRelease(context); + + UIImage *inflatedImage = [[UIImage alloc] initWithCGImage:inflatedImageRef scale:scale orientation:image.imageOrientation]; + + CGImageRelease(inflatedImageRef); + CGImageRelease(imageRef); + + return inflatedImage; +} +#endif + + +@implementation AFImageResponseSerializer + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"image/tiff", @"image/jpeg", @"image/gif", @"image/png", @"image/ico", @"image/x-icon", @"image/bmp", @"image/x-bmp", @"image/x-xbitmap", @"image/x-win-bitmap", nil]; + +#if TARGET_OS_IOS + self.imageScale = [[UIScreen mainScreen] scale]; + self.automaticallyInflatesResponseImage = YES; +#elif TARGET_OS_WATCH + self.imageScale = [[WKInterfaceDevice currentDevice] screenScale]; + self.automaticallyInflatesResponseImage = YES; +#endif + + return self; +} + +#pragma mark - AFURLResponseSerializer + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + if (self.automaticallyInflatesResponseImage) { + return AFInflatedImageFromResponseWithDataAtScale((NSHTTPURLResponse *)response, data, self.imageScale); + } else { + return AFImageWithDataAtScale(data, self.imageScale); + } +#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) + // Ensure that the image is set to it's correct pixel width and height + NSBitmapImageRep *bitimage = [[NSBitmapImageRep alloc] initWithData:data]; + NSImage *image = [[NSImage alloc] initWithSize:NSMakeSize([bitimage pixelsWide], [bitimage pixelsHigh])]; + [image addRepresentation:bitimage]; + + return image; +#endif + + return nil; +} + +#pragma mark - NSSecureCoding + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + NSNumber *imageScale = [decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(imageScale))]; +#if CGFLOAT_IS_DOUBLE + self.imageScale = [imageScale doubleValue]; +#else + self.imageScale = [imageScale floatValue]; +#endif + + self.automaticallyInflatesResponseImage = [decoder decodeBoolForKey:NSStringFromSelector(@selector(automaticallyInflatesResponseImage))]; +#endif + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + [coder encodeObject:@(self.imageScale) forKey:NSStringFromSelector(@selector(imageScale))]; + [coder encodeBool:self.automaticallyInflatesResponseImage forKey:NSStringFromSelector(@selector(automaticallyInflatesResponseImage))]; +#endif +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFImageResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + serializer.imageScale = self.imageScale; + serializer.automaticallyInflatesResponseImage = self.automaticallyInflatesResponseImage; +#endif + + return serializer; +} + +@end + +#pragma mark - + +@interface AFCompoundResponseSerializer () +@property (readwrite, nonatomic, copy) NSArray *responseSerializers; +@end + +@implementation AFCompoundResponseSerializer + ++ (instancetype)compoundSerializerWithResponseSerializers:(NSArray *)responseSerializers { + AFCompoundResponseSerializer *serializer = [[self alloc] init]; + serializer.responseSerializers = responseSerializers; + + return serializer; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + for (id serializer in self.responseSerializers) { + if (![serializer isKindOfClass:[AFHTTPResponseSerializer class]]) { + continue; + } + + NSError *serializerError = nil; + id responseObject = [serializer responseObjectForResponse:response data:data error:&serializerError]; + if (responseObject) { + if (error) { + *error = AFErrorWithUnderlyingError(serializerError, *error); + } + + return responseObject; + } + } + + return [super responseObjectForResponse:response data:data error:error]; +} + +#pragma mark - NSSecureCoding + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.responseSerializers = [decoder decodeObjectOfClass:[NSArray class] forKey:NSStringFromSelector(@selector(responseSerializers))]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:self.responseSerializers forKey:NSStringFromSelector(@selector(responseSerializers))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFCompoundResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.responseSerializers = self.responseSerializers; + + return serializer; +} + +@end diff --git a/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h b/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h new file mode 100644 index 0000000..70e4ec9 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h @@ -0,0 +1,554 @@ +// AFURLSessionManager.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import + +#import "AFURLResponseSerialization.h" +#import "AFURLRequestSerialization.h" +#import "AFSecurityPolicy.h" +#if !TARGET_OS_WATCH +#import "AFNetworkReachabilityManager.h" +#endif + +#ifndef NS_DESIGNATED_INITIALIZER +#if __has_attribute(objc_designated_initializer) +#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) +#else +#define NS_DESIGNATED_INITIALIZER +#endif +#endif + +/** + `AFURLSessionManager` creates and manages an `NSURLSession` object based on a specified `NSURLSessionConfiguration` object, which conforms to ``, ``, ``, and ``. + + ## Subclassing Notes + + This is the base class for `AFHTTPSessionManager`, which adds functionality specific to making HTTP requests. If you are looking to extend `AFURLSessionManager` specifically for HTTP, consider subclassing `AFHTTPSessionManager` instead. + + ## NSURLSession & NSURLSessionTask Delegate Methods + + `AFURLSessionManager` implements the following delegate methods: + + ### `NSURLSessionDelegate` + + - `URLSession:didBecomeInvalidWithError:` + - `URLSession:didReceiveChallenge:completionHandler:` + - `URLSessionDidFinishEventsForBackgroundURLSession:` + + ### `NSURLSessionTaskDelegate` + + - `URLSession:willPerformHTTPRedirection:newRequest:completionHandler:` + - `URLSession:task:didReceiveChallenge:completionHandler:` + - `URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:` + - `URLSession:task:didCompleteWithError:` + + ### `NSURLSessionDataDelegate` + + - `URLSession:dataTask:didReceiveResponse:completionHandler:` + - `URLSession:dataTask:didBecomeDownloadTask:` + - `URLSession:dataTask:didReceiveData:` + - `URLSession:dataTask:willCacheResponse:completionHandler:` + + ### `NSURLSessionDownloadDelegate` + + - `URLSession:downloadTask:didFinishDownloadingToURL:` + - `URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesWritten:totalBytesExpectedToWrite:` + - `URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:` + + If any of these methods are overridden in a subclass, they _must_ call the `super` implementation first. + + ## Network Reachability Monitoring + + Network reachability status and change monitoring is available through the `reachabilityManager` property. Applications may choose to monitor network reachability conditions in order to prevent or suspend any outbound requests. See `AFNetworkReachabilityManager` for more details. + + ## NSCoding Caveats + + - Encoded managers do not include any block properties. Be sure to set delegate callback blocks when using `-initWithCoder:` or `NSKeyedUnarchiver`. + + ## NSCopying Caveats + + - `-copy` and `-copyWithZone:` return a new manager with a new `NSURLSession` created from the configuration of the original. + - Operation copies do not include any delegate callback blocks, as they often strongly captures a reference to `self`, which would otherwise have the unintuitive side-effect of pointing to the _original_ session manager when copied. + + @warning Managers for background sessions must be owned for the duration of their use. This can be accomplished by creating an application-wide or shared singleton instance. + */ + +NS_ASSUME_NONNULL_BEGIN + +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) || TARGET_OS_WATCH + +@interface AFURLSessionManager : NSObject + +/** + The managed session. + */ +@property (readonly, nonatomic, strong) NSURLSession *session; + +/** + The operation queue on which delegate callbacks are run. + */ +@property (readonly, nonatomic, strong) NSOperationQueue *operationQueue; + +/** + Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an instance of `AFJSONResponseSerializer`. + + @warning `responseSerializer` must not be `nil`. + */ +@property (nonatomic, strong) id responseSerializer; + +///------------------------------- +/// @name Managing Security Policy +///------------------------------- + +/** + The security policy used by created request operations to evaluate server trust for secure connections. `AFURLSessionManager` uses the `defaultPolicy` unless otherwise specified. + */ +@property (nonatomic, strong) AFSecurityPolicy *securityPolicy; + +#if !TARGET_OS_WATCH +///-------------------------------------- +/// @name Monitoring Network Reachability +///-------------------------------------- + +/** + The network reachability manager. `AFURLSessionManager` uses the `sharedManager` by default. + */ +@property (readwrite, nonatomic, strong) AFNetworkReachabilityManager *reachabilityManager; +#endif + +///---------------------------- +/// @name Getting Session Tasks +///---------------------------- + +/** + The data, upload, and download tasks currently run by the managed session. + */ +@property (readonly, nonatomic, strong) NSArray *tasks; + +/** + The data tasks currently run by the managed session. + */ +@property (readonly, nonatomic, strong) NSArray *dataTasks; + +/** + The upload tasks currently run by the managed session. + */ +@property (readonly, nonatomic, strong) NSArray *uploadTasks; + +/** + The download tasks currently run by the managed session. + */ +@property (readonly, nonatomic, strong) NSArray *downloadTasks; + +///------------------------------- +/// @name Managing Callback Queues +///------------------------------- + +/** + The dispatch queue for `completionBlock`. If `NULL` (default), the main queue is used. + */ +#if OS_OBJECT_HAVE_OBJC_SUPPORT +@property (nonatomic, strong, nullable) dispatch_queue_t completionQueue; +#else +@property (nonatomic, assign, nullable) dispatch_queue_t completionQueue; +#endif + +/** + The dispatch group for `completionBlock`. If `NULL` (default), a private dispatch group is used. + */ +#if OS_OBJECT_HAVE_OBJC_SUPPORT +@property (nonatomic, strong, nullable) dispatch_group_t completionGroup; +#else +@property (nonatomic, assign, nullable) dispatch_group_t completionGroup; +#endif + +///--------------------------------- +/// @name Working Around System Bugs +///--------------------------------- + +/** + Whether to attempt to retry creation of upload tasks for background sessions when initial call returns `nil`. `NO` by default. + + @bug As of iOS 7.0, there is a bug where upload tasks created for background tasks are sometimes `nil`. As a workaround, if this property is `YES`, AFNetworking will follow Apple's recommendation to try creating the task again. + + @see https://github.com/AFNetworking/AFNetworking/issues/1675 + */ +@property (nonatomic, assign) BOOL attemptsToRecreateUploadTasksForBackgroundSessions; + +///--------------------- +/// @name Initialization +///--------------------- + +/** + Creates and returns a manager for a session created with the specified configuration. This is the designated initializer. + + @param configuration The configuration used to create the managed session. + + @return A manager for a newly-created session. + */ +- (instancetype)initWithSessionConfiguration:(nullable NSURLSessionConfiguration *)configuration NS_DESIGNATED_INITIALIZER; + +/** + Invalidates the managed session, optionally canceling pending tasks. + + @param cancelPendingTasks Whether or not to cancel pending tasks. + */ +- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks; + +///------------------------- +/// @name Running Data Tasks +///------------------------- + +/** + Creates an `NSURLSessionDataTask` with the specified request. + + @param request The HTTP request for the request. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + */ +- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request + completionHandler:(nullable void (^)(NSURLResponse *response, id __nullable responseObject, NSError * __nullable error))completionHandler; + +///--------------------------- +/// @name Running Upload Tasks +///--------------------------- + +/** + Creates an `NSURLSessionUploadTask` with the specified request for a local file. + + @param request The HTTP request for the request. + @param fileURL A URL to the local file to be uploaded. + @param progress A progress object monitoring the current upload progress. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + + @see `attemptsToRecreateUploadTasksForBackgroundSessions` + */ +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromFile:(NSURL *)fileURL + progress:(NSProgress * __nullable __autoreleasing * __nullable)progress + completionHandler:(nullable void (^)(NSURLResponse *response, id __nullable responseObject, NSError * __nullable error))completionHandler; + +/** + Creates an `NSURLSessionUploadTask` with the specified request for an HTTP body. + + @param request The HTTP request for the request. + @param bodyData A data object containing the HTTP body to be uploaded. + @param progress A progress object monitoring the current upload progress. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + */ +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromData:(nullable NSData *)bodyData + progress:(NSProgress * __nullable __autoreleasing * __nullable)progress + completionHandler:(nullable void (^)(NSURLResponse *response, id __nullable responseObject, NSError * __nullable error))completionHandler; + +/** + Creates an `NSURLSessionUploadTask` with the specified streaming request. + + @param request The HTTP request for the request. + @param progress A progress object monitoring the current upload progress. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + */ +- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request + progress:(NSProgress * __nullable __autoreleasing * __nullable)progress + completionHandler:(nullable void (^)(NSURLResponse *response, id __nullable responseObject, NSError * __nullable error))completionHandler; + +///----------------------------- +/// @name Running Download Tasks +///----------------------------- + +/** + Creates an `NSURLSessionDownloadTask` with the specified request. + + @param request The HTTP request for the request. + @param progress A progress object monitoring the current download progress. + @param destination A block object to be executed in order to determine the destination of the downloaded file. This block takes two arguments, the target path & the server response, and returns the desired file URL of the resulting download. The temporary file used during the download will be automatically deleted after being moved to the returned URL. + @param completionHandler A block to be executed when a task finishes. This block has no return value and takes three arguments: the server response, the path of the downloaded file, and the error describing the network or parsing error that occurred, if any. + + @warning If using a background `NSURLSessionConfiguration` on iOS, these blocks will be lost when the app is terminated. Background sessions may prefer to use `-setDownloadTaskDidFinishDownloadingBlock:` to specify the URL for saving the downloaded file, rather than the destination block of this method. + */ +- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request + progress:(NSProgress * __nullable __autoreleasing * __nullable)progress + destination:(nullable NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(nullable void (^)(NSURLResponse *response, NSURL * __nullable filePath, NSError * __nullable error))completionHandler; + +/** + Creates an `NSURLSessionDownloadTask` with the specified resume data. + + @param resumeData The data used to resume downloading. + @param progress A progress object monitoring the current download progress. + @param destination A block object to be executed in order to determine the destination of the downloaded file. This block takes two arguments, the target path & the server response, and returns the desired file URL of the resulting download. The temporary file used during the download will be automatically deleted after being moved to the returned URL. + @param completionHandler A block to be executed when a task finishes. This block has no return value and takes three arguments: the server response, the path of the downloaded file, and the error describing the network or parsing error that occurred, if any. + */ +- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData + progress:(NSProgress * __nullable __autoreleasing * __nullable)progress + destination:(nullable NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(nullable void (^)(NSURLResponse *response, NSURL * __nullable filePath, NSError * __nullable error))completionHandler; + +///--------------------------------- +/// @name Getting Progress for Tasks +///--------------------------------- + +/** + Returns the upload progress of the specified task. + + @param uploadTask The session upload task. Must not be `nil`. + + @return An `NSProgress` object reporting the upload progress of a task, or `nil` if the progress is unavailable. + */ +- (nullable NSProgress *)uploadProgressForTask:(NSURLSessionUploadTask *)uploadTask; + +/** + Returns the download progress of the specified task. + + @param downloadTask The session download task. Must not be `nil`. + + @return An `NSProgress` object reporting the download progress of a task, or `nil` if the progress is unavailable. + */ +- (nullable NSProgress *)downloadProgressForTask:(NSURLSessionDownloadTask *)downloadTask; + +///----------------------------------------- +/// @name Setting Session Delegate Callbacks +///----------------------------------------- + +/** + Sets a block to be executed when the managed session becomes invalid, as handled by the `NSURLSessionDelegate` method `URLSession:didBecomeInvalidWithError:`. + + @param block A block object to be executed when the managed session becomes invalid. The block has no return value, and takes two arguments: the session, and the error related to the cause of invalidation. + */ +- (void)setSessionDidBecomeInvalidBlock:(nullable void (^)(NSURLSession *session, NSError *error))block; + +/** + Sets a block to be executed when a connection level authentication challenge has occurred, as handled by the `NSURLSessionDelegate` method `URLSession:didReceiveChallenge:completionHandler:`. + + @param block A block object to be executed when a connection level authentication challenge has occurred. The block returns the disposition of the authentication challenge, and takes three arguments: the session, the authentication challenge, and a pointer to the credential that should be used to resolve the challenge. + */ +- (void)setSessionDidReceiveAuthenticationChallengeBlock:(nullable NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __nullable __autoreleasing * __nullable credential))block; + +///-------------------------------------- +/// @name Setting Task Delegate Callbacks +///-------------------------------------- + +/** + Sets a block to be executed when a task requires a new request body stream to send to the remote server, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:needNewBodyStream:`. + + @param block A block object to be executed when a task requires a new request body stream. + */ +- (void)setTaskNeedNewBodyStreamBlock:(nullable NSInputStream * (^)(NSURLSession *session, NSURLSessionTask *task))block; + +/** + Sets a block to be executed when an HTTP request is attempting to perform a redirection to a different URL, as handled by the `NSURLSessionTaskDelegate` method `URLSession:willPerformHTTPRedirection:newRequest:completionHandler:`. + + @param block A block object to be executed when an HTTP request is attempting to perform a redirection to a different URL. The block returns the request to be made for the redirection, and takes four arguments: the session, the task, the redirection response, and the request corresponding to the redirection response. + */ +- (void)setTaskWillPerformHTTPRedirectionBlock:(nullable NSURLRequest * (^)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request))block; + +/** + Sets a block to be executed when a session task has received a request specific authentication challenge, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didReceiveChallenge:completionHandler:`. + + @param block A block object to be executed when a session task has received a request specific authentication challenge. The block returns the disposition of the authentication challenge, and takes four arguments: the session, the task, the authentication challenge, and a pointer to the credential that should be used to resolve the challenge. + */ +- (void)setTaskDidReceiveAuthenticationChallengeBlock:(nullable NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __nullable __autoreleasing * __nullable credential))block; + +/** + Sets a block to be executed periodically to track upload progress, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:`. + + @param block A block object to be called when an undetermined number of bytes have been uploaded to the server. This block has no return value and takes five arguments: the session, the task, the number of bytes written since the last time the upload progress block was called, the total bytes written, and the total bytes expected to be written during the request, as initially determined by the length of the HTTP body. This block may be called multiple times, and will execute on the main thread. + */ +- (void)setTaskDidSendBodyDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend))block; + +/** + Sets a block to be executed as the last message related to a specific task, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didCompleteWithError:`. + + @param block A block object to be executed when a session task is completed. The block has no return value, and takes three arguments: the session, the task, and any error that occurred in the process of executing the task. + */ +- (void)setTaskDidCompleteBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, NSError * __nullable error))block; + +///------------------------------------------- +/// @name Setting Data Task Delegate Callbacks +///------------------------------------------- + +/** + Sets a block to be executed when a data task has received a response, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didReceiveResponse:completionHandler:`. + + @param block A block object to be executed when a data task has received a response. The block returns the disposition of the session response, and takes three arguments: the session, the data task, and the received response. + */ +- (void)setDataTaskDidReceiveResponseBlock:(nullable NSURLSessionResponseDisposition (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response))block; + +/** + Sets a block to be executed when a data task has become a download task, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didBecomeDownloadTask:`. + + @param block A block object to be executed when a data task has become a download task. The block has no return value, and takes three arguments: the session, the data task, and the download task it has become. + */ +- (void)setDataTaskDidBecomeDownloadTaskBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask))block; + +/** + Sets a block to be executed when a data task receives data, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didReceiveData:`. + + @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the session, the data task, and the data received. This block may be called multiple times, and will execute on the session manager operation queue. + */ +- (void)setDataTaskDidReceiveDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data))block; + +/** + Sets a block to be executed to determine the caching behavior of a data task, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:willCacheResponse:completionHandler:`. + + @param block A block object to be executed to determine the caching behavior of a data task. The block returns the response to cache, and takes three arguments: the session, the data task, and the proposed cached URL response. + */ +- (void)setDataTaskWillCacheResponseBlock:(nullable NSCachedURLResponse * (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse))block; + +/** + Sets a block to be executed once all messages enqueued for a session have been delivered, as handled by the `NSURLSessionDataDelegate` method `URLSessionDidFinishEventsForBackgroundURLSession:`. + + @param block A block object to be executed once all messages enqueued for a session have been delivered. The block has no return value and takes a single argument: the session. + */ +- (void)setDidFinishEventsForBackgroundURLSessionBlock:(nullable void (^)(NSURLSession *session))block; + +///----------------------------------------------- +/// @name Setting Download Task Delegate Callbacks +///----------------------------------------------- + +/** + Sets a block to be executed when a download task has completed a download, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didFinishDownloadingToURL:`. + + @param block A block object to be executed when a download task has completed. The block returns the URL the download should be moved to, and takes three arguments: the session, the download task, and the temporary location of the downloaded file. If the file manager encounters an error while attempting to move the temporary file to the destination, an `AFURLSessionDownloadTaskDidFailToMoveFileNotification` will be posted, with the download task as its object, and the user info of the error. + */ +- (void)setDownloadTaskDidFinishDownloadingBlock:(nullable NSURL * (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location))block; + +/** + Sets a block to be executed periodically to track download progress, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesWritten:totalBytesExpectedToWrite:`. + + @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes five arguments: the session, the download task, the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the session manager operation queue. + */ +- (void)setDownloadTaskDidWriteDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite))block; + +/** + Sets a block to be executed when a download task has been resumed, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:`. + + @param block A block object to be executed when a download task has been resumed. The block has no return value and takes four arguments: the session, the download task, the file offset of the resumed download, and the total number of bytes expected to be downloaded. + */ +- (void)setDownloadTaskDidResumeBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes))block; + +@end + +#endif + +///-------------------- +/// @name Notifications +///-------------------- + +/** + Posted when a task begins executing. + + @deprecated Use `AFNetworkingTaskDidResumeNotification` instead. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidStartNotification DEPRECATED_ATTRIBUTE; + +/** + Posted when a task resumes. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidResumeNotification; + +/** + Posted when a task finishes executing. Includes a userInfo dictionary with additional information about the task. + + @deprecated Use `AFNetworkingTaskDidCompleteNotification` instead. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidFinishNotification DEPRECATED_ATTRIBUTE; + +/** + Posted when a task finishes executing. Includes a userInfo dictionary with additional information about the task. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteNotification; + +/** + Posted when a task suspends its execution. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidSuspendNotification; + +/** + Posted when a session is invalidated. + */ +FOUNDATION_EXPORT NSString * const AFURLSessionDidInvalidateNotification; + +/** + Posted when a session download task encountered an error when moving the temporary download file to a specified destination. + */ +FOUNDATION_EXPORT NSString * const AFURLSessionDownloadTaskDidFailToMoveFileNotification; + +/** + The raw response data of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if response data exists for the task. + + @deprecated Use `AFNetworkingTaskDidCompleteResponseDataKey` instead. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidFinishResponseDataKey DEPRECATED_ATTRIBUTE; + +/** + The raw response data of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if response data exists for the task. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteResponseDataKey; + +/** + The serialized response object of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the response was serialized. + + @deprecated Use `AFNetworkingTaskDidCompleteSerializedResponseKey` instead. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidFinishSerializedResponseKey DEPRECATED_ATTRIBUTE; + +/** + The serialized response object of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the response was serialized. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteSerializedResponseKey; + +/** + The response serializer used to serialize the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the task has an associated response serializer. + + @deprecated Use `AFNetworkingTaskDidCompleteResponseSerializerKey` instead. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidFinishResponseSerializerKey DEPRECATED_ATTRIBUTE; + +/** + The response serializer used to serialize the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the task has an associated response serializer. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteResponseSerializerKey; + +/** + The file path associated with the download task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an the response data has been stored directly to disk. + + @deprecated Use `AFNetworkingTaskDidCompleteAssetPathKey` instead. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidFinishAssetPathKey DEPRECATED_ATTRIBUTE; + +/** + The file path associated with the download task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an the response data has been stored directly to disk. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteAssetPathKey; + +/** + Any error associated with the task, or the serialization of the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an error exists. + + @deprecated Use `AFNetworkingTaskDidCompleteErrorKey` instead. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidFinishErrorKey DEPRECATED_ATTRIBUTE; + +/** + Any error associated with the task, or the serialization of the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an error exists. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteErrorKey; + +NS_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m b/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m new file mode 100644 index 0000000..eb28959 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m @@ -0,0 +1,1171 @@ +// AFURLSessionManager.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import "AFURLSessionManager.h" +#import + +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) + +static dispatch_queue_t url_session_manager_creation_queue() { + static dispatch_queue_t af_url_session_manager_creation_queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_url_session_manager_creation_queue = dispatch_queue_create("com.alamofire.networking.session.manager.creation", DISPATCH_QUEUE_SERIAL); + }); + + return af_url_session_manager_creation_queue; +} + +static dispatch_queue_t url_session_manager_processing_queue() { + static dispatch_queue_t af_url_session_manager_processing_queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_url_session_manager_processing_queue = dispatch_queue_create("com.alamofire.networking.session.manager.processing", DISPATCH_QUEUE_CONCURRENT); + }); + + return af_url_session_manager_processing_queue; +} + +static dispatch_group_t url_session_manager_completion_group() { + static dispatch_group_t af_url_session_manager_completion_group; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_url_session_manager_completion_group = dispatch_group_create(); + }); + + return af_url_session_manager_completion_group; +} + +NSString * const AFNetworkingTaskDidResumeNotification = @"com.alamofire.networking.task.resume"; +NSString * const AFNetworkingTaskDidCompleteNotification = @"com.alamofire.networking.task.complete"; +NSString * const AFNetworkingTaskDidSuspendNotification = @"com.alamofire.networking.task.suspend"; +NSString * const AFURLSessionDidInvalidateNotification = @"com.alamofire.networking.session.invalidate"; +NSString * const AFURLSessionDownloadTaskDidFailToMoveFileNotification = @"com.alamofire.networking.session.download.file-manager-error"; + +NSString * const AFNetworkingTaskDidStartNotification = @"com.alamofire.networking.task.resume"; // Deprecated +NSString * const AFNetworkingTaskDidFinishNotification = @"com.alamofire.networking.task.complete"; // Deprecated + +NSString * const AFNetworkingTaskDidCompleteSerializedResponseKey = @"com.alamofire.networking.task.complete.serializedresponse"; +NSString * const AFNetworkingTaskDidCompleteResponseSerializerKey = @"com.alamofire.networking.task.complete.responseserializer"; +NSString * const AFNetworkingTaskDidCompleteResponseDataKey = @"com.alamofire.networking.complete.finish.responsedata"; +NSString * const AFNetworkingTaskDidCompleteErrorKey = @"com.alamofire.networking.task.complete.error"; +NSString * const AFNetworkingTaskDidCompleteAssetPathKey = @"com.alamofire.networking.task.complete.assetpath"; + +NSString * const AFNetworkingTaskDidFinishSerializedResponseKey = @"com.alamofire.networking.task.complete.serializedresponse"; // Deprecated +NSString * const AFNetworkingTaskDidFinishResponseSerializerKey = @"com.alamofire.networking.task.complete.responseserializer"; // Deprecated +NSString * const AFNetworkingTaskDidFinishResponseDataKey = @"com.alamofire.networking.complete.finish.responsedata"; // Deprecated +NSString * const AFNetworkingTaskDidFinishErrorKey = @"com.alamofire.networking.task.complete.error"; // Deprecated +NSString * const AFNetworkingTaskDidFinishAssetPathKey = @"com.alamofire.networking.task.complete.assetpath"; // Deprecated + +static NSString * const AFURLSessionManagerLockName = @"com.alamofire.networking.session.manager.lock"; + +static NSUInteger const AFMaximumNumberOfAttemptsToRecreateBackgroundSessionUploadTask = 3; + +static void * AFTaskStateChangedContext = &AFTaskStateChangedContext; + +typedef void (^AFURLSessionDidBecomeInvalidBlock)(NSURLSession *session, NSError *error); +typedef NSURLSessionAuthChallengeDisposition (^AFURLSessionDidReceiveAuthenticationChallengeBlock)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential); + +typedef NSURLRequest * (^AFURLSessionTaskWillPerformHTTPRedirectionBlock)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request); +typedef NSURLSessionAuthChallengeDisposition (^AFURLSessionTaskDidReceiveAuthenticationChallengeBlock)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential); +typedef void (^AFURLSessionDidFinishEventsForBackgroundURLSessionBlock)(NSURLSession *session); + +typedef NSInputStream * (^AFURLSessionTaskNeedNewBodyStreamBlock)(NSURLSession *session, NSURLSessionTask *task); +typedef void (^AFURLSessionTaskDidSendBodyDataBlock)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend); +typedef void (^AFURLSessionTaskDidCompleteBlock)(NSURLSession *session, NSURLSessionTask *task, NSError *error); + +typedef NSURLSessionResponseDisposition (^AFURLSessionDataTaskDidReceiveResponseBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response); +typedef void (^AFURLSessionDataTaskDidBecomeDownloadTaskBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask); +typedef void (^AFURLSessionDataTaskDidReceiveDataBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data); +typedef NSCachedURLResponse * (^AFURLSessionDataTaskWillCacheResponseBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse); + +typedef NSURL * (^AFURLSessionDownloadTaskDidFinishDownloadingBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location); +typedef void (^AFURLSessionDownloadTaskDidWriteDataBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite); +typedef void (^AFURLSessionDownloadTaskDidResumeBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes); + +typedef void (^AFURLSessionTaskCompletionHandler)(NSURLResponse *response, id responseObject, NSError *error); + +#pragma mark - + +@interface AFURLSessionManagerTaskDelegate : NSObject +@property (nonatomic, weak) AFURLSessionManager *manager; +@property (nonatomic, strong) NSMutableData *mutableData; +@property (nonatomic, strong) NSProgress *progress; +@property (nonatomic, copy) NSURL *downloadFileURL; +@property (nonatomic, copy) AFURLSessionDownloadTaskDidFinishDownloadingBlock downloadTaskDidFinishDownloading; +@property (nonatomic, copy) AFURLSessionTaskCompletionHandler completionHandler; +@end + +@implementation AFURLSessionManagerTaskDelegate + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.mutableData = [NSMutableData data]; + + self.progress = [NSProgress progressWithTotalUnitCount:0]; + + return self; +} + +#pragma mark - NSURLSessionTaskDelegate + +- (void)URLSession:(__unused NSURLSession *)session + task:(__unused NSURLSessionTask *)task + didSendBodyData:(__unused int64_t)bytesSent + totalBytesSent:(int64_t)totalBytesSent +totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend +{ + self.progress.totalUnitCount = totalBytesExpectedToSend; + self.progress.completedUnitCount = totalBytesSent; +} + +- (void)URLSession:(__unused NSURLSession *)session + task:(NSURLSessionTask *)task +didCompleteWithError:(NSError *)error +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + __strong AFURLSessionManager *manager = self.manager; + + __block id responseObject = nil; + + __block NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; + userInfo[AFNetworkingTaskDidCompleteResponseSerializerKey] = manager.responseSerializer; + + //Performance Improvement from #2672 + NSData *data = nil; + if (self.mutableData) { + data = [self.mutableData copy]; + //We no longer need the reference, so nil it out to gain back some memory. + self.mutableData = nil; + } + + if (self.downloadFileURL) { + userInfo[AFNetworkingTaskDidCompleteAssetPathKey] = self.downloadFileURL; + } else if (data) { + userInfo[AFNetworkingTaskDidCompleteResponseDataKey] = data; + } + + if (error) { + userInfo[AFNetworkingTaskDidCompleteErrorKey] = error; + + dispatch_group_async(manager.completionGroup ?: url_session_manager_completion_group(), manager.completionQueue ?: dispatch_get_main_queue(), ^{ + if (self.completionHandler) { + self.completionHandler(task.response, responseObject, error); + } + + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidCompleteNotification object:task userInfo:userInfo]; + }); + }); + } else { + dispatch_async(url_session_manager_processing_queue(), ^{ + NSError *serializationError = nil; + responseObject = [manager.responseSerializer responseObjectForResponse:task.response data:data error:&serializationError]; + + if (self.downloadFileURL) { + responseObject = self.downloadFileURL; + } + + if (responseObject) { + userInfo[AFNetworkingTaskDidCompleteSerializedResponseKey] = responseObject; + } + + if (serializationError) { + userInfo[AFNetworkingTaskDidCompleteErrorKey] = serializationError; + } + + dispatch_group_async(manager.completionGroup ?: url_session_manager_completion_group(), manager.completionQueue ?: dispatch_get_main_queue(), ^{ + if (self.completionHandler) { + self.completionHandler(task.response, responseObject, serializationError); + } + + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidCompleteNotification object:task userInfo:userInfo]; + }); + }); + }); + } +#pragma clang diagnostic pop +} + +#pragma mark - NSURLSessionDataTaskDelegate + +- (void)URLSession:(__unused NSURLSession *)session + dataTask:(__unused NSURLSessionDataTask *)dataTask + didReceiveData:(NSData *)data +{ + [self.mutableData appendData:data]; +} + +#pragma mark - NSURLSessionDownloadTaskDelegate + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask +didFinishDownloadingToURL:(NSURL *)location +{ + NSError *fileManagerError = nil; + self.downloadFileURL = nil; + + if (self.downloadTaskDidFinishDownloading) { + self.downloadFileURL = self.downloadTaskDidFinishDownloading(session, downloadTask, location); + if (self.downloadFileURL) { + [[NSFileManager defaultManager] moveItemAtURL:location toURL:self.downloadFileURL error:&fileManagerError]; + + if (fileManagerError) { + [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidFailToMoveFileNotification object:downloadTask userInfo:fileManagerError.userInfo]; + } + } + } +} + +- (void)URLSession:(__unused NSURLSession *)session + downloadTask:(__unused NSURLSessionDownloadTask *)downloadTask + didWriteData:(__unused int64_t)bytesWritten + totalBytesWritten:(int64_t)totalBytesWritten +totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite +{ + self.progress.totalUnitCount = totalBytesExpectedToWrite; + self.progress.completedUnitCount = totalBytesWritten; +} + +- (void)URLSession:(__unused NSURLSession *)session + downloadTask:(__unused NSURLSessionDownloadTask *)downloadTask + didResumeAtOffset:(int64_t)fileOffset +expectedTotalBytes:(int64_t)expectedTotalBytes { + self.progress.totalUnitCount = expectedTotalBytes; + self.progress.completedUnitCount = fileOffset; +} + +@end + +#pragma mark - + +/** + * A workaround for issues related to key-value observing the `state` of an `NSURLSessionTask`. + * + * See: + * - https://github.com/AFNetworking/AFNetworking/issues/1477 + * - https://github.com/AFNetworking/AFNetworking/issues/2638 + * - https://github.com/AFNetworking/AFNetworking/pull/2702 + */ + +static inline void af_swizzleSelector(Class class, SEL originalSelector, SEL swizzledSelector) { + Method originalMethod = class_getInstanceMethod(class, originalSelector); + Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector); + method_exchangeImplementations(originalMethod, swizzledMethod); +} + +static inline BOOL af_addMethod(Class class, SEL selector, Method method) { + return class_addMethod(class, selector, method_getImplementation(method), method_getTypeEncoding(method)); +} + +static NSString * const AFNSURLSessionTaskDidResumeNotification = @"com.alamofire.networking.nsurlsessiontask.resume"; +static NSString * const AFNSURLSessionTaskDidSuspendNotification = @"com.alamofire.networking.nsurlsessiontask.suspend"; + +@interface _AFURLSessionTaskSwizzling : NSObject + +@end + +@implementation _AFURLSessionTaskSwizzling + ++ (void)load { + /** + WARNING: Trouble Ahead + https://github.com/AFNetworking/AFNetworking/pull/2702 + */ + + if (NSClassFromString(@"NSURLSessionTask")) { + /** + iOS 7 and iOS 8 differ in NSURLSessionTask implementation, which makes the next bit of code a bit tricky. + Many Unit Tests have been built to validate as much of this behavior has possible. + Here is what we know: + - NSURLSessionTasks are implemented with class clusters, meaning the class you request from the API isn't actually the type of class you will get back. + - Simply referencing `[NSURLSessionTask class]` will not work. You need to ask an `NSURLSession` to actually create an object, and grab the class from there. + - On iOS 7, `localDataTask` is a `__NSCFLocalDataTask`, which inherits from `__NSCFLocalSessionTask`, which inherits from `__NSCFURLSessionTask`. + - On iOS 8, `localDataTask` is a `__NSCFLocalDataTask`, which inherits from `__NSCFLocalSessionTask`, which inherits from `NSURLSessionTask`. + - On iOS 7, `__NSCFLocalSessionTask` and `__NSCFURLSessionTask` are the only two classes that have their own implementations of `resume` and `suspend`, and `__NSCFLocalSessionTask` DOES NOT CALL SUPER. This means both classes need to be swizzled. + - On iOS 8, `NSURLSessionTask` is the only class that implements `resume` and `suspend`. This means this is the only class that needs to be swizzled. + - Because `NSURLSessionTask` is not involved in the class hierarchy for every version of iOS, its easier to add the swizzled methods to a dummy class and manage them there. + + Some Assumptions: + - No implementations of `resume` or `suspend` call super. If this were to change in a future version of iOS, we'd need to handle it. + - No background task classes override `resume` or `suspend` + + The current solution: + 1) Grab an instance of `__NSCFLocalDataTask` by asking an instance of `NSURLSession` for a data task. + 2) Grab a pointer to the original implementation of `af_resume` + 3) Check to see if the current class has an implementation of resume. If so, continue to step 4. + 4) Grab the super class of the current class. + 5) Grab a pointer for the current class to the current implementation of `resume`. + 6) Grab a pointer for the super class to the current implementation of `resume`. + 7) If the current class implementation of `resume` is not equal to the super class implementation of `resume` AND the current implementation of `resume` is not equal to the original implementation of `af_resume`, THEN swizzle the methods + 8) Set the current class to the super class, and repeat steps 3-8 + */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnonnull" + NSURLSessionDataTask *localDataTask = [[NSURLSession sessionWithConfiguration:nil] dataTaskWithURL:nil]; +#pragma clang diagnostic pop + IMP originalAFResumeIMP = method_getImplementation(class_getInstanceMethod([self class], @selector(af_resume))); + Class currentClass = [localDataTask class]; + + while (class_getInstanceMethod(currentClass, @selector(resume))) { + Class superClass = [currentClass superclass]; + IMP classResumeIMP = method_getImplementation(class_getInstanceMethod(currentClass, @selector(resume))); + IMP superclassResumeIMP = method_getImplementation(class_getInstanceMethod(superClass, @selector(resume))); + if (classResumeIMP != superclassResumeIMP && + originalAFResumeIMP != classResumeIMP) { + [self swizzleResumeAndSuspendMethodForClass:currentClass]; + } + currentClass = [currentClass superclass]; + } + + [localDataTask cancel]; + } +} + ++ (void)swizzleResumeAndSuspendMethodForClass:(Class)class { + Method afResumeMethod = class_getInstanceMethod(self, @selector(af_resume)); + Method afSuspendMethod = class_getInstanceMethod(self, @selector(af_suspend)); + + if (af_addMethod(class, @selector(af_resume), afResumeMethod)) { + af_swizzleSelector(class, @selector(resume), @selector(af_resume)); + } + + if (af_addMethod(class, @selector(af_suspend), afSuspendMethod)) { + af_swizzleSelector(class, @selector(suspend), @selector(af_suspend)); + } +} + +- (NSURLSessionTaskState)state { + NSAssert(NO, @"State method should never be called in the actual dummy class"); + return NSURLSessionTaskStateCanceling; +} + +- (void)af_resume { + NSAssert([self respondsToSelector:@selector(state)], @"Does not respond to state"); + NSURLSessionTaskState state = [self state]; + [self af_resume]; + + if (state != NSURLSessionTaskStateRunning) { + [[NSNotificationCenter defaultCenter] postNotificationName:AFNSURLSessionTaskDidResumeNotification object:self]; + } +} + +- (void)af_suspend { + NSAssert([self respondsToSelector:@selector(state)], @"Does not respond to state"); + NSURLSessionTaskState state = [self state]; + [self af_suspend]; + + if (state != NSURLSessionTaskStateSuspended) { + [[NSNotificationCenter defaultCenter] postNotificationName:AFNSURLSessionTaskDidSuspendNotification object:self]; + } +} +@end + +#pragma mark - + +@interface AFURLSessionManager () +@property (readwrite, nonatomic, strong) NSURLSessionConfiguration *sessionConfiguration; +@property (readwrite, nonatomic, strong) NSOperationQueue *operationQueue; +@property (readwrite, nonatomic, strong) NSURLSession *session; +@property (readwrite, nonatomic, strong) NSMutableDictionary *mutableTaskDelegatesKeyedByTaskIdentifier; +@property (readonly, nonatomic, copy) NSString *taskDescriptionForSessionTasks; +@property (readwrite, nonatomic, strong) NSLock *lock; +@property (readwrite, nonatomic, copy) AFURLSessionDidBecomeInvalidBlock sessionDidBecomeInvalid; +@property (readwrite, nonatomic, copy) AFURLSessionDidReceiveAuthenticationChallengeBlock sessionDidReceiveAuthenticationChallenge; +@property (readwrite, nonatomic, copy) AFURLSessionDidFinishEventsForBackgroundURLSessionBlock didFinishEventsForBackgroundURLSession; +@property (readwrite, nonatomic, copy) AFURLSessionTaskWillPerformHTTPRedirectionBlock taskWillPerformHTTPRedirection; +@property (readwrite, nonatomic, copy) AFURLSessionTaskDidReceiveAuthenticationChallengeBlock taskDidReceiveAuthenticationChallenge; +@property (readwrite, nonatomic, copy) AFURLSessionTaskNeedNewBodyStreamBlock taskNeedNewBodyStream; +@property (readwrite, nonatomic, copy) AFURLSessionTaskDidSendBodyDataBlock taskDidSendBodyData; +@property (readwrite, nonatomic, copy) AFURLSessionTaskDidCompleteBlock taskDidComplete; +@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidReceiveResponseBlock dataTaskDidReceiveResponse; +@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidBecomeDownloadTaskBlock dataTaskDidBecomeDownloadTask; +@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidReceiveDataBlock dataTaskDidReceiveData; +@property (readwrite, nonatomic, copy) AFURLSessionDataTaskWillCacheResponseBlock dataTaskWillCacheResponse; +@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidFinishDownloadingBlock downloadTaskDidFinishDownloading; +@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidWriteDataBlock downloadTaskDidWriteData; +@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidResumeBlock downloadTaskDidResume; +@end + +@implementation AFURLSessionManager + +- (instancetype)init { + return [self initWithSessionConfiguration:nil]; +} + +- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration { + self = [super init]; + if (!self) { + return nil; + } + + if (!configuration) { + configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; + } + + self.sessionConfiguration = configuration; + + self.operationQueue = [[NSOperationQueue alloc] init]; + self.operationQueue.maxConcurrentOperationCount = 1; + + self.session = [NSURLSession sessionWithConfiguration:self.sessionConfiguration delegate:self delegateQueue:self.operationQueue]; + + self.responseSerializer = [AFJSONResponseSerializer serializer]; + + self.securityPolicy = [AFSecurityPolicy defaultPolicy]; + +#if !TARGET_OS_WATCH + self.reachabilityManager = [AFNetworkReachabilityManager sharedManager]; +#endif + + self.mutableTaskDelegatesKeyedByTaskIdentifier = [[NSMutableDictionary alloc] init]; + + self.lock = [[NSLock alloc] init]; + self.lock.name = AFURLSessionManagerLockName; + + [self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { + for (NSURLSessionDataTask *task in dataTasks) { + [self addDelegateForDataTask:task completionHandler:nil]; + } + + for (NSURLSessionUploadTask *uploadTask in uploadTasks) { + [self addDelegateForUploadTask:uploadTask progress:nil completionHandler:nil]; + } + + for (NSURLSessionDownloadTask *downloadTask in downloadTasks) { + [self addDelegateForDownloadTask:downloadTask progress:nil destination:nil completionHandler:nil]; + } + }]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskDidResume:) name:AFNSURLSessionTaskDidResumeNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskDidSuspend:) name:AFNSURLSessionTaskDidSuspendNotification object:nil]; + + return self; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +#pragma mark - + +- (NSString *)taskDescriptionForSessionTasks { + return [NSString stringWithFormat:@"%p", self]; +} + +- (void)taskDidResume:(NSNotification *)notification { + NSURLSessionTask *task = notification.object; + if ([task respondsToSelector:@selector(taskDescription)]) { + if ([task.taskDescription isEqualToString:self.taskDescriptionForSessionTasks]) { + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidResumeNotification object:task]; + }); + } + } +} + +- (void)taskDidSuspend:(NSNotification *)notification { + NSURLSessionTask *task = notification.object; + if ([task respondsToSelector:@selector(taskDescription)]) { + if ([task.taskDescription isEqualToString:self.taskDescriptionForSessionTasks]) { + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidSuspendNotification object:task]; + }); + } + } +} + +#pragma mark - + +- (AFURLSessionManagerTaskDelegate *)delegateForTask:(NSURLSessionTask *)task { + NSParameterAssert(task); + + AFURLSessionManagerTaskDelegate *delegate = nil; + [self.lock lock]; + delegate = self.mutableTaskDelegatesKeyedByTaskIdentifier[@(task.taskIdentifier)]; + [self.lock unlock]; + + return delegate; +} + +- (void)setDelegate:(AFURLSessionManagerTaskDelegate *)delegate + forTask:(NSURLSessionTask *)task +{ + NSParameterAssert(task); + NSParameterAssert(delegate); + + [self.lock lock]; + self.mutableTaskDelegatesKeyedByTaskIdentifier[@(task.taskIdentifier)] = delegate; + [self.lock unlock]; +} + +- (void)addDelegateForDataTask:(NSURLSessionDataTask *)dataTask + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init]; + delegate.manager = self; + delegate.completionHandler = completionHandler; + + dataTask.taskDescription = self.taskDescriptionForSessionTasks; + [self setDelegate:delegate forTask:dataTask]; +} + +- (void)addDelegateForUploadTask:(NSURLSessionUploadTask *)uploadTask + progress:(NSProgress * __autoreleasing *)progress + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init]; + delegate.manager = self; + delegate.completionHandler = completionHandler; + + int64_t totalUnitCount = uploadTask.countOfBytesExpectedToSend; + if(totalUnitCount == NSURLSessionTransferSizeUnknown) { + NSString *contentLength = [uploadTask.originalRequest valueForHTTPHeaderField:@"Content-Length"]; + if(contentLength) { + totalUnitCount = (int64_t)[contentLength longLongValue]; + } + } + + if (delegate.progress) { + delegate.progress.totalUnitCount = totalUnitCount; + } else { + delegate.progress = [NSProgress progressWithTotalUnitCount:totalUnitCount]; + } + + delegate.progress.pausingHandler = ^{ + [uploadTask suspend]; + }; + delegate.progress.cancellationHandler = ^{ + [uploadTask cancel]; + }; + + if (progress) { + *progress = delegate.progress; + } + + uploadTask.taskDescription = self.taskDescriptionForSessionTasks; + + [self setDelegate:delegate forTask:uploadTask]; +} + +- (void)addDelegateForDownloadTask:(NSURLSessionDownloadTask *)downloadTask + progress:(NSProgress * __autoreleasing *)progress + destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler +{ + AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init]; + delegate.manager = self; + delegate.completionHandler = completionHandler; + + if (destination) { + delegate.downloadTaskDidFinishDownloading = ^NSURL * (NSURLSession * __unused session, NSURLSessionDownloadTask *task, NSURL *location) { + return destination(location, task.response); + }; + } + + if (progress) { + *progress = delegate.progress; + } + + downloadTask.taskDescription = self.taskDescriptionForSessionTasks; + + [self setDelegate:delegate forTask:downloadTask]; +} + +- (void)removeDelegateForTask:(NSURLSessionTask *)task { + NSParameterAssert(task); + + [self.lock lock]; + [self.mutableTaskDelegatesKeyedByTaskIdentifier removeObjectForKey:@(task.taskIdentifier)]; + [self.lock unlock]; +} + +- (void)removeAllDelegates { + [self.lock lock]; + [self.mutableTaskDelegatesKeyedByTaskIdentifier removeAllObjects]; + [self.lock unlock]; +} + +#pragma mark - + +- (NSArray *)tasksForKeyPath:(NSString *)keyPath { + __block NSArray *tasks = nil; + dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); + [self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { + if ([keyPath isEqualToString:NSStringFromSelector(@selector(dataTasks))]) { + tasks = dataTasks; + } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(uploadTasks))]) { + tasks = uploadTasks; + } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(downloadTasks))]) { + tasks = downloadTasks; + } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(tasks))]) { + tasks = [@[dataTasks, uploadTasks, downloadTasks] valueForKeyPath:@"@unionOfArrays.self"]; + } + + dispatch_semaphore_signal(semaphore); + }]; + + dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); + + return tasks; +} + +- (NSArray *)tasks { + return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; +} + +- (NSArray *)dataTasks { + return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; +} + +- (NSArray *)uploadTasks { + return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; +} + +- (NSArray *)downloadTasks { + return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; +} + +#pragma mark - + +- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks { + dispatch_async(dispatch_get_main_queue(), ^{ + if (cancelPendingTasks) { + [self.session invalidateAndCancel]; + } else { + [self.session finishTasksAndInvalidate]; + } + }); +} + +#pragma mark - + +- (void)setResponseSerializer:(id )responseSerializer { + NSParameterAssert(responseSerializer); + + _responseSerializer = responseSerializer; +} + +#pragma mark - + +- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + __block NSURLSessionDataTask *dataTask = nil; + dispatch_sync(url_session_manager_creation_queue(), ^{ + dataTask = [self.session dataTaskWithRequest:request]; + }); + + [self addDelegateForDataTask:dataTask completionHandler:completionHandler]; + + return dataTask; +} + +#pragma mark - + +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromFile:(NSURL *)fileURL + progress:(NSProgress * __autoreleasing *)progress + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + __block NSURLSessionUploadTask *uploadTask = nil; + dispatch_sync(url_session_manager_creation_queue(), ^{ + uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL]; + }); + + if (!uploadTask && self.attemptsToRecreateUploadTasksForBackgroundSessions && self.session.configuration.identifier) { + for (NSUInteger attempts = 0; !uploadTask && attempts < AFMaximumNumberOfAttemptsToRecreateBackgroundSessionUploadTask; attempts++) { + uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL]; + } + } + + [self addDelegateForUploadTask:uploadTask progress:progress completionHandler:completionHandler]; + + return uploadTask; +} + +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromData:(NSData *)bodyData + progress:(NSProgress * __autoreleasing *)progress + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + __block NSURLSessionUploadTask *uploadTask = nil; + dispatch_sync(url_session_manager_creation_queue(), ^{ + uploadTask = [self.session uploadTaskWithRequest:request fromData:bodyData]; + }); + + [self addDelegateForUploadTask:uploadTask progress:progress completionHandler:completionHandler]; + + return uploadTask; +} + +- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request + progress:(NSProgress * __autoreleasing *)progress + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + __block NSURLSessionUploadTask *uploadTask = nil; + dispatch_sync(url_session_manager_creation_queue(), ^{ + uploadTask = [self.session uploadTaskWithStreamedRequest:request]; + }); + + [self addDelegateForUploadTask:uploadTask progress:progress completionHandler:completionHandler]; + + return uploadTask; +} + +#pragma mark - + +- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request + progress:(NSProgress * __autoreleasing *)progress + destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler +{ + __block NSURLSessionDownloadTask *downloadTask = nil; + dispatch_sync(url_session_manager_creation_queue(), ^{ + downloadTask = [self.session downloadTaskWithRequest:request]; + }); + + [self addDelegateForDownloadTask:downloadTask progress:progress destination:destination completionHandler:completionHandler]; + + return downloadTask; +} + +- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData + progress:(NSProgress * __autoreleasing *)progress + destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler +{ + __block NSURLSessionDownloadTask *downloadTask = nil; + dispatch_sync(url_session_manager_creation_queue(), ^{ + downloadTask = [self.session downloadTaskWithResumeData:resumeData]; + }); + + [self addDelegateForDownloadTask:downloadTask progress:progress destination:destination completionHandler:completionHandler]; + + return downloadTask; +} + +#pragma mark - + +- (NSProgress *)uploadProgressForTask:(NSURLSessionUploadTask *)uploadTask { + return [[self delegateForTask:uploadTask] progress]; +} + +- (NSProgress *)downloadProgressForTask:(NSURLSessionDownloadTask *)downloadTask { + return [[self delegateForTask:downloadTask] progress]; +} + +#pragma mark - + +- (void)setSessionDidBecomeInvalidBlock:(void (^)(NSURLSession *session, NSError *error))block { + self.sessionDidBecomeInvalid = block; +} + +- (void)setSessionDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block { + self.sessionDidReceiveAuthenticationChallenge = block; +} + +- (void)setDidFinishEventsForBackgroundURLSessionBlock:(void (^)(NSURLSession *session))block { + self.didFinishEventsForBackgroundURLSession = block; +} + +#pragma mark - + +- (void)setTaskNeedNewBodyStreamBlock:(NSInputStream * (^)(NSURLSession *session, NSURLSessionTask *task))block { + self.taskNeedNewBodyStream = block; +} + +- (void)setTaskWillPerformHTTPRedirectionBlock:(NSURLRequest * (^)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request))block { + self.taskWillPerformHTTPRedirection = block; +} + +- (void)setTaskDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block { + self.taskDidReceiveAuthenticationChallenge = block; +} + +- (void)setTaskDidSendBodyDataBlock:(void (^)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend))block { + self.taskDidSendBodyData = block; +} + +- (void)setTaskDidCompleteBlock:(void (^)(NSURLSession *session, NSURLSessionTask *task, NSError *error))block { + self.taskDidComplete = block; +} + +#pragma mark - + +- (void)setDataTaskDidReceiveResponseBlock:(NSURLSessionResponseDisposition (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response))block { + self.dataTaskDidReceiveResponse = block; +} + +- (void)setDataTaskDidBecomeDownloadTaskBlock:(void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask))block { + self.dataTaskDidBecomeDownloadTask = block; +} + +- (void)setDataTaskDidReceiveDataBlock:(void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data))block { + self.dataTaskDidReceiveData = block; +} + +- (void)setDataTaskWillCacheResponseBlock:(NSCachedURLResponse * (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse))block { + self.dataTaskWillCacheResponse = block; +} + +#pragma mark - + +- (void)setDownloadTaskDidFinishDownloadingBlock:(NSURL * (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location))block { + self.downloadTaskDidFinishDownloading = block; +} + +- (void)setDownloadTaskDidWriteDataBlock:(void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite))block { + self.downloadTaskDidWriteData = block; +} + +- (void)setDownloadTaskDidResumeBlock:(void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes))block { + self.downloadTaskDidResume = block; +} + +#pragma mark - NSObject + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p, session: %@, operationQueue: %@>", NSStringFromClass([self class]), self, self.session, self.operationQueue]; +} + +- (BOOL)respondsToSelector:(SEL)selector { + if (selector == @selector(URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:)) { + return self.taskWillPerformHTTPRedirection != nil; + } else if (selector == @selector(URLSession:dataTask:didReceiveResponse:completionHandler:)) { + return self.dataTaskDidReceiveResponse != nil; + } else if (selector == @selector(URLSession:dataTask:willCacheResponse:completionHandler:)) { + return self.dataTaskWillCacheResponse != nil; + } else if (selector == @selector(URLSessionDidFinishEventsForBackgroundURLSession:)) { + return self.didFinishEventsForBackgroundURLSession != nil; + } + + return [[self class] instancesRespondToSelector:selector]; +} + +#pragma mark - NSURLSessionDelegate + +- (void)URLSession:(NSURLSession *)session +didBecomeInvalidWithError:(NSError *)error +{ + if (self.sessionDidBecomeInvalid) { + self.sessionDidBecomeInvalid(session, error); + } + + [self removeAllDelegates]; + [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDidInvalidateNotification object:session]; +} + +- (void)URLSession:(NSURLSession *)session +didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge + completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler +{ + NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling; + __block NSURLCredential *credential = nil; + + if (self.sessionDidReceiveAuthenticationChallenge) { + disposition = self.sessionDidReceiveAuthenticationChallenge(session, challenge, &credential); + } else { + if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { + if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { + credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; + if (credential) { + disposition = NSURLSessionAuthChallengeUseCredential; + } else { + disposition = NSURLSessionAuthChallengePerformDefaultHandling; + } + } else { + disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; + } + } else { + disposition = NSURLSessionAuthChallengePerformDefaultHandling; + } + } + + if (completionHandler) { + completionHandler(disposition, credential); + } +} + +#pragma mark - NSURLSessionTaskDelegate + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +willPerformHTTPRedirection:(NSHTTPURLResponse *)response + newRequest:(NSURLRequest *)request + completionHandler:(void (^)(NSURLRequest *))completionHandler +{ + NSURLRequest *redirectRequest = request; + + if (self.taskWillPerformHTTPRedirection) { + redirectRequest = self.taskWillPerformHTTPRedirection(session, task, response, request); + } + + if (completionHandler) { + completionHandler(redirectRequest); + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge + completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler +{ + NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling; + __block NSURLCredential *credential = nil; + + if (self.taskDidReceiveAuthenticationChallenge) { + disposition = self.taskDidReceiveAuthenticationChallenge(session, task, challenge, &credential); + } else { + if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { + if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { + disposition = NSURLSessionAuthChallengeUseCredential; + credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; + } else { + disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; + } + } else { + disposition = NSURLSessionAuthChallengePerformDefaultHandling; + } + } + + if (completionHandler) { + completionHandler(disposition, credential); + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task + needNewBodyStream:(void (^)(NSInputStream *bodyStream))completionHandler +{ + NSInputStream *inputStream = nil; + + if (self.taskNeedNewBodyStream) { + inputStream = self.taskNeedNewBodyStream(session, task); + } else if (task.originalRequest.HTTPBodyStream && [task.originalRequest.HTTPBodyStream conformsToProtocol:@protocol(NSCopying)]) { + inputStream = [task.originalRequest.HTTPBodyStream copy]; + } + + if (completionHandler) { + completionHandler(inputStream); + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task + didSendBodyData:(int64_t)bytesSent + totalBytesSent:(int64_t)totalBytesSent +totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend +{ + + int64_t totalUnitCount = totalBytesExpectedToSend; + if(totalUnitCount == NSURLSessionTransferSizeUnknown) { + NSString *contentLength = [task.originalRequest valueForHTTPHeaderField:@"Content-Length"]; + if(contentLength) { + totalUnitCount = (int64_t) [contentLength longLongValue]; + } + } + + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:task]; + [delegate URLSession:session task:task didSendBodyData:bytesSent totalBytesSent:totalBytesSent totalBytesExpectedToSend:totalUnitCount]; + + if (self.taskDidSendBodyData) { + self.taskDidSendBodyData(session, task, bytesSent, totalBytesSent, totalUnitCount); + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +didCompleteWithError:(NSError *)error +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:task]; + + // delegate may be nil when completing a task in the background + if (delegate) { + [delegate URLSession:session task:task didCompleteWithError:error]; + + [self removeDelegateForTask:task]; + } + + if (self.taskDidComplete) { + self.taskDidComplete(session, task, error); + } + +} + +#pragma mark - NSURLSessionDataDelegate + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask +didReceiveResponse:(NSURLResponse *)response + completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler +{ + NSURLSessionResponseDisposition disposition = NSURLSessionResponseAllow; + + if (self.dataTaskDidReceiveResponse) { + disposition = self.dataTaskDidReceiveResponse(session, dataTask, response); + } + + if (completionHandler) { + completionHandler(disposition); + } +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask +didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:dataTask]; + if (delegate) { + [self removeDelegateForTask:dataTask]; + [self setDelegate:delegate forTask:downloadTask]; + } + + if (self.dataTaskDidBecomeDownloadTask) { + self.dataTaskDidBecomeDownloadTask(session, dataTask, downloadTask); + } +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask + didReceiveData:(NSData *)data +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:dataTask]; + [delegate URLSession:session dataTask:dataTask didReceiveData:data]; + + if (self.dataTaskDidReceiveData) { + self.dataTaskDidReceiveData(session, dataTask, data); + } +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask + willCacheResponse:(NSCachedURLResponse *)proposedResponse + completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler +{ + NSCachedURLResponse *cachedResponse = proposedResponse; + + if (self.dataTaskWillCacheResponse) { + cachedResponse = self.dataTaskWillCacheResponse(session, dataTask, proposedResponse); + } + + if (completionHandler) { + completionHandler(cachedResponse); + } +} + +- (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session { + if (self.didFinishEventsForBackgroundURLSession) { + dispatch_async(dispatch_get_main_queue(), ^{ + self.didFinishEventsForBackgroundURLSession(session); + }); + } +} + +#pragma mark - NSURLSessionDownloadDelegate + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask +didFinishDownloadingToURL:(NSURL *)location +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask]; + if (self.downloadTaskDidFinishDownloading) { + NSURL *fileURL = self.downloadTaskDidFinishDownloading(session, downloadTask, location); + if (fileURL) { + delegate.downloadFileURL = fileURL; + NSError *error = nil; + [[NSFileManager defaultManager] moveItemAtURL:location toURL:fileURL error:&error]; + if (error) { + [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidFailToMoveFileNotification object:downloadTask userInfo:error.userInfo]; + } + + return; + } + } + + if (delegate) { + [delegate URLSession:session downloadTask:downloadTask didFinishDownloadingToURL:location]; + } +} + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask + didWriteData:(int64_t)bytesWritten + totalBytesWritten:(int64_t)totalBytesWritten +totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask]; + [delegate URLSession:session downloadTask:downloadTask didWriteData:bytesWritten totalBytesWritten:totalBytesWritten totalBytesExpectedToWrite:totalBytesExpectedToWrite]; + + if (self.downloadTaskDidWriteData) { + self.downloadTaskDidWriteData(session, downloadTask, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); + } +} + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask + didResumeAtOffset:(int64_t)fileOffset +expectedTotalBytes:(int64_t)expectedTotalBytes +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask]; + [delegate URLSession:session downloadTask:downloadTask didResumeAtOffset:fileOffset expectedTotalBytes:expectedTotalBytes]; + + if (self.downloadTaskDidResume) { + self.downloadTaskDidResume(session, downloadTask, fileOffset, expectedTotalBytes); + } +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder { + NSURLSessionConfiguration *configuration = [decoder decodeObjectOfClass:[NSURLSessionConfiguration class] forKey:@"sessionConfiguration"]; + + self = [self initWithSessionConfiguration:configuration]; + if (!self) { + return nil; + } + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:self.session.configuration forKey:@"sessionConfiguration"]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + return [[[self class] allocWithZone:zone] initWithSessionConfiguration:self.session.configuration]; +} + +@end + +#endif diff --git a/BreakingBad/Pods/AFNetworking/LICENSE b/BreakingBad/Pods/AFNetworking/LICENSE new file mode 100644 index 0000000..91f125b --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) + +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/BreakingBad/Pods/AFNetworking/README.md b/BreakingBad/Pods/AFNetworking/README.md new file mode 100644 index 0000000..f25efe0 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/README.md @@ -0,0 +1,394 @@ +

+ AFNetworking +

+ +[![Build Status](https://travis-ci.org/AFNetworking/AFNetworking.svg)](https://travis-ci.org/AFNetworking/AFNetworking) + +AFNetworking is a delightful networking library for iOS and Mac OS X. It's built on top of the [Foundation URL Loading System](http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html), extending the powerful high-level networking abstractions built into Cocoa. It has a modular architecture with well-designed, feature-rich APIs that are a joy to use. + +Perhaps the most important feature of all, however, is the amazing community of developers who use and contribute to AFNetworking every day. AFNetworking powers some of the most popular and critically-acclaimed apps on the iPhone, iPad, and Mac. + +Choose AFNetworking for your next project, or migrate over your existing projects—you'll be happy you did! + +## How To Get Started + +- [Download AFNetworking](https://github.com/AFNetworking/AFNetworking/archive/master.zip) and try out the included Mac and iPhone example apps +- Read the ["Getting Started" guide](https://github.com/AFNetworking/AFNetworking/wiki/Getting-Started-with-AFNetworking), [FAQ](https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-FAQ), or [other articles on the Wiki](https://github.com/AFNetworking/AFNetworking/wiki) +- Check out the [documentation](http://cocoadocs.org/docsets/AFNetworking/) for a comprehensive look at all of the APIs available in AFNetworking +- Read the [AFNetworking 2.0 Migration Guide](https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-2.0-Migration-Guide) for an overview of the architectural changes from 1.0. + +## Communication + +- If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/afnetworking). (Tag 'afnetworking') +- If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/afnetworking). +- If you **found a bug**, _and can provide steps to reliably reproduce it_, open an issue. +- If you **have a feature request**, open an issue. +- If you **want to contribute**, submit a pull request. + +### Installation with CocoaPods + +[CocoaPods](http://cocoapods.org) is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries like AFNetworking in your projects. See the ["Getting Started" guide for more information](https://github.com/AFNetworking/AFNetworking/wiki/Getting-Started-with-AFNetworking). + +#### Podfile + +```ruby +platform :ios, '7.0' +pod "AFNetworking", "~> 2.0" +``` + +## Requirements + +| AFNetworking Version | Minimum iOS Target | Minimum OS X Target | Notes | +|:--------------------:|:---------------------------:|:----------------------------:|:-------------------------------------------------------------------------:| +| 2.x | iOS 6 | OS X 10.8 | Xcode 5 is required. `NSURLSession` subspec requires iOS 7 or OS X 10.9. | +| [1.x](https://github.com/AFNetworking/AFNetworking/tree/1.x) | iOS 5 | Mac OS X 10.7 | | +| [0.10.x](https://github.com/AFNetworking/AFNetworking/tree/0.10.x) | iOS 4 | Mac OS X 10.6 | | + +(OS X projects must support [64-bit with modern Cocoa runtime](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtVersionsPlatforms.html)). + +> Programming in Swift? Try [Alamofire](https://github.com/Alamofire/Alamofire) for a more conventional set of APIs. + +## Architecture + +### NSURLConnection + +- `AFURLConnectionOperation` +- `AFHTTPRequestOperation` +- `AFHTTPRequestOperationManager` + +### NSURLSession _(iOS 7 / Mac OS X 10.9)_ + +- `AFURLSessionManager` +- `AFHTTPSessionManager` + +### Serialization + +* `` + - `AFHTTPRequestSerializer` + - `AFJSONRequestSerializer` + - `AFPropertyListRequestSerializer` +* `` + - `AFHTTPResponseSerializer` + - `AFJSONResponseSerializer` + - `AFXMLParserResponseSerializer` + - `AFXMLDocumentResponseSerializer` _(Mac OS X)_ + - `AFPropertyListResponseSerializer` + - `AFImageResponseSerializer` + - `AFCompoundResponseSerializer` + +### Additional Functionality + +- `AFSecurityPolicy` +- `AFNetworkReachabilityManager` + +## Usage + +### HTTP Request Operation Manager + +`AFHTTPRequestOperationManager` encapsulates the common patterns of communicating with a web application over HTTP, including request creation, response serialization, network reachability monitoring, and security, as well as request operation management. + +#### `GET` Request + +```objective-c +AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; +[manager GET:@"http://example.com/resources.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { + NSLog(@"JSON: %@", responseObject); +} failure:^(AFHTTPRequestOperation *operation, NSError *error) { + NSLog(@"Error: %@", error); +}]; +``` + +#### `POST` URL-Form-Encoded Request + +```objective-c +AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; +NSDictionary *parameters = @{@"foo": @"bar"}; +[manager POST:@"http://example.com/resources.json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { + NSLog(@"JSON: %@", responseObject); +} failure:^(AFHTTPRequestOperation *operation, NSError *error) { + NSLog(@"Error: %@", error); +}]; +``` + +#### `POST` Multi-Part Request + +```objective-c +AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; +NSDictionary *parameters = @{@"foo": @"bar"}; +NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"]; +[manager POST:@"http://example.com/resources.json" parameters:parameters constructingBodyWithBlock:^(id formData) { + [formData appendPartWithFileURL:filePath name:@"image" error:nil]; +} success:^(AFHTTPRequestOperation *operation, id responseObject) { + NSLog(@"Success: %@", responseObject); +} failure:^(AFHTTPRequestOperation *operation, NSError *error) { + NSLog(@"Error: %@", error); +}]; +``` + +--- + +### AFURLSessionManager + +`AFURLSessionManager` creates and manages an `NSURLSession` object based on a specified `NSURLSessionConfiguration` object, which conforms to ``, ``, ``, and ``. + +#### Creating a Download Task + +```objective-c +NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; +AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; + +NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"]; +NSURLRequest *request = [NSURLRequest requestWithURL:URL]; + +NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) { + NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil]; + return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]]; +} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) { + NSLog(@"File downloaded to: %@", filePath); +}]; +[downloadTask resume]; +``` + +#### Creating an Upload Task + +```objective-c +NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; +AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; + +NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"]; +NSURLRequest *request = [NSURLRequest requestWithURL:URL]; + +NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"]; +NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:filePath progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { + if (error) { + NSLog(@"Error: %@", error); + } else { + NSLog(@"Success: %@ %@", response, responseObject); + } +}]; +[uploadTask resume]; +``` + +#### Creating an Upload Task for a Multi-Part Request, with Progress + +```objective-c +NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id formData) { + [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"file://path/to/image.jpg"] name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil]; + } error:nil]; + +AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; +NSProgress *progress = nil; + +NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { + if (error) { + NSLog(@"Error: %@", error); + } else { + NSLog(@"%@ %@", response, responseObject); + } +}]; + +[uploadTask resume]; +``` + +#### Creating a Data Task + +```objective-c +NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; +AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; + +NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"]; +NSURLRequest *request = [NSURLRequest requestWithURL:URL]; + +NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { + if (error) { + NSLog(@"Error: %@", error); + } else { + NSLog(@"%@ %@", response, responseObject); + } +}]; +[dataTask resume]; +``` + +--- + +### Request Serialization + +Request serializers create requests from URL strings, encoding parameters as either a query string or HTTP body. + +```objective-c +NSString *URLString = @"http://example.com"; +NSDictionary *parameters = @{@"foo": @"bar", @"baz": @[@1, @2, @3]}; +``` + +#### Query String Parameter Encoding + +```objective-c +[[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:URLString parameters:parameters error:nil]; +``` + + GET http://example.com?foo=bar&baz[]=1&baz[]=2&baz[]=3 + +#### URL Form Parameter Encoding + +```objective-c +[[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters]; +``` + + POST http://example.com/ + Content-Type: application/x-www-form-urlencoded + + foo=bar&baz[]=1&baz[]=2&baz[]=3 + +#### JSON Parameter Encoding + +```objective-c +[[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters]; +``` + + POST http://example.com/ + Content-Type: application/json + + {"foo": "bar", "baz": [1,2,3]} + +--- + +### Network Reachability Manager + +`AFNetworkReachabilityManager` monitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces. + +* Do not use Reachability to determine if the original request should be sent. + * You should try to send it. +* You can use Reachability to determine when a request should be automatically retried. + * Although it may still fail, a Reachability notification that the connectivity is available is a good time to retry something. +* Network reachability is a useful tool for determining why a request might have failed. + * After a network request has failed, telling the user they're offline is better than giving them a more technical but accurate error, such as "request timed out." + +See also [WWDC 2012 session 706, "Networking Best Practices."](https://developer.apple.com/videos/wwdc/2012/#706). + +#### Shared Network Reachability + +```objective-c +[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { + NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status)); +}]; + +[[AFNetworkReachabilityManager sharedManager] startMonitoring]; +``` + +#### HTTP Manager Reachability + +```objective-c +NSURL *baseURL = [NSURL URLWithString:@"http://example.com/"]; +AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:baseURL]; + +NSOperationQueue *operationQueue = manager.operationQueue; +[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { + switch (status) { + case AFNetworkReachabilityStatusReachableViaWWAN: + case AFNetworkReachabilityStatusReachableViaWiFi: + [operationQueue setSuspended:NO]; + break; + case AFNetworkReachabilityStatusNotReachable: + default: + [operationQueue setSuspended:YES]; + break; + } +}]; + +[manager.reachabilityManager startMonitoring]; +``` + +--- + +### Security Policy + +`AFSecurityPolicy` evaluates server trust against pinned X.509 certificates and public keys over secure connections. + +Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled. + +#### Allowing Invalid SSL Certificates + +```objective-c +AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; +manager.securityPolicy.allowInvalidCertificates = YES; // not recommended for production +``` + +--- + +### AFHTTPRequestOperation + +`AFHTTPRequestOperation` is a subclass of `AFURLConnectionOperation` for requests using the HTTP or HTTPS protocols. It encapsulates the concept of acceptable status codes and content types, which determine the success or failure of a request. + +Although `AFHTTPRequestOperationManager` is usually the best way to go about making requests, `AFHTTPRequestOperation` can be used by itself. + +#### `GET` with `AFHTTPRequestOperation` + +```objective-c +NSURL *URL = [NSURL URLWithString:@"http://example.com/resources/123.json"]; +NSURLRequest *request = [NSURLRequest requestWithURL:URL]; +AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request]; +op.responseSerializer = [AFJSONResponseSerializer serializer]; +[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + NSLog(@"JSON: %@", responseObject); +} failure:^(AFHTTPRequestOperation *operation, NSError *error) { + NSLog(@"Error: %@", error); +}]; +[[NSOperationQueue mainQueue] addOperation:op]; +``` + +#### Batch of Operations + +```objective-c +NSMutableArray *mutableOperations = [NSMutableArray array]; +for (NSURL *fileURL in filesToUpload) { + NSURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id formData) { + [formData appendPartWithFileURL:fileURL name:@"images[]" error:nil]; + }]; + + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [mutableOperations addObject:operation]; +} + +NSArray *operations = [AFURLConnectionOperation batchOfRequestOperations:@[...] progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) { + NSLog(@"%lu of %lu complete", numberOfFinishedOperations, totalNumberOfOperations); +} completionBlock:^(NSArray *operations) { + NSLog(@"All operations in batch complete"); +}]; +[[NSOperationQueue mainQueue] addOperations:operations waitUntilFinished:NO]; +``` + +## Unit Tests + +AFNetworking includes a suite of unit tests within the Tests subdirectory. In order to run the unit tests, you must install the testing dependencies via [CocoaPods](http://cocoapods.org/): + + $ cd Tests + $ pod install + +Once testing dependencies are installed, you can execute the test suite via the 'iOS Tests' and 'OS X Tests' schemes within Xcode. + +### Running Tests from the Command Line + +Tests can also be run from the command line or within a continuous integration environment. The [`xcpretty`](https://github.com/mneorr/xcpretty) utility needs to be installed before running the tests from the command line: + + $ gem install xcpretty + +Once `xcpretty` is installed, you can execute the suite via `rake test`. + +## Credits + +AFNetworking is owned and maintained by the [Alamofire Software Foundation](http://alamofire.org). + +AFNetworking was originally created by [Scott Raymond](https://github.com/sco/) and [Mattt Thompson](https://github.com/mattt/) in the development of [Gowalla for iPhone](http://en.wikipedia.org/wiki/Gowalla). + +AFNetworking's logo was designed by [Alan Defibaugh](http://www.alandefibaugh.com/). + +And most of all, thanks to AFNetworking's [growing list of contributors](https://github.com/AFNetworking/AFNetworking/contributors). + +### Security Disclosure + +If you believe you have identified a security vulnerability with AFNetworking, you should report it as soon as possible via email to security@alamofire.org. Please do not post it to a public issue tracker. + +## License + +AFNetworking is released under the MIT license. See LICENSE for details. diff --git a/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h new file mode 100644 index 0000000..3c7649b --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h @@ -0,0 +1,80 @@ +// AFNetworkActivityIndicatorManager.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + `AFNetworkActivityIndicatorManager` manages the state of the network activity indicator in the status bar. When enabled, it will listen for notifications indicating that a network request operation has started or finished, and start or stop animating the indicator accordingly. The number of active requests is incremented and decremented much like a stack or a semaphore, and the activity indicator will animate so long as that number is greater than zero. + + You should enable the shared instance of `AFNetworkActivityIndicatorManager` when your application finishes launching. In `AppDelegate application:didFinishLaunchingWithOptions:` you can do so with the following code: + + [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]; + + By setting `enabled` to `YES` for `sharedManager`, the network activity indicator will show and hide automatically as requests start and finish. You should not ever need to call `incrementActivityCount` or `decrementActivityCount` yourself. + + See the Apple Human Interface Guidelines section about the Network Activity Indicator for more information: + http://developer.apple.com/library/iOS/#documentation/UserExperience/Conceptual/MobileHIG/UIElementGuidelines/UIElementGuidelines.html#//apple_ref/doc/uid/TP40006556-CH13-SW44 + */ +NS_EXTENSION_UNAVAILABLE_IOS("Use view controller based solutions where appropriate instead.") +@interface AFNetworkActivityIndicatorManager : NSObject + +/** + A Boolean value indicating whether the manager is enabled. + + If YES, the manager will change status bar network activity indicator according to network operation notifications it receives. The default value is NO. + */ +@property (nonatomic, assign, getter = isEnabled) BOOL enabled; + +/** + A Boolean value indicating whether the network activity indicator is currently displayed in the status bar. + */ +@property (readonly, nonatomic, assign) BOOL isNetworkActivityIndicatorVisible; + +/** + Returns the shared network activity indicator manager object for the system. + + @return The systemwide network activity indicator manager. + */ ++ (instancetype)sharedManager; + +/** + Increments the number of active network requests. If this number was zero before incrementing, this will start animating the status bar network activity indicator. + */ +- (void)incrementActivityCount; + +/** + Decrements the number of active network requests. If this number becomes zero after decrementing, this will stop animating the status bar network activity indicator. + */ +- (void)decrementActivityCount; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m new file mode 100644 index 0000000..cf13180 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m @@ -0,0 +1,170 @@ +// AFNetworkActivityIndicatorManager.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import "AFNetworkActivityIndicatorManager.h" + +#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) + +#import "AFHTTPRequestOperation.h" + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 +#import "AFURLSessionManager.h" +#endif + +static NSTimeInterval const kAFNetworkActivityIndicatorInvisibilityDelay = 0.17; + +static NSURLRequest * AFNetworkRequestFromNotification(NSNotification *notification) { + if ([[notification object] isKindOfClass:[AFURLConnectionOperation class]]) { + return [(AFURLConnectionOperation *)[notification object] request]; + } + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 + if ([[notification object] respondsToSelector:@selector(originalRequest)]) { + return [(NSURLSessionTask *)[notification object] originalRequest]; + } +#endif + + return nil; +} + +@interface AFNetworkActivityIndicatorManager () +@property (readwrite, nonatomic, assign) NSInteger activityCount; +@property (readwrite, nonatomic, strong) NSTimer *activityIndicatorVisibilityTimer; +@property (readonly, nonatomic, getter = isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible; + +- (void)updateNetworkActivityIndicatorVisibility; +- (void)updateNetworkActivityIndicatorVisibilityDelayed; +@end + +@implementation AFNetworkActivityIndicatorManager +@dynamic networkActivityIndicatorVisible; + ++ (instancetype)sharedManager { + static AFNetworkActivityIndicatorManager *_sharedManager = nil; + static dispatch_once_t oncePredicate; + dispatch_once(&oncePredicate, ^{ + _sharedManager = [[self alloc] init]; + }); + + return _sharedManager; +} + ++ (NSSet *)keyPathsForValuesAffectingIsNetworkActivityIndicatorVisible { + return [NSSet setWithObject:@"activityCount"]; +} + +- (id)init { + self = [super init]; + if (!self) { + return nil; + } + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidStart:) name:AFNetworkingOperationDidStartNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidFinish:) name:AFNetworkingOperationDidFinishNotification object:nil]; + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidStart:) name:AFNetworkingTaskDidResumeNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidFinish:) name:AFNetworkingTaskDidSuspendNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidFinish:) name:AFNetworkingTaskDidCompleteNotification object:nil]; +#endif + + return self; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + [_activityIndicatorVisibilityTimer invalidate]; +} + +- (void)updateNetworkActivityIndicatorVisibilityDelayed { + if (self.enabled) { + // Delay hiding of activity indicator for a short interval, to avoid flickering + if (![self isNetworkActivityIndicatorVisible]) { + [self.activityIndicatorVisibilityTimer invalidate]; + self.activityIndicatorVisibilityTimer = [NSTimer timerWithTimeInterval:kAFNetworkActivityIndicatorInvisibilityDelay target:self selector:@selector(updateNetworkActivityIndicatorVisibility) userInfo:nil repeats:NO]; + [[NSRunLoop mainRunLoop] addTimer:self.activityIndicatorVisibilityTimer forMode:NSRunLoopCommonModes]; + } else { + [self performSelectorOnMainThread:@selector(updateNetworkActivityIndicatorVisibility) withObject:nil waitUntilDone:NO modes:@[NSRunLoopCommonModes]]; + } + } +} + +- (BOOL)isNetworkActivityIndicatorVisible { + return self.activityCount > 0; +} + +- (void)updateNetworkActivityIndicatorVisibility { + [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:[self isNetworkActivityIndicatorVisible]]; +} + +- (void)setActivityCount:(NSInteger)activityCount { + @synchronized(self) { + _activityCount = activityCount; + } + + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateNetworkActivityIndicatorVisibilityDelayed]; + }); +} + +- (void)incrementActivityCount { + [self willChangeValueForKey:@"activityCount"]; + @synchronized(self) { + _activityCount++; + } + [self didChangeValueForKey:@"activityCount"]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateNetworkActivityIndicatorVisibilityDelayed]; + }); +} + +- (void)decrementActivityCount { + [self willChangeValueForKey:@"activityCount"]; + @synchronized(self) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + _activityCount = MAX(_activityCount - 1, 0); +#pragma clang diagnostic pop + } + [self didChangeValueForKey:@"activityCount"]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateNetworkActivityIndicatorVisibilityDelayed]; + }); +} + +- (void)networkRequestDidStart:(NSNotification *)notification { + if ([AFNetworkRequestFromNotification(notification) URL]) { + [self incrementActivityCount]; + } +} + +- (void)networkRequestDidFinish:(NSNotification *)notification { + if ([AFNetworkRequestFromNotification(notification) URL]) { + [self decrementActivityCount]; + } +} + +@end + +#endif diff --git a/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h new file mode 100644 index 0000000..0c8f9b5 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h @@ -0,0 +1,63 @@ +// UIActivityIndicatorView+AFNetworking.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +@class AFURLConnectionOperation; + +/** + This category adds methods to the UIKit framework's `UIActivityIndicatorView` class. The methods in this category provide support for automatically starting and stopping animation depending on the loading state of a request operation or session task. + */ +@interface UIActivityIndicatorView (AFNetworking) + +///---------------------------------- +/// @name Animating for Session Tasks +///---------------------------------- + +/** + Binds the animating state to the state of the specified task. + + @param task The task. If `nil`, automatic updating from any previously specified operation will be disabled. + */ +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setAnimatingWithStateOfTask:(nullable NSURLSessionTask *)task; +#endif + +///--------------------------------------- +/// @name Animating for Request Operations +///--------------------------------------- + +/** + Binds the animating state to the execution state of the specified operation. + + @param operation The operation. If `nil`, automatic updating from any previously specified operation will be disabled. + */ +- (void)setAnimatingWithStateOfOperation:(nullable AFURLConnectionOperation *)operation; + +@end + +#endif diff --git a/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m new file mode 100644 index 0000000..dd362b0 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m @@ -0,0 +1,171 @@ +// UIActivityIndicatorView+AFNetworking.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import "UIActivityIndicatorView+AFNetworking.h" +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import "AFHTTPRequestOperation.h" + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +#import "AFURLSessionManager.h" +#endif + +@interface AFActivityIndicatorViewNotificationObserver : NSObject +@property (readonly, nonatomic, weak) UIActivityIndicatorView *activityIndicatorView; +- (instancetype)initWithActivityIndicatorView:(UIActivityIndicatorView *)activityIndicatorView; + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setAnimatingWithStateOfTask:(NSURLSessionTask *)task; +#endif +- (void)setAnimatingWithStateOfOperation:(AFURLConnectionOperation *)operation; + +@end + +@implementation UIActivityIndicatorView (AFNetworking) + +- (AFActivityIndicatorViewNotificationObserver *)af_notificationObserver { + AFActivityIndicatorViewNotificationObserver *notificationObserver = objc_getAssociatedObject(self, @selector(af_notificationObserver)); + if (notificationObserver == nil) { + notificationObserver = [[AFActivityIndicatorViewNotificationObserver alloc] initWithActivityIndicatorView:self]; + objc_setAssociatedObject(self, @selector(af_notificationObserver), notificationObserver, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + return notificationObserver; +} + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setAnimatingWithStateOfTask:(NSURLSessionTask *)task { + [[self af_notificationObserver] setAnimatingWithStateOfTask:task]; +} +#endif + +- (void)setAnimatingWithStateOfOperation:(AFURLConnectionOperation *)operation { + [[self af_notificationObserver] setAnimatingWithStateOfOperation:operation]; +} + +@end + +@implementation AFActivityIndicatorViewNotificationObserver + +- (instancetype)initWithActivityIndicatorView:(UIActivityIndicatorView *)activityIndicatorView +{ + self = [super init]; + if (self) { + _activityIndicatorView = activityIndicatorView; + } + return self; +} + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setAnimatingWithStateOfTask:(NSURLSessionTask *)task { + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + + [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; + + if (task) { + if (task.state != NSURLSessionTaskStateCompleted) { + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" +#pragma clang diagnostic ignored "-Warc-repeated-use-of-weak" + if (task.state == NSURLSessionTaskStateRunning) { + [self.activityIndicatorView startAnimating]; + } else { + [self.activityIndicatorView stopAnimating]; + } +#pragma clang diagnostic pop + + [notificationCenter addObserver:self selector:@selector(af_startAnimating) name:AFNetworkingTaskDidResumeNotification object:task]; + [notificationCenter addObserver:self selector:@selector(af_stopAnimating) name:AFNetworkingTaskDidCompleteNotification object:task]; + [notificationCenter addObserver:self selector:@selector(af_stopAnimating) name:AFNetworkingTaskDidSuspendNotification object:task]; + } + } +} +#endif + +#pragma mark - + +- (void)setAnimatingWithStateOfOperation:(AFURLConnectionOperation *)operation { + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + + [notificationCenter removeObserver:self name:AFNetworkingOperationDidStartNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingOperationDidFinishNotification object:nil]; + + if (operation) { + if (![operation isFinished]) { + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" +#pragma clang diagnostic ignored "-Warc-repeated-use-of-weak" + if ([operation isExecuting]) { + [self.activityIndicatorView startAnimating]; + } else { + [self.activityIndicatorView stopAnimating]; + } +#pragma clang diagnostic pop + + [notificationCenter addObserver:self selector:@selector(af_startAnimating) name:AFNetworkingOperationDidStartNotification object:operation]; + [notificationCenter addObserver:self selector:@selector(af_stopAnimating) name:AFNetworkingOperationDidFinishNotification object:operation]; + } + } +} + +#pragma mark - + +- (void)af_startAnimating { + dispatch_async(dispatch_get_main_queue(), ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" + [self.activityIndicatorView startAnimating]; +#pragma clang diagnostic pop + }); +} + +- (void)af_stopAnimating { + dispatch_async(dispatch_get_main_queue(), ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" + [self.activityIndicatorView stopAnimating]; +#pragma clang diagnostic pop + }); +} + +#pragma mark - + +- (void)dealloc { + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 + [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; +#endif + + [notificationCenter removeObserver:self name:AFNetworkingOperationDidStartNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingOperationDidFinishNotification object:nil]; +} + +@end + +#endif diff --git a/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h new file mode 100644 index 0000000..97f5622 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h @@ -0,0 +1,99 @@ +// UIAlertView+AFNetworking.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class AFURLConnectionOperation; + +/** + This category adds methods to the UIKit framework's `UIAlertView` class. The methods in this category provide support for automatically showing an alert if a session task or request operation finishes with an error. Alert title and message are filled from the corresponding `localizedDescription` & `localizedRecoverySuggestion` or `localizedFailureReason` of the error. + */ +@interface UIAlertView (AFNetworking) + +///------------------------------------- +/// @name Showing Alert for Session Task +///------------------------------------- + +/** + Shows an alert view with the error of the specified session task, if any. + + @param task The session task. + @param delegate The alert view delegate. + */ +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 ++ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task + delegate:(nullable id)delegate NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extensions."); +#endif + +/** + Shows an alert view with the error of the specified session task, if any, with a custom cancel button title and other button titles. + + @param task The session task. + @param delegate The alert view delegate. + @param cancelButtonTitle The title of the cancel button or nil if there is no cancel button. Using this argument is equivalent to setting the cancel button index to the value returned by invoking addButtonWithTitle: specifying this title. + @param otherButtonTitles The title of another button. Using this argument is equivalent to invoking addButtonWithTitle: with this title to add more buttons. Too many buttons can cause the alert view to scroll. For guidelines on the best ways to use an alert in an app, see "Temporary Views". Titles of additional buttons to add to the receiver, terminated with `nil`. + */ +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 ++ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task + delegate:(nullable id)delegate + cancelButtonTitle:(nullable NSString *)cancelButtonTitle + otherButtonTitles:(nullable NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extensions."); +#endif + +///------------------------------------------ +/// @name Showing Alert for Request Operation +///------------------------------------------ + +/** + Shows an alert view with the error of the specified request operation, if any. + + @param operation The request operation. + @param delegate The alert view delegate. + */ ++ (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOperation *)operation + delegate:(nullable id)delegate NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extensions."); + +/** + Shows an alert view with the error of the specified request operation, if any, with a custom cancel button title and other button titles. + + @param operation The request operation. + @param delegate The alert view delegate. + @param cancelButtonTitle The title of the cancel button or nil if there is no cancel button. Using this argument is equivalent to setting the cancel button index to the value returned by invoking addButtonWithTitle: specifying this title. + @param otherButtonTitles The title of another button. Using this argument is equivalent to invoking addButtonWithTitle: with this title to add more buttons. Too many buttons can cause the alert view to scroll. For guidelines on the best ways to use an alert in an app, see "Temporary Views". Titles of additional buttons to add to the receiver, terminated with `nil`. + */ ++ (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOperation *)operation + delegate:(nullable id)delegate + cancelButtonTitle:(nullable NSString *)cancelButtonTitle + otherButtonTitles:(nullable NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extensions."); + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m new file mode 100644 index 0000000..0d1e9e7 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m @@ -0,0 +1,141 @@ +// UIAlertView+AFNetworking.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import "UIAlertView+AFNetworking.h" + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import "AFURLConnectionOperation.h" + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +#import "AFURLSessionManager.h" +#endif + +static void AFGetAlertViewTitleAndMessageFromError(NSError *error, NSString * __autoreleasing *title, NSString * __autoreleasing *message) { + if (error.localizedDescription && (error.localizedRecoverySuggestion || error.localizedFailureReason)) { + *title = error.localizedDescription; + + if (error.localizedRecoverySuggestion) { + *message = error.localizedRecoverySuggestion; + } else { + *message = error.localizedFailureReason; + } + } else if (error.localizedDescription) { + *title = NSLocalizedStringFromTable(@"Error", @"AFNetworking", @"Fallback Error Description"); + *message = error.localizedDescription; + } else { + *title = NSLocalizedStringFromTable(@"Error", @"AFNetworking", @"Fallback Error Description"); + *message = [NSString stringWithFormat:NSLocalizedStringFromTable(@"%@ Error: %ld", @"AFNetworking", @"Fallback Error Failure Reason Format"), error.domain, (long)error.code]; + } +} + +@implementation UIAlertView (AFNetworking) + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 ++ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task + delegate:(id)delegate +{ + [self showAlertViewForTaskWithErrorOnCompletion:task delegate:delegate cancelButtonTitle:NSLocalizedStringFromTable(@"Dismiss", @"AFNetworking", @"UIAlertView Cancel Button Title") otherButtonTitles:nil, nil]; +} + ++ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task + delegate:(id)delegate + cancelButtonTitle:(NSString *)cancelButtonTitle + otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION +{ + NSMutableArray *mutableOtherTitles = [NSMutableArray array]; + va_list otherButtonTitleList; + va_start(otherButtonTitleList, otherButtonTitles); + { + for (NSString *otherButtonTitle = otherButtonTitles; otherButtonTitle != nil; otherButtonTitle = va_arg(otherButtonTitleList, NSString *)) { + [mutableOtherTitles addObject:otherButtonTitle]; + } + } + va_end(otherButtonTitleList); + + __block __weak id observer = [[NSNotificationCenter defaultCenter] addObserverForName:AFNetworkingTaskDidCompleteNotification object:task queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) { + NSError *error = notification.userInfo[AFNetworkingTaskDidCompleteErrorKey]; + if (error) { + NSString *title, *message; + AFGetAlertViewTitleAndMessageFromError(error, &title, &message); + + UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:nil delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:nil, nil]; + for (NSString *otherButtonTitle in mutableOtherTitles) { + [alertView addButtonWithTitle:otherButtonTitle]; + } + [alertView setTitle:title]; + [alertView setMessage:message]; + [alertView show]; + } + + [[NSNotificationCenter defaultCenter] removeObserver:observer]; + }]; +} +#endif + +#pragma mark - + ++ (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOperation *)operation + delegate:(id)delegate +{ + [self showAlertViewForRequestOperationWithErrorOnCompletion:operation delegate:delegate cancelButtonTitle:NSLocalizedStringFromTable(@"Dismiss", @"AFNetworking", @"UIAlertView Cancel Button Title") otherButtonTitles:nil, nil]; +} + ++ (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOperation *)operation + delegate:(id)delegate + cancelButtonTitle:(NSString *)cancelButtonTitle + otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION +{ + NSMutableArray *mutableOtherTitles = [NSMutableArray array]; + va_list otherButtonTitleList; + va_start(otherButtonTitleList, otherButtonTitles); + { + for (NSString *otherButtonTitle = otherButtonTitles; otherButtonTitle != nil; otherButtonTitle = va_arg(otherButtonTitleList, NSString *)) { + [mutableOtherTitles addObject:otherButtonTitle]; + } + } + va_end(otherButtonTitleList); + + __block __weak id observer = [[NSNotificationCenter defaultCenter] addObserverForName:AFNetworkingOperationDidFinishNotification object:operation queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) { + + if (notification.object && [notification.object isKindOfClass:[AFURLConnectionOperation class]]) { + NSError *error = [(AFURLConnectionOperation *)notification.object error]; + if (error) { + NSString *title, *message; + AFGetAlertViewTitleAndMessageFromError(error, &title, &message); + + UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:nil delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:nil, nil]; + for (NSString *otherButtonTitle in mutableOtherTitles) { + [alertView addButtonWithTitle:otherButtonTitle]; + } + [alertView setTitle:title]; + [alertView setMessage:message]; + [alertView show]; + } + } + + [[NSNotificationCenter defaultCenter] removeObserver:observer]; + }]; +} + +@end + +#endif diff --git a/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h new file mode 100644 index 0000000..7289bdb --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h @@ -0,0 +1,186 @@ +// UIButton+AFNetworking.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol AFURLResponseSerialization, AFImageCache; + +/** + This category adds methods to the UIKit framework's `UIButton` class. The methods in this category provide support for loading remote images and background images asynchronously from a URL. + + @warning Compound values for control `state` (such as `UIControlStateHighlighted | UIControlStateDisabled`) are unsupported. + */ +@interface UIButton (AFNetworking) + +///---------------------------- +/// @name Accessing Image Cache +///---------------------------- + +/** + The image cache used to improve image loading performance on scroll views. By default, `UIButton` will use the `sharedImageCache` of `UIImageView`. + */ ++ (id )sharedImageCache; + +/** + Set the cache used for image loading. + + @param imageCache The image cache. + */ ++ (void)setSharedImageCache:(__nullable id )imageCache; + +///------------------------------------ +/// @name Accessing Response Serializer +///------------------------------------ + +/** + The response serializer used to create an image representation from the server response and response data. By default, this is an instance of `AFImageResponseSerializer`. + + @discussion Subclasses of `AFImageResponseSerializer` could be used to perform post-processing, such as color correction, face detection, or other effects. See https://github.com/AFNetworking/AFCoreImageSerializer + */ +@property (nonatomic, strong) id imageResponseSerializer; + +///-------------------- +/// @name Setting Image +///-------------------- + +/** + Asynchronously downloads an image from the specified URL, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + @param state The control state. + @param url The URL used for the image request. + */ +- (void)setImageForState:(UIControlState)state + withURL:(NSURL *)url; + +/** + Asynchronously downloads an image from the specified URL, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + @param state The control state. + @param url The URL used for the image request. + @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the button will not change its image until the image request finishes. + */ +- (void)setImageForState:(UIControlState)state + withURL:(NSURL *)url + placeholderImage:(nullable UIImage *)placeholderImage; + +/** + Asynchronously downloads an image from the specified URL request, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + If a success block is specified, it is the responsibility of the block to set the image of the button before returning. If no success block is specified, the default behavior of setting the image with `setImage:forState:` is applied. + + @param state The control state. + @param urlRequest The URL request used for the image request. + @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the button will not change its image until the image request finishes. + @param success A block to be executed when the image request operation finishes successfully. This block has no return value and takes two arguments: the server response and the image. If the image was returned from cache, the response parameter will be `nil`. + @param failure A block object to be executed when the image request operation finishes unsuccessfully, or that finishes successfully. This block has no return value and takes a single argument: the error that occurred. + */ +- (void)setImageForState:(UIControlState)state + withURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(nullable UIImage *)placeholderImage + success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * __nullable response, UIImage *image))success + failure:(nullable void (^)(NSError *error))failure; + + +///------------------------------- +/// @name Setting Background Image +///------------------------------- + +/** + Asynchronously downloads an image from the specified URL, and sets it as the background image for the specified state once the request is finished. Any previous background image request for the receiver will be cancelled. + + If the background image is cached locally, the background image is set immediately, otherwise the specified placeholder background image will be set immediately, and then the remote background image will be set once the request is finished. + + @param state The control state. + @param url The URL used for the background image request. + */ +- (void)setBackgroundImageForState:(UIControlState)state + withURL:(NSURL *)url; + +/** + Asynchronously downloads an image from the specified URL, and sets it as the background image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + @param state The control state. + @param url The URL used for the background image request. + @param placeholderImage The background image to be set initially, until the background image request finishes. If `nil`, the button will not change its background image until the background image request finishes. + */ +- (void)setBackgroundImageForState:(UIControlState)state + withURL:(NSURL *)url + placeholderImage:(nullable UIImage *)placeholderImage; + +/** + Asynchronously downloads an image from the specified URL request, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + If a success block is specified, it is the responsibility of the block to set the image of the button before returning. If no success block is specified, the default behavior of setting the image with `setBackgroundImage:forState:` is applied. + + @param state The control state. + @param urlRequest The URL request used for the image request. + @param placeholderImage The background image to be set initially, until the background image request finishes. If `nil`, the button will not change its background image until the background image request finishes. + @param success A block to be executed when the image request operation finishes successfully. This block has no return value and takes two arguments: the server response and the image. If the image was returned from cache, the response parameter will be `nil`. + @param failure A block object to be executed when the image request operation finishes unsuccessfully, or that finishes successfully. This block has no return value and takes a single argument: the error that occurred. + */ +- (void)setBackgroundImageForState:(UIControlState)state + withURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(nullable UIImage *)placeholderImage + success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * __nullable response, UIImage *image))success + failure:(nullable void (^)(NSError *error))failure; + + +///------------------------------ +/// @name Canceling Image Loading +///------------------------------ + +/** + Cancels any executing image operation for the specified control state of the receiver, if one exists. + + @param state The control state. + */ +- (void)cancelImageRequestOperationForState:(UIControlState)state; + +/** + Cancels any executing background image operation for the specified control state of the receiver, if one exists. + + @param state The control state. + */ +- (void)cancelBackgroundImageRequestOperationForState:(UIControlState)state; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m new file mode 100644 index 0000000..e5c36a5 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m @@ -0,0 +1,293 @@ +// UIButton+AFNetworking.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import "UIButton+AFNetworking.h" + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import "AFURLResponseSerialization.h" +#import "AFHTTPRequestOperation.h" + +#import "UIImageView+AFNetworking.h" + +@interface UIButton (_AFNetworking) +@end + +@implementation UIButton (_AFNetworking) + ++ (NSOperationQueue *)af_sharedImageRequestOperationQueue { + static NSOperationQueue *_af_sharedImageRequestOperationQueue = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_sharedImageRequestOperationQueue = [[NSOperationQueue alloc] init]; + _af_sharedImageRequestOperationQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount; + }); + + return _af_sharedImageRequestOperationQueue; +} + +#pragma mark - + +static char AFImageRequestOperationNormal; +static char AFImageRequestOperationHighlighted; +static char AFImageRequestOperationSelected; +static char AFImageRequestOperationDisabled; + +static const char * af_imageRequestOperationKeyForState(UIControlState state) { + switch (state) { + case UIControlStateHighlighted: + return &AFImageRequestOperationHighlighted; + case UIControlStateSelected: + return &AFImageRequestOperationSelected; + case UIControlStateDisabled: + return &AFImageRequestOperationDisabled; + case UIControlStateNormal: + default: + return &AFImageRequestOperationNormal; + } +} + +- (AFHTTPRequestOperation *)af_imageRequestOperationForState:(UIControlState)state { + return (AFHTTPRequestOperation *)objc_getAssociatedObject(self, af_imageRequestOperationKeyForState(state)); +} + +- (void)af_setImageRequestOperation:(AFHTTPRequestOperation *)imageRequestOperation + forState:(UIControlState)state +{ + objc_setAssociatedObject(self, af_imageRequestOperationKeyForState(state), imageRequestOperation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +static char AFBackgroundImageRequestOperationNormal; +static char AFBackgroundImageRequestOperationHighlighted; +static char AFBackgroundImageRequestOperationSelected; +static char AFBackgroundImageRequestOperationDisabled; + +static const char * af_backgroundImageRequestOperationKeyForState(UIControlState state) { + switch (state) { + case UIControlStateHighlighted: + return &AFBackgroundImageRequestOperationHighlighted; + case UIControlStateSelected: + return &AFBackgroundImageRequestOperationSelected; + case UIControlStateDisabled: + return &AFBackgroundImageRequestOperationDisabled; + case UIControlStateNormal: + default: + return &AFBackgroundImageRequestOperationNormal; + } +} + +- (AFHTTPRequestOperation *)af_backgroundImageRequestOperationForState:(UIControlState)state { + return (AFHTTPRequestOperation *)objc_getAssociatedObject(self, af_backgroundImageRequestOperationKeyForState(state)); +} + +- (void)af_setBackgroundImageRequestOperation:(AFHTTPRequestOperation *)imageRequestOperation + forState:(UIControlState)state +{ + objc_setAssociatedObject(self, af_backgroundImageRequestOperationKeyForState(state), imageRequestOperation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +@end + +#pragma mark - + +@implementation UIButton (AFNetworking) + ++ (id )sharedImageCache { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(sharedImageCache)) ?: [UIImageView sharedImageCache]; +#pragma clang diagnostic pop +} + ++ (void)setSharedImageCache:(__nullable id )imageCache { + objc_setAssociatedObject(self, @selector(sharedImageCache), imageCache, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +- (id )imageResponseSerializer { + static id _af_defaultImageResponseSerializer = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_defaultImageResponseSerializer = [AFImageResponseSerializer serializer]; + }); + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(imageResponseSerializer)) ?: _af_defaultImageResponseSerializer; +#pragma clang diagnostic pop +} + +- (void)setImageResponseSerializer:(id )serializer { + objc_setAssociatedObject(self, @selector(imageResponseSerializer), serializer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +- (void)setImageForState:(UIControlState)state + withURL:(NSURL *)url +{ + [self setImageForState:state withURL:url placeholderImage:nil]; +} + +- (void)setImageForState:(UIControlState)state + withURL:(NSURL *)url + placeholderImage:(UIImage *)placeholderImage +{ + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; + + [self setImageForState:state withURLRequest:request placeholderImage:placeholderImage success:nil failure:nil]; +} + +- (void)setImageForState:(UIControlState)state + withURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(UIImage *)placeholderImage + success:(void (^)(NSURLRequest *request, NSHTTPURLResponse * __nullable response, UIImage *image))success + failure:(void (^)(NSError *error))failure +{ + [self cancelImageRequestOperationForState:state]; + + UIImage *cachedImage = [[[self class] sharedImageCache] cachedImageForRequest:urlRequest]; + if (cachedImage) { + if (success) { + success(urlRequest, nil, cachedImage); + } else { + [self setImage:cachedImage forState:state]; + } + + [self af_setImageRequestOperation:nil forState:state]; + } else { + if (placeholderImage) { + [self setImage:placeholderImage forState:state]; + } + + __weak __typeof(self)weakSelf = self; + AFHTTPRequestOperation *imageRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest]; + imageRequestOperation.responseSerializer = self.imageResponseSerializer; + [imageRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + if ([[urlRequest URL] isEqual:[operation.request URL]]) { + if (success) { + success(operation.request, operation.response, responseObject); + } else if (responseObject) { + [strongSelf setImage:responseObject forState:state]; + } + } + [[[strongSelf class] sharedImageCache] cacheImage:responseObject forRequest:urlRequest]; + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + if ([[urlRequest URL] isEqual:[operation.request URL]]) { + if (failure) { + failure(error); + } + } + }]; + + [self af_setImageRequestOperation:imageRequestOperation forState:state]; + [[[self class] af_sharedImageRequestOperationQueue] addOperation:imageRequestOperation]; + } +} + +#pragma mark - + +- (void)setBackgroundImageForState:(UIControlState)state + withURL:(NSURL *)url +{ + [self setBackgroundImageForState:state withURL:url placeholderImage:nil]; +} + +- (void)setBackgroundImageForState:(UIControlState)state + withURL:(NSURL *)url + placeholderImage:(UIImage *)placeholderImage +{ + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; + + [self setBackgroundImageForState:state withURLRequest:request placeholderImage:placeholderImage success:nil failure:nil]; +} + +- (void)setBackgroundImageForState:(UIControlState)state + withURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(UIImage *)placeholderImage + success:(void (^)(NSURLRequest *request, NSHTTPURLResponse * __nullable response, UIImage *image))success + failure:(void (^)(NSError *error))failure +{ + [self cancelBackgroundImageRequestOperationForState:state]; + + UIImage *cachedImage = [[[self class] sharedImageCache] cachedImageForRequest:urlRequest]; + if (cachedImage) { + if (success) { + success(urlRequest, nil, cachedImage); + } else { + [self setBackgroundImage:cachedImage forState:state]; + } + + [self af_setBackgroundImageRequestOperation:nil forState:state]; + } else { + if (placeholderImage) { + [self setBackgroundImage:placeholderImage forState:state]; + } + + __weak __typeof(self)weakSelf = self; + AFHTTPRequestOperation *backgroundImageRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest]; + backgroundImageRequestOperation.responseSerializer = self.imageResponseSerializer; + [backgroundImageRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + if ([[urlRequest URL] isEqual:[operation.request URL]]) { + if (success) { + success(operation.request, operation.response, responseObject); + } else if (responseObject) { + [strongSelf setBackgroundImage:responseObject forState:state]; + } + } + [[[strongSelf class] sharedImageCache] cacheImage:responseObject forRequest:urlRequest]; + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + if ([[urlRequest URL] isEqual:[operation.request URL]]) { + if (failure) { + failure(error); + } + } + }]; + + [self af_setBackgroundImageRequestOperation:backgroundImageRequestOperation forState:state]; + [[[self class] af_sharedImageRequestOperationQueue] addOperation:backgroundImageRequestOperation]; + } +} + +#pragma mark - + +- (void)cancelImageRequestOperationForState:(UIControlState)state { + [[self af_imageRequestOperationForState:state] cancel]; + [self af_setImageRequestOperation:nil forState:state]; +} + +- (void)cancelBackgroundImageRequestOperationForState:(UIControlState)state { + [[self af_backgroundImageRequestOperationForState:state] cancel]; + [self af_setBackgroundImageRequestOperation:nil forState:state]; +} + +@end + +#endif diff --git a/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIImage+AFNetworking.h b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIImage+AFNetworking.h new file mode 100644 index 0000000..3292920 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIImage+AFNetworking.h @@ -0,0 +1,35 @@ +// +// UIImage+AFNetworking.h +// +// +// Created by Paulo Ferreira on 08/07/15. +// +// 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. + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +@interface UIImage (AFNetworking) + ++ (UIImage*) safeImageWithData:(NSData*)data; + +@end + +#endif diff --git a/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h new file mode 100644 index 0000000..bf61915 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h @@ -0,0 +1,146 @@ +// UIImageView+AFNetworking.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol AFURLResponseSerialization, AFImageCache; + +/** + This category adds methods to the UIKit framework's `UIImageView` class. The methods in this category provide support for loading remote images asynchronously from a URL. + */ +@interface UIImageView (AFNetworking) + +///---------------------------- +/// @name Accessing Image Cache +///---------------------------- + +/** + The image cache used to improve image loading performance on scroll views. By default, this is an `NSCache` subclass conforming to the `AFImageCache` protocol, which listens for notification warnings and evicts objects accordingly. +*/ ++ (id )sharedImageCache; + +/** + Set the cache used for image loading. + + @param imageCache The image cache. + */ ++ (void)setSharedImageCache:(__nullable id )imageCache; + +///------------------------------------ +/// @name Accessing Response Serializer +///------------------------------------ + +/** + The response serializer used to create an image representation from the server response and response data. By default, this is an instance of `AFImageResponseSerializer`. + + @discussion Subclasses of `AFImageResponseSerializer` could be used to perform post-processing, such as color correction, face detection, or other effects. See https://github.com/AFNetworking/AFCoreImageSerializer + */ +@property (nonatomic, strong) id imageResponseSerializer; + +///-------------------- +/// @name Setting Image +///-------------------- + +/** + Asynchronously downloads an image from the specified URL, and sets it once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + By default, URL requests have a `Accept` header field value of "image / *", a cache policy of `NSURLCacheStorageAllowed` and a timeout interval of 30 seconds, and are set not handle cookies. To configure URL requests differently, use `setImageWithURLRequest:placeholderImage:success:failure:` + + @param url The URL used for the image request. + */ +- (void)setImageWithURL:(NSURL *)url; + +/** + Asynchronously downloads an image from the specified URL, and sets it once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + By default, URL requests have a `Accept` header field value of "image / *", a cache policy of `NSURLCacheStorageAllowed` and a timeout interval of 30 seconds, and are set not handle cookies. To configure URL requests differently, use `setImageWithURLRequest:placeholderImage:success:failure:` + + @param url The URL used for the image request. + @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the image view will not change its image until the image request finishes. + */ +- (void)setImageWithURL:(NSURL *)url + placeholderImage:(nullable UIImage *)placeholderImage; + +/** + Asynchronously downloads an image from the specified URL request, and sets it once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + If a success block is specified, it is the responsibility of the block to set the image of the image view before returning. If no success block is specified, the default behavior of setting the image with `self.image = image` is applied. + + @param urlRequest The URL request used for the image request. + @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the image view will not change its image until the image request finishes. + @param success A block to be executed when the image request operation finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the image created from the response data of request. If the image was returned from cache, the response parameter will be `nil`. + @param failure A block object to be executed when the image request operation finishes unsuccessfully, or that finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the error object describing the network or parsing error that occurred. + */ +- (void)setImageWithURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(nullable UIImage *)placeholderImage + success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * __nullable response, UIImage *image))success + failure:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * __nullable response, NSError *error))failure; + +/** + Cancels any executing image operation for the receiver, if one exists. + */ +- (void)cancelImageRequestOperation; + +@end + +#pragma mark - + +/** + The `AFImageCache` protocol is adopted by an object used to cache images loaded by the AFNetworking category on `UIImageView`. + */ +@protocol AFImageCache + +/** + Returns a cached image for the specified request, if available. + + @param request The image request. + + @return The cached image. + */ +- (nullable UIImage *)cachedImageForRequest:(NSURLRequest *)request; + +/** + Caches a particular image for the specified request. + + @param image The image to cache. + @param request The request to be used as a cache key. + */ +- (void)cacheImage:(UIImage *)image + forRequest:(NSURLRequest *)request; +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m new file mode 100644 index 0000000..2efc160 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m @@ -0,0 +1,215 @@ +// UIImageView+AFNetworking.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import "UIImageView+AFNetworking.h" + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import "AFHTTPRequestOperation.h" + +@interface AFImageCache : NSCache +@end + +#pragma mark - + +@interface UIImageView (_AFNetworking) +@property (readwrite, nonatomic, strong, setter = af_setImageRequestOperation:) AFHTTPRequestOperation *af_imageRequestOperation; +@end + +@implementation UIImageView (_AFNetworking) + ++ (NSOperationQueue *)af_sharedImageRequestOperationQueue { + static NSOperationQueue *_af_sharedImageRequestOperationQueue = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_sharedImageRequestOperationQueue = [[NSOperationQueue alloc] init]; + _af_sharedImageRequestOperationQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount; + }); + + return _af_sharedImageRequestOperationQueue; +} + +- (AFHTTPRequestOperation *)af_imageRequestOperation { + return (AFHTTPRequestOperation *)objc_getAssociatedObject(self, @selector(af_imageRequestOperation)); +} + +- (void)af_setImageRequestOperation:(AFHTTPRequestOperation *)imageRequestOperation { + objc_setAssociatedObject(self, @selector(af_imageRequestOperation), imageRequestOperation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +@end + +#pragma mark - + +@implementation UIImageView (AFNetworking) +@dynamic imageResponseSerializer; + ++ (id )sharedImageCache { + static AFImageCache *_af_defaultImageCache = nil; + static dispatch_once_t oncePredicate; + dispatch_once(&oncePredicate, ^{ + _af_defaultImageCache = [[AFImageCache alloc] init]; + + [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidReceiveMemoryWarningNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * __unused notification) { + [_af_defaultImageCache removeAllObjects]; + }]; + }); + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(sharedImageCache)) ?: _af_defaultImageCache; +#pragma clang diagnostic pop +} + ++ (void)setSharedImageCache:(__nullable id )imageCache { + objc_setAssociatedObject(self, @selector(sharedImageCache), imageCache, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +- (id )imageResponseSerializer { + static id _af_defaultImageResponseSerializer = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_defaultImageResponseSerializer = [AFImageResponseSerializer serializer]; + }); + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(imageResponseSerializer)) ?: _af_defaultImageResponseSerializer; +#pragma clang diagnostic pop +} + +- (void)setImageResponseSerializer:(id )serializer { + objc_setAssociatedObject(self, @selector(imageResponseSerializer), serializer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +- (void)setImageWithURL:(NSURL *)url { + [self setImageWithURL:url placeholderImage:nil]; +} + +- (void)setImageWithURL:(NSURL *)url + placeholderImage:(UIImage *)placeholderImage +{ + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; + + [self setImageWithURLRequest:request placeholderImage:placeholderImage success:nil failure:nil]; +} + +- (void)setImageWithURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(UIImage *)placeholderImage + success:(void (^)(NSURLRequest *request, NSHTTPURLResponse * __nullable response, UIImage *image))success + failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse * __nullable response, NSError *error))failure +{ + [self cancelImageRequestOperation]; + + UIImage *cachedImage = [[[self class] sharedImageCache] cachedImageForRequest:urlRequest]; + if (cachedImage) { + if (success) { + success(urlRequest, nil, cachedImage); + } else { + self.image = cachedImage; + } + + self.af_imageRequestOperation = nil; + } else { + if (placeholderImage) { + self.image = placeholderImage; + } + + __weak __typeof(self)weakSelf = self; + self.af_imageRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest]; + self.af_imageRequestOperation.responseSerializer = self.imageResponseSerializer; + [self.af_imageRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + if ([[urlRequest URL] isEqual:[strongSelf.af_imageRequestOperation.request URL]]) { + if (success) { + success(urlRequest, operation.response, responseObject); + } else if (responseObject) { + strongSelf.image = responseObject; + } + + if (operation == strongSelf.af_imageRequestOperation){ + strongSelf.af_imageRequestOperation = nil; + } + } + + [[[strongSelf class] sharedImageCache] cacheImage:responseObject forRequest:urlRequest]; + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + if ([[urlRequest URL] isEqual:[strongSelf.af_imageRequestOperation.request URL]]) { + if (failure) { + failure(urlRequest, operation.response, error); + } + + if (operation == strongSelf.af_imageRequestOperation){ + strongSelf.af_imageRequestOperation = nil; + } + } + }]; + + [[[self class] af_sharedImageRequestOperationQueue] addOperation:self.af_imageRequestOperation]; + } +} + +- (void)cancelImageRequestOperation { + [self.af_imageRequestOperation cancel]; + self.af_imageRequestOperation = nil; +} + +@end + +#pragma mark - + +static inline NSString * AFImageCacheKeyFromURLRequest(NSURLRequest *request) { + return [[request URL] absoluteString]; +} + +@implementation AFImageCache + +- (UIImage *)cachedImageForRequest:(NSURLRequest *)request { + switch ([request cachePolicy]) { + case NSURLRequestReloadIgnoringCacheData: + case NSURLRequestReloadIgnoringLocalAndRemoteCacheData: + return nil; + default: + break; + } + + return [self objectForKey:AFImageCacheKeyFromURLRequest(request)]; +} + +- (void)cacheImage:(UIImage *)image + forRequest:(NSURLRequest *)request +{ + if (image && request) { + [self setObject:image forKey:AFImageCacheKeyFromURLRequest(request)]; + } +} + +@end + +#endif diff --git a/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h new file mode 100644 index 0000000..49850ed --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h @@ -0,0 +1,39 @@ +// UIKit+AFNetworking.h +// +// Copyright (c) 2013 AFNetworking (http://afnetworking.com/) +// +// 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. + +#if TARGET_OS_IOS +#import + +#ifndef _UIKIT_AFNETWORKING_ + #define _UIKIT_AFNETWORKING_ + + #import "AFNetworkActivityIndicatorManager.h" + + #import "UIActivityIndicatorView+AFNetworking.h" + #import "UIAlertView+AFNetworking.h" + #import "UIButton+AFNetworking.h" + #import "UIImageView+AFNetworking.h" + #import "UIProgressView+AFNetworking.h" + #import "UIRefreshControl+AFNetworking.h" + #import "UIWebView+AFNetworking.h" +#endif /* _UIKIT_AFNETWORKING_ */ +#endif diff --git a/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h new file mode 100644 index 0000000..5c00d6d --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h @@ -0,0 +1,91 @@ +// UIProgressView+AFNetworking.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class AFURLConnectionOperation; + +/** + This category adds methods to the UIKit framework's `UIProgressView` class. The methods in this category provide support for binding the progress to the upload and download progress of a session task or request operation. + */ +@interface UIProgressView (AFNetworking) + +///------------------------------------ +/// @name Setting Session Task Progress +///------------------------------------ + +/** + Binds the progress to the upload progress of the specified session task. + + @param task The session task. + @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. + */ +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setProgressWithUploadProgressOfTask:(NSURLSessionUploadTask *)task + animated:(BOOL)animated; +#endif + +/** + Binds the progress to the download progress of the specified session task. + + @param task The session task. + @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. + */ +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setProgressWithDownloadProgressOfTask:(NSURLSessionDownloadTask *)task + animated:(BOOL)animated; +#endif + +///------------------------------------ +/// @name Setting Session Task Progress +///------------------------------------ + +/** + Binds the progress to the upload progress of the specified request operation. + + @param operation The request operation. + @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. + */ +- (void)setProgressWithUploadProgressOfOperation:(AFURLConnectionOperation *)operation + animated:(BOOL)animated; + +/** + Binds the progress to the download progress of the specified request operation. + + @param operation The request operation. + @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. + */ +- (void)setProgressWithDownloadProgressOfOperation:(AFURLConnectionOperation *)operation + animated:(BOOL)animated; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m new file mode 100644 index 0000000..ad2c280 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m @@ -0,0 +1,182 @@ +// UIProgressView+AFNetworking.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import "UIProgressView+AFNetworking.h" + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import "AFURLConnectionOperation.h" + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +#import "AFURLSessionManager.h" +#endif + +static void * AFTaskCountOfBytesSentContext = &AFTaskCountOfBytesSentContext; +static void * AFTaskCountOfBytesReceivedContext = &AFTaskCountOfBytesReceivedContext; + +@interface AFURLConnectionOperation (_UIProgressView) +@property (readwrite, nonatomic, copy) void (^uploadProgress)(NSUInteger bytes, long long totalBytes, long long totalBytesExpected); +@property (readwrite, nonatomic, assign, setter = af_setUploadProgressAnimated:) BOOL af_uploadProgressAnimated; + +@property (readwrite, nonatomic, copy) void (^downloadProgress)(NSUInteger bytes, long long totalBytes, long long totalBytesExpected); +@property (readwrite, nonatomic, assign, setter = af_setDownloadProgressAnimated:) BOOL af_downloadProgressAnimated; +@end + +@implementation AFURLConnectionOperation (_UIProgressView) +@dynamic uploadProgress; // Implemented in AFURLConnectionOperation +@dynamic af_uploadProgressAnimated; + +@dynamic downloadProgress; // Implemented in AFURLConnectionOperation +@dynamic af_downloadProgressAnimated; +@end + +#pragma mark - + +@implementation UIProgressView (AFNetworking) + +- (BOOL)af_uploadProgressAnimated { + return [(NSNumber *)objc_getAssociatedObject(self, @selector(af_uploadProgressAnimated)) boolValue]; +} + +- (void)af_setUploadProgressAnimated:(BOOL)animated { + objc_setAssociatedObject(self, @selector(af_uploadProgressAnimated), @(animated), OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (BOOL)af_downloadProgressAnimated { + return [(NSNumber *)objc_getAssociatedObject(self, @selector(af_downloadProgressAnimated)) boolValue]; +} + +- (void)af_setDownloadProgressAnimated:(BOOL)animated { + objc_setAssociatedObject(self, @selector(af_downloadProgressAnimated), @(animated), OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setProgressWithUploadProgressOfTask:(NSURLSessionUploadTask *)task + animated:(BOOL)animated +{ + [task addObserver:self forKeyPath:@"state" options:(NSKeyValueObservingOptions)0 context:AFTaskCountOfBytesSentContext]; + [task addObserver:self forKeyPath:@"countOfBytesSent" options:(NSKeyValueObservingOptions)0 context:AFTaskCountOfBytesSentContext]; + + [self af_setUploadProgressAnimated:animated]; +} + +- (void)setProgressWithDownloadProgressOfTask:(NSURLSessionDownloadTask *)task + animated:(BOOL)animated +{ + [task addObserver:self forKeyPath:@"state" options:(NSKeyValueObservingOptions)0 context:AFTaskCountOfBytesReceivedContext]; + [task addObserver:self forKeyPath:@"countOfBytesReceived" options:(NSKeyValueObservingOptions)0 context:AFTaskCountOfBytesReceivedContext]; + + [self af_setDownloadProgressAnimated:animated]; +} +#endif + +#pragma mark - + +- (void)setProgressWithUploadProgressOfOperation:(AFURLConnectionOperation *)operation + animated:(BOOL)animated +{ + __weak __typeof(self)weakSelf = self; + void (^original)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) = [operation.uploadProgress copy]; + [operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) { + if (original) { + original(bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); + } + + dispatch_async(dispatch_get_main_queue(), ^{ + if (totalBytesExpectedToWrite > 0) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + [strongSelf setProgress:(totalBytesWritten / (totalBytesExpectedToWrite * 1.0f)) animated:animated]; + } + }); + }]; +} + +- (void)setProgressWithDownloadProgressOfOperation:(AFURLConnectionOperation *)operation + animated:(BOOL)animated +{ + __weak __typeof(self)weakSelf = self; + void (^original)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) = [operation.downloadProgress copy]; + [operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) { + if (original) { + original(bytesRead, totalBytesRead, totalBytesExpectedToRead); + } + + dispatch_async(dispatch_get_main_queue(), ^{ + if (totalBytesExpectedToRead > 0) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + [strongSelf setProgress:(totalBytesRead / (totalBytesExpectedToRead * 1.0f)) animated:animated]; + } + }); + }]; +} + +#pragma mark - NSKeyValueObserving + +- (void)observeValueForKeyPath:(NSString *)keyPath + ofObject:(id)object + change:(__unused NSDictionary *)change + context:(void *)context +{ +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 + if (context == AFTaskCountOfBytesSentContext || context == AFTaskCountOfBytesReceivedContext) { + if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesSent))]) { + if ([object countOfBytesExpectedToSend] > 0) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self setProgress:[object countOfBytesSent] / ([object countOfBytesExpectedToSend] * 1.0f) animated:self.af_uploadProgressAnimated]; + }); + } + } + + if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesReceived))]) { + if ([object countOfBytesExpectedToReceive] > 0) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self setProgress:[object countOfBytesReceived] / ([object countOfBytesExpectedToReceive] * 1.0f) animated:self.af_downloadProgressAnimated]; + }); + } + } + + if ([keyPath isEqualToString:NSStringFromSelector(@selector(state))]) { + if ([(NSURLSessionTask *)object state] == NSURLSessionTaskStateCompleted) { + @try { + [object removeObserver:self forKeyPath:NSStringFromSelector(@selector(state))]; + + if (context == AFTaskCountOfBytesSentContext) { + [object removeObserver:self forKeyPath:NSStringFromSelector(@selector(countOfBytesSent))]; + } + + if (context == AFTaskCountOfBytesReceivedContext) { + [object removeObserver:self forKeyPath:NSStringFromSelector(@selector(countOfBytesReceived))]; + } + } + @catch (NSException * __unused exception) {} + } + } + } +#endif +} + +@end + +#endif diff --git a/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h new file mode 100644 index 0000000..a65e390 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h @@ -0,0 +1,68 @@ +// UIRefreshControl+AFNetworking.m +// +// Copyright (c) 2014 AFNetworking (http://afnetworking.com) +// +// 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. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class AFURLConnectionOperation; + +/** + This category adds methods to the UIKit framework's `UIRefreshControl` class. The methods in this category provide support for automatically beginning and ending refreshing depending on the loading state of a request operation or session task. + */ +@interface UIRefreshControl (AFNetworking) + +///----------------------------------- +/// @name Refreshing for Session Tasks +///----------------------------------- + +/** + Binds the refreshing state to the state of the specified task. + + @param task The task. If `nil`, automatic updating from any previously specified operation will be disabled. + */ +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task; +#endif + +///---------------------------------------- +/// @name Refreshing for Request Operations +///---------------------------------------- + +/** + Binds the refreshing state to the execution state of the specified operation. + + @param operation The operation. If `nil`, automatic updating from any previously specified operation will be disabled. + */ +- (void)setRefreshingWithStateOfOperation:(AFURLConnectionOperation *)operation; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m new file mode 100644 index 0000000..4c19245 --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m @@ -0,0 +1,166 @@ +// UIRefreshControl+AFNetworking.m +// +// Copyright (c) 2014 AFNetworking (http://afnetworking.com) +// +// 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. + +#import "UIRefreshControl+AFNetworking.h" +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import "AFHTTPRequestOperation.h" + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +#import "AFURLSessionManager.h" +#endif + +@interface AFRefreshControlNotificationObserver : NSObject +@property (readonly, nonatomic, weak) UIRefreshControl *refreshControl; +- (instancetype)initWithActivityRefreshControl:(UIRefreshControl *)refreshControl; + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task; +#endif +- (void)setRefreshingWithStateOfOperation:(AFURLConnectionOperation *)operation; + +@end + +@implementation UIRefreshControl (AFNetworking) + +- (AFRefreshControlNotificationObserver *)af_notificationObserver { + AFRefreshControlNotificationObserver *notificationObserver = objc_getAssociatedObject(self, @selector(af_notificationObserver)); + if (notificationObserver == nil) { + notificationObserver = [[AFRefreshControlNotificationObserver alloc] initWithActivityRefreshControl:self]; + objc_setAssociatedObject(self, @selector(af_notificationObserver), notificationObserver, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + return notificationObserver; +} + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task { + [[self af_notificationObserver] setRefreshingWithStateOfTask:task]; +} +#endif + +- (void)setRefreshingWithStateOfOperation:(AFURLConnectionOperation *)operation { + [[self af_notificationObserver] setRefreshingWithStateOfOperation:operation]; +} + +@end + +@implementation AFRefreshControlNotificationObserver + +- (instancetype)initWithActivityRefreshControl:(UIRefreshControl *)refreshControl +{ + self = [super init]; + if (self) { + _refreshControl = refreshControl; + } + return self; +} + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task { + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + + [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; + + if (task) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" +#pragma clang diagnostic ignored "-Warc-repeated-use-of-weak" + if (task.state == NSURLSessionTaskStateRunning) { + [self.refreshControl beginRefreshing]; + + [notificationCenter addObserver:self selector:@selector(af_beginRefreshing) name:AFNetworkingTaskDidResumeNotification object:task]; + [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingTaskDidCompleteNotification object:task]; + [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingTaskDidSuspendNotification object:task]; + } else { + [self.refreshControl endRefreshing]; + } +#pragma clang diagnostic pop + } +} +#endif + +- (void)setRefreshingWithStateOfOperation:(AFURLConnectionOperation *)operation { + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + + [notificationCenter removeObserver:self name:AFNetworkingOperationDidStartNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingOperationDidFinishNotification object:nil]; + + if (operation) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" +#pragma clang diagnostic ignored "-Warc-repeated-use-of-weak" + if (![operation isFinished]) { + if ([operation isExecuting]) { + [self.refreshControl beginRefreshing]; + } else { + [self.refreshControl endRefreshing]; + } + + [notificationCenter addObserver:self selector:@selector(af_beginRefreshing) name:AFNetworkingOperationDidStartNotification object:operation]; + [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingOperationDidFinishNotification object:operation]; + } +#pragma clang diagnostic pop + } +} + +#pragma mark - + +- (void)af_beginRefreshing { + dispatch_async(dispatch_get_main_queue(), ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" + [self.refreshControl beginRefreshing]; +#pragma clang diagnostic pop + }); +} + +- (void)af_endRefreshing { + dispatch_async(dispatch_get_main_queue(), ^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreceiver-is-weak" + [self.refreshControl endRefreshing]; +#pragma clang diagnostic pop + }); +} + +#pragma mark - + +- (void)dealloc { + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 + [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; +#endif + + [notificationCenter removeObserver:self name:AFNetworkingOperationDidStartNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingOperationDidFinishNotification object:nil]; +} + +@end + +#endif diff --git a/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h new file mode 100644 index 0000000..5d61d6a --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h @@ -0,0 +1,86 @@ +// UIWebView+AFNetworking.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class AFHTTPRequestSerializer, AFHTTPResponseSerializer; +@protocol AFURLRequestSerialization, AFURLResponseSerialization; + +/** + This category adds methods to the UIKit framework's `UIWebView` class. The methods in this category provide increased control over the request cycle, including progress monitoring and success / failure handling. + + @discussion When using these category methods, make sure to assign `delegate` for the web view, which implements `–webView:shouldStartLoadWithRequest:navigationType:` appropriately. This allows for tapped links to be loaded through AFNetworking, and can ensure that `canGoBack` & `canGoForward` update their values correctly. + */ +@interface UIWebView (AFNetworking) + +/** + The request serializer used to serialize requests made with the `-loadRequest:...` category methods. By default, this is an instance of `AFHTTPRequestSerializer`. + */ +@property (nonatomic, strong) AFHTTPRequestSerializer * requestSerializer; + +/** + The response serializer used to serialize responses made with the `-loadRequest:...` category methods. By default, this is an instance of `AFHTTPResponseSerializer`. + */ +@property (nonatomic, strong) AFHTTPResponseSerializer * responseSerializer; + +/** + Asynchronously loads the specified request. + + @param request A URL request identifying the location of the content to load. This must not be `nil`. + @param progress A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the main thread. + @param success A block object to be executed when the request finishes loading successfully. This block returns the HTML string to be loaded by the web view, and takes two arguments: the response, and the response string. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a single argument: the error that occurred. + */ +- (void)loadRequest:(NSURLRequest *)request + progress:(nullable void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress + success:(nullable NSString * (^)(NSHTTPURLResponse *response, NSString *HTML))success + failure:(nullable void (^)(NSError *error))failure; + +/** + Asynchronously loads the data associated with a particular request with a specified MIME type and text encoding. + + @param request A URL request identifying the location of the content to load. This must not be `nil`. + @param MIMEType The MIME type of the content. Defaults to the content type of the response if not specified. + @param textEncodingName The IANA encoding name, as in `utf-8` or `utf-16`. Defaults to the response text encoding if not specified. + @param progress A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the main thread. + @param success A block object to be executed when the request finishes loading successfully. This block returns the data to be loaded by the web view and takes two arguments: the response, and the downloaded data. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a single argument: the error that occurred. + */ +- (void)loadRequest:(NSURLRequest *)request + MIMEType:(nullable NSString *)MIMEType + textEncodingName:(nullable NSString *)textEncodingName + progress:(nullable void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress + success:(nullable NSData * (^)(NSHTTPURLResponse *response, NSData *data))success + failure:(nullable void (^)(NSError *error))failure; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m new file mode 100644 index 0000000..93eacaa --- /dev/null +++ b/BreakingBad/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m @@ -0,0 +1,159 @@ +// UIWebView+AFNetworking.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// 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. + +#import "UIWebView+AFNetworking.h" + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import "AFHTTPRequestOperation.h" +#import "AFURLResponseSerialization.h" +#import "AFURLRequestSerialization.h" + +@interface UIWebView (_AFNetworking) +@property (readwrite, nonatomic, strong, setter = af_setHTTPRequestOperation:) AFHTTPRequestOperation *af_HTTPRequestOperation; +@end + +@implementation UIWebView (_AFNetworking) + +- (AFHTTPRequestOperation *)af_HTTPRequestOperation { + return (AFHTTPRequestOperation *)objc_getAssociatedObject(self, @selector(af_HTTPRequestOperation)); +} + +- (void)af_setHTTPRequestOperation:(AFHTTPRequestOperation *)operation { + objc_setAssociatedObject(self, @selector(af_HTTPRequestOperation), operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +@end + +#pragma mark - + +@implementation UIWebView (AFNetworking) + +- (AFHTTPRequestSerializer *)requestSerializer { + static AFHTTPRequestSerializer *_af_defaultRequestSerializer = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_defaultRequestSerializer = [AFHTTPRequestSerializer serializer]; + }); + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(requestSerializer)) ?: _af_defaultRequestSerializer; +#pragma clang diagnostic pop +} + +- (void)setRequestSerializer:(AFHTTPRequestSerializer *)requestSerializer { + objc_setAssociatedObject(self, @selector(requestSerializer), requestSerializer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (AFHTTPResponseSerializer *)responseSerializer { + static AFHTTPResponseSerializer *_af_defaultResponseSerializer = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_defaultResponseSerializer = [AFHTTPResponseSerializer serializer]; + }); + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(responseSerializer)) ?: _af_defaultResponseSerializer; +#pragma clang diagnostic pop +} + +- (void)setResponseSerializer:(AFHTTPResponseSerializer *)responseSerializer { + objc_setAssociatedObject(self, @selector(responseSerializer), responseSerializer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +- (void)loadRequest:(NSURLRequest *)request + progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress + success:(NSString * (^)(NSHTTPURLResponse *response, NSString *HTML))success + failure:(void (^)(NSError *error))failure +{ + [self loadRequest:request MIMEType:nil textEncodingName:nil progress:progress success:^NSData *(NSHTTPURLResponse *response, NSData *data) { + NSStringEncoding stringEncoding = NSUTF8StringEncoding; + if (response.textEncodingName) { + CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)response.textEncodingName); + if (encoding != kCFStringEncodingInvalidId) { + stringEncoding = CFStringConvertEncodingToNSStringEncoding(encoding); + } + } + + NSString *string = [[NSString alloc] initWithData:data encoding:stringEncoding]; + if (success) { + string = success(response, string); + } + + return [string dataUsingEncoding:stringEncoding]; + } failure:failure]; +} + +- (void)loadRequest:(NSURLRequest *)request + MIMEType:(NSString *)MIMEType + textEncodingName:(NSString *)textEncodingName + progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress + success:(NSData * (^)(NSHTTPURLResponse *response, NSData *data))success + failure:(void (^)(NSError *error))failure +{ + NSParameterAssert(request); + + if (self.af_HTTPRequestOperation) { + [self.af_HTTPRequestOperation cancel]; + } + + request = [self.requestSerializer requestBySerializingRequest:request withParameters:nil error:nil]; + + self.af_HTTPRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + self.af_HTTPRequestOperation.responseSerializer = self.responseSerializer; + + __weak __typeof(self)weakSelf = self; + [self.af_HTTPRequestOperation setDownloadProgressBlock:progress]; + [self.af_HTTPRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id __unused responseObject) { + NSData *data = success ? success(operation.response, operation.responseData) : operation.responseData; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + __strong __typeof(weakSelf) strongSelf = weakSelf; + [strongSelf loadData:data MIMEType:(MIMEType ?: [operation.response MIMEType]) textEncodingName:(textEncodingName ?: [operation.response textEncodingName]) baseURL:[operation.response URL]]; + + if ([strongSelf.delegate respondsToSelector:@selector(webViewDidFinishLoad:)]) { + [strongSelf.delegate webViewDidFinishLoad:strongSelf]; + } + +#pragma clang diagnostic pop + } failure:^(AFHTTPRequestOperation * __unused operation, NSError *error) { + if (failure) { + failure(error); + } + }]; + + [self.af_HTTPRequestOperation start]; + + if ([self.delegate respondsToSelector:@selector(webViewDidStartLoad:)]) { + [self.delegate webViewDidStartLoad:self]; + } +} + +@end + +#endif diff --git a/BreakingBad/Pods/ContextMenu.iOS/LICENSE b/BreakingBad/Pods/ContextMenu.iOS/LICENSE new file mode 100644 index 0000000..e06d208 --- /dev/null +++ b/BreakingBad/Pods/ContextMenu.iOS/LICENSE @@ -0,0 +1,202 @@ +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + 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. + diff --git a/BreakingBad/Pods/ContextMenu.iOS/README.md b/BreakingBad/Pods/ContextMenu.iOS/README.md new file mode 100644 index 0000000..937a5e5 --- /dev/null +++ b/BreakingBad/Pods/ContextMenu.iOS/README.md @@ -0,0 +1,110 @@ +# Context-Menu.iOS + +#### You can easily add awesome animated context menu to your app. +Made in [Yalantis] (http://yalantis.com/) + +Check this [project on dribbble] (https://dribbble.com/shots/1785274-Menu-Animation-for-Additional-Functions?list=users&offset=17) + +Check this [project on Behance] (https://www.behance.net/gallery/20411445/Mobile-Animations-Interactions) + +![ContextMenu](https://d13yacurqjgara.cloudfront.net/users/125056/screenshots/1785274/99miles-profile-light_1-1-4.gif) + +### Usage: + +You are welcome to see the sample of the project for fully operating sample in the Example folder. + + * Add folder YALContextMenu to your project. + * `#import “YALContextMenuTableView.h”` to your view controller + * Create custom UITableViewCell with UIView property for rotation animation and UIView property for fade out animation. + * Your custom cell should implement YALContextMenuCell protocol + +```objective-c +@protocol YALContextMenuCell + +- (UIView *)animatedIcon; +- (UIView *)animatedContent; + +@end +``` + + * Use the following code sample to start menu + +```objective-c +- (IBAction)presentMenuButtonTapped:(UIBarButtonItem *)sender { + // init YALContextMenuTableView tableView + if (!self.contextMenuTableView) { + self.contextMenuTableView = [[YALContextMenuTableView alloc]initWithTableViewDelegateDataSource:self]; + self.contextMenuTableView.animationDuration = 0.15; + //optional - implement custom YALContextMenuTableView custom protocol + self.contextMenuTableView.yalDelegate = self; + + //register nib + UINib *cellNib = [UINib nibWithNibName:@"ContextMenuCell" bundle:nil]; + [self.contextMenuTableView registerNib:cellNib forCellReuseIdentifier:@"contextMenuCellReuseId"]; + } + + // it is better to use this method only for proper animation + [self.contextMenuTableView showInView:self.navigationController.view withEdgeInsets:UIEdgeInsetsZero animated:YES]; +} +``` + + * Use default UITableViewDataSource methods for additional set up and customisation of the cell. + * Сall `updateAlongsideRotation` method before the rotation animation started and `reloadData` method after rotation animation finished or in UIViewControllerTransitionCoordinator's `animateAlongsideTransition` block for proper rotation animation. + + +```objective-c + - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{ + //should be called after rotation animation completed + [self.contextMenuTableView reloadData]; +} + +- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { + [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; + + [self.contextMenuTableView updateAlongsideRotation]; +} + +- (void)viewWillTransitionToSize:(CGSize)size + withTransitionCoordinator:(id)coordinator { + + [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; + + + [coordinator animateAlongsideTransition:nil completion:^(id context) { + //should be called after rotation animation completed + [self.contextMenuTableView reloadData]; + }]; + [self.contextMenuTableView updateAlongsideRotation]; + +} +``` + +### Customisation + +To customise cell set up your custom drawables in the animated icon. Actually the cell design and layout is completely at your choice. + +animationDuration is to be used for animation speed in seconds. + +### Compatibility + +iOS 7, +iOS 8 + +#### Version: 1.0 + +### License + + Copyright 2015, Yalantis + + 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. + diff --git a/BreakingBad/Pods/ContextMenu.iOS/YALContextMenu/UIView+YALConstraints.h b/BreakingBad/Pods/ContextMenu.iOS/YALContextMenu/UIView+YALConstraints.h new file mode 100644 index 0000000..34fec47 --- /dev/null +++ b/BreakingBad/Pods/ContextMenu.iOS/YALContextMenu/UIView+YALConstraints.h @@ -0,0 +1,15 @@ +// +// UIView+FillWithView.h +// ContextMenu +// +// Created by Maksym Lazebnyi on 1/15/15. +// Copyright (c) 2015 Yalantis. All rights reserved. +// + +#import + +@interface UIView (YALConstraints) + +- (void)addSubViewiew:(UIView *)view withSidesConstrainsInsets:(UIEdgeInsets)insets; + +@end diff --git a/BreakingBad/Pods/ContextMenu.iOS/YALContextMenu/UIView+YALConstraints.m b/BreakingBad/Pods/ContextMenu.iOS/YALContextMenu/UIView+YALConstraints.m new file mode 100644 index 0000000..302d19d --- /dev/null +++ b/BreakingBad/Pods/ContextMenu.iOS/YALContextMenu/UIView+YALConstraints.m @@ -0,0 +1,53 @@ +// +// UIView+FillWithView.m +// ContextMenu +// +// Created by Maksym Lazebnyi on 1/15/15. +// Copyright (c) 2015 Yalantis. All rights reserved. +// + +#import "UIView+YALConstraints.h" + +@implementation UIView (YALConstraints) + +- (void)addSubViewiew:(UIView *)view withSidesConstrainsInsets:(UIEdgeInsets)insets { + NSParameterAssert(view); + + [view setTranslatesAutoresizingMaskIntoConstraints:NO]; + + [self addSubview:view]; + + [self addConstraint:[NSLayoutConstraint constraintWithItem:view + attribute:NSLayoutAttributeTop + relatedBy:NSLayoutRelationEqual + toItem:self + attribute:NSLayoutAttributeTop + multiplier:1.0 + constant:insets.top]]; + + [self addConstraint:[NSLayoutConstraint constraintWithItem:view + attribute:NSLayoutAttributeLeading + relatedBy:NSLayoutRelationEqual + toItem:self + attribute:NSLayoutAttributeLeading + multiplier:1.0 + constant:insets.left]]; + + [self addConstraint:[NSLayoutConstraint constraintWithItem:view + attribute:NSLayoutAttributeBottom + relatedBy:NSLayoutRelationEqual + toItem:self + attribute:NSLayoutAttributeBottom + multiplier:1.0 + constant:insets.bottom]]; + + [self addConstraint:[NSLayoutConstraint constraintWithItem:view + attribute:NSLayoutAttributeTrailing + relatedBy:NSLayoutRelationEqual + toItem:self + attribute:NSLayoutAttributeTrailing + multiplier:1.0 + constant:insets.right]]; +} + +@end diff --git a/BreakingBad/Pods/ContextMenu.iOS/YALContextMenu/YALContextMenuCell.h b/BreakingBad/Pods/ContextMenu.iOS/YALContextMenu/YALContextMenuCell.h new file mode 100644 index 0000000..fb454ae --- /dev/null +++ b/BreakingBad/Pods/ContextMenu.iOS/YALContextMenu/YALContextMenuCell.h @@ -0,0 +1,20 @@ +// +// YALContextMenuCell.h +// ContextMenu +// +// Created by Maksym Lazebnyi on 1/21/15. +// Copyright (c) 2015 Yalantis. All rights reserved. +// + +#import + +@protocol YALContextMenuCell + +/*! + @abstract + Following methods called for cell when animation to be processed + */ +- (UIView *)animatedIcon; +- (UIView *)animatedContent; + +@end diff --git a/BreakingBad/Pods/ContextMenu.iOS/YALContextMenu/YALContextMenuTableView.h b/BreakingBad/Pods/ContextMenu.iOS/YALContextMenu/YALContextMenuTableView.h new file mode 100644 index 0000000..48e1898 --- /dev/null +++ b/BreakingBad/Pods/ContextMenu.iOS/YALContextMenu/YALContextMenuTableView.h @@ -0,0 +1,73 @@ +// +// YALTableView.h +// YALMenuAnimation +// +// Created by Maksym Lazebnyi on 1/12/15. +// Copyright (c) 2015 Yalantis. All rights reserved. +// + +#import + +@class YALContextMenuTableView; + +@protocol YALContextMenuTableViewDelegate + +@optional + +/*! + @abstract + This method called when menu dismissed + + @param contextMenuTableView - object dismissed + + @param indexPath - indexPath of cell selected +*/ +- (void)contextMenuTableView:(YALContextMenuTableView *)contextMenuTableView didDismissWithIndexPath:(NSIndexPath *)indexPath; + +@end + + +@interface YALContextMenuTableView : UITableView + +@property (nonatomic, weak) idyalDelegate; + +/*! @abstract animationDuration time for animation in seconds*/ +@property (nonatomic) CGFloat animationDuration; + + +/*! + @abstract + Call this method for initilization of the table view with datasource and delegate assigned. + + @param delegateDataSource - Add our class for delegate and dataSource methods here + + @return YALTableView object or nil +*/ +- (instancetype)initWithTableViewDelegateDataSource:(id)delegateDataSource; + +/*! + @abstract + Use this method for correct presenration as [superview addSubview:MyYALTableView] will not present side menu properly. + + @param Superview to present your menu. If you are using a navigation controller it is better to use myViewController.navigationController.view as a suoerview. + + @param YES or NO weather you want appearance animated or not. + */ +- (void)showInView:(UIView *)superview withEdgeInsets:(UIEdgeInsets)edgeInsets animated:(BOOL)animated; + +/*! + @abstract + Call this method to dismis your menuAnimated; + + @param indexPath of the cell selected (to be hidden the las one) + */ +- (void)dismisWithIndexPath:(NSIndexPath *)indexPath; + +/*! + @abstract + Call this method before or during the device rotation animation + */ +- (void)updateAlongsideRotation; + + +@end diff --git a/BreakingBad/Pods/ContextMenu.iOS/YALContextMenu/YALContextMenuTableView.m b/BreakingBad/Pods/ContextMenu.iOS/YALContextMenu/YALContextMenuTableView.m new file mode 100644 index 0000000..418325a --- /dev/null +++ b/BreakingBad/Pods/ContextMenu.iOS/YALContextMenu/YALContextMenuTableView.m @@ -0,0 +1,360 @@ +// +// YALTableView.m +// YALMenuAnimation +// +// Created by Maksym Lazebnyi on 1/12/15. +// Copyright (c) 2015 Yalantis. All rights reserved. +// + +#import "YALContextMenuTableView.h" +#import "UIView+YALConstraints.h" +#import "YALContextMenuCell.h" + +#define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI) + +static CGFloat const defaultDuration = 0.3; +static CGPoint const defaultViewAnchorPoint = {0.5f, 0.5f}; + +typedef void(^completionBlock)(BOOL completed); + +typedef NS_ENUM(NSUInteger, Direction) { + right, + top, + bottom +}; + +typedef NS_ENUM(NSUInteger, AnimatingState) { + Hiding = -1, + Stable = 0, + Showing = 1 +}; + + +@interface YALContextMenuTableView () + +@property (nonatomic) __block NSInteger animatingIndex; +@property (nonatomic, strong) NSMutableArray *topCells; +@property (nonatomic, strong) NSMutableArray *bottomCells; +@property (nonatomic, strong) UITableViewCell *selectedCell; +@property (nonatomic, strong) NSIndexPath *dismissalIndexpath; +@property (nonatomic) AnimatingState animatingState; + +@end + +@implementation YALContextMenuTableView + +#pragma mark - Init + +- (instancetype)initWithTableViewDelegateDataSource:(id)delegateDataSource { + self = [self init]; + if (self) { + self.delegate = delegateDataSource; + self.dataSource = delegateDataSource; + } + return self; +} + +- (instancetype)init { + self = [super init]; + if (self) { + self.animatingState = Stable; + self.animationDuration = defaultDuration; + self.animatingIndex = 0; + + self.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.7f]; + self.separatorColor = [UIColor colorWithRed:181.0/255.0 green:181.0/255.0 blue:181.0/255.0 alpha:0]; + self.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; //Zero rect footer to clear empty rows UITableView draws + } + return self; +} + +#pragma mark - Show / Dismiss +- (void)showInView:(UIView *)superview withEdgeInsets:(UIEdgeInsets)edgeInsets animated:(BOOL)animated { + + if (self.animatingState!=Stable) { + return; + } + + for (UITableViewCell *aCell in [self visibleCells]) { + aCell.contentView.hidden = YES; + } + + self.dismissalIndexpath = nil; + + [superview addSubViewiew:self withSidesConstrainsInsets:edgeInsets]; + + if (animated) { + self.animatingState = Showing; + self.alpha = 0; + + [self setUserInteractionEnabled:NO]; + + [UIView animateWithDuration:self.animationDuration animations:^{ + self.alpha = 1; + } completion:^(BOOL finished) { + [self show:YES visibleCellsAnimated:YES]; + [self setUserInteractionEnabled:YES]; + }]; + + } else { + [self show:YES visibleCellsAnimated:NO]; + } +} + +- (void)dismisWithIndexPath:(NSIndexPath *)indexPath { + if (self.animatingState!=Stable) { + return; + } + + if (!indexPath) { + [self removeFromSuperview]; + return; + } + + self.dismissalIndexpath = indexPath; + self.animatingState = Hiding; + + [self setUserInteractionEnabled:NO]; + + NSArray *visibleCells = [self visibleCells]; + + self.topCells = [NSMutableArray array]; + self.bottomCells = [NSMutableArray array]; + + for (UITableViewCell *visibleCell in visibleCells) { + if ([self indexPathForCell:visibleCell].rowindexPath.row) { + [self.bottomCells addObject: visibleCell]; + } else { + self.selectedCell = visibleCell; + } + } + + [self dismissTopCells]; + [self dismissBottomCells]; +} + + +- (void)updateAlongsideRotation { + if (self.animatingState == Hiding) { + if ([self.yalDelegate respondsToSelector:@selector(contextMenuTableView:didDismissWithIndexPath:)]) { + [self.yalDelegate contextMenuTableView:self didDismissWithIndexPath:[self indexPathForCell:self.selectedCell]]; + } + [self removeFromSuperview]; + } else if (self.animatingState == Showing) { + [self show:YES visibleCellsAnimated:NO]; + } + self.animatingState = Stable; +} + +#pragma mark - Private + +- (void)show:(BOOL)show visibleCellsAnimated:(BOOL)animated { + NSArray *visibleCells = [self visibleCells]; + + if (visibleCells.count == 0 || self.animatingIndex == visibleCells.count) { + self.animatingIndex = 0; + [self setUserInteractionEnabled:YES]; + [self reloadData]; + self.animatingState = Stable; + return; + } + + UITableViewCell *visibleCell = [visibleCells objectAtIndex:self.animatingIndex]; + if (visibleCell) { + [self prepareCellForShowAnimation:visibleCell]; + [visibleCell contentView].hidden = NO; + Direction direction = ([visibleCells indexOfObject:visibleCell] == 0) ? right : top; + + [self show:show cell:visibleCell animated:animated direction:direction clockwise:NO completion:^(BOOL completed) { + if (completed) { + self.animatingIndex++; + [self show:show visibleCellsAnimated:animated]; + } + }]; + } +} + +- (void)dismissBottomCells { + if (self.bottomCells.count) { + UITableViewCell *hidingCell = [self.bottomCells lastObject]; + [self show:NO cell:hidingCell animated:YES direction:top clockwise:NO completion:^(BOOL completed) { + if (completed) { + [self.bottomCells removeLastObject]; + [self dismissBottomCells]; + [self shouldDismissSelf]; + } + }]; + } +} + +- (void)dismissTopCells { + if (self.topCells.count) { + UITableViewCell *hidingCell = [self.topCells firstObject]; + [self show:NO cell:hidingCell animated:YES direction:bottom clockwise:YES completion:^(BOOL completed) { + if (completed) { + [self.topCells removeObjectAtIndex:0]; + [self dismissTopCells]; + [self shouldDismissSelf]; + } + }]; + } +} + +- (void)dismissSelf { + [self show:NO cell:self.selectedCell animated:YES direction:right clockwise:NO completion:^(BOOL completed) { + [self removeFromSuperview]; + if ([self.yalDelegate respondsToSelector:@selector(contextMenuTableView:didDismissWithIndexPath:)]) { + [self.yalDelegate contextMenuTableView:self didDismissWithIndexPath:[self indexPathForCell:self.selectedCell]]; + } + self.animatingState = Stable; + }]; +} + +- (void)shouldDismissSelf { + if (self.bottomCells.count == 0 && self.topCells.count == 0) { + [self dismissSelf]; + } +} + +#pragma mark - Animate Cells + +- (void)prepareCellForShowAnimation:(UITableViewCell *)cell { + + [self resetAnimatedIconForCell:cell]; + + Direction direction = ([self indexPathForCell:cell].row == 0) ? right : top; + + [self show:NO cell:cell animated:NO direction:direction clockwise:NO completion:nil]; +} + +/*! + @abstract + Call this method for cell view to be hidden or shown + + @param show - YES to be shown, NO to be hidden + + @param animated - Yes or NO for animation + + @param animation - Duration of animation with seconds + + @param direction - Define the side for icon to animate + + @param clockwise - Set YES to rotate clockwise + + @param completed - block called on the completion of the animation + */ + +- (void)show:(BOOL)show + cell:(UITableViewCell *)cell + animated:(BOOL)animated + direction:(Direction)direction + clockwise:(BOOL)clockwise + completion:(completionBlock)completed { + + UIView *icon = [cell animatedIcon]; + UIView *content = [cell animatedContent]; + + CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity; + rotationAndPerspectiveTransform.m34 = 1.0/200; //Add the perspective + + CGFloat rotation = 90; + if (clockwise) { + rotation = -rotation; + } + + if (show) { + rotation = 0; + } + + switch (direction) { + case right: { + [self setAnchorPoint:CGPointMake(1, 0.5) forView:icon]; + rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, DEGREES_TO_RADIANS(rotation), 0.0f, 1.0f, 0.0f); + break; + } + case top: { + [self setAnchorPoint:CGPointMake(0.5, 0.0) forView:icon]; + rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, DEGREES_TO_RADIANS(rotation), 1.0f, 0.0f, 0.0f); + break; + } + case bottom: { + [self setAnchorPoint:CGPointMake(0.5, 1) forView:icon]; + rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, DEGREES_TO_RADIANS(rotation), 1.0f, 0.0f, 0.0f); + break; + } + + default: + break; + } + + if (animated) { + [UIView animateWithDuration:self.animationDuration animations:^{ + icon.layer.transform = rotationAndPerspectiveTransform; + content.alpha = show; + } completion:^(BOOL finished) { + if (completed) { + completed(finished); + } + }]; + + } else { + icon.layer.transform = rotationAndPerspectiveTransform; + content.alpha = show; + if (completed) { + completed(YES); + } + } +} + +#pragma mark - Overriden + +- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath { + + UITableViewCell *cell = [super dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath]; + + [self resetAnimatedIconForCell:cell]; + + if (cell) { + if (self.animatingState==Showing) { + [cell contentView].hidden = YES; + }else if (self.animatingState==Stable) + { + [cell contentView].hidden = NO; + [cell animatedContent].alpha = 1; + } + } + return cell; +} + +#pragma mark - Utils +- (void)resetAnimatedIconForCell:(UITableViewCell *) cell{ + UIView *icon = [cell animatedIcon]; + icon.layer.anchorPoint = defaultViewAnchorPoint; + icon.layer.transform = CATransform3DIdentity; + [icon layoutIfNeeded]; +} + +- (void)setAnchorPoint:(CGPoint)anchorPoint forView:(UIView *)view { + CGPoint newPoint = CGPointMake(view.bounds.size.width * anchorPoint.x, + view.bounds.size.height * anchorPoint.y); + CGPoint oldPoint = CGPointMake(view.bounds.size.width * view.layer.anchorPoint.x, + view.bounds.size.height * view.layer.anchorPoint.y); + + newPoint = CGPointApplyAffineTransform(newPoint, view.transform); + oldPoint = CGPointApplyAffineTransform(oldPoint, view.transform); + + CGPoint position = view.layer.position; + + position.x -= oldPoint.x; + position.x += newPoint.x; + + position.y -= oldPoint.y; + position.y += newPoint.y; + + view.layer.position = position; + view.layer.anchorPoint = anchorPoint; +} + +@end diff --git a/BreakingBad/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperation.h b/BreakingBad/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperation.h new file mode 120000 index 0000000..ac762c8 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperation.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFHTTPRequestOperation.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperationManager.h b/BreakingBad/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperationManager.h new file mode 120000 index 0000000..9dcc623 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperationManager.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/AFNetworking/AFHTTPSessionManager.h b/BreakingBad/Pods/Headers/Private/AFNetworking/AFHTTPSessionManager.h new file mode 120000 index 0000000..56feb9f --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/AFNetworking/AFHTTPSessionManager.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFHTTPSessionManager.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/AFNetworking/AFNetworkActivityIndicatorManager.h b/BreakingBad/Pods/Headers/Private/AFNetworking/AFNetworkActivityIndicatorManager.h new file mode 120000 index 0000000..67519d9 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/AFNetworking/AFNetworkActivityIndicatorManager.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/AFNetworking/AFNetworkReachabilityManager.h b/BreakingBad/Pods/Headers/Private/AFNetworking/AFNetworkReachabilityManager.h new file mode 120000 index 0000000..68fc774 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/AFNetworking/AFNetworkReachabilityManager.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFNetworkReachabilityManager.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/AFNetworking/AFNetworking.h b/BreakingBad/Pods/Headers/Private/AFNetworking/AFNetworking.h new file mode 120000 index 0000000..a5a38da --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/AFNetworking/AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFNetworking.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/AFNetworking/AFSecurityPolicy.h b/BreakingBad/Pods/Headers/Private/AFNetworking/AFSecurityPolicy.h new file mode 120000 index 0000000..fd1322d --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/AFNetworking/AFSecurityPolicy.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFSecurityPolicy.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/AFNetworking/AFURLConnectionOperation.h b/BreakingBad/Pods/Headers/Private/AFNetworking/AFURLConnectionOperation.h new file mode 120000 index 0000000..d9b35fb --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/AFNetworking/AFURLConnectionOperation.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFURLConnectionOperation.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/AFNetworking/AFURLRequestSerialization.h b/BreakingBad/Pods/Headers/Private/AFNetworking/AFURLRequestSerialization.h new file mode 120000 index 0000000..ca8209b --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/AFNetworking/AFURLRequestSerialization.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFURLRequestSerialization.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/AFNetworking/AFURLResponseSerialization.h b/BreakingBad/Pods/Headers/Private/AFNetworking/AFURLResponseSerialization.h new file mode 120000 index 0000000..e36a765 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/AFNetworking/AFURLResponseSerialization.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFURLResponseSerialization.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/AFNetworking/AFURLSessionManager.h b/BreakingBad/Pods/Headers/Private/AFNetworking/AFURLSessionManager.h new file mode 120000 index 0000000..835101d --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/AFNetworking/AFURLSessionManager.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFURLSessionManager.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/AFNetworking/UIActivityIndicatorView+AFNetworking.h b/BreakingBad/Pods/Headers/Private/AFNetworking/UIActivityIndicatorView+AFNetworking.h new file mode 120000 index 0000000..c534ebf --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/AFNetworking/UIActivityIndicatorView+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/AFNetworking/UIAlertView+AFNetworking.h b/BreakingBad/Pods/Headers/Private/AFNetworking/UIAlertView+AFNetworking.h new file mode 120000 index 0000000..f992813 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/AFNetworking/UIAlertView+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/AFNetworking/UIButton+AFNetworking.h b/BreakingBad/Pods/Headers/Private/AFNetworking/UIButton+AFNetworking.h new file mode 120000 index 0000000..8f2e221 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/AFNetworking/UIButton+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/AFNetworking/UIImage+AFNetworking.h b/BreakingBad/Pods/Headers/Private/AFNetworking/UIImage+AFNetworking.h new file mode 120000 index 0000000..74f6649 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/AFNetworking/UIImage+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIImage+AFNetworking.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/AFNetworking/UIImageView+AFNetworking.h b/BreakingBad/Pods/Headers/Private/AFNetworking/UIImageView+AFNetworking.h new file mode 120000 index 0000000..a95d673 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/AFNetworking/UIImageView+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/AFNetworking/UIKit+AFNetworking.h b/BreakingBad/Pods/Headers/Private/AFNetworking/UIKit+AFNetworking.h new file mode 120000 index 0000000..95017cc --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/AFNetworking/UIKit+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/AFNetworking/UIProgressView+AFNetworking.h b/BreakingBad/Pods/Headers/Private/AFNetworking/UIProgressView+AFNetworking.h new file mode 120000 index 0000000..730b167 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/AFNetworking/UIProgressView+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/AFNetworking/UIRefreshControl+AFNetworking.h b/BreakingBad/Pods/Headers/Private/AFNetworking/UIRefreshControl+AFNetworking.h new file mode 120000 index 0000000..8efd826 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/AFNetworking/UIRefreshControl+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/AFNetworking/UIWebView+AFNetworking.h b/BreakingBad/Pods/Headers/Private/AFNetworking/UIWebView+AFNetworking.h new file mode 120000 index 0000000..c8df6ef --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/AFNetworking/UIWebView+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ContextMenu.iOS/UIView+YALConstraints.h b/BreakingBad/Pods/Headers/Private/ContextMenu.iOS/UIView+YALConstraints.h new file mode 120000 index 0000000..7ca3d2e --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ContextMenu.iOS/UIView+YALConstraints.h @@ -0,0 +1 @@ +../../../ContextMenu.iOS/YALContextMenu/UIView+YALConstraints.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ContextMenu.iOS/YALContextMenuCell.h b/BreakingBad/Pods/Headers/Private/ContextMenu.iOS/YALContextMenuCell.h new file mode 120000 index 0000000..120596e --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ContextMenu.iOS/YALContextMenuCell.h @@ -0,0 +1 @@ +../../../ContextMenu.iOS/YALContextMenu/YALContextMenuCell.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ContextMenu.iOS/YALContextMenuTableView.h b/BreakingBad/Pods/Headers/Private/ContextMenu.iOS/YALContextMenuTableView.h new file mode 120000 index 0000000..b94d874 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ContextMenu.iOS/YALContextMenuTableView.h @@ -0,0 +1 @@ +../../../ContextMenu.iOS/YALContextMenu/YALContextMenuTableView.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/AFNetworking/AFHTTPRequestOperation.h b/BreakingBad/Pods/Headers/Public/AFNetworking/AFHTTPRequestOperation.h new file mode 120000 index 0000000..ac762c8 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/AFNetworking/AFHTTPRequestOperation.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFHTTPRequestOperation.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/AFNetworking/AFHTTPRequestOperationManager.h b/BreakingBad/Pods/Headers/Public/AFNetworking/AFHTTPRequestOperationManager.h new file mode 120000 index 0000000..9dcc623 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/AFNetworking/AFHTTPRequestOperationManager.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/AFNetworking/AFHTTPSessionManager.h b/BreakingBad/Pods/Headers/Public/AFNetworking/AFHTTPSessionManager.h new file mode 120000 index 0000000..56feb9f --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/AFNetworking/AFHTTPSessionManager.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFHTTPSessionManager.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/AFNetworking/AFNetworkActivityIndicatorManager.h b/BreakingBad/Pods/Headers/Public/AFNetworking/AFNetworkActivityIndicatorManager.h new file mode 120000 index 0000000..67519d9 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/AFNetworking/AFNetworkActivityIndicatorManager.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/AFNetworking/AFNetworkReachabilityManager.h b/BreakingBad/Pods/Headers/Public/AFNetworking/AFNetworkReachabilityManager.h new file mode 120000 index 0000000..68fc774 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/AFNetworking/AFNetworkReachabilityManager.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFNetworkReachabilityManager.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/AFNetworking/AFNetworking.h b/BreakingBad/Pods/Headers/Public/AFNetworking/AFNetworking.h new file mode 120000 index 0000000..a5a38da --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/AFNetworking/AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFNetworking.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/AFNetworking/AFSecurityPolicy.h b/BreakingBad/Pods/Headers/Public/AFNetworking/AFSecurityPolicy.h new file mode 120000 index 0000000..fd1322d --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/AFNetworking/AFSecurityPolicy.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFSecurityPolicy.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/AFNetworking/AFURLConnectionOperation.h b/BreakingBad/Pods/Headers/Public/AFNetworking/AFURLConnectionOperation.h new file mode 120000 index 0000000..d9b35fb --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/AFNetworking/AFURLConnectionOperation.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFURLConnectionOperation.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/AFNetworking/AFURLRequestSerialization.h b/BreakingBad/Pods/Headers/Public/AFNetworking/AFURLRequestSerialization.h new file mode 120000 index 0000000..ca8209b --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/AFNetworking/AFURLRequestSerialization.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFURLRequestSerialization.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/AFNetworking/AFURLResponseSerialization.h b/BreakingBad/Pods/Headers/Public/AFNetworking/AFURLResponseSerialization.h new file mode 120000 index 0000000..e36a765 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/AFNetworking/AFURLResponseSerialization.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFURLResponseSerialization.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/AFNetworking/AFURLSessionManager.h b/BreakingBad/Pods/Headers/Public/AFNetworking/AFURLSessionManager.h new file mode 120000 index 0000000..835101d --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/AFNetworking/AFURLSessionManager.h @@ -0,0 +1 @@ +../../../AFNetworking/AFNetworking/AFURLSessionManager.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/AFNetworking/UIActivityIndicatorView+AFNetworking.h b/BreakingBad/Pods/Headers/Public/AFNetworking/UIActivityIndicatorView+AFNetworking.h new file mode 120000 index 0000000..c534ebf --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/AFNetworking/UIActivityIndicatorView+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/AFNetworking/UIAlertView+AFNetworking.h b/BreakingBad/Pods/Headers/Public/AFNetworking/UIAlertView+AFNetworking.h new file mode 120000 index 0000000..f992813 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/AFNetworking/UIAlertView+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/AFNetworking/UIButton+AFNetworking.h b/BreakingBad/Pods/Headers/Public/AFNetworking/UIButton+AFNetworking.h new file mode 120000 index 0000000..8f2e221 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/AFNetworking/UIButton+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/AFNetworking/UIImage+AFNetworking.h b/BreakingBad/Pods/Headers/Public/AFNetworking/UIImage+AFNetworking.h new file mode 120000 index 0000000..74f6649 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/AFNetworking/UIImage+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIImage+AFNetworking.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/AFNetworking/UIImageView+AFNetworking.h b/BreakingBad/Pods/Headers/Public/AFNetworking/UIImageView+AFNetworking.h new file mode 120000 index 0000000..a95d673 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/AFNetworking/UIImageView+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/AFNetworking/UIKit+AFNetworking.h b/BreakingBad/Pods/Headers/Public/AFNetworking/UIKit+AFNetworking.h new file mode 120000 index 0000000..95017cc --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/AFNetworking/UIKit+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/AFNetworking/UIProgressView+AFNetworking.h b/BreakingBad/Pods/Headers/Public/AFNetworking/UIProgressView+AFNetworking.h new file mode 120000 index 0000000..730b167 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/AFNetworking/UIProgressView+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/AFNetworking/UIRefreshControl+AFNetworking.h b/BreakingBad/Pods/Headers/Public/AFNetworking/UIRefreshControl+AFNetworking.h new file mode 120000 index 0000000..8efd826 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/AFNetworking/UIRefreshControl+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/AFNetworking/UIWebView+AFNetworking.h b/BreakingBad/Pods/Headers/Public/AFNetworking/UIWebView+AFNetworking.h new file mode 120000 index 0000000..c8df6ef --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/AFNetworking/UIWebView+AFNetworking.h @@ -0,0 +1 @@ +../../../AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ContextMenu.iOS/UIView+YALConstraints.h b/BreakingBad/Pods/Headers/Public/ContextMenu.iOS/UIView+YALConstraints.h new file mode 120000 index 0000000..7ca3d2e --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ContextMenu.iOS/UIView+YALConstraints.h @@ -0,0 +1 @@ +../../../ContextMenu.iOS/YALContextMenu/UIView+YALConstraints.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ContextMenu.iOS/YALContextMenuCell.h b/BreakingBad/Pods/Headers/Public/ContextMenu.iOS/YALContextMenuCell.h new file mode 120000 index 0000000..120596e --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ContextMenu.iOS/YALContextMenuCell.h @@ -0,0 +1 @@ +../../../ContextMenu.iOS/YALContextMenu/YALContextMenuCell.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ContextMenu.iOS/YALContextMenuTableView.h b/BreakingBad/Pods/Headers/Public/ContextMenu.iOS/YALContextMenuTableView.h new file mode 120000 index 0000000..b94d874 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ContextMenu.iOS/YALContextMenuTableView.h @@ -0,0 +1 @@ +../../../ContextMenu.iOS/YALContextMenu/YALContextMenuTableView.h \ No newline at end of file diff --git a/BreakingBad/Pods/Manifest.lock b/BreakingBad/Pods/Manifest.lock index e523c5a..1ef2cd3 100644 --- a/BreakingBad/Pods/Manifest.lock +++ b/BreakingBad/Pods/Manifest.lock @@ -1,15 +1,41 @@ PODS: + - AFNetworking (2.6.1): + - AFNetworking/NSURLConnection (= 2.6.1) + - AFNetworking/NSURLSession (= 2.6.1) + - AFNetworking/Reachability (= 2.6.1) + - AFNetworking/Security (= 2.6.1) + - AFNetworking/Serialization (= 2.6.1) + - AFNetworking/UIKit (= 2.6.1) + - AFNetworking/NSURLConnection (2.6.1): + - AFNetworking/Reachability + - AFNetworking/Security + - AFNetworking/Serialization + - AFNetworking/NSURLSession (2.6.1): + - AFNetworking/Reachability + - AFNetworking/Security + - AFNetworking/Serialization + - AFNetworking/Reachability (2.6.1) + - AFNetworking/Security (2.6.1) + - AFNetworking/Serialization (2.6.1) + - AFNetworking/UIKit (2.6.1): + - AFNetworking/NSURLConnection + - AFNetworking/NSURLSession - Bolts/Tasks (1.3.0) + - ContextMenu.iOS (1.0.0) - Parse (1.9.0): - Bolts/Tasks (>= 1.3.0) - pop (1.0.8) DEPENDENCIES: + - AFNetworking (~> 2.0) + - ContextMenu.iOS (~> 1.0.0) - Parse - pop (~> 1.0) SPEC CHECKSUMS: + AFNetworking: 8e4e60500beb8bec644cf575beee72990a76d399 Bolts: 805a4a87413e49d4a0c2b7d469084cbc46b09342 + ContextMenu.iOS: 7da78b3f99e604669b75e55146c6c33147f64f99 Parse: 712efbc476d4f47b0f96b70db7e53101575753aa pop: bb773ae2c791ca2629de13b347e7a8b450fa6a57 diff --git a/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj b/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj index 7e2d8cd..4ce7cd5 100644 --- a/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj +++ b/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj @@ -7,935 +7,1075 @@ objects = { /* Begin PBXBuildFile section */ - 00119247713445361CB349494BD8721A /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A4C94256E730FF99DD4B0F41D9D749C /* Bolts.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 019F0B043AC4620E8D1ED11D6D250BAE /* PFPaymentTransactionObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = EC3179640630E861C08F4D68C5D17E53 /* PFPaymentTransactionObserver.m */; }; - 025EEC0368FDBA71ACFCB68A39C3655D /* PFCommandURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BEDAC2F484B73C71F6B8E48C5B6FCB76 /* PFCommandURLRequestConstructor.h */; }; - 03A25737600F83E8C55F2AB9779A8E7C /* PFFileStagingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F6664FFA2E9D3FD4CE7F5A6C742742E /* PFFileStagingController.h */; }; + 00275592A13B5D46B08409D995DB6ADB /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = FB46E4BC6BAC7355C701C95033BF325F /* UIButton+AFNetworking.m */; }; + 013AE4595BF56A559DD3CA81669B0D67 /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 411AD8B8B53F6CAF9198BBBBB07AC033 /* AFNetworkReachabilityManager.h */; }; + 0153E7B72CC1F58001A1FB4CA726D5C8 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BABE1F9D15A2416835BA1EC9EB7E043 /* QuartzCore.framework */; }; + 025598DFFF793FB641F506825074F34A /* PFPushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CCBDC7EA64ECE9974D334AA69A02EEA /* PFPushManager.m */; }; + 025BE970FE1936D8AE73A5BD6FCF5A4D /* PFAnalyticsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B55313727430781904B26ED39BC5BD6 /* PFAnalyticsController.m */; }; 03FF532EB8C5304EFA2E77016458C281 /* POPPropertyAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2726A20CBCFFB77F9972C445E8972099 /* POPPropertyAnimation.mm */; }; - 0448850F9AC7EAD3AFCF4F76B8E9A0CB /* PFMultiProcessFileLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C10587D5F82F53DEA74DF5129DD7312 /* PFMultiProcessFileLock.h */; }; - 0457F8E0768F1EA24F6BBF399A2575A9 /* PFDefaultACLController.m in Sources */ = {isa = PBXBuildFile; fileRef = 875C18418E320318A1F79B5C8DE9BF08 /* PFDefaultACLController.m */; }; - 04ACE9FD008EAD5D882046A427B6F000 /* PFAnonymousUtils_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C99D12456DCBCCB4B0A98B1D7C33FA9 /* PFAnonymousUtils_Private.h */; }; - 04E0463B6BEA9B8021EF9D47A0D70D48 /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = CBA0A5B0F0E83001148599CCEC105E79 /* BFExecutor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 05FB5EA05407A51C90CE53EC75528A35 /* PFPaymentTransactionObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = FE28A5553FE4AE0FD8390747D2847B04 /* PFPaymentTransactionObserver.h */; }; - 06198F665E7E5D5095FA80C3DE87FFF0 /* PFMutableACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A56F696F9B2544A6A4DB58FB8E47809 /* PFMutableACLState.h */; }; - 071BCA62D30752EC13996F5B307BFFEF /* PFSQLiteDatabaseResult.h in Headers */ = {isa = PBXBuildFile; fileRef = B6EFD05D2D5F7A4F89CDF5EA8E64F2DE /* PFSQLiteDatabaseResult.h */; }; - 07BF9641830B6995B62971E3D7D08125 /* PFRESTSessionCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 17A73E112537B17232FB3245923658EF /* PFRESTSessionCommand.m */; }; - 0869A1319F02EA8C47B814645AD4AF4F /* PFObjectBatchController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8904B6096DEB568855A4A7625ED6CAE1 /* PFObjectBatchController.h */; }; - 0886359057F4348C659E5B51CFDFB6EB /* PFFile.h in Headers */ = {isa = PBXBuildFile; fileRef = CB36CF9B5806A0332F9E4955152BC86E /* PFFile.h */; }; - 08AAE6FC8BAE4DFF3E2B00BF4957E2BA /* PFUserState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AB1ABA6EB2984DFC25350DF75335526F /* PFUserState_Private.h */; }; - 09919F2A8CC0DCFF455F2F7A8B9E5D46 /* PFCurrentObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = B41C5D6C197E0FDC6E5D8533A0C1CE95 /* PFCurrentObjectControlling.h */; }; + 055D430D3080E69525A1CB4E226AE6AD /* PFAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = EE8606221826FA5909EFFA2016DEE26C /* PFAnalytics.h */; }; + 0567E8CB52A88D784048A608C7DFA3AD /* PFAnonymousUtils_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 671A1745311D8EA359B1DB95D621711E /* PFAnonymousUtils_Private.h */; }; + 058502343AC3618129AC9439EA85335A /* PFMutableFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 61DE303474ACF3AAEB6BEF7CF3151683 /* PFMutableFileState.h */; }; + 060F06CDB2C21C334A0082FD9EA5D079 /* PFRelation.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FCA6291D3A1D8E40FC410D0747380DC /* PFRelation.m */; }; 09F160052D6F4DF4F769F6A2A351071C /* POPAnimationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = EC10F21A5E230A911C2C2E5082CDAE4B /* POPAnimationPrivate.h */; }; - 09F2FDD632622F34F5340789029EE07D /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A71F8897B642BC983919241A133904D /* SystemConfiguration.framework */; }; - 0AD21100FCF0450862222785E05331C8 /* PFQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = AD3CB420E4A0D3570A166616F7BC779E /* PFQuery.m */; }; - 0B846D612D91734A3934991CE63FC72D /* PFEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 06A34F6AE5214388ED772768B1AED0E1 /* PFEventuallyQueue.m */; }; - 0BEC8B0B2E2717328E0F93CF88DDA5FF /* PFSQLiteDatabaseResult.m in Sources */ = {isa = PBXBuildFile; fileRef = DEF74DE469E28BE80197C43305F5C003 /* PFSQLiteDatabaseResult.m */; }; + 0A963324CC60CAA719E82B65A42F8F92 /* PFRESTPushCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D244FD9C2061C46A05C67E3557A6D7A9 /* PFRESTPushCommand.h */; }; + 0BE6F472A9E14DECF3CC4B2AC719A807 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F270D2F5F74F0965904AC60E014742A /* UIKit.framework */; }; + 0CADB282A28A344B568CD36701CD99A0 /* PFFileDataStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 206BAB6E51C3AC0ACA2E1320A911DA36 /* PFFileDataStream.m */; }; + 0D2DC39580098F73627DE62060F0E256 /* PFEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C0E7BEE92130638A860786486BF4398 /* PFEventuallyQueue.m */; }; 0E111996ED8AB07B504AD6200F460C6E /* POP.h in Headers */ = {isa = PBXBuildFile; fileRef = 38C1E5A4A6882760CB349FCABD22A9DC /* POP.h */; }; - 0FDD8F5E664D0EA41C89347205454FF6 /* PFFile_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FA3FD266385B8FB527CD25EAD4C3B537 /* PFFile_Private.h */; }; - 0FE84A5606D81B659C03C3C6102EAA92 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEC32F2ED903D3546EEEA22AC6E13F4E /* AudioToolbox.framework */; }; - 107544526752B586BB04FF44D35C5102 /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B782D4B8E3CF13324D674E51D4AA45A /* PFCloud.m */; }; - 118377BB16D5D852E20EFBF6CB987907 /* PFConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CCF0135C67AEC40B93D2B426712CFC9 /* PFConfigController.m */; }; + 0ECD46F443DEFF63C3BCBDC3A75363AA /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DB8817B308E2B46E23993461AC18E54 /* BFExecutor.h */; }; + 0F0B220351D06ECFB17DFF2EC338D0CD /* PFCurrentConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D19EBD75979B9CD23ABA38BA45D0DCB /* PFCurrentConfigController.h */; }; + 1067E9F5F6F4D70E1111D34A159980FB /* PFUserAuthenticationController.m in Sources */ = {isa = PBXBuildFile; fileRef = AD9250D9FE4979DF37C24BE1CDB4FF8B /* PFUserAuthenticationController.m */; }; + 10812A750A13684F4C638D481A7B5234 /* PFInstallationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A8AD04541066E8C429FCD51E8A604FF1 /* PFInstallationPrivate.h */; }; + 10989B990683FCA58C99BB82050E5077 /* PFPinningEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BC40E8FF522D488100477128A373255 /* PFPinningEventuallyQueue.m */; }; + 10B6EC5F1F87C64ECBB431E75CBFD609 /* PFRelation.h in Headers */ = {isa = PBXBuildFile; fileRef = D26D8AB91D60CAC4AF163A949239DE49 /* PFRelation.h */; }; + 118BAA009D3D59B3EAE79710C991E16F /* PFObjectConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 5710C75607065D22ED2DB5CCCFB27A3D /* PFObjectConstants.h */; }; 11924DA123F63743B409090BFC425AD2 /* POPCGUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CC05709207C91767940918CDD4779DC /* POPCGUtils.h */; }; - 12A8CFFBCED5FBBFE861423D8EEED31A /* PFPropertyInfo_Runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A132496AD1361AB641C6E65067049BF /* PFPropertyInfo_Runtime.h */; }; - 12CC1275B7906C440CAA09E6CD435DE2 /* Parse_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 420A2E467841126C406BA9FA83D75161 /* Parse_Private.h */; }; - 12F6909B52C61D7E799B5B309749B735 /* PFRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 177ECEF6166CB8A176CA4C377BFFD54B /* PFRelationState.m */; }; - 13E3B4D00549AFBC51E6C7305A7EA1DA /* PFUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DE181E23B100CCECFB4B435A3DF9AD4 /* PFUserController.h */; }; - 15891E0CDBB02CD8E27F08B0027DE0F3 /* PFObjectLocalIdStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E3D63307A8DF22EE6CA58FBC364ACF4 /* PFObjectLocalIdStore.h */; }; - 1595244FE466EB44C6AEBBEA61B358BF /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = ABF7E63586A26C19233745BAFC155684 /* BFTask.h */; }; - 16000B68D460BA81C95837AD36045066 /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = C439FB0D5070895D69861DE4654C8D25 /* PFEventuallyPin.m */; }; - 166A51403710FA4669EFB0EF749BD63F /* PFObjectPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1146110AA563CDAFA693A1B073292A1E /* PFObjectPrivate.h */; }; - 16BEED5DCCB91A2FA43E9F5E656F7F2E /* PFMutableFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D98F818FBD7F97BBBBADD55203F244B /* PFMutableFileState.h */; }; - 179F8265304E06A1E027D13136B5DECC /* PFSessionUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = C65B577617E60D4DCA6671103F519E4B /* PFSessionUtilities.h */; }; - 18B2F23AF51EC0206B5D34C2C1CA20AF /* PFAnalyticsController.h in Headers */ = {isa = PBXBuildFile; fileRef = D3568213E494C4CA6E3B00B07B2AC4E4 /* PFAnalyticsController.h */; }; - 18EB839151EC2E5154EDD4CC83812E8B /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 840EF1BA3066E61DD0BA27741371AE22 /* BFCancellationTokenSource.h */; }; + 1249B7E8D033D0D59D0D8F097A745AB3 /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 41A069B9AF3C8F611F76F20326AB035E /* AFNetworkActivityIndicatorManager.m */; }; + 12641D479C071B60EF715865ABFCE798 /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C4ACAFFC579192F80AE309D38F4CE0D /* PFDecoder.m */; }; + 1380A386F92D641C726FA9687404B11E /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 80B7FAB2B889140EDF2DC60D3C4A5969 /* AFURLResponseSerialization.m */; }; + 1421591EB34905B0745B67D11682989B /* PFPush.h in Headers */ = {isa = PBXBuildFile; fileRef = E6235BD1313049794F1B1DA7AB8B72BF /* PFPush.h */; }; + 144AF01BA8F6AC27B465052C4C1F4A63 /* PFSQLiteDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 846998BF4B29751792079F5759BBA274 /* PFSQLiteDatabase_Private.h */; }; + 149FA64D0DB7931320E1337D5DF51D95 /* PFPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 189B90A77BD5596205FB77D8F7DBBC66 /* PFPin.h */; }; + 14AFCA315D7308DDC8D506B3F74FADF7 /* PFQueryPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E19C92B6E4B8413D0F549918EC73FD0 /* PFQueryPrivate.h */; }; + 1502050CA80F5B97E273857066C10540 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 51740A0EDDF3B04E8A46D98B3807D440 /* AFHTTPSessionManager.m */; }; + 157A5FFCF49C427C049F82A6C6E7EF9C /* PFPinningObjectStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 315895D529B1136E61253E4EEE127FAC /* PFPinningObjectStore.m */; }; + 16076CA62CD1EEB4CFA1957E9F923B40 /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = F08E0A9E75FBD4FAACDB3C8A68081A32 /* BFTask+Private.m */; }; + 16CF2BCA2E368236EF475D6362A13491 /* PFRESTAnalyticsCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 82175545FE728571466A9FD6E8D8A7DE /* PFRESTAnalyticsCommand.h */; }; + 186FCA5BEF75F30B6A368BD3819F22E7 /* PFConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = E8FCE3D950703287AE285D63EEA38289 /* PFConstants.h */; }; + 18B651969BB7CBCC4E2B38F1631FF6E2 /* PFObjectFileCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D14E98ACAAB4CCD1367FDFBC9088D27 /* PFObjectFileCoder.h */; }; + 18B67D18CD4B27B89C1FB0B4C6E33EDE /* PFCommandURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 669BF4D4C83FA3E0ABEF32501AC4C5EE /* PFCommandURLRequestConstructor.h */; }; + 191D1C449C141C961A7F6B7D6982B73E /* PFRESTAnalyticsCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 946D9742CB5DB1C57ED0E3BBA63E66BD /* PFRESTAnalyticsCommand.m */; }; + 192C2017BBCDB1177A5F77494B10ADEF /* PFObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 656B8A19AFF797C4926D6E2E8D102049 /* PFObjectController.m */; }; 1937EC6CD83AA2FAB3455591AB074459 /* POPPropertyAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 134BDC30251FB7A5465C17F603FCAC5F /* POPPropertyAnimationInternal.h */; }; - 1A570F4695129D835CD30EB6BBFF6657 /* PFLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = C13F91216CB47F63D6B60866FDDC2E12 /* PFLogger.h */; }; - 1B9AE1750A101AE8FF9B774B981088B3 /* PFObjectFileCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 904E4BEABBDE0DE64491D4A2F274F91B /* PFObjectFileCoder.h */; }; + 1B15C523B8D5B8B3661CEA14DA2BE238 /* PFLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 80678CF83F7E4592403D479266CD73C6 /* PFLogger.h */; }; + 1B3D2F66E11EACBEC93D5138DDA5991E /* PFProduct.h in Headers */ = {isa = PBXBuildFile; fileRef = C4F300D4AA623B3DFFDF7971E2B5A614 /* PFProduct.h */; }; + 1BCB49287D526538FE27C92495A7C7C9 /* PFMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = E4A624B26435247F139B091B03F95E5A /* PFMacros.h */; }; 1BEBEDAB53B9DB3AD45E1F70637747F9 /* POPSpringSolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 6961E549FC85F85EB7560B887B11C928 /* POPSpringSolver.h */; }; - 1C1E96A7BBF8E7F8D79356191F174ED5 /* PFFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 49E7AE33EEA74B98EDDEF13254E369C2 /* PFFileState.m */; }; - 1CD0B28DDD42993BAFEC02CC2FFBBE0C /* PFFileController.m in Sources */ = {isa = PBXBuildFile; fileRef = FD89DE98891CC69A6BDBE90F774426D7 /* PFFileController.m */; }; - 1D5D77684A5F13E35BB4BA7BC6A40E7C /* PFHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D322CC5914ECCF1403B38B9F1A7597F /* PFHash.m */; }; - 1DA51F2E2858C95CE8D940AFDA4F7463 /* PFSQLiteDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BDA2CB539774B96EADA0171CEB88CC6 /* PFSQLiteDatabase.m */; }; - 1EA0550E7CBF55104A94BEB8BF651CE1 /* PFRESTAnalyticsCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 608790F5A36AC5B2650CA3AB5EDB96D8 /* PFRESTAnalyticsCommand.m */; }; - 1EEDD4EA1C24F8C275BF3FDEC4F21220 /* PFCurrentInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CE62F458530CD664224D3B0B7E49EAB /* PFCurrentInstallationController.h */; }; - 20EBA85FEE98957543B214F730AB4A8D /* PFObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A8F12B4902D7D8A8BBAF518DB7C37EF /* PFObjectController.h */; }; + 1CAD0670AB203262F90F62BC3BADEB14 /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA4157CE1B57DF0CDF63B24888DCEA61 /* PFObjectSubclassingController.m */; }; + 1D5C062D011FA396D6BD0652197BC3D9 /* PFUserConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 9645D0E8258AB75B2C992E0915EA9BC2 /* PFUserConstants.h */; }; + 1DA04B4E7477A3C6ED4E64EB100997C3 /* PFACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 53683441896998F6CE0216D4310DD24D /* PFACLState.h */; }; + 1E924C4848F63BBFC1FCF597FC9D5FD2 /* PFReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EBBF4F6FA934C6BCACE0C5744A3BF58 /* PFReachability.h */; }; + 1EEB8D22B9718EDB6CB1C314B3EB38F4 /* PFFileStagingController.h in Headers */ = {isa = PBXBuildFile; fileRef = AD274DB5984402947E47F0A1B92E9CA4 /* PFFileStagingController.h */; }; + 2060BB5093B7CC2D7AB326AD3FE0CEDC /* PFInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81EA6C27FFDF760CFB4767BB48E66220 /* PFInstallationController.m */; }; + 20CE99207001FC9C10E242287C253996 /* PFObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = CCFA76D1938B2CCED5785C13FA4FC5B8 /* PFObjectController.h */; }; + 21D65B5E8DF938F32091BDBD66B1E5D1 /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = AAAE696C714BEA1FD2CB7F7E37484204 /* BFCancellationTokenRegistration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 22028A0623B440907DBA76FE0F64B6E0 /* PFSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 752500BB2A0459E3CB234F46BFDE1EED /* PFSession.h */; }; 22030D04E39440FA02B75449A95BF767 /* POPAnimationEventInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5785AD09C2208501D5161E950E701889 /* POPAnimationEventInternal.h */; }; - 222B13AB149B127438E6C3A0402F3B9A /* PFQueryPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 66C84FE024EC45EF4AB8D3EE3366EAF3 /* PFQueryPrivate.h */; }; 226B9015C8E393975BCF1AFEA63C1D51 /* POPGeometry.mm in Sources */ = {isa = PBXBuildFile; fileRef = B330BCF969EF6189E02E10926FB95CED /* POPGeometry.mm */; }; - 23397013BE39F0E00040409845815FB6 /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = B80259DBA1A3ADC7CA8707C772EB8531 /* PFBaseState.m */; }; + 2322FAF5379B9BC9FBEFF748570BECCA /* PFCommandResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 653B4653F0D1C20696A6E65E888E8D15 /* PFCommandResult.m */; }; 23FC5124B2FA2C879AFE378BBB12AC3A /* POPSpringAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C24554FAA71D841BC3C0759DA37874AE /* POPSpringAnimation.mm */; }; - 2474618B1A731CCC67E7E9E8E967BD07 /* PFKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EE9007C583DF8ECE1AEF3F938312117 /* PFKeychainStore.m */; }; - 26E76884A04FD6D5A7F3CD5DDB1755D0 /* PFRole.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DD193A7608BB519CE6B1B91AE25E86C /* PFRole.m */; }; - 26EAB43BBB1FCD57FE349D3E8F930B89 /* PFQueryUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C85AFD7ABA045B4FE8ED8BF948A7C60 /* PFQueryUtilities.h */; }; - 2706615ED7F95EB8B15127341388A254 /* PFAnalyticsUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A90C53A523B75F828B57C0D0368595B /* PFAnalyticsUtilities.m */; }; - 27CFA5673C9671412C57A625FCB0CBFD /* PFObjectFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 42763567F50A02D13E880143048C01A1 /* PFObjectFileCodingLogic.m */; }; - 27F2109F29A28421282EE42D0B9EF39E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - 29A5A8506AEFAC779C7872279E0978A0 /* BFDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E8E5DE9CFE8C0FF513510782D08CD45 /* BFDefines.h */; }; + 244417641E77C9E95C92078E54777D85 /* PFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C7C65DD82B3A08F62D43E9DAC3B23880 /* PFNetworkActivityIndicatorManager.h */; }; + 2499A62D47B33872BF0DADA0BAC4BD47 /* PFMulticastDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 016F2569F5E0DA62E089B095D3A04E84 /* PFMulticastDelegate.h */; }; + 24B5B7B9820114759F93C6FD6A713CD4 /* PFMutableACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E69E884C61DBE3CA50B5B88897651DB /* PFMutableACLState.h */; }; + 24BA59BBC3BD72DAB4E18A3549C1C70C /* PFLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F0F3A2FA993D77CC93EA7FCA0571B6E3 /* PFLocationManager.m */; }; + 2627401700D6CCD2EF48DDF1FE042FFE /* PFObjectLocalIdStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 9102F91F4F8FC737DF8F8B04EB6B1183 /* PFObjectLocalIdStore.m */; }; + 26BC591287F171CDC227D4C715DE0BFD /* PFSQLiteDatabaseResult.h in Headers */ = {isa = PBXBuildFile; fileRef = FFD183F4D915B996DC61B082E5317000 /* PFSQLiteDatabaseResult.h */; }; + 26E8BB7BF9D5A57648508C4E19560B77 /* PFCachedQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = F9A596AB40BA679CB6E7CAFF9C12420F /* PFCachedQueryController.m */; }; + 279E99356D07335E887C39DB5C0E5370 /* PFPinningObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 37D8598915FD79DCA21C88192869017A /* PFPinningObjectStore.h */; }; + 27B935CBBBBEFD1F68871D79F7631F58 /* PFRESTCloudCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 63CF9DFF309CFA031748CEB31E227BB9 /* PFRESTCloudCommand.h */; }; + 27C6F9BEE80BC03933C78785106C81FE /* YALContextMenuTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 385A446A8250571BBD7FF461E05E1382 /* YALContextMenuTableView.m */; }; + 27EAB5CE83D76D32110761949B978720 /* PFBaseState.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7693C271516E5E5D162BA7DC113F4E /* PFBaseState.h */; }; + 2802861D952EDBB98D3D81BAFDEBC041 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BABE1F9D15A2416835BA1EC9EB7E043 /* QuartzCore.framework */; }; + 28A7C073D31DDF6C59967A931BD5766C /* PFOfflineQueryLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = EAFA435D26900861E36F1BAF155390C7 /* PFOfflineQueryLogic.h */; }; + 298E48D1F7EE66DBD2CE7B1081DAAAB3 /* PFObjectFilePersistenceController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7123F7FE1F84DEDBE2ED35D8844839 /* PFObjectFilePersistenceController.h */; }; 2AD822A4C6DD9CA6D499CF6955198F4A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - 2ADCD4987CEC04072FE60FD15CB4058D /* PFUserAuthenticationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 7363B398C79454A71B17ACDF25FAA393 /* PFUserAuthenticationDelegate.h */; }; - 2B113DEE9FAAA55635324A5175A121C3 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 59A9225041C3DEB9A02CF97CE810A7F8 /* PFEncoder.h */; }; - 2BBC1EDE95D8FE18729151D68C31A20A /* PFACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = 869D3911E9F5718BD0B6815F0AB11EED /* PFACLState.m */; }; - 2D298D017CBD10AA0EA097AAF97DCBBB /* PFSQLiteStatement.m in Sources */ = {isa = PBXBuildFile; fileRef = 4123F238BE00014D15B8B3DE34ADC447 /* PFSQLiteStatement.m */; }; - 2D80A28041C979830EC19F3728752554 /* PFAnonymousAuthenticationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = FFA4C594B449FC01306DB29EAF4D8570 /* PFAnonymousAuthenticationProvider.h */; }; - 2E3617FD5EAF3820AC2BE01858D14B55 /* ParseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BF89107C38CFD5E5770EC87A79813462 /* ParseManager.m */; }; - 2E47D04C4E99302A4E0D5BCB44A7DA35 /* PFPush.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EBCC4FDAE51D4D5EBDF89A681AB0F7D /* PFPush.m */; }; - 2E5CFA31157D42A4D6D2D5E58E0C6679 /* Parse.m in Sources */ = {isa = PBXBuildFile; fileRef = E56771AE10D1052EB22D63A1F7631599 /* Parse.m */; }; - 2F21FA644C383C630A49A59124F4F297 /* PFHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 20DFAAE476F60317DEAEE177019E41E9 /* PFHash.h */; }; - 3066F217E0560A5956224017904AC0BA /* PFRESTAnalyticsCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 514CD500BD8BACEDB35A91E6F6135E56 /* PFRESTAnalyticsCommand.h */; }; - 316E54BAB18CE88AA1AF6A3FC1C06BCC /* PFLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C07AD7B01F99BCDAE94E6D7D0BF6038 /* PFLocationManager.h */; }; - 319B8E861E6F24AE259C346D7B14D5E4 /* PFObjectConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 6AFE87339800D6E962F2EFEC155ABC75 /* PFObjectConstants.m */; }; - 329D4CC19C753FF40AFBD505075E71DE /* PFFile.m in Sources */ = {isa = PBXBuildFile; fileRef = EA32A2997B8869B495BB155A4CF0CDCA /* PFFile.m */; }; + 2AE2ADB09903F3B39869810739754118 /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B6673C9F7E97CEA6C3B3B57C906C095 /* AFURLSessionManager.h */; }; + 2B08C89BCB6F8CDE246F90E71C343694 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 74BAE971C6A2FC6F319D21B31E77EAE8 /* SystemConfiguration.framework */; }; + 2B0B2B3095BEFC0D0520B92D5354F428 /* PFURLSessionCommandRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = 075D17B28FD88D19723BDD0F7C7ACF85 /* PFURLSessionCommandRunner.m */; }; + 2C043C346C73A86BCA7BAF2D9B4A6D42 /* PFConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3501C65AE5330DD19D3236E70095C9D8 /* PFConfigController.m */; }; + 2C7EC42E5437F4F927B80CF65D5CEA3B /* PFObject.m in Sources */ = {isa = PBXBuildFile; fileRef = ADEFE34C92FF818B135715C323E4963C /* PFObject.m */; }; + 2CD85B954E0A03C2FC81163F60CFC4D8 /* PFApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DC525DF3A9AB295F68FFA79C1865B4D /* PFApplication.m */; }; + 2CF3E58396AB85B06C5F11298F43FE91 /* PFMultiProcessFileLockController.h in Headers */ = {isa = PBXBuildFile; fileRef = CA70C152E8EBE75160C47A587C7EC00D /* PFMultiProcessFileLockController.h */; }; + 2E135CA6B413C0D9809F7BC1D11822E1 /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = C61F3C1B791FFC9E7C5ADE180684470E /* UIActivityIndicatorView+AFNetworking.h */; }; + 2F3A21F75992E245B70D2FAB4213679F /* PFObjectConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 923EF0E8FAAA93BA1AF9399DE58923FF /* PFObjectConstants.m */; }; + 3039F75251A2A754A7525EEDBF3907D1 /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 754C6873E010FF768376E458C1EA6449 /* BFCancellationToken.h */; }; + 307DC92332AA8387F0ED533660A7A2DF /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E1148A11007AFF78ABDECD376185D39 /* CoreLocation.framework */; }; + 30FFBDB396C82253175D828DA2BEA835 /* PFRESTQueryCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 91B168BFBEBBF3272A49E4240325DAC3 /* PFRESTQueryCommand.h */; }; + 3114529BA3CA84D2274E6E9220D1B1EE /* PFUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = 358BFE48BAAE8F3F03CD0C0904BC4C08 /* PFUserController.m */; }; + 31E55D99949F54193700F33C7FD34DA6 /* PFFileController.h in Headers */ = {isa = PBXBuildFile; fileRef = 489E3B9351E8F3F82DAFE89EEEC84804 /* PFFileController.h */; }; 32A7371F19FC366D8DF77A2FA2166918 /* POPCustomAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8EC4FC6A3A06D9292C296C691005546B /* POPCustomAnimation.mm */; }; - 337CEF0FD2D5C1BB6678DD707EA56DA6 /* PFRESTCloudCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B55D2A6F5C29F672688ABE3737712C1 /* PFRESTCloudCommand.m */; }; - 33D40C6A5051E866D76B0CCF67CF541C /* PFErrorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = E09AFB4E5EAB3E98F681BBBEE934776D /* PFErrorUtilities.h */; }; - 3470652D4A3D8DF6369A8C303B7C433F /* PFUserFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CDBD2A39D34214C8D004ED2EB0D1624 /* PFUserFileCodingLogic.m */; }; - 3503373C9952DD9070E7ECAE238838F3 /* ParseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6104AB82845FA5625E51A56F2D3213B8 /* ParseManager.h */; }; - 35416F01689A7DDCE6E0D5668322F1CE /* PFPushState.h in Headers */ = {isa = PBXBuildFile; fileRef = 33A4732FF27318AD75D549D9D4EF9CF7 /* PFPushState.h */; }; - 3599E28E04EAB539A5FD9D834DC5A75C /* PFSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 12C95F161EE734C3016E891E9C306A42 /* PFSession.m */; }; - 35C36CD9503D9EC4A28209B5E035D087 /* PFPinningObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 576B1125C947E14A49E22D7F411DC55C /* PFPinningObjectStore.h */; }; - 35F26A4BE5FEFECFAA3193997D497ED8 /* PFUserAuthenticationController.m in Sources */ = {isa = PBXBuildFile; fileRef = D151C7604325CAC5209D9944C99E592A /* PFUserAuthenticationController.m */; }; - 3713BC71FAC8A9D24C899ACE945AEBE1 /* PFURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B4CDA57AC000136EA5B434611EF0426 /* PFURLSession.h */; }; - 37F1E816600B8383A177AFA48F9B9551 /* PFRelationState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B6D07518E33FDE1A7B76FABCCABCBCD6 /* PFRelationState_Private.h */; }; - 386430CD6BC461BEED2316A11FC8FE48 /* PFMutablePushState.m in Sources */ = {isa = PBXBuildFile; fileRef = 867A8434D57CE1DA9A2FFA7F45002F4D /* PFMutablePushState.m */; }; - 396E7A1AB7916FBCD13664E19DE2BC76 /* PFCommandResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FC0F52242A2200901325143AB469063 /* PFCommandResult.h */; }; - 39BAD8B311E33771256B966A57843B95 /* PFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5844FC1A0322F7909761B921AC033AC3 /* PFNetworkActivityIndicatorManager.h */; }; - 39CC63B33F77D1681BF28E360F70F51E /* PFRESTQueryCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F8C504A6034C0190584C29C9997115B /* PFRESTQueryCommand.h */; }; - 3A3493E61B348824D84A23B067E06AA8 /* PFAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4799A3AB2CC4C1F80574291738520C2F /* PFAlertView.m */; }; - 3A4BDE3681900808879A0C40B8E2F1F1 /* PFPushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C364D224B5FE61E8BA844FB66D55C5F /* PFPushManager.m */; }; - 3A7FA4B7E74C5E26CDE357F96FC98103 /* PFObjectFilePersistenceController.m in Sources */ = {isa = PBXBuildFile; fileRef = 97CC9DF74264B1EB7657386C54DD635B /* PFObjectFilePersistenceController.m */; }; - 3A8A15B0446E07D02673B6C26D33D1F1 /* PFCommandResult.m in Sources */ = {isa = PBXBuildFile; fileRef = B26254ACE198AC611B2797250DAECDFA /* PFCommandResult.m */; }; - 3BA271FC19614D18554DCEB45AA7C8B3 /* PFPropertyInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 81397E9A1C30F99B66BB50321A4C5075 /* PFPropertyInfo.h */; }; - 3CF4F8B20D4E0A674526ABC8D4FBCA50 /* PFProductsRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = F0B4809986AB679C74DF6F09D239764C /* PFProductsRequestHandler.m */; }; - 3DAE979FD23E68CCEDE5C9990E3AF75C /* PFACL.h in Headers */ = {isa = PBXBuildFile; fileRef = EA58A3816CEEB2481D5DE6BD6C227C8B /* PFACL.h */; }; - 3E37D17B235B28EE15722A4EC6292082 /* PFObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 718BF86CB0A3C4DB13DBC0EAEA86A9EF /* PFObject.m */; }; - 3E74198746ACFE9E3471838F88A99221 /* PFRESTPushCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D3CEE52CB984D4C4DB6A4F7A4903BBC /* PFRESTPushCommand.h */; }; - 3F52D5FD7AA3B7AFFE181B47D6E7EDC7 /* PFNetworkCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = A8D4C658312EAAA8ACC1463D1135ADCA /* PFNetworkCommand.h */; }; - 40931C180200922A9FA22B2987A25CA2 /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C7C0C503A3D3A88614601190439E30 /* BFTask+Private.m */; }; - 40BE6157F49EB2FAF540BF98C3446787 /* PFGeoPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 696CB0BED47C8B75EFCBA90955BB17EA /* PFGeoPoint.m */; }; - 40DDD41E4C564B7D3C9E0099BB6B9410 /* PFCachedQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C49C75467014FA33C9642023DA6F54D /* PFCachedQueryController.m */; }; - 40FE9D72CA9DA4CA46C68105DC932825 /* PFACLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = EAED133F8FBB016C53BC9D82E80C4D8E /* PFACLPrivate.h */; }; - 430889BECFF5F51BE84FC1D36982B334 /* PFObjectSubclassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = A9725E3A84362C8B373DA1D0A052B2CB /* PFObjectSubclassInfo.m */; }; - 43F261FEEA8A1683059CFFE377B80DB3 /* PFObjectEstimatedData.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A4BF349F63AC01086486C8E720D05AC /* PFObjectEstimatedData.h */; }; - 443A4588858747A69D9B526ED5778AB0 /* PFFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F35A9095465C7A589E9D7FC2F4774D8 /* PFFileState.h */; }; - 44F6BF9666346E13D5C6FBD2E3F1F026 /* PFAnonymousUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 56414F68055CC861BAB740091699D58B /* PFAnonymousUtils.m */; }; - 45748239D7FD943D62792FAD588CDFA1 /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = EE2CAAF3B10EA83469E9BF55744C5A56 /* PFJSONSerialization.m */; }; - 45873E765FB3EAA10D59BFCEDCEC4320 /* PFRESTUserCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = BFDC9A22A2A96279B4BDF17190E2A775 /* PFRESTUserCommand.h */; }; + 33D4081B410C93515F3AE2B05B1E6FEB /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 52808B026D92DB8F0DCCBCA2EE24FEEF /* AFSecurityPolicy.h */; }; + 3535E9FC786DCF87B160127BE2ECB0BD /* PFACLState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FE27C4E5599C93B42BFE6AFD312AC39A /* PFACLState_Private.h */; }; + 354DC5158891E616616904856C60FA22 /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A207317F4EF6A614BE7034DE5F3A9E9 /* UIActivityIndicatorView+AFNetworking.m */; }; + 3576593700E45C9EBD7D41E2565B1DF9 /* PFSessionUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 810E80DCE80B90D80B5F21BF7212FEFB /* PFSessionUtilities.m */; }; + 359312B1BB35A2C98A870CFE8FB33B67 /* PFInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A0A7E7C948EBD45C167B8D1A339D98A /* PFInstallation.m */; }; + 364E56F74AFA751A33C35FFD3FCA4EC8 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2BD22E7A59F4BEFF52D4F43A0AA7EB30 /* MobileCoreServices.framework */; }; + 36A0EDEF8443BF059C5DB307F7965A1F /* PFRESTCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 595A306B6C145E017C4B885F8ABB9F94 /* PFRESTCommand.h */; }; + 36DA904B38775E96B9F00B1F60A4EAB8 /* PFPaymentTransactionObserver_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7203E516FF95A460652ADF5DFDEB3FB7 /* PFPaymentTransactionObserver_Private.h */; }; + 36EC255A02DFAD503AE5742DB66EAFBC /* PFBase64Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 507ED5364F8D323521133232F9E26134 /* PFBase64Encoder.h */; }; + 375E59B3F0F22CB28FA382DDB3790F5D /* PFCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 96403B2BFDB3FEACA24969CF6378D7B3 /* PFCategoryLoader.m */; }; + 37A5F32AC77016F849D167378E9675A3 /* PFObjectUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A988AADA8AE3AFF34F68D1673691E59A /* PFObjectUtilities.m */; }; + 39508B096050C3D476E0601B62A67570 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + 3B3D6A60DE4D34A1163B63BAB228AD0E /* PFRESTFileCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 5367E0C94AEC8755F6974A3C97264428 /* PFRESTFileCommand.m */; }; + 3BC9D144F933784273CB48ED48DEEDE1 /* PFQueryUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = E1129C74BCA89B5DEF89974B3EADEAF6 /* PFQueryUtilities.h */; }; + 3BEDAF0982149FC43350CD19D854DB44 /* PFDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 721E34BBC2F5BFD148652BD36955365C /* PFDataProvider.h */; }; + 3C0D480E2EB6981485CFFA27131FACCC /* PFQueryUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = BE9F74FE3902C79E0394988E24194855 /* PFQueryUtilities.m */; }; + 3C401E23A540BDCC225B5C87F2069A02 /* PFObjectUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = E90014A2B5A64CF0A01CA41D71769C7B /* PFObjectUtilities.h */; }; + 3C76079F931B8D254646B65609456C1C /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 48514E935FE3E435F151EFEB4D829A65 /* CFNetwork.framework */; }; + 3D264439507D686CBF9E7040B2B181EE /* PFPropertyInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = B1D6FB68F1851036506A1E965B20FBD5 /* PFPropertyInfo.m */; }; + 3D6CCE33D20C53A3D9E7C977ADFD6072 /* PFRESTUserCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 876ECCCFCF0B3F87EC5560A2FF6B5059 /* PFRESTUserCommand.m */; }; + 3E1E0EBBE4CD3857AF753AA1AB9DF965 /* PFQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = F3FCAEE7ACA390A41ACE7637EA5338AE /* PFQueryController.m */; }; + 3E36642B632C36FD496D0345C6B12E15 /* UIAlertView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 512576519C7D60E088B9946D68C2893B /* UIAlertView+AFNetworking.m */; }; + 3E422E5F9B8E3F76E4C900039E54EE29 /* PFKeyValueCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A63FC1750D756C077EBF6610F23A216B /* PFKeyValueCache_Private.h */; }; + 3EEF37314E80E89B4E7A8176F07348A2 /* PFMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 475310436BBAD84F7095E6DB0BB83F78 /* PFMulticastDelegate.m */; }; + 4059140EA33C2322618F795A388B41D5 /* PFCurrentConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2966362D026D5B9C80E247EEDC0F4E9B /* PFCurrentConfigController.m */; }; + 405FB9DDBD091D87674AF85C7B194D5A /* PFRESTFileCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = E20D9CF29C188B71F5C9BA5C972A8960 /* PFRESTFileCommand.h */; }; + 4071546C204958FA56B126598AA21012 /* PFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E2534618753A8E575CA58125DE04D03D /* PFNetworkActivityIndicatorManager.m */; }; + 40B66FB31F7627FB33B911C4E2AAA916 /* PFOfflineQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = BBFE8A0106C591064C969ED096275D29 /* PFOfflineQueryController.h */; }; + 40E084818025A5B88AA7BDBFCA7F3D3D /* PFDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 965FBA9FA425FE1BA4E41B4FFEE42FA8 /* PFDateFormatter.h */; }; + 40FA82215DAF72DD25F30AE4D6AC2F5D /* PFOperationSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 92A56E592AF27DDA726FCE1F4C398C8E /* PFOperationSet.m */; }; + 410C3023E9AAE2B3E429CDCDA5B48391 /* PFAnalyticsUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D237A86108BD1DB8A37BCC3FCA0DC90 /* PFAnalyticsUtilities.m */; }; + 41521CD3844A812C3397D6564CA06416 /* PFPushState.h in Headers */ = {isa = PBXBuildFile; fileRef = 97D5C73BC159E5CEFA38B5345BB3B77E /* PFPushState.h */; }; + 416DEEABAAEF3F52A524963C6185F128 /* PFObjectPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = B7E18330D5E87E2825CE1B429D6F6693 /* PFObjectPrivate.h */; }; + 434E79FDEC38451A64203A9A367D52A7 /* PFQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 58EC2DED4BCC481232C4E104FEB2F9ED /* PFQueryState.h */; }; + 449AC60A131638EEEA3F97F931C03891 /* PFPurchaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = F48EC1FB45579CEBC6000F723C5E081B /* PFPurchaseController.h */; }; + 44EB9612F4CAF48C8B63696822A2A3BF /* AFHTTPRequestOperationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 202A2922E63631CD23C09430889F7248 /* AFHTTPRequestOperationManager.h */; }; 461ADD1403E940D9DB7BBB5B7323376F /* POPMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C3FE18EB564AF4087573DE6F3F2D3D3 /* POPMath.h */; }; - 469CD764E4D9746AB3FE052DFC905A38 /* PFPurchaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 372AEF8690F07BECE3E348391A87DEBD /* PFPurchaseController.m */; }; - 46E08CFA7AAF23F9DD6E3CA9BDF1377B /* PFOperationSet.h in Headers */ = {isa = PBXBuildFile; fileRef = EBE833F5099FF7EFCCA0F9DF00B29E0D /* PFOperationSet.h */; }; - 47DAE36CDA380C8BA9C0A17C781993E7 /* PFHTTPURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF05F518409F76124476457E2514771 /* PFHTTPURLRequestConstructor.h */; }; - 496C5BBF325D1380F718B05EC92EA397 /* PFOfflineStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 7971DD333353B1B9C109052C86147DEA /* PFOfflineStore.h */; }; - 4A28BFE309A0D988EF39EE2EC9510164 /* PFRESTCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = FC1EC8B36049F8C298B8193BA14B5E03 /* PFRESTCommand.h */; }; - 4A81A9C50FCE3083B83AB000B52A4C4B /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 73BA46E681EC6D99B36A7E314941B82A /* PFEncoder.m */; }; + 469AFCA6DF69037CC22B9353A5840D2E /* PFURLConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BAB10EAFDE7E6E60F85AB4A4C3AD67E /* PFURLConstructor.h */; }; + 46DCE2CC317AC30889B0B674F4C86173 /* ContextMenu.iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C3E92FDA0225F57156353438BB9F934B /* ContextMenu.iOS-dummy.m */; }; + 4954EF0625F842D1C956DA967DE52064 /* Parse_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FFEA133F46FCCEC9897A623F3336EC38 /* Parse_Private.h */; }; + 4A9B74E229EB5509659505EE1DE1692E /* PFRESTSessionCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 9507DB69A2FE53769B24313F98BCFB5B /* PFRESTSessionCommand.m */; }; 4ACF656AFA1302DCF387C7A2D0F238F2 /* POPVector.mm in Sources */ = {isa = PBXBuildFile; fileRef = F0B4105C7EE2DA010EA4746E79138C7C /* POPVector.mm */; }; - 4B4AB0A2CF5ECF807CC6D6BE5057AA22 /* PFSQLiteStatement.h in Headers */ = {isa = PBXBuildFile; fileRef = 71D39E34A21D15F057EC75D91D396416 /* PFSQLiteStatement.h */; }; + 4B9E5C8C8330A9073755CD7BA0DE94E1 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = E12E9AD26CFEFE56F770EBC8224F9542 /* PFEncoder.h */; }; 4BA566241FA98C1D5E4A5284D84EAB71 /* POPSpringAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = EB56BE02F1B0412A41C9D9834B04BC30 /* POPSpringAnimationInternal.h */; }; - 4C3E4F71058661B73B9327E1BBED5B13 /* PFPushManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C96C8283235BCEAFB2B6F132CE911578 /* PFPushManager.h */; }; - 4D2107B82EB19D5552F0D8643B72A7F7 /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D5A05A4C5F9BA9C066877A324EE3B697 /* Bolts-dummy.m */; }; - 4F5DB886DFF123A9B153B4B09E6AE057 /* PFMutableUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = BE2646A9566B3A11A2F19AA8D5D15E62 /* PFMutableUserState.m */; }; - 4F6006F15CF4E92C3FABBB82AA76FECD /* PFObjectBatchController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FC52A2F51F3D38AD751DF3CC9B7DA95 /* PFObjectBatchController.m */; }; - 50605C083705C4639C1DF50DCA513783 /* BoltsVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = A7B5535D819421EFD2C8509D19D9430E /* BoltsVersion.h */; }; - 520C83141D41FC85B6C1A563CDA10C70 /* PFRelationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = C9076753B0A2E12983ECEFBE60C6E4A3 /* PFRelationPrivate.h */; }; - 5311B039E395DC406C7B4A16B4F20D57 /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B1F17F7CC5A76F9BE1ABD011A8AB9C7 /* BFTaskCompletionSource.h */; }; - 5374E8CE7E7C39178DE04676172D49A9 /* PFURLSessionUploadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 95C6F24D93DAFD0A99EFD6D457EB68B1 /* PFURLSessionUploadTaskDelegate.h */; }; - 543A2634117075614FDC4858F28CE298 /* PFFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1018BFE57D5EDCC0B72E6A255BEC0971 /* PFFileManager.m */; }; + 4C554340F9C8D98F3D3DF059FF829952 /* PFSQLiteStatement.h in Headers */ = {isa = PBXBuildFile; fileRef = 007D017430CAD14C507E4E16894E1ED8 /* PFSQLiteStatement.h */; }; + 4D7202CCD20BEE8BD04BB17D3D304AF2 /* PFAnalyticsUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 857A8C29F0006E02894A63C09D31CB85 /* PFAnalyticsUtilities.h */; }; + 4D74C041164EA0F477B58E5AC7FE23E5 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = BA8D893893775B109603AF7A33CD563B /* PFURLSessionFileDownloadTaskDelegate.m */; }; + 4EFB6054A4319D663B1AB4BA681A03B9 /* PFConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = D4186E5938E4D869A1267A20AC002113 /* PFConfigController.h */; }; + 4F4F44F87B9F2B6059549A42131F2930 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 74BAE971C6A2FC6F319D21B31E77EAE8 /* SystemConfiguration.framework */; }; + 4F8D2DF83D8B2D41170ED4D1C05D6B55 /* PFErrorUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = E97A297341B3E569BD3DEA54A611D6DF /* PFErrorUtilities.m */; }; + 4FBE8D3A5BB9B088B3D381A2A623FD4D /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = F6357CB5A05AA7E18DC9505CDB7B5CE8 /* PFJSONSerialization.m */; }; + 4FC6DEBE5ABA5E9CBABDD1DBC3BBFB04 /* PFFileDataStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 26DE5D007AAFB71206252AE40BAE833B /* PFFileDataStream.h */; }; + 507D5F0F50CC15E879DD054990D1693E /* PFHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F6D07CF3F5445D97AACFB330CF98F66 /* PFHash.m */; }; + 524D6BEE8260BC395116B1055A619C4B /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = A6EBD847848C1C85F961433CE4F102A3 /* UIRefreshControl+AFNetworking.h */; }; + 532D3DF59CE8F5865F4E86368EB6462A /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D3ED73DF6D62367D4288EA69377B589 /* PFURLConstructor.m */; }; + 543DE88D4CFC0102FF1D16C6718032A6 /* PFPushChannelsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B2FDDD8F730AFFD1DFF805E250C3654 /* PFPushChannelsController.h */; }; + 5489C4B47D41585D9CD38481265528D7 /* PFMutableQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 345A7737A02453DD9D85EE95F928690B /* PFMutableQueryState.h */; }; + 54CC3108BC26BBB273A857924B6173BF /* PFObjectEstimatedData.m in Sources */ = {isa = PBXBuildFile; fileRef = 734124A4F7A87553483F895904EE19A9 /* PFObjectEstimatedData.m */; }; 5520088E66FB2528F595AA617FFC5D9A /* POPAnimationRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A5F7AF86D19E519B94AD6D8CB98CC34 /* POPAnimationRuntime.h */; }; - 5569DBBFB4ABCE878961443B04A8F22F /* PFPushChannelsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FAF3CA5F19C3EB426FBB8AC2A926793 /* PFPushChannelsController.h */; }; - 569287C78D527E46F67C066FF86DF966 /* PFAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2127EF3ED0DD02367DA4C3463002ACB7 /* PFAlertView.h */; }; - 56D20A2BFB5FC35FAC94E73E472FD291 /* PFFileStagingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 623D1DB3CEA9317B7323E1B4435A4B04 /* PFFileStagingController.m */; }; - 57BDE0042C46044BDA9F9731BE767BF2 /* PFUserConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 619BA5C9745FABA615C1071117CF49AF /* PFUserConstants.h */; }; - 594661284E1136D1D927A831478A58C8 /* PFThreadsafety.h in Headers */ = {isa = PBXBuildFile; fileRef = 050B2D7FC8433528EE96A73D6084FDCA /* PFThreadsafety.h */; }; - 59470446A0F13135B25E820D1B76EE20 /* PFMutableUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 72E4522345A892B89A84489DB3B8F316 /* PFMutableUserState.h */; }; - 594CB78A508EC57A208E26DE4240AC4F /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = C0F939B16AC0EFB29DA8BB09980593E3 /* BFCancellationToken.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 59834354CB20F36C447DD2955928EDDE /* PFQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E9FF91DD2DCE7D504DE6C0AC9CE6091 /* PFQueryState.h */; }; - 598B48CF82CFFBA09F8D6D1DDAA489BF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + 5555C4B8729021B6051BD58E96BEA0BD /* PFConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 18D7C9B8DD8A89571437499374A39984 /* PFConfig_Private.h */; }; + 55D282FE0C9269BA1E05D31AF560DB2D /* PFProduct+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CBCE01FE706B02A990236BCCFB09B153 /* PFProduct+Private.h */; }; + 5615E187912379539C73AEBDCBB69AB4 /* PFCurrentObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = ED172D7F5B84203E7C6617EC01D187F2 /* PFCurrentObjectControlling.h */; }; + 562F0029981DB78EAF4891EFE5DD13A6 /* PFUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 08DB18CB20934926437D11F21D1D9B8E /* PFUserController.h */; }; + 57F507F10A1BB85EA45DA90E31045D4C /* PFFieldOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A250843CDACF4CC56A8C27C4FDF9C270 /* PFFieldOperation.h */; }; + 5935304BB5A45EE7BF047CD984EBFB73 /* PFCommandCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E424F4FC00D39BFE64948677EB2D53A7 /* PFCommandCache.h */; }; 59CB94574F710422B4C9CD6D388CCA03 /* POPCustomAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 928EC8B9105DA581C7896C2102E87BE2 /* POPCustomAnimation.h */; }; - 5B685F83F56F617391F88FD766346D1A /* PFDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D4E5CDB238B4708D75EDFA04F2388C5 /* PFDateFormatter.h */; }; + 5B2E3974FFB3B52E1377C6959B742F56 /* PFInstallationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F214F1BB9B408A25954535EFA736CA6 /* PFInstallationConstants.m */; }; 5BFDF4E4848A83D2225D948A6D0B79B5 /* POPAnimationRuntime.mm in Sources */ = {isa = PBXBuildFile; fileRef = E85E0983DBE882A8009D0F7EAB591B91 /* POPAnimationRuntime.mm */; }; - 5C19F0A13BF4CF2730EC0980905D19C5 /* PFApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = EF733EE510CD105F55AD2996CF7D7F94 /* PFApplication.h */; }; - 5CED75FE18276FFAA65BA5C3736DBBAD /* PFCommandCache.h in Headers */ = {isa = PBXBuildFile; fileRef = CF75EB65BC1D473202CD8BD2F8F9879C /* PFCommandCache.h */; }; - 5D791BF555DC7EB786672923861195D2 /* PFCoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 611FEF49E42DDEF17150301DFA476527 /* PFCoreManager.m */; }; - 5E61BAC7772421369DA00363F31DBADE /* PFUserAuthenticationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 13AAF6B43993D5DCA1ABA1E0C06822F9 /* PFUserAuthenticationController.h */; }; - 5F0405B82B5E4A4E8875AAAD48EAFF78 /* PFPurchase.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DDB11ED96EBA4EC3BB398585D212BD7 /* PFPurchase.h */; }; - 61432F6CE266B1C52A7F75C11A36DE54 /* PFErrorUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A2E0CCEE8F29A9378B50A30B3F234FB8 /* PFErrorUtilities.m */; }; - 61ED0A41D76F0726400142A59D904E8D /* ParseModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 90312FA789CD74048F0D32BCC9C66D08 /* ParseModule.m */; }; + 5DC9D0A553754F872A6C6EDF5B8D51C3 /* PFApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B2B77FA62BB014F37CDD536B7F39AD5 /* PFApplication.h */; }; + 5E344479C1E3FE458D0D732D5EFD8C8B /* PFPushState.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B3991EEAD0B989CE24DC09DA3F6F84B /* PFPushState.m */; }; + 5EB711D9E225DDEED6606BBF5E4D400E /* PFFileStagingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 461917BD0B571A033CB9E74AD334A12C /* PFFileStagingController.m */; }; + 606DAFEA41DB4A57A32229A007CAE7F4 /* PFURLSessionCommandRunner_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 47DED761A5B41071D4A460714CF9A610 /* PFURLSessionCommandRunner_Private.h */; }; + 60E2A7A43AE9D6EACF4B5E3AD4FBFA04 /* PFRESTCommand_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EAEF6A0ABE272D5803680B4298EB62D2 /* PFRESTCommand_Private.h */; }; 620920967F6C1FB5C501AD33EFDA1639 /* POPAnimationEvent.mm in Sources */ = {isa = PBXBuildFile; fileRef = C0DF3C83EBC5F7BF6DAAACEBD7D72791 /* POPAnimationEvent.mm */; }; - 621279BB6006488862FBED865442AD17 /* PFOperationSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DF9D409D2807A34B747777E2DC97F14 /* PFOperationSet.m */; }; - 6398F44FC456E6FCA1592AD36FCDF9D4 /* PFPinningEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = F38E2E7F98830316F576F45842FC59EF /* PFPinningEventuallyQueue.m */; }; - 63E39227EDD9668A6E8BC71B368A468A /* PFInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FA17927867D6B7D6DADCC59515AAE7D /* PFInstallationController.m */; }; - 642D57D3B89C7A445FF70615D32FF5F8 /* PFRESTObjectBatchCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = D77774D5F665986858DAD577093BF4F4 /* PFRESTObjectBatchCommand.m */; }; - 655081C07BD22C6D7E64FD52025748A0 /* PFPush.h in Headers */ = {isa = PBXBuildFile; fileRef = B2256E19F54D3528053251E979C5257B /* PFPush.h */; }; - 659C6F42D23ECCCD7B01C02A20779C9D /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = FD6EC1E48FAC08767E731AE5659D8A3E /* PFUserState.h */; }; - 6625ABFFA433446F0AD935A23A5BBA3D /* PFFileState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AF8F0B7303C117779BBEBE048717710 /* PFFileState_Private.h */; }; - 686A7F89082DD9140CD3DDC0E6904483 /* PFInstallationIdentifierStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 53F56D358828987779F91894A792A4CA /* PFInstallationIdentifierStore.h */; }; - 687532EAB67048417C42A2035ABC94C5 /* PFCommandURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 86589D24F969C8D7ABFA2C300F854F18 /* PFCommandURLRequestConstructor.m */; }; - 68D20B8A77AD61D8796513B9176D3290 /* PFMutableObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 00835672E9411A4D0F46362CD9FC93C9 /* PFMutableObjectState.m */; }; - 69154DBCC2477D0C7A4F745CA0DADE93 /* PFAnalyticsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 722BD969D4C4074223C4A656C0F6B7E7 /* PFAnalyticsController.m */; }; - 6920CB7ED6DC80E0D75D9F2FF4A32886 /* PFURLSessionDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3AFFA6C615F4519F0FD6DD4EA4194C /* PFURLSessionDataTaskDelegate.m */; }; - 69AAC2D0D00269D9768C8D7F8682F0E5 /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = 53086C5F8B1EDBB0614BD2C21F7CBB35 /* PFCommandRunning.m */; }; - 69E80DB61969642C17191BC5BBA98A29 /* PFProduct.h in Headers */ = {isa = PBXBuildFile; fileRef = D9F83A22B0271BB18AA8680451C70138 /* PFProduct.h */; }; - 6A533C5F4EC965A14EF04454F44BFF8F /* PFACL.m in Sources */ = {isa = PBXBuildFile; fileRef = DED2ECAD15A2BED79633C019904DB280 /* PFACL.m */; }; - 6A93F8BA7D137B0EDE155E86F464C4C0 /* PFCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B340A85871E94B6C963F8AC7AA61A3 /* PFCategoryLoader.h */; }; - 6B36C3C0CC3704D7094501B152180465 /* PFRESTQueryCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 132B11DB4450BB2DC8926A20B853B6AD /* PFRESTQueryCommand.m */; }; - 6B4B0E078B36ED6BA341705E30747327 /* PFWeakValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 078642F5D1917B58A6998424887BD706 /* PFWeakValue.h */; }; - 6B8677DEC15D1D29722EFE9C0B6BF6E4 /* ParseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = CD24A497637B97FB13D87D8C73E642D5 /* ParseInternal.h */; }; - 6BFF6EDB4C8C521CD4F3DAA75AC1805A /* PFFieldOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AD6E87805E310F6517D29CDFEEE9587 /* PFFieldOperation.h */; }; - 6D95E647A7F297CD5158021B8FD3ECCE /* PFProductsRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = EE6E133088AF492F15B3EEBDA616077B /* PFProductsRequestHandler.h */; }; - 6DAE8FA462265C812F6E4DF0A55AEF3E /* PFPinningEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 15C0132F3858BCC88CB28061A960F0D1 /* PFPinningEventuallyQueue.h */; }; - 6DBBFD7DD52BE4CDC38C8A5FB05F342E /* PFWeakValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5880D4CB5AA7C367A9C45BE209F6CED6 /* PFWeakValue.m */; }; - 6DD3D07AFA4F7CA2CD9C301E85689F27 /* PFDefaultACLController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B52BDCCABD35EA2D1C44912753D79E1 /* PFDefaultACLController.h */; }; - 6E51AD72EEA9BB0640F71452899AE452 /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = AFBDA3EF95CECEB449D3303D17FA28C2 /* PFURLConstructor.m */; }; - 6E5C3BB91BA09FB4513D0721465C4FFB /* PFCachedQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 53F21E51B835CE481CAA7ADCD43FC400 /* PFCachedQueryController.h */; }; - 6EBFA4F90244DC3C8A8C531D0616F725 /* PFObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 248BBC0B2BBF2B01CCFCC79F7FE785AE /* PFObjectControlling.h */; }; - 6F6F629E71E042C4CBD0BEF41B092779 /* PFPushController.m in Sources */ = {isa = PBXBuildFile; fileRef = 35A7823CEFBFE2CF5ABB3556EF3D0995 /* PFPushController.m */; }; - 6F9126E3FFC98310534685D7A8B31E82 /* PFPropertyInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7334DBEED1B1C3906828C55F380147ED /* PFPropertyInfo_Private.h */; }; - 7139362B02E25FDB87C5DE753807A988 /* PFKeyValueCache.h in Headers */ = {isa = PBXBuildFile; fileRef = AD088079F8066DB0050C23252546389D /* PFKeyValueCache.h */; }; - 72013EB65410BE1E5CA73DC32B0DFE11 /* PFSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 880AE19807FD283D4EB9724F21F4E548 /* PFSession.h */; }; - 721650D6F618B7A6F1C1ECBB033544BC /* PFHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = ECF03863A8796C16D65EE3AC73DEC5B8 /* PFHTTPRequest.h */; }; - 72C1E0F7FD22531F9422D5E312D251D0 /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = 8133C4680D6ED2FB7338EF30FC88BBCA /* Bolts.h */; }; - 72E104B003B673F8875E48CD3A237C23 /* PFCurrentConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 00AC73B1D5A77DE4B493A990018DA825 /* PFCurrentConfigController.m */; }; - 72EDD8852F2BDAF5CEA81572EF096E58 /* PFOfflineObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CCEA16112CA90E44E0E982B2A2B27D3 /* PFOfflineObjectController.h */; }; - 7396B761D2B10B38F3FB6A02E916531F /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 419B671E948384A84974D819F4F24FBA /* Pods-dummy.m */; }; - 750884DBC2F9D2C41A1C81EAB8E11978 /* PFInstallationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2B236ABC299A669D53E54FC6FF7414 /* PFInstallationConstants.h */; }; - 756DA89EA9395CB7359CC904E06BAA18 /* PFCloud.h in Headers */ = {isa = PBXBuildFile; fileRef = A12B04A764E33DA1C04C5C989B5C536C /* PFCloud.h */; }; - 763613884EE6DB9A9FA19FDA216D2557 /* PFHTTPURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 312D446A8E99BA072B9A091616AB0DC2 /* PFHTTPURLRequestConstructor.m */; }; - 7667FCD8500AD6A29077C9412887D793 /* PFObjectSubclassingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ACE89D8884AAB54C96F063FF438FA31 /* PFObjectSubclassingController.h */; }; - 76917A212479DD1B43BF4D57305AB31D /* PFPurchase.m in Sources */ = {isa = PBXBuildFile; fileRef = 20AC43D5B60CA86B1AD76BC5D4591D96 /* PFPurchase.m */; }; - 76B0379D807CF3B4B2097F46DD7F3865 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 72BD4751F46AFBD16AE367CAE3FA8785 /* BFCancellationTokenRegistration.h */; }; - 7708D5EBFAEEC08D4A1484B5E19F1EC4 /* PFLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 425CA0B11664DBBBEAA5C27618F79FAD /* PFLogger.m */; }; - 7745A799CA4ED9892587851FBF71E345 /* PFURLSessionDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E5945950FBDA34F155BE025094F2F22 /* PFURLSessionDataTaskDelegate.h */; }; - 7802CAB6E61C60D1015477E448730D85 /* PFPushState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9ED7955943D662DC1DC137B29185582D /* PFPushState_Private.h */; }; - 78C6EFE00AD49FD7773149CC43D5724A /* PFPropertyInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DC21BCC836700655FF0FC5118F41587C /* PFPropertyInfo.m */; }; + 626E3E94132CE3E2B174CCB5C2E61241 /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = FA74881F0C5E486DA753412D3B49338C /* UIWebView+AFNetworking.m */; }; + 628EC2E2FC6B26D0F6C7ED0DAB935A84 /* PFOfflineObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = D8AA77C187E180A556AF4ADA309BC0B6 /* PFOfflineObjectController.m */; }; + 629633A8DDB4D329242214C1C6EA85A5 /* PFInstallationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = C01AC5406A1FE996C23D44F2D1E54AE2 /* PFInstallationConstants.h */; }; + 6378CF7EDB22FBB77D96DEBAA2552517 /* PFACLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = B627B86FB20866D18CE3E2A40FF283B7 /* PFACLPrivate.h */; }; + 638A30D79CD262C8C3291933357B2135 /* PFFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F3726655401860B18DB85328C091228 /* PFFileManager.h */; }; + 63C69E993C498EA39DD1E26BC8919A39 /* PFPinningEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0EFB7BECF9EB8E71FD258F0F60D3E5 /* PFPinningEventuallyQueue.h */; }; + 64CF2D655AAA7C7FBED2449AEC710E4A /* PFSQLiteDatabaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = A78F4615CC1292D0FA53088C626957D8 /* PFSQLiteDatabaseController.m */; }; + 650C59C74ED1EB13FF81B3AD92EB75A5 /* PFURLSessionDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DFE6FDE4C6292695F3EBEFE040B0685E /* PFURLSessionDataTaskDelegate.h */; }; + 65BBE10D6AD162A261BD96636B2810CA /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = FF7D93CF68584FFA70133B196EFB59F0 /* AFNetworkActivityIndicatorManager.h */; }; + 65C3A46AFEC65C14F9A669B9E2171ABA /* PFJSONSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 58898FE04784C24EDFF6D77428F6BB91 /* PFJSONSerialization.h */; }; + 65EAB2BF94627BD112EE4724B065D38E /* PFCurrentUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C6B8C7E82B804AB1382E38F8E99158C /* PFCurrentUserController.m */; }; + 6628D87D3C8481FD02EC5908FE0842F4 /* PFMutablePushState.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DBB0CAB75C437C618EEBFAF8F62A947 /* PFMutablePushState.m */; }; + 67674A2B768D1BFF618FE2F7DAF24321 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB0347B267799D3314B6438A04D898BF /* AudioToolbox.framework */; }; + 6848B68295C1A953461430BFAB2A5D46 /* PFURLSessionJSONDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9357693A996038C30E8C787613239775 /* PFURLSessionJSONDataTaskDelegate.m */; }; + 69067BE779C91E991C908BA33C234ACB /* PFSQLiteDatabaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = A60A05A0392E32822607D587C5380E61 /* PFSQLiteDatabaseController.h */; }; + 69134BFEE551E2C9B6F3DACC87775C7C /* PFAnonymousAuthenticationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A5BCF29FD1B3CBCBD8B387388746B55 /* PFAnonymousAuthenticationProvider.m */; }; + 6A5F690E541D3B2BFCDFB9EC94F1AA73 /* PFLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = ECBD824DA95D72A1DD329C331E1D9D09 /* PFLocationManager.h */; }; + 6A7DBAA42BF1E9104329ED6DD2FD0E91 /* ParseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DB83418592CB04C28FA16D53A2F50BB /* ParseManager.m */; }; + 6A96EFBD2ECDE315AA0FCC4BAD67A9F8 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = B0D0D5C8FF6EA31C0E29554F03FFAE35 /* PFEncoder.m */; }; + 6ACF579F7F083EF03A3DBB128D76B4C3 /* UIView+YALConstraints.m in Sources */ = {isa = PBXBuildFile; fileRef = C5560C46514764C06929B264B533F518 /* UIView+YALConstraints.m */; }; + 6C073E3CAB26DE3EC33FE490DF02FC8C /* PFFile_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0854CFF4AC229E21A7EC471BB9EAC43F /* PFFile_Private.h */; }; + 6C39436633D2F7986ED9FAE8CF87F494 /* PFCommandRunningConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EDD645EA043AC01BD2D294C8E25D7C9 /* PFCommandRunningConstants.h */; }; + 6D2F9FB21ADBAC74D397280A5832D308 /* PFURLSessionDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A3DF42FD99A813DEBC5C62B3491B1AC0 /* PFURLSessionDataTaskDelegate.m */; }; + 6D67873D2EDAAB5DDBC501CA69E630C6 /* BoltsVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AF96B14E5200CC44AFA17F564FAFCE9 /* BoltsVersion.h */; }; + 6DC9DCD2E199EE08136DFB9D8BBE17BF /* PFPushState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 56CE00CA829DE03D96192E0DB1B3B4B5 /* PFPushState_Private.h */; }; + 6ECC50446D8CE723BFA8398E30E0B34B /* PFACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = 06BDEA785CD1CCF3EC5F7D97641DB94B /* PFACLState.m */; }; + 6F3AA29F68F856746B4055983C6BF793 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6408EC1F7E48296B333659567543173D /* CoreGraphics.framework */; }; + 6F827A5588B3DF26C10C2E566D2D41E1 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5583C012407DD3D86BE591291FD5B40E /* AFURLSessionManager.m */; }; + 6FDF337377416BE9C6958B05AC1C571E /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F189D28F4E7A0D39192B35D412642BA /* UIRefreshControl+AFNetworking.m */; }; + 7070EE01AEB4E7454E9C81B2A421900C /* PFCoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 033DE2F20554C4483F70BB66112A660D /* PFCoreManager.m */; }; + 7140367343A5DBE5AEABEE022C385B6B /* PFFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 283151768413CC359CA4D2B1E9BA275A /* PFFileState.m */; }; + 7196C7AF34A6CEA821271AD022AB457C /* PFLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 0931322359A8E70F6F16FED5F97879E5 /* PFLogging.h */; }; + 72A2AA035FA76AFDB9F2081C1E6E9617 /* PFHTTPURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 022CFAB7CC0CBD47E0AC47A4EC57B983 /* PFHTTPURLRequestConstructor.h */; }; + 738F9BE2CEAA34CA252698CB2D3724B3 /* PFMutableQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = E50C20130F417DFB11F5B3BD1EE46846 /* PFMutableQueryState.m */; }; + 74036443FB7468F873D7086A1E47B948 /* PFUserPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 457B2F0DFF5B74AEFF8A1D9A714104EA /* PFUserPrivate.h */; }; + 7469D8A552A998387B59B30A9AD71F68 /* PFPurchase.h in Headers */ = {isa = PBXBuildFile; fileRef = DD2F94AB2074545E677D5F66F9D63121 /* PFPurchase.h */; }; + 75050C536E96095BD980D5A9F3593D53 /* PFSQLiteDatabaseResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 13D7A1D1A9F6D9020B6E721D5D4D5730 /* PFSQLiteDatabaseResult.m */; }; + 75E51F885183754FEFE576DB32781B13 /* PFCommandResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F06EEE3B8D8FE8CE602F2D363FEE64C /* PFCommandResult.h */; }; + 761655FD6EAFDF34F4BB6B5024A9950C /* PFInstallationIdentifierStore.h in Headers */ = {isa = PBXBuildFile; fileRef = AC3758631123BBA424D0C687A75ED31C /* PFInstallationIdentifierStore.h */; }; + 76266C2FA1D348D717AC228690DC36EA /* PFRole.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DA3428B35116EA19374F593BE42F3BD /* PFRole.m */; }; + 766CF09C4050A89F6FF611B19D3AEA11 /* PFPropertyInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3070F8AC10357FBF3BA3FE9A093D8A9B /* PFPropertyInfo_Private.h */; }; + 76BE46560E2489F20B07ADE2A8383AB0 /* PFACL.m in Sources */ = {isa = PBXBuildFile; fileRef = B94497EF1A56D3F72FD2BA76060DF1EE /* PFACL.m */; }; + 76CCB91B392B898460B3E17FAE24BC80 /* PFMutableUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = ECA0CA78D651CA48D080363398697627 /* PFMutableUserState.m */; }; + 77A778BD6F968FCB02BD567C7B5A6D79 /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = C9BD34A121ED46D7A11BF5ED82E5B876 /* PFEventuallyPin.m */; }; + 77C37F47F9E54490AB397A6C560DF60C /* PFURLSessionJSONDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = C40DDFB915A319DD1CC8CD9340920EFF /* PFURLSessionJSONDataTaskDelegate.h */; }; + 77FFDD6A37B8A941ACF4ABEF102EE786 /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C3B64369BE6A9ACF09E4E03E3747FA0 /* PFMultiProcessFileLockController.m */; }; + 786D083E69FEC7BBDAD2112F88692F61 /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B19A6DDEB20A310104A97E0953192B8 /* AFNetworking-dummy.m */; }; + 78D9A4A9E2EB39C92A78BBA7A7C2892F /* PFAnalytics_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A3A9D34733E3E1E62E950164A6B84C80 /* PFAnalytics_Private.h */; }; + 7944A48A8FCFDF523DD67A11DA48E2D3 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = D8CEAB9CDED9C3CA1445D6F3DAF05029 /* AFSecurityPolicy.m */; }; 795E704A17919AB70FF6F5738289A44D /* POPAnimationExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = 22DC4C87D619EF0F28631B5560E82333 /* POPAnimationExtras.mm */; }; - 799C410D6861767245C86294947EC504 /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = BC0C8A8C41DC1963D695265153E23911 /* PFQueryController.h */; }; - 7A645555139B041ED6863030E619072B /* PFOfflineStore.m in Sources */ = {isa = PBXBuildFile; fileRef = E342EB169F41501EE41BB76D5CA176D6 /* PFOfflineStore.m */; }; - 7ACEEE6226F28499972A0954D7E62D24 /* PFUser.h in Headers */ = {isa = PBXBuildFile; fileRef = CE37BCDB0808A581D8F23138D5B2B412 /* PFUser.h */; }; - 7AE8BFA590D9C85818D795FAA6A3E120 /* PFReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 42093BEF3F8BF73F39F33B7D65A8B184 /* PFReachability.h */; }; - 7B2ACE85B665E6234E698BF5BFFC05DF /* Parse-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A0F125F4185CBFE9AD59CB8DA8774D62 /* Parse-dummy.m */; }; - 7B42E1FCBFAF2E2E556BFBFB10A70A87 /* PFQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = E9B49219DF626061CA1102BDDE09600A /* PFQueryState.m */; }; + 7A19D5E1912F1F0AC4DB6BAB2E818B19 /* PFObjectLocalIdStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 62C1941BE9E36B0C41BF43BFCF7681CB /* PFObjectLocalIdStore.h */; }; + 7A4647A24ED50F8CB942285D95285B10 /* PFObjectFileCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 196698284757A108BD18D4EFC0D470B2 /* PFObjectFileCoder.m */; }; + 7AA7CBCE858B7750EDE2B738DBC844E0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + 7B4FF17B0F855D9EBD572C18D1EE839B /* PFProductsRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 62FA41489E9F671A6D2AC37AA15E70FC /* PFProductsRequestHandler.m */; }; 7B99231436CB0981EC5113A681AF7C8E /* POPAnimationTracerInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DA58C3428E2A0E2F88C2A0522297274 /* POPAnimationTracerInternal.h */; }; + 7C4A3111F3BA07CC804F53B11B85F91A /* PFObjectEstimatedData.h in Headers */ = {isa = PBXBuildFile; fileRef = 237D0CDD69C7B78A1BDB8DDF87F9EC2A /* PFObjectEstimatedData.h */; }; + 7CB69E68D976DE206E09BC7743792BA3 /* PFEventuallyPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 2348B7338D870B151D50A511AC6711D0 /* PFEventuallyPin.h */; }; 7D2E1DA076E379421DF5A9E74C0FD4DB /* POPBasicAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = F54B1AE39CAF0CA846C1C729B033E047 /* POPBasicAnimation.mm */; }; - 7D485860692A0F8A7DFA3A8677E6BB1C /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9468278E36B3EB05C5CA530058F1C8D6 /* PFURLSessionDataTaskDelegate_Private.h */; }; - 7D845F4DE461D22465CD1C2747BEBD06 /* PFAnonymousUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F3472D80F0C7C53B06E64DD4D56B74D /* PFAnonymousUtils.h */; }; 7DC645E712D9190C15F71B1B92844D2C /* pop-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 59B3FD41DEC22C5891C9B83C27BC25E0 /* pop-dummy.m */; }; - 7E1562F052AEDE34309BF03D4C00C34C /* PFObjectEstimatedData.m in Sources */ = {isa = PBXBuildFile; fileRef = 59363C495BDE76341FC7C70BE565EF4A /* PFObjectEstimatedData.m */; }; - 7E7DEA7F45E08BD27B568717F16EAF0B /* PFPushUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EC7BE51CD7D82DB749F5857D70F22F1 /* PFPushUtilities.h */; }; + 7DC754D4F086EC145F14F6CDF360960B /* PFInstallationIdentifierStore.m in Sources */ = {isa = PBXBuildFile; fileRef = C609AF7E1C4CAC8BDE38A1E28E64414A /* PFInstallationIdentifierStore.m */; }; + 7E150D7DB4B83C1DBCCFEFE86C047020 /* PFUserAuthenticationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DD1568F7E2ED50F1C629DDF3D9F3020C /* PFUserAuthenticationDelegate.h */; }; + 7E15C7398334F43931603A970C332DB9 /* PFPropertyInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = FD826E93D8E3CA261C02B951A6F9751D /* PFPropertyInfo.h */; }; 7EE77B776CF54D5794EB5D9DB5FCF8D4 /* POPPropertyAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = F81E8633F1E784423FE8B9BE16D38981 /* POPPropertyAnimation.h */; }; + 7FA3F9143281C5C42D3CB8AD7442887A /* PFCurrentUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D2C0E09440F10C2834146B969AD0950 /* PFCurrentUserController.h */; }; + 8019DF40B2B2165FC5EB24BD6BB5C320 /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 28676FBC1D97921BD11D7A12C922CD0A /* PFObjectFileCodingLogic.h */; }; 804C70F77F75F0E75ACC3E3E4B47B727 /* POPLayerExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 9663A817A809169745F3F8E987FFE076 /* POPLayerExtras.h */; }; - 81A0777C4DAF87256B60351C9AEBA3E6 /* PFPushPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 110F3B75E3D3EC4A08CEBF6AC5B01CE0 /* PFPushPrivate.h */; }; - 843A8657E58A5C6CF6439EDDFC6792C8 /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3C0AB42ACF3767DE19D18A31901BC94 /* PFObjectSubclassingController.m */; }; - 84826CB970129BA778C3A48CCB1B68A3 /* PFMutableQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = AD0E30A8555AA525BA9AFC45114E9002 /* PFMutableQueryState.h */; }; - 8490465F1BE562C84A9C2CF7F2125F13 /* PFURLConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 84279F3B0C8DD145E9A9E04D59B81C41 /* PFURLConstructor.h */; }; - 8522518AEE7008DCC13F9A88897D023F /* PFSQLiteDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 6082FD21FE81654EC989E13CFA913CAB /* PFSQLiteDatabase.h */; }; + 809B3785EA647CC67C699D8FEBB7461F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + 8214C48967620CE6A0CDE08A672A35E1 /* PFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = A52CE45BD75B2826314A3BCDCB813398 /* PFObject.h */; }; + 82756AE351CEDAA36F92E191804E5C29 /* PFThreadsafety.m in Sources */ = {isa = PBXBuildFile; fileRef = 436A81D9B2A9E41E99BF86F1C6871A0A /* PFThreadsafety.m */; }; + 82A1CF90239B1B2448900BC02195737D /* PFProduct.m in Sources */ = {isa = PBXBuildFile; fileRef = 893F517620D76C4DD97407C35B30C8DC /* PFProduct.m */; }; + 83B4223F07E9DB236E15C2F3242CF2E0 /* PFCoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FE1708AB969B7C864FA6A717B2332A5 /* PFCoreManager.h */; }; + 842DB9C51BA822F734AA6A66EBFD61C8 /* PFThreadsafety.h in Headers */ = {isa = PBXBuildFile; fileRef = D963AA70AF8A60F226D09FBC6225E686 /* PFThreadsafety.h */; }; + 842EC859A33C10671D3500B99F24C6C5 /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = 94E051272A8A44AC3C51C58EABF97D9F /* Bolts.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 84C42678DE4460E60A66876CDAC64149 /* PFTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E374390CBBC0449CF5CC0A1C32EE8C5 /* PFTaskQueue.m */; }; + 8503FD13A1BF53A7A91C6FC7FAFA90F9 /* PFObjectSubclassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = BF9B1FD5D1E2441D018DF7EDDDC4A3FC /* PFObjectSubclassInfo.h */; }; + 851D4FF3A335CF48002CAFE2E4F2E376 /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 73F5CAD466111E720F4983773D164AED /* PFConfig.m */; }; + 85320661106B07533362C37B029054F3 /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 562875D8611745AF8CD45A6CDA6DC927 /* PFUserState.h */; }; + 85F948A79ED6DA01A4AD4F8C2BFF690D /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = C452DCF65E6EEC6AD15BD77F01EDF779 /* PFInternalUtils.h */; }; + 86563FC6CF9DA9365C823E7285BFE1FF /* PFAnonymousUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 8675E8B47522DD1649EAE7CE1299B776 /* PFAnonymousUtils.m */; }; + 865A7864DFFA64506A9F6C30E05ECEE3 /* PFRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 3801D32A117D840B4286437B7A779361 /* PFRelationState.m */; }; 868BFBCD8263F71F8A14CBBDDAF5B748 /* POPLayerExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = 197635F0BFB93E63E82503F09B7AABBF /* POPLayerExtras.mm */; }; - 884628EDE5DAD0644DCE27A067163F03 /* PFURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = CB69D67914ACB9C94D9D8340F8255A72 /* PFURLSession.m */; }; - 884AF83BEB07D814F2E85E5DF5D1AC9E /* PFCommandCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 17C4E65BFD7461A5C5B88B9650622AFA /* PFCommandCache_Private.h */; }; - 885E3EC52D206058C4C8E9FDB31C6EC6 /* PFSessionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DB1B89CDD385F67E440201640C7AFA4 /* PFSessionController.h */; }; - 889D5DF1B5D854141AE48D0AE6AD24E8 /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = EC70489BC426131AEC77A58EBC61D6A9 /* PFRESTConfigCommand.h */; }; - 8A68AFFA32F2BBD210BBD27A1F1A4E63 /* PFSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E64CFDC86F7294DC0F63391554852CAD /* PFSession_Private.h */; }; - 8A84163B84117C1B37D4A421EE6A8943 /* PFTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 60AC5AE111695E87D9942D028A5723AE /* PFTaskQueue.m */; }; - 8B8C2F0BB0FBC8744B2B789306086224 /* PFUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = D9AD8A2E0B442B2597A5EFD99859CE70 /* PFUserState.m */; }; - 8C39E16E4A0EDC4C5864392126C2AB38 /* PFMutablePushState.h in Headers */ = {isa = PBXBuildFile; fileRef = DEEC86611B8BC477AFEF42C162C7DEC7 /* PFMutablePushState.h */; }; - 8D3EF8A73C774CBEC3A40FEBFAA6731B /* PFURLSessionFileDownloadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D29BD0D675C84B8C7EF1F88FD36417D /* PFURLSessionFileDownloadTaskDelegate.m */; }; - 8D8D0D14DDE055C1F9A3B7AD5C30513C /* PFMutableFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B07F2F4F2D16D912592A5F093A28DA6 /* PFMutableFileState.m */; }; + 882F9183523311ED2A32898E978C05F0 /* Parse-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 73DEF6839984D1F48ACE568B6EC2E5EF /* Parse-dummy.m */; }; + 892C9CADE551523C8EDF800C648306EC /* PFURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = AE0BE1F355DE44ECCAEA5BF8D4526C5A /* PFURLSession.m */; }; + 896910FF549C79158B14DBA4B82DD337 /* PFAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = CAB37E3012ED80BEB1BCF0077E7E38F4 /* PFAnalytics.m */; }; + 897527170E376AFAE5654193F3308633 /* PFUserConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = F0662D5C0759804552360A67D1BDFBA0 /* PFUserConstants.m */; }; + 8A30DA243ACAA1A89F305D1AB23B2428 /* PFCommandRunning.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F1D200E550A12E3F43CD3F31E131DBE /* PFCommandRunning.h */; }; + 8A8C8E47DA7D2D2F3EB55930A84F9DE5 /* PFObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 2792004D5441520275B8E22F94BD8E5C /* PFObjectControlling.h */; }; + 8B3ECF63B2E1B777FC04BECEC1F7C0EB /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B072562DD642F896CD3C3B7CEF2911B /* PFCommandRunning.m */; }; + 8C29699238F02B904FACC35199216780 /* PFSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 96A60F95EF69292F16C085789B646687 /* PFSession_Private.h */; }; + 8C37D4BE18B21A9CD00B953782624248 /* PFSQLiteStatement.m in Sources */ = {isa = PBXBuildFile; fileRef = A1B4C9A06FB08BC3FE354D588CD09AF7 /* PFSQLiteStatement.m */; }; + 8DC7C47A7CC5950EC009B5618371C48E /* PFFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 82BCDD60CE06A0870E0ED0D853E05739 /* PFFile.h */; }; 8DF9960DD96F9AC25E32BFDD4A3B53B7 /* POPDecayAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C560616DDF5273CF7C53EF72EA6ED45A /* POPDecayAnimation.mm */; }; - 8E0F15A272B998241EB984429079E746 /* PFObjectUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A9E8271F4A4A2FE0F545A52010B99A1 /* PFObjectUtilities.m */; }; - 8EDDF70EB01189C643A552F542A5955E /* PFDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = A7BDDE2CC83877DFC9CF1466C53CB68D /* PFDataProvider.h */; }; - 8F1E1935F365BC4F1F4235594B8E2EF4 /* PFFieldOperationDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F6C6FD6DBA4896546009DD948AE020 /* PFFieldOperationDecoder.m */; }; - 8F946B1B0CB71A2E076491477639AE22 /* PFACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = CF3B2B472A7B4B67DF8D50DADB4DBF03 /* PFACLState.h */; }; + 8DFE18ED9D0679395D555A5D2E1D6A61 /* PFPushController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7453E990BF208758602D5B39CB7388 /* PFPushController.h */; }; + 8E4E90FFCA09F9F8CBB4B3B02624C46A /* PFObjectState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 86D677D0061394762DEF101FECA5E262 /* PFObjectState_Private.h */; }; + 8F23210C8BC4F5C9280066640C17C69B /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 400935A9AE97EE38E7C59CBBD474FA32 /* BFCancellationToken.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 901C26F961EF48B307C4F82285380A0F /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 65F6F140EE00AE08D92C70E19B66F5A4 /* PFDecoder.h */; }; 9088AFD3E6C678A42A8E0189F65F73B6 /* POPDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 90DA3C63E9AD758336342BC51C0BB859 /* POPDefines.h */; }; - 918B88539BDE8BCE275FBABA8A963FBE /* PFApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 546B14FA2F1DCF4C453346FC971CDDB6 /* PFApplication.m */; }; - 92F016328F4C0F799AD1B4A8E0DDE9A2 /* PFEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 7461F51B0EABADB21626FF904B87CCE5 /* PFEventuallyQueue.h */; }; + 90F6AC61C0D614F4F3DD46C81171C8ED /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = CF335AC7E0E6EE3DD820467124C2102D /* BFTask.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 9195D181434FFDA880E3FFCCB38FE33C /* PFDateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = CF46F6E5A7E52A35C89851DED33A2176 /* PFDateFormatter.m */; }; + 91EDAEBEF03847E95272606E90B11838 /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = DAD2B1AEAEEE3B6167AA69B21E00DE2E /* PFInternalUtils.m */; }; + 91F2E7E0881F466BDF8CDDC26C780CFA /* PFQueryState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AA108C575CCC3045CF6EBEB7C2D35B5 /* PFQueryState_Private.h */; }; + 928177B9981A0BEC3E7CDCDA26DABE9C /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 39A27D94EB41AD237B4F4E722852F9B6 /* UIButton+AFNetworking.h */; }; + 93DF5CCBA43C09201E435ED14A2A0961 /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 93F14E13D1AAFFA4C781869593E6A6FF /* AFURLRequestSerialization.h */; }; + 947A48148E5A557DFCFE1524486F0748 /* PFAsyncTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 453A45902215CAB1B07AEEBCAEC35958 /* PFAsyncTaskQueue.h */; }; 94BFE73B7E00A0FED987F553B0DCE94E /* POPAnimatableProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 313669CF0D1BF49C96C85FC593F4BC1D /* POPAnimatableProperty.h */; }; - 94C30DE66C124BFE8505467FB41BBEBD /* PFCurrentInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 72DCBBAC0FE8319BEC96154A134CD74B /* PFCurrentInstallationController.m */; }; 94FACE1C5E4B42AB129DA7326E4E04F9 /* POPAnimationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F210DEEA777E0BF1995DC3570CC616E /* POPAnimationEvent.h */; }; - 959FB0E5183326169568C347A926C0B8 /* PFDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 43D1212BEB11DE789DE0E4CC000FC9AF /* PFDevice.h */; }; + 9596BB57B15E0F32ADC0E88D588DB70C /* YALContextMenuTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7977EE0242992DA9A68D3DCB922B66CB /* YALContextMenuTableView.h */; }; + 9603828D1EE5DFF8E2FCC43A612C2F6E /* PFPushUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 39451587CFA3D7024575C72DA66A271B /* PFPushUtilities.h */; }; + 96397AB59008EA7392019A2EB9BCFE53 /* AFHTTPRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A6F04B61FAF09E9538B3AF6FD9536DC4 /* AFHTTPRequestOperation.h */; }; 966900CAD39E8B592A35F8401549A86D /* TransformationMatrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E056FF5C4EC38A55B45FB52F395D72E /* TransformationMatrix.h */; }; - 9726AABD59B5FC7DFE5B754FBD4CCCE1 /* PFUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB7E49E278592D89DD351ACEB1287FA /* PFUserController.m */; }; - 98F6FA069E3C79D86CEF1EEB5EDE283C /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 4073B51D97588127A6EF20481CEC3025 /* ParseModule.h */; }; - 99839220426BCEDC551D14D33E965F73 /* PFKeyValueCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 50B0DDFFAD085BBF7A9EE5E4B41E834B /* PFKeyValueCache.m */; }; - 99A627BEE8CDA9E8724214F1D7531161 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7CDC14FF480C0D409AF7711FADC9DF1 /* CoreGraphics.framework */; }; - 9A386672D6BC9A0FEBF694BDDF02F83C /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 132074912F44DB77C37332C4CA8A3DAB /* PFInternalUtils.m */; }; - 9B996D4F00B2755BC7E39E84301B792D /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2171BDF0DFBFCB33F05FC9A1AC8B42B5 /* PFMultiProcessFileLockController.m */; }; - 9BDD798D159E329F52F7F8515EE88F7C /* PFObjectController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 381988C254ED0DACBFE2ED8164944325 /* PFObjectController_Private.h */; }; - 9BF33FD7A487A930572B4018194FF4AF /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = BC33018672D1C57CFC91D822DB867582 /* BFCancellationTokenSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 9FBE3E9BC1A8E3243D0FEC88022BA5DA /* PFCommandRunningConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3B93CF1C94B6DA6DEB3D31B9710F83 /* PFCommandRunningConstants.h */; }; - 9FE68887DC4906E768DC10E6FEC7BC39 /* PFEventuallyPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F48FD0FD7AA215B6C44D0D0D2B89AA6 /* PFEventuallyPin.h */; }; - 9FF0D77E5D6A8A71D3D00A6CC35E429B /* PFEventuallyQueue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B23ED4E70AA813C755E036B0600606FA /* PFEventuallyQueue_Private.h */; }; - A07615C44B09A564A1D5AA636366CDDD /* PFOfflineQueryLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = D552CBB2BF4CC751787C15E7A7B176DF /* PFOfflineQueryLogic.h */; }; - A0827A0C141A76B1517B3EE4198B0DF1 /* PFCommandRunningConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C7CE32C1AC8296CA307938E551C3B91 /* PFCommandRunningConstants.m */; }; - A1F6D97FD7A81F664C8F963087074FE3 /* PFSessionUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEB176EF3964EAF1E91BFCA999AC383 /* PFSessionUtilities.m */; }; - A283D115AB0163B72CF54838E83208EC /* PFObjectFilePersistenceController.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A4A542A64193B1380E5346BCEBD316 /* PFObjectFilePersistenceController.h */; }; - A374D4B38EEA9377979680400B9D7AA9 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 792D4196F6AB3ECF94F94E4B1A786D9D /* Security.framework */; }; - A3971E85AC1BFAFE9979360CCCCFA4BC /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = F1B0914AB61CF2B1F9D7ECBDE1CDA9F1 /* BFTaskCompletionSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A3AAF279B04666F0C05D7927CE27A26D /* PFQueryState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 440A7F77699899974219AB5825962822 /* PFQueryState_Private.h */; }; - A519820C333BF4B2BF7490C991DE1D96 /* PFSQLiteDatabaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = 603F88D603FD21B1DB540C18DCB38780 /* PFSQLiteDatabaseController.h */; }; - A55836CDA983C1E665B1C57D7B7B71F9 /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = D342B7DAEB7FE6F3E3110ABADFD54C09 /* BFExecutor.h */; }; - A57EE3F25E0818AE1A729712F7031779 /* PFQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = F3DCF42F9B5384302327ECB9D53A53DA /* PFQueryController.m */; }; - A7596C495E396AA4ADAFEDD15E895C54 /* PFSQLiteDatabaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EE5011502D312C68238751D67BA76A /* PFSQLiteDatabaseController.m */; }; - A86527EA3EF359DC5B93896035962C45 /* PFRESTSessionCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 707C0020EA94AD091665CAAD43AA717B /* PFRESTSessionCommand.h */; }; - A8E9F368C383FD058B852D43922CF0F7 /* PFRelation.m in Sources */ = {isa = PBXBuildFile; fileRef = 57BAE3AE27D1DF554AB43ADF5CA1C592 /* PFRelation.m */; }; + 97048C05413C62808681EA864F2667C4 /* PFFieldOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B4E5220C651194225EB11D393463146 /* PFFieldOperation.m */; }; + 9736106D305E2FACC163BE070DC6B12E /* PFRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = B3F7FC9A375F4CC184EF1CB84FFF2E2F /* PFRelationState.h */; }; + 99136C89548B177E60DD34A91B5ED192 /* PFFileState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D3E8D0F342FFF167540A96E017CCF674 /* PFFileState_Private.h */; }; + 991B10CE642953BD125D956E15532841 /* PFOperationSet.h in Headers */ = {isa = PBXBuildFile; fileRef = B1483642455FE93A36C64B730F27BCD1 /* PFOperationSet.h */; }; + 99B1982B53FDC71250D05FB8D0AC2C41 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6408EC1F7E48296B333659567543173D /* CoreGraphics.framework */; }; + 99CC3B1A726965F2F7E569FD3A7EA623 /* PFUserFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DA5FA1FA814DC209F9EABCD6B9119F6 /* PFUserFileCodingLogic.m */; }; + 9AA96E4A9687620F8C196ED2FABBA5DC /* PFObjectController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D97138DECF19BAFB63881A6D4EF92BF /* PFObjectController_Private.h */; }; + 9AEAE527EF5775E4554D7E8A48D2431B /* PFErrorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = AC7F1FE520C94B33E628A5BF7D802073 /* PFErrorUtilities.h */; }; + 9AEB47308349EFDFA683BF4A62CF195D /* PFPush.m in Sources */ = {isa = PBXBuildFile; fileRef = 62FAE8C508439F783E07B639E62E5388 /* PFPush.m */; }; + 9AFC0F0B06328DD11F5A269FC9D061D4 /* PFPushManager.h in Headers */ = {isa = PBXBuildFile; fileRef = BBEDFD1C6F661507D70B9C73268193B3 /* PFPushManager.h */; }; + 9BE55D00A42730AF0221D2294926610C /* PFWeakValue.h in Headers */ = {isa = PBXBuildFile; fileRef = BA10EEFBDA4AD314FB6D71B9DBD76FB7 /* PFWeakValue.h */; }; + 9C526742FC642C90CD9887187FD9478E /* PFBase64Encoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 568A6DDB145B9BE497001F309F81C25D /* PFBase64Encoder.m */; }; + 9CC680543CB311240352F92FB2493BB2 /* PFOfflineQueryLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 0862542F3708CEA8901318AE4F5FE02B /* PFOfflineQueryLogic.m */; }; + 9CDAF8961B1E25C066FAC4D7D44433EA /* PFURLSessionUploadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = AA5D3771AE76625915E333CFABB45A05 /* PFURLSessionUploadTaskDelegate.m */; }; + 9E5744C6E239498952CB6C2AB7AB8573 /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 38E00AD6C99A24C72256073EDD208D3F /* PFAssert.h */; }; + 9E7CF062169C9A81B37510D0AD9162C2 /* PFPushUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = DAF8AFF71E17239BC9D066B413214C0F /* PFPushUtilities.m */; }; + 9EED9C8A845D06EE53C1403FBFB196BF /* PFNetworkCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B131E3C12FA20F7C590D94EF645128F /* PFNetworkCommand.h */; }; + 9F2809547901C1650E2A6E3F1F11982C /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 780EF3BE11B2381FB28EB629FB8CBC29 /* PFURLSessionDataTaskDelegate_Private.h */; }; + 9FD4177987850C6E6E37BA911CDD3C1A /* PFRESTCloudCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 105DFF60164FDC71E3359B156DAE0937 /* PFRESTCloudCommand.m */; }; + 9FF02193886279AC96AFB7BB7D21DDE1 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D7C31A8D9DC68245949CD79BD5AD586 /* BFCancellationTokenRegistration.h */; }; + A04091E4AE50036E9788A73F231A5E7E /* PFPushPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A60CF5CEA93C2F6926C54CA3679A1556 /* PFPushPrivate.h */; }; + A0BA6E93BF48588EBC097ACE78DA328D /* PFRESTQueryCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A747E0C0BA89EAF9D9C9B35EA62B097 /* PFRESTQueryCommand.m */; }; + A0C4E0AE86CBEEDB70512630A54C1A74 /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 814B6E4C1E3AEC20607C2A43AADF132B /* UIProgressView+AFNetworking.h */; }; + A1984ACB538B0EB2EC33303455FF996F /* PFKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D4EBEE47CEE4A7801385DB1D8C88383E /* PFKeychainStore.m */; }; + A1EF906190CCCF5E5F778921BB29D04D /* PFDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 14BFF77A40EB6D31D0D53D242A01BED0 /* PFDevice.h */; }; + A20B7AB30DBD8368549A2ADD1834EE47 /* PFPurchase.m in Sources */ = {isa = PBXBuildFile; fileRef = DD428B827A37AD34DF77CC5C561BCE0C /* PFPurchase.m */; }; + A235BB018AD7FAAE25C4A295FCC5A8BD /* Parse.h in Headers */ = {isa = PBXBuildFile; fileRef = 12BB94C26636A7E690216E2AEEFAF264 /* Parse.h */; }; + A2C9CDC9EF3AFD417433B15BD6F3ED5C /* PFMultiProcessFileLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 372923DCA1E5BFDF1DBD57E93002E783 /* PFMultiProcessFileLock.h */; }; + A341920891C64694F15002A14274DBD0 /* PFObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = E0041782152C1ABC1F18B164311EAF2E /* PFObjectState.h */; }; + A57A790BA267D5575D66FBA7194C9C9C /* PFAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 37DCE2246C320FA0B8BF9CAD3758AE71 /* PFAlertView.m */; }; + A588DBAF2FF022F204CD18AA9E6FB568 /* PFRelationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = D15D922CCB9D2F0B65F44C7FBFE53EBC /* PFRelationPrivate.h */; }; + A6128B349568C6B56EF5FD2C22D0D98F /* PFInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = 57B1DA40C85BD720B286FFF8C7EA6F91 /* PFInstallation.h */; }; + A7A4C7B12C8EBCD1DD511612DF60BC62 /* PFRESTObjectCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = CB4444A178F9CEC2E097C90C7D351E7F /* PFRESTObjectCommand.h */; }; + A91F60D12B823B21A59FA96BC5AF0825 /* PFDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 0823AECF540B112CC0DD23CA1EB33F1E /* PFDevice.m */; }; A9B701428585304B432F6FD45D7EB707 /* POPAnimatableProperty.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9565C73D5D4BE79747E60DCF1557E71 /* POPAnimatableProperty.mm */; }; + A9D0D78B1F9703C282B64100E9E8926C /* PFOfflineQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DC00CBF82C85912449AE191DBEC053D /* PFOfflineQueryController.m */; }; AA0189A6FB9572B5BF87E3B0DD1F872C /* FloatConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = C091E831068E3E504A40AC6932B39C87 /* FloatConversion.h */; }; - AA25A8F11F6A8404563A6472F80AE790 /* PFInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = 02ADA053F55CC3D3354BB334C196EA78 /* PFInstallation.m */; }; - AA41B456224F2877941FE21127774A12 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEA6E529E5BC10A92A3372E82A3225C3 /* CFNetwork.framework */; }; - AAB1AECCF78B4BDEF517BCCD31BE4737 /* PFInstallationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 49274509C4FFAAEBBD45D8600A573B2B /* PFInstallationConstants.m */; }; - AAF0E5F5CB4203D4E7CE26E4C0BC3BC1 /* PFReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = B962D108140D96784FC828D86963E605 /* PFReachability.m */; }; - AB06C3BFB45A1282141E1630F26DABCF /* PFRole.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C43426FA34D5469526AAFBD7806A65C /* PFRole.h */; }; - ACFF1A205850EAA9CE547A839884E5FA /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 741AF064CFE86ABB229F37FBAFB71F22 /* PFDecoder.h */; }; - AD0C2B489AA20ED14E8199414FD83FF8 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F31229637871A1DB25EEC72DEEA4CABF /* CoreLocation.framework */; }; - AD5F099484D301EDC3BD3EE618F28A4B /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4987E5DF7D6AE7BBDE4D3055F00A8B27 /* StoreKit.framework */; }; - ADF188B732A69F682114E2047DC0CBBB /* PFObjectUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = B322FB271A210C27577B6EAD8C5062CC /* PFObjectUtilities.h */; }; - AE6D8714C88E965694D9862943ED9C03 /* PFObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 931885B870C2D6166C233379707A6DBC /* PFObjectState.m */; }; + AA14B649447F0CCDEE28838153CB8ED7 /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DDA8143D2C09DF9986817461C4DD498 /* UIKit+AFNetworking.h */; }; + AB0423F50C0C64EEE86C2680EC9F02B5 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB9D45B957B79F1459ABF1E81F01530 /* BFCancellationTokenSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + AC42EC854B284673B3E2CA42FD46285A /* PFConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D45F61B78D4419060D26A7EBAF70EC2 /* PFConstants.m */; }; + AD2E8FF8584E338AC854AD47224895B0 /* PFEventuallyQueue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CA572C4AE94CB9AC2FF8EE80A7E1179F /* PFEventuallyQueue_Private.h */; }; + ADD444672255653A7B0DE3C76FE9DA9B /* PFMutableUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A28796B1724F0F5B766249296CA182A /* PFMutableUserState.h */; }; + AE56E1589FBE716D4F7C22543A5A4C71 /* PFUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = 8072BEAB5E3DFBED370817399B610731 /* PFUserState.m */; }; + AFC728CC114630A6E88C55D3423F5B35 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 35568ABE019B8ED099EFF07CE242DD67 /* StoreKit.framework */; }; AFEBB8DD2F176DBEF3E1F0FFA6FE7AF8 /* POPCGUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0A9ED47A0EA56543BEB2F83DFD6122C8 /* POPCGUtils.mm */; }; - B0416CF20216A1C9A598CE958C8B2C47 /* PFObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = D639AB7043CB6DA1A6BE3D49D7D9368B /* PFObjectState.h */; }; - B1192665DC9C93F109D3D4A7C5F83F43 /* PFCommandCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F6D4D4C8E189ED660B99AFA5901A89BB /* PFCommandCache.m */; }; - B2AB6582389389DE491AB68BF28F7737 /* PFMultiProcessFileLockController.h in Headers */ = {isa = PBXBuildFile; fileRef = E8EEBAABE8D879BA98E6BDEB440DC3AF /* PFMultiProcessFileLockController.h */; }; - B3509517E43EB89AAEE0691907901C01 /* PFRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 891204204D388D19194E2B25AC4EC9CF /* PFRelationState.h */; }; - B43DAD49C7DB952A1671EEF20BD1727A /* PFRESTCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = F1597BC7BE1EC9A86FCCB75B11EAC04B /* PFRESTCommand.m */; }; - B47547A8DD4DBA73A1AE3C19B48D65FB /* PFObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 35F4C67236438881E09D5813BFA8BB6A /* PFObjectController.m */; }; - B586166AE0F8830D3720E2A1349D21FC /* PFUserConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = B745F5094B240A7BD83E4F246A86BBD8 /* PFUserConstants.m */; }; + B038216F0632C36A1370F7C881A09001 /* PFHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 869C2B98A84E7A66ED53252EEBD534C7 /* PFHTTPRequest.h */; }; + B07458C275E7B87DEAF687642BB4EDA2 /* PFObjectSubclassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DFA1FB737DEBE392F5582656ED1040B /* PFObjectSubclassInfo.m */; }; + B0CBDEF8AB0A74F25C79B87615C2A832 /* PFQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = B7C407A664499E7354D9C1CCDB113A59 /* PFQueryState.m */; }; + B1905D70D1237C127EBBFCC391721F35 /* PFPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA3D2B13C2E276A13164FD9D412F89D /* PFPin.m */; }; + B255A029FDCAB0B2E6F6B106AC5BBF91 /* PFTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F5D0107B7A3A38D5B48854CDBEA6CD3 /* PFTaskQueue.h */; }; + B3E990CB8A89D42E7E9F7ED33D39721F /* PFMutableRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 372FE1327079A6911530ABFAF7BF2E68 /* PFMutableRelationState.m */; }; + B4C1CDF486FF24005182DE7A7BD1DF95 /* PFInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = FF3D2A57C25C1CECF52F0872DBB55F05 /* PFInstallationController.h */; }; + B4EBD2930890E190BA160A6B52C9029E /* PFCommandCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 24E60B787A9F785262AC44B47108D70D /* PFCommandCache.m */; }; + B54F3FF3E7274202D9C8F1E4AAC09873 /* ParseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = FC0150E534DA14510CC9BC5D0C1AFFB3 /* ParseInternal.h */; }; B5B86F0561840C9F3408D9A3CE3BADD0 /* POPDecayAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = B0CE575CDDE0B1795BB8B88E0B49ACA0 /* POPDecayAnimationInternal.h */; }; - B6B00390A7F7EC4B3604C04E0C98F498 /* PFOfflineQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = BEA3D87AE012FEF7F6B48E6F0D5F09F7 /* PFOfflineQueryController.m */; }; + B5CFC6CC0CF004E986EEC23557FA0701 /* PFSubclassing.h in Headers */ = {isa = PBXBuildFile; fileRef = BCC77513019B8BF9A882928F74C52424 /* PFSubclassing.h */; }; + B62A1615577F1DF5C0987D382AFD154B /* PFObjectBatchController.h in Headers */ = {isa = PBXBuildFile; fileRef = 38C5CB3B26D08AF88F501A05B91F10B4 /* PFObjectBatchController.h */; }; + B642AE3024EF50F194A5BC047EECEB71 /* PFCurrentInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 009D766A60F44D81650E505380CF6EE5 /* PFCurrentInstallationController.h */; }; + B69E68EBE8B2C725353EEB0041CBDBF0 /* PFKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = BA733732E0D2D37C0A92D946DE2A9EEE /* PFKeychainStore.h */; }; B6DA545595D3CE47BC8F81E673889B4B /* UnitBezier.h in Headers */ = {isa = PBXBuildFile; fileRef = 96015F1C746803D9318614B277F71BCB /* UnitBezier.h */; }; - B701C1AB6D06324BC6CC23A5783F75ED /* PFInstallationIdentifierStore_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CC952D982119E3AE1061314E2B7C35D4 /* PFInstallationIdentifierStore_Private.h */; }; - B7944220338A46BC74DF8E3DB9895901 /* PFFieldOperationDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B8E6E53482F4B643407A15BA8B0F287 /* PFFieldOperationDecoder.h */; }; - B7AFE53318A19D6842F21C10377FF268 /* PFConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CC5D59716A7C77BE85C9B72C76F0A38 /* PFConstants.m */; }; - B88D88CD06342309AB76482FA60552B5 /* PFRESTFileCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AC5046C91AD0BF56975D1A7F382F946 /* PFRESTFileCommand.h */; }; - BA79DCD39D35E2EAAAF31A25A096902F /* PFPinningObjectStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D8851833E5439BBC098DCCB68455E8D8 /* PFPinningObjectStore.m */; }; + B7EAF0146BF7255844B4382778C1DCC3 /* PFMutableRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = ECE13A0CEBDF1FFEEF6A3A9D07298478 /* PFMutableRelationState.h */; }; + B87F4316CA745157952D0E957CEF8D0F /* PFMutableObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = D5CF558DFE9FECD0D4DAD9727F9E7447 /* PFMutableObjectState.m */; }; + B8B9F34E2BBC7F8F7715F6851457261E /* YALContextMenuCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 01D2ED1DF56FF3AE05B1515043302F71 /* YALContextMenuCell.h */; }; + BA1F5D0A6C8651ECC8F39A20205C2782 /* PFUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E8BFD8BC695971FCCBA291EDD68F350 /* PFUser.h */; }; + BA36862D7FCDDEF2FF3F44E4FCF1FEC7 /* PFMutableObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = B58A5A84AAAEBE1A391E99E9CAED0FF2 /* PFMutableObjectState.h */; }; + BA645FA6D6E0D66E9CF92B04F93777DD /* PFCommandRunningConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 48DF685D40431A00C7B7572D23340086 /* PFCommandRunningConstants.m */; }; BA9989C7128E968BA7D20CFEB392AE9D /* POPBasicAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 212068113F29FA47D17730ED388F8706 /* POPBasicAnimation.h */; }; - BD5FF8B5573BE7C19EA98B24C8F93F36 /* PFPropertyInfo_Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = 79D9D3FFDE344267236EECCAA6397DA3 /* PFPropertyInfo_Runtime.m */; }; + BAB47A67F4485EE6E586A25B834A2801 /* ParseModule.m in Sources */ = {isa = PBXBuildFile; fileRef = A011CA3F808702224552F151CBB37A51 /* ParseModule.m */; }; BD6626643DD9C3A12AB86F9361EC89DB /* POPAnimatorPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0476012CEBFEB22B5F0926994E6AEEE3 /* POPAnimatorPrivate.h */; }; - BE1697124F67485E93A628B7F078B922 /* PFThreadsafety.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BE848028E2C509A4FA316D19E795CD7 /* PFThreadsafety.m */; }; + BD7119081B9A134A53DCAD9949D575C4 /* PFSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C6969F6DC20ED490487711A80935900 /* PFSession.m */; }; + BE032518FE863AF44351DDE1D6844470 /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A5849314580BC3F82E4A799104E87FE3 /* Pods-dummy.m */; }; BE267A18590772AAA04953604BC7B310 /* POPAnimationExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = C1B6A53BFD919966B87CD6FBFD89CE1B /* POPAnimationExtras.h */; }; - BECF2F58F7E02B74509D304FFE07A644 /* PFQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 715B44864CC4816F9E241DBDAE6498CE /* PFQuery.h */; }; - BEFFE38E1E8C0426757AFD411F4ECC28 /* PFRESTObjectCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 106E039845795427C9E9FC7A626BF395 /* PFRESTObjectCommand.h */; }; - BFA580E3421FCBDA60EFC80446F5F827 /* PFOfflineQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = F11B5250697F6FBAF1331BF54A332420 /* PFOfflineQueryController.h */; }; - C1580926FB1C1390D09A615D658340EF /* PFSQLiteDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DFD8D064D883A41B1432E94742A1A879 /* PFSQLiteDatabase_Private.h */; }; - C1F432F11DB9BD57E3362B6957C1EF7C /* PFACLState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A666132F7688CB58789BC9FFAE5AB614 /* PFACLState_Private.h */; }; - C2D3FCAD9F82B00F0682B77F42C345B7 /* PFMutableRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 0524A1E79CBE55E8D0C538F4382D17B7 /* PFMutableRelationState.m */; }; - C302FB217081A69E712D54BBA15612FA /* PFConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F97CDDB1431E1D55E17DE205316A5B6 /* PFConfigController.h */; }; - C3534B5AFC24CDF4EEBD2E7455004776 /* PFCommandRunning.h in Headers */ = {isa = PBXBuildFile; fileRef = 39F8120161EADF847B985CB2751E4B2A /* PFCommandRunning.h */; }; - C3C2EA6FFF35A91DC79C6DCC8082FE95 /* PFAsyncTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = C0239D4A0C4788EB654381F621134ACB /* PFAsyncTaskQueue.h */; }; - C42E6522EF606545E8A2FAC0B86FA953 /* PFOfflineObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 76E34CF3E0809A86C3173F02A63233D2 /* PFOfflineObjectController.m */; }; - C4D1E4A8DF86647F268B2B3B5099E112 /* PFRESTPushCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 581264D483DB217A6F5ED83035A33E30 /* PFRESTPushCommand.m */; }; - C66CF47F117BB663AB5B1ADA991B0873 /* PFPushChannelsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B9C4FA9F02AD2C7B7F788126DA856F5 /* PFPushChannelsController.m */; }; - C75CBB06C3466C044296CB3A76C39124 /* PFCurrentUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CC4B1CA6C9A2DF20B2C8F69652BC62E /* PFCurrentUserController.h */; }; - C9A1866D93CA32DE4D93C03F83A9F935 /* PFObjectState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F3E10B801DC1EAB7C18648EA922D183 /* PFObjectState_Private.h */; }; - C9BA3DB96B743CFBE38D620BA1F21753 /* PFFileController.h in Headers */ = {isa = PBXBuildFile; fileRef = F92FD9C05C3DAFC2FDA01836F5F0516D /* PFFileController.h */; }; - C9D963064AA22F16470F6AF907BAEF1F /* PFGeoPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = CE510ACC52FD7B52F382F765AA7C38D6 /* PFGeoPoint.h */; }; - CA6F32BF249CC4F676BA2B2E1F0B2187 /* PFProduct.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E5AF4BFF040360310887AAACC8C323C /* PFProduct.m */; }; - CADB1639CC60E0010303A74644A2603B /* PFRESTObjectCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 099176EFCB8B1C379CDFD09F1B0290F4 /* PFRESTObjectCommand.m */; }; - CB2EF43804B9C179A60AF500104E4DE4 /* PFMultiProcessFileLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 2280179A3928340114FB48C1AF04368F /* PFMultiProcessFileLock.m */; }; - CB90858A2BAC0D76349EF1E1F8D62375 /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = B3814B9487A8A8F8F9A04F510A6B3AC5 /* BFCancellationTokenRegistration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - CC4D511200D693558A979423DD703DE3 /* PFObjectConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = C2884D9AD4EDF5B53F05C2631989A495 /* PFObjectConstants.h */; }; - CC8E8A57D3BBFA56A0E43A0E575B3953 /* PFAsyncTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 4220E05D6A608326E489CDA533392ED8 /* PFAsyncTaskQueue.m */; }; - CCFC440E3597BEDAC7796B03DE5A63CF /* PFInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = CFA6C4B46A860F2290E2C9F4AFAADFB9 /* PFInstallation.h */; }; - CCFCBBE62C9D209092C1A6C69BEBD2BB /* PFRESTObjectBatchCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C9C62664AD1CE0A3036EA774C72C69C /* PFRESTObjectBatchCommand.h */; }; - CD128BF4560D91E52D923A5E0800998D /* PFCloudCodeController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9142904B7E1F16BB09177E6409AF060F /* PFCloudCodeController.h */; }; - CDCD90E74BE99950B279D3B8A47CB748 /* PFBase64Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CD7A269A474E8BFCBF52EFC03BD796 /* PFBase64Encoder.h */; }; - CE5C3235213BC24CD1C18DF4054C62B9 /* PFURLSessionJSONDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ACFA0EE4D94D9AD3A656FFFB0D6DC16 /* PFURLSessionJSONDataTaskDelegate.h */; }; - CE7E600E6E370B6DEF0116643F7FD8DE /* PFFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A34F74808E75DF01FC097E2274D4116 /* PFFileManager.h */; }; - CF85BDB59935EB93ACFA51C5C530EDC1 /* PFLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F561B1D0F25670B287F11DE69B4A30C /* PFLogging.h */; }; - D0CFD3BCF7854439EBFFA50340677C48 /* PFPin.h in Headers */ = {isa = PBXBuildFile; fileRef = ED92DCF321683034F9F263E4083E6959 /* PFPin.h */; }; - D144A740430A65EA206B949452D309B9 /* PFConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F142A8509CC5040126EC51BDFDDE6E4 /* PFConstants.h */; }; - D2DC5F2DF23C18B8D3E71721F1CF8C54 /* PFObjectFileCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = E5331787DAA3B52CEE076DC2B62A6100 /* PFObjectFileCoder.m */; }; - D3AEE7BFCB370739A7466335493CBC36 /* PFBase64Encoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C38E6D6FFD2BE12F651C934B7BFCE1C /* PFBase64Encoder.m */; }; + BEDAE19BB304069C127DED5676C08866 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = A72A7753E28C0B037F3759A7CB7DC9CB /* UIProgressView+AFNetworking.m */; }; + BFA8D7680070FE36E35FDA31CD18B68A /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = BEAFE0D908EC855629B1121D957A354A /* ParseModule.h */; }; + C050B90E44F1D7D1B242336E9ED81E08 /* PFPropertyInfo_Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = 97ADB30A5976DC7FE832E68A415B22F8 /* PFPropertyInfo_Runtime.m */; }; + C0CD48B4F4A7ADE0E8F3763065D58B67 /* PFCommandCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A28218952E226A9395672AAF9BB98065 /* PFCommandCache_Private.h */; }; + C1570CA337867BEF23B4AC733E51D4B9 /* PFKeyValueCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E2E03FFA5C12908D09BC583858570B6 /* PFKeyValueCache.m */; }; + C22396DE37E095718482FAC4D8D796D1 /* PFHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A3138F383603A594BF1120840E69F93 /* PFHash.h */; }; + C2B622D57413084005AD4FF3FE3B4CBE /* PFFileController.m in Sources */ = {isa = PBXBuildFile; fileRef = 676C7A56F303C34B831F1F015F05812E /* PFFileController.m */; }; + C2E44B209546E7866532737094B259F1 /* PFObject+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = F0FF6176EC466320C2C4D25100A1B61E /* PFObject+Subclass.h */; }; + C35492542D744906958BA9387A6DEC2C /* PFPaymentTransactionObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 8510965E6696177882F8683FF279CA62 /* PFPaymentTransactionObserver.h */; }; + C44757A96D797254C3E4471D7DBC7A12 /* PFCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = BB51AB9AA27CE8D0A85E5690F23CF6EA /* PFCategoryLoader.h */; }; + C453240E137D151B7692C7F7F2061B9F /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AE87F34D52CD28E7113F03F7CEA01F06 /* Security.framework */; }; + C4CF94A0BBEAE79C88C879094C1FF6BB /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = 58143C3358B762BB4DC15795BD82B8B9 /* Bolts.h */; }; + C521D37D942FE201D29B17ED2BACAFE1 /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C8DC7559A9E804216A7455574ACC2FA /* AFHTTPRequestOperationManager.m */; }; + C5B8E5BD9C4C8E0AF430CD461992ACC0 /* PFPushController.m in Sources */ = {isa = PBXBuildFile; fileRef = B1E9EC0D78FBC6373DBD668B202BBA25 /* PFPushController.m */; }; + C68996C6D2A15E462A0B94666E1B17E3 /* PFQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D7ADA7673FDA922B924DB960BC45FEE /* PFQuery.h */; }; + C6C48576B6391837714FCEF3440243AE /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A16D1432732F853E3D7B39B1DB383E /* PFRESTConfigCommand.h */; }; + C6E0B8D8F68167D1CEA74DEAAE59F09A /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 5038524C4AA89B3EC607E5B47A706CCA /* BFTaskCompletionSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C7344A2F05279C90561EED1D8EA489CD /* PFOfflineStore.m in Sources */ = {isa = PBXBuildFile; fileRef = B0E75CCDD1A5217E3601BF092D5385C1 /* PFOfflineStore.m */; }; + C7DF7CFB90482868050B69FEF4373317 /* PFCloudCodeController.h in Headers */ = {isa = PBXBuildFile; fileRef = C1555BCE0D8C4B718BB72214683D3907 /* PFCloudCodeController.h */; }; + C8E94A5768C9FEEDEEBE2D9513D7BD36 /* PFOfflineStore.h in Headers */ = {isa = PBXBuildFile; fileRef = FF6B3C0F9FB537B2DB4C17A15E8F06D2 /* PFOfflineStore.h */; }; + C910FDABF6D86FF242B7CD5A85FE7B94 /* PFRESTObjectCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 5775915FCBF7CB8AB7E50C1474A500B5 /* PFRESTObjectCommand.m */; }; + C91D09FFB740401B045D4AECAC5C997E /* PFInstallationIdentifierStore_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 92C8318F0774CE0DB5B5FA3C7961C69F /* PFInstallationIdentifierStore_Private.h */; }; + CA9B7B7B520E355A2E23B0D0EB8302A9 /* UIAlertView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 70A550454DC97E123E16BD631BDAD95C /* UIAlertView+AFNetworking.h */; }; + CB4CF87BD5935737F20BDF0C99B80495 /* PFFieldOperationDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = BFBC36D6FED37ED769BA66522F1A639F /* PFFieldOperationDecoder.m */; }; + CBE51D66F657DC502B81442C46F7220B /* UIImage+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = E58FC77B8AC9BB8CB123B072D0E7AD2F /* UIImage+AFNetworking.h */; }; + CDCB55B6E5A8A71A543987CB14B2045E /* PFWeakValue.m in Sources */ = {isa = PBXBuildFile; fileRef = FFE3BF2FE5A767CB3A9F0B32672156AB /* PFWeakValue.m */; }; + CF7A23F2E61E57A9F6E76E358E956306 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + CF9126AE266CD109325E9779E8989D52 /* PFAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2A46AA281CDF574C18A7B9311A6C93 /* PFAlertView.h */; }; + CFDDEDCA97A5F84CDDD5A6F1BFFA2243 /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = 70864853E727E60E7B86865739D2ECED /* PFCloud.m */; }; + D149C0E66489B8A63BF8ED2BA213DF12 /* PFObjectFilePersistenceController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AA0E5427E9EFCC96AC0F8CED0FBEEF4 /* PFObjectFilePersistenceController.m */; }; + D1ED7907552DF919137E30AEDBAC4AD3 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = D0E74CB04A2E39384A95EDA3500A04D2 /* AFURLRequestSerialization.m */; }; + D22255492F43BE2B59EDB2478E8C5818 /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DBD87B92425DF4F2F580DDE78C400947 /* Bolts-dummy.m */; }; + D3D1A0ACF80E0131F85BDE9E7D7E6303 /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F53F9E343FFBC0260E05A6277C25495 /* AFHTTPSessionManager.h */; }; D4224969BAFBC6138FFC872CCC829FB9 /* POPDecayAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = B0F7BCEE9A871E1193D694931FA31E17 /* POPDecayAnimation.h */; }; - D441BA266DCA0FE4D2C6A3B18187A67C /* PFRESTCloudCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 80F676B2C080DCBC841173D2FC2CBA26 /* PFRESTCloudCommand.h */; }; - D458C6C955A5A584E1EE2532E6B6B9D9 /* PFRESTConfigCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A7FFA051B54FAFBAAF14E0C23C4641F /* PFRESTConfigCommand.m */; }; - D49D69813605DD09C1F06A6489EAD663 /* PFURLSessionCommandRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = FFE61F44A8E9B3147353EBFD396F02E7 /* PFURLSessionCommandRunner.m */; }; - D4D4DAA939A8A78C5FA6D96B5F7D72E9 /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 09E9F2F5DDCB3D2B60BDC018656F8355 /* BFCancellationToken.h */; }; + D4B06A600FA1DBCBB68ACFDE2E554753 /* PFSessionController.m in Sources */ = {isa = PBXBuildFile; fileRef = CF35E714DE566F845ECEDF6AE894C5F0 /* PFSessionController.m */; }; + D4F7F5F0D98F002042E4891CD1DBFD5C /* PFUserState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E5F89585BF738F0A58C77BC3BE1A932 /* PFUserState_Private.h */; }; + D56CAFD0B02331EB90CE5F19010B827A /* PFRESTObjectBatchCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D973AF50D37829E5A629A80ED88FF2E9 /* PFRESTObjectBatchCommand.h */; }; D5792E05DB34C9521294B06A622AE040 /* POPAnimationTracer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E88590D291A3C131FC32F9BC9A80038 /* POPAnimationTracer.h */; }; - D5F1B35353D67059C7894FA00393D39E /* PFFileDataStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E29EFCB546410074B97DF506ABC1C98 /* PFFileDataStream.h */; }; - D6A3E5E2F6450BBD8E30C39855291F74 /* PFMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B5234B11242385CB74EE42A5CBE16D9 /* PFMulticastDelegate.m */; }; - D79AA81B759F1A80248C34F631B03EFF /* PFCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 23EFBFB21E3A2659446F462A44152817 /* PFCategoryLoader.m */; }; - D7E97759E6C76BA2331C5D8D3A056ACB /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = BA75D0EC4C508481F47EA13B39766654 /* PFInternalUtils.h */; }; - D7EF8899052A30529A12811A433ABAF7 /* PFCoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = CEFF62A508184DE729502142858C6AAA /* PFCoreManager.h */; }; - D818EB5E41E22563226772A8E632B3DF /* PFOfflineQueryLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 529877D68CE76A3FBD3B683DAFF9EAE6 /* PFOfflineQueryLogic.m */; }; + D5859A1400F3FE968B0AFCC64C078904 /* PFGeoPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 57F2605E98764A7779B3213480606C71 /* PFGeoPoint.m */; }; + D79E5121E2F988A64AE071076264C201 /* PFRESTCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 36E7ABF06376C0698BE4B369C1255EAD /* PFRESTCommand.m */; }; + D7EC19C57A7BE418E80D9B4321310DD0 /* PFMutablePushState.h in Headers */ = {isa = PBXBuildFile; fileRef = B2586CEB4DB20E7AED5EBFD3FB96B973 /* PFMutablePushState.h */; }; + D801E515C96AD14143FED389A6D20831 /* PFCachedQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 893348B36B23CFF515B649DF3EA05962 /* PFCachedQueryController.h */; }; + D8077B11B5F174C1072201BB8D597B08 /* PFGeoPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = AE96E6223940CD70D6F01EA288192D93 /* PFGeoPoint.h */; }; D83868EA3920350C53488A4C4F9A5565 /* POPGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = 3155A15C877F794FB064A4A0CEEB2F13 /* POPGeometry.h */; }; - D8572431C5A5A56F48C334D79A6336AE /* PFFieldOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 11BAD4B729ACB9404D4D1110F4EAD454 /* PFFieldOperation.m */; }; - D8ADFE9ECE18ADF00E4078785FED3EE2 /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 110790F94C28E100B1086C0F8B7D1198 /* PFObjectFileCodingLogic.h */; }; - D8D1BDAC175C1556633F19CFD6D07A50 /* PFObject+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = 21D9F2D1230AD40B645828FF1CFD4506 /* PFObject+Subclass.h */; }; - D8FE5C4D33B6D32B89424C8F18E196AB /* PFMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFA78A3405997CEFE0F4A84B480089B /* PFMacros.h */; }; - D961D58817C2A1A8B99A49BFAA840CD0 /* PFMutableRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A09D1AC6A988D2BC0012D3F2027B90C /* PFMutableRelationState.h */; }; - D962D24A9373D05F95BA2407DE1A9A0C /* PFFileDataStream.m in Sources */ = {isa = PBXBuildFile; fileRef = BA7F7022FC278524B2BE48AD1759AF42 /* PFFileDataStream.m */; }; - DA7B999E1677271A6399FA19E28AE870 /* PFCoreDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CB00E16E736A73AA516D8A0FA5DB28E /* PFCoreDataProvider.h */; }; - DB40B6A7404E09FB143FA7A52D0CA736 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - DB68821A5DA330EC6DB71D568020FC26 /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = A69CE4C29C33C8B3AEC1E73E847A4197 /* PFDecoder.m */; }; + D9B2F24603C0F48EC73090BC6DC94FCE /* PFObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DC7D6BF37746831732BEE64A78E2E64 /* PFObjectState.m */; }; + D9B88BBFFE6342E41F3A86220B3B9410 /* PFCloudCodeController.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC012E8559514CD5FDA778785F7234B /* PFCloudCodeController.m */; }; + DBA301B469C007350C52449ADB7E4236 /* PFPurchaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 94DF16E2294CA8FEC9FD2ACF36D38638 /* PFPurchaseController.m */; }; DBEF60495B33D1BA4C7BA3C8E3A24968 /* POPSpringAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7371F16336283F2D8BB2A199CD4DDEF5 /* POPSpringAnimation.h */; }; - DC4DAB9ECA41D83DC8DC29AFE6BC73B9 /* Parse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5057A97EFDC884111C4A5829863ADD7C /* Parse.h */; }; - DCE8E177A147347F73E86C4065D60299 /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 71EFF9FFB238B21E016BDB85AA6333DD /* PFUser.m */; }; - DEBB00005BF92FA417EA2EB71432F063 /* PFCloudCodeController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8357F198915C0DBFE26D33A3CFD62A56 /* PFCloudCodeController.m */; }; - DF25C24556E3261B0B580E89B1080CDF /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D07F2F153FA1A7D77D68027DBF1AA33 /* PFAssert.h */; }; - DF40D05E8A808693AEAD061BC751E6D3 /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = D1F61BF57518F0154F82CEF764C0F35D /* PFGeoPointPrivate.h */; }; - DFC8670E99D9BA07E6F493DA68D12043 /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 875A9098C4D90F40AE3128DC006E1B98 /* PFURLSession_Private.h */; }; - DFD0235CD7EF6A677A5B0CC1DF6C9462 /* PFKeyValueCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B113FA8703C60024B8FBA20DFB21B744 /* PFKeyValueCache_Private.h */; }; + DC765E1CE8C9208AB476C0138BEA41BA /* PFOfflineObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = B024D2C96D819E81E5D194B562CA7CCF /* PFOfflineObjectController.h */; }; + DD0CF6B6282013FA4E3830D6EC0F409A /* ParseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD3D62A5F9D0B310DCF7C520D812B6F /* ParseManager.h */; }; + DD3558902E5E8D951999253854B2A573 /* PFDefaultACLController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1896BB3AD97D1E8CB9D17C6A982672DB /* PFDefaultACLController.m */; }; + DDC4E7634F0E7C723FF2EF86872FA1DA /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EC8E900100484763798A1C6338E9061 /* BFTaskCompletionSource.h */; }; + DE1227CB453C1C67BEDF44DC54EF1BAA /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A09F4FD4303453124FB9D4870DDE2F0C /* PFGeoPointPrivate.h */; }; + DE7E8446AB52346D9156DC34976D7342 /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = A3A5889AC5CCB95EF1C4DD6B7C5C930D /* PFUser.m */; }; + DEBBD76F7A9E5B75BF2732334FA25155 /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = FC9971E4E70ED25A33B370FAEA88A589 /* UIImageView+AFNetworking.m */; }; + DF153F159E0E2D991A092293D9A30CC1 /* PFCloud.h in Headers */ = {isa = PBXBuildFile; fileRef = EA79AC3D10A54A6115A06F836846E4EB /* PFCloud.h */; }; + DF425C7C6CA426D5CBB0ADB6A96871C7 /* PFPushChannelsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 89A3DB76DA1562634E50BB32E31C34F7 /* PFPushChannelsController.m */; }; + DF6048F6B377ED247B79AFCC8B69621E /* PFConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 72C04520515C92C01E90D8D58C97BA21 /* PFConfig.h */; }; E03238690A5A21C9B8ADCC9737633061 /* POPAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8336CCF2280C58E6C367DF4EC0EBB7B3 /* POPAnimation.mm */; }; - E0DF71DB6998FAE77D5C39BEB24AB41B /* PFJSONSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DBBD6C38E3D91712C6414D4224376D3 /* PFJSONSerialization.h */; }; - E1393DAFC2E3D6FD28C314E970FB2973 /* PFAnalytics_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EC28357CF9D94A9F2E49253D3A16AFCD /* PFAnalytics_Private.h */; }; - E1A22FDBCBBF2D241041F87458597FC3 /* PFPurchaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B311513624F9614FA7EBA34D397F337 /* PFPurchaseController.h */; }; - E20B8CE9522CBFCF2037DC756B7AAA26 /* PFAnalyticsUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = DD2E7D85EAE9D93FB3EB497EE098D0E2 /* PFAnalyticsUtilities.h */; }; - E4A07CA965878A2042A19A9ABE5A1D1C /* PFUserPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = BF198CCAD2E6C2AE39D8BF68464A93CB /* PFUserPrivate.h */; }; - E51943C1A9FF65B5EE048CBF4F395D9B /* PFSubclassing.h in Headers */ = {isa = PBXBuildFile; fileRef = 17A4E3B51919C1813C70CF9A41D08C64 /* PFSubclassing.h */; }; - E51AF1267A478883DFA384597EDDB15A /* PFURLSessionJSONDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 331907AED7D09788ACC2D6029AB2604F /* PFURLSessionJSONDataTaskDelegate.m */; }; - E51AFF71C5470CEAB47D6B501FA5C00E /* PFPushUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = D22939E9625B5D422EC6E479E7048771 /* PFPushUtilities.m */; }; - E5914E5A4EB68DFFFE65AB01ED44B155 /* PFDateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 68900F0E0EB2E31F6E0B59E6692F1C5E /* PFDateFormatter.m */; }; - E595F2FFEA2AB67264D93F0C8D1C22C3 /* PFUserFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E393C3F2BB10DF131AB02A295297B88 /* PFUserFileCodingLogic.h */; }; - E620DDB4910DB912EB504ED542FEB907 /* PFQueryUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = CB8189117D5A0D245487C3423D73727D /* PFQueryUtilities.m */; }; - E644B27DC71808C09CE53B8E0F3664E2 /* PFPushState.m in Sources */ = {isa = PBXBuildFile; fileRef = 82E29BC8D2B7929DF1755FF61A7965EE /* PFPushState.m */; }; - E662115101B5163A7982610F06468C1B /* PFMulticastDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 75EBF2C2BD6CA4EB5FC5249BB70052D3 /* PFMulticastDelegate.h */; }; - E665D2FFA8C5E2DF0CF41646F343BF20 /* PFAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = A6F717725F4394E95525ABAFB9F33DB2 /* PFAnalytics.m */; }; + E0377CE7F7C2101F3D5BE001EFCABE4D /* PFACL.h in Headers */ = {isa = PBXBuildFile; fileRef = B332CC51A8213F3EF1C7A3FE399A5C2B /* PFACL.h */; }; + E08EE32C93126D92DC9E6961789914E7 /* PFMutableFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 61308EBC3E3CCE6EB380B4761543AD72 /* PFMutableFileState.m */; }; + E0C01AA7CFB002785436D33521E5328D /* PFQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 291630B6FE4315F0B5B789D1ED22A66C /* PFQuery.m */; }; + E12A39C3E3423DE57BA268CB553E74DD /* PFObjectBatchController.m in Sources */ = {isa = PBXBuildFile; fileRef = 530ED4C4F72784908C56CECFABD0231C /* PFObjectBatchController.m */; }; + E19D243F4ACB365A65A5BA008694E4B6 /* PFEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 63F5E36EFB9403CA32B8B5C3A3F78855 /* PFEventuallyQueue.h */; }; + E219C58B408FA57BF94D5A4113C59B87 /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 98C44F60AA929307291A20DC790BFEB1 /* BFExecutor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + E22F49523078CB46DB077CBF54C73202 /* UIView+YALConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E4D88B0EC5CA12C799F9F3C05C0B31E /* UIView+YALConstraints.h */; }; + E23601D8BB9D0538FAD5F3DAF6251F76 /* PFNullability.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AEDEB7E9CE1E1D2795C43EFD540009 /* PFNullability.h */; }; + E28D3D6AE3281331EFE0B93FB91853F6 /* PFURLSessionCommandRunner.h in Headers */ = {isa = PBXBuildFile; fileRef = CDAC0B9AE144C31E2DE5AF0A4DB1EDC4 /* PFURLSessionCommandRunner.h */; }; + E2D8E1BB40962D1F2A8E7C8B179CBB3A /* PFReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE1F1F92C05B5ADE677C606485BB75F /* PFReachability.m */; }; + E32C0C8E76B2398A462F2F44466C88C1 /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 285AE108BCA0C7BACB4D927E8D1F8665 /* UIImageView+AFNetworking.h */; }; + E387EBB7F209061962244F91C82014E1 /* PFAnonymousAuthenticationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 898ECE478F3C854611287289F4977E11 /* PFAnonymousAuthenticationProvider.h */; }; + E4322DEF695907DD78455D334243FC86 /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 06588E20E049A2E98B815265D06086EE /* BFTask.h */; }; + E4A9466EF1DE5966768709FD1DEBC244 /* PFAnalyticsController.h in Headers */ = {isa = PBXBuildFile; fileRef = BF99C2FE0ABD09A876B4FDC3B73D693D /* PFAnalyticsController.h */; }; + E4AEC74A16A03117C42C961DF1C65848 /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E08E20DF9125F146349FA765648DCA3 /* UIWebView+AFNetworking.h */; }; + E4D2116E355F2C101B6DE6296544C3BC /* PFRESTObjectBatchCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 32D54A528AA2134A544108B4E124A617 /* PFRESTObjectBatchCommand.m */; }; + E518D12AF66FE6BF2AA57FCECF4C5C09 /* PFDefaultACLController.h in Headers */ = {isa = PBXBuildFile; fileRef = B65D4C06593414E001B75B30C7A68F64 /* PFDefaultACLController.h */; }; + E531951BF8A2CDC0A1865EF2CA115D46 /* PFPropertyInfo_Runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DD825DA40E92E93FAC2EA00807BF7D1 /* PFPropertyInfo_Runtime.h */; }; + E5831BEBB501CAE9B5B49F7C5BE1433C /* PFCommandURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D0DD7229B595E60BA7D6C2A41C4B6B /* PFCommandURLRequestConstructor.m */; }; + E5EB368969123151E92F49962A1A3FCB /* PFRole.h in Headers */ = {isa = PBXBuildFile; fileRef = 33CAFF9933F161C320331CCA71D23A5F /* PFRole.h */; }; E66A972C821119D091B99E54200F7FC0 /* POPAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 94815AA3EE3CBA04CEE85515701AD534 /* POPAnimator.h */; }; - E8433C7C8B26411E6E7290E579C83F4E /* PFRelation.h in Headers */ = {isa = PBXBuildFile; fileRef = 92FCC3E21D3E8790768C5AF6D196F8E6 /* PFRelation.h */; }; - E8C1875783064DFD43523A4C35575FA2 /* PFAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 06C655052162786B845146B0DB31017F /* PFAnalytics.h */; }; - E925E091713124195ED1CD1EC8573CA9 /* PFTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = B2CC06448183660D517225325BC1F93A /* PFTaskQueue.h */; }; - E927E067F38B0E8A9795FECEA9D9CD97 /* PFPaymentTransactionObserver_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F6E1EDFB3356D1F65A376DA74B16746D /* PFPaymentTransactionObserver_Private.h */; }; - E98C8B10EF19A9D5799C9CBDBE2C91BA /* PFProduct+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A66170B5CA1BBCF22487EEE33E21A6C /* PFProduct+Private.h */; }; - E9F5FCFDDFC1197D97AD06C4C14BA2E4 /* PFDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8637E5A58491F08A00BD27912794B7 /* PFDevice.m */; }; - EA1270889DC45F05BD5349952FEC10DE /* PFConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 71FB977D682D8E9A3C20EB5A8FA8D44B /* PFConfig.h */; }; - EAE0AA415A5361DD0541D5373560E0B4 /* PFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 4113ABD9B9640D41ADFF4F04A28AF0C7 /* PFObject.h */; }; + E743F3901CB2167FBBC28F2054A34421 /* PFCoreDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 7725DA2CCC4B05B3E8613121DAB013CB /* PFCoreDataProvider.h */; }; + E7E1B3EC902FD50B6643939B83B1E678 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + E8608D5E7A38E5A61282E3CF64502D18 /* PFURLSessionUploadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 347D5D631A6A12B0298E13B5415AEAAF /* PFURLSessionUploadTaskDelegate.h */; }; + E880F7F33114312DF66A4E88E617C825 /* PFURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CB47EA89DC2B49C7B2B12127098FB33 /* PFURLSession.h */; }; + EA2FD9A751EBAF09C8947C9BE65B8195 /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A69D20AEBC89B67DD33CA2CC54E309B /* AFURLResponseSerialization.h */; }; + EB8809FA99543F795F70FD6A9F457547 /* PFFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E745CDD44F448B0BB657E770CFDCF27C /* PFFileManager.m */; }; EB965B246F7206AE338A7DF882400A0E /* POPVector.h in Headers */ = {isa = PBXBuildFile; fileRef = D5CE48778301C24CD288B08DDA441605 /* POPVector.h */; }; + EBD7FD53C5DEA72FEB27FF599E88BC80 /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = 245BC03B9F6AB7B69A163206AF3C2C32 /* PFBaseState.m */; }; + EC1B42BDF93A2565BCCDE2A014286022 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = CFC48C77C63A582B14A5B098E6FCF482 /* PFURLSessionFileDownloadTaskDelegate.h */; }; ED0BF4FE2052871A5C209B796BA9D91E /* POPAnimator.mm in Sources */ = {isa = PBXBuildFile; fileRef = ECC48BF18D3BD01C21B65648709A45D6 /* POPAnimator.mm */; }; - ED3221AC0471FA6C715B09F71EF806A0 /* PFRESTUserCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = C3FEE284F1A3A64929DAC57EF28FBEA2 /* PFRESTUserCommand.m */; }; ED3821443DA3268139C3CE29A592C03C /* POPAction.h in Headers */ = {isa = PBXBuildFile; fileRef = F3A985A006B0CCD0116D8FC53C4D1834 /* POPAction.h */; }; - ED53A85BF245B2C2031C3ED8ADE3BC69 /* PFInstallationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2515044ACEA23C32AC39FC89A3A0F6E0 /* PFInstallationPrivate.h */; }; - ED7A547801E2CF226D168EE9581DB321 /* PFAnonymousAuthenticationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A3CFC6CFCF3EBBA16C7CCEB59F009AD /* PFAnonymousAuthenticationProvider.m */; }; - EDFEBA20ACE8D9590AAE42ECCDC1E07C /* PFPin.m in Sources */ = {isa = PBXBuildFile; fileRef = B431D27F0705F097E581263224EF8C88 /* PFPin.m */; }; - EE20B2B23083B041332BC3C78D75FFCA /* PFMutableObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E5B06286F6DFAD5DAED57C3E9C5400B /* PFMutableObjectState.h */; }; - EFF59F0F5823C5E0AF46C1B33EEDFB7B /* PFRESTFileCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = A39433C5B2CFE6011222CBB72F0EAE5C /* PFRESTFileCommand.m */; }; - F0F3981F5CFA9D5FEE36528C4F57BE46 /* PFObjectSubclassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = E3ED5AFB7A3B2DC03C1D116039A73C3C /* PFObjectSubclassInfo.h */; }; - F178A1C8334EE76BE6CE0AF09483BECA /* PFSessionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 56D3E21616E0654B5CFD38290C9213A9 /* PFSessionController.m */; }; + EDCC71FC92D40B3862592FF1F64D9F22 /* PFMutableACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = 82B2F774B2C3F6B000F7B323A1E51571 /* PFMutableACLState.m */; }; + EE2A8C0E8B415EC8E006AC7B1F243C65 /* PFObjectSubclassingController.h in Headers */ = {isa = PBXBuildFile; fileRef = CDE463E6B9D1AF8E6AE850CD5E68849F /* PFObjectSubclassingController.h */; }; + EEB02FC19C729B08DC6E52A58694A62E /* PFAnonymousUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 36B65B247D65EE46D2A8F3ACDC87870F /* PFAnonymousUtils.h */; }; + EEC3CE2CB2428CE7EEAF37BF2E0187AF /* PFSQLiteDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = DE2DE7B62241FC17A59B0C930D7837B4 /* PFSQLiteDatabase.h */; }; + EED1C92E54E432794307DC75AF87EE82 /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 994A5F73DF6BF6840DED92DDE2C12AC6 /* AFHTTPRequestOperation.m */; }; + EF0657162B6D12AB703D83918C3B36F9 /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 27E3589A502DA67E5F75BFDD5AB13E57 /* BFCancellationTokenSource.h */; }; + EFAE8EEDB4F6537B805A0D3FC7F794E5 /* PFRelationState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EF64AAF633AE4BDB30247D6A4090B89C /* PFRelationState_Private.h */; }; + EFCAC58E3F3A4442F400FFC8626AD9B9 /* PFSessionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B493332AF25497985B3420336C8E310 /* PFSessionController.h */; }; + F072D26ABA5162A0D5B098FC2773092E /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AE87F34D52CD28E7113F03F7CEA01F06 /* Security.framework */; }; + F085F0D853691CCA544D3D2152B34018 /* PFFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = FF3530F7B69DD859647B6416F1A85C73 /* PFFileState.h */; }; + F0B1181F18792D478147E3051A915EB6 /* PFAsyncTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 663C1A74DA7B1A684C31157464DF2CC6 /* PFAsyncTaskQueue.m */; }; + F120A50FD7FCA9658BBBDBA65EA9B1E2 /* PFUserFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = A2BD31107881F3881ADCD378256D4B02 /* PFUserFileCodingLogic.h */; }; F1869B0A07F843009A3268A12F2F96CF /* POPBasicAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F59C51782AE555897A5B92D6B3CECD1 /* POPBasicAnimationInternal.h */; }; - F1893CC2C1C931703396D917026576E8 /* PFMutableACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = F05547667B76C441755A476C0996B67A /* PFMutableACLState.m */; }; + F2CCD104B91461CC1548C32C003353FD /* PFObjectFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 71E77E05CC2CDD5B79D7552C17004EFB /* PFObjectFileCodingLogic.m */; }; + F2D9EF32073176AC4B9F935577A44456 /* PFPaymentTransactionObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 76B1F1A7DACF8124FD67EEFFB88526F1 /* PFPaymentTransactionObserver.m */; }; F353B70A061E08623279B54744E15DA7 /* POPAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = ED596D85957A49EC6092EC8EC38FCE49 /* POPAnimationInternal.h */; }; F388B7C3B4B0325048D4B5E4C1BAF904 /* POPAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 14938EB08280063D294781C3164C8332 /* POPAnimation.h */; }; - F39072DEE0911AC516A6A0E2312E43FF /* PFURLSessionUploadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 484F5D6426BF8586F7203DC9DE6690A1 /* PFURLSessionUploadTaskDelegate.m */; }; + F39244CD95764B7D0C035FE193512606 /* PFFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 59143BC1CCA767489CC63EC79299C132 /* PFFile.m */; }; + F394B0E3DFFC7734AB5051D1A5F4D68F /* PFUserAuthenticationController.h in Headers */ = {isa = PBXBuildFile; fileRef = BB019CE2BDFE6EC36FCD9993DB744EFA /* PFUserAuthenticationController.h */; }; F3A5D609595883FAB0550B75A0237C58 /* POPMath.mm in Sources */ = {isa = PBXBuildFile; fileRef = A19FD133843D5FCF16B8AF3B4E165515 /* POPMath.mm */; }; - F3EB191FFE3A408094DE22C5702866C7 /* PFURLSessionCommandRunner.h in Headers */ = {isa = PBXBuildFile; fileRef = C6930DD80530DC03DCEC33CA1BE24BE7 /* PFURLSessionCommandRunner.h */; }; - F406237401551FF73ED1D6F46B9613FD /* PFInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = E6EC9018A6A5F9DC5F956E06A0A1DA5D /* PFInstallationController.h */; }; - F425727E94B1F6A5753C672782668DA5 /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 03BFBD31F2922FEFEDBE273BF9244C02 /* BFTask.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - F4922902A8496B92175E98875B1E43EE /* PFRESTCommand_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D52AB7265F316C1F4B4C5881D8EA52DC /* PFRESTCommand_Private.h */; }; + F3C1136C8D88E18B962C1C4AF612B3B3 /* PFRESTConfigCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F519C682C4E52952D376F5423040E5B /* PFRESTConfigCommand.m */; }; + F3DDD9A3039C1313F12C2A248576DD56 /* Parse.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A880B37F4F90E6B3CCA1B3FAD582B81 /* Parse.m */; }; + F412A6DC753D4FF45CA2663718823E3C /* AFURLConnectionOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A9EB6D7E4926B7E034816F709F1F518 /* AFURLConnectionOperation.h */; }; F50CFC840B1B486D290EF5656C3AB5A4 /* TransformationMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 35574BADA6CDEA944F089CBC021F01AA /* TransformationMatrix.cpp */; }; - F67601BBBF33AFD98C62783D944447E7 /* PFMutableQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = A5C0755A44D6605CF4BE2DFE2EDE1D86 /* PFMutableQueryState.m */; }; - F6D940BA794B0671DA54F656020B4724 /* PFLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DD2128030F8E23F9B1C6141659F3B8C /* PFLocationManager.m */; }; - F752BA3F9DFCB0CFF12254ED534F812E /* PFPushController.h in Headers */ = {isa = PBXBuildFile; fileRef = DC04CA70DD902C38FD430C17D4244E92 /* PFPushController.h */; }; - F8CBAB6E6152105BE58195EABC8F3759 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 24A36B9D634B60BD2A1CAC408B8226A3 /* PFURLSessionFileDownloadTaskDelegate.h */; }; - F900480B0F50E907D9223FB00D113C81 /* PFURLSessionCommandRunner_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FCE60212A5F1B30DB0FA50C2C7FCBE17 /* PFURLSessionCommandRunner_Private.h */; }; + F5189CA8C80BB857AE36C733A89A5DC8 /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 860D58AD9C905EA188BEF7C2C8B3B2E4 /* PFQueryController.h */; }; + F5A533001D5694222A42A7E5733F70D7 /* PFRESTSessionCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = C5FE3CDD5FB245BC2913E868E9DE3995 /* PFRESTSessionCommand.h */; }; + F5D54F9BEFE298257F9134EA893B5C8D /* PFFieldOperationDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = D93333F49B10A154028722630A69414C /* PFFieldOperationDecoder.h */; }; + F6C4B0AB4C5CC75A89E9E082659B1181 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A2C302E4C6109CA0666CE25D782C9766 /* AFNetworkReachabilityManager.m */; }; + F8A080400150D1AC42F6C531CAB577D2 /* PFCurrentInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = E2F89C1AC67968BA35BD1123BE34D894 /* PFCurrentInstallationController.m */; }; + F947354D06D4DB18853AD81F00869ED3 /* PFLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = C124801645AB37C7712D483A5C87D83D /* PFLogger.m */; }; F9627C89FA11AC0378E77DF8EF1535FF /* POPAnimationTracer.mm in Sources */ = {isa = PBXBuildFile; fileRef = C1E27C3CBB149C1873F6CDC55D998CE2 /* POPAnimationTracer.mm */; }; - F97952FC246CFA2BD4D966B5559A56C8 /* PFCurrentConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 09D61EB0980687ECD7D678DA7465F846 /* PFCurrentConfigController.h */; }; - F9AF286C68FB0128D9E7F6BC6B633B21 /* PFBaseState.h in Headers */ = {isa = PBXBuildFile; fileRef = 2980A00A9C6B5DB5973D0870C4343CDF /* PFBaseState.h */; }; - FB133DC3F020B283A9C68C69221C4554 /* PFObjectLocalIdStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DE629D21A679A60A0F64440A0BAC324 /* PFObjectLocalIdStore.m */; }; - FB7AC681EC198DEB192BC63B632C175A /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = A9B5F4ADDFA617FF96FED75084262625 /* PFConfig.m */; }; - FC42B8D37F5C4C8274AE7BB705E67D04 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2AD64A1E39EF0EC17E66E7C8C765930 /* QuartzCore.framework */; }; - FC64B5EF6BA6F7E5F55223FB81992454 /* PFInstallationIdentifierStore.m in Sources */ = {isa = PBXBuildFile; fileRef = A266244911A0F90CFC3A6FF419F3140D /* PFInstallationIdentifierStore.m */; }; - FCDD1AECC17F3CDC339C3C5DD388C7F0 /* PFConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 750C23383E751070C38083B3DDED458E /* PFConfig_Private.h */; }; - FF543356567A2076067A44509DE5A382 /* BFTask+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 86B138E9858EDFEBAA891920A773BB74 /* BFTask+Private.h */; }; - FF6DC72BA5C030A41082FBB3A9214E57 /* PFKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 71AF2ED13A3973592E31F7D47D5D90F0 /* PFKeychainStore.h */; }; - FF8769831CEEAC994C0278991436D422 /* PFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4897F88BB4A784CD6F1DFE74C498732A /* PFNetworkActivityIndicatorManager.m */; }; - FF964C55BB9F3A9A6B4DAD0FBC56AACA /* PFCurrentUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = CA74286D523103A7357250A458466DC3 /* PFCurrentUserController.m */; }; - FFF2129425021FE43AAA3D726791994A /* PFNullability.h in Headers */ = {isa = PBXBuildFile; fileRef = 77C22DDD172F2AE628D146B1BD68824A /* PFNullability.h */; }; + F965B0BA7C7E070E515C1ED0343E68A3 /* PFMultiProcessFileLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 7388AF1F66A03C223B0DA9338F552A19 /* PFMultiProcessFileLock.m */; }; + FA534A151F3B55AB2E7EA80B4C522BB0 /* PFProductsRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 529C0DC5511102F293AAA76310789551 /* PFProductsRequestHandler.h */; }; + FA8549933F4A9D5FC6E695B2C00C484E /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E6F16A936B103DF9237ED50EBF4D8631 /* AFURLConnectionOperation.m */; }; + FB0A5366764317E476526B1CCA42EB4C /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FE2EB61A95016598E72642BFBCBADBE /* AFNetworking.h */; }; + FB2E5E78E63B5474E21182AC6AB7AE38 /* PFSQLiteDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EAF2A823E92A730EC588801D943C514 /* PFSQLiteDatabase.m */; }; + FB4C49FBC327F28CB47026B0E290BE1A /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 450938391ACE611C45583A2F6117FD6D /* PFURLSession_Private.h */; }; + FBB9982DF9350395B60873C7EBC35687 /* PFKeyValueCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 245FF007BEF549EF81D7E0222214C303 /* PFKeyValueCache.h */; }; + FBE5198936C677351A1994966CFB0E0E /* PFRESTUserCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 60F954C2BD5989BD4626F5C1F5BCC48A /* PFRESTUserCommand.h */; }; + FC1C0CA9220FCDE5447A43920AB3960F /* BFDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 73E9B12D704E302D9DAC9FDE4C8D60AC /* BFDefines.h */; }; + FC49E18E4DE9E4CEA0E8144D55F407A7 /* PFHTTPURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 62078C4D93D4BF5CF7430EF680857264 /* PFHTTPURLRequestConstructor.m */; }; + FDE3635ACA000137F91099FB8A77B904 /* PFSessionUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 15DCE6DD786D364DDA4BCAD1F24895FD /* PFSessionUtilities.h */; }; + FF06683CECBB72CC198613D50C833E94 /* BFTask+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B26ED3E1774D8AF7C7968032E48D8AD /* BFTask+Private.h */; }; + FFDEE01AE0207886F8D70AA02F184FB3 /* PFRESTPushCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = A89E8441EF384E751C66846D8C7DA140 /* PFRESTPushCommand.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 0E31099F1DACDF2E2DCE828E4EED3984 /* PBXContainerItemProxy */ = { + 103117E18087B3EEC84D8F67EA532CD6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = E1F0B29D8C274D3B4A2566B0DFA6A902; - remoteInfo = Bolts; + remoteGlobalIDString = 47C800E42623009B7192B025B3DD25A1; + remoteInfo = pop; }; - 384587FE181EB87FB186E5EABAF2646A /* PBXContainerItemProxy */ = { + 11F61E646F82C7A3027EAFA6F2C283CA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 47C800E42623009B7192B025B3DD25A1; - remoteInfo = pop; + remoteGlobalIDString = 7D5B41A236FF14B6B02D4BAF6C4A690A; + remoteInfo = ContextMenu.iOS; + }; + 58FD68CA85B5E72697502824B988F051 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = F7D0346E5B3C07CA2678B48D1D1BD750; + remoteInfo = Parse; }; - A456FA0F15BA9B2536652B1701BAF644 /* PBXContainerItemProxy */ = { + 5990CF4195D3965C7E2B2A3208652783 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = E1F0B29D8C274D3B4A2566B0DFA6A902; + remoteGlobalIDString = 39991CD032545E130997094168EF96E2; + remoteInfo = AFNetworking; + }; + 898759E58BADE0E9FBFA1E66E38F8039 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 9D8311DD3E0DA85313EF9710C8614AD8; remoteInfo = Bolts; }; - AACED10EAE78F8427CE29A9FEE769081 /* PBXContainerItemProxy */ = { + A350E8606E02ACFA8AA6C838EE4FDE3D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = E2B6A7F9ABCCE48BC851C4EAE332D8FB; - remoteInfo = Parse; + remoteGlobalIDString = 9D8311DD3E0DA85313EF9710C8614AD8; + remoteInfo = Bolts; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 00835672E9411A4D0F46362CD9FC93C9 /* PFMutableObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableObjectState.m; path = Parse/Internal/Object/State/PFMutableObjectState.m; sourceTree = ""; }; - 00AC73B1D5A77DE4B493A990018DA825 /* PFCurrentConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentConfigController.m; path = Parse/Internal/Config/Controller/PFCurrentConfigController.m; sourceTree = ""; }; - 02ADA053F55CC3D3354BB334C196EA78 /* PFInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallation.m; path = Parse/PFInstallation.m; sourceTree = ""; }; - 03BFBD31F2922FEFEDBE273BF9244C02 /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; + 007D017430CAD14C507E4E16894E1ED8 /* PFSQLiteStatement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteStatement.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h; sourceTree = ""; }; + 009D766A60F44D81650E505380CF6EE5 /* PFCurrentInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentInstallationController.h; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h; sourceTree = ""; }; + 016F2569F5E0DA62E089B095D3A04E84 /* PFMulticastDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMulticastDelegate.h; path = Parse/Internal/PFMulticastDelegate.h; sourceTree = ""; }; + 01D2ED1DF56FF3AE05B1515043302F71 /* YALContextMenuCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YALContextMenuCell.h; path = YALContextMenu/YALContextMenuCell.h; sourceTree = ""; }; + 022CFAB7CC0CBD47E0AC47A4EC57B983 /* PFHTTPURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPURLRequestConstructor.h; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h; sourceTree = ""; }; + 033DE2F20554C4483F70BB66112A660D /* PFCoreManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCoreManager.m; path = Parse/Internal/PFCoreManager.m; sourceTree = ""; }; + 036A8C9E0C46D47ECECB6E33E53B2BEF /* Bolts.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.xcconfig; sourceTree = ""; }; 0476012CEBFEB22B5F0926994E6AEEE3 /* POPAnimatorPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimatorPrivate.h; path = pop/POPAnimatorPrivate.h; sourceTree = ""; }; - 050B2D7FC8433528EE96A73D6084FDCA /* PFThreadsafety.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFThreadsafety.h; path = Parse/Internal/ThreadSafety/PFThreadsafety.h; sourceTree = ""; }; - 0524A1E79CBE55E8D0C538F4382D17B7 /* PFMutableRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableRelationState.m; path = Parse/Internal/Relation/State/PFMutableRelationState.m; sourceTree = ""; }; - 06A34F6AE5214388ED772768B1AED0E1 /* PFEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyQueue.m; path = Parse/Internal/PFEventuallyQueue.m; sourceTree = ""; }; - 06C655052162786B845146B0DB31017F /* PFAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics.h; path = Parse/PFAnalytics.h; sourceTree = ""; }; - 078642F5D1917B58A6998424887BD706 /* PFWeakValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFWeakValue.h; path = Parse/Internal/PFWeakValue.h; sourceTree = ""; }; - 07A4A542A64193B1380E5346BCEBD316 /* PFObjectFilePersistenceController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFilePersistenceController.h; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h; sourceTree = ""; }; - 099176EFCB8B1C379CDFD09F1B0290F4 /* PFRESTObjectCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectCommand.m; path = Parse/Internal/Commands/PFRESTObjectCommand.m; sourceTree = ""; }; - 09D61EB0980687ECD7D678DA7465F846 /* PFCurrentConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentConfigController.h; path = Parse/Internal/Config/Controller/PFCurrentConfigController.h; sourceTree = ""; }; - 09E9F2F5DDCB3D2B60BDC018656F8355 /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; + 06588E20E049A2E98B815265D06086EE /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; + 06BDEA785CD1CCF3EC5F7D97641DB94B /* PFACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACLState.m; path = Parse/Internal/ACL/State/PFACLState.m; sourceTree = ""; }; + 075D17B28FD88D19723BDD0F7C7ACF85 /* PFURLSessionCommandRunner.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionCommandRunner.m; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m; sourceTree = ""; }; + 07A16D1432732F853E3D7B39B1DB383E /* PFRESTConfigCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTConfigCommand.h; path = Parse/Internal/Commands/PFRESTConfigCommand.h; sourceTree = ""; }; + 0823AECF540B112CC0DD23CA1EB33F1E /* PFDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDevice.m; path = Parse/Internal/PFDevice.m; sourceTree = ""; }; + 0854CFF4AC229E21A7EC471BB9EAC43F /* PFFile_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile_Private.h; path = Parse/Internal/File/PFFile_Private.h; sourceTree = ""; }; + 0862542F3708CEA8901318AE4F5FE02B /* PFOfflineQueryLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryLogic.m; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m; sourceTree = ""; }; + 08DB18CB20934926437D11F21D1D9B8E /* PFUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserController.h; path = Parse/Internal/User/Controller/PFUserController.h; sourceTree = ""; }; + 0931322359A8E70F6F16FED5F97879E5 /* PFLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogging.h; path = Parse/Internal/PFLogging.h; sourceTree = ""; }; 0A9ED47A0EA56543BEB2F83DFD6122C8 /* POPCGUtils.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPCGUtils.mm; path = pop/POPCGUtils.mm; sourceTree = ""; }; - 0B1F17F7CC5A76F9BE1ABD011A8AB9C7 /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; - 0B782D4B8E3CF13324D674E51D4AA45A /* PFCloud.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloud.m; path = Parse/PFCloud.m; sourceTree = ""; }; - 0C10587D5F82F53DEA74DF5129DD7312 /* PFMultiProcessFileLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLock.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h; sourceTree = ""; }; - 0CC5D59716A7C77BE85C9B72C76F0A38 /* PFConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConstants.m; path = Parse/PFConstants.m; sourceTree = ""; }; - 0D29BD0D675C84B8C7EF1F88FD36417D /* PFURLSessionFileDownloadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionFileDownloadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m; sourceTree = ""; }; - 0D322CC5914ECCF1403B38B9F1A7597F /* PFHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHash.m; path = Parse/Internal/PFHash.m; sourceTree = ""; }; - 0DD193A7608BB519CE6B1B91AE25E86C /* PFRole.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRole.m; path = Parse/PFRole.m; sourceTree = ""; }; - 1018BFE57D5EDCC0B72E6A255BEC0971 /* PFFileManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileManager.m; path = Parse/Internal/PFFileManager.m; sourceTree = ""; }; - 106E039845795427C9E9FC7A626BF395 /* PFRESTObjectCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectCommand.h; path = Parse/Internal/Commands/PFRESTObjectCommand.h; sourceTree = ""; }; - 110790F94C28E100B1086C0F8B7D1198 /* PFObjectFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCodingLogic.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h; sourceTree = ""; }; - 110F3B75E3D3EC4A08CEBF6AC5B01CE0 /* PFPushPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushPrivate.h; path = Parse/Internal/Push/PFPushPrivate.h; sourceTree = ""; }; - 1146110AA563CDAFA693A1B073292A1E /* PFObjectPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectPrivate.h; path = Parse/Internal/Object/PFObjectPrivate.h; sourceTree = ""; }; - 11BAD4B729ACB9404D4D1110F4EAD454 /* PFFieldOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperation.m; path = Parse/Internal/FieldOperation/PFFieldOperation.m; sourceTree = ""; }; - 12C95F161EE734C3016E891E9C306A42 /* PFSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSession.m; path = Parse/PFSession.m; sourceTree = ""; }; - 132074912F44DB77C37332C4CA8A3DAB /* PFInternalUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInternalUtils.m; path = Parse/Internal/PFInternalUtils.m; sourceTree = ""; }; - 132B11DB4450BB2DC8926A20B853B6AD /* PFRESTQueryCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTQueryCommand.m; path = Parse/Internal/Commands/PFRESTQueryCommand.m; sourceTree = ""; }; + 0B072562DD642F896CD3C3B7CEF2911B /* PFCommandRunning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunning.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.m; sourceTree = ""; }; + 0B19A6DDEB20A310104A97E0953192B8 /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; + 0BC40E8FF522D488100477128A373255 /* PFPinningEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningEventuallyQueue.m; path = Parse/Internal/PFPinningEventuallyQueue.m; sourceTree = ""; }; + 0D2C0E09440F10C2834146B969AD0950 /* PFCurrentUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentUserController.h; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.h; sourceTree = ""; }; + 0D7ADA7673FDA922B924DB960BC45FEE /* PFQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQuery.h; path = Parse/PFQuery.h; sourceTree = ""; }; + 0D7C31A8D9DC68245949CD79BD5AD586 /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; + 0DBB0CAB75C437C618EEBFAF8F62A947 /* PFMutablePushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutablePushState.m; path = Parse/Internal/Push/State/PFMutablePushState.m; sourceTree = ""; }; + 0E1148A11007AFF78ABDECD376185D39 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; }; + 0E374390CBBC0449CF5CC0A1C32EE8C5 /* PFTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTaskQueue.m; path = Parse/Internal/PFTaskQueue.m; sourceTree = ""; }; + 0E8BFD8BC695971FCCBA291EDD68F350 /* PFUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUser.h; path = Parse/PFUser.h; sourceTree = ""; }; + 0EDD645EA043AC01BD2D294C8E25D7C9 /* PFCommandRunningConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunningConstants.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h; sourceTree = ""; }; + 0F1D200E550A12E3F43CD3F31E131DBE /* PFCommandRunning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunning.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.h; sourceTree = ""; }; + 0F53F9E343FFBC0260E05A6277C25495 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; + 0F7453E990BF208758602D5B39CB7388 /* PFPushController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushController.h; path = Parse/Internal/Push/Controller/PFPushController.h; sourceTree = ""; }; + 0FE1708AB969B7C864FA6A717B2332A5 /* PFCoreManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreManager.h; path = Parse/Internal/PFCoreManager.h; sourceTree = ""; }; + 105DFF60164FDC71E3359B156DAE0937 /* PFRESTCloudCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCloudCommand.m; path = Parse/Internal/Commands/PFRESTCloudCommand.m; sourceTree = ""; }; + 10C1CF41ACFAC3F0E71569AE1A84C121 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = Parse/Resources/en.lproj; sourceTree = ""; }; + 12BB94C26636A7E690216E2AEEFAF264 /* Parse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse.h; path = Parse/Parse.h; sourceTree = ""; }; 134BDC30251FB7A5465C17F603FCAC5F /* POPPropertyAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPPropertyAnimationInternal.h; path = pop/POPPropertyAnimationInternal.h; sourceTree = ""; }; - 13AAF6B43993D5DCA1ABA1E0C06822F9 /* PFUserAuthenticationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationController.h; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h; sourceTree = ""; }; - 14906790E82B81D5B68B2258E95425B4 /* pop.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = pop.xcconfig; sourceTree = ""; }; + 13D7A1D1A9F6D9020B6E721D5D4D5730 /* PFSQLiteDatabaseResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseResult.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m; sourceTree = ""; }; 14938EB08280063D294781C3164C8332 /* POPAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimation.h; path = pop/POPAnimation.h; sourceTree = ""; }; + 14BFF77A40EB6D31D0D53D242A01BED0 /* PFDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDevice.h; path = Parse/Internal/PFDevice.h; sourceTree = ""; }; 15A529C27057E4A57D259CBC6E6CE49C /* Pods-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-acknowledgements.markdown"; sourceTree = ""; }; - 15C0132F3858BCC88CB28061A960F0D1 /* PFPinningEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningEventuallyQueue.h; path = Parse/Internal/PFPinningEventuallyQueue.h; sourceTree = ""; }; - 177ECEF6166CB8A176CA4C377BFFD54B /* PFRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelationState.m; path = Parse/Internal/Relation/State/PFRelationState.m; sourceTree = ""; }; - 17A4E3B51919C1813C70CF9A41D08C64 /* PFSubclassing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSubclassing.h; path = Parse/PFSubclassing.h; sourceTree = ""; }; - 17A73E112537B17232FB3245923658EF /* PFRESTSessionCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTSessionCommand.m; path = Parse/Internal/Commands/PFRESTSessionCommand.m; sourceTree = ""; }; - 17C4E65BFD7461A5C5B88B9650622AFA /* PFCommandCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache_Private.h; path = Parse/Internal/PFCommandCache_Private.h; sourceTree = ""; }; - 18EE5011502D312C68238751D67BA76A /* PFSQLiteDatabaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseController.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m; sourceTree = ""; }; + 15DCE6DD786D364DDA4BCAD1F24895FD /* PFSessionUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionUtilities.h; path = Parse/Internal/Session/Utilities/PFSessionUtilities.h; sourceTree = ""; }; + 1896BB3AD97D1E8CB9D17C6A982672DB /* PFDefaultACLController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDefaultACLController.m; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m; sourceTree = ""; }; + 189B90A77BD5596205FB77D8F7DBBC66 /* PFPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPin.h; path = Parse/Internal/LocalDataStore/Pin/PFPin.h; sourceTree = ""; }; + 18D7C9B8DD8A89571437499374A39984 /* PFConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig_Private.h; path = Parse/Internal/Config/PFConfig_Private.h; sourceTree = ""; }; + 196698284757A108BD18D4EFC0D470B2 /* PFObjectFileCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCoder.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.m; sourceTree = ""; }; 197635F0BFB93E63E82503F09B7AABBF /* POPLayerExtras.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPLayerExtras.mm; path = pop/POPLayerExtras.mm; sourceTree = ""; }; - 1A90C53A523B75F828B57C0D0368595B /* PFAnalyticsUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsUtilities.m; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m; sourceTree = ""; }; - 1AD6E87805E310F6517D29CDFEEE9587 /* PFFieldOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperation.h; path = Parse/Internal/FieldOperation/PFFieldOperation.h; sourceTree = ""; }; - 1AF8F0B7303C117779BBEBE048717710 /* PFFileState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState_Private.h; path = Parse/Internal/File/State/PFFileState_Private.h; sourceTree = ""; }; - 1B4CDA57AC000136EA5B434611EF0426 /* PFURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h; sourceTree = ""; }; - 1C7CE32C1AC8296CA307938E551C3B91 /* PFCommandRunningConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunningConstants.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m; sourceTree = ""; }; - 1D07F2F153FA1A7D77D68027DBF1AA33 /* PFAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAssert.h; path = Parse/Internal/PFAssert.h; sourceTree = ""; }; - 1D3CEE52CB984D4C4DB6A4F7A4903BBC /* PFRESTPushCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTPushCommand.h; path = Parse/Internal/Commands/PFRESTPushCommand.h; sourceTree = ""; }; - 1FA17927867D6B7D6DADCC59515AAE7D /* PFInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationController.m; path = Parse/Internal/Installation/Controller/PFInstallationController.m; sourceTree = ""; }; - 1FC52A2F51F3D38AD751DF3CC9B7DA95 /* PFObjectBatchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectBatchController.m; path = Parse/Internal/Object/BatchController/PFObjectBatchController.m; sourceTree = ""; }; - 20AC43D5B60CA86B1AD76BC5D4591D96 /* PFPurchase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchase.m; path = Parse/PFPurchase.m; sourceTree = ""; }; - 20DFAAE476F60317DEAEE177019E41E9 /* PFHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHash.h; path = Parse/Internal/PFHash.h; sourceTree = ""; }; + 1A207317F4EF6A614BE7034DE5F3A9E9 /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; + 1A28796B1724F0F5B766249296CA182A /* PFMutableUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableUserState.h; path = Parse/Internal/User/State/PFMutableUserState.h; sourceTree = ""; }; + 1A5BCF29FD1B3CBCBD8B387388746B55 /* PFAnonymousAuthenticationProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousAuthenticationProvider.m; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m; sourceTree = ""; }; + 1B2FDDD8F730AFFD1DFF805E250C3654 /* PFPushChannelsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushChannelsController.h; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.h; sourceTree = ""; }; + 1C0E7BEE92130638A860786486BF4398 /* PFEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyQueue.m; path = Parse/Internal/PFEventuallyQueue.m; sourceTree = ""; }; + 1C4613FF21CF534DDDB393C04D6279F3 /* Bolts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-prefix.pch"; sourceTree = ""; }; + 1DB83418592CB04C28FA16D53A2F50BB /* ParseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseManager.m; path = Parse/Internal/ParseManager.m; sourceTree = ""; }; + 1DD825DA40E92E93FAC2EA00807BF7D1 /* PFPropertyInfo_Runtime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Runtime.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h; sourceTree = ""; }; + 1E08E20DF9125F146349FA765648DCA3 /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+AFNetworking.h"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.h"; sourceTree = ""; }; + 1E4D88B0EC5CA12C799F9F3C05C0B31E /* UIView+YALConstraints.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+YALConstraints.h"; path = "YALContextMenu/UIView+YALConstraints.h"; sourceTree = ""; }; + 1EBBF4F6FA934C6BCACE0C5744A3BF58 /* PFReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFReachability.h; path = Parse/Internal/PFReachability.h; sourceTree = ""; }; + 1FCA6291D3A1D8E40FC410D0747380DC /* PFRelation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelation.m; path = Parse/PFRelation.m; sourceTree = ""; }; + 1FE2EB61A95016598E72642BFBCBADBE /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; + 202A2922E63631CD23C09430889F7248 /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperationManager.h; path = AFNetworking/AFHTTPRequestOperationManager.h; sourceTree = ""; }; + 206BAB6E51C3AC0ACA2E1320A911DA36 /* PFFileDataStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileDataStream.m; path = Parse/Internal/File/FileDataStream/PFFileDataStream.m; sourceTree = ""; }; 212068113F29FA47D17730ED388F8706 /* POPBasicAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPBasicAnimation.h; path = pop/POPBasicAnimation.h; sourceTree = ""; }; - 2127EF3ED0DD02367DA4C3463002ACB7 /* PFAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAlertView.h; path = Parse/Internal/PFAlertView.h; sourceTree = ""; }; - 2171BDF0DFBFCB33F05FC9A1AC8B42B5 /* PFMultiProcessFileLockController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLockController.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m; sourceTree = ""; }; - 21D9F2D1230AD40B645828FF1CFD4506 /* PFObject+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFObject+Subclass.h"; path = "Parse/PFObject+Subclass.h"; sourceTree = ""; }; - 2280179A3928340114FB48C1AF04368F /* PFMultiProcessFileLock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLock.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m; sourceTree = ""; }; 22DC4C87D619EF0F28631B5560E82333 /* POPAnimationExtras.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationExtras.mm; path = pop/POPAnimationExtras.mm; sourceTree = ""; }; - 23EFBFB21E3A2659446F462A44152817 /* PFCategoryLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCategoryLoader.m; path = Parse/Internal/PFCategoryLoader.m; sourceTree = ""; }; - 248BBC0B2BBF2B01CCFCC79F7FE785AE /* PFObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectControlling.h; path = Parse/Internal/Object/Controller/PFObjectControlling.h; sourceTree = ""; }; - 24A36B9D634B60BD2A1CAC408B8226A3 /* PFURLSessionFileDownloadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionFileDownloadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h; sourceTree = ""; }; - 2515044ACEA23C32AC39FC89A3A0F6E0 /* PFInstallationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationPrivate.h; path = Parse/Internal/Installation/PFInstallationPrivate.h; sourceTree = ""; }; + 2348B7338D870B151D50A511AC6711D0 /* PFEventuallyPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyPin.h; path = Parse/Internal/PFEventuallyPin.h; sourceTree = ""; }; + 237D0CDD69C7B78A1BDB8DDF87F9EC2A /* PFObjectEstimatedData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectEstimatedData.h; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h; sourceTree = ""; }; + 245BC03B9F6AB7B69A163206AF3C2C32 /* PFBaseState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBaseState.m; path = Parse/Internal/PFBaseState.m; sourceTree = ""; }; + 245FF007BEF549EF81D7E0222214C303 /* PFKeyValueCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache.h; sourceTree = ""; }; + 24E60B787A9F785262AC44B47108D70D /* PFCommandCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandCache.m; path = Parse/Internal/PFCommandCache.m; sourceTree = ""; }; + 26DE5D007AAFB71206252AE40BAE833B /* PFFileDataStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileDataStream.h; path = Parse/Internal/File/FileDataStream/PFFileDataStream.h; sourceTree = ""; }; 2726A20CBCFFB77F9972C445E8972099 /* POPPropertyAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPPropertyAnimation.mm; path = pop/POPPropertyAnimation.mm; sourceTree = ""; }; - 29386A5F2F357AA19B9627F8C57A8D14 /* Bolts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-prefix.pch"; sourceTree = ""; }; - 2980A00A9C6B5DB5973D0870C4343CDF /* PFBaseState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBaseState.h; path = Parse/Internal/PFBaseState.h; sourceTree = ""; }; - 2A4C94256E730FF99DD4B0F41D9D749C /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; - 2A8F12B4902D7D8A8BBAF518DB7C37EF /* PFObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController.h; path = Parse/Internal/Object/Controller/PFObjectController.h; sourceTree = ""; }; - 2B07F2F4F2D16D912592A5F093A28DA6 /* PFMutableFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableFileState.m; path = Parse/Internal/File/State/PFMutableFileState.m; sourceTree = ""; }; - 2B52BDCCABD35EA2D1C44912753D79E1 /* PFDefaultACLController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDefaultACLController.h; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h; sourceTree = ""; }; - 2B9C4FA9F02AD2C7B7F788126DA856F5 /* PFPushChannelsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushChannelsController.m; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.m; sourceTree = ""; }; - 2C38E6D6FFD2BE12F651C934B7BFCE1C /* PFBase64Encoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBase64Encoder.m; path = Parse/Internal/PFBase64Encoder.m; sourceTree = ""; }; - 2CB00E16E736A73AA516D8A0FA5DB28E /* PFCoreDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreDataProvider.h; path = Parse/Internal/PFCoreDataProvider.h; sourceTree = ""; }; - 2CDBD2A39D34214C8D004ED2EB0D1624 /* PFUserFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserFileCodingLogic.m; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m; sourceTree = ""; }; - 2CE62F458530CD664224D3B0B7E49EAB /* PFCurrentInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentInstallationController.h; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h; sourceTree = ""; }; - 2DBBD6C38E3D91712C6414D4224376D3 /* PFJSONSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFJSONSerialization.h; path = Parse/Internal/PFJSONSerialization.h; sourceTree = ""; }; + 2792004D5441520275B8E22F94BD8E5C /* PFObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectControlling.h; path = Parse/Internal/Object/Controller/PFObjectControlling.h; sourceTree = ""; }; + 27E3589A502DA67E5F75BFDD5AB13E57 /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; + 283151768413CC359CA4D2B1E9BA275A /* PFFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileState.m; path = Parse/Internal/File/State/PFFileState.m; sourceTree = ""; }; + 285AE108BCA0C7BACB4D927E8D1F8665 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; + 28676FBC1D97921BD11D7A12C922CD0A /* PFObjectFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCodingLogic.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h; sourceTree = ""; }; + 291630B6FE4315F0B5B789D1ED22A66C /* PFQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQuery.m; path = Parse/PFQuery.m; sourceTree = ""; }; + 2966362D026D5B9C80E247EEDC0F4E9B /* PFCurrentConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentConfigController.m; path = Parse/Internal/Config/Controller/PFCurrentConfigController.m; sourceTree = ""; }; + 2B2B77FA62BB014F37CDD536B7F39AD5 /* PFApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFApplication.h; path = Parse/Internal/PFApplication.h; sourceTree = ""; }; + 2B493332AF25497985B3420336C8E310 /* PFSessionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionController.h; path = Parse/Internal/Session/Controller/PFSessionController.h; sourceTree = ""; }; + 2B6673C9F7E97CEA6C3B3B57C906C095 /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; + 2B7693C271516E5E5D162BA7DC113F4E /* PFBaseState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBaseState.h; path = Parse/Internal/PFBaseState.h; sourceTree = ""; }; + 2BD22E7A59F4BEFF52D4F43A0AA7EB30 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; + 2DA3428B35116EA19374F593BE42F3BD /* PFRole.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRole.m; path = Parse/PFRole.m; sourceTree = ""; }; + 2DC00CBF82C85912449AE191DBEC053D /* PFOfflineQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryController.m; path = Parse/Internal/Query/Controller/PFOfflineQueryController.m; sourceTree = ""; }; 2E056FF5C4EC38A55B45FB52F395D72E /* TransformationMatrix.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TransformationMatrix.h; path = pop/WebCore/TransformationMatrix.h; sourceTree = ""; }; 2E88590D291A3C131FC32F9BC9A80038 /* POPAnimationTracer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationTracer.h; path = pop/POPAnimationTracer.h; sourceTree = ""; }; - 2F561B1D0F25670B287F11DE69B4A30C /* PFLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogging.h; path = Parse/Internal/PFLogging.h; sourceTree = ""; }; - 312D446A8E99BA072B9A091616AB0DC2 /* PFHTTPURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHTTPURLRequestConstructor.m; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m; sourceTree = ""; }; + 3070F8AC10357FBF3BA3FE9A093D8A9B /* PFPropertyInfo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Private.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h; sourceTree = ""; }; 313669CF0D1BF49C96C85FC593F4BC1D /* POPAnimatableProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimatableProperty.h; path = pop/POPAnimatableProperty.h; sourceTree = ""; }; 3155A15C877F794FB064A4A0CEEB2F13 /* POPGeometry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPGeometry.h; path = pop/POPGeometry.h; sourceTree = ""; }; - 331907AED7D09788ACC2D6029AB2604F /* PFURLSessionJSONDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionJSONDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m; sourceTree = ""; }; - 33A4732FF27318AD75D549D9D4EF9CF7 /* PFPushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState.h; path = Parse/Internal/Push/State/PFPushState.h; sourceTree = ""; }; + 315895D529B1136E61253E4EEE127FAC /* PFPinningObjectStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningObjectStore.m; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.m; sourceTree = ""; }; + 3161EE94B4EAC7208319195F1483596D /* libContextMenu.iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libContextMenu.iOS.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 32AEDEB7E9CE1E1D2795C43EFD540009 /* PFNullability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNullability.h; path = Parse/PFNullability.h; sourceTree = ""; }; + 32D54A528AA2134A544108B4E124A617 /* PFRESTObjectBatchCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectBatchCommand.m; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.m; sourceTree = ""; }; + 33CAFF9933F161C320331CCA71D23A5F /* PFRole.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRole.h; path = Parse/PFRole.h; sourceTree = ""; }; + 345A7737A02453DD9D85EE95F928690B /* PFMutableQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableQueryState.h; path = Parse/Internal/Query/State/PFMutableQueryState.h; sourceTree = ""; }; + 347D5D631A6A12B0298E13B5415AEAAF /* PFURLSessionUploadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionUploadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h; sourceTree = ""; }; + 3501C65AE5330DD19D3236E70095C9D8 /* PFConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfigController.m; path = Parse/Internal/Config/Controller/PFConfigController.m; sourceTree = ""; }; + 35568ABE019B8ED099EFF07CE242DD67 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; 35574BADA6CDEA944F089CBC021F01AA /* TransformationMatrix.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TransformationMatrix.cpp; path = pop/WebCore/TransformationMatrix.cpp; sourceTree = ""; }; - 35A7823CEFBFE2CF5ABB3556EF3D0995 /* PFPushController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushController.m; path = Parse/Internal/Push/Controller/PFPushController.m; sourceTree = ""; }; - 35F4C67236438881E09D5813BFA8BB6A /* PFObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectController.m; path = Parse/Internal/Object/Controller/PFObjectController.m; sourceTree = ""; }; - 372AEF8690F07BECE3E348391A87DEBD /* PFPurchaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseController.m; path = Parse/Internal/Purchase/Controller/PFPurchaseController.m; sourceTree = ""; }; - 381988C254ED0DACBFE2ED8164944325 /* PFObjectController_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController_Private.h; path = Parse/Internal/Object/Controller/PFObjectController_Private.h; sourceTree = ""; }; + 358BFE48BAAE8F3F03CD0C0904BC4C08 /* PFUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserController.m; path = Parse/Internal/User/Controller/PFUserController.m; sourceTree = ""; }; + 36B65B247D65EE46D2A8F3ACDC87870F /* PFAnonymousUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils.h; path = Parse/PFAnonymousUtils.h; sourceTree = ""; }; + 36E7ABF06376C0698BE4B369C1255EAD /* PFRESTCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCommand.m; path = Parse/Internal/Commands/PFRESTCommand.m; sourceTree = ""; }; + 372923DCA1E5BFDF1DBD57E93002E783 /* PFMultiProcessFileLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLock.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h; sourceTree = ""; }; + 372FE1327079A6911530ABFAF7BF2E68 /* PFMutableRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableRelationState.m; path = Parse/Internal/Relation/State/PFMutableRelationState.m; sourceTree = ""; }; + 37D8598915FD79DCA21C88192869017A /* PFPinningObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningObjectStore.h; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.h; sourceTree = ""; }; + 37DCE2246C320FA0B8BF9CAD3758AE71 /* PFAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAlertView.m; path = Parse/Internal/PFAlertView.m; sourceTree = ""; }; + 3801D32A117D840B4286437B7A779361 /* PFRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelationState.m; path = Parse/Internal/Relation/State/PFRelationState.m; sourceTree = ""; }; + 385A446A8250571BBD7FF461E05E1382 /* YALContextMenuTableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YALContextMenuTableView.m; path = YALContextMenu/YALContextMenuTableView.m; sourceTree = ""; }; 38C1E5A4A6882760CB349FCABD22A9DC /* POP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POP.h; path = pop/POP.h; sourceTree = ""; }; - 397A9B2690E0D54158F63ECBF0C769B2 /* Bolts-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Bolts-Private.xcconfig"; sourceTree = ""; }; - 39F8120161EADF847B985CB2751E4B2A /* PFCommandRunning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunning.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.h; sourceTree = ""; }; - 3A3CFC6CFCF3EBBA16C7CCEB59F009AD /* PFAnonymousAuthenticationProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousAuthenticationProvider.m; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m; sourceTree = ""; }; - 3A56F696F9B2544A6A4DB58FB8E47809 /* PFMutableACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableACLState.h; path = Parse/Internal/ACL/State/PFMutableACLState.h; sourceTree = ""; }; + 38C5CB3B26D08AF88F501A05B91F10B4 /* PFObjectBatchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectBatchController.h; path = Parse/Internal/Object/BatchController/PFObjectBatchController.h; sourceTree = ""; }; + 38E00AD6C99A24C72256073EDD208D3F /* PFAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAssert.h; path = Parse/Internal/PFAssert.h; sourceTree = ""; }; + 39451587CFA3D7024575C72DA66A271B /* PFPushUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushUtilities.h; path = Parse/Internal/Push/Utilites/PFPushUtilities.h; sourceTree = ""; }; + 39A27D94EB41AD237B4F4E722852F9B6 /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; 3A5F7AF86D19E519B94AD6D8CB98CC34 /* POPAnimationRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationRuntime.h; path = pop/POPAnimationRuntime.h; sourceTree = ""; }; - 3AF05F518409F76124476457E2514771 /* PFHTTPURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPURLRequestConstructor.h; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h; sourceTree = ""; }; - 3D02C6C7422645AB5529C759A1A86353 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; - 3D8637E5A58491F08A00BD27912794B7 /* PFDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDevice.m; path = Parse/Internal/PFDevice.m; sourceTree = ""; }; - 3D98F818FBD7F97BBBBADD55203F244B /* PFMutableFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableFileState.h; path = Parse/Internal/File/State/PFMutableFileState.h; sourceTree = ""; }; - 3EBCC4FDAE51D4D5EBDF89A681AB0F7D /* PFPush.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPush.m; path = Parse/PFPush.m; sourceTree = ""; }; - 4073B51D97588127A6EF20481CEC3025 /* ParseModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseModule.h; path = Parse/Internal/ParseModule.h; sourceTree = ""; }; - 4113ABD9B9640D41ADFF4F04A28AF0C7 /* PFObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObject.h; path = Parse/PFObject.h; sourceTree = ""; }; - 4123F238BE00014D15B8B3DE34ADC447 /* PFSQLiteStatement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteStatement.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m; sourceTree = ""; }; - 419B671E948384A84974D819F4F24FBA /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; - 41CD7A269A474E8BFCBF52EFC03BD796 /* PFBase64Encoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBase64Encoder.h; path = Parse/Internal/PFBase64Encoder.h; sourceTree = ""; }; - 42093BEF3F8BF73F39F33B7D65A8B184 /* PFReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFReachability.h; path = Parse/Internal/PFReachability.h; sourceTree = ""; }; - 420A2E467841126C406BA9FA83D75161 /* Parse_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse_Private.h; path = Parse/Internal/Parse_Private.h; sourceTree = ""; }; - 4220E05D6A608326E489CDA533392ED8 /* PFAsyncTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAsyncTaskQueue.m; path = Parse/Internal/PFAsyncTaskQueue.m; sourceTree = ""; }; - 425CA0B11664DBBBEAA5C27618F79FAD /* PFLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogger.m; path = Parse/Internal/PFLogger.m; sourceTree = ""; }; - 42763567F50A02D13E880143048C01A1 /* PFObjectFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCodingLogic.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m; sourceTree = ""; }; - 43D1212BEB11DE789DE0E4CC000FC9AF /* PFDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDevice.h; path = Parse/Internal/PFDevice.h; sourceTree = ""; }; - 440A7F77699899974219AB5825962822 /* PFQueryState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState_Private.h; path = Parse/Internal/Query/State/PFQueryState_Private.h; sourceTree = ""; }; - 4799A3AB2CC4C1F80574291738520C2F /* PFAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAlertView.m; path = Parse/Internal/PFAlertView.m; sourceTree = ""; }; - 484F5D6426BF8586F7203DC9DE6690A1 /* PFURLSessionUploadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionUploadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m; sourceTree = ""; }; - 4897F88BB4A784CD6F1DFE74C498732A /* PFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFNetworkActivityIndicatorManager.m; path = Parse/PFNetworkActivityIndicatorManager.m; sourceTree = ""; }; - 49274509C4FFAAEBBD45D8600A573B2B /* PFInstallationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationConstants.m; path = Parse/Internal/Installation/Constants/PFInstallationConstants.m; sourceTree = ""; }; - 4987E5DF7D6AE7BBDE4D3055F00A8B27 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; - 49E7AE33EEA74B98EDDEF13254E369C2 /* PFFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileState.m; path = Parse/Internal/File/State/PFFileState.m; sourceTree = ""; }; - 4A66170B5CA1BBCF22487EEE33E21A6C /* PFProduct+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFProduct+Private.h"; path = "Parse/Internal/Product/PFProduct+Private.h"; sourceTree = ""; }; - 4ACFA0EE4D94D9AD3A656FFFB0D6DC16 /* PFURLSessionJSONDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionJSONDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h; sourceTree = ""; }; - 4BFA78A3405997CEFE0F4A84B480089B /* PFMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMacros.h; path = Parse/Internal/PFMacros.h; sourceTree = ""; }; - 4C9C62664AD1CE0A3036EA774C72C69C /* PFRESTObjectBatchCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectBatchCommand.h; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.h; sourceTree = ""; }; + 3D7123F7FE1F84DEDBE2ED35D8844839 /* PFObjectFilePersistenceController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFilePersistenceController.h; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h; sourceTree = ""; }; + 3DB8817B308E2B46E23993461AC18E54 /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; + 3DFA1FB737DEBE392F5582656ED1040B /* PFObjectSubclassInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassInfo.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m; sourceTree = ""; }; + 3E2E03FFA5C12908D09BC583858570B6 /* PFKeyValueCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeyValueCache.m; path = Parse/Internal/KeyValueCache/PFKeyValueCache.m; sourceTree = ""; }; + 400935A9AE97EE38E7C59CBBD474FA32 /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; + 411AD8B8B53F6CAF9198BBBBB07AC033 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; + 41A069B9AF3C8F611F76F20326AB035E /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; + 436A81D9B2A9E41E99BF86F1C6871A0A /* PFThreadsafety.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFThreadsafety.m; path = Parse/Internal/ThreadSafety/PFThreadsafety.m; sourceTree = ""; }; + 450938391ACE611C45583A2F6117FD6D /* PFURLSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h; sourceTree = ""; }; + 453A45902215CAB1B07AEEBCAEC35958 /* PFAsyncTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAsyncTaskQueue.h; path = Parse/Internal/PFAsyncTaskQueue.h; sourceTree = ""; }; + 457B2F0DFF5B74AEFF8A1D9A714104EA /* PFUserPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserPrivate.h; path = Parse/Internal/User/PFUserPrivate.h; sourceTree = ""; }; + 461917BD0B571A033CB9E74AD334A12C /* PFFileStagingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileStagingController.m; path = Parse/Internal/File/Controller/PFFileStagingController.m; sourceTree = ""; }; + 46A44DBE60FFDA06D7726DD3091A0E47 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; + 4743EB53C73E4B52C1EC84395BD476F5 /* Parse-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Parse-Private.xcconfig"; sourceTree = ""; }; + 475310436BBAD84F7095E6DB0BB83F78 /* PFMulticastDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMulticastDelegate.m; path = Parse/Internal/PFMulticastDelegate.m; sourceTree = ""; }; + 47DED761A5B41071D4A460714CF9A610 /* PFURLSessionCommandRunner_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h; sourceTree = ""; }; + 48514E935FE3E435F151EFEB4D829A65 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + 489E3B9351E8F3F82DAFE89EEEC84804 /* PFFileController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileController.h; path = Parse/Internal/File/Controller/PFFileController.h; sourceTree = ""; }; + 48DF685D40431A00C7B7572D23340086 /* PFCommandRunningConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunningConstants.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m; sourceTree = ""; }; + 4A0A7E7C948EBD45C167B8D1A339D98A /* PFInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallation.m; path = Parse/PFInstallation.m; sourceTree = ""; }; + 4A747E0C0BA89EAF9D9C9B35EA62B097 /* PFRESTQueryCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTQueryCommand.m; path = Parse/Internal/Commands/PFRESTQueryCommand.m; sourceTree = ""; }; + 4B4E5220C651194225EB11D393463146 /* PFFieldOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperation.m; path = Parse/Internal/FieldOperation/PFFieldOperation.m; sourceTree = ""; }; 4CC05709207C91767940918CDD4779DC /* POPCGUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPCGUtils.h; path = pop/POPCGUtils.h; sourceTree = ""; }; - 4DE181E23B100CCECFB4B435A3DF9AD4 /* PFUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserController.h; path = Parse/Internal/User/Controller/PFUserController.h; sourceTree = ""; }; - 4E29EFCB546410074B97DF506ABC1C98 /* PFFileDataStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileDataStream.h; path = Parse/Internal/File/FileDataStream/PFFileDataStream.h; sourceTree = ""; }; - 4E8E5DE9CFE8C0FF513510782D08CD45 /* BFDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFDefines.h; path = Bolts/Common/BFDefines.h; sourceTree = ""; }; - 4F35A9095465C7A589E9D7FC2F4774D8 /* PFFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState.h; path = Parse/Internal/File/State/PFFileState.h; sourceTree = ""; }; - 5057A97EFDC884111C4A5829863ADD7C /* Parse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse.h; path = Parse/Parse.h; sourceTree = ""; }; - 50B0DDFFAD085BBF7A9EE5E4B41E834B /* PFKeyValueCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeyValueCache.m; path = Parse/Internal/KeyValueCache/PFKeyValueCache.m; sourceTree = ""; }; - 514CD500BD8BACEDB35A91E6F6135E56 /* PFRESTAnalyticsCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTAnalyticsCommand.h; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.h; sourceTree = ""; }; - 529877D68CE76A3FBD3B683DAFF9EAE6 /* PFOfflineQueryLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryLogic.m; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m; sourceTree = ""; }; - 53086C5F8B1EDBB0614BD2C21F7CBB35 /* PFCommandRunning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunning.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.m; sourceTree = ""; }; - 53F21E51B835CE481CAA7ADCD43FC400 /* PFCachedQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCachedQueryController.h; path = Parse/Internal/Query/Controller/PFCachedQueryController.h; sourceTree = ""; }; - 53F56D358828987779F91894A792A4CA /* PFInstallationIdentifierStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h; sourceTree = ""; }; - 546B14FA2F1DCF4C453346FC971CDDB6 /* PFApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFApplication.m; path = Parse/Internal/PFApplication.m; sourceTree = ""; }; - 56414F68055CC861BAB740091699D58B /* PFAnonymousUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousUtils.m; path = Parse/PFAnonymousUtils.m; sourceTree = ""; }; - 56D3E21616E0654B5CFD38290C9213A9 /* PFSessionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionController.m; path = Parse/Internal/Session/Controller/PFSessionController.m; sourceTree = ""; }; - 576B1125C947E14A49E22D7F411DC55C /* PFPinningObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningObjectStore.h; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.h; sourceTree = ""; }; + 4CD3D62A5F9D0B310DCF7C520D812B6F /* ParseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseManager.h; path = Parse/Internal/ParseManager.h; sourceTree = ""; }; + 4D237A86108BD1DB8A37BCC3FCA0DC90 /* PFAnalyticsUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsUtilities.m; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m; sourceTree = ""; }; + 4DC525DF3A9AB295F68FFA79C1865B4D /* PFApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFApplication.m; path = Parse/Internal/PFApplication.m; sourceTree = ""; }; + 4DDA8143D2C09DF9986817461C4DD498 /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; + 4FA3D2B13C2E276A13164FD9D412F89D /* PFPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPin.m; path = Parse/Internal/LocalDataStore/Pin/PFPin.m; sourceTree = ""; }; + 5038524C4AA89B3EC607E5B47A706CCA /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; + 507ED5364F8D323521133232F9E26134 /* PFBase64Encoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBase64Encoder.h; path = Parse/Internal/PFBase64Encoder.h; sourceTree = ""; }; + 512576519C7D60E088B9946D68C2893B /* UIAlertView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAlertView+AFNetworking.m"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.m"; sourceTree = ""; }; + 51740A0EDDF3B04E8A46D98B3807D440 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; + 52808B026D92DB8F0DCCBCA2EE24FEEF /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; + 529C0DC5511102F293AAA76310789551 /* PFProductsRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductsRequestHandler.h; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h; sourceTree = ""; }; + 530ED4C4F72784908C56CECFABD0231C /* PFObjectBatchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectBatchController.m; path = Parse/Internal/Object/BatchController/PFObjectBatchController.m; sourceTree = ""; }; + 5367E0C94AEC8755F6974A3C97264428 /* PFRESTFileCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTFileCommand.m; path = Parse/Internal/Commands/PFRESTFileCommand.m; sourceTree = ""; }; + 53683441896998F6CE0216D4310DD24D /* PFACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState.h; path = Parse/Internal/ACL/State/PFACLState.h; sourceTree = ""; }; + 554179C2DB1E42B74E86A13E79A45730 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; + 5583C012407DD3D86BE591291FD5B40E /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; + 562875D8611745AF8CD45A6CDA6DC927 /* PFUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState.h; path = Parse/Internal/User/State/PFUserState.h; sourceTree = ""; }; + 568A6DDB145B9BE497001F309F81C25D /* PFBase64Encoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBase64Encoder.m; path = Parse/Internal/PFBase64Encoder.m; sourceTree = ""; }; + 56CE00CA829DE03D96192E0DB1B3B4B5 /* PFPushState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState_Private.h; path = Parse/Internal/Push/State/PFPushState_Private.h; sourceTree = ""; }; + 5710C75607065D22ED2DB5CCCFB27A3D /* PFObjectConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectConstants.h; path = Parse/Internal/Object/Constants/PFObjectConstants.h; sourceTree = ""; }; + 5775915FCBF7CB8AB7E50C1474A500B5 /* PFRESTObjectCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectCommand.m; path = Parse/Internal/Commands/PFRESTObjectCommand.m; sourceTree = ""; }; 5785AD09C2208501D5161E950E701889 /* POPAnimationEventInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationEventInternal.h; path = pop/POPAnimationEventInternal.h; sourceTree = ""; }; - 57BAE3AE27D1DF554AB43ADF5CA1C592 /* PFRelation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelation.m; path = Parse/PFRelation.m; sourceTree = ""; }; - 581264D483DB217A6F5ED83035A33E30 /* PFRESTPushCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTPushCommand.m; path = Parse/Internal/Commands/PFRESTPushCommand.m; sourceTree = ""; }; - 5844FC1A0322F7909761B921AC033AC3 /* PFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkActivityIndicatorManager.h; path = Parse/PFNetworkActivityIndicatorManager.h; sourceTree = ""; }; - 5880D4CB5AA7C367A9C45BE209F6CED6 /* PFWeakValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFWeakValue.m; path = Parse/Internal/PFWeakValue.m; sourceTree = ""; }; - 59363C495BDE76341FC7C70BE565EF4A /* PFObjectEstimatedData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectEstimatedData.m; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m; sourceTree = ""; }; - 59A9225041C3DEB9A02CF97CE810A7F8 /* PFEncoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEncoder.h; path = Parse/Internal/PFEncoder.h; sourceTree = ""; }; + 57B1DA40C85BD720B286FFF8C7EA6F91 /* PFInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallation.h; path = Parse/PFInstallation.h; sourceTree = ""; }; + 57F2605E98764A7779B3213480606C71 /* PFGeoPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFGeoPoint.m; path = Parse/PFGeoPoint.m; sourceTree = ""; }; + 58143C3358B762BB4DC15795BD82B8B9 /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; + 58898FE04784C24EDFF6D77428F6BB91 /* PFJSONSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFJSONSerialization.h; path = Parse/Internal/PFJSONSerialization.h; sourceTree = ""; }; + 58EC2DED4BCC481232C4E104FEB2F9ED /* PFQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState.h; path = Parse/Internal/Query/State/PFQueryState.h; sourceTree = ""; }; + 59143BC1CCA767489CC63EC79299C132 /* PFFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFile.m; path = Parse/PFFile.m; sourceTree = ""; }; + 595A306B6C145E017C4B885F8ABB9F94 /* PFRESTCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand.h; path = Parse/Internal/Commands/PFRESTCommand.h; sourceTree = ""; }; 59B3FD41DEC22C5891C9B83C27BC25E0 /* pop-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "pop-dummy.m"; sourceTree = ""; }; - 5A09D1AC6A988D2BC0012D3F2027B90C /* PFMutableRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableRelationState.h; path = Parse/Internal/Relation/State/PFMutableRelationState.h; sourceTree = ""; }; - 5A71F8897B642BC983919241A133904D /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - 5A7FFA051B54FAFBAAF14E0C23C4641F /* PFRESTConfigCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTConfigCommand.m; path = Parse/Internal/Commands/PFRESTConfigCommand.m; sourceTree = ""; }; + 5AA108C575CCC3045CF6EBEB7C2D35B5 /* PFQueryState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState_Private.h; path = Parse/Internal/Query/State/PFQueryState_Private.h; sourceTree = ""; }; 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "pop-Private.xcconfig"; sourceTree = ""; }; - 5B311513624F9614FA7EBA34D397F337 /* PFPurchaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseController.h; path = Parse/Internal/Purchase/Controller/PFPurchaseController.h; sourceTree = ""; }; - 5B55D2A6F5C29F672688ABE3737712C1 /* PFRESTCloudCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCloudCommand.m; path = Parse/Internal/Commands/PFRESTCloudCommand.m; sourceTree = ""; }; - 5B8E6E53482F4B643407A15BA8B0F287 /* PFFieldOperationDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperationDecoder.h; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.h; sourceTree = ""; }; - 5BE848028E2C509A4FA316D19E795CD7 /* PFThreadsafety.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFThreadsafety.m; path = Parse/Internal/ThreadSafety/PFThreadsafety.m; sourceTree = ""; }; - 5C2B236ABC299A669D53E54FC6FF7414 /* PFInstallationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationConstants.h; path = Parse/Internal/Installation/Constants/PFInstallationConstants.h; sourceTree = ""; }; - 5F48FD0FD7AA215B6C44D0D0D2B89AA6 /* PFEventuallyPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyPin.h; path = Parse/Internal/PFEventuallyPin.h; sourceTree = ""; }; - 5F8C504A6034C0190584C29C9997115B /* PFRESTQueryCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTQueryCommand.h; path = Parse/Internal/Commands/PFRESTQueryCommand.h; sourceTree = ""; }; - 603F88D603FD21B1DB540C18DCB38780 /* PFSQLiteDatabaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseController.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h; sourceTree = ""; }; - 6082FD21FE81654EC989E13CFA913CAB /* PFSQLiteDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h; sourceTree = ""; }; - 608790F5A36AC5B2650CA3AB5EDB96D8 /* PFRESTAnalyticsCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTAnalyticsCommand.m; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.m; sourceTree = ""; }; - 60AC5AE111695E87D9942D028A5723AE /* PFTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTaskQueue.m; path = Parse/Internal/PFTaskQueue.m; sourceTree = ""; }; - 6104AB82845FA5625E51A56F2D3213B8 /* ParseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseManager.h; path = Parse/Internal/ParseManager.h; sourceTree = ""; }; - 611FEF49E42DDEF17150301DFA476527 /* PFCoreManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCoreManager.m; path = Parse/Internal/PFCoreManager.m; sourceTree = ""; }; - 619BA5C9745FABA615C1071117CF49AF /* PFUserConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserConstants.h; path = Parse/Internal/User/Constants/PFUserConstants.h; sourceTree = ""; }; - 623D1DB3CEA9317B7323E1B4435A4B04 /* PFFileStagingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileStagingController.m; path = Parse/Internal/File/Controller/PFFileStagingController.m; sourceTree = ""; }; + 5B55313727430781904B26ED39BC5BD6 /* PFAnalyticsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsController.m; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.m; sourceTree = ""; }; + 5C3B64369BE6A9ACF09E4E03E3747FA0 /* PFMultiProcessFileLockController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLockController.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m; sourceTree = ""; }; + 5CE1AE8BFDFAA049F0F73E15ED7ACE9E /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5DA5FA1FA814DC209F9EABCD6B9119F6 /* PFUserFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserFileCodingLogic.m; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m; sourceTree = ""; }; + 5E5F89585BF738F0A58C77BC3BE1A932 /* PFUserState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState_Private.h; path = Parse/Internal/User/State/PFUserState_Private.h; sourceTree = ""; }; + 5F3726655401860B18DB85328C091228 /* PFFileManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileManager.h; path = Parse/Internal/PFFileManager.h; sourceTree = ""; }; + 5F6D07CF3F5445D97AACFB330CF98F66 /* PFHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHash.m; path = Parse/Internal/PFHash.m; sourceTree = ""; }; + 60F954C2BD5989BD4626F5C1F5BCC48A /* PFRESTUserCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTUserCommand.h; path = Parse/Internal/Commands/PFRESTUserCommand.h; sourceTree = ""; }; + 61308EBC3E3CCE6EB380B4761543AD72 /* PFMutableFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableFileState.m; path = Parse/Internal/File/State/PFMutableFileState.m; sourceTree = ""; }; + 61DE303474ACF3AAEB6BEF7CF3151683 /* PFMutableFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableFileState.h; path = Parse/Internal/File/State/PFMutableFileState.h; sourceTree = ""; }; + 62078C4D93D4BF5CF7430EF680857264 /* PFHTTPURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHTTPURLRequestConstructor.m; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m; sourceTree = ""; }; + 62C1941BE9E36B0C41BF43BFCF7681CB /* PFObjectLocalIdStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectLocalIdStore.h; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h; sourceTree = ""; }; + 62FA41489E9F671A6D2AC37AA15E70FC /* PFProductsRequestHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductsRequestHandler.m; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m; sourceTree = ""; }; + 62FAE8C508439F783E07B639E62E5388 /* PFPush.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPush.m; path = Parse/PFPush.m; sourceTree = ""; }; + 63CF9DFF309CFA031748CEB31E227BB9 /* PFRESTCloudCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCloudCommand.h; path = Parse/Internal/Commands/PFRESTCloudCommand.h; sourceTree = ""; }; + 63F5E36EFB9403CA32B8B5C3A3F78855 /* PFEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue.h; path = Parse/Internal/PFEventuallyQueue.h; sourceTree = ""; }; + 6408EC1F7E48296B333659567543173D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; 641AE05DD55E5E6AC1590CD7B4A18F97 /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = ""; }; - 66C84FE024EC45EF4AB8D3EE3366EAF3 /* PFQueryPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryPrivate.h; path = Parse/Internal/Query/PFQueryPrivate.h; sourceTree = ""; }; - 68900F0E0EB2E31F6E0B59E6692F1C5E /* PFDateFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDateFormatter.m; path = Parse/Internal/PFDateFormatter.m; sourceTree = ""; }; + 653B4653F0D1C20696A6E65E888E8D15 /* PFCommandResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandResult.m; path = Parse/Internal/PFCommandResult.m; sourceTree = ""; }; + 656B8A19AFF797C4926D6E2E8D102049 /* PFObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectController.m; path = Parse/Internal/Object/Controller/PFObjectController.m; sourceTree = ""; }; + 65F6F140EE00AE08D92C70E19B66F5A4 /* PFDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDecoder.h; path = Parse/Internal/PFDecoder.h; sourceTree = ""; }; + 663C1A74DA7B1A684C31157464DF2CC6 /* PFAsyncTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAsyncTaskQueue.m; path = Parse/Internal/PFAsyncTaskQueue.m; sourceTree = ""; }; + 669BF4D4C83FA3E0ABEF32501AC4C5EE /* PFCommandURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandURLRequestConstructor.h; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h; sourceTree = ""; }; + 671A1745311D8EA359B1DB95D621711E /* PFAnonymousUtils_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils_Private.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h; sourceTree = ""; }; + 676C7A56F303C34B831F1F015F05812E /* PFFileController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileController.m; path = Parse/Internal/File/Controller/PFFileController.m; sourceTree = ""; }; 6961E549FC85F85EB7560B887B11C928 /* POPSpringSolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringSolver.h; path = pop/POPSpringSolver.h; sourceTree = ""; }; - 696CB0BED47C8B75EFCBA90955BB17EA /* PFGeoPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFGeoPoint.m; path = Parse/PFGeoPoint.m; sourceTree = ""; }; - 6A34F74808E75DF01FC097E2274D4116 /* PFFileManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileManager.h; path = Parse/Internal/PFFileManager.h; sourceTree = ""; }; - 6AC5046C91AD0BF56975D1A7F382F946 /* PFRESTFileCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTFileCommand.h; path = Parse/Internal/Commands/PFRESTFileCommand.h; sourceTree = ""; }; - 6AFE87339800D6E962F2EFEC155ABC75 /* PFObjectConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectConstants.m; path = Parse/Internal/Object/Constants/PFObjectConstants.m; sourceTree = ""; }; - 6BDA2CB539774B96EADA0171CEB88CC6 /* PFSQLiteDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabase.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m; sourceTree = ""; }; - 6C07AD7B01F99BCDAE94E6D7D0BF6038 /* PFLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocationManager.h; path = Parse/Internal/PFLocationManager.h; sourceTree = ""; }; - 6C364D224B5FE61E8BA844FB66D55C5F /* PFPushManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushManager.m; path = Parse/Internal/Push/Manager/PFPushManager.m; sourceTree = ""; }; - 6C3AFFA6C615F4519F0FD6DD4EA4194C /* PFURLSessionDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m; sourceTree = ""; }; - 6C3B93CF1C94B6DA6DEB3D31B9710F83 /* PFCommandRunningConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunningConstants.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h; sourceTree = ""; }; - 6C49C75467014FA33C9642023DA6F54D /* PFCachedQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCachedQueryController.m; path = Parse/Internal/Query/Controller/PFCachedQueryController.m; sourceTree = ""; }; - 6CCEA16112CA90E44E0E982B2A2B27D3 /* PFOfflineObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineObjectController.h; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h; sourceTree = ""; }; - 6DD2128030F8E23F9B1C6141659F3B8C /* PFLocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLocationManager.m; path = Parse/Internal/PFLocationManager.m; sourceTree = ""; }; - 6DDB11ED96EBA4EC3BB398585D212BD7 /* PFPurchase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchase.h; path = Parse/PFPurchase.h; sourceTree = ""; }; - 6DE629D21A679A60A0F64440A0BAC324 /* PFObjectLocalIdStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectLocalIdStore.m; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m; sourceTree = ""; }; - 6E393C3F2BB10DF131AB02A295297B88 /* PFUserFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserFileCodingLogic.h; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h; sourceTree = ""; }; - 6E5945950FBDA34F155BE025094F2F22 /* PFURLSessionDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h; sourceTree = ""; }; - 6E5AF4BFF040360310887AAACC8C323C /* PFProduct.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProduct.m; path = Parse/PFProduct.m; sourceTree = ""; }; - 6FC0F52242A2200901325143AB469063 /* PFCommandResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandResult.h; path = Parse/Internal/PFCommandResult.h; sourceTree = ""; }; - 707C0020EA94AD091665CAAD43AA717B /* PFRESTSessionCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTSessionCommand.h; path = Parse/Internal/Commands/PFRESTSessionCommand.h; sourceTree = ""; }; - 715B44864CC4816F9E241DBDAE6498CE /* PFQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQuery.h; path = Parse/PFQuery.h; sourceTree = ""; }; - 718BF86CB0A3C4DB13DBC0EAEA86A9EF /* PFObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObject.m; path = Parse/PFObject.m; sourceTree = ""; }; - 71AF2ED13A3973592E31F7D47D5D90F0 /* PFKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeychainStore.h; path = Parse/Internal/PFKeychainStore.h; sourceTree = ""; }; - 71D39E34A21D15F057EC75D91D396416 /* PFSQLiteStatement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteStatement.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h; sourceTree = ""; }; - 71EFF9FFB238B21E016BDB85AA6333DD /* PFUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUser.m; path = Parse/PFUser.m; sourceTree = ""; }; - 71FB977D682D8E9A3C20EB5A8FA8D44B /* PFConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig.h; path = Parse/PFConfig.h; sourceTree = ""; }; - 722BD969D4C4074223C4A656C0F6B7E7 /* PFAnalyticsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsController.m; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.m; sourceTree = ""; }; - 72BD4751F46AFBD16AE367CAE3FA8785 /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; - 72DCBBAC0FE8319BEC96154A134CD74B /* PFCurrentInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentInstallationController.m; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m; sourceTree = ""; }; - 72E4522345A892B89A84489DB3B8F316 /* PFMutableUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableUserState.h; path = Parse/Internal/User/State/PFMutableUserState.h; sourceTree = ""; }; - 7334DBEED1B1C3906828C55F380147ED /* PFPropertyInfo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Private.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h; sourceTree = ""; }; - 7363B398C79454A71B17ACDF25FAA393 /* PFUserAuthenticationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationDelegate.h; path = Parse/PFUserAuthenticationDelegate.h; sourceTree = ""; }; + 69C89E4E56C77B03B486A9C81B595B44 /* AFNetworking-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AFNetworking-Private.xcconfig"; sourceTree = ""; }; + 6A3138F383603A594BF1120840E69F93 /* PFHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHash.h; path = Parse/Internal/PFHash.h; sourceTree = ""; }; + 6B26ED3E1774D8AF7C7968032E48D8AD /* BFTask+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Private.h"; path = "Parse/Internal/BFTask+Private.h"; sourceTree = ""; }; + 6BAB10EAFDE7E6E60F85AB4A4C3AD67E /* PFURLConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLConstructor.h; path = Parse/Internal/HTTPRequest/PFURLConstructor.h; sourceTree = ""; }; + 6D14E98ACAAB4CCD1367FDFBC9088D27 /* PFObjectFileCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCoder.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.h; sourceTree = ""; }; + 6D3ED73DF6D62367D4288EA69377B589 /* PFURLConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLConstructor.m; path = Parse/Internal/HTTPRequest/PFURLConstructor.m; sourceTree = ""; }; + 6D45F61B78D4419060D26A7EBAF70EC2 /* PFConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConstants.m; path = Parse/PFConstants.m; sourceTree = ""; }; + 6D97138DECF19BAFB63881A6D4EF92BF /* PFObjectController_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController_Private.h; path = Parse/Internal/Object/Controller/PFObjectController_Private.h; sourceTree = ""; }; + 6DC7D6BF37746831732BEE64A78E2E64 /* PFObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectState.m; path = Parse/Internal/Object/State/PFObjectState.m; sourceTree = ""; }; + 6E19C92B6E4B8413D0F549918EC73FD0 /* PFQueryPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryPrivate.h; path = Parse/Internal/Query/PFQueryPrivate.h; sourceTree = ""; }; + 6E2A46AA281CDF574C18A7B9311A6C93 /* PFAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAlertView.h; path = Parse/Internal/PFAlertView.h; sourceTree = ""; }; + 6FE7C428DAE4B23EBBF3039F8397D53E /* ContextMenu.iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ContextMenu.iOS.xcconfig; sourceTree = ""; }; + 70864853E727E60E7B86865739D2ECED /* PFCloud.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloud.m; path = Parse/PFCloud.m; sourceTree = ""; }; + 70A550454DC97E123E16BD631BDAD95C /* UIAlertView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAlertView+AFNetworking.h"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.h"; sourceTree = ""; }; + 71E77E05CC2CDD5B79D7552C17004EFB /* PFObjectFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCodingLogic.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m; sourceTree = ""; }; + 7203E516FF95A460652ADF5DFDEB3FB7 /* PFPaymentTransactionObserver_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver_Private.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h; sourceTree = ""; }; + 721E34BBC2F5BFD148652BD36955365C /* PFDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDataProvider.h; path = Parse/Internal/PFDataProvider.h; sourceTree = ""; }; + 72C04520515C92C01E90D8D58C97BA21 /* PFConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig.h; path = Parse/PFConfig.h; sourceTree = ""; }; + 734124A4F7A87553483F895904EE19A9 /* PFObjectEstimatedData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectEstimatedData.m; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m; sourceTree = ""; }; 7371F16336283F2D8BB2A199CD4DDEF5 /* POPSpringAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringAnimation.h; path = pop/POPSpringAnimation.h; sourceTree = ""; }; - 73BA46E681EC6D99B36A7E314941B82A /* PFEncoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEncoder.m; path = Parse/Internal/PFEncoder.m; sourceTree = ""; }; - 741AF064CFE86ABB229F37FBAFB71F22 /* PFDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDecoder.h; path = Parse/Internal/PFDecoder.h; sourceTree = ""; }; - 7461F51B0EABADB21626FF904B87CCE5 /* PFEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue.h; path = Parse/Internal/PFEventuallyQueue.h; sourceTree = ""; }; - 750C23383E751070C38083B3DDED458E /* PFConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig_Private.h; path = Parse/Internal/Config/PFConfig_Private.h; sourceTree = ""; }; - 75EBF2C2BD6CA4EB5FC5249BB70052D3 /* PFMulticastDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMulticastDelegate.h; path = Parse/Internal/PFMulticastDelegate.h; sourceTree = ""; }; - 76E34CF3E0809A86C3173F02A63233D2 /* PFOfflineObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineObjectController.m; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m; sourceTree = ""; }; - 77312E9917F3B4071B52F28CD4A21EBC /* Bolts.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.xcconfig; sourceTree = ""; }; - 77C22DDD172F2AE628D146B1BD68824A /* PFNullability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNullability.h; path = Parse/PFNullability.h; sourceTree = ""; }; - 792D4196F6AB3ECF94F94E4B1A786D9D /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - 7971DD333353B1B9C109052C86147DEA /* PFOfflineStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineStore.h; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h; sourceTree = ""; }; - 79D9D3FFDE344267236EECCAA6397DA3 /* PFPropertyInfo_Runtime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo_Runtime.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m; sourceTree = ""; }; - 7A9E8271F4A4A2FE0F545A52010B99A1 /* PFObjectUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectUtilities.m; path = Parse/Internal/Object/Utilities/PFObjectUtilities.m; sourceTree = ""; }; - 7ACE89D8884AAB54C96F063FF438FA31 /* PFObjectSubclassingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassingController.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h; sourceTree = ""; }; - 7C85AFD7ABA045B4FE8ED8BF948A7C60 /* PFQueryUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryUtilities.h; path = Parse/Internal/Query/Utilities/PFQueryUtilities.h; sourceTree = ""; }; - 7E3D63307A8DF22EE6CA58FBC364ACF4 /* PFObjectLocalIdStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectLocalIdStore.h; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h; sourceTree = ""; }; - 7EA341866E76C794E960BB9753925294 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; - 7EE9007C583DF8ECE1AEF3F938312117 /* PFKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeychainStore.m; path = Parse/Internal/PFKeychainStore.m; sourceTree = ""; }; - 7F142A8509CC5040126EC51BDFDDE6E4 /* PFConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConstants.h; path = Parse/PFConstants.h; sourceTree = ""; }; + 7388AF1F66A03C223B0DA9338F552A19 /* PFMultiProcessFileLock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLock.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m; sourceTree = ""; }; + 73DEF6839984D1F48ACE568B6EC2E5EF /* Parse-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Parse-dummy.m"; sourceTree = ""; }; + 73E9B12D704E302D9DAC9FDE4C8D60AC /* BFDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFDefines.h; path = Bolts/Common/BFDefines.h; sourceTree = ""; }; + 73F5CAD466111E720F4983773D164AED /* PFConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfig.m; path = Parse/PFConfig.m; sourceTree = ""; }; + 74BAE971C6A2FC6F319D21B31E77EAE8 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; + 752500BB2A0459E3CB234F46BFDE1EED /* PFSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession.h; path = Parse/PFSession.h; sourceTree = ""; }; + 754C6873E010FF768376E458C1EA6449 /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; + 76B1F1A7DACF8124FD67EEFFB88526F1 /* PFPaymentTransactionObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPaymentTransactionObserver.m; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m; sourceTree = ""; }; + 7725DA2CCC4B05B3E8613121DAB013CB /* PFCoreDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreDataProvider.h; path = Parse/Internal/PFCoreDataProvider.h; sourceTree = ""; }; + 780EF3BE11B2381FB28EB629FB8CBC29 /* PFURLSessionDataTaskDelegate_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h; sourceTree = ""; }; + 7977EE0242992DA9A68D3DCB922B66CB /* YALContextMenuTableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YALContextMenuTableView.h; path = YALContextMenu/YALContextMenuTableView.h; sourceTree = ""; }; + 7A69D20AEBC89B67DD33CA2CC54E309B /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; + 7A880B37F4F90E6B3CCA1B3FAD582B81 /* Parse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Parse.m; path = Parse/Parse.m; sourceTree = ""; }; + 7B131E3C12FA20F7C590D94EF645128F /* PFNetworkCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkCommand.h; path = Parse/Internal/PFNetworkCommand.h; sourceTree = ""; }; + 7C4ACAFFC579192F80AE309D38F4CE0D /* PFDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDecoder.m; path = Parse/Internal/PFDecoder.m; sourceTree = ""; }; + 7C6969F6DC20ED490487711A80935900 /* PFSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSession.m; path = Parse/PFSession.m; sourceTree = ""; }; + 7C8DC7559A9E804216A7455574ACC2FA /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperationManager.m; path = AFNetworking/AFHTTPRequestOperationManager.m; sourceTree = ""; }; + 7F06EEE3B8D8FE8CE602F2D363FEE64C /* PFCommandResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandResult.h; path = Parse/Internal/PFCommandResult.h; sourceTree = ""; }; + 7F214F1BB9B408A25954535EFA736CA6 /* PFInstallationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationConstants.m; path = Parse/Internal/Installation/Constants/PFInstallationConstants.m; sourceTree = ""; }; 7F59C51782AE555897A5B92D6B3CECD1 /* POPBasicAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPBasicAnimationInternal.h; path = pop/POPBasicAnimationInternal.h; sourceTree = ""; }; - 7FAF3CA5F19C3EB426FBB8AC2A926793 /* PFPushChannelsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushChannelsController.h; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.h; sourceTree = ""; }; - 80F676B2C080DCBC841173D2FC2CBA26 /* PFRESTCloudCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCloudCommand.h; path = Parse/Internal/Commands/PFRESTCloudCommand.h; sourceTree = ""; }; - 8133C4680D6ED2FB7338EF30FC88BBCA /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; - 81397E9A1C30F99B66BB50321A4C5075 /* PFPropertyInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo.h; sourceTree = ""; }; - 82E29BC8D2B7929DF1755FF61A7965EE /* PFPushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushState.m; path = Parse/Internal/Push/State/PFPushState.m; sourceTree = ""; }; + 80678CF83F7E4592403D479266CD73C6 /* PFLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogger.h; path = Parse/Internal/PFLogger.h; sourceTree = ""; }; + 8072BEAB5E3DFBED370817399B610731 /* PFUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserState.m; path = Parse/Internal/User/State/PFUserState.m; sourceTree = ""; }; + 80B7FAB2B889140EDF2DC60D3C4A5969 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; + 810E80DCE80B90D80B5F21BF7212FEFB /* PFSessionUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionUtilities.m; path = Parse/Internal/Session/Utilities/PFSessionUtilities.m; sourceTree = ""; }; + 814B6E4C1E3AEC20607C2A43AADF132B /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; + 81EA6C27FFDF760CFB4767BB48E66220 /* PFInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationController.m; path = Parse/Internal/Installation/Controller/PFInstallationController.m; sourceTree = ""; }; + 82175545FE728571466A9FD6E8D8A7DE /* PFRESTAnalyticsCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTAnalyticsCommand.h; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.h; sourceTree = ""; }; + 82B2F774B2C3F6B000F7B323A1E51571 /* PFMutableACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableACLState.m; path = Parse/Internal/ACL/State/PFMutableACLState.m; sourceTree = ""; }; + 82BCDD60CE06A0870E0ED0D853E05739 /* PFFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile.h; path = Parse/PFFile.h; sourceTree = ""; }; 8336CCF2280C58E6C367DF4EC0EBB7B3 /* POPAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimation.mm; path = pop/POPAnimation.mm; sourceTree = ""; }; - 8357F198915C0DBFE26D33A3CFD62A56 /* PFCloudCodeController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloudCodeController.m; path = Parse/Internal/CloudCode/PFCloudCodeController.m; sourceTree = ""; }; - 840EF1BA3066E61DD0BA27741371AE22 /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; - 84279F3B0C8DD145E9A9E04D59B81C41 /* PFURLConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLConstructor.h; path = Parse/Internal/HTTPRequest/PFURLConstructor.h; sourceTree = ""; }; - 84B340A85871E94B6C963F8AC7AA61A3 /* PFCategoryLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCategoryLoader.h; path = Parse/Internal/PFCategoryLoader.h; sourceTree = ""; }; - 86589D24F969C8D7ABFA2C300F854F18 /* PFCommandURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandURLRequestConstructor.m; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m; sourceTree = ""; }; - 867A8434D57CE1DA9A2FFA7F45002F4D /* PFMutablePushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutablePushState.m; path = Parse/Internal/Push/State/PFMutablePushState.m; sourceTree = ""; }; - 869D3911E9F5718BD0B6815F0AB11EED /* PFACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACLState.m; path = Parse/Internal/ACL/State/PFACLState.m; sourceTree = ""; }; - 86B138E9858EDFEBAA891920A773BB74 /* BFTask+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Private.h"; path = "Parse/Internal/BFTask+Private.h"; sourceTree = ""; }; - 875A9098C4D90F40AE3128DC006E1B98 /* PFURLSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h; sourceTree = ""; }; - 875C18418E320318A1F79B5C8DE9BF08 /* PFDefaultACLController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDefaultACLController.m; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m; sourceTree = ""; }; - 880AE19807FD283D4EB9724F21F4E548 /* PFSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession.h; path = Parse/PFSession.h; sourceTree = ""; }; + 846998BF4B29751792079F5759BBA274 /* PFSQLiteDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase_Private.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h; sourceTree = ""; }; + 8510965E6696177882F8683FF279CA62 /* PFPaymentTransactionObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h; sourceTree = ""; }; + 857A8C29F0006E02894A63C09D31CB85 /* PFAnalyticsUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsUtilities.h; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h; sourceTree = ""; }; + 860D58AD9C905EA188BEF7C2C8B3B2E4 /* PFQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryController.h; path = Parse/Internal/Query/Controller/PFQueryController.h; sourceTree = ""; }; + 8675E8B47522DD1649EAE7CE1299B776 /* PFAnonymousUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousUtils.m; path = Parse/PFAnonymousUtils.m; sourceTree = ""; }; + 869C2B98A84E7A66ED53252EEBD534C7 /* PFHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPRequest.h; path = Parse/Internal/HTTPRequest/PFHTTPRequest.h; sourceTree = ""; }; + 86A60F0A962861AF2DAA6A87C133F7E8 /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; + 86D677D0061394762DEF101FECA5E262 /* PFObjectState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState_Private.h; path = Parse/Internal/Object/State/PFObjectState_Private.h; sourceTree = ""; }; + 876ECCCFCF0B3F87EC5560A2FF6B5059 /* PFRESTUserCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTUserCommand.m; path = Parse/Internal/Commands/PFRESTUserCommand.m; sourceTree = ""; }; 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 8904B6096DEB568855A4A7625ED6CAE1 /* PFObjectBatchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectBatchController.h; path = Parse/Internal/Object/BatchController/PFObjectBatchController.h; sourceTree = ""; }; - 891204204D388D19194E2B25AC4EC9CF /* PFRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState.h; path = Parse/Internal/Relation/State/PFRelationState.h; sourceTree = ""; }; - 8A4BF349F63AC01086486C8E720D05AC /* PFObjectEstimatedData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectEstimatedData.h; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h; sourceTree = ""; }; - 8B5234B11242385CB74EE42A5CBE16D9 /* PFMulticastDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMulticastDelegate.m; path = Parse/Internal/PFMulticastDelegate.m; sourceTree = ""; }; - 8C43426FA34D5469526AAFBD7806A65C /* PFRole.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRole.h; path = Parse/PFRole.h; sourceTree = ""; }; - 8CC4B1CA6C9A2DF20B2C8F69652BC62E /* PFCurrentUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentUserController.h; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.h; sourceTree = ""; }; - 8E5B06286F6DFAD5DAED57C3E9C5400B /* PFMutableObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableObjectState.h; path = Parse/Internal/Object/State/PFMutableObjectState.h; sourceTree = ""; }; + 893348B36B23CFF515B649DF3EA05962 /* PFCachedQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCachedQueryController.h; path = Parse/Internal/Query/Controller/PFCachedQueryController.h; sourceTree = ""; }; + 893F517620D76C4DD97407C35B30C8DC /* PFProduct.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProduct.m; path = Parse/PFProduct.m; sourceTree = ""; }; + 898ECE478F3C854611287289F4977E11 /* PFAnonymousAuthenticationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousAuthenticationProvider.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h; sourceTree = ""; }; + 89A3DB76DA1562634E50BB32E31C34F7 /* PFPushChannelsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushChannelsController.m; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.m; sourceTree = ""; }; + 8A9EB6D7E4926B7E034816F709F1F518 /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLConnectionOperation.h; path = AFNetworking/AFURLConnectionOperation.h; sourceTree = ""; }; + 8AA0E5427E9EFCC96AC0F8CED0FBEEF4 /* PFObjectFilePersistenceController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFilePersistenceController.m; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m; sourceTree = ""; }; + 8BABE1F9D15A2416835BA1EC9EB7E043 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + 8C6B8C7E82B804AB1382E38F8E99158C /* PFCurrentUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentUserController.m; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.m; sourceTree = ""; }; + 8CCBDC7EA64ECE9974D334AA69A02EEA /* PFPushManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushManager.m; path = Parse/Internal/Push/Manager/PFPushManager.m; sourceTree = ""; }; + 8D19EBD75979B9CD23ABA38BA45D0DCB /* PFCurrentConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentConfigController.h; path = Parse/Internal/Config/Controller/PFCurrentConfigController.h; sourceTree = ""; }; + 8E69E884C61DBE3CA50B5B88897651DB /* PFMutableACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableACLState.h; path = Parse/Internal/ACL/State/PFMutableACLState.h; sourceTree = ""; }; 8EC4FC6A3A06D9292C296C691005546B /* POPCustomAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPCustomAnimation.mm; path = pop/POPCustomAnimation.mm; sourceTree = ""; }; - 8EC7BE51CD7D82DB749F5857D70F22F1 /* PFPushUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushUtilities.h; path = Parse/Internal/Push/Utilites/PFPushUtilities.h; sourceTree = ""; }; - 8F6664FFA2E9D3FD4CE7F5A6C742742E /* PFFileStagingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileStagingController.h; path = Parse/Internal/File/Controller/PFFileStagingController.h; sourceTree = ""; }; - 8F97CDDB1431E1D55E17DE205316A5B6 /* PFConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfigController.h; path = Parse/Internal/Config/Controller/PFConfigController.h; sourceTree = ""; }; - 90312FA789CD74048F0D32BCC9C66D08 /* ParseModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseModule.m; path = Parse/Internal/ParseModule.m; sourceTree = ""; }; - 904E4BEABBDE0DE64491D4A2F274F91B /* PFObjectFileCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCoder.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.h; sourceTree = ""; }; + 8EC8E900100484763798A1C6338E9061 /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; + 8F189D28F4E7A0D39192B35D412642BA /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; + 8F270D2F5F74F0965904AC60E014742A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 8F5D0107B7A3A38D5B48854CDBEA6CD3 /* PFTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTaskQueue.h; path = Parse/Internal/PFTaskQueue.h; sourceTree = ""; }; 90DA3C63E9AD758336342BC51C0BB859 /* POPDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDefines.h; path = pop/POPDefines.h; sourceTree = ""; }; - 9142904B7E1F16BB09177E6409AF060F /* PFCloudCodeController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloudCodeController.h; path = Parse/Internal/CloudCode/PFCloudCodeController.h; sourceTree = ""; }; + 9102F91F4F8FC737DF8F8B04EB6B1183 /* PFObjectLocalIdStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectLocalIdStore.m; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m; sourceTree = ""; }; + 91B168BFBEBBF3272A49E4240325DAC3 /* PFRESTQueryCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTQueryCommand.h; path = Parse/Internal/Commands/PFRESTQueryCommand.h; sourceTree = ""; }; + 923EF0E8FAAA93BA1AF9399DE58923FF /* PFObjectConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectConstants.m; path = Parse/Internal/Object/Constants/PFObjectConstants.m; sourceTree = ""; }; 928EC8B9105DA581C7896C2102E87BE2 /* POPCustomAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPCustomAnimation.h; path = pop/POPCustomAnimation.h; sourceTree = ""; }; - 92FCC3E21D3E8790768C5AF6D196F8E6 /* PFRelation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelation.h; path = Parse/PFRelation.h; sourceTree = ""; }; - 931885B870C2D6166C233379707A6DBC /* PFObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectState.m; path = Parse/Internal/Object/State/PFObjectState.m; sourceTree = ""; }; - 9468278E36B3EB05C5CA530058F1C8D6 /* PFURLSessionDataTaskDelegate_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h; sourceTree = ""; }; + 92A56E592AF27DDA726FCE1F4C398C8E /* PFOperationSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOperationSet.m; path = Parse/Internal/Object/OperationSet/PFOperationSet.m; sourceTree = ""; }; + 92C8318F0774CE0DB5B5FA3C7961C69F /* PFInstallationIdentifierStore_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore_Private.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h; sourceTree = ""; }; + 92EFA64DEEA2D7C788D39BE4B87668B0 /* ContextMenu.iOS-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ContextMenu.iOS-Private.xcconfig"; sourceTree = ""; }; + 9357693A996038C30E8C787613239775 /* PFURLSessionJSONDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionJSONDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m; sourceTree = ""; }; + 93F14E13D1AAFFA4C781869593E6A6FF /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; + 946D9742CB5DB1C57ED0E3BBA63E66BD /* PFRESTAnalyticsCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTAnalyticsCommand.m; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.m; sourceTree = ""; }; 94815AA3EE3CBA04CEE85515701AD534 /* POPAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimator.h; path = pop/POPAnimator.h; sourceTree = ""; }; - 95C6F24D93DAFD0A99EFD6D457EB68B1 /* PFURLSessionUploadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionUploadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h; sourceTree = ""; }; + 94DF16E2294CA8FEC9FD2ACF36D38638 /* PFPurchaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseController.m; path = Parse/Internal/Purchase/Controller/PFPurchaseController.m; sourceTree = ""; }; + 94E051272A8A44AC3C51C58EABF97D9F /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; + 9507DB69A2FE53769B24313F98BCFB5B /* PFRESTSessionCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTSessionCommand.m; path = Parse/Internal/Commands/PFRESTSessionCommand.m; sourceTree = ""; }; 96015F1C746803D9318614B277F71BCB /* UnitBezier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UnitBezier.h; path = pop/WebCore/UnitBezier.h; sourceTree = ""; }; + 96403B2BFDB3FEACA24969CF6378D7B3 /* PFCategoryLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCategoryLoader.m; path = Parse/Internal/PFCategoryLoader.m; sourceTree = ""; }; + 9645D0E8258AB75B2C992E0915EA9BC2 /* PFUserConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserConstants.h; path = Parse/Internal/User/Constants/PFUserConstants.h; sourceTree = ""; }; + 965FBA9FA425FE1BA4E41B4FFEE42FA8 /* PFDateFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDateFormatter.h; path = Parse/Internal/PFDateFormatter.h; sourceTree = ""; }; 9663A817A809169745F3F8E987FFE076 /* POPLayerExtras.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPLayerExtras.h; path = pop/POPLayerExtras.h; sourceTree = ""; }; - 97CC9DF74264B1EB7657386C54DD635B /* PFObjectFilePersistenceController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFilePersistenceController.m; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m; sourceTree = ""; }; - 97EDF5367846B0B65AF31CA41D2B7812 /* Parse.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Parse.xcconfig; sourceTree = ""; }; - 99C7C0C503A3D3A88614601190439E30 /* BFTask+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Private.m"; path = "Parse/Internal/BFTask+Private.m"; sourceTree = ""; }; - 9A132496AD1361AB641C6E65067049BF /* PFPropertyInfo_Runtime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Runtime.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h; sourceTree = ""; }; - 9C22BE2BFE0552D4CF4E6F400DCBF925 /* libBolts.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBolts.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 96A60F95EF69292F16C085789B646687 /* PFSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession_Private.h; path = Parse/Internal/Session/PFSession_Private.h; sourceTree = ""; }; + 97ADB30A5976DC7FE832E68A415B22F8 /* PFPropertyInfo_Runtime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo_Runtime.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m; sourceTree = ""; }; + 97D5C73BC159E5CEFA38B5345BB3B77E /* PFPushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState.h; path = Parse/Internal/Push/State/PFPushState.h; sourceTree = ""; }; + 98C44F60AA929307291A20DC790BFEB1 /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; + 994A5F73DF6BF6840DED92DDE2C12AC6 /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperation.m; path = AFNetworking/AFHTTPRequestOperation.m; sourceTree = ""; }; + 9AF96B14E5200CC44AFA17F564FAFCE9 /* BoltsVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BoltsVersion.h; path = Bolts/Common/BoltsVersion.h; sourceTree = ""; }; + 9B3991EEAD0B989CE24DC09DA3F6F84B /* PFPushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushState.m; path = Parse/Internal/Push/State/PFPushState.m; sourceTree = ""; }; 9C3FE18EB564AF4087573DE6F3F2D3D3 /* POPMath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPMath.h; path = pop/POPMath.h; sourceTree = ""; }; - 9C99D12456DCBCCB4B0A98B1D7C33FA9 /* PFAnonymousUtils_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils_Private.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h; sourceTree = ""; }; - 9CCF0135C67AEC40B93D2B426712CFC9 /* PFConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfigController.m; path = Parse/Internal/Config/Controller/PFConfigController.m; sourceTree = ""; }; - 9D4E5CDB238B4708D75EDFA04F2388C5 /* PFDateFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDateFormatter.h; path = Parse/Internal/PFDateFormatter.h; sourceTree = ""; }; + 9CB47EA89DC2B49C7B2B12127098FB33 /* PFURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h; sourceTree = ""; }; 9DA58C3428E2A0E2F88C2A0522297274 /* POPAnimationTracerInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationTracerInternal.h; path = pop/POPAnimationTracerInternal.h; sourceTree = ""; }; - 9DB1B89CDD385F67E440201640C7AFA4 /* PFSessionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionController.h; path = Parse/Internal/Session/Controller/PFSessionController.h; sourceTree = ""; }; - 9DF9D409D2807A34B747777E2DC97F14 /* PFOperationSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOperationSet.m; path = Parse/Internal/Object/OperationSet/PFOperationSet.m; sourceTree = ""; }; - 9E9FF91DD2DCE7D504DE6C0AC9CE6091 /* PFQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState.h; path = Parse/Internal/Query/State/PFQueryState.h; sourceTree = ""; }; - 9ED7955943D662DC1DC137B29185582D /* PFPushState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState_Private.h; path = Parse/Internal/Push/State/PFPushState_Private.h; sourceTree = ""; }; + 9EAF2A823E92A730EC588801D943C514 /* PFSQLiteDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabase.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m; sourceTree = ""; }; 9F210DEEA777E0BF1995DC3570CC616E /* POPAnimationEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationEvent.h; path = pop/POPAnimationEvent.h; sourceTree = ""; }; - 9F3472D80F0C7C53B06E64DD4D56B74D /* PFAnonymousUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils.h; path = Parse/PFAnonymousUtils.h; sourceTree = ""; }; - 9F3E10B801DC1EAB7C18648EA922D183 /* PFObjectState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState_Private.h; path = Parse/Internal/Object/State/PFObjectState_Private.h; sourceTree = ""; }; - A0F125F4185CBFE9AD59CB8DA8774D62 /* Parse-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Parse-dummy.m"; sourceTree = ""; }; - A12B04A764E33DA1C04C5C989B5C536C /* PFCloud.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloud.h; path = Parse/PFCloud.h; sourceTree = ""; }; + 9F519C682C4E52952D376F5423040E5B /* PFRESTConfigCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTConfigCommand.m; path = Parse/Internal/Commands/PFRESTConfigCommand.m; sourceTree = ""; }; + A011CA3F808702224552F151CBB37A51 /* ParseModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseModule.m; path = Parse/Internal/ParseModule.m; sourceTree = ""; }; + A09F4FD4303453124FB9D4870DDE2F0C /* PFGeoPointPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPointPrivate.h; path = Parse/Internal/PFGeoPointPrivate.h; sourceTree = ""; }; A19FD133843D5FCF16B8AF3B4E165515 /* POPMath.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPMath.mm; path = pop/POPMath.mm; sourceTree = ""; }; - A266244911A0F90CFC3A6FF419F3140D /* PFInstallationIdentifierStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationIdentifierStore.m; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m; sourceTree = ""; }; - A2E0CCEE8F29A9378B50A30B3F234FB8 /* PFErrorUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFErrorUtilities.m; path = Parse/Internal/PFErrorUtilities.m; sourceTree = ""; }; - A39433C5B2CFE6011222CBB72F0EAE5C /* PFRESTFileCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTFileCommand.m; path = Parse/Internal/Commands/PFRESTFileCommand.m; sourceTree = ""; }; + A1B4C9A06FB08BC3FE354D588CD09AF7 /* PFSQLiteStatement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteStatement.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m; sourceTree = ""; }; + A250843CDACF4CC56A8C27C4FDF9C270 /* PFFieldOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperation.h; path = Parse/Internal/FieldOperation/PFFieldOperation.h; sourceTree = ""; }; + A28218952E226A9395672AAF9BB98065 /* PFCommandCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache_Private.h; path = Parse/Internal/PFCommandCache_Private.h; sourceTree = ""; }; + A2BD31107881F3881ADCD378256D4B02 /* PFUserFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserFileCodingLogic.h; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h; sourceTree = ""; }; + A2C302E4C6109CA0666CE25D782C9766 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; + A3A5889AC5CCB95EF1C4DD6B7C5C930D /* PFUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUser.m; path = Parse/PFUser.m; sourceTree = ""; }; + A3A9D34733E3E1E62E950164A6B84C80 /* PFAnalytics_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics_Private.h; path = Parse/Internal/Analytics/PFAnalytics_Private.h; sourceTree = ""; }; + A3DF42FD99A813DEBC5C62B3491B1AC0 /* PFURLSessionDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m; sourceTree = ""; }; A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libpop.a; sourceTree = BUILT_PRODUCTS_DIR; }; - A5C0755A44D6605CF4BE2DFE2EDE1D86 /* PFMutableQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableQueryState.m; path = Parse/Internal/Query/State/PFMutableQueryState.m; sourceTree = ""; }; - A666132F7688CB58789BC9FFAE5AB614 /* PFACLState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState_Private.h; path = Parse/Internal/ACL/State/PFACLState_Private.h; sourceTree = ""; }; - A69CE4C29C33C8B3AEC1E73E847A4197 /* PFDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDecoder.m; path = Parse/Internal/PFDecoder.m; sourceTree = ""; }; - A6F717725F4394E95525ABAFB9F33DB2 /* PFAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalytics.m; path = Parse/PFAnalytics.m; sourceTree = ""; }; - A7B5535D819421EFD2C8509D19D9430E /* BoltsVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BoltsVersion.h; path = Bolts/Common/BoltsVersion.h; sourceTree = ""; }; - A7BDDE2CC83877DFC9CF1466C53CB68D /* PFDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDataProvider.h; path = Parse/Internal/PFDataProvider.h; sourceTree = ""; }; - A88229973FC49C97305F3F69622999F1 /* libParse.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libParse.a; sourceTree = BUILT_PRODUCTS_DIR; }; - A8D4C658312EAAA8ACC1463D1135ADCA /* PFNetworkCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkCommand.h; path = Parse/Internal/PFNetworkCommand.h; sourceTree = ""; }; - A9725E3A84362C8B373DA1D0A052B2CB /* PFObjectSubclassInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassInfo.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m; sourceTree = ""; }; - A9B5F4ADDFA617FF96FED75084262625 /* PFConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfig.m; path = Parse/PFConfig.m; sourceTree = ""; }; - AB1ABA6EB2984DFC25350DF75335526F /* PFUserState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState_Private.h; path = Parse/Internal/User/State/PFUserState_Private.h; sourceTree = ""; }; - ABF7E63586A26C19233745BAFC155684 /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; - AD088079F8066DB0050C23252546389D /* PFKeyValueCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache.h; sourceTree = ""; }; - AD0E30A8555AA525BA9AFC45114E9002 /* PFMutableQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableQueryState.h; path = Parse/Internal/Query/State/PFMutableQueryState.h; sourceTree = ""; }; - AD3CB420E4A0D3570A166616F7BC779E /* PFQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQuery.m; path = Parse/PFQuery.m; sourceTree = ""; }; - AEB7E49E278592D89DD351ACEB1287FA /* PFUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserController.m; path = Parse/Internal/User/Controller/PFUserController.m; sourceTree = ""; }; - AFBDA3EF95CECEB449D3303D17FA28C2 /* PFURLConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLConstructor.m; path = Parse/Internal/HTTPRequest/PFURLConstructor.m; sourceTree = ""; }; + A52CE45BD75B2826314A3BCDCB813398 /* PFObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObject.h; path = Parse/PFObject.h; sourceTree = ""; }; + A5849314580BC3F82E4A799104E87FE3 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; + A60A05A0392E32822607D587C5380E61 /* PFSQLiteDatabaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseController.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h; sourceTree = ""; }; + A60CF5CEA93C2F6926C54CA3679A1556 /* PFPushPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushPrivate.h; path = Parse/Internal/Push/PFPushPrivate.h; sourceTree = ""; }; + A63FC1750D756C077EBF6610F23A216B /* PFKeyValueCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache_Private.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h; sourceTree = ""; }; + A6EBD847848C1C85F961433CE4F102A3 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; + A6F04B61FAF09E9538B3AF6FD9536DC4 /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperation.h; path = AFNetworking/AFHTTPRequestOperation.h; sourceTree = ""; }; + A72A7753E28C0B037F3759A7CB7DC9CB /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; + A78F4615CC1292D0FA53088C626957D8 /* PFSQLiteDatabaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseController.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m; sourceTree = ""; }; + A89E8441EF384E751C66846D8C7DA140 /* PFRESTPushCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTPushCommand.m; path = Parse/Internal/Commands/PFRESTPushCommand.m; sourceTree = ""; }; + A8AD04541066E8C429FCD51E8A604FF1 /* PFInstallationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationPrivate.h; path = Parse/Internal/Installation/PFInstallationPrivate.h; sourceTree = ""; }; + A988AADA8AE3AFF34F68D1673691E59A /* PFObjectUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectUtilities.m; path = Parse/Internal/Object/Utilities/PFObjectUtilities.m; sourceTree = ""; }; + AA0EFB7BECF9EB8E71FD258F0F60D3E5 /* PFPinningEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningEventuallyQueue.h; path = Parse/Internal/PFPinningEventuallyQueue.h; sourceTree = ""; }; + AA5D3771AE76625915E333CFABB45A05 /* PFURLSessionUploadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionUploadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m; sourceTree = ""; }; + AAAE696C714BEA1FD2CB7F7E37484204 /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; + AC3758631123BBA424D0C687A75ED31C /* PFInstallationIdentifierStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h; sourceTree = ""; }; + AC7F1FE520C94B33E628A5BF7D802073 /* PFErrorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFErrorUtilities.h; path = Parse/Internal/PFErrorUtilities.h; sourceTree = ""; }; + AD274DB5984402947E47F0A1B92E9CA4 /* PFFileStagingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileStagingController.h; path = Parse/Internal/File/Controller/PFFileStagingController.h; sourceTree = ""; }; + AD9250D9FE4979DF37C24BE1CDB4FF8B /* PFUserAuthenticationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserAuthenticationController.m; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m; sourceTree = ""; }; + ADEFE34C92FF818B135715C323E4963C /* PFObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObject.m; path = Parse/PFObject.m; sourceTree = ""; }; + AE0BE1F355DE44ECCAEA5BF8D4526C5A /* PFURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSession.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m; sourceTree = ""; }; + AE87F34D52CD28E7113F03F7CEA01F06 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + AE96E6223940CD70D6F01EA288192D93 /* PFGeoPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPoint.h; path = Parse/PFGeoPoint.h; sourceTree = ""; }; + B024D2C96D819E81E5D194B562CA7CCF /* PFOfflineObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineObjectController.h; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h; sourceTree = ""; }; B0CE575CDDE0B1795BB8B88E0B49ACA0 /* POPDecayAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDecayAnimationInternal.h; path = pop/POPDecayAnimationInternal.h; sourceTree = ""; }; + B0D0D5C8FF6EA31C0E29554F03FFAE35 /* PFEncoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEncoder.m; path = Parse/Internal/PFEncoder.m; sourceTree = ""; }; + B0E75CCDD1A5217E3601BF092D5385C1 /* PFOfflineStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineStore.m; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m; sourceTree = ""; }; B0F7BCEE9A871E1193D694931FA31E17 /* POPDecayAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDecayAnimation.h; path = pop/POPDecayAnimation.h; sourceTree = ""; }; - B113FA8703C60024B8FBA20DFB21B744 /* PFKeyValueCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache_Private.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h; sourceTree = ""; }; - B2256E19F54D3528053251E979C5257B /* PFPush.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPush.h; path = Parse/PFPush.h; sourceTree = ""; }; - B23ED4E70AA813C755E036B0600606FA /* PFEventuallyQueue_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue_Private.h; path = Parse/Internal/PFEventuallyQueue_Private.h; sourceTree = ""; }; - B26254ACE198AC611B2797250DAECDFA /* PFCommandResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandResult.m; path = Parse/Internal/PFCommandResult.m; sourceTree = ""; }; - B2CC06448183660D517225325BC1F93A /* PFTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTaskQueue.h; path = Parse/Internal/PFTaskQueue.h; sourceTree = ""; }; - B322FB271A210C27577B6EAD8C5062CC /* PFObjectUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectUtilities.h; path = Parse/Internal/Object/Utilities/PFObjectUtilities.h; sourceTree = ""; }; + B1483642455FE93A36C64B730F27BCD1 /* PFOperationSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOperationSet.h; path = Parse/Internal/Object/OperationSet/PFOperationSet.h; sourceTree = ""; }; + B1D6FB68F1851036506A1E965B20FBD5 /* PFPropertyInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo.m; sourceTree = ""; }; + B1E9EC0D78FBC6373DBD668B202BBA25 /* PFPushController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushController.m; path = Parse/Internal/Push/Controller/PFPushController.m; sourceTree = ""; }; + B2586CEB4DB20E7AED5EBFD3FB96B973 /* PFMutablePushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutablePushState.h; path = Parse/Internal/Push/State/PFMutablePushState.h; sourceTree = ""; }; B330BCF969EF6189E02E10926FB95CED /* POPGeometry.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPGeometry.mm; path = pop/POPGeometry.mm; sourceTree = ""; }; - B3814B9487A8A8F8F9A04F510A6B3AC5 /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; - B41C5D6C197E0FDC6E5D8533A0C1CE95 /* PFCurrentObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentObjectControlling.h; path = Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h; sourceTree = ""; }; - B431D27F0705F097E581263224EF8C88 /* PFPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPin.m; path = Parse/Internal/LocalDataStore/Pin/PFPin.m; sourceTree = ""; }; - B6D07518E33FDE1A7B76FABCCABCBCD6 /* PFRelationState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState_Private.h; path = Parse/Internal/Relation/State/PFRelationState_Private.h; sourceTree = ""; }; - B6EFD05D2D5F7A4F89CDF5EA8E64F2DE /* PFSQLiteDatabaseResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseResult.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h; sourceTree = ""; }; - B745F5094B240A7BD83E4F246A86BBD8 /* PFUserConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserConstants.m; path = Parse/Internal/User/Constants/PFUserConstants.m; sourceTree = ""; }; - B80259DBA1A3ADC7CA8707C772EB8531 /* PFBaseState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBaseState.m; path = Parse/Internal/PFBaseState.m; sourceTree = ""; }; - B962D108140D96784FC828D86963E605 /* PFReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFReachability.m; path = Parse/Internal/PFReachability.m; sourceTree = ""; }; + B332CC51A8213F3EF1C7A3FE399A5C2B /* PFACL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACL.h; path = Parse/PFACL.h; sourceTree = ""; }; + B3F7FC9A375F4CC184EF1CB84FFF2E2F /* PFRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState.h; path = Parse/Internal/Relation/State/PFRelationState.h; sourceTree = ""; }; + B58A5A84AAAEBE1A391E99E9CAED0FF2 /* PFMutableObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableObjectState.h; path = Parse/Internal/Object/State/PFMutableObjectState.h; sourceTree = ""; }; + B627B86FB20866D18CE3E2A40FF283B7 /* PFACLPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLPrivate.h; path = Parse/Internal/ACL/PFACLPrivate.h; sourceTree = ""; }; + B65D4C06593414E001B75B30C7A68F64 /* PFDefaultACLController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDefaultACLController.h; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h; sourceTree = ""; }; + B7C407A664499E7354D9C1CCDB113A59 /* PFQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryState.m; path = Parse/Internal/Query/State/PFQueryState.m; sourceTree = ""; }; + B7E18330D5E87E2825CE1B429D6F6693 /* PFObjectPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectPrivate.h; path = Parse/Internal/Object/PFObjectPrivate.h; sourceTree = ""; }; + B86F68BE12DD9BF16FA4EA2B8D7C6F99 /* pop.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = pop.xcconfig; sourceTree = ""; }; + B94497EF1A56D3F72FD2BA76060DF1EE /* PFACL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACL.m; path = Parse/PFACL.m; sourceTree = ""; }; + BA10EEFBDA4AD314FB6D71B9DBD76FB7 /* PFWeakValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFWeakValue.h; path = Parse/Internal/PFWeakValue.h; sourceTree = ""; }; BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - BA75D0EC4C508481F47EA13B39766654 /* PFInternalUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInternalUtils.h; path = Parse/Internal/PFInternalUtils.h; sourceTree = ""; }; - BA7F7022FC278524B2BE48AD1759AF42 /* PFFileDataStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileDataStream.m; path = Parse/Internal/File/FileDataStream/PFFileDataStream.m; sourceTree = ""; }; - BC0C8A8C41DC1963D695265153E23911 /* PFQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryController.h; path = Parse/Internal/Query/Controller/PFQueryController.h; sourceTree = ""; }; - BC33018672D1C57CFC91D822DB867582 /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; - BE2646A9566B3A11A2F19AA8D5D15E62 /* PFMutableUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableUserState.m; path = Parse/Internal/User/State/PFMutableUserState.m; sourceTree = ""; }; - BEA3D87AE012FEF7F6B48E6F0D5F09F7 /* PFOfflineQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryController.m; path = Parse/Internal/Query/Controller/PFOfflineQueryController.m; sourceTree = ""; }; - BEDAC2F484B73C71F6B8E48C5B6FCB76 /* PFCommandURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandURLRequestConstructor.h; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h; sourceTree = ""; }; - BF198CCAD2E6C2AE39D8BF68464A93CB /* PFUserPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserPrivate.h; path = Parse/Internal/User/PFUserPrivate.h; sourceTree = ""; }; + BA733732E0D2D37C0A92D946DE2A9EEE /* PFKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeychainStore.h; path = Parse/Internal/PFKeychainStore.h; sourceTree = ""; }; + BA8D893893775B109603AF7A33CD563B /* PFURLSessionFileDownloadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionFileDownloadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m; sourceTree = ""; }; + BB019CE2BDFE6EC36FCD9993DB744EFA /* PFUserAuthenticationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationController.h; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h; sourceTree = ""; }; + BB51AB9AA27CE8D0A85E5690F23CF6EA /* PFCategoryLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCategoryLoader.h; path = Parse/Internal/PFCategoryLoader.h; sourceTree = ""; }; + BBEDFD1C6F661507D70B9C73268193B3 /* PFPushManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushManager.h; path = Parse/Internal/Push/Manager/PFPushManager.h; sourceTree = ""; }; + BBFE8A0106C591064C969ED096275D29 /* PFOfflineQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryController.h; path = Parse/Internal/Query/Controller/PFOfflineQueryController.h; sourceTree = ""; }; + BCC77513019B8BF9A882928F74C52424 /* PFSubclassing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSubclassing.h; path = Parse/PFSubclassing.h; sourceTree = ""; }; + BD2D7F17F9C540FBFE58E4DB0EEBDC9A /* libParse.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libParse.a; sourceTree = BUILT_PRODUCTS_DIR; }; + BE9F74FE3902C79E0394988E24194855 /* PFQueryUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryUtilities.m; path = Parse/Internal/Query/Utilities/PFQueryUtilities.m; sourceTree = ""; }; + BEAFE0D908EC855629B1121D957A354A /* ParseModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseModule.h; path = Parse/Internal/ParseModule.h; sourceTree = ""; }; BF59BC15D23E1E1912C8F334E7236813 /* Pods-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-acknowledgements.plist"; sourceTree = ""; }; - BF89107C38CFD5E5770EC87A79813462 /* ParseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseManager.m; path = Parse/Internal/ParseManager.m; sourceTree = ""; }; - BFDC9A22A2A96279B4BDF17190E2A775 /* PFRESTUserCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTUserCommand.h; path = Parse/Internal/Commands/PFRESTUserCommand.h; sourceTree = ""; }; - C0239D4A0C4788EB654381F621134ACB /* PFAsyncTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAsyncTaskQueue.h; path = Parse/Internal/PFAsyncTaskQueue.h; sourceTree = ""; }; + BF99C2FE0ABD09A876B4FDC3B73D693D /* PFAnalyticsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsController.h; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.h; sourceTree = ""; }; + BF9B1FD5D1E2441D018DF7EDDDC4A3FC /* PFObjectSubclassInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassInfo.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h; sourceTree = ""; }; + BFBC36D6FED37ED769BA66522F1A639F /* PFFieldOperationDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperationDecoder.m; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.m; sourceTree = ""; }; + C01AC5406A1FE996C23D44F2D1E54AE2 /* PFInstallationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationConstants.h; path = Parse/Internal/Installation/Constants/PFInstallationConstants.h; sourceTree = ""; }; C091E831068E3E504A40AC6932B39C87 /* FloatConversion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FloatConversion.h; path = pop/WebCore/FloatConversion.h; sourceTree = ""; }; C0DF3C83EBC5F7BF6DAAACEBD7D72791 /* POPAnimationEvent.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationEvent.mm; path = pop/POPAnimationEvent.mm; sourceTree = ""; }; - C0F939B16AC0EFB29DA8BB09980593E3 /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; - C13F91216CB47F63D6B60866FDDC2E12 /* PFLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogger.h; path = Parse/Internal/PFLogger.h; sourceTree = ""; }; + C124801645AB37C7712D483A5C87D83D /* PFLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogger.m; path = Parse/Internal/PFLogger.m; sourceTree = ""; }; + C1555BCE0D8C4B718BB72214683D3907 /* PFCloudCodeController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloudCodeController.h; path = Parse/Internal/CloudCode/PFCloudCodeController.h; sourceTree = ""; }; C1B6A53BFD919966B87CD6FBFD89CE1B /* POPAnimationExtras.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationExtras.h; path = pop/POPAnimationExtras.h; sourceTree = ""; }; C1E27C3CBB149C1873F6CDC55D998CE2 /* POPAnimationTracer.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationTracer.mm; path = pop/POPAnimationTracer.mm; sourceTree = ""; }; C24554FAA71D841BC3C0759DA37874AE /* POPSpringAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPSpringAnimation.mm; path = pop/POPSpringAnimation.mm; sourceTree = ""; }; - C2884D9AD4EDF5B53F05C2631989A495 /* PFObjectConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectConstants.h; path = Parse/Internal/Object/Constants/PFObjectConstants.h; sourceTree = ""; }; - C3FEE284F1A3A64929DAC57EF28FBEA2 /* PFRESTUserCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTUserCommand.m; path = Parse/Internal/Commands/PFRESTUserCommand.m; sourceTree = ""; }; - C439FB0D5070895D69861DE4654C8D25 /* PFEventuallyPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyPin.m; path = Parse/Internal/PFEventuallyPin.m; sourceTree = ""; }; - C55B1243D9ED528D2D7760513B4D0FB2 /* Parse-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Parse-Private.xcconfig"; sourceTree = ""; }; + C3E92FDA0225F57156353438BB9F934B /* ContextMenu.iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ContextMenu.iOS-dummy.m"; sourceTree = ""; }; + C40DDFB915A319DD1CC8CD9340920EFF /* PFURLSessionJSONDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionJSONDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h; sourceTree = ""; }; + C452DCF65E6EEC6AD15BD77F01EDF779 /* PFInternalUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInternalUtils.h; path = Parse/Internal/PFInternalUtils.h; sourceTree = ""; }; + C4F300D4AA623B3DFFDF7971E2B5A614 /* PFProduct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProduct.h; path = Parse/PFProduct.h; sourceTree = ""; }; + C5560C46514764C06929B264B533F518 /* UIView+YALConstraints.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+YALConstraints.m"; path = "YALContextMenu/UIView+YALConstraints.m"; sourceTree = ""; }; C560616DDF5273CF7C53EF72EA6ED45A /* POPDecayAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPDecayAnimation.mm; path = pop/POPDecayAnimation.mm; sourceTree = ""; }; - C65B577617E60D4DCA6671103F519E4B /* PFSessionUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionUtilities.h; path = Parse/Internal/Session/Utilities/PFSessionUtilities.h; sourceTree = ""; }; - C6930DD80530DC03DCEC33CA1BE24BE7 /* PFURLSessionCommandRunner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h; sourceTree = ""; }; - C9076753B0A2E12983ECEFBE60C6E4A3 /* PFRelationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationPrivate.h; path = Parse/Internal/Relation/PFRelationPrivate.h; sourceTree = ""; }; + C5FE3CDD5FB245BC2913E868E9DE3995 /* PFRESTSessionCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTSessionCommand.h; path = Parse/Internal/Commands/PFRESTSessionCommand.h; sourceTree = ""; }; + C609AF7E1C4CAC8BDE38A1E28E64414A /* PFInstallationIdentifierStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationIdentifierStore.m; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m; sourceTree = ""; }; + C61F3C1B791FFC9E7C5ADE180684470E /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; + C7C65DD82B3A08F62D43E9DAC3B23880 /* PFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkActivityIndicatorManager.h; path = Parse/PFNetworkActivityIndicatorManager.h; sourceTree = ""; }; C9565C73D5D4BE79747E60DCF1557E71 /* POPAnimatableProperty.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimatableProperty.mm; path = pop/POPAnimatableProperty.mm; sourceTree = ""; }; - C96C8283235BCEAFB2B6F132CE911578 /* PFPushManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushManager.h; path = Parse/Internal/Push/Manager/PFPushManager.h; sourceTree = ""; }; - CA74286D523103A7357250A458466DC3 /* PFCurrentUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentUserController.m; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.m; sourceTree = ""; }; - CB36CF9B5806A0332F9E4955152BC86E /* PFFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile.h; path = Parse/PFFile.h; sourceTree = ""; }; - CB69D67914ACB9C94D9D8340F8255A72 /* PFURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSession.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m; sourceTree = ""; }; - CB8189117D5A0D245487C3423D73727D /* PFQueryUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryUtilities.m; path = Parse/Internal/Query/Utilities/PFQueryUtilities.m; sourceTree = ""; }; - CBA0A5B0F0E83001148599CCEC105E79 /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; - CC952D982119E3AE1061314E2B7C35D4 /* PFInstallationIdentifierStore_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore_Private.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h; sourceTree = ""; }; - CD24A497637B97FB13D87D8C73E642D5 /* ParseInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseInternal.h; path = Parse/Internal/ParseInternal.h; sourceTree = ""; }; - CE37BCDB0808A581D8F23138D5B2B412 /* PFUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUser.h; path = Parse/PFUser.h; sourceTree = ""; }; - CE510ACC52FD7B52F382F765AA7C38D6 /* PFGeoPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPoint.h; path = Parse/PFGeoPoint.h; sourceTree = ""; }; - CEC32F2ED903D3546EEEA22AC6E13F4E /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; - CEFF62A508184DE729502142858C6AAA /* PFCoreManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreManager.h; path = Parse/Internal/PFCoreManager.h; sourceTree = ""; }; - CF3B2B472A7B4B67DF8D50DADB4DBF03 /* PFACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState.h; path = Parse/Internal/ACL/State/PFACLState.h; sourceTree = ""; }; - CF75EB65BC1D473202CD8BD2F8F9879C /* PFCommandCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache.h; path = Parse/Internal/PFCommandCache.h; sourceTree = ""; }; - CFA6C4B46A860F2290E2C9F4AFAADFB9 /* PFInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallation.h; path = Parse/PFInstallation.h; sourceTree = ""; }; - D0F22730A2A2917C6F9777B1BF5F179D /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = Parse/Resources/en.lproj; sourceTree = ""; }; - D151C7604325CAC5209D9944C99E592A /* PFUserAuthenticationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserAuthenticationController.m; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m; sourceTree = ""; }; - D1F61BF57518F0154F82CEF764C0F35D /* PFGeoPointPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPointPrivate.h; path = Parse/Internal/PFGeoPointPrivate.h; sourceTree = ""; }; - D22939E9625B5D422EC6E479E7048771 /* PFPushUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushUtilities.m; path = Parse/Internal/Push/Utilites/PFPushUtilities.m; sourceTree = ""; }; - D342B7DAEB7FE6F3E3110ABADFD54C09 /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; - D3568213E494C4CA6E3B00B07B2AC4E4 /* PFAnalyticsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsController.h; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.h; sourceTree = ""; }; - D3F6C6FD6DBA4896546009DD948AE020 /* PFFieldOperationDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperationDecoder.m; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.m; sourceTree = ""; }; - D52AB7265F316C1F4B4C5881D8EA52DC /* PFRESTCommand_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand_Private.h; path = Parse/Internal/Commands/PFRESTCommand_Private.h; sourceTree = ""; }; - D552CBB2BF4CC751787C15E7A7B176DF /* PFOfflineQueryLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryLogic.h; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h; sourceTree = ""; }; - D5A05A4C5F9BA9C066877A324EE3B697 /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; + C9BD34A121ED46D7A11BF5ED82E5B876 /* PFEventuallyPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyPin.m; path = Parse/Internal/PFEventuallyPin.m; sourceTree = ""; }; + CA572C4AE94CB9AC2FF8EE80A7E1179F /* PFEventuallyQueue_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue_Private.h; path = Parse/Internal/PFEventuallyQueue_Private.h; sourceTree = ""; }; + CA70C152E8EBE75160C47A587C7EC00D /* PFMultiProcessFileLockController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLockController.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h; sourceTree = ""; }; + CAB37E3012ED80BEB1BCF0077E7E38F4 /* PFAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalytics.m; path = Parse/PFAnalytics.m; sourceTree = ""; }; + CB4444A178F9CEC2E097C90C7D351E7F /* PFRESTObjectCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectCommand.h; path = Parse/Internal/Commands/PFRESTObjectCommand.h; sourceTree = ""; }; + CBCE01FE706B02A990236BCCFB09B153 /* PFProduct+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFProduct+Private.h"; path = "Parse/Internal/Product/PFProduct+Private.h"; sourceTree = ""; }; + CBE1F1F92C05B5ADE677C606485BB75F /* PFReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFReachability.m; path = Parse/Internal/PFReachability.m; sourceTree = ""; }; + CC332C397ADA56AB76FB706A0ABF83E5 /* Parse-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-prefix.pch"; sourceTree = ""; }; + CCFA76D1938B2CCED5785C13FA4FC5B8 /* PFObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController.h; path = Parse/Internal/Object/Controller/PFObjectController.h; sourceTree = ""; }; + CDAC0B9AE144C31E2DE5AF0A4DB1EDC4 /* PFURLSessionCommandRunner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h; sourceTree = ""; }; + CDE463E6B9D1AF8E6AE850CD5E68849F /* PFObjectSubclassingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassingController.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h; sourceTree = ""; }; + CEB9D45B957B79F1459ABF1E81F01530 /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; + CF335AC7E0E6EE3DD820467124C2102D /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; + CF35E714DE566F845ECEDF6AE894C5F0 /* PFSessionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionController.m; path = Parse/Internal/Session/Controller/PFSessionController.m; sourceTree = ""; }; + CF46F6E5A7E52A35C89851DED33A2176 /* PFDateFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDateFormatter.m; path = Parse/Internal/PFDateFormatter.m; sourceTree = ""; }; + CF774A16F869C80126A81687EB1E85D6 /* libBolts.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBolts.a; sourceTree = BUILT_PRODUCTS_DIR; }; + CFC48C77C63A582B14A5B098E6FCF482 /* PFURLSessionFileDownloadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionFileDownloadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h; sourceTree = ""; }; + D0D0DD7229B595E60BA7D6C2A41C4B6B /* PFCommandURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandURLRequestConstructor.m; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m; sourceTree = ""; }; + D0E74CB04A2E39384A95EDA3500A04D2 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; + D15D922CCB9D2F0B65F44C7FBFE53EBC /* PFRelationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationPrivate.h; path = Parse/Internal/Relation/PFRelationPrivate.h; sourceTree = ""; }; + D244FD9C2061C46A05C67E3557A6D7A9 /* PFRESTPushCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTPushCommand.h; path = Parse/Internal/Commands/PFRESTPushCommand.h; sourceTree = ""; }; + D26D8AB91D60CAC4AF163A949239DE49 /* PFRelation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelation.h; path = Parse/PFRelation.h; sourceTree = ""; }; + D3E8D0F342FFF167540A96E017CCF674 /* PFFileState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState_Private.h; path = Parse/Internal/File/State/PFFileState_Private.h; sourceTree = ""; }; + D4186E5938E4D869A1267A20AC002113 /* PFConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfigController.h; path = Parse/Internal/Config/Controller/PFConfigController.h; sourceTree = ""; }; + D4EBEE47CEE4A7801385DB1D8C88383E /* PFKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeychainStore.m; path = Parse/Internal/PFKeychainStore.m; sourceTree = ""; }; D5CE48778301C24CD288B08DDA441605 /* POPVector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPVector.h; path = pop/POPVector.h; sourceTree = ""; }; - D639AB7043CB6DA1A6BE3D49D7D9368B /* PFObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState.h; path = Parse/Internal/Object/State/PFObjectState.h; sourceTree = ""; }; - D77774D5F665986858DAD577093BF4F4 /* PFRESTObjectBatchCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectBatchCommand.m; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.m; sourceTree = ""; }; - D8851833E5439BBC098DCCB68455E8D8 /* PFPinningObjectStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningObjectStore.m; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.m; sourceTree = ""; }; - D9AD8A2E0B442B2597A5EFD99859CE70 /* PFUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserState.m; path = Parse/Internal/User/State/PFUserState.m; sourceTree = ""; }; - D9F83A22B0271BB18AA8680451C70138 /* PFProduct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProduct.h; path = Parse/PFProduct.h; sourceTree = ""; }; - DC04CA70DD902C38FD430C17D4244E92 /* PFPushController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushController.h; path = Parse/Internal/Push/Controller/PFPushController.h; sourceTree = ""; }; - DC21BCC836700655FF0FC5118F41587C /* PFPropertyInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo.m; sourceTree = ""; }; - DD2E7D85EAE9D93FB3EB497EE098D0E2 /* PFAnalyticsUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsUtilities.h; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h; sourceTree = ""; }; - DDEB176EF3964EAF1E91BFCA999AC383 /* PFSessionUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionUtilities.m; path = Parse/Internal/Session/Utilities/PFSessionUtilities.m; sourceTree = ""; }; - DED2ECAD15A2BED79633C019904DB280 /* PFACL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACL.m; path = Parse/PFACL.m; sourceTree = ""; }; - DEEC86611B8BC477AFEF42C162C7DEC7 /* PFMutablePushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutablePushState.h; path = Parse/Internal/Push/State/PFMutablePushState.h; sourceTree = ""; }; - DEF74DE469E28BE80197C43305F5C003 /* PFSQLiteDatabaseResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseResult.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m; sourceTree = ""; }; - DFD8D064D883A41B1432E94742A1A879 /* PFSQLiteDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase_Private.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h; sourceTree = ""; }; - E09AFB4E5EAB3E98F681BBBEE934776D /* PFErrorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFErrorUtilities.h; path = Parse/Internal/PFErrorUtilities.h; sourceTree = ""; }; - E342EB169F41501EE41BB76D5CA176D6 /* PFOfflineStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineStore.m; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m; sourceTree = ""; }; - E3C0AB42ACF3767DE19D18A31901BC94 /* PFObjectSubclassingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassingController.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m; sourceTree = ""; }; - E3ED5AFB7A3B2DC03C1D116039A73C3C /* PFObjectSubclassInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassInfo.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h; sourceTree = ""; }; - E5331787DAA3B52CEE076DC2B62A6100 /* PFObjectFileCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCoder.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.m; sourceTree = ""; }; - E56771AE10D1052EB22D63A1F7631599 /* Parse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Parse.m; path = Parse/Parse.m; sourceTree = ""; }; - E64CFDC86F7294DC0F63391554852CAD /* PFSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession_Private.h; path = Parse/Internal/Session/PFSession_Private.h; sourceTree = ""; }; - E6EC9018A6A5F9DC5F956E06A0A1DA5D /* PFInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationController.h; path = Parse/Internal/Installation/Controller/PFInstallationController.h; sourceTree = ""; }; - E7CDC14FF480C0D409AF7711FADC9DF1 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + D5CF558DFE9FECD0D4DAD9727F9E7447 /* PFMutableObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableObjectState.m; path = Parse/Internal/Object/State/PFMutableObjectState.m; sourceTree = ""; }; + D8AA77C187E180A556AF4ADA309BC0B6 /* PFOfflineObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineObjectController.m; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m; sourceTree = ""; }; + D8CEAB9CDED9C3CA1445D6F3DAF05029 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; + D93333F49B10A154028722630A69414C /* PFFieldOperationDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperationDecoder.h; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.h; sourceTree = ""; }; + D963AA70AF8A60F226D09FBC6225E686 /* PFThreadsafety.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFThreadsafety.h; path = Parse/Internal/ThreadSafety/PFThreadsafety.h; sourceTree = ""; }; + D973AF50D37829E5A629A80ED88FF2E9 /* PFRESTObjectBatchCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectBatchCommand.h; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.h; sourceTree = ""; }; + DA4157CE1B57DF0CDF63B24888DCEA61 /* PFObjectSubclassingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassingController.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m; sourceTree = ""; }; + DAC577DC0CB800AB728273F16E83046D /* ContextMenu.iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ContextMenu.iOS-prefix.pch"; sourceTree = ""; }; + DAD2B1AEAEEE3B6167AA69B21E00DE2E /* PFInternalUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInternalUtils.m; path = Parse/Internal/PFInternalUtils.m; sourceTree = ""; }; + DAF8AFF71E17239BC9D066B413214C0F /* PFPushUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushUtilities.m; path = Parse/Internal/Push/Utilites/PFPushUtilities.m; sourceTree = ""; }; + DBD87B92425DF4F2F580DDE78C400947 /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; + DD1568F7E2ED50F1C629DDF3D9F3020C /* PFUserAuthenticationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationDelegate.h; path = Parse/PFUserAuthenticationDelegate.h; sourceTree = ""; }; + DD2F94AB2074545E677D5F66F9D63121 /* PFPurchase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchase.h; path = Parse/PFPurchase.h; sourceTree = ""; }; + DD428B827A37AD34DF77CC5C561BCE0C /* PFPurchase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchase.m; path = Parse/PFPurchase.m; sourceTree = ""; }; + DE2DE7B62241FC17A59B0C930D7837B4 /* PFSQLiteDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h; sourceTree = ""; }; + DE3508684073BF9ED1EE176A805EE3FC /* libAFNetworking.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAFNetworking.a; sourceTree = BUILT_PRODUCTS_DIR; }; + DFE6FDE4C6292695F3EBEFE040B0685E /* PFURLSessionDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h; sourceTree = ""; }; + E0041782152C1ABC1F18B164311EAF2E /* PFObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState.h; path = Parse/Internal/Object/State/PFObjectState.h; sourceTree = ""; }; + E1129C74BCA89B5DEF89974B3EADEAF6 /* PFQueryUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryUtilities.h; path = Parse/Internal/Query/Utilities/PFQueryUtilities.h; sourceTree = ""; }; + E12E9AD26CFEFE56F770EBC8224F9542 /* PFEncoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEncoder.h; path = Parse/Internal/PFEncoder.h; sourceTree = ""; }; + E20D9CF29C188B71F5C9BA5C972A8960 /* PFRESTFileCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTFileCommand.h; path = Parse/Internal/Commands/PFRESTFileCommand.h; sourceTree = ""; }; + E2534618753A8E575CA58125DE04D03D /* PFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFNetworkActivityIndicatorManager.m; path = Parse/PFNetworkActivityIndicatorManager.m; sourceTree = ""; }; + E2F89C1AC67968BA35BD1123BE34D894 /* PFCurrentInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentInstallationController.m; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m; sourceTree = ""; }; + E424F4FC00D39BFE64948677EB2D53A7 /* PFCommandCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache.h; path = Parse/Internal/PFCommandCache.h; sourceTree = ""; }; + E4A624B26435247F139B091B03F95E5A /* PFMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMacros.h; path = Parse/Internal/PFMacros.h; sourceTree = ""; }; + E50C20130F417DFB11F5B3BD1EE46846 /* PFMutableQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableQueryState.m; path = Parse/Internal/Query/State/PFMutableQueryState.m; sourceTree = ""; }; + E58FC77B8AC9BB8CB123B072D0E7AD2F /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; + E6235BD1313049794F1B1DA7AB8B72BF /* PFPush.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPush.h; path = Parse/PFPush.h; sourceTree = ""; }; + E6F16A936B103DF9237ED50EBF4D8631 /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLConnectionOperation.m; path = AFNetworking/AFURLConnectionOperation.m; sourceTree = ""; }; + E73B966684C4350307ED9BFDFA142DF1 /* AFNetworking.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.xcconfig; sourceTree = ""; }; + E745CDD44F448B0BB657E770CFDCF27C /* PFFileManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileManager.m; path = Parse/Internal/PFFileManager.m; sourceTree = ""; }; E85E0983DBE882A8009D0F7EAB591B91 /* POPAnimationRuntime.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationRuntime.mm; path = pop/POPAnimationRuntime.mm; sourceTree = ""; }; - E8EEBAABE8D879BA98E6BDEB440DC3AF /* PFMultiProcessFileLockController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLockController.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h; sourceTree = ""; }; - E9B49219DF626061CA1102BDDE09600A /* PFQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryState.m; path = Parse/Internal/Query/State/PFQueryState.m; sourceTree = ""; }; - EA32A2997B8869B495BB155A4CF0CDCA /* PFFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFile.m; path = Parse/PFFile.m; sourceTree = ""; }; - EA58A3816CEEB2481D5DE6BD6C227C8B /* PFACL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACL.h; path = Parse/PFACL.h; sourceTree = ""; }; - EAED133F8FBB016C53BC9D82E80C4D8E /* PFACLPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLPrivate.h; path = Parse/Internal/ACL/PFACLPrivate.h; sourceTree = ""; }; + E8FCE3D950703287AE285D63EEA38289 /* PFConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConstants.h; path = Parse/PFConstants.h; sourceTree = ""; }; + E90014A2B5A64CF0A01CA41D71769C7B /* PFObjectUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectUtilities.h; path = Parse/Internal/Object/Utilities/PFObjectUtilities.h; sourceTree = ""; }; + E97A297341B3E569BD3DEA54A611D6DF /* PFErrorUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFErrorUtilities.m; path = Parse/Internal/PFErrorUtilities.m; sourceTree = ""; }; + EA79AC3D10A54A6115A06F836846E4EB /* PFCloud.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloud.h; path = Parse/PFCloud.h; sourceTree = ""; }; + EAEF6A0ABE272D5803680B4298EB62D2 /* PFRESTCommand_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand_Private.h; path = Parse/Internal/Commands/PFRESTCommand_Private.h; sourceTree = ""; }; + EAFA435D26900861E36F1BAF155390C7 /* PFOfflineQueryLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryLogic.h; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h; sourceTree = ""; }; EB56BE02F1B0412A41C9D9834B04BC30 /* POPSpringAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringAnimationInternal.h; path = pop/POPSpringAnimationInternal.h; sourceTree = ""; }; - EBE833F5099FF7EFCCA0F9DF00B29E0D /* PFOperationSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOperationSet.h; path = Parse/Internal/Object/OperationSet/PFOperationSet.h; sourceTree = ""; }; EC10F21A5E230A911C2C2E5082CDAE4B /* POPAnimationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationPrivate.h; path = pop/POPAnimationPrivate.h; sourceTree = ""; }; - EC28357CF9D94A9F2E49253D3A16AFCD /* PFAnalytics_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics_Private.h; path = Parse/Internal/Analytics/PFAnalytics_Private.h; sourceTree = ""; }; - EC3179640630E861C08F4D68C5D17E53 /* PFPaymentTransactionObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPaymentTransactionObserver.m; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m; sourceTree = ""; }; - EC70489BC426131AEC77A58EBC61D6A9 /* PFRESTConfigCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTConfigCommand.h; path = Parse/Internal/Commands/PFRESTConfigCommand.h; sourceTree = ""; }; + ECA0CA78D651CA48D080363398697627 /* PFMutableUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableUserState.m; path = Parse/Internal/User/State/PFMutableUserState.m; sourceTree = ""; }; + ECBD824DA95D72A1DD329C331E1D9D09 /* PFLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocationManager.h; path = Parse/Internal/PFLocationManager.h; sourceTree = ""; }; ECC48BF18D3BD01C21B65648709A45D6 /* POPAnimator.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimator.mm; path = pop/POPAnimator.mm; sourceTree = ""; }; - ECF03863A8796C16D65EE3AC73DEC5B8 /* PFHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPRequest.h; path = Parse/Internal/HTTPRequest/PFHTTPRequest.h; sourceTree = ""; }; + ECE13A0CEBDF1FFEEF6A3A9D07298478 /* PFMutableRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableRelationState.h; path = Parse/Internal/Relation/State/PFMutableRelationState.h; sourceTree = ""; }; + ED172D7F5B84203E7C6617EC01D187F2 /* PFCurrentObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentObjectControlling.h; path = Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h; sourceTree = ""; }; ED596D85957A49EC6092EC8EC38FCE49 /* POPAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationInternal.h; path = pop/POPAnimationInternal.h; sourceTree = ""; }; - ED92DCF321683034F9F263E4083E6959 /* PFPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPin.h; path = Parse/Internal/LocalDataStore/Pin/PFPin.h; sourceTree = ""; }; - EE2CAAF3B10EA83469E9BF55744C5A56 /* PFJSONSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFJSONSerialization.m; path = Parse/Internal/PFJSONSerialization.m; sourceTree = ""; }; - EE6E133088AF492F15B3EEBDA616077B /* PFProductsRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductsRequestHandler.h; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h; sourceTree = ""; }; - EF733EE510CD105F55AD2996CF7D7F94 /* PFApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFApplication.h; path = Parse/Internal/PFApplication.h; sourceTree = ""; }; - F05547667B76C441755A476C0996B67A /* PFMutableACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableACLState.m; path = Parse/Internal/ACL/State/PFMutableACLState.m; sourceTree = ""; }; + EDB35C20F0111B6D8B6548B3DA6BA7CD /* pop-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "pop-prefix.pch"; sourceTree = ""; }; + EE8606221826FA5909EFFA2016DEE26C /* PFAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics.h; path = Parse/PFAnalytics.h; sourceTree = ""; }; + EF64AAF633AE4BDB30247D6A4090B89C /* PFRelationState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState_Private.h; path = Parse/Internal/Relation/State/PFRelationState_Private.h; sourceTree = ""; }; + F0662D5C0759804552360A67D1BDFBA0 /* PFUserConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserConstants.m; path = Parse/Internal/User/Constants/PFUserConstants.m; sourceTree = ""; }; + F08E0A9E75FBD4FAACDB3C8A68081A32 /* BFTask+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Private.m"; path = "Parse/Internal/BFTask+Private.m"; sourceTree = ""; }; + F0959918976A05003B1E7FB37A8F8749 /* Bolts-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Bolts-Private.xcconfig"; sourceTree = ""; }; F0B4105C7EE2DA010EA4746E79138C7C /* POPVector.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPVector.mm; path = pop/POPVector.mm; sourceTree = ""; }; - F0B4809986AB679C74DF6F09D239764C /* PFProductsRequestHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductsRequestHandler.m; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m; sourceTree = ""; }; - F11B5250697F6FBAF1331BF54A332420 /* PFOfflineQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryController.h; path = Parse/Internal/Query/Controller/PFOfflineQueryController.h; sourceTree = ""; }; - F12CAAA4B06857D4D5F8B8C7F8B0A6D6 /* pop-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "pop-prefix.pch"; sourceTree = ""; }; - F1597BC7BE1EC9A86FCCB75B11EAC04B /* PFRESTCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCommand.m; path = Parse/Internal/Commands/PFRESTCommand.m; sourceTree = ""; }; - F1B0914AB61CF2B1F9D7ECBDE1CDA9F1 /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; - F2AD64A1E39EF0EC17E66E7C8C765930 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - F31229637871A1DB25EEC72DEEA4CABF /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; }; - F38E2E7F98830316F576F45842FC59EF /* PFPinningEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningEventuallyQueue.m; path = Parse/Internal/PFPinningEventuallyQueue.m; sourceTree = ""; }; + F0F3A2FA993D77CC93EA7FCA0571B6E3 /* PFLocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLocationManager.m; path = Parse/Internal/PFLocationManager.m; sourceTree = ""; }; + F0FF6176EC466320C2C4D25100A1B61E /* PFObject+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFObject+Subclass.h"; path = "Parse/PFObject+Subclass.h"; sourceTree = ""; }; F3A985A006B0CCD0116D8FC53C4D1834 /* POPAction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAction.h; path = pop/POPAction.h; sourceTree = ""; }; - F3DCF42F9B5384302327ECB9D53A53DA /* PFQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryController.m; path = Parse/Internal/Query/Controller/PFQueryController.m; sourceTree = ""; }; - F447802A042F9641D3483858FF8FF6FB /* Parse-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-prefix.pch"; sourceTree = ""; }; + F3FCAEE7ACA390A41ACE7637EA5338AE /* PFQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryController.m; path = Parse/Internal/Query/Controller/PFQueryController.m; sourceTree = ""; }; + F48EC1FB45579CEBC6000F723C5E081B /* PFPurchaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseController.h; path = Parse/Internal/Purchase/Controller/PFPurchaseController.h; sourceTree = ""; }; F54B1AE39CAF0CA846C1C729B033E047 /* POPBasicAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPBasicAnimation.mm; path = pop/POPBasicAnimation.mm; sourceTree = ""; }; - F6D4D4C8E189ED660B99AFA5901A89BB /* PFCommandCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandCache.m; path = Parse/Internal/PFCommandCache.m; sourceTree = ""; }; - F6E1EDFB3356D1F65A376DA74B16746D /* PFPaymentTransactionObserver_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver_Private.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h; sourceTree = ""; }; - F81BCD1B1E1DFA056533AFD9F925EA0C /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; + F6357CB5A05AA7E18DC9505CDB7B5CE8 /* PFJSONSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFJSONSerialization.m; path = Parse/Internal/PFJSONSerialization.m; sourceTree = ""; }; F81E8633F1E784423FE8B9BE16D38981 /* POPPropertyAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPPropertyAnimation.h; path = pop/POPPropertyAnimation.h; sourceTree = ""; }; - F92FD9C05C3DAFC2FDA01836F5F0516D /* PFFileController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileController.h; path = Parse/Internal/File/Controller/PFFileController.h; sourceTree = ""; }; - FA3FD266385B8FB527CD25EAD4C3B537 /* PFFile_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile_Private.h; path = Parse/Internal/File/PFFile_Private.h; sourceTree = ""; }; - FC1EC8B36049F8C298B8193BA14B5E03 /* PFRESTCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand.h; path = Parse/Internal/Commands/PFRESTCommand.h; sourceTree = ""; }; - FCE60212A5F1B30DB0FA50C2C7FCBE17 /* PFURLSessionCommandRunner_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h; sourceTree = ""; }; - FD6EC1E48FAC08767E731AE5659D8A3E /* PFUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState.h; path = Parse/Internal/User/State/PFUserState.h; sourceTree = ""; }; - FD89DE98891CC69A6BDBE90F774426D7 /* PFFileController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileController.m; path = Parse/Internal/File/Controller/PFFileController.m; sourceTree = ""; }; - FE28A5553FE4AE0FD8390747D2847B04 /* PFPaymentTransactionObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h; sourceTree = ""; }; - FEA6E529E5BC10A92A3372E82A3225C3 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; - FFA4C594B449FC01306DB29EAF4D8570 /* PFAnonymousAuthenticationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousAuthenticationProvider.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h; sourceTree = ""; }; - FFE61F44A8E9B3147353EBFD396F02E7 /* PFURLSessionCommandRunner.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionCommandRunner.m; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m; sourceTree = ""; }; + F9A596AB40BA679CB6E7CAFF9C12420F /* PFCachedQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCachedQueryController.m; path = Parse/Internal/Query/Controller/PFCachedQueryController.m; sourceTree = ""; }; + FA74881F0C5E486DA753412D3B49338C /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+AFNetworking.m"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.m"; sourceTree = ""; }; + FB0347B267799D3314B6438A04D898BF /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; + FB46E4BC6BAC7355C701C95033BF325F /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; + FC0150E534DA14510CC9BC5D0C1AFFB3 /* ParseInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseInternal.h; path = Parse/Internal/ParseInternal.h; sourceTree = ""; }; + FC9971E4E70ED25A33B370FAEA88A589 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; + FCA0B925A9AF72339A9B4292607E97C8 /* Parse.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Parse.xcconfig; sourceTree = ""; }; + FD826E93D8E3CA261C02B951A6F9751D /* PFPropertyInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo.h; sourceTree = ""; }; + FE27C4E5599C93B42BFE6AFD312AC39A /* PFACLState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState_Private.h; path = Parse/Internal/ACL/State/PFACLState_Private.h; sourceTree = ""; }; + FEC012E8559514CD5FDA778785F7234B /* PFCloudCodeController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloudCodeController.m; path = Parse/Internal/CloudCode/PFCloudCodeController.m; sourceTree = ""; }; + FF3530F7B69DD859647B6416F1A85C73 /* PFFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState.h; path = Parse/Internal/File/State/PFFileState.h; sourceTree = ""; }; + FF3D2A57C25C1CECF52F0872DBB55F05 /* PFInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationController.h; path = Parse/Internal/Installation/Controller/PFInstallationController.h; sourceTree = ""; }; + FF6B3C0F9FB537B2DB4C17A15E8F06D2 /* PFOfflineStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineStore.h; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h; sourceTree = ""; }; + FF7D93CF68584FFA70133B196EFB59F0 /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; + FFD183F4D915B996DC61B082E5317000 /* PFSQLiteDatabaseResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseResult.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h; sourceTree = ""; }; + FFE3BF2FE5A767CB3A9F0B32672156AB /* PFWeakValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFWeakValue.m; path = Parse/Internal/PFWeakValue.m; sourceTree = ""; }; + FFEA133F46FCCEC9897A623F3336EC38 /* Parse_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse_Private.h; path = Parse/Internal/Parse_Private.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 308CA5637F79668BCF7E6F999A59A50A /* Frameworks */ = { + 23364613FB0830F19B97359477AA117C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 598B48CF82CFFBA09F8D6D1DDAA489BF /* Foundation.framework in Frameworks */, + 39508B096050C3D476E0601B62A67570 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 731E687FCFFA7ECF41C73A5082D0B09F /* Frameworks */ = { + 4A3A889F28618A29FB5570CB0D7FF3F5 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0FE84A5606D81B659C03C3C6102EAA92 /* AudioToolbox.framework in Frameworks */, - AA41B456224F2877941FE21127774A12 /* CFNetwork.framework in Frameworks */, - 99A627BEE8CDA9E8724214F1D7531161 /* CoreGraphics.framework in Frameworks */, - AD0C2B489AA20ED14E8199414FD83FF8 /* CoreLocation.framework in Frameworks */, - DB40B6A7404E09FB143FA7A52D0CA736 /* Foundation.framework in Frameworks */, - FC42B8D37F5C4C8274AE7BB705E67D04 /* QuartzCore.framework in Frameworks */, - A374D4B38EEA9377979680400B9D7AA9 /* Security.framework in Frameworks */, - AD5F099484D301EDC3BD3EE618F28A4B /* StoreKit.framework in Frameworks */, - 09F2FDD632622F34F5340789029EE07D /* SystemConfiguration.framework in Frameworks */, + 7AA7CBCE858B7750EDE2B738DBC844E0 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 79D6AFC8C82330655C0BAB54399B5D2C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 99B1982B53FDC71250D05FB8D0AC2C41 /* CoreGraphics.framework in Frameworks */, + E7E1B3EC902FD50B6643939B83B1E678 /* Foundation.framework in Frameworks */, + 364E56F74AFA751A33C35FFD3FCA4EC8 /* MobileCoreServices.framework in Frameworks */, + C453240E137D151B7692C7F7F2061B9F /* Security.framework in Frameworks */, + 4F4F44F87B9F2B6059549A42131F2930 /* SystemConfiguration.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 81EBEBB48DB0F24CCEE22EC96C01C619 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 67674A2B768D1BFF618FE2F7DAF24321 /* AudioToolbox.framework in Frameworks */, + 3C76079F931B8D254646B65609456C1C /* CFNetwork.framework in Frameworks */, + 6F3AA29F68F856746B4055983C6BF793 /* CoreGraphics.framework in Frameworks */, + 307DC92332AA8387F0ED533660A7A2DF /* CoreLocation.framework in Frameworks */, + CF7A23F2E61E57A9F6E76E358E956306 /* Foundation.framework in Frameworks */, + 0153E7B72CC1F58001A1FB4CA726D5C8 /* QuartzCore.framework in Frameworks */, + F072D26ABA5162A0D5B098FC2773092E /* Security.framework in Frameworks */, + AFC728CC114630A6E88C55D3423F5B35 /* StoreKit.framework in Frameworks */, + 2B08C89BCB6F8CDE246F90E71C343694 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -947,379 +1087,176 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - BB7D88E900A22E45E6C2784D10858E80 /* Frameworks */ = { + E7338E47FCC5A3CEF6E7565747FBD02C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 27F2109F29A28421282EE42D0B9EF39E /* Foundation.framework in Frameworks */, + 809B3785EA647CC67C699D8FEBB7461F /* Foundation.framework in Frameworks */, + 2802861D952EDBB98D3D81BAFDEBC041 /* QuartzCore.framework in Frameworks */, + 0BE6F472A9E14DECF3CC4B2AC719A807 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 08C21DBD68BB3A37A0BE4BC2CA161F5E /* Parse */ = { + 1871510231A7BF05CD4E00BA2C29A9C6 /* UIKit */ = { isa = PBXGroup; children = ( - 86B138E9858EDFEBAA891920A773BB74 /* BFTask+Private.h */, - 99C7C0C503A3D3A88614601190439E30 /* BFTask+Private.m */, - EA58A3816CEEB2481D5DE6BD6C227C8B /* PFACL.h */, - DED2ECAD15A2BED79633C019904DB280 /* PFACL.m */, - EAED133F8FBB016C53BC9D82E80C4D8E /* PFACLPrivate.h */, - CF3B2B472A7B4B67DF8D50DADB4DBF03 /* PFACLState.h */, - 869D3911E9F5718BD0B6815F0AB11EED /* PFACLState.m */, - A666132F7688CB58789BC9FFAE5AB614 /* PFACLState_Private.h */, - 2127EF3ED0DD02367DA4C3463002ACB7 /* PFAlertView.h */, - 4799A3AB2CC4C1F80574291738520C2F /* PFAlertView.m */, - 06C655052162786B845146B0DB31017F /* PFAnalytics.h */, - A6F717725F4394E95525ABAFB9F33DB2 /* PFAnalytics.m */, - D3568213E494C4CA6E3B00B07B2AC4E4 /* PFAnalyticsController.h */, - 722BD969D4C4074223C4A656C0F6B7E7 /* PFAnalyticsController.m */, - DD2E7D85EAE9D93FB3EB497EE098D0E2 /* PFAnalyticsUtilities.h */, - 1A90C53A523B75F828B57C0D0368595B /* PFAnalyticsUtilities.m */, - EC28357CF9D94A9F2E49253D3A16AFCD /* PFAnalytics_Private.h */, - FFA4C594B449FC01306DB29EAF4D8570 /* PFAnonymousAuthenticationProvider.h */, - 3A3CFC6CFCF3EBBA16C7CCEB59F009AD /* PFAnonymousAuthenticationProvider.m */, - 9F3472D80F0C7C53B06E64DD4D56B74D /* PFAnonymousUtils.h */, - 56414F68055CC861BAB740091699D58B /* PFAnonymousUtils.m */, - 9C99D12456DCBCCB4B0A98B1D7C33FA9 /* PFAnonymousUtils_Private.h */, - EF733EE510CD105F55AD2996CF7D7F94 /* PFApplication.h */, - 546B14FA2F1DCF4C453346FC971CDDB6 /* PFApplication.m */, - 1D07F2F153FA1A7D77D68027DBF1AA33 /* PFAssert.h */, - C0239D4A0C4788EB654381F621134ACB /* PFAsyncTaskQueue.h */, - 4220E05D6A608326E489CDA533392ED8 /* PFAsyncTaskQueue.m */, - 41CD7A269A474E8BFCBF52EFC03BD796 /* PFBase64Encoder.h */, - 2C38E6D6FFD2BE12F651C934B7BFCE1C /* PFBase64Encoder.m */, - 2980A00A9C6B5DB5973D0870C4343CDF /* PFBaseState.h */, - B80259DBA1A3ADC7CA8707C772EB8531 /* PFBaseState.m */, - 53F21E51B835CE481CAA7ADCD43FC400 /* PFCachedQueryController.h */, - 6C49C75467014FA33C9642023DA6F54D /* PFCachedQueryController.m */, - 84B340A85871E94B6C963F8AC7AA61A3 /* PFCategoryLoader.h */, - 23EFBFB21E3A2659446F462A44152817 /* PFCategoryLoader.m */, - A12B04A764E33DA1C04C5C989B5C536C /* PFCloud.h */, - 0B782D4B8E3CF13324D674E51D4AA45A /* PFCloud.m */, - 9142904B7E1F16BB09177E6409AF060F /* PFCloudCodeController.h */, - 8357F198915C0DBFE26D33A3CFD62A56 /* PFCloudCodeController.m */, - CF75EB65BC1D473202CD8BD2F8F9879C /* PFCommandCache.h */, - F6D4D4C8E189ED660B99AFA5901A89BB /* PFCommandCache.m */, - 17C4E65BFD7461A5C5B88B9650622AFA /* PFCommandCache_Private.h */, - 6FC0F52242A2200901325143AB469063 /* PFCommandResult.h */, - B26254ACE198AC611B2797250DAECDFA /* PFCommandResult.m */, - 39F8120161EADF847B985CB2751E4B2A /* PFCommandRunning.h */, - 53086C5F8B1EDBB0614BD2C21F7CBB35 /* PFCommandRunning.m */, - 6C3B93CF1C94B6DA6DEB3D31B9710F83 /* PFCommandRunningConstants.h */, - 1C7CE32C1AC8296CA307938E551C3B91 /* PFCommandRunningConstants.m */, - BEDAC2F484B73C71F6B8E48C5B6FCB76 /* PFCommandURLRequestConstructor.h */, - 86589D24F969C8D7ABFA2C300F854F18 /* PFCommandURLRequestConstructor.m */, - 71FB977D682D8E9A3C20EB5A8FA8D44B /* PFConfig.h */, - A9B5F4ADDFA617FF96FED75084262625 /* PFConfig.m */, - 8F97CDDB1431E1D55E17DE205316A5B6 /* PFConfigController.h */, - 9CCF0135C67AEC40B93D2B426712CFC9 /* PFConfigController.m */, - 750C23383E751070C38083B3DDED458E /* PFConfig_Private.h */, - 7F142A8509CC5040126EC51BDFDDE6E4 /* PFConstants.h */, - 0CC5D59716A7C77BE85C9B72C76F0A38 /* PFConstants.m */, - 2CB00E16E736A73AA516D8A0FA5DB28E /* PFCoreDataProvider.h */, - CEFF62A508184DE729502142858C6AAA /* PFCoreManager.h */, - 611FEF49E42DDEF17150301DFA476527 /* PFCoreManager.m */, - 09D61EB0980687ECD7D678DA7465F846 /* PFCurrentConfigController.h */, - 00AC73B1D5A77DE4B493A990018DA825 /* PFCurrentConfigController.m */, - 2CE62F458530CD664224D3B0B7E49EAB /* PFCurrentInstallationController.h */, - 72DCBBAC0FE8319BEC96154A134CD74B /* PFCurrentInstallationController.m */, - B41C5D6C197E0FDC6E5D8533A0C1CE95 /* PFCurrentObjectControlling.h */, - 8CC4B1CA6C9A2DF20B2C8F69652BC62E /* PFCurrentUserController.h */, - CA74286D523103A7357250A458466DC3 /* PFCurrentUserController.m */, - A7BDDE2CC83877DFC9CF1466C53CB68D /* PFDataProvider.h */, - 9D4E5CDB238B4708D75EDFA04F2388C5 /* PFDateFormatter.h */, - 68900F0E0EB2E31F6E0B59E6692F1C5E /* PFDateFormatter.m */, - 741AF064CFE86ABB229F37FBAFB71F22 /* PFDecoder.h */, - A69CE4C29C33C8B3AEC1E73E847A4197 /* PFDecoder.m */, - 2B52BDCCABD35EA2D1C44912753D79E1 /* PFDefaultACLController.h */, - 875C18418E320318A1F79B5C8DE9BF08 /* PFDefaultACLController.m */, - 43D1212BEB11DE789DE0E4CC000FC9AF /* PFDevice.h */, - 3D8637E5A58491F08A00BD27912794B7 /* PFDevice.m */, - 59A9225041C3DEB9A02CF97CE810A7F8 /* PFEncoder.h */, - 73BA46E681EC6D99B36A7E314941B82A /* PFEncoder.m */, - E09AFB4E5EAB3E98F681BBBEE934776D /* PFErrorUtilities.h */, - A2E0CCEE8F29A9378B50A30B3F234FB8 /* PFErrorUtilities.m */, - 5F48FD0FD7AA215B6C44D0D0D2B89AA6 /* PFEventuallyPin.h */, - C439FB0D5070895D69861DE4654C8D25 /* PFEventuallyPin.m */, - 7461F51B0EABADB21626FF904B87CCE5 /* PFEventuallyQueue.h */, - 06A34F6AE5214388ED772768B1AED0E1 /* PFEventuallyQueue.m */, - B23ED4E70AA813C755E036B0600606FA /* PFEventuallyQueue_Private.h */, - 1AD6E87805E310F6517D29CDFEEE9587 /* PFFieldOperation.h */, - 11BAD4B729ACB9404D4D1110F4EAD454 /* PFFieldOperation.m */, - 5B8E6E53482F4B643407A15BA8B0F287 /* PFFieldOperationDecoder.h */, - D3F6C6FD6DBA4896546009DD948AE020 /* PFFieldOperationDecoder.m */, - CB36CF9B5806A0332F9E4955152BC86E /* PFFile.h */, - EA32A2997B8869B495BB155A4CF0CDCA /* PFFile.m */, - F92FD9C05C3DAFC2FDA01836F5F0516D /* PFFileController.h */, - FD89DE98891CC69A6BDBE90F774426D7 /* PFFileController.m */, - 4E29EFCB546410074B97DF506ABC1C98 /* PFFileDataStream.h */, - BA7F7022FC278524B2BE48AD1759AF42 /* PFFileDataStream.m */, - 6A34F74808E75DF01FC097E2274D4116 /* PFFileManager.h */, - 1018BFE57D5EDCC0B72E6A255BEC0971 /* PFFileManager.m */, - 8F6664FFA2E9D3FD4CE7F5A6C742742E /* PFFileStagingController.h */, - 623D1DB3CEA9317B7323E1B4435A4B04 /* PFFileStagingController.m */, - 4F35A9095465C7A589E9D7FC2F4774D8 /* PFFileState.h */, - 49E7AE33EEA74B98EDDEF13254E369C2 /* PFFileState.m */, - 1AF8F0B7303C117779BBEBE048717710 /* PFFileState_Private.h */, - FA3FD266385B8FB527CD25EAD4C3B537 /* PFFile_Private.h */, - CE510ACC52FD7B52F382F765AA7C38D6 /* PFGeoPoint.h */, - 696CB0BED47C8B75EFCBA90955BB17EA /* PFGeoPoint.m */, - D1F61BF57518F0154F82CEF764C0F35D /* PFGeoPointPrivate.h */, - ECF03863A8796C16D65EE3AC73DEC5B8 /* PFHTTPRequest.h */, - 3AF05F518409F76124476457E2514771 /* PFHTTPURLRequestConstructor.h */, - 312D446A8E99BA072B9A091616AB0DC2 /* PFHTTPURLRequestConstructor.m */, - 20DFAAE476F60317DEAEE177019E41E9 /* PFHash.h */, - 0D322CC5914ECCF1403B38B9F1A7597F /* PFHash.m */, - CFA6C4B46A860F2290E2C9F4AFAADFB9 /* PFInstallation.h */, - 02ADA053F55CC3D3354BB334C196EA78 /* PFInstallation.m */, - 5C2B236ABC299A669D53E54FC6FF7414 /* PFInstallationConstants.h */, - 49274509C4FFAAEBBD45D8600A573B2B /* PFInstallationConstants.m */, - E6EC9018A6A5F9DC5F956E06A0A1DA5D /* PFInstallationController.h */, - 1FA17927867D6B7D6DADCC59515AAE7D /* PFInstallationController.m */, - 53F56D358828987779F91894A792A4CA /* PFInstallationIdentifierStore.h */, - A266244911A0F90CFC3A6FF419F3140D /* PFInstallationIdentifierStore.m */, - CC952D982119E3AE1061314E2B7C35D4 /* PFInstallationIdentifierStore_Private.h */, - 2515044ACEA23C32AC39FC89A3A0F6E0 /* PFInstallationPrivate.h */, - BA75D0EC4C508481F47EA13B39766654 /* PFInternalUtils.h */, - 132074912F44DB77C37332C4CA8A3DAB /* PFInternalUtils.m */, - 2DBBD6C38E3D91712C6414D4224376D3 /* PFJSONSerialization.h */, - EE2CAAF3B10EA83469E9BF55744C5A56 /* PFJSONSerialization.m */, - AD088079F8066DB0050C23252546389D /* PFKeyValueCache.h */, - 50B0DDFFAD085BBF7A9EE5E4B41E834B /* PFKeyValueCache.m */, - B113FA8703C60024B8FBA20DFB21B744 /* PFKeyValueCache_Private.h */, - 71AF2ED13A3973592E31F7D47D5D90F0 /* PFKeychainStore.h */, - 7EE9007C583DF8ECE1AEF3F938312117 /* PFKeychainStore.m */, - 6C07AD7B01F99BCDAE94E6D7D0BF6038 /* PFLocationManager.h */, - 6DD2128030F8E23F9B1C6141659F3B8C /* PFLocationManager.m */, - C13F91216CB47F63D6B60866FDDC2E12 /* PFLogger.h */, - 425CA0B11664DBBBEAA5C27618F79FAD /* PFLogger.m */, - 2F561B1D0F25670B287F11DE69B4A30C /* PFLogging.h */, - 4BFA78A3405997CEFE0F4A84B480089B /* PFMacros.h */, - 0C10587D5F82F53DEA74DF5129DD7312 /* PFMultiProcessFileLock.h */, - 2280179A3928340114FB48C1AF04368F /* PFMultiProcessFileLock.m */, - E8EEBAABE8D879BA98E6BDEB440DC3AF /* PFMultiProcessFileLockController.h */, - 2171BDF0DFBFCB33F05FC9A1AC8B42B5 /* PFMultiProcessFileLockController.m */, - 75EBF2C2BD6CA4EB5FC5249BB70052D3 /* PFMulticastDelegate.h */, - 8B5234B11242385CB74EE42A5CBE16D9 /* PFMulticastDelegate.m */, - 3A56F696F9B2544A6A4DB58FB8E47809 /* PFMutableACLState.h */, - F05547667B76C441755A476C0996B67A /* PFMutableACLState.m */, - 3D98F818FBD7F97BBBBADD55203F244B /* PFMutableFileState.h */, - 2B07F2F4F2D16D912592A5F093A28DA6 /* PFMutableFileState.m */, - 8E5B06286F6DFAD5DAED57C3E9C5400B /* PFMutableObjectState.h */, - 00835672E9411A4D0F46362CD9FC93C9 /* PFMutableObjectState.m */, - DEEC86611B8BC477AFEF42C162C7DEC7 /* PFMutablePushState.h */, - 867A8434D57CE1DA9A2FFA7F45002F4D /* PFMutablePushState.m */, - AD0E30A8555AA525BA9AFC45114E9002 /* PFMutableQueryState.h */, - A5C0755A44D6605CF4BE2DFE2EDE1D86 /* PFMutableQueryState.m */, - 5A09D1AC6A988D2BC0012D3F2027B90C /* PFMutableRelationState.h */, - 0524A1E79CBE55E8D0C538F4382D17B7 /* PFMutableRelationState.m */, - 72E4522345A892B89A84489DB3B8F316 /* PFMutableUserState.h */, - BE2646A9566B3A11A2F19AA8D5D15E62 /* PFMutableUserState.m */, - 5844FC1A0322F7909761B921AC033AC3 /* PFNetworkActivityIndicatorManager.h */, - 4897F88BB4A784CD6F1DFE74C498732A /* PFNetworkActivityIndicatorManager.m */, - A8D4C658312EAAA8ACC1463D1135ADCA /* PFNetworkCommand.h */, - 77C22DDD172F2AE628D146B1BD68824A /* PFNullability.h */, - 4113ABD9B9640D41ADFF4F04A28AF0C7 /* PFObject.h */, - 718BF86CB0A3C4DB13DBC0EAEA86A9EF /* PFObject.m */, - 21D9F2D1230AD40B645828FF1CFD4506 /* PFObject+Subclass.h */, - 8904B6096DEB568855A4A7625ED6CAE1 /* PFObjectBatchController.h */, - 1FC52A2F51F3D38AD751DF3CC9B7DA95 /* PFObjectBatchController.m */, - C2884D9AD4EDF5B53F05C2631989A495 /* PFObjectConstants.h */, - 6AFE87339800D6E962F2EFEC155ABC75 /* PFObjectConstants.m */, - 2A8F12B4902D7D8A8BBAF518DB7C37EF /* PFObjectController.h */, - 35F4C67236438881E09D5813BFA8BB6A /* PFObjectController.m */, - 381988C254ED0DACBFE2ED8164944325 /* PFObjectController_Private.h */, - 248BBC0B2BBF2B01CCFCC79F7FE785AE /* PFObjectControlling.h */, - 8A4BF349F63AC01086486C8E720D05AC /* PFObjectEstimatedData.h */, - 59363C495BDE76341FC7C70BE565EF4A /* PFObjectEstimatedData.m */, - 904E4BEABBDE0DE64491D4A2F274F91B /* PFObjectFileCoder.h */, - E5331787DAA3B52CEE076DC2B62A6100 /* PFObjectFileCoder.m */, - 110790F94C28E100B1086C0F8B7D1198 /* PFObjectFileCodingLogic.h */, - 42763567F50A02D13E880143048C01A1 /* PFObjectFileCodingLogic.m */, - 07A4A542A64193B1380E5346BCEBD316 /* PFObjectFilePersistenceController.h */, - 97CC9DF74264B1EB7657386C54DD635B /* PFObjectFilePersistenceController.m */, - 7E3D63307A8DF22EE6CA58FBC364ACF4 /* PFObjectLocalIdStore.h */, - 6DE629D21A679A60A0F64440A0BAC324 /* PFObjectLocalIdStore.m */, - 1146110AA563CDAFA693A1B073292A1E /* PFObjectPrivate.h */, - D639AB7043CB6DA1A6BE3D49D7D9368B /* PFObjectState.h */, - 931885B870C2D6166C233379707A6DBC /* PFObjectState.m */, - 9F3E10B801DC1EAB7C18648EA922D183 /* PFObjectState_Private.h */, - E3ED5AFB7A3B2DC03C1D116039A73C3C /* PFObjectSubclassInfo.h */, - A9725E3A84362C8B373DA1D0A052B2CB /* PFObjectSubclassInfo.m */, - 7ACE89D8884AAB54C96F063FF438FA31 /* PFObjectSubclassingController.h */, - E3C0AB42ACF3767DE19D18A31901BC94 /* PFObjectSubclassingController.m */, - B322FB271A210C27577B6EAD8C5062CC /* PFObjectUtilities.h */, - 7A9E8271F4A4A2FE0F545A52010B99A1 /* PFObjectUtilities.m */, - 6CCEA16112CA90E44E0E982B2A2B27D3 /* PFOfflineObjectController.h */, - 76E34CF3E0809A86C3173F02A63233D2 /* PFOfflineObjectController.m */, - F11B5250697F6FBAF1331BF54A332420 /* PFOfflineQueryController.h */, - BEA3D87AE012FEF7F6B48E6F0D5F09F7 /* PFOfflineQueryController.m */, - D552CBB2BF4CC751787C15E7A7B176DF /* PFOfflineQueryLogic.h */, - 529877D68CE76A3FBD3B683DAFF9EAE6 /* PFOfflineQueryLogic.m */, - 7971DD333353B1B9C109052C86147DEA /* PFOfflineStore.h */, - E342EB169F41501EE41BB76D5CA176D6 /* PFOfflineStore.m */, - EBE833F5099FF7EFCCA0F9DF00B29E0D /* PFOperationSet.h */, - 9DF9D409D2807A34B747777E2DC97F14 /* PFOperationSet.m */, - FE28A5553FE4AE0FD8390747D2847B04 /* PFPaymentTransactionObserver.h */, - EC3179640630E861C08F4D68C5D17E53 /* PFPaymentTransactionObserver.m */, - F6E1EDFB3356D1F65A376DA74B16746D /* PFPaymentTransactionObserver_Private.h */, - ED92DCF321683034F9F263E4083E6959 /* PFPin.h */, - B431D27F0705F097E581263224EF8C88 /* PFPin.m */, - 15C0132F3858BCC88CB28061A960F0D1 /* PFPinningEventuallyQueue.h */, - F38E2E7F98830316F576F45842FC59EF /* PFPinningEventuallyQueue.m */, - 576B1125C947E14A49E22D7F411DC55C /* PFPinningObjectStore.h */, - D8851833E5439BBC098DCCB68455E8D8 /* PFPinningObjectStore.m */, - D9F83A22B0271BB18AA8680451C70138 /* PFProduct.h */, - 6E5AF4BFF040360310887AAACC8C323C /* PFProduct.m */, - 4A66170B5CA1BBCF22487EEE33E21A6C /* PFProduct+Private.h */, - EE6E133088AF492F15B3EEBDA616077B /* PFProductsRequestHandler.h */, - F0B4809986AB679C74DF6F09D239764C /* PFProductsRequestHandler.m */, - 81397E9A1C30F99B66BB50321A4C5075 /* PFPropertyInfo.h */, - DC21BCC836700655FF0FC5118F41587C /* PFPropertyInfo.m */, - 7334DBEED1B1C3906828C55F380147ED /* PFPropertyInfo_Private.h */, - 9A132496AD1361AB641C6E65067049BF /* PFPropertyInfo_Runtime.h */, - 79D9D3FFDE344267236EECCAA6397DA3 /* PFPropertyInfo_Runtime.m */, - 6DDB11ED96EBA4EC3BB398585D212BD7 /* PFPurchase.h */, - 20AC43D5B60CA86B1AD76BC5D4591D96 /* PFPurchase.m */, - 5B311513624F9614FA7EBA34D397F337 /* PFPurchaseController.h */, - 372AEF8690F07BECE3E348391A87DEBD /* PFPurchaseController.m */, - B2256E19F54D3528053251E979C5257B /* PFPush.h */, - 3EBCC4FDAE51D4D5EBDF89A681AB0F7D /* PFPush.m */, - 7FAF3CA5F19C3EB426FBB8AC2A926793 /* PFPushChannelsController.h */, - 2B9C4FA9F02AD2C7B7F788126DA856F5 /* PFPushChannelsController.m */, - DC04CA70DD902C38FD430C17D4244E92 /* PFPushController.h */, - 35A7823CEFBFE2CF5ABB3556EF3D0995 /* PFPushController.m */, - C96C8283235BCEAFB2B6F132CE911578 /* PFPushManager.h */, - 6C364D224B5FE61E8BA844FB66D55C5F /* PFPushManager.m */, - 110F3B75E3D3EC4A08CEBF6AC5B01CE0 /* PFPushPrivate.h */, - 33A4732FF27318AD75D549D9D4EF9CF7 /* PFPushState.h */, - 82E29BC8D2B7929DF1755FF61A7965EE /* PFPushState.m */, - 9ED7955943D662DC1DC137B29185582D /* PFPushState_Private.h */, - 8EC7BE51CD7D82DB749F5857D70F22F1 /* PFPushUtilities.h */, - D22939E9625B5D422EC6E479E7048771 /* PFPushUtilities.m */, - 715B44864CC4816F9E241DBDAE6498CE /* PFQuery.h */, - AD3CB420E4A0D3570A166616F7BC779E /* PFQuery.m */, - BC0C8A8C41DC1963D695265153E23911 /* PFQueryController.h */, - F3DCF42F9B5384302327ECB9D53A53DA /* PFQueryController.m */, - 66C84FE024EC45EF4AB8D3EE3366EAF3 /* PFQueryPrivate.h */, - 9E9FF91DD2DCE7D504DE6C0AC9CE6091 /* PFQueryState.h */, - E9B49219DF626061CA1102BDDE09600A /* PFQueryState.m */, - 440A7F77699899974219AB5825962822 /* PFQueryState_Private.h */, - 7C85AFD7ABA045B4FE8ED8BF948A7C60 /* PFQueryUtilities.h */, - CB8189117D5A0D245487C3423D73727D /* PFQueryUtilities.m */, - 514CD500BD8BACEDB35A91E6F6135E56 /* PFRESTAnalyticsCommand.h */, - 608790F5A36AC5B2650CA3AB5EDB96D8 /* PFRESTAnalyticsCommand.m */, - 80F676B2C080DCBC841173D2FC2CBA26 /* PFRESTCloudCommand.h */, - 5B55D2A6F5C29F672688ABE3737712C1 /* PFRESTCloudCommand.m */, - FC1EC8B36049F8C298B8193BA14B5E03 /* PFRESTCommand.h */, - F1597BC7BE1EC9A86FCCB75B11EAC04B /* PFRESTCommand.m */, - D52AB7265F316C1F4B4C5881D8EA52DC /* PFRESTCommand_Private.h */, - EC70489BC426131AEC77A58EBC61D6A9 /* PFRESTConfigCommand.h */, - 5A7FFA051B54FAFBAAF14E0C23C4641F /* PFRESTConfigCommand.m */, - 6AC5046C91AD0BF56975D1A7F382F946 /* PFRESTFileCommand.h */, - A39433C5B2CFE6011222CBB72F0EAE5C /* PFRESTFileCommand.m */, - 4C9C62664AD1CE0A3036EA774C72C69C /* PFRESTObjectBatchCommand.h */, - D77774D5F665986858DAD577093BF4F4 /* PFRESTObjectBatchCommand.m */, - 106E039845795427C9E9FC7A626BF395 /* PFRESTObjectCommand.h */, - 099176EFCB8B1C379CDFD09F1B0290F4 /* PFRESTObjectCommand.m */, - 1D3CEE52CB984D4C4DB6A4F7A4903BBC /* PFRESTPushCommand.h */, - 581264D483DB217A6F5ED83035A33E30 /* PFRESTPushCommand.m */, - 5F8C504A6034C0190584C29C9997115B /* PFRESTQueryCommand.h */, - 132B11DB4450BB2DC8926A20B853B6AD /* PFRESTQueryCommand.m */, - 707C0020EA94AD091665CAAD43AA717B /* PFRESTSessionCommand.h */, - 17A73E112537B17232FB3245923658EF /* PFRESTSessionCommand.m */, - BFDC9A22A2A96279B4BDF17190E2A775 /* PFRESTUserCommand.h */, - C3FEE284F1A3A64929DAC57EF28FBEA2 /* PFRESTUserCommand.m */, - 42093BEF3F8BF73F39F33B7D65A8B184 /* PFReachability.h */, - B962D108140D96784FC828D86963E605 /* PFReachability.m */, - 92FCC3E21D3E8790768C5AF6D196F8E6 /* PFRelation.h */, - 57BAE3AE27D1DF554AB43ADF5CA1C592 /* PFRelation.m */, - C9076753B0A2E12983ECEFBE60C6E4A3 /* PFRelationPrivate.h */, - 891204204D388D19194E2B25AC4EC9CF /* PFRelationState.h */, - 177ECEF6166CB8A176CA4C377BFFD54B /* PFRelationState.m */, - B6D07518E33FDE1A7B76FABCCABCBCD6 /* PFRelationState_Private.h */, - 8C43426FA34D5469526AAFBD7806A65C /* PFRole.h */, - 0DD193A7608BB519CE6B1B91AE25E86C /* PFRole.m */, - 6082FD21FE81654EC989E13CFA913CAB /* PFSQLiteDatabase.h */, - 6BDA2CB539774B96EADA0171CEB88CC6 /* PFSQLiteDatabase.m */, - 603F88D603FD21B1DB540C18DCB38780 /* PFSQLiteDatabaseController.h */, - 18EE5011502D312C68238751D67BA76A /* PFSQLiteDatabaseController.m */, - B6EFD05D2D5F7A4F89CDF5EA8E64F2DE /* PFSQLiteDatabaseResult.h */, - DEF74DE469E28BE80197C43305F5C003 /* PFSQLiteDatabaseResult.m */, - DFD8D064D883A41B1432E94742A1A879 /* PFSQLiteDatabase_Private.h */, - 71D39E34A21D15F057EC75D91D396416 /* PFSQLiteStatement.h */, - 4123F238BE00014D15B8B3DE34ADC447 /* PFSQLiteStatement.m */, - 880AE19807FD283D4EB9724F21F4E548 /* PFSession.h */, - 12C95F161EE734C3016E891E9C306A42 /* PFSession.m */, - 9DB1B89CDD385F67E440201640C7AFA4 /* PFSessionController.h */, - 56D3E21616E0654B5CFD38290C9213A9 /* PFSessionController.m */, - C65B577617E60D4DCA6671103F519E4B /* PFSessionUtilities.h */, - DDEB176EF3964EAF1E91BFCA999AC383 /* PFSessionUtilities.m */, - E64CFDC86F7294DC0F63391554852CAD /* PFSession_Private.h */, - 17A4E3B51919C1813C70CF9A41D08C64 /* PFSubclassing.h */, - B2CC06448183660D517225325BC1F93A /* PFTaskQueue.h */, - 60AC5AE111695E87D9942D028A5723AE /* PFTaskQueue.m */, - 050B2D7FC8433528EE96A73D6084FDCA /* PFThreadsafety.h */, - 5BE848028E2C509A4FA316D19E795CD7 /* PFThreadsafety.m */, - 84279F3B0C8DD145E9A9E04D59B81C41 /* PFURLConstructor.h */, - AFBDA3EF95CECEB449D3303D17FA28C2 /* PFURLConstructor.m */, - 1B4CDA57AC000136EA5B434611EF0426 /* PFURLSession.h */, - CB69D67914ACB9C94D9D8340F8255A72 /* PFURLSession.m */, - C6930DD80530DC03DCEC33CA1BE24BE7 /* PFURLSessionCommandRunner.h */, - FFE61F44A8E9B3147353EBFD396F02E7 /* PFURLSessionCommandRunner.m */, - FCE60212A5F1B30DB0FA50C2C7FCBE17 /* PFURLSessionCommandRunner_Private.h */, - 6E5945950FBDA34F155BE025094F2F22 /* PFURLSessionDataTaskDelegate.h */, - 6C3AFFA6C615F4519F0FD6DD4EA4194C /* PFURLSessionDataTaskDelegate.m */, - 9468278E36B3EB05C5CA530058F1C8D6 /* PFURLSessionDataTaskDelegate_Private.h */, - 24A36B9D634B60BD2A1CAC408B8226A3 /* PFURLSessionFileDownloadTaskDelegate.h */, - 0D29BD0D675C84B8C7EF1F88FD36417D /* PFURLSessionFileDownloadTaskDelegate.m */, - 4ACFA0EE4D94D9AD3A656FFFB0D6DC16 /* PFURLSessionJSONDataTaskDelegate.h */, - 331907AED7D09788ACC2D6029AB2604F /* PFURLSessionJSONDataTaskDelegate.m */, - 95C6F24D93DAFD0A99EFD6D457EB68B1 /* PFURLSessionUploadTaskDelegate.h */, - 484F5D6426BF8586F7203DC9DE6690A1 /* PFURLSessionUploadTaskDelegate.m */, - 875A9098C4D90F40AE3128DC006E1B98 /* PFURLSession_Private.h */, - CE37BCDB0808A581D8F23138D5B2B412 /* PFUser.h */, - 71EFF9FFB238B21E016BDB85AA6333DD /* PFUser.m */, - 13AAF6B43993D5DCA1ABA1E0C06822F9 /* PFUserAuthenticationController.h */, - D151C7604325CAC5209D9944C99E592A /* PFUserAuthenticationController.m */, - 7363B398C79454A71B17ACDF25FAA393 /* PFUserAuthenticationDelegate.h */, - 619BA5C9745FABA615C1071117CF49AF /* PFUserConstants.h */, - B745F5094B240A7BD83E4F246A86BBD8 /* PFUserConstants.m */, - 4DE181E23B100CCECFB4B435A3DF9AD4 /* PFUserController.h */, - AEB7E49E278592D89DD351ACEB1287FA /* PFUserController.m */, - 6E393C3F2BB10DF131AB02A295297B88 /* PFUserFileCodingLogic.h */, - 2CDBD2A39D34214C8D004ED2EB0D1624 /* PFUserFileCodingLogic.m */, - BF198CCAD2E6C2AE39D8BF68464A93CB /* PFUserPrivate.h */, - FD6EC1E48FAC08767E731AE5659D8A3E /* PFUserState.h */, - D9AD8A2E0B442B2597A5EFD99859CE70 /* PFUserState.m */, - AB1ABA6EB2984DFC25350DF75335526F /* PFUserState_Private.h */, - 078642F5D1917B58A6998424887BD706 /* PFWeakValue.h */, - 5880D4CB5AA7C367A9C45BE209F6CED6 /* PFWeakValue.m */, - 5057A97EFDC884111C4A5829863ADD7C /* Parse.h */, - E56771AE10D1052EB22D63A1F7631599 /* Parse.m */, - CD24A497637B97FB13D87D8C73E642D5 /* ParseInternal.h */, - 6104AB82845FA5625E51A56F2D3213B8 /* ParseManager.h */, - BF89107C38CFD5E5770EC87A79813462 /* ParseManager.m */, - 4073B51D97588127A6EF20481CEC3025 /* ParseModule.h */, - 90312FA789CD74048F0D32BCC9C66D08 /* ParseModule.m */, - 420A2E467841126C406BA9FA83D75161 /* Parse_Private.h */, - DB22940D3278BA5A422F059D4EFE7C6B /* Resources */, - 78131DF6EFB03A9654D9C718AB31087D /* Support Files */, + FF7D93CF68584FFA70133B196EFB59F0 /* AFNetworkActivityIndicatorManager.h */, + 41A069B9AF3C8F611F76F20326AB035E /* AFNetworkActivityIndicatorManager.m */, + C61F3C1B791FFC9E7C5ADE180684470E /* UIActivityIndicatorView+AFNetworking.h */, + 1A207317F4EF6A614BE7034DE5F3A9E9 /* UIActivityIndicatorView+AFNetworking.m */, + 70A550454DC97E123E16BD631BDAD95C /* UIAlertView+AFNetworking.h */, + 512576519C7D60E088B9946D68C2893B /* UIAlertView+AFNetworking.m */, + 39A27D94EB41AD237B4F4E722852F9B6 /* UIButton+AFNetworking.h */, + FB46E4BC6BAC7355C701C95033BF325F /* UIButton+AFNetworking.m */, + E58FC77B8AC9BB8CB123B072D0E7AD2F /* UIImage+AFNetworking.h */, + 285AE108BCA0C7BACB4D927E8D1F8665 /* UIImageView+AFNetworking.h */, + FC9971E4E70ED25A33B370FAEA88A589 /* UIImageView+AFNetworking.m */, + 4DDA8143D2C09DF9986817461C4DD498 /* UIKit+AFNetworking.h */, + 814B6E4C1E3AEC20607C2A43AADF132B /* UIProgressView+AFNetworking.h */, + A72A7753E28C0B037F3759A7CB7DC9CB /* UIProgressView+AFNetworking.m */, + A6EBD847848C1C85F961433CE4F102A3 /* UIRefreshControl+AFNetworking.h */, + 8F189D28F4E7A0D39192B35D412642BA /* UIRefreshControl+AFNetworking.m */, + 1E08E20DF9125F146349FA765648DCA3 /* UIWebView+AFNetworking.h */, + FA74881F0C5E486DA753412D3B49338C /* UIWebView+AFNetworking.m */, ); - path = Parse; + name = UIKit; sourceTree = ""; }; - 24002A6670E6882ECD6250D3E60F9CB2 /* Frameworks */ = { + 343CC481EBFBA9EC3DCCBF88496BCB7E /* NSURLConnection */ = { isa = PBXGroup; children = ( - F9400E82BDA8E39AA40BABDC6CB12014 /* iOS */, + A6F04B61FAF09E9538B3AF6FD9536DC4 /* AFHTTPRequestOperation.h */, + 994A5F73DF6BF6840DED92DDE2C12AC6 /* AFHTTPRequestOperation.m */, + 202A2922E63631CD23C09430889F7248 /* AFHTTPRequestOperationManager.h */, + 7C8DC7559A9E804216A7455574ACC2FA /* AFHTTPRequestOperationManager.m */, + 8A9EB6D7E4926B7E034816F709F1F518 /* AFURLConnectionOperation.h */, + E6F16A936B103DF9237ED50EBF4D8631 /* AFURLConnectionOperation.m */, + ); + name = NSURLConnection; + sourceTree = ""; + }; + 44B2BD7E350527D031DAEA225965006A /* Reachability */ = { + isa = PBXGroup; + children = ( + 411AD8B8B53F6CAF9198BBBBB07AC033 /* AFNetworkReachabilityManager.h */, + A2C302E4C6109CA0666CE25D782C9766 /* AFNetworkReachabilityManager.m */, + ); + name = Reachability; + sourceTree = ""; + }; + 4A3B2BF0C2CE1DB37AB68EDF92FD44AB /* Support Files */ = { + isa = PBXGroup; + children = ( + FCA0B925A9AF72339A9B4292607E97C8 /* Parse.xcconfig */, + 4743EB53C73E4B52C1EC84395BD476F5 /* Parse-Private.xcconfig */, + 73DEF6839984D1F48ACE568B6EC2E5EF /* Parse-dummy.m */, + CC332C397ADA56AB76FB706A0ABF83E5 /* Parse-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/Parse"; + sourceTree = ""; + }; + 58A31A01D078FCF8E66D5353FA341FA2 /* Resources */ = { + isa = PBXGroup; + children = ( + 10C1CF41ACFAC3F0E71569AE1A84C121 /* en.lproj */, + ); + name = Resources; + sourceTree = ""; + }; + 70D08BD050FBEDBEF01649A778D854ED /* NSURLSession */ = { + isa = PBXGroup; + children = ( + 0F53F9E343FFBC0260E05A6277C25495 /* AFHTTPSessionManager.h */, + 51740A0EDDF3B04E8A46D98B3807D440 /* AFHTTPSessionManager.m */, + 2B6673C9F7E97CEA6C3B3B57C906C095 /* AFURLSessionManager.h */, + 5583C012407DD3D86BE591291FD5B40E /* AFURLSessionManager.m */, + ); + name = NSURLSession; + sourceTree = ""; + }; + 748691C91C2E3A5C306BD96057F66CC9 /* Bolts */ = { + isa = PBXGroup; + children = ( + FA527DA126D49BE2A84BEFE3B6068EF2 /* Support Files */, + 845B3317FB451DB091F4A240F9C6D658 /* Tasks */, + ); + path = Bolts; + sourceTree = ""; + }; + 7BD6D8170D87526BD20EC14D6EF61666 /* Security */ = { + isa = PBXGroup; + children = ( + 52808B026D92DB8F0DCCBCA2EE24FEEF /* AFSecurityPolicy.h */, + D8CEAB9CDED9C3CA1445D6F3DAF05029 /* AFSecurityPolicy.m */, + ); + name = Security; + sourceTree = ""; + }; + 7DB346D0F39D3F0E887471402A8071AB = { + isa = PBXGroup; + children = ( + BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */, + EB57DDB3388FBC701046A1E93218737F /* Frameworks */, + 925A7ADD720C420997500F47DF7BAB59 /* Pods */, + CCA510CFBEA2D207524CDA0D73C3B561 /* Products */, + D2411A5FE7F7A004607BED49990C37F4 /* Targets Support Files */, ); - name = Frameworks; sourceTree = ""; }; - 2CB5B158C2A118C167797A87812DAE77 /* pop */ = { + 845B3317FB451DB091F4A240F9C6D658 /* Tasks */ = { + isa = PBXGroup; + children = ( + 754C6873E010FF768376E458C1EA6449 /* BFCancellationToken.h */, + 400935A9AE97EE38E7C59CBBD474FA32 /* BFCancellationToken.m */, + 0D7C31A8D9DC68245949CD79BD5AD586 /* BFCancellationTokenRegistration.h */, + AAAE696C714BEA1FD2CB7F7E37484204 /* BFCancellationTokenRegistration.m */, + 27E3589A502DA67E5F75BFDD5AB13E57 /* BFCancellationTokenSource.h */, + CEB9D45B957B79F1459ABF1E81F01530 /* BFCancellationTokenSource.m */, + 73E9B12D704E302D9DAC9FDE4C8D60AC /* BFDefines.h */, + 3DB8817B308E2B46E23993461AC18E54 /* BFExecutor.h */, + 98C44F60AA929307291A20DC790BFEB1 /* BFExecutor.m */, + 06588E20E049A2E98B815265D06086EE /* BFTask.h */, + CF335AC7E0E6EE3DD820467124C2102D /* BFTask.m */, + 8EC8E900100484763798A1C6338E9061 /* BFTaskCompletionSource.h */, + 5038524C4AA89B3EC607E5B47A706CCA /* BFTaskCompletionSource.m */, + 58143C3358B762BB4DC15795BD82B8B9 /* Bolts.h */, + 94E051272A8A44AC3C51C58EABF97D9F /* Bolts.m */, + 9AF96B14E5200CC44AFA17F564FAFCE9 /* BoltsVersion.h */, + ); + name = Tasks; + sourceTree = ""; + }; + 925A7ADD720C420997500F47DF7BAB59 /* Pods */ = { + isa = PBXGroup; + children = ( + 99B74290A3DB42BACD4580083D40BFCA /* AFNetworking */, + 748691C91C2E3A5C306BD96057F66CC9 /* Bolts */, + EE85D36C044E4BB468AE05B65485762A /* ContextMenu.iOS */, + B9C0326EEBE4AB593BEB84C616215B18 /* Parse */, + 97CCAC9C8256E53F277AEF405699EAE6 /* pop */, + ); + name = Pods; + sourceTree = ""; + }; + 952EEBFAF8F7E620423C9F156F25A506 /* Pods */ = { + isa = PBXGroup; + children = ( + 15A529C27057E4A57D259CBC6E6CE49C /* Pods-acknowledgements.markdown */, + BF59BC15D23E1E1912C8F334E7236813 /* Pods-acknowledgements.plist */, + A5849314580BC3F82E4A799104E87FE3 /* Pods-dummy.m */, + 641AE05DD55E5E6AC1590CD7B4A18F97 /* Pods-resources.sh */, + 46A44DBE60FFDA06D7726DD3091A0E47 /* Pods.debug.xcconfig */, + 554179C2DB1E42B74E86A13E79A45730 /* Pods.release.xcconfig */, + ); + name = Pods; + path = "Target Support Files/Pods"; + sourceTree = ""; + }; + 97CCAC9C8256E53F277AEF405699EAE6 /* pop */ = { isa = PBXGroup; children = ( C091E831068E3E504A40AC6932B39C87 /* FloatConversion.h */, @@ -1373,115 +1310,439 @@ 35574BADA6CDEA944F089CBC021F01AA /* TransformationMatrix.cpp */, 2E056FF5C4EC38A55B45FB52F395D72E /* TransformationMatrix.h */, 96015F1C746803D9318614B277F71BCB /* UnitBezier.h */, - 8A24758F7667B4720B7E756151A73F15 /* Support Files */, + A2CC793318ED7670850E5733FFF43C72 /* Support Files */, ); path = pop; sourceTree = ""; }; - 57CCF01DFB7BD7239D93A5448BA92D0A /* Bolts */ = { - isa = PBXGroup; - children = ( - BCFFB6976DC888EB71BCE10C88727CA8 /* Support Files */, - 633DB105B84604115C888F5869A77ABC /* Tasks */, - ); - path = Bolts; - sourceTree = ""; - }; - 633DB105B84604115C888F5869A77ABC /* Tasks */ = { + 99B74290A3DB42BACD4580083D40BFCA /* AFNetworking */ = { isa = PBXGroup; children = ( - 09E9F2F5DDCB3D2B60BDC018656F8355 /* BFCancellationToken.h */, - C0F939B16AC0EFB29DA8BB09980593E3 /* BFCancellationToken.m */, - 72BD4751F46AFBD16AE367CAE3FA8785 /* BFCancellationTokenRegistration.h */, - B3814B9487A8A8F8F9A04F510A6B3AC5 /* BFCancellationTokenRegistration.m */, - 840EF1BA3066E61DD0BA27741371AE22 /* BFCancellationTokenSource.h */, - BC33018672D1C57CFC91D822DB867582 /* BFCancellationTokenSource.m */, - 4E8E5DE9CFE8C0FF513510782D08CD45 /* BFDefines.h */, - D342B7DAEB7FE6F3E3110ABADFD54C09 /* BFExecutor.h */, - CBA0A5B0F0E83001148599CCEC105E79 /* BFExecutor.m */, - ABF7E63586A26C19233745BAFC155684 /* BFTask.h */, - 03BFBD31F2922FEFEDBE273BF9244C02 /* BFTask.m */, - 0B1F17F7CC5A76F9BE1ABD011A8AB9C7 /* BFTaskCompletionSource.h */, - F1B0914AB61CF2B1F9D7ECBDE1CDA9F1 /* BFTaskCompletionSource.m */, - 8133C4680D6ED2FB7338EF30FC88BBCA /* Bolts.h */, - 2A4C94256E730FF99DD4B0F41D9D749C /* Bolts.m */, - A7B5535D819421EFD2C8509D19D9430E /* BoltsVersion.h */, + 1FE2EB61A95016598E72642BFBCBADBE /* AFNetworking.h */, + 343CC481EBFBA9EC3DCCBF88496BCB7E /* NSURLConnection */, + 70D08BD050FBEDBEF01649A778D854ED /* NSURLSession */, + 44B2BD7E350527D031DAEA225965006A /* Reachability */, + 7BD6D8170D87526BD20EC14D6EF61666 /* Security */, + CF98E27314C6E37BA444B6EAEAC629AE /* Serialization */, + C2714C2E5FA708AC2BFA8D6C15D7BDE2 /* Support Files */, + 1871510231A7BF05CD4E00BA2C29A9C6 /* UIKit */, ); - name = Tasks; + path = AFNetworking; sourceTree = ""; }; - 78131DF6EFB03A9654D9C718AB31087D /* Support Files */ = { + A2B93CF04B449D80B12ACC4F1E8164D9 /* Support Files */ = { isa = PBXGroup; children = ( - 97EDF5367846B0B65AF31CA41D2B7812 /* Parse.xcconfig */, - C55B1243D9ED528D2D7760513B4D0FB2 /* Parse-Private.xcconfig */, - A0F125F4185CBFE9AD59CB8DA8774D62 /* Parse-dummy.m */, - F447802A042F9641D3483858FF8FF6FB /* Parse-prefix.pch */, + 6FE7C428DAE4B23EBBF3039F8397D53E /* ContextMenu.iOS.xcconfig */, + 92EFA64DEEA2D7C788D39BE4B87668B0 /* ContextMenu.iOS-Private.xcconfig */, + C3E92FDA0225F57156353438BB9F934B /* ContextMenu.iOS-dummy.m */, + DAC577DC0CB800AB728273F16E83046D /* ContextMenu.iOS-prefix.pch */, ); name = "Support Files"; - path = "../Target Support Files/Parse"; - sourceTree = ""; - }; - 7DB346D0F39D3F0E887471402A8071AB = { - isa = PBXGroup; - children = ( - BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */, - 24002A6670E6882ECD6250D3E60F9CB2 /* Frameworks */, - FCB614EA9285C86CCE0AD5E74051EB98 /* Pods */, - CCA510CFBEA2D207524CDA0D73C3B561 /* Products */, - D2411A5FE7F7A004607BED49990C37F4 /* Targets Support Files */, - ); + path = "../Target Support Files/ContextMenu.iOS"; sourceTree = ""; }; - 8A24758F7667B4720B7E756151A73F15 /* Support Files */ = { + A2CC793318ED7670850E5733FFF43C72 /* Support Files */ = { isa = PBXGroup; children = ( - 14906790E82B81D5B68B2258E95425B4 /* pop.xcconfig */, + B86F68BE12DD9BF16FA4EA2B8D7C6F99 /* pop.xcconfig */, 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */, 59B3FD41DEC22C5891C9B83C27BC25E0 /* pop-dummy.m */, - F12CAAA4B06857D4D5F8B8C7F8B0A6D6 /* pop-prefix.pch */, + EDB35C20F0111B6D8B6548B3DA6BA7CD /* pop-prefix.pch */, ); name = "Support Files"; path = "../Target Support Files/pop"; sourceTree = ""; }; - 952EEBFAF8F7E620423C9F156F25A506 /* Pods */ = { + B9C0326EEBE4AB593BEB84C616215B18 /* Parse */ = { isa = PBXGroup; children = ( - 15A529C27057E4A57D259CBC6E6CE49C /* Pods-acknowledgements.markdown */, - BF59BC15D23E1E1912C8F334E7236813 /* Pods-acknowledgements.plist */, - 419B671E948384A84974D819F4F24FBA /* Pods-dummy.m */, - 641AE05DD55E5E6AC1590CD7B4A18F97 /* Pods-resources.sh */, - 3D02C6C7422645AB5529C759A1A86353 /* Pods.debug.xcconfig */, - 7EA341866E76C794E960BB9753925294 /* Pods.release.xcconfig */, + 6B26ED3E1774D8AF7C7968032E48D8AD /* BFTask+Private.h */, + F08E0A9E75FBD4FAACDB3C8A68081A32 /* BFTask+Private.m */, + B332CC51A8213F3EF1C7A3FE399A5C2B /* PFACL.h */, + B94497EF1A56D3F72FD2BA76060DF1EE /* PFACL.m */, + B627B86FB20866D18CE3E2A40FF283B7 /* PFACLPrivate.h */, + 53683441896998F6CE0216D4310DD24D /* PFACLState.h */, + 06BDEA785CD1CCF3EC5F7D97641DB94B /* PFACLState.m */, + FE27C4E5599C93B42BFE6AFD312AC39A /* PFACLState_Private.h */, + 6E2A46AA281CDF574C18A7B9311A6C93 /* PFAlertView.h */, + 37DCE2246C320FA0B8BF9CAD3758AE71 /* PFAlertView.m */, + EE8606221826FA5909EFFA2016DEE26C /* PFAnalytics.h */, + CAB37E3012ED80BEB1BCF0077E7E38F4 /* PFAnalytics.m */, + BF99C2FE0ABD09A876B4FDC3B73D693D /* PFAnalyticsController.h */, + 5B55313727430781904B26ED39BC5BD6 /* PFAnalyticsController.m */, + 857A8C29F0006E02894A63C09D31CB85 /* PFAnalyticsUtilities.h */, + 4D237A86108BD1DB8A37BCC3FCA0DC90 /* PFAnalyticsUtilities.m */, + A3A9D34733E3E1E62E950164A6B84C80 /* PFAnalytics_Private.h */, + 898ECE478F3C854611287289F4977E11 /* PFAnonymousAuthenticationProvider.h */, + 1A5BCF29FD1B3CBCBD8B387388746B55 /* PFAnonymousAuthenticationProvider.m */, + 36B65B247D65EE46D2A8F3ACDC87870F /* PFAnonymousUtils.h */, + 8675E8B47522DD1649EAE7CE1299B776 /* PFAnonymousUtils.m */, + 671A1745311D8EA359B1DB95D621711E /* PFAnonymousUtils_Private.h */, + 2B2B77FA62BB014F37CDD536B7F39AD5 /* PFApplication.h */, + 4DC525DF3A9AB295F68FFA79C1865B4D /* PFApplication.m */, + 38E00AD6C99A24C72256073EDD208D3F /* PFAssert.h */, + 453A45902215CAB1B07AEEBCAEC35958 /* PFAsyncTaskQueue.h */, + 663C1A74DA7B1A684C31157464DF2CC6 /* PFAsyncTaskQueue.m */, + 507ED5364F8D323521133232F9E26134 /* PFBase64Encoder.h */, + 568A6DDB145B9BE497001F309F81C25D /* PFBase64Encoder.m */, + 2B7693C271516E5E5D162BA7DC113F4E /* PFBaseState.h */, + 245BC03B9F6AB7B69A163206AF3C2C32 /* PFBaseState.m */, + 893348B36B23CFF515B649DF3EA05962 /* PFCachedQueryController.h */, + F9A596AB40BA679CB6E7CAFF9C12420F /* PFCachedQueryController.m */, + BB51AB9AA27CE8D0A85E5690F23CF6EA /* PFCategoryLoader.h */, + 96403B2BFDB3FEACA24969CF6378D7B3 /* PFCategoryLoader.m */, + EA79AC3D10A54A6115A06F836846E4EB /* PFCloud.h */, + 70864853E727E60E7B86865739D2ECED /* PFCloud.m */, + C1555BCE0D8C4B718BB72214683D3907 /* PFCloudCodeController.h */, + FEC012E8559514CD5FDA778785F7234B /* PFCloudCodeController.m */, + E424F4FC00D39BFE64948677EB2D53A7 /* PFCommandCache.h */, + 24E60B787A9F785262AC44B47108D70D /* PFCommandCache.m */, + A28218952E226A9395672AAF9BB98065 /* PFCommandCache_Private.h */, + 7F06EEE3B8D8FE8CE602F2D363FEE64C /* PFCommandResult.h */, + 653B4653F0D1C20696A6E65E888E8D15 /* PFCommandResult.m */, + 0F1D200E550A12E3F43CD3F31E131DBE /* PFCommandRunning.h */, + 0B072562DD642F896CD3C3B7CEF2911B /* PFCommandRunning.m */, + 0EDD645EA043AC01BD2D294C8E25D7C9 /* PFCommandRunningConstants.h */, + 48DF685D40431A00C7B7572D23340086 /* PFCommandRunningConstants.m */, + 669BF4D4C83FA3E0ABEF32501AC4C5EE /* PFCommandURLRequestConstructor.h */, + D0D0DD7229B595E60BA7D6C2A41C4B6B /* PFCommandURLRequestConstructor.m */, + 72C04520515C92C01E90D8D58C97BA21 /* PFConfig.h */, + 73F5CAD466111E720F4983773D164AED /* PFConfig.m */, + D4186E5938E4D869A1267A20AC002113 /* PFConfigController.h */, + 3501C65AE5330DD19D3236E70095C9D8 /* PFConfigController.m */, + 18D7C9B8DD8A89571437499374A39984 /* PFConfig_Private.h */, + E8FCE3D950703287AE285D63EEA38289 /* PFConstants.h */, + 6D45F61B78D4419060D26A7EBAF70EC2 /* PFConstants.m */, + 7725DA2CCC4B05B3E8613121DAB013CB /* PFCoreDataProvider.h */, + 0FE1708AB969B7C864FA6A717B2332A5 /* PFCoreManager.h */, + 033DE2F20554C4483F70BB66112A660D /* PFCoreManager.m */, + 8D19EBD75979B9CD23ABA38BA45D0DCB /* PFCurrentConfigController.h */, + 2966362D026D5B9C80E247EEDC0F4E9B /* PFCurrentConfigController.m */, + 009D766A60F44D81650E505380CF6EE5 /* PFCurrentInstallationController.h */, + E2F89C1AC67968BA35BD1123BE34D894 /* PFCurrentInstallationController.m */, + ED172D7F5B84203E7C6617EC01D187F2 /* PFCurrentObjectControlling.h */, + 0D2C0E09440F10C2834146B969AD0950 /* PFCurrentUserController.h */, + 8C6B8C7E82B804AB1382E38F8E99158C /* PFCurrentUserController.m */, + 721E34BBC2F5BFD148652BD36955365C /* PFDataProvider.h */, + 965FBA9FA425FE1BA4E41B4FFEE42FA8 /* PFDateFormatter.h */, + CF46F6E5A7E52A35C89851DED33A2176 /* PFDateFormatter.m */, + 65F6F140EE00AE08D92C70E19B66F5A4 /* PFDecoder.h */, + 7C4ACAFFC579192F80AE309D38F4CE0D /* PFDecoder.m */, + B65D4C06593414E001B75B30C7A68F64 /* PFDefaultACLController.h */, + 1896BB3AD97D1E8CB9D17C6A982672DB /* PFDefaultACLController.m */, + 14BFF77A40EB6D31D0D53D242A01BED0 /* PFDevice.h */, + 0823AECF540B112CC0DD23CA1EB33F1E /* PFDevice.m */, + E12E9AD26CFEFE56F770EBC8224F9542 /* PFEncoder.h */, + B0D0D5C8FF6EA31C0E29554F03FFAE35 /* PFEncoder.m */, + AC7F1FE520C94B33E628A5BF7D802073 /* PFErrorUtilities.h */, + E97A297341B3E569BD3DEA54A611D6DF /* PFErrorUtilities.m */, + 2348B7338D870B151D50A511AC6711D0 /* PFEventuallyPin.h */, + C9BD34A121ED46D7A11BF5ED82E5B876 /* PFEventuallyPin.m */, + 63F5E36EFB9403CA32B8B5C3A3F78855 /* PFEventuallyQueue.h */, + 1C0E7BEE92130638A860786486BF4398 /* PFEventuallyQueue.m */, + CA572C4AE94CB9AC2FF8EE80A7E1179F /* PFEventuallyQueue_Private.h */, + A250843CDACF4CC56A8C27C4FDF9C270 /* PFFieldOperation.h */, + 4B4E5220C651194225EB11D393463146 /* PFFieldOperation.m */, + D93333F49B10A154028722630A69414C /* PFFieldOperationDecoder.h */, + BFBC36D6FED37ED769BA66522F1A639F /* PFFieldOperationDecoder.m */, + 82BCDD60CE06A0870E0ED0D853E05739 /* PFFile.h */, + 59143BC1CCA767489CC63EC79299C132 /* PFFile.m */, + 489E3B9351E8F3F82DAFE89EEEC84804 /* PFFileController.h */, + 676C7A56F303C34B831F1F015F05812E /* PFFileController.m */, + 26DE5D007AAFB71206252AE40BAE833B /* PFFileDataStream.h */, + 206BAB6E51C3AC0ACA2E1320A911DA36 /* PFFileDataStream.m */, + 5F3726655401860B18DB85328C091228 /* PFFileManager.h */, + E745CDD44F448B0BB657E770CFDCF27C /* PFFileManager.m */, + AD274DB5984402947E47F0A1B92E9CA4 /* PFFileStagingController.h */, + 461917BD0B571A033CB9E74AD334A12C /* PFFileStagingController.m */, + FF3530F7B69DD859647B6416F1A85C73 /* PFFileState.h */, + 283151768413CC359CA4D2B1E9BA275A /* PFFileState.m */, + D3E8D0F342FFF167540A96E017CCF674 /* PFFileState_Private.h */, + 0854CFF4AC229E21A7EC471BB9EAC43F /* PFFile_Private.h */, + AE96E6223940CD70D6F01EA288192D93 /* PFGeoPoint.h */, + 57F2605E98764A7779B3213480606C71 /* PFGeoPoint.m */, + A09F4FD4303453124FB9D4870DDE2F0C /* PFGeoPointPrivate.h */, + 869C2B98A84E7A66ED53252EEBD534C7 /* PFHTTPRequest.h */, + 022CFAB7CC0CBD47E0AC47A4EC57B983 /* PFHTTPURLRequestConstructor.h */, + 62078C4D93D4BF5CF7430EF680857264 /* PFHTTPURLRequestConstructor.m */, + 6A3138F383603A594BF1120840E69F93 /* PFHash.h */, + 5F6D07CF3F5445D97AACFB330CF98F66 /* PFHash.m */, + 57B1DA40C85BD720B286FFF8C7EA6F91 /* PFInstallation.h */, + 4A0A7E7C948EBD45C167B8D1A339D98A /* PFInstallation.m */, + C01AC5406A1FE996C23D44F2D1E54AE2 /* PFInstallationConstants.h */, + 7F214F1BB9B408A25954535EFA736CA6 /* PFInstallationConstants.m */, + FF3D2A57C25C1CECF52F0872DBB55F05 /* PFInstallationController.h */, + 81EA6C27FFDF760CFB4767BB48E66220 /* PFInstallationController.m */, + AC3758631123BBA424D0C687A75ED31C /* PFInstallationIdentifierStore.h */, + C609AF7E1C4CAC8BDE38A1E28E64414A /* PFInstallationIdentifierStore.m */, + 92C8318F0774CE0DB5B5FA3C7961C69F /* PFInstallationIdentifierStore_Private.h */, + A8AD04541066E8C429FCD51E8A604FF1 /* PFInstallationPrivate.h */, + C452DCF65E6EEC6AD15BD77F01EDF779 /* PFInternalUtils.h */, + DAD2B1AEAEEE3B6167AA69B21E00DE2E /* PFInternalUtils.m */, + 58898FE04784C24EDFF6D77428F6BB91 /* PFJSONSerialization.h */, + F6357CB5A05AA7E18DC9505CDB7B5CE8 /* PFJSONSerialization.m */, + 245FF007BEF549EF81D7E0222214C303 /* PFKeyValueCache.h */, + 3E2E03FFA5C12908D09BC583858570B6 /* PFKeyValueCache.m */, + A63FC1750D756C077EBF6610F23A216B /* PFKeyValueCache_Private.h */, + BA733732E0D2D37C0A92D946DE2A9EEE /* PFKeychainStore.h */, + D4EBEE47CEE4A7801385DB1D8C88383E /* PFKeychainStore.m */, + ECBD824DA95D72A1DD329C331E1D9D09 /* PFLocationManager.h */, + F0F3A2FA993D77CC93EA7FCA0571B6E3 /* PFLocationManager.m */, + 80678CF83F7E4592403D479266CD73C6 /* PFLogger.h */, + C124801645AB37C7712D483A5C87D83D /* PFLogger.m */, + 0931322359A8E70F6F16FED5F97879E5 /* PFLogging.h */, + E4A624B26435247F139B091B03F95E5A /* PFMacros.h */, + 372923DCA1E5BFDF1DBD57E93002E783 /* PFMultiProcessFileLock.h */, + 7388AF1F66A03C223B0DA9338F552A19 /* PFMultiProcessFileLock.m */, + CA70C152E8EBE75160C47A587C7EC00D /* PFMultiProcessFileLockController.h */, + 5C3B64369BE6A9ACF09E4E03E3747FA0 /* PFMultiProcessFileLockController.m */, + 016F2569F5E0DA62E089B095D3A04E84 /* PFMulticastDelegate.h */, + 475310436BBAD84F7095E6DB0BB83F78 /* PFMulticastDelegate.m */, + 8E69E884C61DBE3CA50B5B88897651DB /* PFMutableACLState.h */, + 82B2F774B2C3F6B000F7B323A1E51571 /* PFMutableACLState.m */, + 61DE303474ACF3AAEB6BEF7CF3151683 /* PFMutableFileState.h */, + 61308EBC3E3CCE6EB380B4761543AD72 /* PFMutableFileState.m */, + B58A5A84AAAEBE1A391E99E9CAED0FF2 /* PFMutableObjectState.h */, + D5CF558DFE9FECD0D4DAD9727F9E7447 /* PFMutableObjectState.m */, + B2586CEB4DB20E7AED5EBFD3FB96B973 /* PFMutablePushState.h */, + 0DBB0CAB75C437C618EEBFAF8F62A947 /* PFMutablePushState.m */, + 345A7737A02453DD9D85EE95F928690B /* PFMutableQueryState.h */, + E50C20130F417DFB11F5B3BD1EE46846 /* PFMutableQueryState.m */, + ECE13A0CEBDF1FFEEF6A3A9D07298478 /* PFMutableRelationState.h */, + 372FE1327079A6911530ABFAF7BF2E68 /* PFMutableRelationState.m */, + 1A28796B1724F0F5B766249296CA182A /* PFMutableUserState.h */, + ECA0CA78D651CA48D080363398697627 /* PFMutableUserState.m */, + C7C65DD82B3A08F62D43E9DAC3B23880 /* PFNetworkActivityIndicatorManager.h */, + E2534618753A8E575CA58125DE04D03D /* PFNetworkActivityIndicatorManager.m */, + 7B131E3C12FA20F7C590D94EF645128F /* PFNetworkCommand.h */, + 32AEDEB7E9CE1E1D2795C43EFD540009 /* PFNullability.h */, + A52CE45BD75B2826314A3BCDCB813398 /* PFObject.h */, + ADEFE34C92FF818B135715C323E4963C /* PFObject.m */, + F0FF6176EC466320C2C4D25100A1B61E /* PFObject+Subclass.h */, + 38C5CB3B26D08AF88F501A05B91F10B4 /* PFObjectBatchController.h */, + 530ED4C4F72784908C56CECFABD0231C /* PFObjectBatchController.m */, + 5710C75607065D22ED2DB5CCCFB27A3D /* PFObjectConstants.h */, + 923EF0E8FAAA93BA1AF9399DE58923FF /* PFObjectConstants.m */, + CCFA76D1938B2CCED5785C13FA4FC5B8 /* PFObjectController.h */, + 656B8A19AFF797C4926D6E2E8D102049 /* PFObjectController.m */, + 6D97138DECF19BAFB63881A6D4EF92BF /* PFObjectController_Private.h */, + 2792004D5441520275B8E22F94BD8E5C /* PFObjectControlling.h */, + 237D0CDD69C7B78A1BDB8DDF87F9EC2A /* PFObjectEstimatedData.h */, + 734124A4F7A87553483F895904EE19A9 /* PFObjectEstimatedData.m */, + 6D14E98ACAAB4CCD1367FDFBC9088D27 /* PFObjectFileCoder.h */, + 196698284757A108BD18D4EFC0D470B2 /* PFObjectFileCoder.m */, + 28676FBC1D97921BD11D7A12C922CD0A /* PFObjectFileCodingLogic.h */, + 71E77E05CC2CDD5B79D7552C17004EFB /* PFObjectFileCodingLogic.m */, + 3D7123F7FE1F84DEDBE2ED35D8844839 /* PFObjectFilePersistenceController.h */, + 8AA0E5427E9EFCC96AC0F8CED0FBEEF4 /* PFObjectFilePersistenceController.m */, + 62C1941BE9E36B0C41BF43BFCF7681CB /* PFObjectLocalIdStore.h */, + 9102F91F4F8FC737DF8F8B04EB6B1183 /* PFObjectLocalIdStore.m */, + B7E18330D5E87E2825CE1B429D6F6693 /* PFObjectPrivate.h */, + E0041782152C1ABC1F18B164311EAF2E /* PFObjectState.h */, + 6DC7D6BF37746831732BEE64A78E2E64 /* PFObjectState.m */, + 86D677D0061394762DEF101FECA5E262 /* PFObjectState_Private.h */, + BF9B1FD5D1E2441D018DF7EDDDC4A3FC /* PFObjectSubclassInfo.h */, + 3DFA1FB737DEBE392F5582656ED1040B /* PFObjectSubclassInfo.m */, + CDE463E6B9D1AF8E6AE850CD5E68849F /* PFObjectSubclassingController.h */, + DA4157CE1B57DF0CDF63B24888DCEA61 /* PFObjectSubclassingController.m */, + E90014A2B5A64CF0A01CA41D71769C7B /* PFObjectUtilities.h */, + A988AADA8AE3AFF34F68D1673691E59A /* PFObjectUtilities.m */, + B024D2C96D819E81E5D194B562CA7CCF /* PFOfflineObjectController.h */, + D8AA77C187E180A556AF4ADA309BC0B6 /* PFOfflineObjectController.m */, + BBFE8A0106C591064C969ED096275D29 /* PFOfflineQueryController.h */, + 2DC00CBF82C85912449AE191DBEC053D /* PFOfflineQueryController.m */, + EAFA435D26900861E36F1BAF155390C7 /* PFOfflineQueryLogic.h */, + 0862542F3708CEA8901318AE4F5FE02B /* PFOfflineQueryLogic.m */, + FF6B3C0F9FB537B2DB4C17A15E8F06D2 /* PFOfflineStore.h */, + B0E75CCDD1A5217E3601BF092D5385C1 /* PFOfflineStore.m */, + B1483642455FE93A36C64B730F27BCD1 /* PFOperationSet.h */, + 92A56E592AF27DDA726FCE1F4C398C8E /* PFOperationSet.m */, + 8510965E6696177882F8683FF279CA62 /* PFPaymentTransactionObserver.h */, + 76B1F1A7DACF8124FD67EEFFB88526F1 /* PFPaymentTransactionObserver.m */, + 7203E516FF95A460652ADF5DFDEB3FB7 /* PFPaymentTransactionObserver_Private.h */, + 189B90A77BD5596205FB77D8F7DBBC66 /* PFPin.h */, + 4FA3D2B13C2E276A13164FD9D412F89D /* PFPin.m */, + AA0EFB7BECF9EB8E71FD258F0F60D3E5 /* PFPinningEventuallyQueue.h */, + 0BC40E8FF522D488100477128A373255 /* PFPinningEventuallyQueue.m */, + 37D8598915FD79DCA21C88192869017A /* PFPinningObjectStore.h */, + 315895D529B1136E61253E4EEE127FAC /* PFPinningObjectStore.m */, + C4F300D4AA623B3DFFDF7971E2B5A614 /* PFProduct.h */, + 893F517620D76C4DD97407C35B30C8DC /* PFProduct.m */, + CBCE01FE706B02A990236BCCFB09B153 /* PFProduct+Private.h */, + 529C0DC5511102F293AAA76310789551 /* PFProductsRequestHandler.h */, + 62FA41489E9F671A6D2AC37AA15E70FC /* PFProductsRequestHandler.m */, + FD826E93D8E3CA261C02B951A6F9751D /* PFPropertyInfo.h */, + B1D6FB68F1851036506A1E965B20FBD5 /* PFPropertyInfo.m */, + 3070F8AC10357FBF3BA3FE9A093D8A9B /* PFPropertyInfo_Private.h */, + 1DD825DA40E92E93FAC2EA00807BF7D1 /* PFPropertyInfo_Runtime.h */, + 97ADB30A5976DC7FE832E68A415B22F8 /* PFPropertyInfo_Runtime.m */, + DD2F94AB2074545E677D5F66F9D63121 /* PFPurchase.h */, + DD428B827A37AD34DF77CC5C561BCE0C /* PFPurchase.m */, + F48EC1FB45579CEBC6000F723C5E081B /* PFPurchaseController.h */, + 94DF16E2294CA8FEC9FD2ACF36D38638 /* PFPurchaseController.m */, + E6235BD1313049794F1B1DA7AB8B72BF /* PFPush.h */, + 62FAE8C508439F783E07B639E62E5388 /* PFPush.m */, + 1B2FDDD8F730AFFD1DFF805E250C3654 /* PFPushChannelsController.h */, + 89A3DB76DA1562634E50BB32E31C34F7 /* PFPushChannelsController.m */, + 0F7453E990BF208758602D5B39CB7388 /* PFPushController.h */, + B1E9EC0D78FBC6373DBD668B202BBA25 /* PFPushController.m */, + BBEDFD1C6F661507D70B9C73268193B3 /* PFPushManager.h */, + 8CCBDC7EA64ECE9974D334AA69A02EEA /* PFPushManager.m */, + A60CF5CEA93C2F6926C54CA3679A1556 /* PFPushPrivate.h */, + 97D5C73BC159E5CEFA38B5345BB3B77E /* PFPushState.h */, + 9B3991EEAD0B989CE24DC09DA3F6F84B /* PFPushState.m */, + 56CE00CA829DE03D96192E0DB1B3B4B5 /* PFPushState_Private.h */, + 39451587CFA3D7024575C72DA66A271B /* PFPushUtilities.h */, + DAF8AFF71E17239BC9D066B413214C0F /* PFPushUtilities.m */, + 0D7ADA7673FDA922B924DB960BC45FEE /* PFQuery.h */, + 291630B6FE4315F0B5B789D1ED22A66C /* PFQuery.m */, + 860D58AD9C905EA188BEF7C2C8B3B2E4 /* PFQueryController.h */, + F3FCAEE7ACA390A41ACE7637EA5338AE /* PFQueryController.m */, + 6E19C92B6E4B8413D0F549918EC73FD0 /* PFQueryPrivate.h */, + 58EC2DED4BCC481232C4E104FEB2F9ED /* PFQueryState.h */, + B7C407A664499E7354D9C1CCDB113A59 /* PFQueryState.m */, + 5AA108C575CCC3045CF6EBEB7C2D35B5 /* PFQueryState_Private.h */, + E1129C74BCA89B5DEF89974B3EADEAF6 /* PFQueryUtilities.h */, + BE9F74FE3902C79E0394988E24194855 /* PFQueryUtilities.m */, + 82175545FE728571466A9FD6E8D8A7DE /* PFRESTAnalyticsCommand.h */, + 946D9742CB5DB1C57ED0E3BBA63E66BD /* PFRESTAnalyticsCommand.m */, + 63CF9DFF309CFA031748CEB31E227BB9 /* PFRESTCloudCommand.h */, + 105DFF60164FDC71E3359B156DAE0937 /* PFRESTCloudCommand.m */, + 595A306B6C145E017C4B885F8ABB9F94 /* PFRESTCommand.h */, + 36E7ABF06376C0698BE4B369C1255EAD /* PFRESTCommand.m */, + EAEF6A0ABE272D5803680B4298EB62D2 /* PFRESTCommand_Private.h */, + 07A16D1432732F853E3D7B39B1DB383E /* PFRESTConfigCommand.h */, + 9F519C682C4E52952D376F5423040E5B /* PFRESTConfigCommand.m */, + E20D9CF29C188B71F5C9BA5C972A8960 /* PFRESTFileCommand.h */, + 5367E0C94AEC8755F6974A3C97264428 /* PFRESTFileCommand.m */, + D973AF50D37829E5A629A80ED88FF2E9 /* PFRESTObjectBatchCommand.h */, + 32D54A528AA2134A544108B4E124A617 /* PFRESTObjectBatchCommand.m */, + CB4444A178F9CEC2E097C90C7D351E7F /* PFRESTObjectCommand.h */, + 5775915FCBF7CB8AB7E50C1474A500B5 /* PFRESTObjectCommand.m */, + D244FD9C2061C46A05C67E3557A6D7A9 /* PFRESTPushCommand.h */, + A89E8441EF384E751C66846D8C7DA140 /* PFRESTPushCommand.m */, + 91B168BFBEBBF3272A49E4240325DAC3 /* PFRESTQueryCommand.h */, + 4A747E0C0BA89EAF9D9C9B35EA62B097 /* PFRESTQueryCommand.m */, + C5FE3CDD5FB245BC2913E868E9DE3995 /* PFRESTSessionCommand.h */, + 9507DB69A2FE53769B24313F98BCFB5B /* PFRESTSessionCommand.m */, + 60F954C2BD5989BD4626F5C1F5BCC48A /* PFRESTUserCommand.h */, + 876ECCCFCF0B3F87EC5560A2FF6B5059 /* PFRESTUserCommand.m */, + 1EBBF4F6FA934C6BCACE0C5744A3BF58 /* PFReachability.h */, + CBE1F1F92C05B5ADE677C606485BB75F /* PFReachability.m */, + D26D8AB91D60CAC4AF163A949239DE49 /* PFRelation.h */, + 1FCA6291D3A1D8E40FC410D0747380DC /* PFRelation.m */, + D15D922CCB9D2F0B65F44C7FBFE53EBC /* PFRelationPrivate.h */, + B3F7FC9A375F4CC184EF1CB84FFF2E2F /* PFRelationState.h */, + 3801D32A117D840B4286437B7A779361 /* PFRelationState.m */, + EF64AAF633AE4BDB30247D6A4090B89C /* PFRelationState_Private.h */, + 33CAFF9933F161C320331CCA71D23A5F /* PFRole.h */, + 2DA3428B35116EA19374F593BE42F3BD /* PFRole.m */, + DE2DE7B62241FC17A59B0C930D7837B4 /* PFSQLiteDatabase.h */, + 9EAF2A823E92A730EC588801D943C514 /* PFSQLiteDatabase.m */, + A60A05A0392E32822607D587C5380E61 /* PFSQLiteDatabaseController.h */, + A78F4615CC1292D0FA53088C626957D8 /* PFSQLiteDatabaseController.m */, + FFD183F4D915B996DC61B082E5317000 /* PFSQLiteDatabaseResult.h */, + 13D7A1D1A9F6D9020B6E721D5D4D5730 /* PFSQLiteDatabaseResult.m */, + 846998BF4B29751792079F5759BBA274 /* PFSQLiteDatabase_Private.h */, + 007D017430CAD14C507E4E16894E1ED8 /* PFSQLiteStatement.h */, + A1B4C9A06FB08BC3FE354D588CD09AF7 /* PFSQLiteStatement.m */, + 752500BB2A0459E3CB234F46BFDE1EED /* PFSession.h */, + 7C6969F6DC20ED490487711A80935900 /* PFSession.m */, + 2B493332AF25497985B3420336C8E310 /* PFSessionController.h */, + CF35E714DE566F845ECEDF6AE894C5F0 /* PFSessionController.m */, + 15DCE6DD786D364DDA4BCAD1F24895FD /* PFSessionUtilities.h */, + 810E80DCE80B90D80B5F21BF7212FEFB /* PFSessionUtilities.m */, + 96A60F95EF69292F16C085789B646687 /* PFSession_Private.h */, + BCC77513019B8BF9A882928F74C52424 /* PFSubclassing.h */, + 8F5D0107B7A3A38D5B48854CDBEA6CD3 /* PFTaskQueue.h */, + 0E374390CBBC0449CF5CC0A1C32EE8C5 /* PFTaskQueue.m */, + D963AA70AF8A60F226D09FBC6225E686 /* PFThreadsafety.h */, + 436A81D9B2A9E41E99BF86F1C6871A0A /* PFThreadsafety.m */, + 6BAB10EAFDE7E6E60F85AB4A4C3AD67E /* PFURLConstructor.h */, + 6D3ED73DF6D62367D4288EA69377B589 /* PFURLConstructor.m */, + 9CB47EA89DC2B49C7B2B12127098FB33 /* PFURLSession.h */, + AE0BE1F355DE44ECCAEA5BF8D4526C5A /* PFURLSession.m */, + CDAC0B9AE144C31E2DE5AF0A4DB1EDC4 /* PFURLSessionCommandRunner.h */, + 075D17B28FD88D19723BDD0F7C7ACF85 /* PFURLSessionCommandRunner.m */, + 47DED761A5B41071D4A460714CF9A610 /* PFURLSessionCommandRunner_Private.h */, + DFE6FDE4C6292695F3EBEFE040B0685E /* PFURLSessionDataTaskDelegate.h */, + A3DF42FD99A813DEBC5C62B3491B1AC0 /* PFURLSessionDataTaskDelegate.m */, + 780EF3BE11B2381FB28EB629FB8CBC29 /* PFURLSessionDataTaskDelegate_Private.h */, + CFC48C77C63A582B14A5B098E6FCF482 /* PFURLSessionFileDownloadTaskDelegate.h */, + BA8D893893775B109603AF7A33CD563B /* PFURLSessionFileDownloadTaskDelegate.m */, + C40DDFB915A319DD1CC8CD9340920EFF /* PFURLSessionJSONDataTaskDelegate.h */, + 9357693A996038C30E8C787613239775 /* PFURLSessionJSONDataTaskDelegate.m */, + 347D5D631A6A12B0298E13B5415AEAAF /* PFURLSessionUploadTaskDelegate.h */, + AA5D3771AE76625915E333CFABB45A05 /* PFURLSessionUploadTaskDelegate.m */, + 450938391ACE611C45583A2F6117FD6D /* PFURLSession_Private.h */, + 0E8BFD8BC695971FCCBA291EDD68F350 /* PFUser.h */, + A3A5889AC5CCB95EF1C4DD6B7C5C930D /* PFUser.m */, + BB019CE2BDFE6EC36FCD9993DB744EFA /* PFUserAuthenticationController.h */, + AD9250D9FE4979DF37C24BE1CDB4FF8B /* PFUserAuthenticationController.m */, + DD1568F7E2ED50F1C629DDF3D9F3020C /* PFUserAuthenticationDelegate.h */, + 9645D0E8258AB75B2C992E0915EA9BC2 /* PFUserConstants.h */, + F0662D5C0759804552360A67D1BDFBA0 /* PFUserConstants.m */, + 08DB18CB20934926437D11F21D1D9B8E /* PFUserController.h */, + 358BFE48BAAE8F3F03CD0C0904BC4C08 /* PFUserController.m */, + A2BD31107881F3881ADCD378256D4B02 /* PFUserFileCodingLogic.h */, + 5DA5FA1FA814DC209F9EABCD6B9119F6 /* PFUserFileCodingLogic.m */, + 457B2F0DFF5B74AEFF8A1D9A714104EA /* PFUserPrivate.h */, + 562875D8611745AF8CD45A6CDA6DC927 /* PFUserState.h */, + 8072BEAB5E3DFBED370817399B610731 /* PFUserState.m */, + 5E5F89585BF738F0A58C77BC3BE1A932 /* PFUserState_Private.h */, + BA10EEFBDA4AD314FB6D71B9DBD76FB7 /* PFWeakValue.h */, + FFE3BF2FE5A767CB3A9F0B32672156AB /* PFWeakValue.m */, + 12BB94C26636A7E690216E2AEEFAF264 /* Parse.h */, + 7A880B37F4F90E6B3CCA1B3FAD582B81 /* Parse.m */, + FC0150E534DA14510CC9BC5D0C1AFFB3 /* ParseInternal.h */, + 4CD3D62A5F9D0B310DCF7C520D812B6F /* ParseManager.h */, + 1DB83418592CB04C28FA16D53A2F50BB /* ParseManager.m */, + BEAFE0D908EC855629B1121D957A354A /* ParseModule.h */, + A011CA3F808702224552F151CBB37A51 /* ParseModule.m */, + FFEA133F46FCCEC9897A623F3336EC38 /* Parse_Private.h */, + 58A31A01D078FCF8E66D5353FA341FA2 /* Resources */, + 4A3B2BF0C2CE1DB37AB68EDF92FD44AB /* Support Files */, ); - name = Pods; - path = "Target Support Files/Pods"; + path = Parse; sourceTree = ""; }; - BCFFB6976DC888EB71BCE10C88727CA8 /* Support Files */ = { + C2714C2E5FA708AC2BFA8D6C15D7BDE2 /* Support Files */ = { isa = PBXGroup; children = ( - 77312E9917F3B4071B52F28CD4A21EBC /* Bolts.xcconfig */, - 397A9B2690E0D54158F63ECBF0C769B2 /* Bolts-Private.xcconfig */, - D5A05A4C5F9BA9C066877A324EE3B697 /* Bolts-dummy.m */, - 29386A5F2F357AA19B9627F8C57A8D14 /* Bolts-prefix.pch */, + E73B966684C4350307ED9BFDFA142DF1 /* AFNetworking.xcconfig */, + 69C89E4E56C77B03B486A9C81B595B44 /* AFNetworking-Private.xcconfig */, + 0B19A6DDEB20A310104A97E0953192B8 /* AFNetworking-dummy.m */, + 86A60F0A962861AF2DAA6A87C133F7E8 /* AFNetworking-prefix.pch */, ); name = "Support Files"; - path = "../Target Support Files/Bolts"; + path = "../Target Support Files/AFNetworking"; sourceTree = ""; }; CCA510CFBEA2D207524CDA0D73C3B561 /* Products */ = { isa = PBXGroup; children = ( - 9C22BE2BFE0552D4CF4E6F400DCBF925 /* libBolts.a */, - A88229973FC49C97305F3F69622999F1 /* libParse.a */, - F81BCD1B1E1DFA056533AFD9F925EA0C /* libPods.a */, + DE3508684073BF9ED1EE176A805EE3FC /* libAFNetworking.a */, + CF774A16F869C80126A81687EB1E85D6 /* libBolts.a */, + 3161EE94B4EAC7208319195F1483596D /* libContextMenu.iOS.a */, + BD2D7F17F9C540FBFE58E4DB0EEBDC9A /* libParse.a */, + 5CE1AE8BFDFAA049F0F73E15ED7ACE9E /* libPods.a */, A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */, ); name = Products; sourceTree = ""; }; + CF98E27314C6E37BA444B6EAEAC629AE /* Serialization */ = { + isa = PBXGroup; + children = ( + 93F14E13D1AAFFA4C781869593E6A6FF /* AFURLRequestSerialization.h */, + D0E74CB04A2E39384A95EDA3500A04D2 /* AFURLRequestSerialization.m */, + 7A69D20AEBC89B67DD33CA2CC54E309B /* AFURLResponseSerialization.h */, + 80B7FAB2B889140EDF2DC60D3C4A5969 /* AFURLResponseSerialization.m */, + ); + name = Serialization; + sourceTree = ""; + }; D2411A5FE7F7A004607BED49990C37F4 /* Targets Support Files */ = { isa = PBXGroup; children = ( @@ -1490,243 +1751,260 @@ name = "Targets Support Files"; sourceTree = ""; }; - DB22940D3278BA5A422F059D4EFE7C6B /* Resources */ = { + E2B9394A418EE71C1E22343458733EF0 /* iOS */ = { + isa = PBXGroup; + children = ( + FB0347B267799D3314B6438A04D898BF /* AudioToolbox.framework */, + 48514E935FE3E435F151EFEB4D829A65 /* CFNetwork.framework */, + 6408EC1F7E48296B333659567543173D /* CoreGraphics.framework */, + 0E1148A11007AFF78ABDECD376185D39 /* CoreLocation.framework */, + 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */, + 2BD22E7A59F4BEFF52D4F43A0AA7EB30 /* MobileCoreServices.framework */, + 8BABE1F9D15A2416835BA1EC9EB7E043 /* QuartzCore.framework */, + AE87F34D52CD28E7113F03F7CEA01F06 /* Security.framework */, + 35568ABE019B8ED099EFF07CE242DD67 /* StoreKit.framework */, + 74BAE971C6A2FC6F319D21B31E77EAE8 /* SystemConfiguration.framework */, + 8F270D2F5F74F0965904AC60E014742A /* UIKit.framework */, + ); + name = iOS; + sourceTree = ""; + }; + EB57DDB3388FBC701046A1E93218737F /* Frameworks */ = { isa = PBXGroup; children = ( - D0F22730A2A2917C6F9777B1BF5F179D /* en.lproj */, + E2B9394A418EE71C1E22343458733EF0 /* iOS */, ); - name = Resources; + name = Frameworks; sourceTree = ""; }; - F9400E82BDA8E39AA40BABDC6CB12014 /* iOS */ = { + EE85D36C044E4BB468AE05B65485762A /* ContextMenu.iOS */ = { isa = PBXGroup; children = ( - CEC32F2ED903D3546EEEA22AC6E13F4E /* AudioToolbox.framework */, - FEA6E529E5BC10A92A3372E82A3225C3 /* CFNetwork.framework */, - E7CDC14FF480C0D409AF7711FADC9DF1 /* CoreGraphics.framework */, - F31229637871A1DB25EEC72DEEA4CABF /* CoreLocation.framework */, - 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */, - F2AD64A1E39EF0EC17E66E7C8C765930 /* QuartzCore.framework */, - 792D4196F6AB3ECF94F94E4B1A786D9D /* Security.framework */, - 4987E5DF7D6AE7BBDE4D3055F00A8B27 /* StoreKit.framework */, - 5A71F8897B642BC983919241A133904D /* SystemConfiguration.framework */, + 1E4D88B0EC5CA12C799F9F3C05C0B31E /* UIView+YALConstraints.h */, + C5560C46514764C06929B264B533F518 /* UIView+YALConstraints.m */, + 01D2ED1DF56FF3AE05B1515043302F71 /* YALContextMenuCell.h */, + 7977EE0242992DA9A68D3DCB922B66CB /* YALContextMenuTableView.h */, + 385A446A8250571BBD7FF461E05E1382 /* YALContextMenuTableView.m */, + A2B93CF04B449D80B12ACC4F1E8164D9 /* Support Files */, ); - name = iOS; + path = ContextMenu.iOS; sourceTree = ""; }; - FCB614EA9285C86CCE0AD5E74051EB98 /* Pods */ = { + FA527DA126D49BE2A84BEFE3B6068EF2 /* Support Files */ = { isa = PBXGroup; children = ( - 57CCF01DFB7BD7239D93A5448BA92D0A /* Bolts */, - 08C21DBD68BB3A37A0BE4BC2CA161F5E /* Parse */, - 2CB5B158C2A118C167797A87812DAE77 /* pop */, + 036A8C9E0C46D47ECECB6E33E53B2BEF /* Bolts.xcconfig */, + F0959918976A05003B1E7FB37A8F8749 /* Bolts-Private.xcconfig */, + DBD87B92425DF4F2F580DDE78C400947 /* Bolts-dummy.m */, + 1C4613FF21CF534DDDB393C04D6279F3 /* Bolts-prefix.pch */, ); - name = Pods; + name = "Support Files"; + path = "../Target Support Files/Bolts"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 2ED471274550E62AFAA4EF426E74A34D /* Headers */ = { + 6F684E437947AECF10AF1B392C27FE0A /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - FF543356567A2076067A44509DE5A382 /* BFTask+Private.h in Headers */, - 3DAE979FD23E68CCEDE5C9990E3AF75C /* PFACL.h in Headers */, - 40FE9D72CA9DA4CA46C68105DC932825 /* PFACLPrivate.h in Headers */, - 8F946B1B0CB71A2E076491477639AE22 /* PFACLState.h in Headers */, - C1F432F11DB9BD57E3362B6957C1EF7C /* PFACLState_Private.h in Headers */, - 569287C78D527E46F67C066FF86DF966 /* PFAlertView.h in Headers */, - E8C1875783064DFD43523A4C35575FA2 /* PFAnalytics.h in Headers */, - 18B2F23AF51EC0206B5D34C2C1CA20AF /* PFAnalyticsController.h in Headers */, - E20B8CE9522CBFCF2037DC756B7AAA26 /* PFAnalyticsUtilities.h in Headers */, - E1393DAFC2E3D6FD28C314E970FB2973 /* PFAnalytics_Private.h in Headers */, - 2D80A28041C979830EC19F3728752554 /* PFAnonymousAuthenticationProvider.h in Headers */, - 7D845F4DE461D22465CD1C2747BEBD06 /* PFAnonymousUtils.h in Headers */, - 04ACE9FD008EAD5D882046A427B6F000 /* PFAnonymousUtils_Private.h in Headers */, - 5C19F0A13BF4CF2730EC0980905D19C5 /* PFApplication.h in Headers */, - DF25C24556E3261B0B580E89B1080CDF /* PFAssert.h in Headers */, - C3C2EA6FFF35A91DC79C6DCC8082FE95 /* PFAsyncTaskQueue.h in Headers */, - CDCD90E74BE99950B279D3B8A47CB748 /* PFBase64Encoder.h in Headers */, - F9AF286C68FB0128D9E7F6BC6B633B21 /* PFBaseState.h in Headers */, - 6E5C3BB91BA09FB4513D0721465C4FFB /* PFCachedQueryController.h in Headers */, - 6A93F8BA7D137B0EDE155E86F464C4C0 /* PFCategoryLoader.h in Headers */, - 756DA89EA9395CB7359CC904E06BAA18 /* PFCloud.h in Headers */, - CD128BF4560D91E52D923A5E0800998D /* PFCloudCodeController.h in Headers */, - 5CED75FE18276FFAA65BA5C3736DBBAD /* PFCommandCache.h in Headers */, - 884AF83BEB07D814F2E85E5DF5D1AC9E /* PFCommandCache_Private.h in Headers */, - 396E7A1AB7916FBCD13664E19DE2BC76 /* PFCommandResult.h in Headers */, - C3534B5AFC24CDF4EEBD2E7455004776 /* PFCommandRunning.h in Headers */, - 9FBE3E9BC1A8E3243D0FEC88022BA5DA /* PFCommandRunningConstants.h in Headers */, - 025EEC0368FDBA71ACFCB68A39C3655D /* PFCommandURLRequestConstructor.h in Headers */, - EA1270889DC45F05BD5349952FEC10DE /* PFConfig.h in Headers */, - C302FB217081A69E712D54BBA15612FA /* PFConfigController.h in Headers */, - FCDD1AECC17F3CDC339C3C5DD388C7F0 /* PFConfig_Private.h in Headers */, - D144A740430A65EA206B949452D309B9 /* PFConstants.h in Headers */, - DA7B999E1677271A6399FA19E28AE870 /* PFCoreDataProvider.h in Headers */, - D7EF8899052A30529A12811A433ABAF7 /* PFCoreManager.h in Headers */, - F97952FC246CFA2BD4D966B5559A56C8 /* PFCurrentConfigController.h in Headers */, - 1EEDD4EA1C24F8C275BF3FDEC4F21220 /* PFCurrentInstallationController.h in Headers */, - 09919F2A8CC0DCFF455F2F7A8B9E5D46 /* PFCurrentObjectControlling.h in Headers */, - C75CBB06C3466C044296CB3A76C39124 /* PFCurrentUserController.h in Headers */, - 8EDDF70EB01189C643A552F542A5955E /* PFDataProvider.h in Headers */, - 5B685F83F56F617391F88FD766346D1A /* PFDateFormatter.h in Headers */, - ACFF1A205850EAA9CE547A839884E5FA /* PFDecoder.h in Headers */, - 6DD3D07AFA4F7CA2CD9C301E85689F27 /* PFDefaultACLController.h in Headers */, - 959FB0E5183326169568C347A926C0B8 /* PFDevice.h in Headers */, - 2B113DEE9FAAA55635324A5175A121C3 /* PFEncoder.h in Headers */, - 33D40C6A5051E866D76B0CCF67CF541C /* PFErrorUtilities.h in Headers */, - 9FE68887DC4906E768DC10E6FEC7BC39 /* PFEventuallyPin.h in Headers */, - 92F016328F4C0F799AD1B4A8E0DDE9A2 /* PFEventuallyQueue.h in Headers */, - 9FF0D77E5D6A8A71D3D00A6CC35E429B /* PFEventuallyQueue_Private.h in Headers */, - 6BFF6EDB4C8C521CD4F3DAA75AC1805A /* PFFieldOperation.h in Headers */, - B7944220338A46BC74DF8E3DB9895901 /* PFFieldOperationDecoder.h in Headers */, - 0886359057F4348C659E5B51CFDFB6EB /* PFFile.h in Headers */, - C9BA3DB96B743CFBE38D620BA1F21753 /* PFFileController.h in Headers */, - D5F1B35353D67059C7894FA00393D39E /* PFFileDataStream.h in Headers */, - CE7E600E6E370B6DEF0116643F7FD8DE /* PFFileManager.h in Headers */, - 03A25737600F83E8C55F2AB9779A8E7C /* PFFileStagingController.h in Headers */, - 443A4588858747A69D9B526ED5778AB0 /* PFFileState.h in Headers */, - 6625ABFFA433446F0AD935A23A5BBA3D /* PFFileState_Private.h in Headers */, - 0FDD8F5E664D0EA41C89347205454FF6 /* PFFile_Private.h in Headers */, - C9D963064AA22F16470F6AF907BAEF1F /* PFGeoPoint.h in Headers */, - DF40D05E8A808693AEAD061BC751E6D3 /* PFGeoPointPrivate.h in Headers */, - 721650D6F618B7A6F1C1ECBB033544BC /* PFHTTPRequest.h in Headers */, - 47DAE36CDA380C8BA9C0A17C781993E7 /* PFHTTPURLRequestConstructor.h in Headers */, - 2F21FA644C383C630A49A59124F4F297 /* PFHash.h in Headers */, - CCFC440E3597BEDAC7796B03DE5A63CF /* PFInstallation.h in Headers */, - 750884DBC2F9D2C41A1C81EAB8E11978 /* PFInstallationConstants.h in Headers */, - F406237401551FF73ED1D6F46B9613FD /* PFInstallationController.h in Headers */, - 686A7F89082DD9140CD3DDC0E6904483 /* PFInstallationIdentifierStore.h in Headers */, - B701C1AB6D06324BC6CC23A5783F75ED /* PFInstallationIdentifierStore_Private.h in Headers */, - ED53A85BF245B2C2031C3ED8ADE3BC69 /* PFInstallationPrivate.h in Headers */, - D7E97759E6C76BA2331C5D8D3A056ACB /* PFInternalUtils.h in Headers */, - E0DF71DB6998FAE77D5C39BEB24AB41B /* PFJSONSerialization.h in Headers */, - 7139362B02E25FDB87C5DE753807A988 /* PFKeyValueCache.h in Headers */, - DFD0235CD7EF6A677A5B0CC1DF6C9462 /* PFKeyValueCache_Private.h in Headers */, - FF6DC72BA5C030A41082FBB3A9214E57 /* PFKeychainStore.h in Headers */, - 316E54BAB18CE88AA1AF6A3FC1C06BCC /* PFLocationManager.h in Headers */, - 1A570F4695129D835CD30EB6BBFF6657 /* PFLogger.h in Headers */, - CF85BDB59935EB93ACFA51C5C530EDC1 /* PFLogging.h in Headers */, - D8FE5C4D33B6D32B89424C8F18E196AB /* PFMacros.h in Headers */, - 0448850F9AC7EAD3AFCF4F76B8E9A0CB /* PFMultiProcessFileLock.h in Headers */, - B2AB6582389389DE491AB68BF28F7737 /* PFMultiProcessFileLockController.h in Headers */, - E662115101B5163A7982610F06468C1B /* PFMulticastDelegate.h in Headers */, - 06198F665E7E5D5095FA80C3DE87FFF0 /* PFMutableACLState.h in Headers */, - 16BEED5DCCB91A2FA43E9F5E656F7F2E /* PFMutableFileState.h in Headers */, - EE20B2B23083B041332BC3C78D75FFCA /* PFMutableObjectState.h in Headers */, - 8C39E16E4A0EDC4C5864392126C2AB38 /* PFMutablePushState.h in Headers */, - 84826CB970129BA778C3A48CCB1B68A3 /* PFMutableQueryState.h in Headers */, - D961D58817C2A1A8B99A49BFAA840CD0 /* PFMutableRelationState.h in Headers */, - 59470446A0F13135B25E820D1B76EE20 /* PFMutableUserState.h in Headers */, - 39BAD8B311E33771256B966A57843B95 /* PFNetworkActivityIndicatorManager.h in Headers */, - 3F52D5FD7AA3B7AFFE181B47D6E7EDC7 /* PFNetworkCommand.h in Headers */, - FFF2129425021FE43AAA3D726791994A /* PFNullability.h in Headers */, - D8D1BDAC175C1556633F19CFD6D07A50 /* PFObject+Subclass.h in Headers */, - EAE0AA415A5361DD0541D5373560E0B4 /* PFObject.h in Headers */, - 0869A1319F02EA8C47B814645AD4AF4F /* PFObjectBatchController.h in Headers */, - CC4D511200D693558A979423DD703DE3 /* PFObjectConstants.h in Headers */, - 20EBA85FEE98957543B214F730AB4A8D /* PFObjectController.h in Headers */, - 9BDD798D159E329F52F7F8515EE88F7C /* PFObjectController_Private.h in Headers */, - 6EBFA4F90244DC3C8A8C531D0616F725 /* PFObjectControlling.h in Headers */, - 43F261FEEA8A1683059CFFE377B80DB3 /* PFObjectEstimatedData.h in Headers */, - 1B9AE1750A101AE8FF9B774B981088B3 /* PFObjectFileCoder.h in Headers */, - D8ADFE9ECE18ADF00E4078785FED3EE2 /* PFObjectFileCodingLogic.h in Headers */, - A283D115AB0163B72CF54838E83208EC /* PFObjectFilePersistenceController.h in Headers */, - 15891E0CDBB02CD8E27F08B0027DE0F3 /* PFObjectLocalIdStore.h in Headers */, - 166A51403710FA4669EFB0EF749BD63F /* PFObjectPrivate.h in Headers */, - B0416CF20216A1C9A598CE958C8B2C47 /* PFObjectState.h in Headers */, - C9A1866D93CA32DE4D93C03F83A9F935 /* PFObjectState_Private.h in Headers */, - F0F3981F5CFA9D5FEE36528C4F57BE46 /* PFObjectSubclassInfo.h in Headers */, - 7667FCD8500AD6A29077C9412887D793 /* PFObjectSubclassingController.h in Headers */, - ADF188B732A69F682114E2047DC0CBBB /* PFObjectUtilities.h in Headers */, - 72EDD8852F2BDAF5CEA81572EF096E58 /* PFOfflineObjectController.h in Headers */, - BFA580E3421FCBDA60EFC80446F5F827 /* PFOfflineQueryController.h in Headers */, - A07615C44B09A564A1D5AA636366CDDD /* PFOfflineQueryLogic.h in Headers */, - 496C5BBF325D1380F718B05EC92EA397 /* PFOfflineStore.h in Headers */, - 46E08CFA7AAF23F9DD6E3CA9BDF1377B /* PFOperationSet.h in Headers */, - 05FB5EA05407A51C90CE53EC75528A35 /* PFPaymentTransactionObserver.h in Headers */, - E927E067F38B0E8A9795FECEA9D9CD97 /* PFPaymentTransactionObserver_Private.h in Headers */, - D0CFD3BCF7854439EBFFA50340677C48 /* PFPin.h in Headers */, - 6DAE8FA462265C812F6E4DF0A55AEF3E /* PFPinningEventuallyQueue.h in Headers */, - 35C36CD9503D9EC4A28209B5E035D087 /* PFPinningObjectStore.h in Headers */, - E98C8B10EF19A9D5799C9CBDBE2C91BA /* PFProduct+Private.h in Headers */, - 69E80DB61969642C17191BC5BBA98A29 /* PFProduct.h in Headers */, - 6D95E647A7F297CD5158021B8FD3ECCE /* PFProductsRequestHandler.h in Headers */, - 3BA271FC19614D18554DCEB45AA7C8B3 /* PFPropertyInfo.h in Headers */, - 6F9126E3FFC98310534685D7A8B31E82 /* PFPropertyInfo_Private.h in Headers */, - 12A8CFFBCED5FBBFE861423D8EEED31A /* PFPropertyInfo_Runtime.h in Headers */, - 5F0405B82B5E4A4E8875AAAD48EAFF78 /* PFPurchase.h in Headers */, - E1A22FDBCBBF2D241041F87458597FC3 /* PFPurchaseController.h in Headers */, - 655081C07BD22C6D7E64FD52025748A0 /* PFPush.h in Headers */, - 5569DBBFB4ABCE878961443B04A8F22F /* PFPushChannelsController.h in Headers */, - F752BA3F9DFCB0CFF12254ED534F812E /* PFPushController.h in Headers */, - 4C3E4F71058661B73B9327E1BBED5B13 /* PFPushManager.h in Headers */, - 81A0777C4DAF87256B60351C9AEBA3E6 /* PFPushPrivate.h in Headers */, - 35416F01689A7DDCE6E0D5668322F1CE /* PFPushState.h in Headers */, - 7802CAB6E61C60D1015477E448730D85 /* PFPushState_Private.h in Headers */, - 7E7DEA7F45E08BD27B568717F16EAF0B /* PFPushUtilities.h in Headers */, - BECF2F58F7E02B74509D304FFE07A644 /* PFQuery.h in Headers */, - 799C410D6861767245C86294947EC504 /* PFQueryController.h in Headers */, - 222B13AB149B127438E6C3A0402F3B9A /* PFQueryPrivate.h in Headers */, - 59834354CB20F36C447DD2955928EDDE /* PFQueryState.h in Headers */, - A3AAF279B04666F0C05D7927CE27A26D /* PFQueryState_Private.h in Headers */, - 26EAB43BBB1FCD57FE349D3E8F930B89 /* PFQueryUtilities.h in Headers */, - 3066F217E0560A5956224017904AC0BA /* PFRESTAnalyticsCommand.h in Headers */, - D441BA266DCA0FE4D2C6A3B18187A67C /* PFRESTCloudCommand.h in Headers */, - 4A28BFE309A0D988EF39EE2EC9510164 /* PFRESTCommand.h in Headers */, - F4922902A8496B92175E98875B1E43EE /* PFRESTCommand_Private.h in Headers */, - 889D5DF1B5D854141AE48D0AE6AD24E8 /* PFRESTConfigCommand.h in Headers */, - B88D88CD06342309AB76482FA60552B5 /* PFRESTFileCommand.h in Headers */, - CCFCBBE62C9D209092C1A6C69BEBD2BB /* PFRESTObjectBatchCommand.h in Headers */, - BEFFE38E1E8C0426757AFD411F4ECC28 /* PFRESTObjectCommand.h in Headers */, - 3E74198746ACFE9E3471838F88A99221 /* PFRESTPushCommand.h in Headers */, - 39CC63B33F77D1681BF28E360F70F51E /* PFRESTQueryCommand.h in Headers */, - A86527EA3EF359DC5B93896035962C45 /* PFRESTSessionCommand.h in Headers */, - 45873E765FB3EAA10D59BFCEDCEC4320 /* PFRESTUserCommand.h in Headers */, - 7AE8BFA590D9C85818D795FAA6A3E120 /* PFReachability.h in Headers */, - E8433C7C8B26411E6E7290E579C83F4E /* PFRelation.h in Headers */, - 520C83141D41FC85B6C1A563CDA10C70 /* PFRelationPrivate.h in Headers */, - B3509517E43EB89AAEE0691907901C01 /* PFRelationState.h in Headers */, - 37F1E816600B8383A177AFA48F9B9551 /* PFRelationState_Private.h in Headers */, - AB06C3BFB45A1282141E1630F26DABCF /* PFRole.h in Headers */, - 8522518AEE7008DCC13F9A88897D023F /* PFSQLiteDatabase.h in Headers */, - A519820C333BF4B2BF7490C991DE1D96 /* PFSQLiteDatabaseController.h in Headers */, - 071BCA62D30752EC13996F5B307BFFEF /* PFSQLiteDatabaseResult.h in Headers */, - C1580926FB1C1390D09A615D658340EF /* PFSQLiteDatabase_Private.h in Headers */, - 4B4AB0A2CF5ECF807CC6D6BE5057AA22 /* PFSQLiteStatement.h in Headers */, - 72013EB65410BE1E5CA73DC32B0DFE11 /* PFSession.h in Headers */, - 885E3EC52D206058C4C8E9FDB31C6EC6 /* PFSessionController.h in Headers */, - 179F8265304E06A1E027D13136B5DECC /* PFSessionUtilities.h in Headers */, - 8A68AFFA32F2BBD210BBD27A1F1A4E63 /* PFSession_Private.h in Headers */, - E51943C1A9FF65B5EE048CBF4F395D9B /* PFSubclassing.h in Headers */, - E925E091713124195ED1CD1EC8573CA9 /* PFTaskQueue.h in Headers */, - 594661284E1136D1D927A831478A58C8 /* PFThreadsafety.h in Headers */, - 8490465F1BE562C84A9C2CF7F2125F13 /* PFURLConstructor.h in Headers */, - 3713BC71FAC8A9D24C899ACE945AEBE1 /* PFURLSession.h in Headers */, - F3EB191FFE3A408094DE22C5702866C7 /* PFURLSessionCommandRunner.h in Headers */, - F900480B0F50E907D9223FB00D113C81 /* PFURLSessionCommandRunner_Private.h in Headers */, - 7745A799CA4ED9892587851FBF71E345 /* PFURLSessionDataTaskDelegate.h in Headers */, - 7D485860692A0F8A7DFA3A8677E6BB1C /* PFURLSessionDataTaskDelegate_Private.h in Headers */, - F8CBAB6E6152105BE58195EABC8F3759 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, - CE5C3235213BC24CD1C18DF4054C62B9 /* PFURLSessionJSONDataTaskDelegate.h in Headers */, - 5374E8CE7E7C39178DE04676172D49A9 /* PFURLSessionUploadTaskDelegate.h in Headers */, - DFC8670E99D9BA07E6F493DA68D12043 /* PFURLSession_Private.h in Headers */, - 7ACEEE6226F28499972A0954D7E62D24 /* PFUser.h in Headers */, - 5E61BAC7772421369DA00363F31DBADE /* PFUserAuthenticationController.h in Headers */, - 2ADCD4987CEC04072FE60FD15CB4058D /* PFUserAuthenticationDelegate.h in Headers */, - 57BDE0042C46044BDA9F9731BE767BF2 /* PFUserConstants.h in Headers */, - 13E3B4D00549AFBC51E6C7305A7EA1DA /* PFUserController.h in Headers */, - E595F2FFEA2AB67264D93F0C8D1C22C3 /* PFUserFileCodingLogic.h in Headers */, - E4A07CA965878A2042A19A9ABE5A1D1C /* PFUserPrivate.h in Headers */, - 659C6F42D23ECCCD7B01C02A20779C9D /* PFUserState.h in Headers */, - 08AAE6FC8BAE4DFF3E2B00BF4957E2BA /* PFUserState_Private.h in Headers */, - 6B4B0E078B36ED6BA341705E30747327 /* PFWeakValue.h in Headers */, - DC4DAB9ECA41D83DC8DC29AFE6BC73B9 /* Parse.h in Headers */, - 6B8677DEC15D1D29722EFE9C0B6BF6E4 /* ParseInternal.h in Headers */, - 3503373C9952DD9070E7ECAE238838F3 /* ParseManager.h in Headers */, - 98F6FA069E3C79D86CEF1EEB5EDE283C /* ParseModule.h in Headers */, - 12CC1275B7906C440CAA09E6CD435DE2 /* Parse_Private.h in Headers */, + FF06683CECBB72CC198613D50C833E94 /* BFTask+Private.h in Headers */, + E0377CE7F7C2101F3D5BE001EFCABE4D /* PFACL.h in Headers */, + 6378CF7EDB22FBB77D96DEBAA2552517 /* PFACLPrivate.h in Headers */, + 1DA04B4E7477A3C6ED4E64EB100997C3 /* PFACLState.h in Headers */, + 3535E9FC786DCF87B160127BE2ECB0BD /* PFACLState_Private.h in Headers */, + CF9126AE266CD109325E9779E8989D52 /* PFAlertView.h in Headers */, + 055D430D3080E69525A1CB4E226AE6AD /* PFAnalytics.h in Headers */, + E4A9466EF1DE5966768709FD1DEBC244 /* PFAnalyticsController.h in Headers */, + 4D7202CCD20BEE8BD04BB17D3D304AF2 /* PFAnalyticsUtilities.h in Headers */, + 78D9A4A9E2EB39C92A78BBA7A7C2892F /* PFAnalytics_Private.h in Headers */, + E387EBB7F209061962244F91C82014E1 /* PFAnonymousAuthenticationProvider.h in Headers */, + EEB02FC19C729B08DC6E52A58694A62E /* PFAnonymousUtils.h in Headers */, + 0567E8CB52A88D784048A608C7DFA3AD /* PFAnonymousUtils_Private.h in Headers */, + 5DC9D0A553754F872A6C6EDF5B8D51C3 /* PFApplication.h in Headers */, + 9E5744C6E239498952CB6C2AB7AB8573 /* PFAssert.h in Headers */, + 947A48148E5A557DFCFE1524486F0748 /* PFAsyncTaskQueue.h in Headers */, + 36EC255A02DFAD503AE5742DB66EAFBC /* PFBase64Encoder.h in Headers */, + 27EAB5CE83D76D32110761949B978720 /* PFBaseState.h in Headers */, + D801E515C96AD14143FED389A6D20831 /* PFCachedQueryController.h in Headers */, + C44757A96D797254C3E4471D7DBC7A12 /* PFCategoryLoader.h in Headers */, + DF153F159E0E2D991A092293D9A30CC1 /* PFCloud.h in Headers */, + C7DF7CFB90482868050B69FEF4373317 /* PFCloudCodeController.h in Headers */, + 5935304BB5A45EE7BF047CD984EBFB73 /* PFCommandCache.h in Headers */, + C0CD48B4F4A7ADE0E8F3763065D58B67 /* PFCommandCache_Private.h in Headers */, + 75E51F885183754FEFE576DB32781B13 /* PFCommandResult.h in Headers */, + 8A30DA243ACAA1A89F305D1AB23B2428 /* PFCommandRunning.h in Headers */, + 6C39436633D2F7986ED9FAE8CF87F494 /* PFCommandRunningConstants.h in Headers */, + 18B67D18CD4B27B89C1FB0B4C6E33EDE /* PFCommandURLRequestConstructor.h in Headers */, + DF6048F6B377ED247B79AFCC8B69621E /* PFConfig.h in Headers */, + 4EFB6054A4319D663B1AB4BA681A03B9 /* PFConfigController.h in Headers */, + 5555C4B8729021B6051BD58E96BEA0BD /* PFConfig_Private.h in Headers */, + 186FCA5BEF75F30B6A368BD3819F22E7 /* PFConstants.h in Headers */, + E743F3901CB2167FBBC28F2054A34421 /* PFCoreDataProvider.h in Headers */, + 83B4223F07E9DB236E15C2F3242CF2E0 /* PFCoreManager.h in Headers */, + 0F0B220351D06ECFB17DFF2EC338D0CD /* PFCurrentConfigController.h in Headers */, + B642AE3024EF50F194A5BC047EECEB71 /* PFCurrentInstallationController.h in Headers */, + 5615E187912379539C73AEBDCBB69AB4 /* PFCurrentObjectControlling.h in Headers */, + 7FA3F9143281C5C42D3CB8AD7442887A /* PFCurrentUserController.h in Headers */, + 3BEDAF0982149FC43350CD19D854DB44 /* PFDataProvider.h in Headers */, + 40E084818025A5B88AA7BDBFCA7F3D3D /* PFDateFormatter.h in Headers */, + 901C26F961EF48B307C4F82285380A0F /* PFDecoder.h in Headers */, + E518D12AF66FE6BF2AA57FCECF4C5C09 /* PFDefaultACLController.h in Headers */, + A1EF906190CCCF5E5F778921BB29D04D /* PFDevice.h in Headers */, + 4B9E5C8C8330A9073755CD7BA0DE94E1 /* PFEncoder.h in Headers */, + 9AEAE527EF5775E4554D7E8A48D2431B /* PFErrorUtilities.h in Headers */, + 7CB69E68D976DE206E09BC7743792BA3 /* PFEventuallyPin.h in Headers */, + E19D243F4ACB365A65A5BA008694E4B6 /* PFEventuallyQueue.h in Headers */, + AD2E8FF8584E338AC854AD47224895B0 /* PFEventuallyQueue_Private.h in Headers */, + 57F507F10A1BB85EA45DA90E31045D4C /* PFFieldOperation.h in Headers */, + F5D54F9BEFE298257F9134EA893B5C8D /* PFFieldOperationDecoder.h in Headers */, + 8DC7C47A7CC5950EC009B5618371C48E /* PFFile.h in Headers */, + 31E55D99949F54193700F33C7FD34DA6 /* PFFileController.h in Headers */, + 4FC6DEBE5ABA5E9CBABDD1DBC3BBFB04 /* PFFileDataStream.h in Headers */, + 638A30D79CD262C8C3291933357B2135 /* PFFileManager.h in Headers */, + 1EEB8D22B9718EDB6CB1C314B3EB38F4 /* PFFileStagingController.h in Headers */, + F085F0D853691CCA544D3D2152B34018 /* PFFileState.h in Headers */, + 99136C89548B177E60DD34A91B5ED192 /* PFFileState_Private.h in Headers */, + 6C073E3CAB26DE3EC33FE490DF02FC8C /* PFFile_Private.h in Headers */, + D8077B11B5F174C1072201BB8D597B08 /* PFGeoPoint.h in Headers */, + DE1227CB453C1C67BEDF44DC54EF1BAA /* PFGeoPointPrivate.h in Headers */, + B038216F0632C36A1370F7C881A09001 /* PFHTTPRequest.h in Headers */, + 72A2AA035FA76AFDB9F2081C1E6E9617 /* PFHTTPURLRequestConstructor.h in Headers */, + C22396DE37E095718482FAC4D8D796D1 /* PFHash.h in Headers */, + A6128B349568C6B56EF5FD2C22D0D98F /* PFInstallation.h in Headers */, + 629633A8DDB4D329242214C1C6EA85A5 /* PFInstallationConstants.h in Headers */, + B4C1CDF486FF24005182DE7A7BD1DF95 /* PFInstallationController.h in Headers */, + 761655FD6EAFDF34F4BB6B5024A9950C /* PFInstallationIdentifierStore.h in Headers */, + C91D09FFB740401B045D4AECAC5C997E /* PFInstallationIdentifierStore_Private.h in Headers */, + 10812A750A13684F4C638D481A7B5234 /* PFInstallationPrivate.h in Headers */, + 85F948A79ED6DA01A4AD4F8C2BFF690D /* PFInternalUtils.h in Headers */, + 65C3A46AFEC65C14F9A669B9E2171ABA /* PFJSONSerialization.h in Headers */, + FBB9982DF9350395B60873C7EBC35687 /* PFKeyValueCache.h in Headers */, + 3E422E5F9B8E3F76E4C900039E54EE29 /* PFKeyValueCache_Private.h in Headers */, + B69E68EBE8B2C725353EEB0041CBDBF0 /* PFKeychainStore.h in Headers */, + 6A5F690E541D3B2BFCDFB9EC94F1AA73 /* PFLocationManager.h in Headers */, + 1B15C523B8D5B8B3661CEA14DA2BE238 /* PFLogger.h in Headers */, + 7196C7AF34A6CEA821271AD022AB457C /* PFLogging.h in Headers */, + 1BCB49287D526538FE27C92495A7C7C9 /* PFMacros.h in Headers */, + A2C9CDC9EF3AFD417433B15BD6F3ED5C /* PFMultiProcessFileLock.h in Headers */, + 2CF3E58396AB85B06C5F11298F43FE91 /* PFMultiProcessFileLockController.h in Headers */, + 2499A62D47B33872BF0DADA0BAC4BD47 /* PFMulticastDelegate.h in Headers */, + 24B5B7B9820114759F93C6FD6A713CD4 /* PFMutableACLState.h in Headers */, + 058502343AC3618129AC9439EA85335A /* PFMutableFileState.h in Headers */, + BA36862D7FCDDEF2FF3F44E4FCF1FEC7 /* PFMutableObjectState.h in Headers */, + D7EC19C57A7BE418E80D9B4321310DD0 /* PFMutablePushState.h in Headers */, + 5489C4B47D41585D9CD38481265528D7 /* PFMutableQueryState.h in Headers */, + B7EAF0146BF7255844B4382778C1DCC3 /* PFMutableRelationState.h in Headers */, + ADD444672255653A7B0DE3C76FE9DA9B /* PFMutableUserState.h in Headers */, + 244417641E77C9E95C92078E54777D85 /* PFNetworkActivityIndicatorManager.h in Headers */, + 9EED9C8A845D06EE53C1403FBFB196BF /* PFNetworkCommand.h in Headers */, + E23601D8BB9D0538FAD5F3DAF6251F76 /* PFNullability.h in Headers */, + C2E44B209546E7866532737094B259F1 /* PFObject+Subclass.h in Headers */, + 8214C48967620CE6A0CDE08A672A35E1 /* PFObject.h in Headers */, + B62A1615577F1DF5C0987D382AFD154B /* PFObjectBatchController.h in Headers */, + 118BAA009D3D59B3EAE79710C991E16F /* PFObjectConstants.h in Headers */, + 20CE99207001FC9C10E242287C253996 /* PFObjectController.h in Headers */, + 9AA96E4A9687620F8C196ED2FABBA5DC /* PFObjectController_Private.h in Headers */, + 8A8C8E47DA7D2D2F3EB55930A84F9DE5 /* PFObjectControlling.h in Headers */, + 7C4A3111F3BA07CC804F53B11B85F91A /* PFObjectEstimatedData.h in Headers */, + 18B651969BB7CBCC4E2B38F1631FF6E2 /* PFObjectFileCoder.h in Headers */, + 8019DF40B2B2165FC5EB24BD6BB5C320 /* PFObjectFileCodingLogic.h in Headers */, + 298E48D1F7EE66DBD2CE7B1081DAAAB3 /* PFObjectFilePersistenceController.h in Headers */, + 7A19D5E1912F1F0AC4DB6BAB2E818B19 /* PFObjectLocalIdStore.h in Headers */, + 416DEEABAAEF3F52A524963C6185F128 /* PFObjectPrivate.h in Headers */, + A341920891C64694F15002A14274DBD0 /* PFObjectState.h in Headers */, + 8E4E90FFCA09F9F8CBB4B3B02624C46A /* PFObjectState_Private.h in Headers */, + 8503FD13A1BF53A7A91C6FC7FAFA90F9 /* PFObjectSubclassInfo.h in Headers */, + EE2A8C0E8B415EC8E006AC7B1F243C65 /* PFObjectSubclassingController.h in Headers */, + 3C401E23A540BDCC225B5C87F2069A02 /* PFObjectUtilities.h in Headers */, + DC765E1CE8C9208AB476C0138BEA41BA /* PFOfflineObjectController.h in Headers */, + 40B66FB31F7627FB33B911C4E2AAA916 /* PFOfflineQueryController.h in Headers */, + 28A7C073D31DDF6C59967A931BD5766C /* PFOfflineQueryLogic.h in Headers */, + C8E94A5768C9FEEDEEBE2D9513D7BD36 /* PFOfflineStore.h in Headers */, + 991B10CE642953BD125D956E15532841 /* PFOperationSet.h in Headers */, + C35492542D744906958BA9387A6DEC2C /* PFPaymentTransactionObserver.h in Headers */, + 36DA904B38775E96B9F00B1F60A4EAB8 /* PFPaymentTransactionObserver_Private.h in Headers */, + 149FA64D0DB7931320E1337D5DF51D95 /* PFPin.h in Headers */, + 63C69E993C498EA39DD1E26BC8919A39 /* PFPinningEventuallyQueue.h in Headers */, + 279E99356D07335E887C39DB5C0E5370 /* PFPinningObjectStore.h in Headers */, + 55D282FE0C9269BA1E05D31AF560DB2D /* PFProduct+Private.h in Headers */, + 1B3D2F66E11EACBEC93D5138DDA5991E /* PFProduct.h in Headers */, + FA534A151F3B55AB2E7EA80B4C522BB0 /* PFProductsRequestHandler.h in Headers */, + 7E15C7398334F43931603A970C332DB9 /* PFPropertyInfo.h in Headers */, + 766CF09C4050A89F6FF611B19D3AEA11 /* PFPropertyInfo_Private.h in Headers */, + E531951BF8A2CDC0A1865EF2CA115D46 /* PFPropertyInfo_Runtime.h in Headers */, + 7469D8A552A998387B59B30A9AD71F68 /* PFPurchase.h in Headers */, + 449AC60A131638EEEA3F97F931C03891 /* PFPurchaseController.h in Headers */, + 1421591EB34905B0745B67D11682989B /* PFPush.h in Headers */, + 543DE88D4CFC0102FF1D16C6718032A6 /* PFPushChannelsController.h in Headers */, + 8DFE18ED9D0679395D555A5D2E1D6A61 /* PFPushController.h in Headers */, + 9AFC0F0B06328DD11F5A269FC9D061D4 /* PFPushManager.h in Headers */, + A04091E4AE50036E9788A73F231A5E7E /* PFPushPrivate.h in Headers */, + 41521CD3844A812C3397D6564CA06416 /* PFPushState.h in Headers */, + 6DC9DCD2E199EE08136DFB9D8BBE17BF /* PFPushState_Private.h in Headers */, + 9603828D1EE5DFF8E2FCC43A612C2F6E /* PFPushUtilities.h in Headers */, + C68996C6D2A15E462A0B94666E1B17E3 /* PFQuery.h in Headers */, + F5189CA8C80BB857AE36C733A89A5DC8 /* PFQueryController.h in Headers */, + 14AFCA315D7308DDC8D506B3F74FADF7 /* PFQueryPrivate.h in Headers */, + 434E79FDEC38451A64203A9A367D52A7 /* PFQueryState.h in Headers */, + 91F2E7E0881F466BDF8CDDC26C780CFA /* PFQueryState_Private.h in Headers */, + 3BC9D144F933784273CB48ED48DEEDE1 /* PFQueryUtilities.h in Headers */, + 16CF2BCA2E368236EF475D6362A13491 /* PFRESTAnalyticsCommand.h in Headers */, + 27B935CBBBBEFD1F68871D79F7631F58 /* PFRESTCloudCommand.h in Headers */, + 36A0EDEF8443BF059C5DB307F7965A1F /* PFRESTCommand.h in Headers */, + 60E2A7A43AE9D6EACF4B5E3AD4FBFA04 /* PFRESTCommand_Private.h in Headers */, + C6C48576B6391837714FCEF3440243AE /* PFRESTConfigCommand.h in Headers */, + 405FB9DDBD091D87674AF85C7B194D5A /* PFRESTFileCommand.h in Headers */, + D56CAFD0B02331EB90CE5F19010B827A /* PFRESTObjectBatchCommand.h in Headers */, + A7A4C7B12C8EBCD1DD511612DF60BC62 /* PFRESTObjectCommand.h in Headers */, + 0A963324CC60CAA719E82B65A42F8F92 /* PFRESTPushCommand.h in Headers */, + 30FFBDB396C82253175D828DA2BEA835 /* PFRESTQueryCommand.h in Headers */, + F5A533001D5694222A42A7E5733F70D7 /* PFRESTSessionCommand.h in Headers */, + FBE5198936C677351A1994966CFB0E0E /* PFRESTUserCommand.h in Headers */, + 1E924C4848F63BBFC1FCF597FC9D5FD2 /* PFReachability.h in Headers */, + 10B6EC5F1F87C64ECBB431E75CBFD609 /* PFRelation.h in Headers */, + A588DBAF2FF022F204CD18AA9E6FB568 /* PFRelationPrivate.h in Headers */, + 9736106D305E2FACC163BE070DC6B12E /* PFRelationState.h in Headers */, + EFAE8EEDB4F6537B805A0D3FC7F794E5 /* PFRelationState_Private.h in Headers */, + E5EB368969123151E92F49962A1A3FCB /* PFRole.h in Headers */, + EEC3CE2CB2428CE7EEAF37BF2E0187AF /* PFSQLiteDatabase.h in Headers */, + 69067BE779C91E991C908BA33C234ACB /* PFSQLiteDatabaseController.h in Headers */, + 26BC591287F171CDC227D4C715DE0BFD /* PFSQLiteDatabaseResult.h in Headers */, + 144AF01BA8F6AC27B465052C4C1F4A63 /* PFSQLiteDatabase_Private.h in Headers */, + 4C554340F9C8D98F3D3DF059FF829952 /* PFSQLiteStatement.h in Headers */, + 22028A0623B440907DBA76FE0F64B6E0 /* PFSession.h in Headers */, + EFCAC58E3F3A4442F400FFC8626AD9B9 /* PFSessionController.h in Headers */, + FDE3635ACA000137F91099FB8A77B904 /* PFSessionUtilities.h in Headers */, + 8C29699238F02B904FACC35199216780 /* PFSession_Private.h in Headers */, + B5CFC6CC0CF004E986EEC23557FA0701 /* PFSubclassing.h in Headers */, + B255A029FDCAB0B2E6F6B106AC5BBF91 /* PFTaskQueue.h in Headers */, + 842DB9C51BA822F734AA6A66EBFD61C8 /* PFThreadsafety.h in Headers */, + 469AFCA6DF69037CC22B9353A5840D2E /* PFURLConstructor.h in Headers */, + E880F7F33114312DF66A4E88E617C825 /* PFURLSession.h in Headers */, + E28D3D6AE3281331EFE0B93FB91853F6 /* PFURLSessionCommandRunner.h in Headers */, + 606DAFEA41DB4A57A32229A007CAE7F4 /* PFURLSessionCommandRunner_Private.h in Headers */, + 650C59C74ED1EB13FF81B3AD92EB75A5 /* PFURLSessionDataTaskDelegate.h in Headers */, + 9F2809547901C1650E2A6E3F1F11982C /* PFURLSessionDataTaskDelegate_Private.h in Headers */, + EC1B42BDF93A2565BCCDE2A014286022 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, + 77C37F47F9E54490AB397A6C560DF60C /* PFURLSessionJSONDataTaskDelegate.h in Headers */, + E8608D5E7A38E5A61282E3CF64502D18 /* PFURLSessionUploadTaskDelegate.h in Headers */, + FB4C49FBC327F28CB47026B0E290BE1A /* PFURLSession_Private.h in Headers */, + BA1F5D0A6C8651ECC8F39A20205C2782 /* PFUser.h in Headers */, + F394B0E3DFFC7734AB5051D1A5F4D68F /* PFUserAuthenticationController.h in Headers */, + 7E150D7DB4B83C1DBCCFEFE86C047020 /* PFUserAuthenticationDelegate.h in Headers */, + 1D5C062D011FA396D6BD0652197BC3D9 /* PFUserConstants.h in Headers */, + 562F0029981DB78EAF4891EFE5DD13A6 /* PFUserController.h in Headers */, + F120A50FD7FCA9658BBBDBA65EA9B1E2 /* PFUserFileCodingLogic.h in Headers */, + 74036443FB7468F873D7086A1E47B948 /* PFUserPrivate.h in Headers */, + 85320661106B07533362C37B029054F3 /* PFUserState.h in Headers */, + D4F7F5F0D98F002042E4891CD1DBFD5C /* PFUserState_Private.h in Headers */, + 9BE55D00A42730AF0221D2294926610C /* PFWeakValue.h in Headers */, + A235BB018AD7FAAE25C4A295FCC5A8BD /* Parse.h in Headers */, + B54F3FF3E7274202D9C8F1E4AAC09873 /* ParseInternal.h in Headers */, + DD0CF6B6282013FA4E3830D6EC0F409A /* ParseManager.h in Headers */, + BFA8D7680070FE36E35FDA31CD18B68A /* ParseModule.h in Headers */, + 4954EF0625F842D1C956DA967DE52064 /* Parse_Private.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1770,25 +2048,79 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B1F5A4CD3EAA8902053406FEEF8F6B8A /* Headers */ = { + A321610E40E1146C0D88FBC300593C46 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 96397AB59008EA7392019A2EB9BCFE53 /* AFHTTPRequestOperation.h in Headers */, + 44EB9612F4CAF48C8B63696822A2A3BF /* AFHTTPRequestOperationManager.h in Headers */, + D3D1A0ACF80E0131F85BDE9E7D7E6303 /* AFHTTPSessionManager.h in Headers */, + 65BBE10D6AD162A261BD96636B2810CA /* AFNetworkActivityIndicatorManager.h in Headers */, + 013AE4595BF56A559DD3CA81669B0D67 /* AFNetworkReachabilityManager.h in Headers */, + FB0A5366764317E476526B1CCA42EB4C /* AFNetworking.h in Headers */, + 33D4081B410C93515F3AE2B05B1E6FEB /* AFSecurityPolicy.h in Headers */, + F412A6DC753D4FF45CA2663718823E3C /* AFURLConnectionOperation.h in Headers */, + 93DF5CCBA43C09201E435ED14A2A0961 /* AFURLRequestSerialization.h in Headers */, + EA2FD9A751EBAF09C8947C9BE65B8195 /* AFURLResponseSerialization.h in Headers */, + 2AE2ADB09903F3B39869810739754118 /* AFURLSessionManager.h in Headers */, + 2E135CA6B413C0D9809F7BC1D11822E1 /* UIActivityIndicatorView+AFNetworking.h in Headers */, + CA9B7B7B520E355A2E23B0D0EB8302A9 /* UIAlertView+AFNetworking.h in Headers */, + 928177B9981A0BEC3E7CDCDA26DABE9C /* UIButton+AFNetworking.h in Headers */, + CBE51D66F657DC502B81442C46F7220B /* UIImage+AFNetworking.h in Headers */, + E32C0C8E76B2398A462F2F44466C88C1 /* UIImageView+AFNetworking.h in Headers */, + AA14B649447F0CCDEE28838153CB8ED7 /* UIKit+AFNetworking.h in Headers */, + A0C4E0AE86CBEEDB70512630A54C1A74 /* UIProgressView+AFNetworking.h in Headers */, + 524D6BEE8260BC395116B1055A619C4B /* UIRefreshControl+AFNetworking.h in Headers */, + E4AEC74A16A03117C42C961DF1C65848 /* UIWebView+AFNetworking.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EEA47D4D68E6A315D022E0558B2446D2 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + E22F49523078CB46DB077CBF54C73202 /* UIView+YALConstraints.h in Headers */, + B8B9F34E2BBC7F8F7715F6851457261E /* YALContextMenuCell.h in Headers */, + 9596BB57B15E0F32ADC0E88D588DB70C /* YALContextMenuTableView.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FD580B49C886D584DD55A06F83D112A1 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - D4D4DAA939A8A78C5FA6D96B5F7D72E9 /* BFCancellationToken.h in Headers */, - 76B0379D807CF3B4B2097F46DD7F3865 /* BFCancellationTokenRegistration.h in Headers */, - 18EB839151EC2E5154EDD4CC83812E8B /* BFCancellationTokenSource.h in Headers */, - 29A5A8506AEFAC779C7872279E0978A0 /* BFDefines.h in Headers */, - A55836CDA983C1E665B1C57D7B7B71F9 /* BFExecutor.h in Headers */, - 1595244FE466EB44C6AEBBEA61B358BF /* BFTask.h in Headers */, - 5311B039E395DC406C7B4A16B4F20D57 /* BFTaskCompletionSource.h in Headers */, - 72C1E0F7FD22531F9422D5E312D251D0 /* Bolts.h in Headers */, - 50605C083705C4639C1DF50DCA513783 /* BoltsVersion.h in Headers */, + 3039F75251A2A754A7525EEDBF3907D1 /* BFCancellationToken.h in Headers */, + 9FF02193886279AC96AFB7BB7D21DDE1 /* BFCancellationTokenRegistration.h in Headers */, + EF0657162B6D12AB703D83918C3B36F9 /* BFCancellationTokenSource.h in Headers */, + FC1C0CA9220FCDE5447A43920AB3960F /* BFDefines.h in Headers */, + 0ECD46F443DEFF63C3BCBDC3A75363AA /* BFExecutor.h in Headers */, + E4322DEF695907DD78455D334243FC86 /* BFTask.h in Headers */, + DDC4E7634F0E7C723FF2EF86872FA1DA /* BFTaskCompletionSource.h in Headers */, + C4CF94A0BBEAE79C88C879094C1FF6BB /* Bolts.h in Headers */, + 6D67873D2EDAAB5DDBC501CA69E630C6 /* BoltsVersion.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ + 39991CD032545E130997094168EF96E2 /* AFNetworking */ = { + isa = PBXNativeTarget; + buildConfigurationList = 431EFC273B3FC2034AFD6C4C92E174CD /* Build configuration list for PBXNativeTarget "AFNetworking" */; + buildPhases = ( + 63A52441CABAEA2A034C298787B71B23 /* Sources */, + 79D6AFC8C82330655C0BAB54399B5D2C /* Frameworks */, + A321610E40E1146C0D88FBC300593C46 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = AFNetworking; + productName = AFNetworking; + productReference = DE3508684073BF9ED1EE176A805EE3FC /* libAFNetworking.a */; + productType = "com.apple.product-type.library.static"; + }; 47C800E42623009B7192B025B3DD25A1 /* pop */ = { isa = PBXNativeTarget; buildConfigurationList = 62C75DE36F62F6DD244D1001268287F5 /* Build configuration list for PBXNativeTarget "pop" */; @@ -1806,32 +2138,51 @@ productReference = A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */; productType = "com.apple.product-type.library.static"; }; - D219004FB928DD852E3C33624E58623C /* Pods */ = { + 538138A83A89C41D6A179BAAAA7A87CB /* Pods */ = { isa = PBXNativeTarget; - buildConfigurationList = 762EB94DC5F957130C5BF308781008D2 /* Build configuration list for PBXNativeTarget "Pods" */; + buildConfigurationList = 9B6492829B8D73AD10769E85FCA9F27E /* Build configuration list for PBXNativeTarget "Pods" */; buildPhases = ( - 2E41E4119C3007C0FE602FC981DC4F68 /* Sources */, - 308CA5637F79668BCF7E6F999A59A50A /* Frameworks */, + 40BBC341D8D7A72368D8E6B132E1D6AB /* Sources */, + 4A3A889F28618A29FB5570CB0D7FF3F5 /* Frameworks */, ); buildRules = ( ); dependencies = ( - C972B13B9130AEBC11060F7C2E61D8C7 /* PBXTargetDependency */, - 9B10575164CA1EFA8980256F26C95A06 /* PBXTargetDependency */, - 9408F168225A9295B417D7D9B496AE91 /* PBXTargetDependency */, + 9A649419F2A6E8DA31A1B71517CF82EB /* PBXTargetDependency */, + 4ECE2DEC9CA88EA95B0CAA98A75B9211 /* PBXTargetDependency */, + 6FB474EE146C7D054B64F0529723BBD5 /* PBXTargetDependency */, + 090DA03D4C071EB1C946E6266644F1D9 /* PBXTargetDependency */, + 4B7038BA1BDC2249906D6018B5F6C3AB /* PBXTargetDependency */, ); name = Pods; productName = Pods; - productReference = F81BCD1B1E1DFA056533AFD9F925EA0C /* libPods.a */; + productReference = 5CE1AE8BFDFAA049F0F73E15ED7ACE9E /* libPods.a */; productType = "com.apple.product-type.library.static"; }; - E1F0B29D8C274D3B4A2566B0DFA6A902 /* Bolts */ = { + 7D5B41A236FF14B6B02D4BAF6C4A690A /* ContextMenu.iOS */ = { isa = PBXNativeTarget; - buildConfigurationList = 737FE33D90851DA7D993D824EDBC7B82 /* Build configuration list for PBXNativeTarget "Bolts" */; + buildConfigurationList = D8C66A8CA86F8BA4F03E908B331BECA5 /* Build configuration list for PBXNativeTarget "ContextMenu.iOS" */; buildPhases = ( - BCC095C76C87025BD855EC569A96E04F /* Sources */, - BB7D88E900A22E45E6C2784D10858E80 /* Frameworks */, - B1F5A4CD3EAA8902053406FEEF8F6B8A /* Headers */, + E716450A5FA3787141F895F94CEB9A8B /* Sources */, + E7338E47FCC5A3CEF6E7565747FBD02C /* Frameworks */, + EEA47D4D68E6A315D022E0558B2446D2 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ContextMenu.iOS; + productName = ContextMenu.iOS; + productReference = 3161EE94B4EAC7208319195F1483596D /* libContextMenu.iOS.a */; + productType = "com.apple.product-type.library.static"; + }; + 9D8311DD3E0DA85313EF9710C8614AD8 /* Bolts */ = { + isa = PBXNativeTarget; + buildConfigurationList = 67A13180ACA2EC97B329D12BBF330556 /* Build configuration list for PBXNativeTarget "Bolts" */; + buildPhases = ( + C404306DBE18890298706A71A7863ED7 /* Sources */, + 23364613FB0830F19B97359477AA117C /* Frameworks */, + FD580B49C886D584DD55A06F83D112A1 /* Headers */, ); buildRules = ( ); @@ -1839,25 +2190,25 @@ ); name = Bolts; productName = Bolts; - productReference = 9C22BE2BFE0552D4CF4E6F400DCBF925 /* libBolts.a */; + productReference = CF774A16F869C80126A81687EB1E85D6 /* libBolts.a */; productType = "com.apple.product-type.library.static"; }; - E2B6A7F9ABCCE48BC851C4EAE332D8FB /* Parse */ = { + F7D0346E5B3C07CA2678B48D1D1BD750 /* Parse */ = { isa = PBXNativeTarget; - buildConfigurationList = 657E892C5C0C753EEFCFD7C80D8FB5BA /* Build configuration list for PBXNativeTarget "Parse" */; + buildConfigurationList = 05D30B977C164867CBB28678E172C5BA /* Build configuration list for PBXNativeTarget "Parse" */; buildPhases = ( - 4EA5CD4A82FB587802E1A0F523C575A2 /* Sources */, - 731E687FCFFA7ECF41C73A5082D0B09F /* Frameworks */, - 2ED471274550E62AFAA4EF426E74A34D /* Headers */, + 1A03F498BE17FF37BB8283717DD19577 /* Sources */, + 81EBEBB48DB0F24CCEE22EC96C01C619 /* Frameworks */, + 6F684E437947AECF10AF1B392C27FE0A /* Headers */, ); buildRules = ( ); dependencies = ( - 3C7A257897C0B9619DF09701A8BFF0C9 /* PBXTargetDependency */, + 3530AC604629113E40B76CB90F73E195 /* PBXTargetDependency */, ); name = Parse; productName = Parse; - productReference = A88229973FC49C97305F3F69622999F1 /* libParse.a */; + productReference = BD2D7F17F9C540FBFE58E4DB0EEBDC9A /* libParse.a */; productType = "com.apple.product-type.library.static"; }; /* End PBXNativeTarget section */ @@ -1881,9 +2232,11 @@ projectDirPath = ""; projectRoot = ""; targets = ( - E1F0B29D8C274D3B4A2566B0DFA6A902 /* Bolts */, - E2B6A7F9ABCCE48BC851C4EAE332D8FB /* Parse */, - D219004FB928DD852E3C33624E58623C /* Pods */, + 39991CD032545E130997094168EF96E2 /* AFNetworking */, + 9D8311DD3E0DA85313EF9710C8614AD8 /* Bolts */, + 7D5B41A236FF14B6B02D4BAF6C4A690A /* ContextMenu.iOS */, + F7D0346E5B3C07CA2678B48D1D1BD750 /* Parse */, + 538138A83A89C41D6A179BAAAA7A87CB /* Pods */, 47C800E42623009B7192B025B3DD25A1 /* pop */, ); }; @@ -1916,241 +2269,272 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 2E41E4119C3007C0FE602FC981DC4F68 /* Sources */ = { + 1A03F498BE17FF37BB8283717DD19577 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 16076CA62CD1EEB4CFA1957E9F923B40 /* BFTask+Private.m in Sources */, + 76BE46560E2489F20B07ADE2A8383AB0 /* PFACL.m in Sources */, + 6ECC50446D8CE723BFA8398E30E0B34B /* PFACLState.m in Sources */, + A57A790BA267D5575D66FBA7194C9C9C /* PFAlertView.m in Sources */, + 896910FF549C79158B14DBA4B82DD337 /* PFAnalytics.m in Sources */, + 025BE970FE1936D8AE73A5BD6FCF5A4D /* PFAnalyticsController.m in Sources */, + 410C3023E9AAE2B3E429CDCDA5B48391 /* PFAnalyticsUtilities.m in Sources */, + 69134BFEE551E2C9B6F3DACC87775C7C /* PFAnonymousAuthenticationProvider.m in Sources */, + 86563FC6CF9DA9365C823E7285BFE1FF /* PFAnonymousUtils.m in Sources */, + 2CD85B954E0A03C2FC81163F60CFC4D8 /* PFApplication.m in Sources */, + F0B1181F18792D478147E3051A915EB6 /* PFAsyncTaskQueue.m in Sources */, + 9C526742FC642C90CD9887187FD9478E /* PFBase64Encoder.m in Sources */, + EBD7FD53C5DEA72FEB27FF599E88BC80 /* PFBaseState.m in Sources */, + 26E8BB7BF9D5A57648508C4E19560B77 /* PFCachedQueryController.m in Sources */, + 375E59B3F0F22CB28FA382DDB3790F5D /* PFCategoryLoader.m in Sources */, + CFDDEDCA97A5F84CDDD5A6F1BFFA2243 /* PFCloud.m in Sources */, + D9B88BBFFE6342E41F3A86220B3B9410 /* PFCloudCodeController.m in Sources */, + B4EBD2930890E190BA160A6B52C9029E /* PFCommandCache.m in Sources */, + 2322FAF5379B9BC9FBEFF748570BECCA /* PFCommandResult.m in Sources */, + 8B3ECF63B2E1B777FC04BECEC1F7C0EB /* PFCommandRunning.m in Sources */, + BA645FA6D6E0D66E9CF92B04F93777DD /* PFCommandRunningConstants.m in Sources */, + E5831BEBB501CAE9B5B49F7C5BE1433C /* PFCommandURLRequestConstructor.m in Sources */, + 851D4FF3A335CF48002CAFE2E4F2E376 /* PFConfig.m in Sources */, + 2C043C346C73A86BCA7BAF2D9B4A6D42 /* PFConfigController.m in Sources */, + AC42EC854B284673B3E2CA42FD46285A /* PFConstants.m in Sources */, + 7070EE01AEB4E7454E9C81B2A421900C /* PFCoreManager.m in Sources */, + 4059140EA33C2322618F795A388B41D5 /* PFCurrentConfigController.m in Sources */, + F8A080400150D1AC42F6C531CAB577D2 /* PFCurrentInstallationController.m in Sources */, + 65EAB2BF94627BD112EE4724B065D38E /* PFCurrentUserController.m in Sources */, + 9195D181434FFDA880E3FFCCB38FE33C /* PFDateFormatter.m in Sources */, + 12641D479C071B60EF715865ABFCE798 /* PFDecoder.m in Sources */, + DD3558902E5E8D951999253854B2A573 /* PFDefaultACLController.m in Sources */, + A91F60D12B823B21A59FA96BC5AF0825 /* PFDevice.m in Sources */, + 6A96EFBD2ECDE315AA0FCC4BAD67A9F8 /* PFEncoder.m in Sources */, + 4F8D2DF83D8B2D41170ED4D1C05D6B55 /* PFErrorUtilities.m in Sources */, + 77A778BD6F968FCB02BD567C7B5A6D79 /* PFEventuallyPin.m in Sources */, + 0D2DC39580098F73627DE62060F0E256 /* PFEventuallyQueue.m in Sources */, + 97048C05413C62808681EA864F2667C4 /* PFFieldOperation.m in Sources */, + CB4CF87BD5935737F20BDF0C99B80495 /* PFFieldOperationDecoder.m in Sources */, + F39244CD95764B7D0C035FE193512606 /* PFFile.m in Sources */, + C2B622D57413084005AD4FF3FE3B4CBE /* PFFileController.m in Sources */, + 0CADB282A28A344B568CD36701CD99A0 /* PFFileDataStream.m in Sources */, + EB8809FA99543F795F70FD6A9F457547 /* PFFileManager.m in Sources */, + 5EB711D9E225DDEED6606BBF5E4D400E /* PFFileStagingController.m in Sources */, + 7140367343A5DBE5AEABEE022C385B6B /* PFFileState.m in Sources */, + D5859A1400F3FE968B0AFCC64C078904 /* PFGeoPoint.m in Sources */, + FC49E18E4DE9E4CEA0E8144D55F407A7 /* PFHTTPURLRequestConstructor.m in Sources */, + 507D5F0F50CC15E879DD054990D1693E /* PFHash.m in Sources */, + 359312B1BB35A2C98A870CFE8FB33B67 /* PFInstallation.m in Sources */, + 5B2E3974FFB3B52E1377C6959B742F56 /* PFInstallationConstants.m in Sources */, + 2060BB5093B7CC2D7AB326AD3FE0CEDC /* PFInstallationController.m in Sources */, + 7DC754D4F086EC145F14F6CDF360960B /* PFInstallationIdentifierStore.m in Sources */, + 91EDAEBEF03847E95272606E90B11838 /* PFInternalUtils.m in Sources */, + 4FBE8D3A5BB9B088B3D381A2A623FD4D /* PFJSONSerialization.m in Sources */, + C1570CA337867BEF23B4AC733E51D4B9 /* PFKeyValueCache.m in Sources */, + A1984ACB538B0EB2EC33303455FF996F /* PFKeychainStore.m in Sources */, + 24BA59BBC3BD72DAB4E18A3549C1C70C /* PFLocationManager.m in Sources */, + F947354D06D4DB18853AD81F00869ED3 /* PFLogger.m in Sources */, + F965B0BA7C7E070E515C1ED0343E68A3 /* PFMultiProcessFileLock.m in Sources */, + 77FFDD6A37B8A941ACF4ABEF102EE786 /* PFMultiProcessFileLockController.m in Sources */, + 3EEF37314E80E89B4E7A8176F07348A2 /* PFMulticastDelegate.m in Sources */, + EDCC71FC92D40B3862592FF1F64D9F22 /* PFMutableACLState.m in Sources */, + E08EE32C93126D92DC9E6961789914E7 /* PFMutableFileState.m in Sources */, + B87F4316CA745157952D0E957CEF8D0F /* PFMutableObjectState.m in Sources */, + 6628D87D3C8481FD02EC5908FE0842F4 /* PFMutablePushState.m in Sources */, + 738F9BE2CEAA34CA252698CB2D3724B3 /* PFMutableQueryState.m in Sources */, + B3E990CB8A89D42E7E9F7ED33D39721F /* PFMutableRelationState.m in Sources */, + 76CCB91B392B898460B3E17FAE24BC80 /* PFMutableUserState.m in Sources */, + 4071546C204958FA56B126598AA21012 /* PFNetworkActivityIndicatorManager.m in Sources */, + 2C7EC42E5437F4F927B80CF65D5CEA3B /* PFObject.m in Sources */, + E12A39C3E3423DE57BA268CB553E74DD /* PFObjectBatchController.m in Sources */, + 2F3A21F75992E245B70D2FAB4213679F /* PFObjectConstants.m in Sources */, + 192C2017BBCDB1177A5F77494B10ADEF /* PFObjectController.m in Sources */, + 54CC3108BC26BBB273A857924B6173BF /* PFObjectEstimatedData.m in Sources */, + 7A4647A24ED50F8CB942285D95285B10 /* PFObjectFileCoder.m in Sources */, + F2CCD104B91461CC1548C32C003353FD /* PFObjectFileCodingLogic.m in Sources */, + D149C0E66489B8A63BF8ED2BA213DF12 /* PFObjectFilePersistenceController.m in Sources */, + 2627401700D6CCD2EF48DDF1FE042FFE /* PFObjectLocalIdStore.m in Sources */, + D9B2F24603C0F48EC73090BC6DC94FCE /* PFObjectState.m in Sources */, + B07458C275E7B87DEAF687642BB4EDA2 /* PFObjectSubclassInfo.m in Sources */, + 1CAD0670AB203262F90F62BC3BADEB14 /* PFObjectSubclassingController.m in Sources */, + 37A5F32AC77016F849D167378E9675A3 /* PFObjectUtilities.m in Sources */, + 628EC2E2FC6B26D0F6C7ED0DAB935A84 /* PFOfflineObjectController.m in Sources */, + A9D0D78B1F9703C282B64100E9E8926C /* PFOfflineQueryController.m in Sources */, + 9CC680543CB311240352F92FB2493BB2 /* PFOfflineQueryLogic.m in Sources */, + C7344A2F05279C90561EED1D8EA489CD /* PFOfflineStore.m in Sources */, + 40FA82215DAF72DD25F30AE4D6AC2F5D /* PFOperationSet.m in Sources */, + F2D9EF32073176AC4B9F935577A44456 /* PFPaymentTransactionObserver.m in Sources */, + B1905D70D1237C127EBBFCC391721F35 /* PFPin.m in Sources */, + 10989B990683FCA58C99BB82050E5077 /* PFPinningEventuallyQueue.m in Sources */, + 157A5FFCF49C427C049F82A6C6E7EF9C /* PFPinningObjectStore.m in Sources */, + 82A1CF90239B1B2448900BC02195737D /* PFProduct.m in Sources */, + 7B4FF17B0F855D9EBD572C18D1EE839B /* PFProductsRequestHandler.m in Sources */, + 3D264439507D686CBF9E7040B2B181EE /* PFPropertyInfo.m in Sources */, + C050B90E44F1D7D1B242336E9ED81E08 /* PFPropertyInfo_Runtime.m in Sources */, + A20B7AB30DBD8368549A2ADD1834EE47 /* PFPurchase.m in Sources */, + DBA301B469C007350C52449ADB7E4236 /* PFPurchaseController.m in Sources */, + 9AEB47308349EFDFA683BF4A62CF195D /* PFPush.m in Sources */, + DF425C7C6CA426D5CBB0ADB6A96871C7 /* PFPushChannelsController.m in Sources */, + C5B8E5BD9C4C8E0AF430CD461992ACC0 /* PFPushController.m in Sources */, + 025598DFFF793FB641F506825074F34A /* PFPushManager.m in Sources */, + 5E344479C1E3FE458D0D732D5EFD8C8B /* PFPushState.m in Sources */, + 9E7CF062169C9A81B37510D0AD9162C2 /* PFPushUtilities.m in Sources */, + E0C01AA7CFB002785436D33521E5328D /* PFQuery.m in Sources */, + 3E1E0EBBE4CD3857AF753AA1AB9DF965 /* PFQueryController.m in Sources */, + B0CBDEF8AB0A74F25C79B87615C2A832 /* PFQueryState.m in Sources */, + 3C0D480E2EB6981485CFFA27131FACCC /* PFQueryUtilities.m in Sources */, + 191D1C449C141C961A7F6B7D6982B73E /* PFRESTAnalyticsCommand.m in Sources */, + 9FD4177987850C6E6E37BA911CDD3C1A /* PFRESTCloudCommand.m in Sources */, + D79E5121E2F988A64AE071076264C201 /* PFRESTCommand.m in Sources */, + F3C1136C8D88E18B962C1C4AF612B3B3 /* PFRESTConfigCommand.m in Sources */, + 3B3D6A60DE4D34A1163B63BAB228AD0E /* PFRESTFileCommand.m in Sources */, + E4D2116E355F2C101B6DE6296544C3BC /* PFRESTObjectBatchCommand.m in Sources */, + C910FDABF6D86FF242B7CD5A85FE7B94 /* PFRESTObjectCommand.m in Sources */, + FFDEE01AE0207886F8D70AA02F184FB3 /* PFRESTPushCommand.m in Sources */, + A0BA6E93BF48588EBC097ACE78DA328D /* PFRESTQueryCommand.m in Sources */, + 4A9B74E229EB5509659505EE1DE1692E /* PFRESTSessionCommand.m in Sources */, + 3D6CCE33D20C53A3D9E7C977ADFD6072 /* PFRESTUserCommand.m in Sources */, + E2D8E1BB40962D1F2A8E7C8B179CBB3A /* PFReachability.m in Sources */, + 060F06CDB2C21C334A0082FD9EA5D079 /* PFRelation.m in Sources */, + 865A7864DFFA64506A9F6C30E05ECEE3 /* PFRelationState.m in Sources */, + 76266C2FA1D348D717AC228690DC36EA /* PFRole.m in Sources */, + FB2E5E78E63B5474E21182AC6AB7AE38 /* PFSQLiteDatabase.m in Sources */, + 64CF2D655AAA7C7FBED2449AEC710E4A /* PFSQLiteDatabaseController.m in Sources */, + 75050C536E96095BD980D5A9F3593D53 /* PFSQLiteDatabaseResult.m in Sources */, + 8C37D4BE18B21A9CD00B953782624248 /* PFSQLiteStatement.m in Sources */, + BD7119081B9A134A53DCAD9949D575C4 /* PFSession.m in Sources */, + D4B06A600FA1DBCBB68ACFDE2E554753 /* PFSessionController.m in Sources */, + 3576593700E45C9EBD7D41E2565B1DF9 /* PFSessionUtilities.m in Sources */, + 84C42678DE4460E60A66876CDAC64149 /* PFTaskQueue.m in Sources */, + 82756AE351CEDAA36F92E191804E5C29 /* PFThreadsafety.m in Sources */, + 532D3DF59CE8F5865F4E86368EB6462A /* PFURLConstructor.m in Sources */, + 892C9CADE551523C8EDF800C648306EC /* PFURLSession.m in Sources */, + 2B0B2B3095BEFC0D0520B92D5354F428 /* PFURLSessionCommandRunner.m in Sources */, + 6D2F9FB21ADBAC74D397280A5832D308 /* PFURLSessionDataTaskDelegate.m in Sources */, + 4D74C041164EA0F477B58E5AC7FE23E5 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */, + 6848B68295C1A953461430BFAB2A5D46 /* PFURLSessionJSONDataTaskDelegate.m in Sources */, + 9CDAF8961B1E25C066FAC4D7D44433EA /* PFURLSessionUploadTaskDelegate.m in Sources */, + DE7E8446AB52346D9156DC34976D7342 /* PFUser.m in Sources */, + 1067E9F5F6F4D70E1111D34A159980FB /* PFUserAuthenticationController.m in Sources */, + 897527170E376AFAE5654193F3308633 /* PFUserConstants.m in Sources */, + 3114529BA3CA84D2274E6E9220D1B1EE /* PFUserController.m in Sources */, + 99CC3B1A726965F2F7E569FD3A7EA623 /* PFUserFileCodingLogic.m in Sources */, + AE56E1589FBE716D4F7C22543A5A4C71 /* PFUserState.m in Sources */, + CDCB55B6E5A8A71A543987CB14B2045E /* PFWeakValue.m in Sources */, + 882F9183523311ED2A32898E978C05F0 /* Parse-dummy.m in Sources */, + F3DDD9A3039C1313F12C2A248576DD56 /* Parse.m in Sources */, + 6A7DBAA42BF1E9104329ED6DD2FD0E91 /* ParseManager.m in Sources */, + BAB47A67F4485EE6E586A25B834A2801 /* ParseModule.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 40BBC341D8D7A72368D8E6B132E1D6AB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BE032518FE863AF44351DDE1D6844470 /* Pods-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 63A52441CABAEA2A034C298787B71B23 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7396B761D2B10B38F3FB6A02E916531F /* Pods-dummy.m in Sources */, + EED1C92E54E432794307DC75AF87EE82 /* AFHTTPRequestOperation.m in Sources */, + C521D37D942FE201D29B17ED2BACAFE1 /* AFHTTPRequestOperationManager.m in Sources */, + 1502050CA80F5B97E273857066C10540 /* AFHTTPSessionManager.m in Sources */, + 1249B7E8D033D0D59D0D8F097A745AB3 /* AFNetworkActivityIndicatorManager.m in Sources */, + F6C4B0AB4C5CC75A89E9E082659B1181 /* AFNetworkReachabilityManager.m in Sources */, + 786D083E69FEC7BBDAD2112F88692F61 /* AFNetworking-dummy.m in Sources */, + 7944A48A8FCFDF523DD67A11DA48E2D3 /* AFSecurityPolicy.m in Sources */, + FA8549933F4A9D5FC6E695B2C00C484E /* AFURLConnectionOperation.m in Sources */, + D1ED7907552DF919137E30AEDBAC4AD3 /* AFURLRequestSerialization.m in Sources */, + 1380A386F92D641C726FA9687404B11E /* AFURLResponseSerialization.m in Sources */, + 6F827A5588B3DF26C10C2E566D2D41E1 /* AFURLSessionManager.m in Sources */, + 354DC5158891E616616904856C60FA22 /* UIActivityIndicatorView+AFNetworking.m in Sources */, + 3E36642B632C36FD496D0345C6B12E15 /* UIAlertView+AFNetworking.m in Sources */, + 00275592A13B5D46B08409D995DB6ADB /* UIButton+AFNetworking.m in Sources */, + DEBBD76F7A9E5B75BF2732334FA25155 /* UIImageView+AFNetworking.m in Sources */, + BEDAE19BB304069C127DED5676C08866 /* UIProgressView+AFNetworking.m in Sources */, + 6FDF337377416BE9C6958B05AC1C571E /* UIRefreshControl+AFNetworking.m in Sources */, + 626E3E94132CE3E2B174CCB5C2E61241 /* UIWebView+AFNetworking.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4EA5CD4A82FB587802E1A0F523C575A2 /* Sources */ = { + C404306DBE18890298706A71A7863ED7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 40931C180200922A9FA22B2987A25CA2 /* BFTask+Private.m in Sources */, - 6A533C5F4EC965A14EF04454F44BFF8F /* PFACL.m in Sources */, - 2BBC1EDE95D8FE18729151D68C31A20A /* PFACLState.m in Sources */, - 3A3493E61B348824D84A23B067E06AA8 /* PFAlertView.m in Sources */, - E665D2FFA8C5E2DF0CF41646F343BF20 /* PFAnalytics.m in Sources */, - 69154DBCC2477D0C7A4F745CA0DADE93 /* PFAnalyticsController.m in Sources */, - 2706615ED7F95EB8B15127341388A254 /* PFAnalyticsUtilities.m in Sources */, - ED7A547801E2CF226D168EE9581DB321 /* PFAnonymousAuthenticationProvider.m in Sources */, - 44F6BF9666346E13D5C6FBD2E3F1F026 /* PFAnonymousUtils.m in Sources */, - 918B88539BDE8BCE275FBABA8A963FBE /* PFApplication.m in Sources */, - CC8E8A57D3BBFA56A0E43A0E575B3953 /* PFAsyncTaskQueue.m in Sources */, - D3AEE7BFCB370739A7466335493CBC36 /* PFBase64Encoder.m in Sources */, - 23397013BE39F0E00040409845815FB6 /* PFBaseState.m in Sources */, - 40DDD41E4C564B7D3C9E0099BB6B9410 /* PFCachedQueryController.m in Sources */, - D79AA81B759F1A80248C34F631B03EFF /* PFCategoryLoader.m in Sources */, - 107544526752B586BB04FF44D35C5102 /* PFCloud.m in Sources */, - DEBB00005BF92FA417EA2EB71432F063 /* PFCloudCodeController.m in Sources */, - B1192665DC9C93F109D3D4A7C5F83F43 /* PFCommandCache.m in Sources */, - 3A8A15B0446E07D02673B6C26D33D1F1 /* PFCommandResult.m in Sources */, - 69AAC2D0D00269D9768C8D7F8682F0E5 /* PFCommandRunning.m in Sources */, - A0827A0C141A76B1517B3EE4198B0DF1 /* PFCommandRunningConstants.m in Sources */, - 687532EAB67048417C42A2035ABC94C5 /* PFCommandURLRequestConstructor.m in Sources */, - FB7AC681EC198DEB192BC63B632C175A /* PFConfig.m in Sources */, - 118377BB16D5D852E20EFBF6CB987907 /* PFConfigController.m in Sources */, - B7AFE53318A19D6842F21C10377FF268 /* PFConstants.m in Sources */, - 5D791BF555DC7EB786672923861195D2 /* PFCoreManager.m in Sources */, - 72E104B003B673F8875E48CD3A237C23 /* PFCurrentConfigController.m in Sources */, - 94C30DE66C124BFE8505467FB41BBEBD /* PFCurrentInstallationController.m in Sources */, - FF964C55BB9F3A9A6B4DAD0FBC56AACA /* PFCurrentUserController.m in Sources */, - E5914E5A4EB68DFFFE65AB01ED44B155 /* PFDateFormatter.m in Sources */, - DB68821A5DA330EC6DB71D568020FC26 /* PFDecoder.m in Sources */, - 0457F8E0768F1EA24F6BBF399A2575A9 /* PFDefaultACLController.m in Sources */, - E9F5FCFDDFC1197D97AD06C4C14BA2E4 /* PFDevice.m in Sources */, - 4A81A9C50FCE3083B83AB000B52A4C4B /* PFEncoder.m in Sources */, - 61432F6CE266B1C52A7F75C11A36DE54 /* PFErrorUtilities.m in Sources */, - 16000B68D460BA81C95837AD36045066 /* PFEventuallyPin.m in Sources */, - 0B846D612D91734A3934991CE63FC72D /* PFEventuallyQueue.m in Sources */, - D8572431C5A5A56F48C334D79A6336AE /* PFFieldOperation.m in Sources */, - 8F1E1935F365BC4F1F4235594B8E2EF4 /* PFFieldOperationDecoder.m in Sources */, - 329D4CC19C753FF40AFBD505075E71DE /* PFFile.m in Sources */, - 1CD0B28DDD42993BAFEC02CC2FFBBE0C /* PFFileController.m in Sources */, - D962D24A9373D05F95BA2407DE1A9A0C /* PFFileDataStream.m in Sources */, - 543A2634117075614FDC4858F28CE298 /* PFFileManager.m in Sources */, - 56D20A2BFB5FC35FAC94E73E472FD291 /* PFFileStagingController.m in Sources */, - 1C1E96A7BBF8E7F8D79356191F174ED5 /* PFFileState.m in Sources */, - 40BE6157F49EB2FAF540BF98C3446787 /* PFGeoPoint.m in Sources */, - 763613884EE6DB9A9FA19FDA216D2557 /* PFHTTPURLRequestConstructor.m in Sources */, - 1D5D77684A5F13E35BB4BA7BC6A40E7C /* PFHash.m in Sources */, - AA25A8F11F6A8404563A6472F80AE790 /* PFInstallation.m in Sources */, - AAB1AECCF78B4BDEF517BCCD31BE4737 /* PFInstallationConstants.m in Sources */, - 63E39227EDD9668A6E8BC71B368A468A /* PFInstallationController.m in Sources */, - FC64B5EF6BA6F7E5F55223FB81992454 /* PFInstallationIdentifierStore.m in Sources */, - 9A386672D6BC9A0FEBF694BDDF02F83C /* PFInternalUtils.m in Sources */, - 45748239D7FD943D62792FAD588CDFA1 /* PFJSONSerialization.m in Sources */, - 99839220426BCEDC551D14D33E965F73 /* PFKeyValueCache.m in Sources */, - 2474618B1A731CCC67E7E9E8E967BD07 /* PFKeychainStore.m in Sources */, - F6D940BA794B0671DA54F656020B4724 /* PFLocationManager.m in Sources */, - 7708D5EBFAEEC08D4A1484B5E19F1EC4 /* PFLogger.m in Sources */, - CB2EF43804B9C179A60AF500104E4DE4 /* PFMultiProcessFileLock.m in Sources */, - 9B996D4F00B2755BC7E39E84301B792D /* PFMultiProcessFileLockController.m in Sources */, - D6A3E5E2F6450BBD8E30C39855291F74 /* PFMulticastDelegate.m in Sources */, - F1893CC2C1C931703396D917026576E8 /* PFMutableACLState.m in Sources */, - 8D8D0D14DDE055C1F9A3B7AD5C30513C /* PFMutableFileState.m in Sources */, - 68D20B8A77AD61D8796513B9176D3290 /* PFMutableObjectState.m in Sources */, - 386430CD6BC461BEED2316A11FC8FE48 /* PFMutablePushState.m in Sources */, - F67601BBBF33AFD98C62783D944447E7 /* PFMutableQueryState.m in Sources */, - C2D3FCAD9F82B00F0682B77F42C345B7 /* PFMutableRelationState.m in Sources */, - 4F5DB886DFF123A9B153B4B09E6AE057 /* PFMutableUserState.m in Sources */, - FF8769831CEEAC994C0278991436D422 /* PFNetworkActivityIndicatorManager.m in Sources */, - 3E37D17B235B28EE15722A4EC6292082 /* PFObject.m in Sources */, - 4F6006F15CF4E92C3FABBB82AA76FECD /* PFObjectBatchController.m in Sources */, - 319B8E861E6F24AE259C346D7B14D5E4 /* PFObjectConstants.m in Sources */, - B47547A8DD4DBA73A1AE3C19B48D65FB /* PFObjectController.m in Sources */, - 7E1562F052AEDE34309BF03D4C00C34C /* PFObjectEstimatedData.m in Sources */, - D2DC5F2DF23C18B8D3E71721F1CF8C54 /* PFObjectFileCoder.m in Sources */, - 27CFA5673C9671412C57A625FCB0CBFD /* PFObjectFileCodingLogic.m in Sources */, - 3A7FA4B7E74C5E26CDE357F96FC98103 /* PFObjectFilePersistenceController.m in Sources */, - FB133DC3F020B283A9C68C69221C4554 /* PFObjectLocalIdStore.m in Sources */, - AE6D8714C88E965694D9862943ED9C03 /* PFObjectState.m in Sources */, - 430889BECFF5F51BE84FC1D36982B334 /* PFObjectSubclassInfo.m in Sources */, - 843A8657E58A5C6CF6439EDDFC6792C8 /* PFObjectSubclassingController.m in Sources */, - 8E0F15A272B998241EB984429079E746 /* PFObjectUtilities.m in Sources */, - C42E6522EF606545E8A2FAC0B86FA953 /* PFOfflineObjectController.m in Sources */, - B6B00390A7F7EC4B3604C04E0C98F498 /* PFOfflineQueryController.m in Sources */, - D818EB5E41E22563226772A8E632B3DF /* PFOfflineQueryLogic.m in Sources */, - 7A645555139B041ED6863030E619072B /* PFOfflineStore.m in Sources */, - 621279BB6006488862FBED865442AD17 /* PFOperationSet.m in Sources */, - 019F0B043AC4620E8D1ED11D6D250BAE /* PFPaymentTransactionObserver.m in Sources */, - EDFEBA20ACE8D9590AAE42ECCDC1E07C /* PFPin.m in Sources */, - 6398F44FC456E6FCA1592AD36FCDF9D4 /* PFPinningEventuallyQueue.m in Sources */, - BA79DCD39D35E2EAAAF31A25A096902F /* PFPinningObjectStore.m in Sources */, - CA6F32BF249CC4F676BA2B2E1F0B2187 /* PFProduct.m in Sources */, - 3CF4F8B20D4E0A674526ABC8D4FBCA50 /* PFProductsRequestHandler.m in Sources */, - 78C6EFE00AD49FD7773149CC43D5724A /* PFPropertyInfo.m in Sources */, - BD5FF8B5573BE7C19EA98B24C8F93F36 /* PFPropertyInfo_Runtime.m in Sources */, - 76917A212479DD1B43BF4D57305AB31D /* PFPurchase.m in Sources */, - 469CD764E4D9746AB3FE052DFC905A38 /* PFPurchaseController.m in Sources */, - 2E47D04C4E99302A4E0D5BCB44A7DA35 /* PFPush.m in Sources */, - C66CF47F117BB663AB5B1ADA991B0873 /* PFPushChannelsController.m in Sources */, - 6F6F629E71E042C4CBD0BEF41B092779 /* PFPushController.m in Sources */, - 3A4BDE3681900808879A0C40B8E2F1F1 /* PFPushManager.m in Sources */, - E644B27DC71808C09CE53B8E0F3664E2 /* PFPushState.m in Sources */, - E51AFF71C5470CEAB47D6B501FA5C00E /* PFPushUtilities.m in Sources */, - 0AD21100FCF0450862222785E05331C8 /* PFQuery.m in Sources */, - A57EE3F25E0818AE1A729712F7031779 /* PFQueryController.m in Sources */, - 7B42E1FCBFAF2E2E556BFBFB10A70A87 /* PFQueryState.m in Sources */, - E620DDB4910DB912EB504ED542FEB907 /* PFQueryUtilities.m in Sources */, - 1EA0550E7CBF55104A94BEB8BF651CE1 /* PFRESTAnalyticsCommand.m in Sources */, - 337CEF0FD2D5C1BB6678DD707EA56DA6 /* PFRESTCloudCommand.m in Sources */, - B43DAD49C7DB952A1671EEF20BD1727A /* PFRESTCommand.m in Sources */, - D458C6C955A5A584E1EE2532E6B6B9D9 /* PFRESTConfigCommand.m in Sources */, - EFF59F0F5823C5E0AF46C1B33EEDFB7B /* PFRESTFileCommand.m in Sources */, - 642D57D3B89C7A445FF70615D32FF5F8 /* PFRESTObjectBatchCommand.m in Sources */, - CADB1639CC60E0010303A74644A2603B /* PFRESTObjectCommand.m in Sources */, - C4D1E4A8DF86647F268B2B3B5099E112 /* PFRESTPushCommand.m in Sources */, - 6B36C3C0CC3704D7094501B152180465 /* PFRESTQueryCommand.m in Sources */, - 07BF9641830B6995B62971E3D7D08125 /* PFRESTSessionCommand.m in Sources */, - ED3221AC0471FA6C715B09F71EF806A0 /* PFRESTUserCommand.m in Sources */, - AAF0E5F5CB4203D4E7CE26E4C0BC3BC1 /* PFReachability.m in Sources */, - A8E9F368C383FD058B852D43922CF0F7 /* PFRelation.m in Sources */, - 12F6909B52C61D7E799B5B309749B735 /* PFRelationState.m in Sources */, - 26E76884A04FD6D5A7F3CD5DDB1755D0 /* PFRole.m in Sources */, - 1DA51F2E2858C95CE8D940AFDA4F7463 /* PFSQLiteDatabase.m in Sources */, - A7596C495E396AA4ADAFEDD15E895C54 /* PFSQLiteDatabaseController.m in Sources */, - 0BEC8B0B2E2717328E0F93CF88DDA5FF /* PFSQLiteDatabaseResult.m in Sources */, - 2D298D017CBD10AA0EA097AAF97DCBBB /* PFSQLiteStatement.m in Sources */, - 3599E28E04EAB539A5FD9D834DC5A75C /* PFSession.m in Sources */, - F178A1C8334EE76BE6CE0AF09483BECA /* PFSessionController.m in Sources */, - A1F6D97FD7A81F664C8F963087074FE3 /* PFSessionUtilities.m in Sources */, - 8A84163B84117C1B37D4A421EE6A8943 /* PFTaskQueue.m in Sources */, - BE1697124F67485E93A628B7F078B922 /* PFThreadsafety.m in Sources */, - 6E51AD72EEA9BB0640F71452899AE452 /* PFURLConstructor.m in Sources */, - 884628EDE5DAD0644DCE27A067163F03 /* PFURLSession.m in Sources */, - D49D69813605DD09C1F06A6489EAD663 /* PFURLSessionCommandRunner.m in Sources */, - 6920CB7ED6DC80E0D75D9F2FF4A32886 /* PFURLSessionDataTaskDelegate.m in Sources */, - 8D3EF8A73C774CBEC3A40FEBFAA6731B /* PFURLSessionFileDownloadTaskDelegate.m in Sources */, - E51AF1267A478883DFA384597EDDB15A /* PFURLSessionJSONDataTaskDelegate.m in Sources */, - F39072DEE0911AC516A6A0E2312E43FF /* PFURLSessionUploadTaskDelegate.m in Sources */, - DCE8E177A147347F73E86C4065D60299 /* PFUser.m in Sources */, - 35F26A4BE5FEFECFAA3193997D497ED8 /* PFUserAuthenticationController.m in Sources */, - B586166AE0F8830D3720E2A1349D21FC /* PFUserConstants.m in Sources */, - 9726AABD59B5FC7DFE5B754FBD4CCCE1 /* PFUserController.m in Sources */, - 3470652D4A3D8DF6369A8C303B7C433F /* PFUserFileCodingLogic.m in Sources */, - 8B8C2F0BB0FBC8744B2B789306086224 /* PFUserState.m in Sources */, - 6DBBFD7DD52BE4CDC38C8A5FB05F342E /* PFWeakValue.m in Sources */, - 7B2ACE85B665E6234E698BF5BFFC05DF /* Parse-dummy.m in Sources */, - 2E5CFA31157D42A4D6D2D5E58E0C6679 /* Parse.m in Sources */, - 2E3617FD5EAF3820AC2BE01858D14B55 /* ParseManager.m in Sources */, - 61ED0A41D76F0726400142A59D904E8D /* ParseModule.m in Sources */, + 8F23210C8BC4F5C9280066640C17C69B /* BFCancellationToken.m in Sources */, + 21D65B5E8DF938F32091BDBD66B1E5D1 /* BFCancellationTokenRegistration.m in Sources */, + AB0423F50C0C64EEE86C2680EC9F02B5 /* BFCancellationTokenSource.m in Sources */, + E219C58B408FA57BF94D5A4113C59B87 /* BFExecutor.m in Sources */, + 90F6AC61C0D614F4F3DD46C81171C8ED /* BFTask.m in Sources */, + C6E0B8D8F68167D1CEA74DEAAE59F09A /* BFTaskCompletionSource.m in Sources */, + D22255492F43BE2B59EDB2478E8C5818 /* Bolts-dummy.m in Sources */, + 842EC859A33C10671D3500B99F24C6C5 /* Bolts.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - BCC095C76C87025BD855EC569A96E04F /* Sources */ = { + E716450A5FA3787141F895F94CEB9A8B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 594CB78A508EC57A208E26DE4240AC4F /* BFCancellationToken.m in Sources */, - CB90858A2BAC0D76349EF1E1F8D62375 /* BFCancellationTokenRegistration.m in Sources */, - 9BF33FD7A487A930572B4018194FF4AF /* BFCancellationTokenSource.m in Sources */, - 04E0463B6BEA9B8021EF9D47A0D70D48 /* BFExecutor.m in Sources */, - F425727E94B1F6A5753C672782668DA5 /* BFTask.m in Sources */, - A3971E85AC1BFAFE9979360CCCCFA4BC /* BFTaskCompletionSource.m in Sources */, - 4D2107B82EB19D5552F0D8643B72A7F7 /* Bolts-dummy.m in Sources */, - 00119247713445361CB349494BD8721A /* Bolts.m in Sources */, + 46DCE2CC317AC30889B0B674F4C86173 /* ContextMenu.iOS-dummy.m in Sources */, + 6ACF579F7F083EF03A3DBB128D76B4C3 /* UIView+YALConstraints.m in Sources */, + 27C6F9BEE80BC03933C78785106C81FE /* YALContextMenuTableView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 3C7A257897C0B9619DF09701A8BFF0C9 /* PBXTargetDependency */ = { + 090DA03D4C071EB1C946E6266644F1D9 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Parse; + target = F7D0346E5B3C07CA2678B48D1D1BD750 /* Parse */; + targetProxy = 58FD68CA85B5E72697502824B988F051 /* PBXContainerItemProxy */; + }; + 3530AC604629113E40B76CB90F73E195 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Bolts; - target = E1F0B29D8C274D3B4A2566B0DFA6A902 /* Bolts */; - targetProxy = A456FA0F15BA9B2536652B1701BAF644 /* PBXContainerItemProxy */; + target = 9D8311DD3E0DA85313EF9710C8614AD8 /* Bolts */; + targetProxy = A350E8606E02ACFA8AA6C838EE4FDE3D /* PBXContainerItemProxy */; }; - 9408F168225A9295B417D7D9B496AE91 /* PBXTargetDependency */ = { + 4B7038BA1BDC2249906D6018B5F6C3AB /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = pop; target = 47C800E42623009B7192B025B3DD25A1 /* pop */; - targetProxy = 384587FE181EB87FB186E5EABAF2646A /* PBXContainerItemProxy */; + targetProxy = 103117E18087B3EEC84D8F67EA532CD6 /* PBXContainerItemProxy */; }; - 9B10575164CA1EFA8980256F26C95A06 /* PBXTargetDependency */ = { + 4ECE2DEC9CA88EA95B0CAA98A75B9211 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Parse; - target = E2B6A7F9ABCCE48BC851C4EAE332D8FB /* Parse */; - targetProxy = AACED10EAE78F8427CE29A9FEE769081 /* PBXContainerItemProxy */; + name = Bolts; + target = 9D8311DD3E0DA85313EF9710C8614AD8 /* Bolts */; + targetProxy = 898759E58BADE0E9FBFA1E66E38F8039 /* PBXContainerItemProxy */; }; - C972B13B9130AEBC11060F7C2E61D8C7 /* PBXTargetDependency */ = { + 6FB474EE146C7D054B64F0529723BBD5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Bolts; - target = E1F0B29D8C274D3B4A2566B0DFA6A902 /* Bolts */; - targetProxy = 0E31099F1DACDF2E2DCE828E4EED3984 /* PBXContainerItemProxy */; + name = ContextMenu.iOS; + target = 7D5B41A236FF14B6B02D4BAF6C4A690A /* ContextMenu.iOS */; + targetProxy = 11F61E646F82C7A3027EAFA6F2C283CA /* PBXContainerItemProxy */; + }; + 9A649419F2A6E8DA31A1B71517CF82EB /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AFNetworking; + target = 39991CD032545E130997094168EF96E2 /* AFNetworking */; + targetProxy = 5990CF4195D3965C7E2B2A3208652783 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 04BA543D036558F1E4F6D48F13753506 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C55B1243D9ED528D2D7760513B4D0FB2 /* Parse-Private.xcconfig */; - buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Release; - }; - 14FE85D82AC1EF857A39F3012343AF27 /* Debug */ = { + 000400B0D1E76EBBC48059E96D81D5FD /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3D02C6C7422645AB5529C759A1A86353 /* Pods.debug.xcconfig */; + baseConfigurationReference = F0959918976A05003B1E7FB37A8F8749 /* Bolts-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -2212,6 +2596,22 @@ }; name = Release; }; + 63D806B24D2E2AF2D57832D4C21C42A8 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 92EFA64DEEA2D7C788D39BE4B87668B0 /* ContextMenu.iOS-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/ContextMenu.iOS/ContextMenu.iOS-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; 74857149DC1E0D599B8A01A78349A926 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2246,28 +2646,44 @@ }; name = Release; }; - 78016348B8879A8D6C53867B03C47F13 /* Release */ = { + 8978DF038D028E26D938D43B1A73098F /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 69C89E4E56C77B03B486A9C81B595B44 /* AFNetworking-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 90C663DBECD470D47C0A32FB964DB72D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7EA341866E76C794E960BB9753925294 /* Pods.release.xcconfig */; + baseConfigurationReference = F0959918976A05003B1E7FB37A8F8749 /* Bolts-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; name = Release; }; - 7A8565CA9694FB5A0C1E200FD6F4C766 /* Release */ = { + 92138A835212834AB25A49FEAAAF8DC4 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 397A9B2690E0D54158F63ECBF0C769B2 /* Bolts-Private.xcconfig */; + baseConfigurationReference = 69C89E4E56C77B03B486A9C81B595B44 /* AFNetworking-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; @@ -2278,25 +2694,41 @@ }; name = Release; }; - 81C213DCEA4F28318CDB852D9783A55D /* Debug */ = { + B8FC56A1FDD3F521E15013C645A9236F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 397A9B2690E0D54158F63ECBF0C769B2 /* Bolts-Private.xcconfig */; + baseConfigurationReference = 46A44DBE60FFDA06D7726DD3091A0E47 /* Pods.debug.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; name = Debug; }; - 84B1F85980300868DC94F0D5B3427AAA /* Debug */ = { + C1DEE2986C7D0977543B7BADA2F3BB1B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 92EFA64DEEA2D7C788D39BE4B87668B0 /* ContextMenu.iOS-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/ContextMenu.iOS/ContextMenu.iOS-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + C9530B48CBF28D013878B635CA786748 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C55B1243D9ED528D2D7760513B4D0FB2 /* Parse-Private.xcconfig */; + baseConfigurationReference = 4743EB53C73E4B52C1EC84395BD476F5 /* Parse-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; @@ -2310,6 +2742,38 @@ }; name = Debug; }; + CBF78EF43B07DE62F513E7142428C170 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 554179C2DB1E42B74E86A13E79A45730 /* Pods.release.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + D7DC57C4D3F0140BD338639511AED72F /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4743EB53C73E4B52C1EC84395BD476F5 /* Parse-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; E69EFF8AAAC9CEFE6A33102476292CA8 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */; @@ -2329,6 +2793,15 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 05D30B977C164867CBB28678E172C5BA /* Build configuration list for PBXNativeTarget "Parse" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C9530B48CBF28D013878B635CA786748 /* Debug */, + D7DC57C4D3F0140BD338639511AED72F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -2338,6 +2811,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 431EFC273B3FC2034AFD6C4C92E174CD /* Build configuration list for PBXNativeTarget "AFNetworking" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8978DF038D028E26D938D43B1A73098F /* Debug */, + 92138A835212834AB25A49FEAAAF8DC4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 62C75DE36F62F6DD244D1001268287F5 /* Build configuration list for PBXNativeTarget "pop" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -2347,29 +2829,29 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 657E892C5C0C753EEFCFD7C80D8FB5BA /* Build configuration list for PBXNativeTarget "Parse" */ = { + 67A13180ACA2EC97B329D12BBF330556 /* Build configuration list for PBXNativeTarget "Bolts" */ = { isa = XCConfigurationList; buildConfigurations = ( - 84B1F85980300868DC94F0D5B3427AAA /* Debug */, - 04BA543D036558F1E4F6D48F13753506 /* Release */, + 000400B0D1E76EBBC48059E96D81D5FD /* Debug */, + 90C663DBECD470D47C0A32FB964DB72D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 737FE33D90851DA7D993D824EDBC7B82 /* Build configuration list for PBXNativeTarget "Bolts" */ = { + 9B6492829B8D73AD10769E85FCA9F27E /* Build configuration list for PBXNativeTarget "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 81C213DCEA4F28318CDB852D9783A55D /* Debug */, - 7A8565CA9694FB5A0C1E200FD6F4C766 /* Release */, + B8FC56A1FDD3F521E15013C645A9236F /* Debug */, + CBF78EF43B07DE62F513E7142428C170 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 762EB94DC5F957130C5BF308781008D2 /* Build configuration list for PBXNativeTarget "Pods" */ = { + D8C66A8CA86F8BA4F03E908B331BECA5 /* Build configuration list for PBXNativeTarget "ContextMenu.iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 14FE85D82AC1EF857A39F3012343AF27 /* Debug */, - 78016348B8879A8D6C53867B03C47F13 /* Release */, + 63D806B24D2E2AF2D57832D4C21C42A8 /* Debug */, + C1DEE2986C7D0977543B7BADA2F3BB1B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-Private.xcconfig b/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-Private.xcconfig new file mode 100644 index 0000000..81e0c43 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-Private.xcconfig @@ -0,0 +1,6 @@ +#include "AFNetworking.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/AFNetworking" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = ${AFNETWORKING_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} +SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-dummy.m b/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-dummy.m new file mode 100644 index 0000000..6a29cf8 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_AFNetworking : NSObject +@end +@implementation PodsDummy_AFNetworking +@end diff --git a/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch b/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch new file mode 100644 index 0000000..1e116a3 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch @@ -0,0 +1,11 @@ +#ifdef __OBJC__ +#import +#endif + +#ifndef TARGET_OS_IOS + #define TARGET_OS_IOS TARGET_OS_IPHONE +#endif + +#ifndef TARGET_OS_WATCH + #define TARGET_OS_WATCH 0 +#endif diff --git a/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig b/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig new file mode 100644 index 0000000..b0b2d52 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig @@ -0,0 +1 @@ +AFNETWORKING_OTHER_LDFLAGS = -framework "CoreGraphics" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration" \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig b/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig index 2276e40..4f46a39 100644 --- a/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig +++ b/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig @@ -1,5 +1,5 @@ #include "Bolts.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Bolts" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Bolts" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-Private.xcconfig b/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-Private.xcconfig new file mode 100644 index 0000000..cf9920d --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-Private.xcconfig @@ -0,0 +1,6 @@ +#include "ContextMenu.iOS.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = ${CONTEXTMENU_IOS_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} +SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-dummy.m b/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-dummy.m new file mode 100644 index 0000000..a2cc252 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_ContextMenu_iOS : NSObject +@end +@implementation PodsDummy_ContextMenu_iOS +@end diff --git a/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-prefix.pch b/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-prefix.pch new file mode 100644 index 0000000..aa992a4 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS.xcconfig b/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS.xcconfig new file mode 100644 index 0000000..1d6f5b3 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS.xcconfig @@ -0,0 +1 @@ +CONTEXTMENU_IOS_OTHER_LDFLAGS = -framework "QuartzCore" -framework "UIKit" \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig b/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig index 9f1615f..145418d 100644 --- a/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig +++ b/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig @@ -1,6 +1,6 @@ #include "Parse.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Parse" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Parse" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" OTHER_LDFLAGS = ${PARSE_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown index 39b8b08..fcec2d4 100644 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown @@ -1,6 +1,29 @@ # Acknowledgements This application makes use of the following third party libraries: +## AFNetworking + +Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) + +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. + + ## Bolts BSD License @@ -34,6 +57,212 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +## ContextMenu.iOS + +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + 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. + + + ## Parse See https://www.parse.com/about/terms diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist index 45d32b9..4272d8f 100644 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist @@ -12,6 +12,33 @@ Type PSGroupSpecifier + + FooterText + Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) + +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. + + Title + AFNetworking + Type + PSGroupSpecifier + FooterText BSD License @@ -49,6 +76,216 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Type PSGroupSpecifier + + FooterText + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + 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. + + + Title + ContextMenu.iOS + Type + PSGroupSpecifier + FooterText See https://www.parse.com/about/terms diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig b/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig index e6b9457..33ec719 100644 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig @@ -1,7 +1,7 @@ CLANG_CXX_LANGUAGE_STANDARD = c++11 CLANG_CXX_LIBRARY = libc++ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/Parse" -isystem "${PODS_ROOT}/Headers/Public/pop" -OTHER_LDFLAGS = $(inherited) -ObjC -l"Bolts" -l"Parse" -l"c++" -l"pop" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -weak_framework "Accounts" -weak_framework "Social" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" -isystem "${PODS_ROOT}/Headers/Public/Parse" -isystem "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"Bolts" -l"ContextMenu.iOS" -l"Parse" -l"c++" -l"pop" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "Accounts" -weak_framework "Social" PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig b/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig index e6b9457..33ec719 100644 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig @@ -1,7 +1,7 @@ CLANG_CXX_LANGUAGE_STANDARD = c++11 CLANG_CXX_LIBRARY = libc++ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/Parse" -isystem "${PODS_ROOT}/Headers/Public/pop" -OTHER_LDFLAGS = $(inherited) -ObjC -l"Bolts" -l"Parse" -l"c++" -l"pop" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -weak_framework "Accounts" -weak_framework "Social" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" -isystem "${PODS_ROOT}/Headers/Public/Parse" -isystem "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"Bolts" -l"ContextMenu.iOS" -l"Parse" -l"c++" -l"pop" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "Accounts" -weak_framework "Social" PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/pop/pop-Private.xcconfig b/BreakingBad/Pods/Target Support Files/pop/pop-Private.xcconfig index 91d383d..e537f3e 100644 --- a/BreakingBad/Pods/Target Support Files/pop/pop-Private.xcconfig +++ b/BreakingBad/Pods/Target Support Files/pop/pop-Private.xcconfig @@ -2,7 +2,7 @@ CLANG_CXX_LANGUAGE_STANDARD = ${POP_CLANG_CXX_LANGUAGE_STANDARD} CLANG_CXX_LIBRARY = ${POP_CLANG_CXX_LIBRARY} GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/pop" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/pop" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" OTHER_LDFLAGS = ${POP_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES \ No newline at end of file From a645b77498edc6ba33f1dc6cd0a5fd78272036f0 Mon Sep 17 00:00:00 2001 From: Mesfin Date: Thu, 15 Oct 2015 13:09:49 -0400 Subject: [PATCH 21/44] Menu --- .../CustomContextTableViewCell.xib | 51 +++++++------------ BreakingBad/BreakingBad/MainPageVC.m | 1 - 2 files changed, 18 insertions(+), 34 deletions(-) diff --git a/BreakingBad/BreakingBad/CustomContextTableViewCell.xib b/BreakingBad/BreakingBad/CustomContextTableViewCell.xib index 7bbe921..789a20c 100644 --- a/BreakingBad/BreakingBad/CustomContextTableViewCell.xib +++ b/BreakingBad/BreakingBad/CustomContextTableViewCell.xib @@ -2,7 +2,6 @@ - @@ -14,49 +13,35 @@ - + - + + - - - - - - - - - - - - - + - - - - - - - + + + + + + + - - + + - - - diff --git a/BreakingBad/BreakingBad/MainPageVC.m b/BreakingBad/BreakingBad/MainPageVC.m index a4a7fea..d600804 100644 --- a/BreakingBad/BreakingBad/MainPageVC.m +++ b/BreakingBad/BreakingBad/MainPageVC.m @@ -146,7 +146,6 @@ - (UITableViewCell *)tableView:(YALContextMenuTableView *)tableView cellForRowAt cell.backgroundColor = [UIColor orangeColor]; cell.menuTitleLabel.text = [self.menuTitles objectAtIndex:indexPath.row]; cell.menuTitleImage.image = [self.menuIcons objectAtIndex:indexPath.row]; - cell.menuTitleLabel.backgroundColor = [UIColor clearColor]; } return cell; From 891f8d28af8dc18f4c48b7497d6bfcc940181aee Mon Sep 17 00:00:00 2001 From: Mesfin Date: Fri, 16 Oct 2015 01:14:23 -0400 Subject: [PATCH 22/44] Functioning shared model dictionary for answers --- .../BreakingBad.xcodeproj/project.pbxproj | 6 + .../drugs.imageset/Contents.json | 21 + .../drugs.imageset/No Drugs-50.png | Bin 0 -> 1500 bytes .../BreakingBad/Base.lproj/Main.storyboard | 94 +- .../BreakingBad/CustomModalViewController.h | 6 + .../BreakingBad/CustomModalViewController.m | 63 +- .../CustomVCTransitionViewController.m | 19 +- BreakingBad/BreakingBad/HabitList.m | 1 + BreakingBad/BreakingBad/LoginViewController.h | 21 + BreakingBad/BreakingBad/LoginViewController.m | 134 + BreakingBad/BreakingBad/MainPageVC.m | 17 +- BreakingBad/BreakingBad/SharedManager.h | 2 +- BreakingBad/BreakingBad/ViewController.m | 19 +- BreakingBad/Podfile | 4 +- BreakingBad/Podfile.lock | 5 + .../Headers/Private/ParseUI/PFActionButton.h | 1 + ...FActivityIndicatorCollectionReusableView.h | 1 + .../PFActivityIndicatorTableViewCell.h | 1 + .../Private/ParseUI/PFCollectionViewCell.h | 1 + .../Pods/Headers/Private/ParseUI/PFColor.h | 1 + .../Headers/Private/ParseUI/PFDismissButton.h | 1 + .../Pods/Headers/Private/ParseUI/PFImage.h | 1 + .../Headers/Private/ParseUI/PFImageCache.h | 1 + .../Headers/Private/ParseUI/PFImageView.h | 1 + .../Headers/Private/ParseUI/PFLoadingView.h | 1 + .../Headers/Private/ParseUI/PFLocalization.h | 1 + .../Headers/Private/ParseUI/PFLogInView.h | 1 + .../Private/ParseUI/PFLogInViewController.h | 1 + .../Private/ParseUI/PFLogInView_Private.h | 1 + .../Headers/Private/ParseUI/PFPrimaryButton.h | 1 + .../ParseUI/PFProductTableViewController.h | 1 + .../Private/ParseUI/PFPurchaseTableViewCell.h | 1 + .../ParseUI/PFQueryCollectionViewController.h | 1 + .../ParseUI/PFQueryTableViewController.h | 1 + .../Pods/Headers/Private/ParseUI/PFRect.h | 1 + .../Headers/Private/ParseUI/PFResources.h | 1 + .../Headers/Private/ParseUI/PFSignUpView.h | 1 + .../Private/ParseUI/PFSignUpViewController.h | 1 + .../Headers/Private/ParseUI/PFTableViewCell.h | 1 + .../Headers/Private/ParseUI/PFTextButton.h | 1 + .../Headers/Private/ParseUI/PFTextField.h | 1 + .../Headers/Private/ParseUI/PFUIAlertView.h | 1 + .../Pods/Headers/Private/ParseUI/ParseUI.h | 1 + .../Private/ParseUI/ParseUIConstants.h | 1 + .../Public/ParseUI/PFCollectionViewCell.h | 1 + .../Pods/Headers/Public/ParseUI/PFImageView.h | 1 + .../Pods/Headers/Public/ParseUI/PFLogInView.h | 1 + .../Public/ParseUI/PFLogInViewController.h | 1 + .../Public/ParseUI/PFLogInView_Private.h | 1 + .../ParseUI/PFProductTableViewController.h | 1 + .../Public/ParseUI/PFPurchaseTableViewCell.h | 1 + .../ParseUI/PFQueryCollectionViewController.h | 1 + .../ParseUI/PFQueryTableViewController.h | 1 + .../Headers/Public/ParseUI/PFSignUpView.h | 1 + .../Public/ParseUI/PFSignUpViewController.h | 1 + .../Headers/Public/ParseUI/PFTableViewCell.h | 1 + .../Pods/Headers/Public/ParseUI/PFTextField.h | 1 + .../Pods/Headers/Public/ParseUI/ParseUI.h | 1 + .../Headers/Public/ParseUI/ParseUIConstants.h | 1 + BreakingBad/Pods/Manifest.lock | 5 + BreakingBad/Pods/ParseUI/LICENSE | 17 + .../Classes/Cells/PFCollectionViewCell.h | 61 + .../Classes/Cells/PFCollectionViewCell.m | 97 + .../Classes/Cells/PFPurchaseTableViewCell.h | 68 + .../Classes/Cells/PFPurchaseTableViewCell.m | 154 + .../ParseUI/Classes/Cells/PFTableViewCell.h | 46 + .../ParseUI/Classes/Cells/PFTableViewCell.m | 120 + ...FActivityIndicatorCollectionReusableView.h | 38 + ...FActivityIndicatorCollectionReusableView.m | 115 + .../Cells/PFActivityIndicatorTableViewCell.h | 34 + .../Cells/PFActivityIndicatorTableViewCell.m | 64 + .../Classes/Internal/Extensions/PFColor.h | 50 + .../Classes/Internal/Extensions/PFColor.m | 86 + .../Classes/Internal/Extensions/PFImage.h | 31 + .../Classes/Internal/Extensions/PFImage.m | 111 + .../Classes/Internal/Extensions/PFRect.h | 30 + .../Classes/Internal/Extensions/PFRect.m | 48 + .../Internal/Extensions/PFUIAlertView.h | 34 + .../Internal/Extensions/PFUIAlertView.m | 56 + .../ParseUI/Classes/Internal/PFImageCache.h | 34 + .../ParseUI/Classes/Internal/PFImageCache.m | 47 + .../ParseUI/Classes/Internal/PFLocalization.h | 29 + .../Internal/Views/Buttons/PFActionButton.h | 65 + .../Internal/Views/Buttons/PFActionButton.m | 202 + .../Internal/Views/Buttons/PFDismissButton.h | 26 + .../Internal/Views/Buttons/PFDismissButton.m | 84 + .../Internal/Views/Buttons/PFPrimaryButton.h | 31 + .../Internal/Views/Buttons/PFPrimaryButton.m | 110 + .../Internal/Views/Buttons/PFTextButton.h | 26 + .../Internal/Views/Buttons/PFTextButton.m | 53 + .../Classes/Internal/Views/PFLoadingView.h | 29 + .../Classes/Internal/Views/PFLoadingView.m | 80 + .../Classes/LogInViewController/PFLogInView.h | 172 + .../Classes/LogInViewController/PFLogInView.m | 488 ++ .../PFLogInViewController.h | 176 + .../PFLogInViewController.m | 601 +++ .../LogInViewController/PFLogInView_Private.h | 28 + .../PFProductTableViewController.h | 47 + .../PFProductTableViewController.m | 249 + .../PFQueryCollectionViewController.h | 227 + .../PFQueryCollectionViewController.m | 452 ++ .../PFQueryTableViewController.h | 259 + .../PFQueryTableViewController.m | 585 +++ .../SignUpViewController/PFSignUpView.h | 144 + .../SignUpViewController/PFSignUpView.m | 319 ++ .../PFSignUpViewController.h | 160 + .../PFSignUpViewController.m | 513 ++ .../ParseUI/Classes/Views/PFImageView.h | 77 + .../ParseUI/Classes/Views/PFImageView.m | 150 + .../ParseUI/Classes/Views/PFTextField.h | 77 + .../ParseUI/Classes/Views/PFTextField.m | 120 + .../ParseUI/ParseUI/Generated/PFResources.h | 13 + .../ParseUI/ParseUI/Generated/PFResources.m | 76 + .../Pods/ParseUI/ParseUI/Other/ParseUI.h | 34 + .../ParseUI/ParseUI/Other/ParseUIConstants.h | 76 + .../Localization/en.lproj/ParseUI.strings | Bin 0 -> 6528 bytes BreakingBad/Pods/ParseUI/README.md | 115 + .../Pods/Pods.xcodeproj/project.pbxproj | 4439 +++++++++-------- .../AFNetworking-Private.xcconfig | 2 +- .../Bolts/Bolts-Private.xcconfig | 2 +- .../ContextMenu.iOS-Private.xcconfig | 2 +- .../Parse/Parse-Private.xcconfig | 2 +- .../ParseUI/ParseUI-Private.xcconfig | 6 + .../ParseUI/ParseUI-dummy.m | 5 + .../ParseUI/ParseUI-prefix.pch | 4 + .../ParseUI/ParseUI.xcconfig | 1 + .../Pods/Pods-acknowledgements.markdown | 21 + .../Pods/Pods-acknowledgements.plist | 25 + .../Pods/Pods-resources.sh | 2 + .../Pods/Pods.debug.xcconfig | 6 +- .../Pods/Pods.release.xcconfig | 6 +- .../pop/pop-Private.xcconfig | 2 +- 132 files changed, 10121 insertions(+), 2099 deletions(-) create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/drugs.imageset/Contents.json create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/drugs.imageset/No Drugs-50.png create mode 100644 BreakingBad/BreakingBad/LoginViewController.h create mode 100644 BreakingBad/BreakingBad/LoginViewController.m create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFActionButton.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFActivityIndicatorCollectionReusableView.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFActivityIndicatorTableViewCell.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFCollectionViewCell.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFColor.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFDismissButton.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFImage.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFImageCache.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFImageView.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFLoadingView.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFLocalization.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFLogInView.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFLogInViewController.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFLogInView_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFPrimaryButton.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFProductTableViewController.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFPurchaseTableViewCell.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFQueryCollectionViewController.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFQueryTableViewController.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFRect.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFResources.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFSignUpView.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFSignUpViewController.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFTableViewCell.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFTextButton.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFTextField.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFUIAlertView.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/ParseUI.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/ParseUIConstants.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFCollectionViewCell.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFImageView.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFLogInView.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFLogInViewController.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFLogInView_Private.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFProductTableViewController.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFPurchaseTableViewCell.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFQueryCollectionViewController.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFQueryTableViewController.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFSignUpView.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFSignUpViewController.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFTableViewCell.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFTextField.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/ParseUI.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/ParseUIConstants.h create mode 100644 BreakingBad/Pods/ParseUI/LICENSE create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFLocalization.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView_Private.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Generated/PFResources.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Generated/PFResources.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Other/ParseUI.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Other/ParseUIConstants.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Resources/Localization/en.lproj/ParseUI.strings create mode 100644 BreakingBad/Pods/ParseUI/README.md create mode 100644 BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-Private.xcconfig create mode 100644 BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-dummy.m create mode 100644 BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-prefix.pch create mode 100644 BreakingBad/Pods/Target Support Files/ParseUI/ParseUI.xcconfig diff --git a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj index 7fa7ec7..0580f13 100644 --- a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj +++ b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj @@ -22,6 +22,7 @@ 5FEAE26E1BCB125A00201A0E /* PresentingAnimationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE26D1BCB125A00201A0E /* PresentingAnimationController.m */; }; 5FEAE2711BCB126700201A0E /* DismissingAnimationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE2701BCB126700201A0E /* DismissingAnimationController.m */; }; DC22D49F1BCEE95A00D1E214 /* CheckProgressViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DC22D49E1BCEE95A00D1E214 /* CheckProgressViewController.m */; settings = {ASSET_TAGS = (); }; }; + DC22D4A51BD0221200D1E214 /* LoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DC22D4A41BD0221200D1E214 /* LoginViewController.m */; settings = {ASSET_TAGS = (); }; }; DC2DC1881BCAC00500A627E2 /* Habit.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC1871BCAC00500A627E2 /* Habit.m */; settings = {ASSET_TAGS = (); }; }; DC2DC18B1BCAC08700A627E2 /* Goal.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC18A1BCAC08700A627E2 /* Goal.m */; settings = {ASSET_TAGS = (); }; }; DC2DC18E1BCAC0A700A627E2 /* Entry.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC18D1BCAC0A700A627E2 /* Entry.m */; settings = {ASSET_TAGS = (); }; }; @@ -62,6 +63,8 @@ B57E170B6FA09C54334C0536 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; DC22D49D1BCEE95A00D1E214 /* CheckProgressViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CheckProgressViewController.h; sourceTree = ""; }; DC22D49E1BCEE95A00D1E214 /* CheckProgressViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CheckProgressViewController.m; sourceTree = ""; }; + DC22D4A31BD0221200D1E214 /* LoginViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginViewController.h; sourceTree = ""; }; + DC22D4A41BD0221200D1E214 /* LoginViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginViewController.m; sourceTree = ""; }; DC2DC1861BCAC00500A627E2 /* Habit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Habit.h; sourceTree = ""; }; DC2DC1871BCAC00500A627E2 /* Habit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Habit.m; sourceTree = ""; }; DC2DC1891BCAC08700A627E2 /* Goal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Goal.h; sourceTree = ""; }; @@ -158,6 +161,8 @@ 5FEAE2601BCB053F00201A0E /* CustomVCTransitionViewController.m */, 5FEAE2621BCB055A00201A0E /* CustomModalViewController.h */, 5FEAE2631BCB055A00201A0E /* CustomModalViewController.m */, + DC22D4A31BD0221200D1E214 /* LoginViewController.h */, + DC22D4A41BD0221200D1E214 /* LoginViewController.m */, 5FEAE26C1BCB125100201A0E /* PresentingAnimationController.h */, 5FEAE26D1BCB125A00201A0E /* PresentingAnimationController.m */, 5FEAE26F1BCB126200201A0E /* DismissingAnimationController.h */, @@ -311,6 +316,7 @@ 5FEAE2611BCB053F00201A0E /* CustomVCTransitionViewController.m in Sources */, 5F9B08321BCDAD1500460FF2 /* MainPageVC.m in Sources */, DC2DC1911BCAE7E600A627E2 /* Step.m in Sources */, + DC22D4A51BD0221200D1E214 /* LoginViewController.m in Sources */, 5FEAE2641BCB055A00201A0E /* CustomModalViewController.m in Sources */, DC2DC18B1BCAC08700A627E2 /* Goal.m in Sources */, 5FEAE26E1BCB125A00201A0E /* PresentingAnimationController.m in Sources */, diff --git a/BreakingBad/BreakingBad/Assets.xcassets/drugs.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/drugs.imageset/Contents.json new file mode 100644 index 0000000..7cbde93 --- /dev/null +++ b/BreakingBad/BreakingBad/Assets.xcassets/drugs.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "No Drugs-50.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/BreakingBad/BreakingBad/Assets.xcassets/drugs.imageset/No Drugs-50.png b/BreakingBad/BreakingBad/Assets.xcassets/drugs.imageset/No Drugs-50.png new file mode 100644 index 0000000000000000000000000000000000000000..1404d4e3cab30025a98cebfc5a7e5cd2af6a62a4 GIT binary patch literal 1500 zcmV<21ta>2P)5Qh6AKm>>Y5g-CYfC#t<5CJ0KB0vO)01+SpCj#o*n*XYAUQhSzyM0X6))qT& zrvL80|L&Q0N4EWV)V6rLqE^cPm%w_{bvi)y!^~8Q*KbC>k%C)z8dqv#4Z1F1L->fVt^%<4OZU zgc;Yj$dxKb)`EFuW>3uQgPGlL0N$I~Ju@Rh&kxP53JCkH0rR~n)?+i1>>|T&S~Q5t zK}Q4x$?RovA22;W&WHA=D)5kr$EOa}f|J&bPKQ^2-1SfB=?725K@Qne};6 z2@RkT2l9b|@kIMwqGAW)C>#)fyXlHh`KnWZ&z>*&-+}U4hgWHT{vOnH6?tnF7n6- zjA)kuQDN+X0D`uL#AYBeUMxgQD6ctZc{Ku}Jc-l=Z($6%5YddqGgXS{LBxrK42g4j!Zo6oeqRg5 z10nLF6Cj8-PUr^_1ME+yV&~>$5-56Qt@j!*9thG-1Tqj9tY<=6F(CsYFN|u!+Q@jp zfKH5%F3#ojXv`fR0ji=Tg{fK!pHo?#A=d;%b{?A<(H{*ZdD;zBK-5xHQSsrgiYAgu z!K>6wz|``jQLBKkn2Jyp73S)A?0ccU1HiK!x=37dEV~a-^vd3B28cgjR9x2Feq#?t zp03vNvRutglihPx3a0)mq4bXLwDCHtYpw?~s!x7h>KM7V=yapaXClIL7y$^*Db<;q zxzr#jlHYgcJi~m62eM3*%ZojLa3Mfa^MIN)ZI0&vph~Nbv&m!&f6u`1o6n!KNNAH$9Z{pEd4QXZ&b|Qr z{2mOK3=~&#Sape3enI7`jn{<(n?W%WvA==5h~bqq``@7w4i4Y1%v5%Gh({=#8t@WO zd{B*x4y2u$g0cNo(@tKCR)4zJVliYFweYP6Ed*eQT=pg^69d*o{qVNlYK`vAhQc!w z5kT~}es~U^R&QznpxZ+DUiD1u10dRxy}-->@rh3a0Fa&NL^C{%RO-sJzeCRGs7A56 zo;_Qm0^%z^k_QDUul7>e8w?fUe6>!dW{Ykj1L7mW=@3v^am0)CKI)ZpXG`?x&!|U4 zQ@xsUi}S|JNQ>rd9Z@@v7yFk#0N^7L0074G;W>ZT3-56V9}-)GIit0qCi#`-OcoIm zPra00EsQ*e@fagX_K{Pk;IBae&DvVugNpV*;&qwbM}{{Bd&#d3H!P%!Io9Ys*&9+` zt~EiBDCoA)-@x~43XICaUO;Ae9L>>{(#&~(?H>OG2*&B<&L)2>urIY%d#e>rn!mEu zSi4D8N7k;}Kc`y}^6B7zEbuQQB2geoqidoIJM1r>L)$`FWjgNw0000 - + @@ -38,12 +38,12 @@ - + @@ -59,9 +59,9 @@ - - + @@ -532,7 +532,7 @@ - - + @@ -554,7 +554,7 @@ - + @@ -562,7 +562,7 @@ - + @@ -570,7 +570,7 @@ - + @@ -578,7 +578,7 @@ @@ -637,12 +637,12 @@ - + @@ -658,9 +658,9 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BreakingBad/BreakingBad/CustomModalViewController.h b/BreakingBad/BreakingBad/CustomModalViewController.h index b95b697..0274c9c 100644 --- a/BreakingBad/BreakingBad/CustomModalViewController.h +++ b/BreakingBad/BreakingBad/CustomModalViewController.h @@ -7,8 +7,14 @@ // #import +#import @interface CustomModalViewController : UIViewController +< +PFLogInViewControllerDelegate, +PFSignUpViewControllerDelegate +> + @property (weak, nonatomic) IBOutlet UITextField *emailTextField; @property (weak, nonatomic) IBOutlet UITextField *usernameTextField; @property (weak, nonatomic) IBOutlet UITextField *passwordTextField; diff --git a/BreakingBad/BreakingBad/CustomModalViewController.m b/BreakingBad/BreakingBad/CustomModalViewController.m index c3d7764..1867446 100644 --- a/BreakingBad/BreakingBad/CustomModalViewController.m +++ b/BreakingBad/BreakingBad/CustomModalViewController.m @@ -9,11 +9,46 @@ #import "CustomModalViewController.h" #import #import "MainPageVC.h" +#import "LoginViewController.h" +#import "ViewController.h" @implementation CustomModalViewController +#pragma mark +#pragma LifeCycle Methods -- (IBAction)didClickClose:(id)sender { +//- (void)viewDidAppear:(BOOL)animated { +// [super viewDidAppear:animated]; +// +// // Check if user is logged in +// if (![PFUser currentUser]) { +// // Instantiate our custom log in view controller +// LoginViewController *logInViewController = [[LoginViewController alloc] init]; +// [logInViewController setDelegate:self]; +// [logInViewController setFacebookPermissions:[NSArray arrayWithObjects:@"friends_about_me", nil]]; +// [logInViewController setFields:PFLogInFieldsUsernameAndPassword +// | PFLogInFieldsSignUpButton +// | PFLogInFieldsDismissButton]; +// +// // Instantiate our custom sign up view controller +// CustomModalViewController *signUpViewController = [[CustomModalViewController alloc] init]; +// [signUpViewController setDelegate:self]; +// [signUpViewController setFields:PFSignUpFieldsDefault | PFSignUpFieldsAdditional]; +// +// // Link the sign up view controller +// [logInViewController setSignUpController:signUpViewController]; +// +// // Present log in view controller +// [self presentViewController:logInViewController animated:YES completion:NULL]; +// } +//} +// +//- (void)viewDidLoad{ +// [super viewDidLoad]; +//} + + +- (IBAction)signUpButtonTapped:(UIButton *)sender { PFUser *thisUser = [PFUser user]; if(![[thisUser objectForKey:@"emailVerified"] boolValue]){ @@ -27,12 +62,11 @@ - (IBAction)didClickClose:(id)sender { thisUser.password = self.passwordTextField.text; [thisUser signUpInBackgroundWithBlock:^(BOOL succeeded, NSError * _Nullable error) { - //add segue + MainPageVC *mvc = (MainPageVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"showMainPgVC"]; + [self presentViewController:mvc animated:YES completion:nil]; }]; - MainPageVC *mvc = (MainPageVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"showMainPgVC"]; - [self presentViewController:mvc animated:YES completion:nil]; - //[self dismissViewControllerAnimated:YES completion:nil]; - + + } else { UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Error" message:@"The password field is either empty or does not match the confirm password field" preferredStyle:UIAlertControllerStyleAlert]; @@ -44,27 +78,18 @@ - (IBAction)didClickClose:(id)sender { [alertController addAction:okAction]; [self presentViewController:alertController animated:YES completion:nil]; - - } - - } -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.emailTextField resignFirstResponder]; - [self.usernameTextField resignFirstResponder]; - [self.passwordTextField resignFirstResponder]; - [self.confirmPasswordTextField resignFirstResponder]; - - //[self.emailTextField endEditing:YES]; - // [self.usernameTextField endEditing:YES]; - // [self.passwordTextField endEditing:YES]; - // [self.confirmPasswordTextField endEditing:YES]; - + [self.usernameTextField resignFirstResponder]; + [self.passwordTextField resignFirstResponder]; + [self.confirmPasswordTextField resignFirstResponder]; } + @end diff --git a/BreakingBad/BreakingBad/CustomVCTransitionViewController.m b/BreakingBad/BreakingBad/CustomVCTransitionViewController.m index d8ba6c2..f7a2543 100644 --- a/BreakingBad/BreakingBad/CustomVCTransitionViewController.m +++ b/BreakingBad/BreakingBad/CustomVCTransitionViewController.m @@ -10,19 +10,26 @@ #import "CustomModalViewController.h" #import "PresentingAnimationController.h" #import "DismissingAnimationController.h" +#import "LoginViewController.h" #import @implementation CustomVCTransitionViewController - (IBAction)didClickEnter:(id)sender { - CustomModalViewController *modalVC = [self.storyboard instantiateViewControllerWithIdentifier:@"customModal"]; +// CustomModalViewController *modalVC = [self.storyboard instantiateViewControllerWithIdentifier:@"customModal"]; +// +// +// modalVC.transitioningDelegate = self; +// +// modalVC.modalPresentationStyle = UIModalPresentationCustom; +// +// [self presentViewController:modalVC animated:YES completion:nil]; + LoginViewController *lvc = [self.storyboard instantiateViewControllerWithIdentifier:@"loginVC"]; + lvc.transitioningDelegate = self; + lvc.modalPresentationStyle = UIModalPresentationCustom; + [self presentViewController:lvc animated:YES completion:nil]; - modalVC.transitioningDelegate = self; - - modalVC.modalPresentationStyle = UIModalPresentationCustom; - - [self presentViewController:modalVC animated:YES completion:nil]; } diff --git a/BreakingBad/BreakingBad/HabitList.m b/BreakingBad/BreakingBad/HabitList.m index 682edbc..b13d8da 100644 --- a/BreakingBad/BreakingBad/HabitList.m +++ b/BreakingBad/BreakingBad/HabitList.m @@ -37,6 +37,7 @@ - (NSMutableArray *)habitsList{ @"Biting your nails", @"Cocaine Addiction", @"Biting your lips", + @"Biting you nails", @"Eating unhealthy", @"Excessive Drinking", @"Facebook"]; diff --git a/BreakingBad/BreakingBad/LoginViewController.h b/BreakingBad/BreakingBad/LoginViewController.h new file mode 100644 index 0000000..d871d11 --- /dev/null +++ b/BreakingBad/BreakingBad/LoginViewController.h @@ -0,0 +1,21 @@ +// +// LoginViewController.h +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/15/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import +#import +#import + +@interface LoginViewController : PFLogInViewController +< +PFSignUpViewControllerDelegate, +PFLogInViewControllerDelegate +> +@property (weak, nonatomic) IBOutlet UITextField *usernameTextField; +@property (weak, nonatomic) IBOutlet UITextField *passwordTextField; + +@end diff --git a/BreakingBad/BreakingBad/LoginViewController.m b/BreakingBad/BreakingBad/LoginViewController.m new file mode 100644 index 0000000..f919b80 --- /dev/null +++ b/BreakingBad/BreakingBad/LoginViewController.m @@ -0,0 +1,134 @@ +// +// LoginViewController.m +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/15/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "LoginViewController.h" +#import "MainPageVC.h" +#import "ViewController.h" + +@implementation LoginViewController + +- (void)viewDidLoad{ + [super viewDidLoad]; + + [self.logInView setLogo:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"drugs"]]]; +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + + if (![PFUser currentUser]) { // No user logged in + // Create the log in view controller + PFLogInViewController *logInViewController = [[PFLogInViewController alloc] init]; + [logInViewController setDelegate:self]; // Set ourselves as the delegate + + // Create the sign up view controller + PFSignUpViewController *signUpViewController = [[PFSignUpViewController alloc] init]; + [signUpViewController setDelegate:self]; // Set ourselves as the delegate + + // Assign our sign up controller to be displayed from the login controller + [logInViewController setSignUpController:signUpViewController]; + + // Present the log in view controller + [self presentViewController:logInViewController animated:YES completion:NULL]; + } +} + +#pragma mark +#pragma PFLoginViewController Delegate + +// Sent to the delegate to determine whether the log in request should be submitted to the server. +- (BOOL)logInViewController:(PFLogInViewController *)logInController shouldBeginLogInWithUsername:(NSString *)username password:(NSString *)password { + // Check if both fields are completed + if (username && password && username.length != 0 && password.length != 0) { + return YES; // Begin login process + } + + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Missing Information" message:@"Make sure you fill out all of the information!" preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [alertController dismissViewControllerAnimated:YES completion:nil]; + }]; + + [alertController addAction:okAction]; + + [self presentViewController:alertController animated:YES completion:nil]; + return NO; // Interrupt login process +} + +// Sent to the delegate when a PFUser is logged in. +- (void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user { + MainPageVC *mvc = (MainPageVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"showMainPgVC"]; + [self presentViewController:mvc animated:YES completion:nil]; + //[self dismissViewControllerAnimated:YES completion:NULL]; +} + +// Sent to the delegate when the log in attempt fails. +- (void)logInViewController:(PFLogInViewController *)logInController didFailToLogInWithError:(NSError *)error { + NSLog(@"Failed to log in because of error %@", error.localizedDescription); +} + +// Sent to the delegate when the log in screen is dismissed. +- (void)logInViewControllerDidCancelLogIn:(PFLogInViewController *)logInController { + ViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerID"]; + [self presentViewController:vc animated:YES completion:nil]; +#warning not going back to View Controller currently +} + +#pragma mark +#pragma PFSignUpViewController Delegate + +// Sent to the delegate to determine whether the sign up request should be submitted to the server. +- (BOOL)signUpViewController:(PFSignUpViewController *)signUpController shouldBeginSignUp:(NSDictionary *)info { + BOOL informationComplete = YES; + + // loop through all of the submitted data + for (id key in info) { + NSString *field = [info objectForKey:key]; + if (!field || field.length == 0) { // check completion + informationComplete = NO; + break; + } + } + + // Display an alert if a field wasn't completed + if (!informationComplete) { + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Missing Information" message:@"Make sure you fill out all of the information!" preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [alertController dismissViewControllerAnimated:YES completion:nil]; + }]; + + [alertController addAction:okAction]; + + [self presentViewController:alertController animated:YES completion:nil]; + } + + return informationComplete; +} + +// Sent to the delegate when a PFUser is signed up. +- (void)signUpViewController:(PFSignUpViewController *)signUpController didSignUpUser:(PFUser *)user { + MainPageVC *mvc = (MainPageVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"showMainPgVC"]; + [self presentViewController:mvc animated:YES completion:nil]; + [self dismissViewControllerAnimated:YES completion:nil]; + // Dismiss the PFSignUpViewController +} + +// Sent to the delegate when the sign up attempt fails. +- (void)signUpViewController:(PFSignUpViewController *)signUpController didFailToSignUpWithError:(NSError *)error { + NSLog(@"Failed to sign up because of error %@...", error.localizedDescription); +} + +// Sent to the delegate when the sign up screen is dismissed. +- (void)signUpViewControllerDidCancelSignUp:(PFSignUpViewController *)signUpController { + NSLog(@"User dismissed the signUpViewController"); +} + + + +@end diff --git a/BreakingBad/BreakingBad/MainPageVC.m b/BreakingBad/BreakingBad/MainPageVC.m index d600804..fd536cd 100644 --- a/BreakingBad/BreakingBad/MainPageVC.m +++ b/BreakingBad/BreakingBad/MainPageVC.m @@ -29,6 +29,7 @@ @interface MainPageVC () @property (nonatomic) NSArray *menuTitles; @property (nonatomic) NSArray *menuIcons; +@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *questionsArray; @end @@ -102,13 +103,19 @@ - (IBAction)doneButtonTapped:(UIButton *)sender { -(void)answersFromPreviousScreen{ - for (int i=0; i *answersLabel; +@property (nonatomic) NSMutableDictionary *answersDictionary; + (SharedManager *)sharedModel; diff --git a/BreakingBad/BreakingBad/ViewController.m b/BreakingBad/BreakingBad/ViewController.m index cc9de47..64b5261 100644 --- a/BreakingBad/BreakingBad/ViewController.m +++ b/BreakingBad/BreakingBad/ViewController.m @@ -52,20 +52,23 @@ - (IBAction)habitDoneButtonTapped:(UIButton *)sender { - (void)finishedAnswering:(QuestionDetailVC *)qvc withAnswer:(NSString *)answer { - if(! [SharedManager sharedModel].answersLabel) + if(![SharedManager sharedModel].answersDictionary) { - [SharedManager sharedModel].answersLabel = [NSMutableArray new]; + [SharedManager sharedModel].answersDictionary = [NSMutableDictionary new]; } - for (int i = 0; i < self.answer.count; i++) { + for(int i=0; i < self.question.count; i++) + { UIButton *currentButton = (UIButton *)self.question[i]; - if (qvc.tag == currentButton.tag) { - UILabel *currentLabel = (UILabel *)self.answer[i]; + if(qvc.tag == currentButton.tag) + { + UILabel *currentAnswerLabel = (UILabel *)self.answer[i]; + + currentAnswerLabel.text = answer; - currentLabel.text = answer; + NSString *tagString = [NSString stringWithFormat:@"%ld",(long)qvc.tag]; - [[SharedManager sharedModel].answersLabel addObject:currentLabel]; + [[SharedManager sharedModel].answersDictionary setObject:answer forKey:tagString]; } - } } diff --git a/BreakingBad/Podfile b/BreakingBad/Podfile index 7b0c83d..f9a7101 100644 --- a/BreakingBad/Podfile +++ b/BreakingBad/Podfile @@ -4,4 +4,6 @@ pod 'Parse' pod "AFNetworking", "~> 2.0" -pod 'ContextMenu.iOS', '~> 1.0.0' \ No newline at end of file +pod 'ContextMenu.iOS', '~> 1.0.0' + +pod 'ParseUI' \ No newline at end of file diff --git a/BreakingBad/Podfile.lock b/BreakingBad/Podfile.lock index 1ef2cd3..25b486b 100644 --- a/BreakingBad/Podfile.lock +++ b/BreakingBad/Podfile.lock @@ -24,12 +24,16 @@ PODS: - ContextMenu.iOS (1.0.0) - Parse (1.9.0): - Bolts/Tasks (>= 1.3.0) + - ParseUI (1.1.6): + - Bolts/Tasks (~> 1.2) + - Parse (~> 1.8) - pop (1.0.8) DEPENDENCIES: - AFNetworking (~> 2.0) - ContextMenu.iOS (~> 1.0.0) - Parse + - ParseUI - pop (~> 1.0) SPEC CHECKSUMS: @@ -37,6 +41,7 @@ SPEC CHECKSUMS: Bolts: 805a4a87413e49d4a0c2b7d469084cbc46b09342 ContextMenu.iOS: 7da78b3f99e604669b75e55146c6c33147f64f99 Parse: 712efbc476d4f47b0f96b70db7e53101575753aa + ParseUI: 8a22e448c03f825203d8c379c80523517f68baa3 pop: bb773ae2c791ca2629de13b347e7a8b450fa6a57 COCOAPODS: 0.38.2 diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFActionButton.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFActionButton.h new file mode 120000 index 0000000..4218e48 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFActionButton.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFActivityIndicatorCollectionReusableView.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFActivityIndicatorCollectionReusableView.h new file mode 120000 index 0000000..df46b16 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFActivityIndicatorCollectionReusableView.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFActivityIndicatorTableViewCell.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFActivityIndicatorTableViewCell.h new file mode 120000 index 0000000..50c1ce3 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFActivityIndicatorTableViewCell.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFCollectionViewCell.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFCollectionViewCell.h new file mode 120000 index 0000000..af4cf00 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFCollectionViewCell.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFColor.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFColor.h new file mode 120000 index 0000000..2042f25 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFColor.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFDismissButton.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFDismissButton.h new file mode 120000 index 0000000..a736731 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFDismissButton.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFImage.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFImage.h new file mode 120000 index 0000000..8da6b34 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFImage.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFImageCache.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFImageCache.h new file mode 120000 index 0000000..6aefcce --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFImageCache.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/PFImageCache.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFImageView.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFImageView.h new file mode 120000 index 0000000..6998b25 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFImageView.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Views/PFImageView.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFLoadingView.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFLoadingView.h new file mode 120000 index 0000000..23ffd12 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFLoadingView.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFLocalization.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFLocalization.h new file mode 120000 index 0000000..81c19f7 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFLocalization.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/PFLocalization.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFLogInView.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFLogInView.h new file mode 120000 index 0000000..03efbc7 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFLogInView.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFLogInViewController.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFLogInViewController.h new file mode 120000 index 0000000..f640f6e --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFLogInViewController.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFLogInView_Private.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFLogInView_Private.h new file mode 120000 index 0000000..5a1445a --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFLogInView_Private.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/LogInViewController/PFLogInView_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFPrimaryButton.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFPrimaryButton.h new file mode 120000 index 0000000..b3b12bf --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFPrimaryButton.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFProductTableViewController.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFProductTableViewController.h new file mode 120000 index 0000000..b59c01b --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFProductTableViewController.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFPurchaseTableViewCell.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFPurchaseTableViewCell.h new file mode 120000 index 0000000..4832020 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFPurchaseTableViewCell.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFQueryCollectionViewController.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFQueryCollectionViewController.h new file mode 120000 index 0000000..2912eff --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFQueryCollectionViewController.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFQueryTableViewController.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFQueryTableViewController.h new file mode 120000 index 0000000..e61be1d --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFQueryTableViewController.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFRect.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFRect.h new file mode 120000 index 0000000..fcab421 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFRect.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFResources.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFResources.h new file mode 120000 index 0000000..cb18b2f --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFResources.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Generated/PFResources.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFSignUpView.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFSignUpView.h new file mode 120000 index 0000000..ce44295 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFSignUpView.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFSignUpViewController.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFSignUpViewController.h new file mode 120000 index 0000000..5c962e0 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFSignUpViewController.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFTableViewCell.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFTableViewCell.h new file mode 120000 index 0000000..1f9ce36 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFTableViewCell.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Cells/PFTableViewCell.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFTextButton.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFTextButton.h new file mode 120000 index 0000000..bd398e9 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFTextButton.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFTextField.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFTextField.h new file mode 120000 index 0000000..51edbe9 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFTextField.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Views/PFTextField.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFUIAlertView.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFUIAlertView.h new file mode 120000 index 0000000..0f32862 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFUIAlertView.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/ParseUI.h b/BreakingBad/Pods/Headers/Private/ParseUI/ParseUI.h new file mode 120000 index 0000000..6b5f250 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/ParseUI.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Other/ParseUI.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/ParseUIConstants.h b/BreakingBad/Pods/Headers/Private/ParseUI/ParseUIConstants.h new file mode 120000 index 0000000..58c59ff --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/ParseUIConstants.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Other/ParseUIConstants.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFCollectionViewCell.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFCollectionViewCell.h new file mode 120000 index 0000000..af4cf00 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFCollectionViewCell.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFImageView.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFImageView.h new file mode 120000 index 0000000..6998b25 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFImageView.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Views/PFImageView.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFLogInView.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFLogInView.h new file mode 120000 index 0000000..03efbc7 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFLogInView.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFLogInViewController.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFLogInViewController.h new file mode 120000 index 0000000..f640f6e --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFLogInViewController.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFLogInView_Private.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFLogInView_Private.h new file mode 120000 index 0000000..5a1445a --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFLogInView_Private.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/LogInViewController/PFLogInView_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFProductTableViewController.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFProductTableViewController.h new file mode 120000 index 0000000..b59c01b --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFProductTableViewController.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFPurchaseTableViewCell.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFPurchaseTableViewCell.h new file mode 120000 index 0000000..4832020 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFPurchaseTableViewCell.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFQueryCollectionViewController.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFQueryCollectionViewController.h new file mode 120000 index 0000000..2912eff --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFQueryCollectionViewController.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFQueryTableViewController.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFQueryTableViewController.h new file mode 120000 index 0000000..e61be1d --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFQueryTableViewController.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFSignUpView.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFSignUpView.h new file mode 120000 index 0000000..ce44295 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFSignUpView.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFSignUpViewController.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFSignUpViewController.h new file mode 120000 index 0000000..5c962e0 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFSignUpViewController.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFTableViewCell.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFTableViewCell.h new file mode 120000 index 0000000..1f9ce36 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFTableViewCell.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Cells/PFTableViewCell.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFTextField.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFTextField.h new file mode 120000 index 0000000..51edbe9 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFTextField.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Views/PFTextField.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/ParseUI.h b/BreakingBad/Pods/Headers/Public/ParseUI/ParseUI.h new file mode 120000 index 0000000..6b5f250 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/ParseUI.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Other/ParseUI.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/ParseUIConstants.h b/BreakingBad/Pods/Headers/Public/ParseUI/ParseUIConstants.h new file mode 120000 index 0000000..58c59ff --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/ParseUIConstants.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Other/ParseUIConstants.h \ No newline at end of file diff --git a/BreakingBad/Pods/Manifest.lock b/BreakingBad/Pods/Manifest.lock index 1ef2cd3..25b486b 100644 --- a/BreakingBad/Pods/Manifest.lock +++ b/BreakingBad/Pods/Manifest.lock @@ -24,12 +24,16 @@ PODS: - ContextMenu.iOS (1.0.0) - Parse (1.9.0): - Bolts/Tasks (>= 1.3.0) + - ParseUI (1.1.6): + - Bolts/Tasks (~> 1.2) + - Parse (~> 1.8) - pop (1.0.8) DEPENDENCIES: - AFNetworking (~> 2.0) - ContextMenu.iOS (~> 1.0.0) - Parse + - ParseUI - pop (~> 1.0) SPEC CHECKSUMS: @@ -37,6 +41,7 @@ SPEC CHECKSUMS: Bolts: 805a4a87413e49d4a0c2b7d469084cbc46b09342 ContextMenu.iOS: 7da78b3f99e604669b75e55146c6c33147f64f99 Parse: 712efbc476d4f47b0f96b70db7e53101575753aa + ParseUI: 8a22e448c03f825203d8c379c80523517f68baa3 pop: bb773ae2c791ca2629de13b347e7a8b450fa6a57 COCOAPODS: 0.38.2 diff --git a/BreakingBad/Pods/ParseUI/LICENSE b/BreakingBad/Pods/ParseUI/LICENSE new file mode 100644 index 0000000..31425ea --- /dev/null +++ b/BreakingBad/Pods/ParseUI/LICENSE @@ -0,0 +1,17 @@ +Copyright (c) 2014, Parse, LLC. All rights reserved. + +You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +copy, modify, and distribute this software in source code or binary form for use +in connection with the web services and APIs provided by Parse. + +As with any software that integrates with the Parse platform, your use of +this software is subject to the Parse Terms of Service +[https://www.parse.com/about/terms]. This copyright 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/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.h new file mode 100644 index 0000000..71b3642 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import + +PFUI_ASSUME_NONNULL_BEGIN + +@class PFImageView; +@class PFObject; + +/*! + The `PFCollectionViewCell` class represents a collection view cell which can + download and display remote images stored on Parse as well as has a default simple text label. + */ +@interface PFCollectionViewCell : UICollectionViewCell + +/*! + @abstract A simple lazy-loaded label for the collection view cell. + */ +@property (nonatomic, strong, readonly) UILabel *textLabel; + +/*! + @abstract The lazy-loaded imageView of the collection view cell. + + @see PFImageView + */ +@property (nonatomic, strong, readonly) PFImageView *imageView; + +/*! + @abstract This method should update all the relevant information inside a subclass of `PFCollectionViewCell`. + + @discussion This method is automatically called by whenever the cell + should display new information. By default this method does nothing. + + @param object An instance of `PFObject` to update from. + */ +- (void)updateFromObject:(PFUI_NULLABLE PFObject *)object; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.m new file mode 100644 index 0000000..6fb1f46 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.m @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFCollectionViewCell.h" + +#import "PFImageView.h" +#import "PFRect.h" + +@implementation PFCollectionViewCell + +@synthesize imageView = _imageView; +@synthesize textLabel = _textLabel; + +#pragma mark - +#pragma mark UIView + +- (void)layoutSubviews { + [super layoutSubviews]; + + const CGRect bounds = self.contentView.bounds; + + CGRect imageViewFrame = CGRectZero; + if (_imageView && _imageView.image){ + imageViewFrame = PFRectMakeWithSizeCenteredInRect(PFSizeMin(_imageView.image.size, bounds.size), + bounds); + } + CGRect textLabelFrame = CGRectZero; + if (_textLabel) { + CGSize maxImageViewSize = CGSizeMake(CGRectGetWidth(bounds), CGRectGetHeight(bounds) / 3.0f * 2.0f); + CGSize imageViewSize = PFSizeMin(imageViewFrame.size, maxImageViewSize); + + imageViewFrame = PFRectMakeWithSizeCenteredInRect(imageViewSize, PFRectMakeWithSize(maxImageViewSize)); + CGFloat textLabelTopInset = (CGRectIsEmpty(imageViewFrame) ? 0.0f : CGRectGetMaxY(imageViewFrame)); + + textLabelFrame = PFRectMakeWithOriginSize(CGPointMake(0.0f, textLabelTopInset), + CGSizeMake(CGRectGetWidth(bounds), CGRectGetHeight(bounds) - textLabelTopInset)); + } + + // Adapt content mode of _imageView to fit the image in bounds if the layout frame is smaller or center if it's bigger. + if (!CGRectIsEmpty(imageViewFrame)) { + if (CGRectContainsRect(PFRectMakeWithSize(_imageView.image.size), PFRectMakeWithSize(imageViewFrame.size))) { + _imageView.contentMode = UIViewContentModeScaleAspectFit; + } else { + _imageView.contentMode = UIViewContentModeCenter; + } + } + + _imageView.frame = CGRectIntegral(imageViewFrame); + _textLabel.frame = CGRectIntegral(textLabelFrame); +} + +#pragma mark - +#pragma mark Update + +- (void)updateFromObject:(PFObject *)object { + // Do nothing +} + +#pragma mark - +#pragma mark Accessors + +- (PFImageView *)imageView { + if (!_imageView) { + _imageView = [[PFImageView alloc] initWithFrame:CGRectZero]; + [self.contentView addSubview:_imageView]; + } + return _imageView; +} + +- (UILabel *)textLabel { + if (!_textLabel) { + _textLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + _textLabel.numberOfLines = 0; + [self.contentView addSubview:_textLabel]; + } + return _textLabel; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.h new file mode 100644 index 0000000..eb80487 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import +#import + +PFUI_ASSUME_NONNULL_BEGIN + +/*! + An enum that represents states of the PFPurchaseTableViewCell. + @see PFPurchaseTableViewCell + */ +typedef NS_ENUM(uint8_t, PFPurchaseTableViewCellState) { + /*! Normal state of the cell. */ + PFPurchaseTableViewCellStateNormal = 0, + /*! Downloading state of the cell. */ + PFPurchaseTableViewCellStateDownloading, + /*! State of the cell, when the product was downloaded. */ + PFPurchaseTableViewCellStateDownloaded +}; + +/*! + `PFPurchaseTableViewCell` is a subclass that is used to show + products in a . + + @see PFProductTableViewController + */ +@interface PFPurchaseTableViewCell : PFTableViewCell + +/*! + @abstract State of the cell. + @see PFPurchaseTableViewCellState + */ +@property (nonatomic, assign) PFPurchaseTableViewCellState state; + +/*! + @abstract Label where price of the product is displayed. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UILabel *priceLabel; + +/*! + @abstract Progress view that is shown, when the product is downloading. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIProgressView *progressView; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.m new file mode 100644 index 0000000..4a7968b --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.m @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFPurchaseTableViewCell.h" + +#import "PFLocalization.h" +#import "PFRect.h" + +@interface PFPurchaseTableViewCell () + +@property (nonatomic, strong) UILabel *priceLabel; +@property (nonatomic, strong) UIProgressView *progressView; + +@end + +@implementation PFPurchaseTableViewCell + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + self.backgroundView = [[UIView alloc] initWithFrame:CGRectZero]; + + self.imageView.layer.shadowColor = [UIColor blackColor].CGColor; + self.imageView.layer.shadowOffset = CGSizeMake(0.0f, 1.0f); + self.imageView.layer.shadowRadius = 1.0f; + self.imageView.layer.shadowOpacity = 1.0f; + + self.textLabel.backgroundColor = [UIColor clearColor]; + self.detailTextLabel.backgroundColor = [UIColor clearColor]; + self.detailTextLabel.numberOfLines = 2; + self.detailTextLabel.font = [UIFont systemFontOfSize:12.0f]; + + self.priceLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + self.priceLabel.backgroundColor = [UIColor colorWithWhite:242.0f/255.0f alpha:1.0f]; + self.priceLabel.textColor = [UIColor grayColor]; + self.priceLabel.shadowColor = [UIColor whiteColor]; + self.priceLabel.shadowOffset = CGSizeMake(0.0f, -1.0f); + self.priceLabel.font = [UIFont boldSystemFontOfSize:12.0f]; + self.priceLabel.layer.borderColor = [UIColor grayColor].CGColor; + self.priceLabel.layer.borderWidth = 1.0f; + self.priceLabel.layer.cornerRadius = 3.0f; + self.priceLabel.lineBreakMode = NSLineBreakByWordWrapping; + self.priceLabel.numberOfLines = 0; + [self.contentView addSubview:self.priceLabel]; + + self.progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault]; + self.state = PFPurchaseTableViewCellStateNormal; + } + return self; +} +#pragma mark - +#pragma mark UIView + +- (void)layoutSubviews { + [super layoutSubviews]; + + const CGRect bounds = self.contentView.bounds; + + CGFloat iconWidth = floorf(0.8f * CGRectGetHeight(bounds)); + CGFloat iconMarginY = floorf((CGRectGetHeight(bounds) - iconWidth)/2.0f); + CGFloat iconMarginX = iconMarginY; + CGFloat x = iconMarginX; + CGFloat y = iconMarginY; + self.imageView.frame = CGRectMake(x, y, iconWidth, iconWidth); + x += self.imageView.frame.size.width + iconMarginX; + + self.priceLabel.frame = CGRectZero; // this is necessary for sizeToFit to work correctly + [self.priceLabel sizeToFit]; + CGFloat priceLabelRightInset = 10.0f; + CGFloat priceLabelX = CGRectGetWidth(bounds) - CGRectGetWidth(self.priceLabel.frame) - priceLabelRightInset; + CGFloat priceLabelY = floorf((CGRectGetHeight(self.textLabel.frame) - CGRectGetHeight(self.priceLabel.frame))/2.0f) + iconMarginY; + + self.priceLabel.frame = PFRectMakeWithOriginSize(CGPointMake(priceLabelX, priceLabelY), self.priceLabel.frame.size); + + CGFloat titleWidth = self.contentView.frame.size.width - self.imageView.frame.size.width - iconMarginX - 100.0f; + CGFloat titleHeight = self.textLabel.frame.size.height; + self.textLabel.frame = CGRectMake(x, y, titleWidth, titleHeight); + + CGFloat textMarginBottom = 5.0f; + y += self.textLabel.frame.size.height + textMarginBottom; + + CGFloat detailTextLabelWidth = CGRectGetWidth(bounds) - x - 50.0f; + self.detailTextLabel.frame = CGRectMake(x, y, detailTextLabelWidth, CGRectGetWidth(self.detailTextLabel.frame)); + self.progressView.frame = CGRectMake(x, CGRectGetHeight(bounds) - CGRectGetHeight(self.progressView.frame) - iconMarginY - 2.0f, + detailTextLabelWidth, CGRectGetHeight(self.progressView.frame)); +} + +#pragma mark - +#pragma mark PFPurchaseTableViewCell + +- (void)setState:(PFPurchaseTableViewCellState)state { + if (self.state == state) { + return; + } + + _state = state; + + switch (state) { + case PFPurchaseTableViewCellStateNormal: + { + self.detailTextLabel.numberOfLines = 2; + } + break; + case PFPurchaseTableViewCellStateDownloading: + { + self.detailTextLabel.numberOfLines = 1; + self.priceLabel.backgroundColor = [UIColor colorWithRed:132.0f/255.0f green:175.0f/255.0f blue:230.0f/255.0f alpha:1.0f]; + NSString *downloadingText = NSLocalizedString(@"DOWNLOADING", @"DOWNLOADING"); + self.priceLabel.text = [NSString stringWithFormat:@" %@ ", downloadingText]; + self.priceLabel.textColor = [UIColor whiteColor]; + self.priceLabel.shadowColor = [UIColor blackColor]; + self.priceLabel.shadowOffset = CGSizeMake(0.0f, -1.0f); + [self.contentView addSubview:self.progressView]; + } + break; + case PFPurchaseTableViewCellStateDownloaded: + { + self.detailTextLabel.numberOfLines = 2; + NSString *installedText = NSLocalizedString(@"INSTALLED", @"INSTALLED"); + self.priceLabel.text = [NSString stringWithFormat:@" %@ ", installedText]; + self.priceLabel.textColor = [UIColor whiteColor]; + self.priceLabel.shadowColor = [UIColor blackColor]; + self.priceLabel.shadowOffset = CGSizeMake(0.0f, -1.0f); + self.priceLabel.backgroundColor = [UIColor colorWithRed:160.0f/255.0f green:200.0f/255.0f blue:120.0f/255.0f alpha:1.0f]; + [self.progressView removeFromSuperview]; + } + break; + default: + break; + } + [self setNeedsLayout]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.h new file mode 100644 index 0000000..9238d99 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import +#import + +PFUI_ASSUME_NONNULL_BEGIN + +/*! + The `PFTableViewCell` class represents a table view cell which can download and display remote images stored on Parse. + + When used in a - downloading and displaying of the remote images + are automatically managed by the . + */ +@interface PFTableViewCell : UITableViewCell + +/*! + @abstract The imageView of the table view cell. + + @see PFImageView + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFImageView *imageView; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.m new file mode 100644 index 0000000..65f67cd --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.m @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFTableViewCell.h" + +#import "PFRect.h" + +@interface PFTableViewCell () + +@property (nonatomic, assign) UITableViewCellStyle style; +@property (nonatomic, strong) PFImageView *customImageView; + +@end + +@implementation PFTableViewCell + +#pragma mark - +#pragma mark NSObject + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + _style = style; + + _customImageView = [[PFImageView alloc] initWithFrame:CGRectZero]; + [self.contentView addSubview:_customImageView]; + } + return self; +} + +#pragma mark - +#pragma mark UIView + +- (void)layoutSubviews { + [super layoutSubviews]; + + // We cannot depend on the parent class to lay out things perfectly because + // UITableViewCell layoutSubviews use its internal imageView member rather than via + // its self.imageView property, so we need to lay out things manually + + // Don't relayout anything if there is no file/image + if (!self.imageView.file && !self.imageView.image) { + return; + } + + // Value2 ignores imageView entirely + if (self.style == UITableViewCellStyleValue2) { + return; + } + + const CGRect bounds = self.contentView.bounds; + + CGFloat imageHeight = MIN(CGRectGetWidth(bounds), CGRectGetHeight(bounds)); + CGFloat imageWidth = floorf(13.0f * imageHeight / 9.0f); // Default is 13/9 aspect ratio + _customImageView.frame = PFRectMakeWithSize(CGSizeMake(imageWidth, imageHeight)); + + CGFloat imageViewRightInset = 10.0f; + CGFloat textOrigin = CGRectGetMaxX(_customImageView.frame) + imageViewRightInset; + + CGRect textLabelFrame = self.textLabel.frame; + CGRect detailTextLabelFrame = self.detailTextLabel.frame; + + switch (self.style) { + case UITableViewCellStyleDefault: + case UITableViewCellStyleSubtitle: + { + CGFloat originalTextLabelInset = CGRectGetMinX(textLabelFrame); + CGFloat originalDetailTextLabelInset = CGRectGetMinX(detailTextLabelFrame); + + CGFloat maxTextLabelWidth = CGRectGetMaxX(bounds) - textOrigin - originalTextLabelInset; + CGFloat maxDetailTextLabelWidth = CGRectGetMaxX(bounds) - textOrigin - originalDetailTextLabelInset; + + textLabelFrame.origin.x = textOrigin; + textLabelFrame.size.width = MIN(maxTextLabelWidth, CGRectGetWidth(textLabelFrame)); + + detailTextLabelFrame.origin.x = textOrigin; + detailTextLabelFrame.size.width = MIN(maxDetailTextLabelWidth, CGRectGetWidth(detailTextLabelFrame)); + } + break; + case UITableViewCellStyleValue1: + { + CGFloat maxTextLabelWidth = CGRectGetMinX(detailTextLabelFrame) - textOrigin; + + textLabelFrame.origin.x = textOrigin; + textLabelFrame.size.width = MIN(maxTextLabelWidth, CGRectGetWidth(textLabelFrame)); + } + break; + default: + break; + } + self.textLabel.frame = textLabelFrame; + self.detailTextLabel.frame = detailTextLabelFrame; +} + +#pragma mark - +#pragma mark PFImageTableViewCell + +- (PFImageView *)imageView { + return _customImageView; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h new file mode 100644 index 0000000..91f15fa --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +/*! + The `PFActivityIndicatorCollectionReusableView` class represents a collection footer + that has a simple text label and displays UIActivityIndicatorView if property is set to `YES`. + An instance of this class is used as a default next page button inside . + */ +@interface PFActivityIndicatorCollectionReusableView : UICollectionReusableView + +@property (nonatomic, strong, readonly) UILabel *textLabel; + +@property (nonatomic, assign, getter=isAnimating) BOOL animating; + +- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents; +- (void)removeTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents; + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.m new file mode 100644 index 0000000..3385edd --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.m @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFActivityIndicatorCollectionReusableView.h" + +#import "PFRect.h" + +@interface PFActivityIndicatorCollectionReusableView () { + UIActivityIndicatorView *_activityIndicator; + UIButton *_actionButton; +} + +@end + +@implementation PFActivityIndicatorCollectionReusableView + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (!self) return nil; + + _actionButton = [UIButton buttonWithType:UIButtonTypeCustom]; + _actionButton.backgroundColor = self.backgroundColor; + [self addSubview:_actionButton]; + + _textLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + _textLabel.numberOfLines = 0; + _textLabel.textAlignment = NSTextAlignmentCenter; + [self addSubview:_textLabel]; + + _activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; + _activityIndicator.hidesWhenStopped = YES; + [self addSubview:_activityIndicator]; + + return self; +} + +#pragma mark - +#pragma mark Dealloc + +- (void)dealloc { + [self removeTarget:nil action:nil forControlEvents:UIControlEventAllEvents]; +} + +#pragma mark - +#pragma mark UIView + +- (void)setBackgroundColor:(UIColor *)backgroundColor { + [super setBackgroundColor:backgroundColor]; + _actionButton.backgroundColor = backgroundColor; +} + +- (void)layoutSubviews { + [super layoutSubviews]; + + const CGRect bounds = self.bounds; + + _actionButton.frame = bounds; + + _textLabel.frame = PFRectMakeWithSizeCenteredInRect([_textLabel sizeThatFits:bounds.size], bounds); + _activityIndicator.frame = PFRectMakeWithSizeCenteredInRect([_activityIndicator sizeThatFits:bounds.size], bounds); +} + +#pragma mark - +#pragma mark Accessors + +- (void)setAnimating:(BOOL)animating { + if (self.animating != animating) { + + if (animating) { + [_activityIndicator startAnimating]; + _textLabel.alpha = 0.0f; + } else { + [_activityIndicator stopAnimating]; + _textLabel.alpha = 1.0f; + } + } +} + +- (BOOL)isAnimating { + return [_activityIndicator isAnimating]; +} + +#pragma mark - +#pragma mark Actions + +- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents { + [_actionButton addTarget:target action:action forControlEvents:controlEvents]; +} + +- (void)removeTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents { + [_actionButton removeTarget:target action:action forControlEvents:controlEvents]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h new file mode 100644 index 0000000..fea50a7 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import + +/*! + The `PFActivityIndicatorTableViewCell` class represents a table view cell + that displays UIActivityIndicatorView as the accessory view. + */ +@interface PFActivityIndicatorTableViewCell : PFTableViewCell + +@property (nonatomic, assign, getter=isAnimating) BOOL animating; + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.m new file mode 100644 index 0000000..b825bd1 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.m @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFActivityIndicatorTableViewCell.h" + +@interface PFActivityIndicatorTableViewCell () + +@property (nonatomic, strong) UIActivityIndicatorView *activityIndicator; + +@end + +@implementation PFActivityIndicatorTableViewCell + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + _activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; + _activityIndicator.hidesWhenStopped = YES; + self.accessoryView = _activityIndicator; + } + return self; +} + +#pragma mark - +#pragma mark Accessors + +- (void)setAnimating:(BOOL)animating { + if (self.animating != animating) { + + if (animating) { + [_activityIndicator startAnimating]; + } else { + [_activityIndicator stopAnimating]; + } + } +} + +- (BOOL)isAnimating { + return [_activityIndicator isAnimating]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.h new file mode 100644 index 0000000..bcf4f10 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +@interface PFColor : UIColor + +///-------------------------------------- +/// @name Common +///-------------------------------------- + ++ (UIColor *)commonBackgroundColor; + +///-------------------------------------- +/// @name TextFields +///-------------------------------------- + ++ (UIColor *)textFieldBackgroundColor; ++ (UIColor *)textFieldTextColor; ++ (UIColor *)textFieldPlaceholderColor; ++ (UIColor *)textFieldSeparatorColor; + +///-------------------------------------- +/// @name Buttons +///-------------------------------------- + ++ (UIColor *)loginButtonBackgroundColor; ++ (UIColor *)signupButtonBackgroundColor; ++ (UIColor *)facebookButtonBackgroundColor; ++ (UIColor *)twitterButtonBackgroundColor; + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.m new file mode 100644 index 0000000..467d9ee --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.m @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFColor.h" + +@implementation PFColor + +#pragma mark - +#pragma mark Common + ++ (UIColor *)commonBackgroundColor { + return [UIColor colorWithRed:249/255.0f + green:251.0f/255.0f + blue:1.0f + alpha:1.0f]; +} + +#pragma mark - +#pragma mark TextField + ++ (UIColor *)textFieldBackgroundColor { + return [UIColor whiteColor]; +} + ++ (UIColor *)textFieldTextColor { + return [UIColor blackColor]; +} + ++ (UIColor *)textFieldPlaceholderColor { + return [UIColor colorWithWhite:194.0f/255.0f alpha:1.0f]; +} + ++ (UIColor *)textFieldSeparatorColor { + return [UIColor colorWithWhite:227.0f/255.0f alpha:1.0f]; +} + +#pragma mark - +#pragma mark Buttons + ++ (UIColor *)loginButtonBackgroundColor { + return [UIColor colorWithRed:97.0f/255.0f + green:106.f/255.0f + blue:116.0f/255.0f + alpha:1.0f]; +} + ++ (UIColor *)signupButtonBackgroundColor { + return [UIColor colorWithRed:108.0f/255.0f + green:150.0f/255.0f + blue:249.0f/255.0f + alpha:1.0f]; +} + ++ (UIColor *)facebookButtonBackgroundColor { + return [UIColor colorWithRed:58.0f/255.0f + green:89.0f/255.0f + blue:152.0f/255.0f + alpha:1.0f]; +} + ++ (UIColor *)twitterButtonBackgroundColor { + return [UIColor colorWithRed:45.0f/255.0f + green:170.0f/255.0f + blue:1.0f + alpha:1.0f]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.h new file mode 100644 index 0000000..b7d5222 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +@interface PFImage : UIImage + ++ (UIImage *)imageWithColor:(UIColor *)color; ++ (UIImage *)imageWithColor:(UIColor *)color cornerRadius:(CGFloat)cornerRadius; + ++ (UIImage *)imageNamed:(NSString *)name; + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.m new file mode 100644 index 0000000..ac01c1e --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.m @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFImage.h" + +#import "PFColor.h" +#import "PFRect.h" +#import "PFResources.h" + +@implementation PFImage + ++ (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size +{ + UIGraphicsBeginImageContext(size); + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGContextSetFillColorWithColor(context, color.CGColor); + CGContextFillRect(context, (CGRect){.size = size}); + + UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + return image; +} + ++ (UIImage *)imageWithColor:(UIColor *)color cornerRadius:(CGFloat)cornerRadius { + CGSize size = CGSizeMake(cornerRadius * 2.0f + 1.0f, cornerRadius * 2.0f + 1.0f); + + UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f); + + [color setFill]; + UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:PFRectMakeWithSize(size) cornerRadius:cornerRadius]; + [path fill]; + + UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(cornerRadius, + cornerRadius, + cornerRadius, + cornerRadius) + resizingMode:UIImageResizingModeStretch]; + + return image; +} + ++ (UIImage *)imageWithColor:(UIColor *)color { + return [self imageWithColor:color size:CGSizeMake(1.0f, 1.0f)]; +} + ++ (UIImage *)imageNamed:(NSString *)imageName { + UIImage *image = [UIImage imageNamed:imageName]; + if (image) { + // If there is an external override for the image at the given path, use it. + return image; + } + + NSString *fileExtension = [imageName pathExtension]; + NSMutableString *filenameWithoutExtension = [[imageName stringByDeletingPathExtension] mutableCopy]; + [filenameWithoutExtension replaceOccurrencesOfString:@"-\\." + withString:@"_" + options:NSRegularExpressionSearch + range:NSMakeRange(0, [filenameWithoutExtension length])]; + + NSData *data = nil; + + int imageScale = (int)ceilf([UIScreen mainScreen].scale); + while (data == nil && imageScale > 1) { + NSString *selectorName = [filenameWithoutExtension stringByAppendingFormat:@"%dx_%@", + imageScale, + fileExtension]; + SEL selector = NSSelectorFromString(selectorName); + if ([PFResources respondsToSelector:selector]) { + data = (NSData *)[PFResources performSelector:selector]; + } + if (data == nil) { + imageScale--; + } + } + if (!data) { + NSString *selectorName = [filenameWithoutExtension stringByAppendingFormat:@"_%@", fileExtension]; + SEL selector = NSSelectorFromString(selectorName); + data = (NSData *)[PFResources performSelector:selector]; + } + image = [[UIImage alloc] initWithData:data]; + + // we need to indicate to the framework that the data is already a 2x image, otherwise the framework + // stretches the image by 2x again. To do that, we drop down to CGImage layer to take advantage of + // +[UIImage imageWithCGImage:scale:orientation] + return [UIImage imageWithCGImage:image.CGImage scale:imageScale orientation:image.imageOrientation]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.h new file mode 100644 index 0000000..e6c1f05 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import +#import + +extern CGRect PFRectMakeWithOriginSize(CGPoint origin, CGSize size); +extern CGRect PFRectMakeWithOrigin(CGPoint origin); +extern CGRect PFRectMakeWithSize(CGSize size); + +extern CGRect PFRectMakeWithSizeCenteredInRect(CGSize size, CGRect rect); +extern CGSize PFSizeMin(CGSize size1, CGSize size2); diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.m new file mode 100644 index 0000000..0aeb75c --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.m @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFRect.h" + +CGRect PFRectMakeWithOriginSize(CGPoint origin, CGSize size) { + return CGRectMake(origin.x, origin.y, size.width, size.height); +} + +CGRect PFRectMakeWithOrigin(CGPoint origin) { + return PFRectMakeWithOriginSize(origin, CGSizeZero); +} + +CGRect PFRectMakeWithSize(CGSize size) { + return PFRectMakeWithOriginSize(CGPointZero, size); +} + +CGRect PFRectMakeWithSizeCenteredInRect(CGSize size, CGRect rect) { + CGPoint center = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect)); + CGPoint origin = CGPointMake(floorf(center.x - size.width / 2.0f), + floorf(center.y - size.height / 2.0f)); + return PFRectMakeWithOriginSize(origin, size); +} + +CGSize PFSizeMin(CGSize size1, CGSize size2) { + CGSize size = CGSizeZero; + size.width = MIN(size1.width, size2.width); + size.height = MIN(size1.height, size2.height); + return size; +} diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.h new file mode 100644 index 0000000..3478c95 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +@interface PFUIAlertView : UIAlertView + ++ (void)showAlertViewWithTitle:(NSString *)title + error:(NSError *)error; ++ (void)showAlertViewWithTitle:(NSString *)title + message:(NSString *)message; ++ (void)showAlertViewWithTitle:(NSString *)title + message:(NSString *)message + cancelButtonTitle:(NSString *)cancelButtonTitle; + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.m new file mode 100644 index 0000000..e958829 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.m @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFUIAlertView.h" + +#import "PFLocalization.h" + +@implementation PFUIAlertView + ++ (void)showAlertViewWithTitle:(NSString *)title error:(NSError *)error { + NSString *message = error.userInfo[@"error"]; + if (!message) { + message = [error.userInfo[@"originalError"] localizedDescription]; + } + if (!message) { + message = [error localizedDescription]; + } + [self showAlertViewWithTitle:title message:message]; +} + ++ (void)showAlertViewWithTitle:(NSString *)title message:(NSString *)message { + [self showAlertViewWithTitle:title + message:message + cancelButtonTitle:NSLocalizedString(@"OK", @"OK")]; +} + ++ (void)showAlertViewWithTitle:(NSString *)title + message:(NSString *)message + cancelButtonTitle:(NSString *)cancelButtonTitle { + UIAlertView *alertView = [[self alloc] initWithTitle:title + message:message + delegate:nil + cancelButtonTitle:cancelButtonTitle + otherButtonTitles:nil]; + [alertView show]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.h new file mode 100644 index 0000000..36c2337 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +/*! + A memory cache for UIImage, based on NSCache + */ +@interface PFImageCache : NSCache + ++ (instancetype)sharedCache; + +- (void)setImage:(UIImage *)image forURL:(NSURL *)url; +- (UIImage *)imageForURL:(NSURL *)url; + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.m new file mode 100644 index 0000000..260cd50 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.m @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFImageCache.h" + +static NSString *PFImageCacheKeyFromURL(NSURL *url) { + return [url absoluteString]; +} + +@implementation PFImageCache + ++ (instancetype)sharedCache { + static dispatch_once_t onceToken; + static PFImageCache *sharedCache; + dispatch_once(&onceToken, ^{ + sharedCache = [[self alloc] init]; + }); + return sharedCache; +} + +- (void)setImage:(UIImage *)image forURL:(NSURL *)url { + [self setObject:image forKey:PFImageCacheKeyFromURL(url)]; +} + +- (UIImage *)imageForURL:(NSURL *)url { + return [self objectForKey:PFImageCacheKeyFromURL(url)]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFLocalization.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFLocalization.h new file mode 100644 index 0000000..8477d8f --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFLocalization.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#ifndef ParseUI_PFLocalization_h +#define ParseUI_PFLocalization_h + +#undef NSLocalizedString +#define NSLocalizedString(key, comment) \ +[[NSBundle bundleForClass:[self class]] localizedStringForKey:key value:nil table:@"ParseUI"] + +#endif diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h new file mode 100644 index 0000000..c9772ef --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +typedef NS_ENUM(uint8_t, PFActionButtonStyle) +{ + PFActionButtonStyleNormal, + PFActionButtonStyleWide +}; + +@class PFActionButtonConfiguration; + +@interface PFActionButton : UIButton + +@property (nonatomic, assign, getter=isLoading) BOOL loading; + +@property (nonatomic, assign) PFActionButtonStyle buttonStyle; + +///-------------------------------------- +/// @name Class +///-------------------------------------- + ++ (NSString *)titleForButtonStyle:(PFActionButtonStyle)buttonStyle; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)initWithConfiguration:(PFActionButtonConfiguration *)configuration + buttonStyle:(PFActionButtonStyle)buttonStyle NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE; + +@end + +@interface PFActionButtonConfiguration : NSObject + +@property (nonatomic, strong, readonly) UIColor *backgroundImageColor; +@property (nonatomic, strong, readonly) UIImage *image; + +- (instancetype)initWithBackgroundImageColor:(UIColor *)backgroundImageColor + image:(UIImage *)image NS_DESIGNATED_INITIALIZER; + +- (void)setTitle:(NSString *)title forButtonStyle:(PFActionButtonStyle)style; +- (NSString *)titleForButtonStyle:(PFActionButtonStyle)style; + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m new file mode 100644 index 0000000..f741d35 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m @@ -0,0 +1,202 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFActionButton.h" + +#import "PFImage.h" +#import "PFRect.h" + +static const UIEdgeInsets PFActionButtonContentEdgeInsets = { .top = 0.0f, .left = 12.0f, .bottom = 0.0f, .right = 0.0f }; + +@interface PFActionButton () +{ + UIActivityIndicatorView *_activityIndicatorView; +} + +@property (nonatomic, strong) PFActionButtonConfiguration *configuration; + +- (instancetype)initWithCoder:(nonnull NSCoder *)decoder NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER; + +@end + +@implementation PFActionButton + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithFrame:(CGRect)frame { + return [super initWithFrame:frame]; +} + +- (instancetype)initWithCoder:(nonnull NSCoder *)decoder { + return [super initWithCoder:decoder]; +} + +- (instancetype)initWithConfiguration:(PFActionButtonConfiguration *)configuration + buttonStyle:(PFActionButtonStyle)buttonStyle { + self = [super initWithFrame:CGRectZero]; + if (!self) return nil; + + _buttonStyle = buttonStyle; + _configuration = configuration; + + self.backgroundColor = [UIColor clearColor]; + self.titleLabel.font = [UIFont systemFontOfSize:16.0f]; + + self.contentEdgeInsets = UIEdgeInsetsZero; + self.imageEdgeInsets = UIEdgeInsetsZero; + + UIImage *backgroundImage = [PFImage imageWithColor:configuration.backgroundImageColor cornerRadius:4.0f]; + [self setBackgroundImage:backgroundImage forState:UIControlStateNormal]; + + [self setImage:configuration.image forState:UIControlStateNormal]; + + [self setTitle:[configuration titleForButtonStyle:buttonStyle] + forState:UIControlStateNormal]; + + return self; +} + +#pragma mark - +#pragma mark Layout + +- (void)layoutSubviews { + [super layoutSubviews]; + + _activityIndicatorView.center = self.imageView.center; + self.imageView.alpha = (self.loading ? 0.0f : 1.0f); +} + +- (CGSize)sizeThatFits:(CGSize)boundingSize { + CGSize size = CGSizeZero; + size.width = MAX([super sizeThatFits:boundingSize].width, boundingSize.width); + size.height = MIN(44.0f, boundingSize.height); + return size; +} + +- (CGRect)imageRectForContentRect:(CGRect)contentRect { + CGRect imageRect = PFRectMakeWithSize([self imageForState:UIControlStateNormal].size); + imageRect.origin.x = PFActionButtonContentEdgeInsets.left; + imageRect.origin.y = CGRectGetMidY(contentRect) - CGRectGetMidY(imageRect); + return imageRect; +} + +- (CGRect)titleRectForContentRect:(CGRect)contentRect { + contentRect.origin.x = CGRectGetMaxX([self imageRectForContentRect:contentRect]); + contentRect.size.width = CGRectGetWidth(self.bounds) - CGRectGetMaxX([self imageRectForContentRect:contentRect]); + + CGSize size = [super titleRectForContentRect:contentRect].size; + CGRect rect = PFRectMakeWithSizeCenteredInRect(size, contentRect); + return rect; +} + +#pragma mark - +#pragma mark Configuration + ++ (UIColor *)backgroundImageColor { + return [UIColor clearColor]; +} + ++ (NSString *)titleForButtonStyle:(PFActionButtonStyle)buttonStyle { + return nil; +} + +#pragma mark - +#pragma mark Accessors + +- (void)setLoading:(BOOL)loading { + if (self.loading != loading) { + if (loading) { + if (!_activityIndicatorView) { + _activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; + } + + [_activityIndicatorView startAnimating]; + [self addSubview:_activityIndicatorView]; + [self setNeedsLayout]; + } else { + [_activityIndicatorView stopAnimating]; + [_activityIndicatorView removeFromSuperview]; + } + + self.imageView.alpha = (loading ? 0.0f : 1.0f); + } +} + +- (BOOL)isLoading { + return [_activityIndicatorView isAnimating]; +} + +- (void)setButtonStyle:(PFActionButtonStyle)buttonStyle { + if (self.buttonStyle != buttonStyle) { + _buttonStyle = buttonStyle; + + [self setTitle:[self.configuration titleForButtonStyle:self.buttonStyle] forState:UIControlStateNormal]; + } +} + +@end + +@interface PFActionButtonConfiguration () { + NSMutableDictionary *_titlesDictionary; +} + +@property (nonatomic, strong, readwrite) UIColor *backgroundImageColor; +@property (nonatomic, strong, readwrite) UIImage *image; + +@end + +@implementation PFActionButtonConfiguration + +#pragma mark - +#pragma mark Init + +- (instancetype)init { + return [self initWithBackgroundImageColor:nil image:nil]; +} + +- (instancetype)initWithBackgroundImageColor:(UIColor *)backgroundImageColor + image:(UIImage *)image { + self = [super init]; + if (!self) return nil; + + _backgroundImageColor = backgroundImageColor; + _image = image; + + return self; +} + +#pragma mark - +#pragma mark Title + +- (void)setTitle:(NSString *)title forButtonStyle:(PFActionButtonStyle)style { + if (!_titlesDictionary) { + _titlesDictionary = [NSMutableDictionary dictionaryWithCapacity:style]; + } + _titlesDictionary[@(style)] = title; +} + +- (NSString *)titleForButtonStyle:(PFActionButtonStyle)style { + return _titlesDictionary[@(style)]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h new file mode 100644 index 0000000..c34e4db --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +@interface PFDismissButton : UIButton + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.m new file mode 100644 index 0000000..ba40367 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.m @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFDismissButton.h" + +#import "PFRect.h" + +@implementation PFDismissButton + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (!self) return nil; + + [self setImage:[self _defaultImage] forState:UIControlStateNormal]; + + return self; +} + +#pragma mark - +#pragma mark Init + +- (UIImage *)_defaultImage { + CGRect imageRect = PFRectMakeWithSize(CGSizeMake(22.0f, 22.0f)); + + UIGraphicsBeginImageContextWithOptions(imageRect.size, NO, 0.0f); + + [[UIColor colorWithRed:91.0f/255.0f green:107.0f/255.0f blue:118.0f/255.0f alpha:1.0f] setStroke]; + + UIBezierPath *path = [UIBezierPath bezierPath]; + + [path moveToPoint:CGPointZero]; + [path addLineToPoint:CGPointMake(CGRectGetMaxX(imageRect), CGRectGetMaxY(imageRect))]; + + [path moveToPoint:CGPointMake(CGRectGetMaxX(imageRect), CGRectGetMinY(imageRect))]; + [path addLineToPoint:CGPointMake(CGRectGetMinX(imageRect), CGRectGetMaxY(imageRect))]; + + path.lineWidth = 2.0f; + + [path stroke]; + + UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + return image; +} + +#pragma mark - +#pragma mark UIView + +- (CGSize)sizeThatFits:(CGSize)boundingSize { + CGSize size = CGSizeZero; + size.width = MIN(22.0f, boundingSize.width); + size.height = MIN(22.0f, boundingSize.height); + return size; +} + +- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event +{ + CGRect bigBounds = CGRectInset(self.bounds, -22.0f, -22.0f); + return CGRectContainsPoint(bigBounds, point); +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h new file mode 100644 index 0000000..8517180 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +@interface PFPrimaryButton : UIButton + +@property (nonatomic, assign, getter=isLoading) BOOL loading; + +- (instancetype)initWithBackgroundImageColor:(UIColor *)color NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE; + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.m new file mode 100644 index 0000000..5c5a076 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.m @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFPrimaryButton.h" + +#import "PFImage.h" +#import "PFRect.h" + +@interface PFPrimaryButton () +{ + UIActivityIndicatorView *_activityIndicatorView; +} + +- (instancetype)initWithCoder:(nonnull NSCoder *)decoder NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER; + +@end + +@implementation PFPrimaryButton + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithFrame:(CGRect)frame { + return [super initWithFrame:frame]; +} + +- (instancetype)initWithCoder:(nonnull NSCoder *)decoder { + return [super initWithCoder:decoder]; +} + +- (instancetype)initWithBackgroundImageColor:(UIColor *)color { + self = [super initWithFrame:CGRectZero]; + if (!self) return nil; + + [self setBackgroundImage:[PFImage imageWithColor:color] forState:UIControlStateNormal]; + + self.titleLabel.font = [UIFont systemFontOfSize:20.0f]; + self.contentVerticalAlignment = UIControlContentHorizontalAlignmentCenter; + self.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter; + + return self; +} + +#pragma mark - +#pragma mark Layout + +- (void)layoutSubviews { + [super layoutSubviews]; + + CGFloat activityIndicatorRightInset = 12.0f; + + CGRect activityIndicatorFrame = PFRectMakeWithSizeCenteredInRect(_activityIndicatorView.bounds.size, self.bounds); + activityIndicatorFrame.origin.x = (CGRectGetMinX(self.titleLabel.frame) + - CGRectGetWidth(activityIndicatorFrame) + - activityIndicatorRightInset); + _activityIndicatorView.frame = activityIndicatorFrame; +} + +- (CGSize)sizeThatFits:(CGSize)boundingSize { + CGSize size = CGSizeZero; + size.width = boundingSize.width; + size.height = MIN(56.0f, boundingSize.height); + return size; +} + +#pragma mark - +#pragma mark Accessors + +- (void)setLoading:(BOOL)loading { + if (self.loading != loading) { + if (loading) { + if (!_activityIndicatorView) { + _activityIndicatorView = [[UIActivityIndicatorView alloc] + initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; + } + + [_activityIndicatorView startAnimating]; + [self addSubview:_activityIndicatorView]; + [self setNeedsLayout]; + } else { + [_activityIndicatorView stopAnimating]; + [_activityIndicatorView removeFromSuperview]; + } + } +} + +- (BOOL)isLoading { + return [_activityIndicatorView isAnimating]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h new file mode 100644 index 0000000..75db8f2 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +@interface PFTextButton : UIButton + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.m new file mode 100644 index 0000000..9ada726 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.m @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFTextButton.h" + +@implementation PFTextButton + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (!self) return nil; + + self.titleLabel.font = [UIFont systemFontOfSize:16.0f]; + [self setTitleColor:[UIColor colorWithRed:82.0f/255.0f + green:152.0f/255.0f + blue:252.0f/255.0f + alpha:1.0f] + forState:UIControlStateNormal]; + + return self; +} + +#pragma mark - +#pragma mark UIView + +- (CGSize)sizeThatFits:(CGSize)boundingSize { + CGSize size = [super sizeThatFits:boundingSize]; + size.width = MAX(32.0f, boundingSize.width); + size.height = MIN(32.0f, boundingSize.height); + return size; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.h new file mode 100644 index 0000000..02b2a90 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +/*! + A loading view that is used to show users that data is being loaded before any data is available. + */ +@interface PFLoadingView : UIView + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.m new file mode 100644 index 0000000..a9b7688 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.m @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFLoadingView.h" + +#import "PFRect.h" +#import "PFLocalization.h" + +@interface PFLoadingView () + +@property (nonatomic, strong) UILabel *loadingLabel; +@property (nonatomic, strong) UIActivityIndicatorView *activityIndicator; + +@end + +@implementation PFLoadingView + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + _activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; + [_activityIndicator startAnimating]; + [self addSubview:_activityIndicator]; + + _loadingLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + _loadingLabel.text = NSLocalizedString(@"Loading...", @"Loading message of PFQueryTableViewController"); + _loadingLabel.backgroundColor = [UIColor clearColor]; + _loadingLabel.shadowOffset = CGSizeMake(0.0f, 1.0f); + _loadingLabel.shadowColor = [UIColor whiteColor]; + [_loadingLabel sizeToFit]; + [self addSubview:_loadingLabel]; + } + return self; +} + +#pragma mark - +#pragma mark UIView + +- (void)layoutSubviews { + [super layoutSubviews]; + + const CGRect bounds = self.bounds; + + CGFloat viewsInset = 4.0f; + CGFloat startX = floorf((CGRectGetMaxX(bounds) + - CGRectGetWidth(_loadingLabel.frame) + - CGRectGetWidth(_activityIndicator.frame) + - viewsInset) + / 2.0f); + + CGRect activityIndicatorFrame = PFRectMakeWithSizeCenteredInRect(_activityIndicator.frame.size, bounds); + activityIndicatorFrame.origin.x = startX; + _activityIndicator.frame = activityIndicatorFrame; + + CGRect loadingLabelFrame = PFRectMakeWithSizeCenteredInRect(_loadingLabel.frame.size, bounds); + loadingLabelFrame.origin.x = CGRectGetMaxX(activityIndicatorFrame) + viewsInset; + _loadingLabel.frame = loadingLabelFrame; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.h new file mode 100644 index 0000000..ee71b02 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.h @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import + +PFUI_ASSUME_NONNULL_BEGIN + +/*! + `PFLogInFields` bitmask specifies the log in elements which are enabled in the view. + + @see PFLogInViewController + @see PFLogInView + */ +typedef NS_OPTIONS(NSInteger, PFLogInFields) { + /*! No fields. */ + PFLogInFieldsNone = 0, + /*! Username and password fields. */ + PFLogInFieldsUsernameAndPassword = 1 << 0, + /*! Forgot password button. */ + PFLogInFieldsPasswordForgotten = 1 << 1, + /*! Login button. */ + PFLogInFieldsLogInButton = 1 << 2, + /*! Button to login with Facebook. */ + PFLogInFieldsFacebook = 1 << 3, + /*! Button to login with Twitter. */ + PFLogInFieldsTwitter = 1 << 4, + /*! Signup Button. */ + PFLogInFieldsSignUpButton = 1 << 5, + /*! Dismiss Button. */ + PFLogInFieldsDismissButton = 1 << 6, + + /*! Default value. Combines Username, Password, Login, Signup, Forgot Password and Dismiss buttons. */ + PFLogInFieldsDefault = (PFLogInFieldsUsernameAndPassword | + PFLogInFieldsLogInButton | + PFLogInFieldsSignUpButton | + PFLogInFieldsPasswordForgotten | + PFLogInFieldsDismissButton) +}; + +@class PFTextField; + +/*! + The `PFLogInView` class provides a standard log in interface for authenticating a . + */ +@interface PFLogInView : UIScrollView + +///-------------------------------------- +/// @name Creating Log In View +///-------------------------------------- + +/*! + @abstract Initializes the view with the specified log in elements. + + @param fields A bitmask specifying the log in elements which are enabled in the view + + @returns An initialized `PFLogInView` object or `nil` if the object couldn't be created. + + @see PFLogInFields + */ +- (instancetype)initWithFields:(PFLogInFields)fields; + +/*! + @abstract The view controller that will present this view. + + @discussion Used to lay out elements correctly when the presenting view controller has translucent elements. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, weak) UIViewController *presentingViewController; + +///-------------------------------------- +/// @name Customizing the Logo +///-------------------------------------- + +/// The logo. By default, it is the Parse logo. +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong) UIView *logo; + +///-------------------------------------- +/// @name Configure Username Behaviour +///-------------------------------------- + +/*! + @abstract If email should be used to log in, instead of username + + @discussion By default, this is set to `NO`. + */ +@property (nonatomic, assign) BOOL emailAsUsername; + +///-------------------------------------- +/// @name Log In Elements +///-------------------------------------- + +/*! + @abstract The bitmask which specifies the enabled log in elements in the view. + */ +@property (nonatomic, assign, readonly) PFLogInFields fields; + +/*! + @abstract The username text field. It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFTextField *usernameField; + +/*! + @abstract The password text field. It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFTextField *passwordField; + +/*! + @abstract The password forgotten button. It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *passwordForgottenButton; + +/*! + @abstract The log in button. It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *logInButton; + +/*! + @abstract The Facebook button. It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *facebookButton; + +/*! + @abstract The Twitter button. It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *twitterButton; + +/*! + @abstract The sign up button. It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *signUpButton; + +/*! + @abstract It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *dismissButton; + +/*! + @abstract The facebook/twitter login label. + + @deprecated This property is deprecated and will always be nil. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UILabel *externalLogInLabel __attribute__(PARSE_UI_DEPRECATED("This property is deprecated and will always be nil.")); + +/*! + @abstract The sign up label. + + @deprecated This property is deprecated and will always be nil. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UILabel *signUpLabel __attribute__(PARSE_UI_DEPRECATED("This property is deprecated and will always be nil.")); + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.m new file mode 100644 index 0000000..4aed98d --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.m @@ -0,0 +1,488 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFLogInView.h" + +#import "PFActionButton.h" +#import "PFColor.h" +#import "PFDismissButton.h" +#import "PFImage.h" +#import "PFLocalization.h" +#import "PFPrimaryButton.h" +#import "PFRect.h" +#import "PFTextButton.h" +#import "PFTextField.h" + +static NSString *const PFLogInViewDefaultLogoImageName = @"parse_logo.png"; +static NSString *const PFLogInViewDefaultFacebookButtonImageName = @"facebook_icon.png"; +static NSString *const PFLogInViewDefaultTwitterButtonImageName = @"twitter_icon.png"; + +@implementation PFLogInView + +///-------------------------------------- +#pragma mark - Class +///-------------------------------------- + ++ (PFActionButtonConfiguration *)_defaultSignUpButtonConfiguration { + PFActionButtonConfiguration *configuration = [[PFActionButtonConfiguration alloc] initWithBackgroundImageColor:[PFColor signupButtonBackgroundColor] + image:nil]; + NSString *title = NSLocalizedString(@"Sign Up", @"Sign Up"); + [configuration setTitle:title forButtonStyle:PFActionButtonStyleNormal]; + [configuration setTitle:title forButtonStyle:PFActionButtonStyleWide]; + + return configuration; +} + ++ (PFActionButtonConfiguration *)_defaultFacebookButtonConfiguration { + PFActionButtonConfiguration *configuration = [[PFActionButtonConfiguration alloc] initWithBackgroundImageColor:[PFColor facebookButtonBackgroundColor] + image:[PFImage imageNamed:PFLogInViewDefaultFacebookButtonImageName]]; + + [configuration setTitle:NSLocalizedString(@"Facebook", @"Facebook") + forButtonStyle:PFActionButtonStyleNormal]; + [configuration setTitle:NSLocalizedString(@"Log In with Facebook", @"Log In with Facebook") + + forButtonStyle:PFActionButtonStyleWide]; + + return configuration; +} + ++ (PFActionButtonConfiguration *)_defaultTwitterButtonConfiguration { + PFActionButtonConfiguration *configuration = [[PFActionButtonConfiguration alloc] initWithBackgroundImageColor:[PFColor twitterButtonBackgroundColor] + image:[PFImage imageNamed:PFLogInViewDefaultTwitterButtonImageName]]; + + [configuration setTitle:NSLocalizedString(@"Twitter", @"Twitter") + forButtonStyle:PFActionButtonStyleNormal]; + [configuration setTitle:NSLocalizedString(@"Log In with Twitter", @"Log In with Twitter") + + forButtonStyle:PFActionButtonStyleWide]; + + return configuration; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithFields:(PFLogInFields)otherFields { + self = [super initWithFrame:CGRectZero]; + if (!self) return nil; + + [PFLogInView _validateFields:otherFields]; + + self.opaque = YES; + self.backgroundColor = [PFColor commonBackgroundColor]; + + _fields = otherFields; + + _logo = [[UIImageView alloc] initWithImage:[PFImage imageNamed:PFLogInViewDefaultLogoImageName]]; + _logo.contentMode = UIViewContentModeScaleAspectFit; + [self addSubview:_logo]; + + [self _updateAllFields]; + + return self; +} + +///-------------------------------------- +#pragma mark - Fields +///-------------------------------------- + +- (void)_updateAllFields { + if (_fields & PFLogInFieldsDismissButton) { + if (!_dismissButton) { + _dismissButton = [[PFDismissButton alloc] initWithFrame:CGRectZero]; + [self addSubview:_dismissButton]; + } + } else { + [_dismissButton removeFromSuperview]; + _dismissButton = nil; + } + + if (_fields & PFLogInFieldsUsernameAndPassword) { + if (!_usernameField) { + _usernameField = [[PFTextField alloc] initWithFrame:CGRectZero + separatorStyle:(PFTextFieldSeparatorStyleTop | + PFTextFieldSeparatorStyleBottom)]; + _usernameField.autocorrectionType = UITextAutocorrectionTypeNo; + _usernameField.autocapitalizationType = UITextAutocapitalizationTypeNone; + _usernameField.returnKeyType = UIReturnKeyNext; + [self addSubview:_usernameField]; + [self _updateUsernameFieldStyle]; + } + + if (!_passwordField) { + _passwordField = [[PFTextField alloc] initWithFrame:CGRectZero + separatorStyle:PFTextFieldSeparatorStyleBottom]; + _passwordField.placeholder = NSLocalizedString(@"Password", @"Password"); + _passwordField.secureTextEntry = YES; + _passwordField.autocorrectionType = UITextAutocorrectionTypeNo; + _passwordField.autocapitalizationType = UITextAutocapitalizationTypeNone; + _passwordField.returnKeyType = UIReturnKeyDone; + [self addSubview:_passwordField]; + } + } else { + [_usernameField removeFromSuperview]; + _usernameField = nil; + + [_passwordField removeFromSuperview]; + _passwordField = nil; + } + + if (_fields & PFLogInFieldsSignUpButton) { + if (!_signUpButton) { + _signUpButton = [[PFActionButton alloc] initWithConfiguration:[[self class] _defaultSignUpButtonConfiguration] + buttonStyle:PFActionButtonStyleNormal]; + [self addSubview:_signUpButton]; + } + } else { + [_signUpButton removeFromSuperview]; + _signUpButton = nil; + } + + if (_fields & PFLogInFieldsPasswordForgotten) { + if (!_passwordForgottenButton) { + _passwordForgottenButton = [[PFTextButton alloc] initWithFrame:CGRectZero]; + [_passwordForgottenButton setTitle:NSLocalizedString(@"Forgot Password?", "Forgot Password?") + forState:UIControlStateNormal]; + [self addSubview:_passwordForgottenButton]; + } + } else { + [_passwordForgottenButton removeFromSuperview]; + _passwordForgottenButton = nil; + } + + if (_fields & PFLogInFieldsLogInButton) { + if (!_logInButton) { + _logInButton = [[PFPrimaryButton alloc] initWithBackgroundImageColor:[PFColor loginButtonBackgroundColor]]; + [_logInButton setTitle:NSLocalizedString(@"Log In", @"Log In") forState:UIControlStateNormal]; + [self addSubview:_logInButton]; + } + } else { + [_logInButton removeFromSuperview]; + _logInButton = nil; + } + + if (_fields & PFLogInFieldsFacebook) { + if (!_facebookButton) { + _facebookButton = [[PFActionButton alloc] initWithConfiguration:[[self class] _defaultFacebookButtonConfiguration] + buttonStyle:PFActionButtonStyleNormal]; + [self addSubview:_facebookButton]; + } + } else { + [_facebookButton removeFromSuperview]; + _facebookButton = nil; + } + + if (_fields & PFLogInFieldsTwitter) { + if (!_twitterButton) { + _twitterButton = [[PFActionButton alloc] initWithConfiguration:[[self class] _defaultTwitterButtonConfiguration] + buttonStyle:PFActionButtonStyleNormal]; + [self addSubview:_twitterButton]; + } + } else { + [_twitterButton removeFromSuperview]; + _twitterButton = nil; + } +} + +///-------------------------------------- +#pragma mark - UIView +///-------------------------------------- + +- (void)layoutSubviews { + [super layoutSubviews]; + + const CGRect bounds = PFRectMakeWithOriginSize(CGPointZero, self.bounds.size); + + if (_dismissButton) { + CGPoint origin = CGPointMake(16.0f, 16.0f); + + // In iOS 7+, if this view is presented fullscreen, it's top edge will be behind the status bar. + // This lets us move down the dismiss button a bit so that it's not covered by the status bar. + if ([self.presentingViewController respondsToSelector:@selector(topLayoutGuide)]) { + origin.y += self.presentingViewController.topLayoutGuide.length; + } + + CGRect frame = PFRectMakeWithOriginSize(origin, [_dismissButton sizeThatFits:bounds.size]); + _dismissButton.frame = frame; + } + + CGRect contentRect = PFRectMakeWithSizeCenteredInRect(PFSizeMin(bounds.size, [self _maxContentSize]), + bounds); + const CGSize contentSizeScale = [self _contentSizeScaleForContentSize:contentRect.size]; + + CGFloat socialButtonsDefaultInset = 16.0f; + UIEdgeInsets socialButtonsRectInsets = UIEdgeInsetsZero; + if (CGRectGetMinX(contentRect) <= CGRectGetMinX(bounds)) { + socialButtonsRectInsets = UIEdgeInsetsMake(0.0f, + socialButtonsDefaultInset, + 0.0f, + socialButtonsDefaultInset); + } + CGRect socialButtonsRect = UIEdgeInsetsInsetRect(contentRect, socialButtonsRectInsets); + + if (_signUpButton) { + CGSize buttonSize = [_signUpButton sizeThatFits:socialButtonsRect.size]; + [(PFActionButton *)_signUpButton setButtonStyle:PFActionButtonStyleWide]; + + CGRect frame = PFRectMakeWithSizeCenteredInRect(buttonSize, socialButtonsRect); + frame.origin.y = CGRectGetMaxY(socialButtonsRect) - CGRectGetHeight(frame) - socialButtonsRectInsets.left; + _signUpButton.frame = frame; + + contentRect.size.height = CGRectGetMinY(frame) - CGRectGetMinY(contentRect); + socialButtonsRect = UIEdgeInsetsInsetRect(contentRect, socialButtonsRectInsets); + } + + if (_facebookButton && _twitterButton) { + CGSize buttonSize = [_facebookButton sizeThatFits:socialButtonsRect.size]; + buttonSize.width = (socialButtonsRect.size.width - socialButtonsDefaultInset) / 2.0f; + + CGRect frame = PFRectMakeWithOriginSize(socialButtonsRect.origin, buttonSize); + frame.origin.y = CGRectGetMaxY(socialButtonsRect) - buttonSize.height - socialButtonsDefaultInset; + [(PFActionButton *)_facebookButton setButtonStyle:PFActionButtonStyleNormal]; + _facebookButton.frame = frame; + + frame.origin.x = CGRectGetMaxX(frame) + socialButtonsDefaultInset; + [(PFActionButton *)_twitterButton setButtonStyle:PFActionButtonStyleNormal]; + _twitterButton.frame = frame; + + contentRect.size.height = CGRectGetMinY(frame) - CGRectGetMinY(contentRect); + socialButtonsRect = UIEdgeInsetsInsetRect(contentRect, socialButtonsRectInsets); + } else if (_facebookButton) { + CGSize buttonSize = [_facebookButton sizeThatFits:socialButtonsRect.size]; + CGRect frame = PFRectMakeWithOriginSize(socialButtonsRect.origin, buttonSize); + frame.origin.y = CGRectGetMaxY(socialButtonsRect) - buttonSize.height - socialButtonsDefaultInset; + _facebookButton.frame = frame; + + [(PFActionButton *)_facebookButton setButtonStyle:PFActionButtonStyleWide]; + + contentRect.size.height = CGRectGetMinY(frame) - CGRectGetMinY(contentRect); + socialButtonsRect = UIEdgeInsetsInsetRect(contentRect, socialButtonsRectInsets); + } else if (_twitterButton) { + CGSize buttonSize = [_twitterButton sizeThatFits:socialButtonsRect.size]; + CGRect frame = PFRectMakeWithOriginSize(socialButtonsRect.origin, buttonSize); + frame.origin.y = CGRectGetMaxY(socialButtonsRect) - buttonSize.height - socialButtonsDefaultInset; + _twitterButton.frame = frame; + + [(PFActionButton *)_twitterButton setButtonStyle:PFActionButtonStyleWide]; + + contentRect.size.height = CGRectGetMinY(frame) - CGRectGetMinY(contentRect); + socialButtonsRect = UIEdgeInsetsInsetRect(contentRect, socialButtonsRectInsets); + } + + if (_signUpButton || _facebookButton || _twitterButton) { + contentRect.size.height -= socialButtonsDefaultInset; + } + + const CGRect loginContentRect = PFRectMakeWithSizeCenteredInRect([self _loginContentSizeThatFits:contentRect.size + withContentSizeScale:contentSizeScale], + contentRect); + const CGSize loginContentSize = loginContentRect.size; + CGFloat currentY = CGRectGetMinY(loginContentRect); + + if (_logo) { + CGFloat logoTopInset = (CGRectGetMinX(contentRect) > 0.0f ? 36.0f : 88.0f) * contentSizeScale.height; + CGFloat logoBottomInset = floorf(36.0f * contentSizeScale.height); + + CGFloat logoAvailableHeight = floorf(68.0f * contentSizeScale.height); + + CGSize logoSize = [_logo sizeThatFits:CGSizeMake(loginContentSize.width, logoAvailableHeight)]; + logoSize.width = MIN(loginContentSize.width, logoSize.width); + logoSize.height = MIN(logoAvailableHeight, logoSize.height); + + CGRect frame = PFRectMakeWithSizeCenteredInRect(logoSize, loginContentRect); + frame.origin.y = CGRectGetMinY(loginContentRect) + logoTopInset; + _logo.frame = CGRectIntegral(frame); + + currentY = floorf(CGRectGetMaxY(frame) + logoBottomInset); + } + + if (_usernameField) { + CGRect frame = PFRectMakeWithSizeCenteredInRect([_usernameField sizeThatFits:loginContentSize], + loginContentRect); + frame.origin.y = currentY; + _usernameField.frame = frame; + + currentY = CGRectGetMaxY(frame); + } + + if (_passwordField) { + CGRect frame = PFRectMakeWithSizeCenteredInRect([_passwordField sizeThatFits:loginContentSize], + loginContentRect); + frame.origin.y = currentY; + _passwordField.frame = frame; + + currentY = CGRectGetMaxY(frame); + } + + if (_logInButton) { + CGFloat loginButtonTopInset = floorf(24.0f * contentSizeScale.height); + + CGRect frame = PFRectMakeWithSizeCenteredInRect([_logInButton sizeThatFits:loginContentSize], loginContentRect); + frame.origin.y = currentY + loginButtonTopInset; + _logInButton.frame = frame; + + currentY = CGRectGetMaxY(frame); + } + + if (_passwordForgottenButton) { + CGFloat forgotPasswordInset = floorf(12.0f * contentSizeScale.height); + + CGSize buttonSize = [_passwordForgottenButton sizeThatFits:loginContentSize]; + CGRect frame = PFRectMakeWithSizeCenteredInRect(buttonSize, loginContentRect); + frame.origin.y = currentY + forgotPasswordInset; + _passwordForgottenButton.frame = frame; + } +} + +- (CGSize)_loginContentSizeThatFits:(CGSize)boundingSize withContentSizeScale:(CGSize)contentSizeScale { + CGSize size = boundingSize; + size.height = 0.0f; + if (_logo) { + CGFloat logoTopInset = floorf(36.0f * contentSizeScale.height); + CGFloat logoBottomInset = floorf(36.0f * contentSizeScale.height); + + CGFloat logoAvailableHeight = floorf(68.0f * contentSizeScale.height); + + CGFloat scale = MAX(contentSizeScale.width, contentSizeScale.height); + + CGSize logoSize = [_logo sizeThatFits:CGSizeMake(boundingSize.width, logoAvailableHeight)]; + logoSize.height *= scale; + logoSize.width *= scale; + + size.height += logoSize.height + logoTopInset + logoBottomInset; + } + if (_usernameField) { + CGSize fieldSize = [_usernameField sizeThatFits:boundingSize]; + size.height += fieldSize.height; + } + if (_passwordField) { + CGSize fieldSize = [_passwordField sizeThatFits:boundingSize]; + size.height += fieldSize.height; + } + if (_logInButton) { + CGFloat loginButtonTopInset = 24.0f * contentSizeScale.height; + + CGSize buttonSize = [_logInButton sizeThatFits:boundingSize]; + + size.height += buttonSize.height + loginButtonTopInset; + } + if (_passwordForgottenButton) { + CGFloat forgotPasswordInset = 12.0f * contentSizeScale.height; + + UIView *button = _signUpButton ?: _passwordForgottenButton; + CGSize buttonSize = [button sizeThatFits:boundingSize]; + + size.height += buttonSize.height + forgotPasswordInset * 2.0f; + } + size.width = floorf(size.width); + size.height = floorf(size.height); + + return size; +} + +- (CGSize)_maxContentSize { + return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? CGSizeMake(420.0f, 550.0f) : CGSizeMake(500.0f, 800.0f)); +} + +- (CGSize)_contentSizeScaleForContentSize:(CGSize)contentSize { + CGSize maxContentSize = [self _maxContentSize]; + if (maxContentSize.width < contentSize.width && + maxContentSize.height < contentSize.height) { + return CGSizeMake(1.0f, 1.0f); + } + + CGSize contentSizeScale = CGSizeMake(contentSize.width / maxContentSize.width, + contentSize.height / maxContentSize.height); + return contentSizeScale; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (void)setFields:(PFLogInFields)fields { + if (_fields != fields) { + _fields = fields; + [self _updateAllFields]; + [self setNeedsLayout]; + } +} + +- (void)setLogo:(UIView *)logo { + if (self.logo != logo) { + [_logo removeFromSuperview]; + _logo = logo; + [self addSubview:_logo]; + + [self setNeedsLayout]; + } +} + +- (void)setEmailAsUsername:(BOOL)otherEmailAsUsername { + if (_emailAsUsername != otherEmailAsUsername) { + _emailAsUsername = otherEmailAsUsername; + + [self _updateUsernameFieldStyle]; + } +} + +///-------------------------------------- +#pragma mark - Private +///-------------------------------------- + ++ (void)_validateFields:(PFLogInFields)fields { + if (fields == PFLogInFieldsNone) { + [NSException raise:NSInvalidArgumentException + format:@"Fields must be set before initializing PFLogInView."]; + } + + if (fields & PFLogInFieldsLogInButton) { + if (!(fields & PFLogInFieldsUsernameAndPassword)) { + [NSException raise:NSInvalidArgumentException + format:@"Username and password must be enabled if done button is enabled."]; + } + } + + if (fields & PFLogInFieldsPasswordForgotten) { + if (!(fields & PFLogInFieldsUsernameAndPassword)) { + [NSException raise:NSInvalidArgumentException + format:@"Username and password must be enabled if password forgotten button is enabled."]; + } + } +} + +- (void)_updateUsernameFieldStyle { + UIKeyboardType keyboardType = UIKeyboardTypeDefault; + NSString *usernamePlaceholder = nil; + if (!_emailAsUsername) { + keyboardType = UIKeyboardTypeDefault; + usernamePlaceholder = NSLocalizedString(@"Username", @"Username"); + } else { + keyboardType = UIKeyboardTypeEmailAddress; + usernamePlaceholder = NSLocalizedString(@"Email", @"Email"); + } + + _usernameField.placeholder = usernamePlaceholder; + _usernameField.keyboardType = keyboardType; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.h new file mode 100644 index 0000000..9df9112 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.h @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import +#import + +PFUI_ASSUME_NONNULL_BEGIN + +@class PFSignUpViewController; +@class PFUser; +@protocol PFLogInViewControllerDelegate; + +/*! + The `PFLogInViewController` class presents and manages a standard authentication interface for logging in a . + */ +@interface PFLogInViewController : UIViewController + +///-------------------------------------- +/// @name Configuring Log In Elements +///-------------------------------------- + +/*! + @abstract A bitmask specifying the log in elements which are enabled in the view. + + @see PFLogInFields + */ +@property (nonatomic, assign) PFLogInFields fields; + + +/*! + @abstract The log in view. It contains all the enabled log in elements. + + @see PFLogInView + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFLogInView *logInView; + +///-------------------------------------- +/// @name Configuring Log In Behaviors +///-------------------------------------- + +/*! + @abstract The delegate that responds to the control events of `PFLogInViewController`. + + @see PFLogInViewControllerDelegate + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, weak) id delegate; + +/*! + @abstract The facebook permissions that Facebook log in requests for. + + @discussion If unspecified, the default is basic facebook permissions. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, copy) NSArray *facebookPermissions; + +/*! + @abstract The sign up controller if sign up is enabled. + + @discussion Use this to configure the sign up view, and the transition animation to the sign up view. + The default is a sign up view with a username, a password, a dismiss button and a sign up button. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong) PFSignUpViewController *signUpController; + +/*! + @abstract Whether to prompt for the email as username on the login view. + + @discussion If set to `YES`, we'll prompt for the email in the username field. + This property value propagates to the attached . + By default, this is set to `NO`. + */ +@property (nonatomic, assign) BOOL emailAsUsername; + +@end + +///-------------------------------------- +/// @name Notifications +///-------------------------------------- + +/*! + @abstract The notification is posted immediately after the log in succeeds. + */ +extern NSString *const PFLogInSuccessNotification; + +/*! + @abstract The notification is posted immediately after the log in fails. + @discussion If the delegate prevents the log in from starting, the notification is not sent. + */ +extern NSString *const PFLogInFailureNotification; + +/*! + @abstract The notification is posted immediately after the log in is cancelled. + */ +extern NSString *const PFLogInCancelNotification; + +///-------------------------------------- +/// @name PFLogInViewControllerDelegate +///-------------------------------------- + +/*! + The `PFLogInViewControllerDelegate` protocol defines methods a delegate of a should implement. + All methods of this protocol are optional. + */ +@protocol PFLogInViewControllerDelegate + +@optional + +///-------------------------------------- +/// @name Customizing Behavior +///-------------------------------------- + +/*! + @abstract Sent to the delegate to determine whether the log in request should be submitted to the server. + + @param logInController The login view controller that is requesting the data. + @param username the username the user tries to log in with. + @param password the password the user tries to log in with. + + @returns A `BOOL` indicating whether the log in should proceed. + */ +- (BOOL)logInViewController:(PFLogInViewController *)logInController +shouldBeginLogInWithUsername:(NSString *)username + password:(NSString *)password; + +///-------------------------------------- +/// @name Responding to Actions +///-------------------------------------- + +/*! + @abstract Sent to the delegate when a is logged in. + + @param logInController The login view controller where login finished. + @param user object that is a result of the login. + */ +- (void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user; + +/*! + @abstract Sent to the delegate when the log in attempt fails. + + @discussion If you implement this method, PFLoginViewController will not automatically show its default + login failure alert view. Instead, you should show your custom alert view in your implementation. + + @param logInController The login view controller where login failed. + @param error `NSError` object representing the error that occured. + */ +- (void)logInViewController:(PFLogInViewController *)logInController + didFailToLogInWithError:(PFUI_NULLABLE NSError *)error; + +/*! + @abstract Sent to the delegate when the log in screen is cancelled. + + @param logInController The login view controller where login was cancelled. + */ +- (void)logInViewControllerDidCancelLogIn:(PFLogInViewController *)logInController; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.m new file mode 100644 index 0000000..a6dceae --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.m @@ -0,0 +1,601 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFLogInViewController.h" + +#import + +#import "PFActionButton.h" +#import "PFUIAlertView.h" +#import "PFLocalization.h" +#import "PFPrimaryButton.h" +#import "PFSignUpViewController.h" +#import "PFTextField.h" +#import "PFLogInView_Private.h" + +NSString *const PFLogInSuccessNotification = @"com.parse.ui.login.success"; +NSString *const PFLogInFailureNotification = @"com.parse.ui.login.failure"; +NSString *const PFLogInCancelNotification = @"com.parse.ui.login.cancel"; + +/*! + This protocol exists so that we can weakly refer to messages to pass to PFFacebookUtils without + actually taking a dependency on the symbols. + */ +@protocol WeaklyReferencedFBUtils + +// FBSDKv3 ++ (void)logInWithPermissions:(NSArray *)permissions block:(PFUserResultBlock)block; +// FBSDKv4 ++ (void)logInInBackgroundWithReadPermissions:(NSArray *)permissions block:(PFUserResultBlock)block; ++ (void)logInInBackgroundWithPublishPermissions:(NSArray *)permissions block:(PFUserResultBlock)block; + +@end + +@protocol WeaklyReferenceTwitterUtils + ++ (void)logInWithBlock:(PFUserResultBlock)block; + +@end + +@interface PFLogInViewController () { + struct { + BOOL shouldBeginLogIn : YES; + BOOL didLogInUser : YES; + BOOL didFailToLogIn : YES; + BOOL didCancelLogIn : YES; + } _delegateExistingMethods; +} + +@property (nonatomic, strong, readwrite) PFLogInView *logInView; +@property (nonatomic, assign) BOOL loading; + +@property (nonatomic, assign) CGFloat visibleKeyboardHeight; + +@end + +@implementation PFLogInViewController + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + if (self = [super init]) { + [self _commonInit]; + } + return self; +} + +- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { + [self _commonInit]; + } + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder { + if (self = [super initWithCoder:decoder]) { + [self _commonInit]; + } + return self; +} + +- (void)_commonInit { + self.modalTransitionStyle = UIModalTransitionStyleCoverVertical; + self.modalPresentationStyle = UIModalPresentationFormSheet; + _fields = PFLogInFieldsDefault; + + if ([self respondsToSelector:@selector(automaticallyAdjustsScrollViewInsets)]) { + self.automaticallyAdjustsScrollViewInsets = NO; + } +} + +///-------------------------------------- +#pragma mark - Dealloc +///-------------------------------------- + +- (void)dealloc { + // Unregister from all notifications + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +///-------------------------------------- +#pragma mark - UIViewController +///-------------------------------------- + +- (void)loadView { + _logInView = [[PFLogInView alloc] initWithFields:_fields]; + [_logInView setPresentingViewController:self]; + self.view = _logInView; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self setupHandlers]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + [self _registerForKeyboardNotifications]; + + if (self.navigationController && + self.fields & PFLogInFieldsDismissButton) { + self.fields = self.fields & ~PFLogInFieldsDismissButton; + + [_logInView.dismissButton removeFromSuperview]; + } +} + +- (UIInterfaceOrientationMask)supportedInterfaceOrientations { + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + return UIInterfaceOrientationMaskAll; + } + + return UIInterfaceOrientationMaskPortrait; +} + +///-------------------------------------- +#pragma mark - PFLogInViewController +///-------------------------------------- + +- (PFLogInView *)logInView { + return (PFLogInView *)self.view; // self.view will call loadView if the view is nil +} + +- (void)setEmailAsUsername:(BOOL)otherEmailAsUsername { + self.logInView.emailAsUsername = otherEmailAsUsername; +} + +- (BOOL)emailAsUsername { + return self.logInView.emailAsUsername; +} + +- (void)setFields:(PFLogInFields)fields { + if (_fields != fields) { + _fields = fields; + + // Avoid force loading logInView + if (_logInView) { + _logInView.fields = fields; + } + } +} + +- (void)setDelegate:(id)delegate { + if (self.delegate != delegate) { + _delegate = delegate; + + _delegateExistingMethods.shouldBeginLogIn = [delegate respondsToSelector:@selector(logInViewController: + shouldBeginLogInWithUsername: + password:)]; + _delegateExistingMethods.didLogInUser = [delegate respondsToSelector:@selector(logInViewController: + didLogInUser:)]; + _delegateExistingMethods.didFailToLogIn = [delegate respondsToSelector:@selector(logInViewController: + didFailToLogInWithError:)]; + _delegateExistingMethods.didCancelLogIn = [delegate + respondsToSelector:@selector(logInViewControllerDidCancelLogIn:)]; + } +} + +- (PFSignUpViewController *)signUpController { + if (!_signUpController) { + _signUpController = [[PFSignUpViewController alloc] init]; + _signUpController.modalTransitionStyle = UIModalTransitionStyleCoverVertical; + _signUpController.emailAsUsername = self.emailAsUsername; + } + return _signUpController; +} + +- (void)setLoading:(BOOL)loading { + if (self.loading != loading) { + _loading = loading; + + _logInView.usernameField.enabled = !self.loading; + _logInView.passwordField.enabled = !self.loading; + _logInView.passwordForgottenButton.enabled = !self.loading; + _logInView.dismissButton.enabled = !self.loading; + } +} + +///-------------------------------------- +#pragma mark - UITextFieldDelegate +///-------------------------------------- + +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + if (textField == _logInView.usernameField) { + [_logInView.passwordField becomeFirstResponder]; + } + if (textField == _logInView.passwordField) { + [self _dismissKeyboard]; + [self _loginAction]; + } + + return YES; +} + +///-------------------------------------- +#pragma mark - UIAlertViewDelegate +///-------------------------------------- + +- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex { + if (buttonIndex != [alertView cancelButtonIndex]) { + NSString *email = [alertView textFieldAtIndex:0].text; + [self _requestPasswordResetWithEmail:email]; + } +} + +///-------------------------------------- +#pragma mark - Private +///-------------------------------------- + +- (void)setupHandlers { + [_logInView.dismissButton addTarget:self + action:@selector(_dismissAction) + forControlEvents:UIControlEventTouchUpInside]; + + _logInView.usernameField.delegate = self; + _logInView.passwordField.delegate = self; + [_logInView.logInButton addTarget:self action:@selector(_loginAction) forControlEvents:UIControlEventTouchUpInside]; + [_logInView.passwordForgottenButton addTarget:self + action:@selector(_forgotPasswordAction) + forControlEvents:UIControlEventTouchUpInside]; + + [_logInView.facebookButton addTarget:self + action:@selector(_loginWithFacebook) + forControlEvents:UIControlEventTouchUpInside]; + [_logInView.twitterButton addTarget:self + action:@selector(_loginWithTwitter) + forControlEvents:UIControlEventTouchUpInside]; + + [_logInView.signUpButton addTarget:self + action:@selector(_signupAction) + forControlEvents:UIControlEventTouchUpInside]; + + UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self + action:@selector(_dismissKeyboard)]; + [_logInView addGestureRecognizer:gestureRecognizer]; + gestureRecognizer.cancelsTouchesInView = NO; +} + +- (void)_dismissAction { + [self cancelLogIn]; + + // Normally the role of dismissing a modal controller lies on the presenting controller. + // Here we violate the principle so that the presenting modal log in controller is especially easy. + // Cons of this design is that it makes working with non-modally presented log in controller hard; + // but this concern is mitigated by the fact that navigationally presented controller should not have + // dismiss button. + [self dismissViewControllerAnimated:YES completion:nil]; +} + +- (void)_forgotPasswordAction PF_EXTENSION_UNAVAILABLE("") { + NSString *title = NSLocalizedString(@"Reset Password", @"Forgot password request title in PFLogInViewController"); + NSString *message = NSLocalizedString(@"Please enter the email address for your account.", + @"Email request message in PFLogInViewController"); + UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title + message:message + delegate:self + cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel") + otherButtonTitles:NSLocalizedString(@"OK", @"OK"), nil]; + alertView.alertViewStyle = UIAlertViewStylePlainTextInput; + + UITextField *textField = [alertView textFieldAtIndex:0]; + textField.placeholder = NSLocalizedString(@"Email", @"Email"); + textField.keyboardType = UIKeyboardTypeEmailAddress; + textField.returnKeyType = UIReturnKeyDone; + + [alertView show]; +} + +- (void)_requestPasswordResetWithEmail:(NSString *)email { + [PFUser requestPasswordResetForEmailInBackground:email block:^(BOOL success, NSError *error) { + if (success) { + NSString *title = NSLocalizedString(@"Password Reset", + @"Password reset success alert title in PFLogInViewController."); + NSString *message = [NSString stringWithFormat:NSLocalizedString(@"An email with reset instructions has been sent to '%@'.", + @"Password reset message in PFLogInViewController"), email]; + [PFUIAlertView showAlertViewWithTitle:title + message:message + cancelButtonTitle:NSLocalizedString(@"OK", @"OK")]; + } else { + NSString *title = NSLocalizedString(@"Password Reset Failed", + @"Password reset error alert title in PFLogInViewController."); + [PFUIAlertView showAlertViewWithTitle:title error:error]; + } + }]; +} + +#pragma mark Log In With Facebook + +- (void)_loginWithFacebook { + if (self.loading) { + return; + } + + self.loading = YES; + if ([_logInView.facebookButton isKindOfClass:[PFActionButton class]]) { + [(PFActionButton *)_logInView.facebookButton setLoading:YES]; + } + + __weak typeof(self) wself = self; + PFUserResultBlock resultBlock = ^(PFUser *user, NSError *error) { + __strong typeof(wself) sself = wself; + sself.loading = NO; + if ([_logInView.facebookButton isKindOfClass:[PFActionButton class]]) { + [(PFActionButton *)_logInView.facebookButton setLoading:NO]; + } + + if (user) { + [sself _loginDidSucceedWithUser:user]; + } else if (error) { + [sself _loginDidFailWithError:error]; + } else { + // User cancelled login. + } + }; + + Class fbUtils = NSClassFromString(@"PFFacebookUtils"); + if ([fbUtils respondsToSelector:@selector(logInWithPermissions:block:)]) { + // Facebook SDK v3 Login + [fbUtils logInWithPermissions:_facebookPermissions block:resultBlock]; + } else if ([fbUtils respondsToSelector:@selector(logInInBackgroundWithReadPermissions:block:)]) { + // Facebook SDK v4 Login + if ([self _permissionsContainsFacebookPublishPermission:_facebookPermissions]) { + [fbUtils logInInBackgroundWithPublishPermissions:_facebookPermissions block:resultBlock]; + } else { + [fbUtils logInInBackgroundWithReadPermissions:_facebookPermissions block:resultBlock]; + } + } else { + [NSException raise:NSInternalInconsistencyException + format:@"Can't find PFFacebookUtils. Please link with ParseFacebookUtils or ParseFacebookUtilsV4 to enable login with Facebook."]; + } +} + +- (BOOL)_permissionsContainsFacebookPublishPermission:(NSArray *)permissions { + for (NSString *permission in permissions) { + if ([permission hasPrefix:@"publish"] || + [permission hasPrefix:@"manage"] || + [permission isEqualToString:@"ads_management"] || + [permission isEqualToString:@"create_event"] || + [permission isEqualToString:@"rsvp_event"]) { + return YES; + } + } + return NO; +} + +#pragma mark Log In With Twitter + +- (void)_loginWithTwitter { + if (self.loading) { + return; + } + + if ([_logInView.facebookButton isKindOfClass:[PFActionButton class]]) { + [(PFActionButton *)_logInView.twitterButton setLoading:YES]; + } + self.loading = YES; + + Class twitterUtils = NSClassFromString(@"PFTwitterUtils"); + if (twitterUtils && [twitterUtils respondsToSelector:@selector(logInWithBlock:)]) { + [twitterUtils logInWithBlock:^(PFUser *user, NSError *error) { + self.loading = NO; + if ([_logInView.facebookButton isKindOfClass:[PFActionButton class]]) { + [(PFActionButton *)_logInView.twitterButton setLoading:NO]; + } + + if (user) { + [self _loginDidSucceedWithUser:user]; + } else if (error) { + [self _loginDidFailWithError:error]; + } else { + // User cancelled login. + } + }]; + } else { + [NSException raise:NSInternalInconsistencyException + format:@"Can't find PFTwitterUtils. Please link with ParseTwitterUtils to enable login with Twitter."]; + } +} + +#pragma mark Log In + +- (void)_loginAction { + if (self.loading) { + return; + } + + NSString *username = _logInView.usernameField.text ?: @""; + NSString *password = _logInView.passwordField.text ?: @""; + + if (_delegateExistingMethods.shouldBeginLogIn) { + if (![_delegate logInViewController:self shouldBeginLogInWithUsername:username password:password]) { + return; + } + } + + self.loading = YES; + if ([_logInView.logInButton isKindOfClass:[PFPrimaryButton class]]) { + [(PFActionButton *)_logInView.logInButton setLoading:YES]; + } + + [PFUser logInWithUsernameInBackground:username password:password block:^(PFUser *user, NSError *error) { + self.loading = NO; + if ([_logInView.logInButton isKindOfClass:[PFPrimaryButton class]]) { + [(PFPrimaryButton *)_logInView.logInButton setLoading:NO]; + } + + if (user) { + [self _loginDidSucceedWithUser:user]; + } else { + [self _loginDidFailWithError:error]; + } + }]; +} + +- (void)_signupAction { + if (self.loading) { + return; + } + [self presentViewController:self.signUpController animated:YES completion:nil]; +} + +- (void)_loginDidSucceedWithUser:(PFUser *)user { + if (_delegateExistingMethods.didLogInUser) { + [_delegate logInViewController:self didLogInUser:user]; + } + [[NSNotificationCenter defaultCenter] postNotificationName:PFLogInSuccessNotification object:self]; +} + +- (void)_loginDidFailWithError:(NSError *)error { + if (_delegateExistingMethods.didFailToLogIn) { + [_delegate logInViewController:self didFailToLogInWithError:error]; + } else { + NSString *title = NSLocalizedString(@"Login Failed", @"Login failed alert title in PFLogInViewController"); + NSString *message = nil; + if (error.code == kPFErrorObjectNotFound) { + message = NSLocalizedString(@"The username and password you entered don't match", @"Invalid login credentials alert message in PFLogInViewController"); + } else { + message = NSLocalizedString(@"Please try again", @"Generic login failed alert message in PFLogInViewController"); + } + [PFUIAlertView showAlertViewWithTitle:title message:message]; + } + [[NSNotificationCenter defaultCenter] postNotificationName:PFLogInFailureNotification object:self]; +} + +- (void)cancelLogIn { + if (_delegateExistingMethods.didCancelLogIn) { + [_delegate logInViewControllerDidCancelLogIn:self]; + } + [[NSNotificationCenter defaultCenter] postNotificationName:PFLogInCancelNotification object:self]; +} + +///-------------------------------------- +#pragma mark - Keyboard +///-------------------------------------- + +- (UIView *)currentFirstResponder { + if ([_logInView.usernameField isFirstResponder]) { + return _logInView.usernameField; + } + if ([_logInView.passwordField isFirstResponder]) { + return _logInView.passwordField; + } + return nil; +} + +- (void)_dismissKeyboard { + [self.view endEditing:YES]; +} + +- (void)_registerForKeyboardNotifications { + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(_keyboardWillShow:) + name:UIKeyboardWillShowNotification + object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(_keyboardWillHide:) + name:UIKeyboardWillHideNotification + object:nil]; +} + +- (void)_keyboardWillShow:(NSNotification *)notification { + NSDictionary *userInfo = [notification userInfo]; + CGRect endFrame = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; + CGFloat duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]; + UIViewAnimationCurve curve = [userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]; + + CGRect keyboardFrame = [self.view convertRect:endFrame fromView:self.view.window]; + CGFloat visibleKeyboardHeight = CGRectGetMaxY(self.view.bounds) - CGRectGetMinY(keyboardFrame); + + [self setVisibleKeyboardHeight:visibleKeyboardHeight + animationDuration:duration + animationOptions:curve << 16]; +} + +- (void)_keyboardWillHide:(NSNotification *)notification { + NSDictionary *userInfo = [notification userInfo]; + CGFloat duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]; + UIViewAnimationCurve curve = [userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]; + [self setVisibleKeyboardHeight:0.0 + animationDuration:duration + animationOptions:curve << 16]; +} + +- (void)setVisibleKeyboardHeight:(CGFloat)visibleKeyboardHeight + animationDuration:(NSTimeInterval)animationDuration + animationOptions:(UIViewAnimationOptions)animationOptions { + + dispatch_block_t animationsBlock = ^{ + self.visibleKeyboardHeight = visibleKeyboardHeight; + }; + + if (animationDuration == 0.0) { + animationsBlock(); + } else { + [UIView animateWithDuration:animationDuration + delay:0.0 + options:animationOptions | UIViewAnimationOptionBeginFromCurrentState + animations:animationsBlock + completion:nil]; + } +} + +- (void)setVisibleKeyboardHeight:(CGFloat)visibleKeyboardHeight { + if (self.visibleKeyboardHeight != visibleKeyboardHeight) { + _visibleKeyboardHeight = visibleKeyboardHeight; + [self _updateViewContentOffsetAnimated:NO]; + } +} + +- (void)_updateViewContentOffsetAnimated:(BOOL)animated { + CGPoint contentOffset = CGPointZero; + if (self.visibleKeyboardHeight > 0.0f) { + // Scroll the view to keep fields visible + CGFloat offsetForScrollingTextFieldToTop = CGRectGetMinY([self currentFirstResponder].frame); + + UIView *lowestView; + if (_logInView.passwordForgottenButton) { + lowestView = _logInView.passwordForgottenButton; + } else if (_logInView.logInButton) { + lowestView = _logInView.logInButton; + } else { + lowestView = _logInView.passwordField; + } + + CGFloat offsetForScrollingLowestViewToBottom = 0.0f; + offsetForScrollingLowestViewToBottom += self.visibleKeyboardHeight; + offsetForScrollingLowestViewToBottom += CGRectGetMaxY(lowestView.frame); + offsetForScrollingLowestViewToBottom -= CGRectGetHeight(_logInView.bounds); + + if (offsetForScrollingLowestViewToBottom < 0) { + return; // No scrolling required + } + + contentOffset = CGPointMake(0.0f, MIN(offsetForScrollingTextFieldToTop, offsetForScrollingLowestViewToBottom)); + } + + [_logInView setContentOffset:contentOffset animated:animated]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView_Private.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView_Private.h new file mode 100644 index 0000000..7069832 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView_Private.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +@interface PFLogInView (Private) + +@property (nonatomic, assign, readwrite) PFLogInFields fields; + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h new file mode 100644 index 0000000..fa5ce55 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import +#import + +PFUI_ASSUME_NONNULL_BEGIN + +/*! + `PFProductTableViewController` displays in-app purchase products stored on Parse. + In addition to setting up in-app purchases in iTunes Connect, the app developer needs + to register product information on Parse, in the Product class. + */ +@interface PFProductTableViewController : PFQueryTableViewController + +/*! + @abstract Initializes a product table view controller. + + @param style The UITableViewStyle for the table + + @returns An initialized `PFProductTableViewController` object or `nil` if the object couldn't be created. + */ +- (instancetype)initWithStyle:(UITableViewStyle)style NS_DESIGNATED_INITIALIZER; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m new file mode 100644 index 0000000..34da3ca --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m @@ -0,0 +1,249 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFProductTableViewController.h" + +#import +#import +#import + +#import "PFUIAlertView.h" +#import "PFLocalization.h" +#import "PFPurchaseTableViewCell.h" + +static NSString *const PFProductMetadataPriceKey = @"price"; +static NSString *const PFProductMetadataPriceLocaleKey = @"priceLocale"; + +@interface PFProductTableViewController () { + NSMutableDictionary *_productMetadataDictionary; + NSMutableDictionary *_productProgressDictionary; + + SKProductsRequest *_storeProductsRequest; +} + +@end + +@implementation PFProductTableViewController + +#pragma mark - +#pragma mark NSObject + +- (instancetype)initWithStyle:(UITableViewStyle)style { + if (self = [super initWithStyle:UITableViewStylePlain className:[PFProduct parseClassName]]) { + self.pullToRefreshEnabled = NO; + self.paginationEnabled = NO; + + _productMetadataDictionary = [NSMutableDictionary dictionary]; + _productProgressDictionary = [NSMutableDictionary dictionary]; + } + return self; +} + +- (instancetype)initWithStyle:(UITableViewStyle)style className:(NSString *)className { + return [self initWithStyle:style]; +} + +#pragma mark - +#pragma mark UIViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.tableView.rowHeight = 84.0f; +} + +- (void)objectsDidLoad:(NSError *)error { + [super objectsDidLoad:error]; + if (error) { + return; + } + + [self.objects enumerateObjectsUsingBlock:^(PFProduct *product, NSUInteger idx, BOOL *stop) { + // No download for this product - just continue + if (!product.downloadName) { + return; + } + + [PFPurchase addObserverForProduct:product.productIdentifier block:^(SKPaymentTransaction *transaction) { + NSIndexPath *indexPath = [NSIndexPath indexPathForRow:idx inSection:0]; + PFPurchaseTableViewCell *cell = (PFPurchaseTableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath]; + + cell.state = PFPurchaseTableViewCellStateDownloading; + [PFPurchase downloadAssetForTransaction:transaction + completion:^(NSString *filePath, NSError *downloadError) { + if (!downloadError) { + cell.state = PFPurchaseTableViewCellStateDownloaded; + } else { + cell.state = PFPurchaseTableViewCellStateNormal; + + NSString *title = NSLocalizedString(@"Download Error", + @"Download Error"); + [PFUIAlertView showAlertViewWithTitle:title error:downloadError]; + } + } + progress:^(int percentDone) { + _productProgressDictionary[product.productIdentifier] = @(percentDone); + [cell.progressView setProgress:percentDone/100.0f animated:YES]; + }]; + }]; + }]; +} + +#pragma mark - +#pragma mark UITableViewDataSource + +- (UITableViewCell *)tableView:(UITableView *)tableView + cellForRowAtIndexPath:(NSIndexPath *)indexPath + object:(PFProduct *)product { + static NSString *cellIdentifier = @"PFPurchaseTableViewCell"; + + PFPurchaseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; + if (!cell) { + cell = [[PFPurchaseTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle + reuseIdentifier:cellIdentifier]; + } + + if (indexPath.row % 2 == 0) { + cell.backgroundView.backgroundColor = [UIColor colorWithWhite:242.0f/255.0f alpha:1.0f]; + cell.textLabel.shadowOffset = CGSizeZero; + cell.textLabel.shadowColor = [UIColor whiteColor]; + cell.priceLabel.shadowOffset = CGSizeZero; + cell.priceLabel.shadowColor = [UIColor whiteColor]; + + } else { + cell.backgroundView.backgroundColor = [UIColor colorWithWhite:232.0f/255.0f alpha:1.0f]; + cell.textLabel.shadowOffset = CGSizeMake(0.0f, 1.0f); + cell.textLabel.shadowColor = [UIColor whiteColor]; + cell.priceLabel.shadowOffset = CGSizeMake(0.0f, 1.0f); + cell.priceLabel.shadowColor = [UIColor whiteColor]; + } + + cell.imageView.file = product.icon; + cell.textLabel.text = product.title; + cell.detailTextLabel.text = product.subtitle; + + NSString *price = [self _priceForProduct:product]; + if (price) { + cell.priceLabel.text = [NSString stringWithFormat:@" $%@ ", price]; + } + + if (product.downloadName) { + NSString *contentPath = [PFPurchase assetContentPathForProduct:product]; + if (contentPath) { + cell.state = PFPurchaseTableViewCellStateDownloaded; + } + } else { + int progress = [self _downloadProgressForProduct:product]; + if (progress == 0) { + cell.state = PFPurchaseTableViewCellStateNormal; + } else if (progress == 100) { + cell.state = PFPurchaseTableViewCellStateDownloaded; + } else { + cell.state = PFPurchaseTableViewCellStateDownloading; + } + } + + return cell; +} + +#pragma mark - +#pragma mark UITableViewDelegate + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + if (indexPath.row < self.objects.count) { + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + + PFProduct *product = self.objects[indexPath.row]; + [PFPurchase buyProduct:product.productIdentifier block:^(NSError *error) { + if (error) { + NSString *title = NSLocalizedString(@"Purchase Error", @"Purchase Error"); + [PFUIAlertView showAlertViewWithTitle:title error:error]; + } + }]; + } +} + +#pragma mark - +#pragma mark Data + +- (NSString *)_priceForProduct:(PFProduct *)product { + return _productMetadataDictionary[product.productIdentifier][PFProductMetadataPriceKey]; +} + +- (int)_downloadProgressForProduct:(PFProduct *)product { + return [_productProgressDictionary[product.productIdentifier] intValue]; +} + +#pragma mark - +#pragma mark PFQueryTableViewController + +- (PFQuery *)queryForTable { + PFQuery *query = [super queryForTable]; + [query orderByAscending:@"order"]; + return query; +} + +#pragma mark - +#pragma mark Querying Store + +- (void)_queryStoreForProductsWithIdentifiers:(NSSet *)identifiers { + _storeProductsRequest.delegate = nil; + _storeProductsRequest = nil; + + _storeProductsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:identifiers]; + _storeProductsRequest.delegate = self; + [_storeProductsRequest start]; +} + +#pragma mark - +#pragma mark SKProductsRequestDelegate + +- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { + if (request != _storeProductsRequest) { + return; + } + + NSArray *validProducts = response.products; + if ([validProducts count] == 0) { + return; + } + + [validProducts enumerateObjectsUsingBlock:^(SKProduct *product, NSUInteger idx, BOOL *stop) { + NSDictionary *metadata = @{ PFProductMetadataPriceKey : product.price, + PFProductMetadataPriceLocaleKey : product.priceLocale }; + _productMetadataDictionary[product.productIdentifier] = metadata; + }]; + [self.tableView reloadData]; + + _storeProductsRequest.delegate = nil; +} + +- (void)requestDidFinish:(SKRequest *)request { + _storeProductsRequest.delegate = nil; + _storeProductsRequest = nil; +} + +- (void)request:(SKRequest *)request didFailWithError:(NSError *)error { + _storeProductsRequest.delegate = nil; + _storeProductsRequest = nil; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h new file mode 100644 index 0000000..e658269 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h @@ -0,0 +1,227 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import + +PFUI_ASSUME_NONNULL_BEGIN + +@class BFTask; +@class PFCollectionViewCell; +@class PFObject; +@class PFQuery; + +/*! + This class allows you to think about a one-to-one mapping between a and a `UICollectionViewCell`, + rather than having to juggle index paths. + + You also get the following features out of the box: + + - Pagination with a cell that can be tapped to load the next page. + - Pull-to-refresh collection view header. + - Automatic downloading and displaying of remote images in cells. + - Loading screen, shown before any data is loaded. + - Automatic loading and management of the objects array. + - Various methods that can be overridden to customize behavior at major events in the data cycle. + + @see PFCollectionViewCell + */ +@interface PFQueryCollectionViewController : UICollectionViewController + +/*! + @abstract The class name of the this collection will use as a datasource. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, copy) IBInspectable NSString *parseClassName; + +/*! + @abstract Whether the collection should use the default loading view. Default - `YES`. + */ +@property (nonatomic, assign) IBInspectable BOOL loadingViewEnabled; + +/*! + @abstract Whether the collection should use the built-in pull-to-refresh feature. Defualt - `YES`. + */ +@property (nonatomic, assign) IBInspectable BOOL pullToRefreshEnabled; + +/*! + @abstract Whether the collection should use the built-in pagination feature. Default - `YES`. + */ +@property (nonatomic, assign) IBInspectable BOOL paginationEnabled; + +/*! + @abstract The number of objects to show per page. Default - `25`. + */ +@property (nonatomic, assign) IBInspectable NSUInteger objectsPerPage; + +/*! + @abstract Whether the collection is actively loading new data from the server. + */ +@property (nonatomic, assign, getter=isLoading) BOOL loading; + +///-------------------------------------- +/// @name Creating a PFQueryCollectionViewController +///-------------------------------------- + +/*! + @abstract Initializes a view controller with a `UICollectionViewFlowLayout` and a class name + of that will be associated with this collection. + + @param className The class name of the instances of that this table will display. + + @returns An initialized `PFQueryCollectionViewController` object or `nil` if the object couldn't be created. + */ +- (instancetype)initWithClassName:(PFUI_NULLABLE NSString *)className; + +/*! + @abstract Initializes a view controller with a class name of that will be associated with this collection. + + @param layout Layout for collection view to use. + @param className The class name of the instances of that this table will display. + + @returns An initialized `PFQueryCollectionViewController` object or `nil` if the object couldn't be created. + */ +- (instancetype)initWithCollectionViewLayout:(UICollectionViewLayout *)layout + className:(PFUI_NULLABLE NSString *)className NS_DESIGNATED_INITIALIZER; + +///-------------------------------------- +/// @name Responding to Events +///-------------------------------------- + +/*! + Called when objects will be loaded from Parse. If you override this method, you must + call [super objectsWillLoad] in your implementation. + */ +- (void)objectsWillLoad NS_REQUIRES_SUPER; + +/*! + Called when objects have loaded from Parse. If you override this method, you must + call [super objectsDidLoad:] in your implementation. + @param error The Parse error from running the PFQuery, if there was any. + */ +- (void)objectsDidLoad:(PFUI_NULLABLE NSError *)error NS_REQUIRES_SUPER; + +///-------------------------------------- +/// @name Accessing Results +///-------------------------------------- + +/*! + @abstract The array of instances of that is used as a data source. + */ +@property (nonatomic, copy, readonly) NSArray *objects; + +/*! + @abstract Returns an object at a particular indexPath. + + @discussion The default impementation returns the object at `indexPath.item`. + If you want to return objects in a different indexPath order, like for sections, override this method. + + @param indexPath An instance of `NSIndexPath`. + + @returns The object at the specified indexPath. + */ +- (PFUI_NULLABLE PFObject *)objectAtIndexPath:(PFUI_NULLABLE NSIndexPath *)indexPath; + +/*! + @abstract Removes an object at the specified index path, animated. + */ +- (void)removeObjectAtIndexPath:(PFUI_NULLABLE NSIndexPath *)indexPath; + +/*! + @abstract Removes all objects at the specified index paths, animated. + */ +- (void)removeObjectsAtIndexPaths:(PFUI_NULLABLE NSArray *)indexes; + +///-------------------------------------- +/// @name Loading Data +///-------------------------------------- + +/*! + @abstract Clears the collection view and loads the first page of objects. + + @returns An awaitable task that completes when the reload succeeds + */ +- (BFTask *)loadObjects; + +/*! + @abstract Loads the objects of the at the specified page and appends it to the + objects already loaded and refreshes the collection. + + @param page The page of objects to load. + @param clear Whether to clear the collection view after receiving the objects. + + @returns An awaitable task that completes when the reload succeeds + */ +- (BFTask *)loadObjects:(NSInteger)page clear:(BOOL)clear; + +/*! + @abstract Loads the next page of objects, appends to table, and refreshes. + */ +- (void)loadNextPage; + +/*! + @abstract Clears the collection view of all objects. + */ +- (void)clear; + +///-------------------------------------- +/// @name Querying +///-------------------------------------- + +/*! + @abstract Override to construct your own custom to get the objects. + + @returns An instance of that method will use to the objects for this collection. + */ +- (PFQuery *)queryForCollection; + +///-------------------------------------- +/// @name Data Source Methods +///-------------------------------------- + +/*! + @abstract Override this method to customize each cell given a that is loaded. + + @warning The cell should inherit from which is a subclass of `UICollectionViewCell`. + + @param collectionView The collection view object associated with this controller. + @param indexPath The indexPath of the cell. + @param object The that is associated with the cell. + + @returns The cell that represents this object. + */ +- (PFUI_NULLABLE PFCollectionViewCell *)collectionView:(UICollectionView *)collectionView + cellForItemAtIndexPath:(NSIndexPath *)indexPath + object:(PFUI_NULLABLE PFObject *)object; + +/*! + @discussion Override this method to customize the view that allows the user to load the + next page when pagination is turned on. + + @param collectionView The collection view object associated with this controller. + + @returns The view that allows the user to paginate. + */ +- (PFUI_NULLABLE UICollectionReusableView *)collectionViewReusableViewForNextPageAction:(UICollectionView *)collectionView; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m new file mode 100644 index 0000000..af1a52a --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m @@ -0,0 +1,452 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFQueryCollectionViewController.h" + +#import +#import + +#import + +#import "PFActivityIndicatorCollectionReusableView.h" +#import "PFCollectionViewCell.h" +#import "PFImageView.h" +#import "PFLoadingView.h" +#import "PFLocalization.h" + +static NSString *const PFQueryCollectionViewCellIdentifier = @"cell"; +static NSString *const PFQueryCollectionViewNextPageReusableViewIdentifier = @"nextPageView"; + +@interface PFQueryCollectionViewController () { + NSMutableArray *_mutableObjects; + + BOOL _firstLoad; // Whether we have loaded the first set of objects + NSInteger _currentPage; // The last page that was loaded + NSInteger _lastLoadCount; // The count of objects from the last load. +} + +@property (nonatomic, strong) UIRefreshControl *refreshControl; + +@property (nonatomic, strong) PFLoadingView *loadingView; + +@property (nonatomic, strong) PFActivityIndicatorCollectionReusableView *currentNextPageView; + +- (instancetype)initWithCoder:(NSCoder *)decoder NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil NS_DESIGNATED_INITIALIZER; + +@end + +@implementation PFQueryCollectionViewController + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithCoder:(NSCoder *)decoder { + // initWithCoder is usually a parallel designated initializer, as is the case here + // It's used by storyboard + self = [super initWithCoder:decoder]; + if (!self) return nil; + + [self _setupWithClassName:nil]; + + return self; +} + +- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + // This is used by interface builder + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (!self) return nil; + + [self _setupWithClassName:nil]; + + return self; +} + +- (instancetype)initWithCollectionViewLayout:(UICollectionViewLayout *)layout { + return[self initWithCollectionViewLayout:layout className:nil]; +} + +- (instancetype)initWithCollectionViewLayout:(UICollectionViewLayout *)layout className:(NSString *)className { + self = [super initWithCollectionViewLayout:layout]; + if (!self) return nil; + + [self _setupWithClassName:className]; + + return self; +} + +- (instancetype)initWithClassName:(NSString *)className { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + return [self initWithCollectionViewLayout:layout className:className]; +} + +- (void)_setupWithClassName:(NSString *)otherClassName { + _mutableObjects = [NSMutableArray array]; + _firstLoad = YES; + + // Set some reasonable defaults + _objectsPerPage = 25; + _loadingViewEnabled = YES; + _paginationEnabled = YES; + _pullToRefreshEnabled = YES; + _lastLoadCount = -1; + + _parseClassName = [otherClassName copy]; +} + +#pragma mark - +#pragma mark UIViewController + +- (void)loadView { + [super loadView]; + + self.collectionView.backgroundColor = [UIColor whiteColor]; + + [self.collectionView registerClass:[PFCollectionViewCell class] + forCellWithReuseIdentifier:PFQueryCollectionViewCellIdentifier]; + [self.collectionView registerClass:[PFActivityIndicatorCollectionReusableView class] + forSupplementaryViewOfKind:UICollectionElementKindSectionFooter + withReuseIdentifier:PFQueryCollectionViewNextPageReusableViewIdentifier]; + + if (self.pullToRefreshEnabled) { + self.refreshControl = [[UIRefreshControl alloc] init]; + [self.refreshControl addTarget:self + action:@selector(_refreshControlValueChanged:) + forControlEvents:UIControlEventValueChanged]; + [self.collectionView addSubview:self.refreshControl]; + self.collectionView.alwaysBounceVertical = YES; + } +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self loadObjects]; +} + +- (void)viewDidLayoutSubviews { + [super viewDidLayoutSubviews]; + + self.loadingView.frame = self.collectionView.bounds; +} + +#pragma mark - +#pragma mark Responding to Events + +- (void)objectsWillLoad { + [self _refreshLoadingView]; +} + +- (void)objectsDidLoad:(NSError *)error { + [self _refreshLoadingView]; + _firstLoad = NO; +} + +#pragma mark - +#pragma mark Accessing Results + +- (NSArray *)objects { + return _mutableObjects; +} + +- (PFObject *)objectAtIndexPath:(NSIndexPath *)indexPath { + return self.objects[indexPath.row]; +} + +#pragma mark - +#pragma mark Removing Objects + +- (void)removeObjectAtIndexPath:(NSIndexPath *)indexPath { + [self removeObjectsAtIndexPaths:@[ indexPath ]]; +} + +- (void)removeObjectsAtIndexPaths:(NSArray *)indexPaths { + if (indexPaths.count == 0) { + return; + } + + // We need the contents as both an index set and a list of index paths. + NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet]; + + for (NSIndexPath *indexPath in indexPaths) { + if (indexPath.section != 0) { + [NSException raise:NSRangeException format:@"Index Path section %lu out of range!", (long)indexPath.section]; + } + + if (indexPath.row >= self.objects.count) { + [NSException raise:NSRangeException format:@"Index Path row %lu out of range!", (long)indexPath.row]; + } + + [indexes addIndex:indexPath.row]; + } + + BFContinuationBlock deletionHandlerBlock = ^id (BFTask *task) { + self.refreshControl.enabled = YES; + + if (task.error) { + [self _handleDeletionError:task.error]; + } + + return nil; + }; + + NSMutableArray *allDeletionTasks = [NSMutableArray arrayWithCapacity:indexes.count]; + NSArray *objectsToRemove = [self.objects objectsAtIndexes:indexes]; + + // Remove the contents from our local cache so we can give the user immediate feedback. + [_mutableObjects removeObjectsInArray:objectsToRemove]; + [self.collectionView deleteItemsAtIndexPaths:indexPaths]; + + for (id obj in objectsToRemove) { + [allDeletionTasks addObject:[obj deleteInBackground]]; + } + + [[BFTask taskForCompletionOfAllTasks:allDeletionTasks] + continueWithBlock:deletionHandlerBlock]; +} + +#pragma mark - +#pragma mark Loading Data + +- (BFTask *)loadObjects { + return [self loadObjects:0 clear:YES]; +} + +- (BFTask *)loadObjects:(NSInteger)page clear:(BOOL)clear { + self.loading = YES; + [self objectsWillLoad]; + + BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; + + PFQuery *query = [self queryForCollection]; + [self _alterQuery:query forLoadingPage:page]; + [query findObjectsInBackgroundWithBlock:^(NSArray *foundObjects, NSError *error) { + if (![Parse isLocalDatastoreEnabled] && + query.cachePolicy != kPFCachePolicyCacheOnly && + error.code == kPFErrorCacheMiss) { + // no-op on cache miss + return; + } + + self.loading = NO; + + if (error) { + _lastLoadCount = -1; + _currentNextPageView.animating = NO; + } else { + _currentPage = page; + _lastLoadCount = [foundObjects count]; + + if (clear) { + [_mutableObjects removeAllObjects]; + } + + [_mutableObjects addObjectsFromArray:foundObjects]; + [self.collectionView reloadData]; + } + + [self objectsDidLoad:error]; + [self.refreshControl endRefreshing]; + + [source setError:error]; + }]; + + return source.task; +} + +- (void)loadNextPage { + if (!self.loading) { + [self loadObjects:(_currentPage + 1) clear:NO]; + _currentNextPageView.animating = YES; + } +} + +- (void)clear { + [_mutableObjects removeAllObjects]; + [self.collectionView reloadData]; + _currentPage = 0; +} + +#pragma mark - +#pragma mark Querying + +- (PFQuery *)queryForCollection { + if (!self.parseClassName) { + [NSException raise:NSInternalInconsistencyException + format:@"You need to specify a parseClassName for the PFQueryTableViewController.", nil]; + } + + PFQuery *query = [PFQuery queryWithClassName:self.parseClassName]; + + // If no objects are loaded in memory, we look to the cache first to fill the table + // and then subsequently do a query against the network. + if ([self.objects count] == 0 && ![Parse isLocalDatastoreEnabled]) { + query.cachePolicy = kPFCachePolicyCacheThenNetwork; + } + + [query orderByDescending:@"createdAt"]; + + return query; +} + +- (void)_alterQuery:(PFQuery *)query forLoadingPage:(NSInteger)page { + if (self.paginationEnabled && self.objectsPerPage) { + query.limit = self.objectsPerPage; + query.skip = page * self.objectsPerPage; + } +} + +#pragma mark - +#pragma mark Data Source Methods + +- (PFCollectionViewCell *)collectionView:(UICollectionView *)collectionView + cellForItemAtIndexPath:(NSIndexPath *)indexPath + object:(PFObject *)object { + PFCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:PFQueryCollectionViewCellIdentifier + forIndexPath:indexPath]; + [cell updateFromObject:object]; + return cell; +} + +- (UICollectionReusableView *)collectionViewReusableViewForNextPageAction:(UICollectionView *)collectionView { + _currentNextPageView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter + withReuseIdentifier:PFQueryCollectionViewNextPageReusableViewIdentifier + forIndexPath:[self _indexPathForPaginationReusableView]]; + _currentNextPageView.textLabel.text = NSLocalizedString(@"Load more...", @"Load more..."); + [_currentNextPageView addTarget:self action:@selector(loadNextPage) forControlEvents:UIControlEventTouchUpInside]; + _currentNextPageView.animating = self.loading; + return _currentNextPageView; +} + +#pragma mark - +#pragma mark UICollectionViewDataSource + +- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { + return 1; +} + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return [self.objects count]; +} + +- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView + cellForItemAtIndexPath:(NSIndexPath *)indexPath { + return [self collectionView:collectionView cellForItemAtIndexPath:indexPath object:[self objectAtIndexPath:indexPath]]; +} + +- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView + viewForSupplementaryElementOfKind:(NSString *)kind + atIndexPath:(NSIndexPath *)indexPath { + return [self collectionViewReusableViewForNextPageAction:collectionView]; +} + +#pragma mark - +#pragma mark UICollectionViewDelegateFlowLayout + +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section { + if ([self _shouldShowPaginationView]) { + return CGSizeMake(CGRectGetWidth(collectionView.bounds), 50.0f); + } + return CGSizeZero; +} + +#pragma mark - +#pragma mark Pagination + +- (BOOL)_shouldShowPaginationView { + return (self.paginationEnabled && + [self.objects count] != 0 && + (_lastLoadCount == -1 || _lastLoadCount >= (NSInteger)self.objectsPerPage)); +} + +- (NSIndexPath *)_indexPathForPaginationReusableView { + return [NSIndexPath indexPathForItem:0 inSection:[self numberOfSectionsInCollectionView:self.collectionView] - 1]; +} + +#pragma mark - +#pragma mark Error handling + +- (void)_handleDeletionError:(NSError *)error { + // Fully reload on error. + [self loadObjects]; + + NSString *errorMessage = [NSString stringWithFormat:@"%@: \"%@\"", + NSLocalizedString(@"Error occurred during deletion", @"Error occurred during deletion"), + error.localizedDescription]; + + if ([UIAlertController class]) { + UIAlertController *errorController = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Error", @"Error") + message:errorMessage + preferredStyle:UIAlertControllerStyleAlert]; + + [errorController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"OK", @"OK") + style:UIAlertActionStyleCancel + handler:nil]]; + + [self presentViewController:errorController animated:YES completion:nil]; + } else { + // Cast to `id` is required for building succesfully for app extensions, + // this code actually never runs in App Extensions, since they are iOS 8.0+, so we are good with just a hack + UIAlertView *alertView = [(id)[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", @"Error") + message:errorMessage + delegate:nil + cancelButtonTitle:NSLocalizedString(@"OK", @"OK") + otherButtonTitles:nil]; + + [alertView show]; + } +} + +#pragma mark - +#pragma mark Actions + +- (void)_refreshControlValueChanged:(UIRefreshControl *)refreshControl { + if (!self.loading) { + [self loadObjects]; + } +} + +#pragma mark - +#pragma mark Loading View + +- (void)_refreshLoadingView { + BOOL showLoadingView = self.loadingViewEnabled && self.loading && _firstLoad; + + if (showLoadingView) { + [self.collectionView addSubview:self.loadingView]; + [self.view setNeedsLayout]; + } else { + // Avoid loading `loadingView` - just use an ivar. + if (_loadingView) { + [self.loadingView removeFromSuperview]; + self.loadingView = nil; + } + } +} + +- (PFLoadingView *)loadingView { + if (!_loadingView) { + _loadingView = [[PFLoadingView alloc] initWithFrame:CGRectZero]; + } + return _loadingView; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h new file mode 100644 index 0000000..4f73344 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h @@ -0,0 +1,259 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import + +PFUI_ASSUME_NONNULL_BEGIN + +@class BFTask; +@class PFObject; +@class PFQuery; +@class PFTableViewCell; + +/*! + This class allows you to think about a one-to-one mapping between a and a `UITableViewCell`, + rather than having to juggle index paths. + + You also get the following features out of the box: + + - Pagination with a cell that can be tapped to load the next page. + - Pull-to-refresh table view header. + - Automatic downloading and displaying of remote images in cells. + - Loading screen, shown before any data is loaded. + - Automatic loading and management of the objects array. + - Various methods that can be overridden to customize behavior at major events in the data cycle. + */ +@interface PFQueryTableViewController : UITableViewController + +///-------------------------------------- +/// @name Creating a PFQueryTableViewController +///-------------------------------------- + +/*! + @abstract Initializes with a class name of the that will be associated with this table. + + @param style The UITableViewStyle for the table + @param className The class name of the instances of that this table will display. + + @returns An initialized `PFQueryTableViewController` object or `nil` if the object couldn't be created. + */ +- (instancetype)initWithStyle:(UITableViewStyle)style + className:(PFUI_NULLABLE NSString *)className NS_DESIGNATED_INITIALIZER; + +/*! + @abstract Initializes with a class name of the PFObjects that will be associated with this table. + + @param className The class name of the instances of that this table will display. + + @returns An initialized `PFQueryTableViewController` object or `nil` if the object couldn't be created. + */ +- (instancetype)initWithClassName:(PFUI_NULLABLE NSString *)className; + +///-------------------------------------- +/// @name Configuring Behavior +///-------------------------------------- + +/*! + @abstract The class name of the this table will use as a datasource. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, copy) IBInspectable NSString *parseClassName; + +/*! + @abstract The key to use to display for the cell text label. + + @discussion This won't apply if you override + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, copy) IBInspectable NSString *textKey; + +/*! + @abstract The key to use to display for the cell image view. + + @discussion This won't apply if you override + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, copy) IBInspectable NSString *imageKey; + +/*! + @abstract The image to use as a placeholder for the cell images. + + @discussion This won't apply if you override + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong) IBInspectable UIImage *placeholderImage; + +/*! + @abstract Whether the table should use the default loading view. Default - `YES`. + */ +@property (nonatomic, assign) IBInspectable BOOL loadingViewEnabled; + +/*! + @abstract Whether the table should use the built-in pull-to-refresh feature. Defualt - `YES`. + */ +@property (nonatomic, assign) IBInspectable BOOL pullToRefreshEnabled; + +/*! + @abstract Whether the table should use the built-in pagination feature. Default - `YES`. + */ +@property (nonatomic, assign) IBInspectable BOOL paginationEnabled; + +/*! + @abstract The number of objects to show per page. Default - `25`. + */ +@property (nonatomic, assign) IBInspectable NSUInteger objectsPerPage; + +/*! + @abstract Whether the table is actively loading new data from the server. + */ +@property (nonatomic, assign, getter=isLoading) BOOL loading; + +///-------------------------------------- +/// @name Responding to Events +///-------------------------------------- + +/*! + Called when objects will loaded from Parse. If you override this method, you must + call [super objectsWillLoad] in your implementation. + */ +- (void)objectsWillLoad; + +/*! + Called when objects have loaded from Parse. If you override this method, you must + call [super objectsDidLoad:] in your implementation. + @param error The Parse error from running the PFQuery, if there was any. + */ +- (void)objectsDidLoad:(PFUI_NULLABLE NSError *)error; + +///-------------------------------------- +/// @name Accessing Results +///-------------------------------------- + +/*! + @abstract The array of instances of that is used as a data source. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, copy, readonly) NSArray *objects; + +/*! + @abstract Returns an object at a particular indexPath. + + @discussion The default impementation returns the object at `indexPath.row`. + If you want to return objects in a different indexPath order, like for sections, override this method. + + @param indexPath The indexPath. + + @returns The object at the specified index + */ +- (PFUI_NULLABLE PFObject *)objectAtIndexPath:(PFUI_NULLABLE NSIndexPath *)indexPath; + +/*! + @abstract Removes an object at the specified index path, animated. + */ +- (void)removeObjectAtIndexPath:(PFUI_NULLABLE NSIndexPath *)indexPath; + +/*! + @abstract Removes an object at the specified index path, with or without animation. + */ +- (void)removeObjectAtIndexPath:(PFUI_NULLABLE NSIndexPath *)indexPath animated:(BOOL)animated; + +/*! + @abstract Removes all objects at the specified index paths, animated. + */ +- (void)removeObjectsAtIndexPaths:(PFUI_NULLABLE NSArray *)indexes; + +/*! + @abstract Removes all objects at the specified index paths, with or without animation. + */ +- (void)removeObjectsAtIndexPaths:(PFUI_NULLABLE NSArray *)indexes animated:(BOOL)animated; + +/*! + @abstract Clears the table of all objects. + */ +- (void)clear; + +/*! + @abstract Clears the table and loads the first page of objects. + + @returns An awaitable task that completes when the reload succeeds + */ +- (BFTask *)loadObjects; + +/*! + @abstract Loads the objects of the className at the specified page and appends it to the + objects already loaded and refreshes the table. + + @param page The page of objects to load. + @param clear Whether to clear the table after receiving the objects + + @returns An awaitable task that completes when the reload succeeds + */ +- (BFTask *)loadObjects:(NSInteger)page clear:(BOOL)clear; + +/*! + @abstract Loads the next page of objects, appends to table, and refreshes. + */ +- (void)loadNextPage; + +///-------------------------------------- +/// @name Querying +///-------------------------------------- + +/*! + Override to construct your own custom PFQuery to get the objects. + @result PFQuery that loadObjects will use to the objects for this table. + */ +- (PFQuery *)queryForTable; + +///-------------------------------------- +/// @name Data Source Methods +///-------------------------------------- + +/*! + @abstract Override this method to customize each cell given a PFObject that is loaded. + + @discussion If you don't override this method, it will use a default style cell and display either + the first data key from the object, or it will display the key as specified with `textKey`, `imageKey`. + + @warning The cell should inherit from which is a subclass of `UITableViewCell`. + + @param tableView The table view object associated with this controller. + @param indexPath The indexPath of the cell. + @param object The PFObject that is associated with the cell. + + @returns The cell that represents this object. + */ +- (PFUI_NULLABLE PFTableViewCell *)tableView:(UITableView *)tableView + cellForRowAtIndexPath:(NSIndexPath *)indexPath + object:(PFUI_NULLABLE PFObject *)object; + +/*! + @discussion Override this method to customize the cell that allows the user to load the + next page when pagination is turned on. + + @param tableView The table view object associated with this controller. + @param indexPath The indexPath of the cell. + + @returns The cell that allows the user to paginate. + */ +- (PFUI_NULLABLE PFTableViewCell *)tableView:(UITableView *)tableView + cellForNextPageAtIndexPath:(NSIndexPath *)indexPath; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m new file mode 100644 index 0000000..f9fad49 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m @@ -0,0 +1,585 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFQueryTableViewController.h" + +#import +#import + +#import + +#import "PFActivityIndicatorTableViewCell.h" +#import "PFImageView.h" +#import "PFLoadingView.h" +#import "PFLocalization.h" +#import "PFTableViewCell.h" + +// Add headers to kill any warnings. +// `initWithStyle:` is a UITableViewController method. +// `initWithCoder:`/`initWithNibName:bundle:` are UIViewController methods and are, for sure, available. +@interface UITableViewController () + +- (instancetype)initWithStyle:(UITableViewStyle)style NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithCoder:(NSCoder *)decoder NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil NS_DESIGNATED_INITIALIZER; + +@end + +@interface PFQueryTableViewController () { + NSMutableArray *_mutableObjects; + + BOOL _firstLoad; // Whether we have loaded the first set of objects + NSInteger _currentPage; // The last page that was loaded + NSInteger _lastLoadCount; // The count of objects from the last load. + // Set to -1 when objects haven't loaded, or there was an error. + UITableViewCellSeparatorStyle _savedSeparatorStyle; +} + +@property (nonatomic, strong) PFLoadingView *loadingView; + +- (instancetype)initWithCoder:(NSCoder *)decoder NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil NS_DESIGNATED_INITIALIZER; + +@end + +@implementation PFQueryTableViewController + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithCoder:(NSCoder *)decoder { + // initWithCoder is usually a parallel designated initializer, as is the case here + // It's used by storyboard + if (self = [super initWithCoder:decoder]) { + [self _setupWithClassName:nil]; + } + return self; +} + +- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + // This is used by interface builder + if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { + [self _setupWithClassName:nil]; + } + return self; +} + +- (instancetype)initWithStyle:(UITableViewStyle)style { + return [self initWithStyle:style className:nil]; +} + +- (instancetype)initWithClassName:(NSString *)className { + return [self initWithStyle:UITableViewStylePlain className:className]; +} + +- (instancetype)initWithStyle:(UITableViewStyle)style className:(NSString *)className { + if (self = [super initWithStyle:style]) { + [self _setupWithClassName:className]; + } + return self; +} + +- (void)_setupWithClassName:(NSString *)otherClassName { + _mutableObjects = [NSMutableArray array]; + _firstLoad = YES; + + // Set some reasonable defaults + _objectsPerPage = 25; + _loadingViewEnabled = YES; + _paginationEnabled = YES; + _pullToRefreshEnabled = YES; + _lastLoadCount = -1; + + _parseClassName = [otherClassName copy]; +} + +#pragma mark - +#pragma mark UIViewController + +- (void)loadView { + [super loadView]; + + // Setup the Pull to Refresh UI if needed + if (self.pullToRefreshEnabled) { + UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; + [refreshControl addTarget:self + action:@selector(_refreshControlValueChanged:) + forControlEvents:UIControlEventValueChanged]; + self.refreshControl = refreshControl; + } +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self loadObjects]; +} + +- (void)viewDidLayoutSubviews { + [super viewDidLayoutSubviews]; + + self.loadingView.frame = self.tableView.bounds; +} + +- (void)setEditing:(BOOL)editing animated:(BOOL)animated { + [self.tableView beginUpdates]; + + // If we're currently showing the pagination cell, we need to hide it during editing. + if ([self paginationEnabled] && [self _shouldShowPaginationCell]) { + [self.tableView deleteRowsAtIndexPaths:@[ [self _indexPathForPaginationCell] ] + withRowAnimation:UITableViewRowAnimationAutomatic]; + } + + [super setEditing:editing animated:animated]; + + // Ensure proper re-insertion of the pagination cell. + if ([self paginationEnabled] && [self _shouldShowPaginationCell]) { + [self.tableView insertRowsAtIndexPaths:@[ [self _indexPathForPaginationCell] ] + withRowAnimation:UITableViewRowAnimationAutomatic]; + } + + [self.tableView endUpdates]; +} + +#pragma mark - +#pragma mark Data + +- (void)objectsWillLoad { + if (_firstLoad) { + _savedSeparatorStyle = self.tableView.separatorStyle; + self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + } + [self _refreshLoadingView]; +} + +- (void)objectsDidLoad:(NSError *)error { + if (_firstLoad) { + _firstLoad = NO; + self.tableView.separatorStyle = _savedSeparatorStyle; + } + [self _refreshLoadingView]; +} + +- (PFQuery *)queryForTable { + if (!self.parseClassName) { + [NSException raise:NSInternalInconsistencyException + format:@"You need to specify a parseClassName for the PFQueryTableViewController.", nil]; + } + + PFQuery *query = [PFQuery queryWithClassName:self.parseClassName]; + + // If no objects are loaded in memory, we look to the cache first to fill the table + // and then subsequently do a query against the network. + if ([self.objects count] == 0 && ![Parse isLocalDatastoreEnabled]) { + query.cachePolicy = kPFCachePolicyCacheThenNetwork; + } + + [query orderByDescending:@"createdAt"]; + + return query; +} + +// Alters a query to add functionality like pagination +- (void)_alterQuery:(PFQuery *)query forLoadingPage:(NSInteger)page { + if (self.paginationEnabled && self.objectsPerPage) { + query.limit = self.objectsPerPage; + query.skip = page * self.objectsPerPage; + } +} + +- (void)clear { + [_mutableObjects removeAllObjects]; + [self.tableView reloadData]; + _currentPage = 0; +} + +- (BFTask *)loadObjects { + return [self loadObjects:0 clear:YES]; +} + +- (BFTask *)loadObjects:(NSInteger)page clear:(BOOL)clear { + self.loading = YES; + [self objectsWillLoad]; + + BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; + + PFQuery *query = [self queryForTable]; + [self _alterQuery:query forLoadingPage:page]; + [query findObjectsInBackgroundWithBlock:^(NSArray *foundObjects, NSError *error) { + if (![Parse isLocalDatastoreEnabled] && + query.cachePolicy != kPFCachePolicyCacheOnly && + error.code == kPFErrorCacheMiss) { + // no-op on cache miss + return; + } + + self.loading = NO; + + if (error) { + _lastLoadCount = -1; + [self _refreshPaginationCell]; + } else { + _currentPage = page; + _lastLoadCount = [foundObjects count]; + + if (clear) { + [_mutableObjects removeAllObjects]; + } + + [_mutableObjects addObjectsFromArray:foundObjects]; + [self.tableView reloadData]; + } + + [self objectsDidLoad:error]; + [self.refreshControl endRefreshing]; + + [source setError:error]; + }]; + + return source.task; +} + +- (void)loadNextPage { + if (!self.loading) { + [self loadObjects:(_currentPage + 1) clear:NO]; + [self _refreshPaginationCell]; + } +} + +#pragma mark - +#pragma mark UIScrollViewDelegate + +// scrollViewDidEndDragging:willDecelerate: is called when a user stops dragging the table view. +- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { + // If the user lets go and the table view has no momentum, + // scrollViewDidEndDragging:willDecelerate: is called with willDecelerate:NO. + // In this case, we trigger a load for all the PFImageViews + // in our PFTableViewCells through _loadImagesForOnscreenRows. + if (!decelerate) { + [self _loadImagesForOnscreenRows]; + } +} + +// If the user lets go and the table view has momentum, +// scrollViewDidEndDragging:willDecelerate: is called with willDecelerate:YES. +// We will defer loading of images until scrollViewDidEndDecelerating: is called. +- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { + [self _loadImagesForOnscreenRows]; +} + +#pragma mark - +#pragma mark UITableViewDataSource + +// Return the number of rows in the section. +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + NSInteger count = [self.objects count]; + + if ([self _shouldShowPaginationCell]) { + count += 1; + } + + return count; +} + +// Default implementation that displays a default style cell +- (PFTableViewCell *)tableView:(UITableView *)tableView + cellForRowAtIndexPath:(NSIndexPath *)indexPath + object:(PFObject *)object { + static NSString *cellIdentifier = @"PFTableViewCell"; + PFTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; + if (!cell) { + cell = [[PFTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; + } + + [self tableView:tableView configureCell:cell atIndexPath:indexPath object:object]; + + return cell; +} + +- (void)tableView:(UITableView *)tableView + configureCell:(PFTableViewCell *)cell + atIndexPath:(NSIndexPath *)indexPath + object:(PFObject *)object { + // Grab a key to display + NSString *key; + if (self.textKey) { + key = self.textKey; + } else if ([[object allKeys] count] > 0) { + key = [[object allKeys] objectAtIndex:0]; + } + + // Configure the cell + if (key) { + cell.textLabel.text = [NSString stringWithFormat:@"%@", [object objectForKey:key]]; + } + + if (self.placeholderImage) { + cell.imageView.image = self.placeholderImage; + } + + if (self.imageKey) { + cell.imageView.file = object[self.imageKey]; + } +} + +- (PFObject *)objectAtIndexPath:(NSIndexPath *)indexPath { + return self.objects[indexPath.row]; +} + +- (void)removeObjectAtIndexPath:(NSIndexPath *)indexPath { + [self removeObjectAtIndexPath:indexPath animated:YES]; +} + +- (void)removeObjectAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated { + [self removeObjectsAtIndexPaths:@[ indexPath ] animated:animated]; +} + +- (void)removeObjectsAtIndexPaths:(NSArray *)indexPaths { + [self removeObjectsAtIndexPaths:indexPaths animated:YES]; +} + +- (void)removeObjectsAtIndexPaths:(NSArray *)indexPaths animated:(BOOL)animated { + if (indexPaths.count == 0) { + return; + } + + // We need the contents as both an index set and a list of index paths. + NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet]; + + for (NSIndexPath *indexPath in indexPaths) { + if (indexPath.section != 0) { + [NSException raise:NSRangeException format:@"Index Path section %lu out of range!", (long)indexPath.section]; + } + + if (indexPath.row >= self.objects.count) { + [NSException raise:NSRangeException format:@"Index Path row %lu out of range!", (long)indexPath.row]; + } + + [indexes addIndex:indexPath.row]; + } + + BFContinuationBlock deletionHandlerBlock = ^id (BFTask *task) { + self.refreshControl.enabled = YES; + if (task.error) { + [self _handleDeletionError:task.error]; + } + + return nil; + }; + + NSMutableArray *allDeletionTasks = [NSMutableArray arrayWithCapacity:indexes.count]; + NSArray *objectsToRemove = [self.objects objectsAtIndexes:indexes]; + + // Remove the contents from our local cache so we can give the user immediate feedback. + [_mutableObjects removeObjectsInArray:objectsToRemove]; + [self.tableView deleteRowsAtIndexPaths:indexPaths + withRowAnimation:animated ? UITableViewRowAnimationAutomatic : UITableViewRowAnimationNone]; + + for (id obj in objectsToRemove) { + [allDeletionTasks addObject:[obj deleteInBackground]]; + } + + [[BFTask taskForCompletionOfAllTasks:allDeletionTasks] + continueWithBlock:deletionHandlerBlock]; +} + +- (PFTableViewCell *)tableView:(UITableView *)otherTableView cellForNextPageAtIndexPath:(NSIndexPath *)indexPath { + static NSString *cellIdentifier = @"PFTableViewCellNextPage"; + + PFActivityIndicatorTableViewCell *cell = [otherTableView dequeueReusableCellWithIdentifier:cellIdentifier]; + if (cell == nil) { + cell = [[PFActivityIndicatorTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault + reuseIdentifier:cellIdentifier]; + cell.textLabel.text = NSLocalizedString(@"Load more...", @"Load more..."); + } + + cell.animating = self.loading; + + return cell; +} + +- (UITableViewCell *)tableView:(UITableView *)otherTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + PFTableViewCell *cell; + if ([self _shouldShowPaginationCell] && [indexPath isEqual:[self _indexPathForPaginationCell]]) { + // Return the pagination cell on the last cell + cell = [self tableView:otherTableView cellForNextPageAtIndexPath:indexPath]; + } else { + cell = [self tableView:otherTableView + cellForRowAtIndexPath:indexPath + object:[self objectAtIndexPath:indexPath]]; + } + + if ([cell isKindOfClass:[PFTableViewCell class]] && + !otherTableView.dragging && + !otherTableView.decelerating) { + // The reason we dispatch to the main queue is that we want to enable subclasses to override + // tableView:cellForRowAtIndexPath:object:, and we still do image loading after they assign + // the remote image file. + dispatch_async(dispatch_get_main_queue(), ^{ + [cell.imageView loadInBackground]; + }); + } + return cell; +} + +#pragma mark - +#pragma mark UITableViewDelegate + +- (void)tableView:(UITableView *)otherTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + // Handle selection of the next page row + if (!_firstLoad && + self.paginationEnabled && + [indexPath isEqual:[self _indexPathForPaginationCell]]) { + [self loadNextPage]; + } +} + +- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView + editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { + if ([indexPath isEqual:[self _indexPathForPaginationCell]]) { + return UITableViewCellEditingStyleNone; + } + + return UITableViewCellEditingStyleDelete; +} + +- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath { + if ([indexPath isEqual:[self _indexPathForPaginationCell]]) { + return NO; + } + + return YES; +} + +#pragma mark - +#pragma mark Private + +// Whether we need to show the pagination cell +- (BOOL)_shouldShowPaginationCell { + return (self.paginationEnabled && + !self.editing && + [self.objects count] != 0 && + (_lastLoadCount == -1 || _lastLoadCount >= (NSInteger)self.objectsPerPage)); +} + +// Selectively refresh pagination cell +- (void)_refreshPaginationCell { + if ([self _shouldShowPaginationCell]) { + [self.tableView reloadRowsAtIndexPaths:@[ [self _indexPathForPaginationCell] ] + withRowAnimation:UITableViewRowAnimationNone]; + } +} + +// The row of the pagination cell +- (NSIndexPath *)_indexPathForPaginationCell { + return [NSIndexPath indexPathForRow:[self.objects count] inSection:0]; +} + +- (void)_loadImagesForOnscreenRows { + if (self.objects.count > 0) { + NSArray *visiblePaths = [self.tableView indexPathsForVisibleRows]; + for (NSIndexPath *indexPath in visiblePaths) { + [self _loadImageForCellAtIndexPath:indexPath]; + } + } +} + +- (void)_loadImageForCellAtIndexPath:(NSIndexPath *)indexPath { + PFTableViewCell *cell = (PFTableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath]; + if ([cell isKindOfClass:[PFTableViewCell class]]) { + [cell.imageView loadInBackground]; + } +} + +#pragma mark - +#pragma mark Error handling + +- (void)_handleDeletionError:(NSError *)error { + // Fully reload on error. + [self loadObjects]; + + NSString *errorMessage = [NSString stringWithFormat:@"%@: \"%@\"", + NSLocalizedString(@"Error occurred during deletion", @"Error occurred during deletion"), + error.localizedDescription]; + + if ([UIAlertController class]) { + UIAlertController *errorController = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Error", @"Error") + message:errorMessage + preferredStyle:UIAlertControllerStyleAlert]; + + [errorController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"OK", @"OK") + style:UIAlertActionStyleCancel + handler:nil]]; + + [self presentViewController:errorController animated:YES completion:nil]; + } else { + // Cast to `id` is required for building succesfully for app extensions, + // this code actually never runs in App Extensions, since they are iOS 8.0+, so we are good with just a hack + UIAlertView *alertView = [(id)[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", @"Error") + message:errorMessage + delegate:nil + cancelButtonTitle:NSLocalizedString(@"OK", @"OK") + otherButtonTitles:nil]; + + [alertView show]; + } +} + +#pragma mark - +#pragma mark Actions + +- (void)_refreshControlValueChanged:(UIRefreshControl *)refreshControl { + [self loadObjects]; +} + +#pragma mark - +#pragma mark Accessors + +- (NSArray *)objects { + return _mutableObjects; +} + +#pragma mark - +#pragma mark Loading View + +- (void)_refreshLoadingView { + BOOL showLoadingView = self.loadingViewEnabled && self.loading && _firstLoad; + + if (showLoadingView) { + [self.tableView addSubview:self.loadingView]; + [self.view setNeedsLayout]; + } else { + // Avoid loading `loadingView` - just use an ivar. + if (_loadingView) { + [self.loadingView removeFromSuperview]; + self.loadingView = nil; + } + } +} + +- (PFLoadingView *)loadingView { + if (!_loadingView) { + _loadingView = [[PFLoadingView alloc] initWithFrame:CGRectZero]; + } + return _loadingView; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.h new file mode 100644 index 0000000..d6a8795 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.h @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import + +PFUI_ASSUME_NONNULL_BEGIN + +/*! + `PFSignUpFields` bitmask specifies the sign up elements which are enabled in the view. + + @see PFSignUpViewController + @see PFSignUpView + */ +typedef NS_OPTIONS(NSInteger, PFSignUpFields) { + /*! Username and password fields. */ + PFSignUpFieldsUsernameAndPassword = 0, + /*! Email field. */ + PFSignUpFieldsEmail = 1 << 0, + /*! This field can be used for something else. */ + PFSignUpFieldsAdditional = 1 << 1, + /*! Sign Up Button */ + PFSignUpFieldsSignUpButton = 1 << 2, + /*! Dismiss Button */ + PFSignUpFieldsDismissButton = 1 << 3, + /*! Default value. Combines Username, Password, Email, Sign Up and Dismiss Buttons. */ + PFSignUpFieldsDefault = (PFSignUpFieldsUsernameAndPassword | + PFSignUpFieldsEmail | + PFSignUpFieldsSignUpButton | + PFSignUpFieldsDismissButton) +}; + +@class PFTextField; + +/*! + The `PFSignUpView` class provides a standard sign up interface for authenticating a . + */ +@interface PFSignUpView : UIScrollView + +///-------------------------------------- +/// @name Creating SignUp View +///-------------------------------------- + +/*! + @abstract Initializes the view with the specified sign up elements. + + @param fields A bitmask specifying the sign up elements which are enabled in the view + + @returns An initialized `PFSignUpView` object or `nil` if the object couldn't be created. + + @see PFSignUpFields + */ +- (instancetype)initWithFields:(PFSignUpFields)fields; + +/*! + @abstract The view controller that will present this view. + + @discussion Used to lay out elements correctly when the presenting view controller has translucent elements. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, weak) UIViewController *presentingViewController; + +///-------------------------------------- +/// @name Customizing the Logo +///-------------------------------------- + +/*! + @abstract The logo. By default, it is the Parse logo. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong) UIView *logo; + +///-------------------------------------- +/// @name Configure Username Behaviour +///-------------------------------------- + +/*! + @abstract If email should be used to log in, instead of username + + @discussion By default, this is set to `NO`. + */ +@property (nonatomic, assign) BOOL emailAsUsername; + +///-------------------------------------- +/// @name Sign Up Elements +///-------------------------------------- + +/*! + @abstract The bitmask which specifies the enabled sign up elements in the view + */ +@property (nonatomic, assign, readonly) PFSignUpFields fields; + +/*! + @abstract The username text field. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFTextField *usernameField; + +/*! + @abstract The password text field. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFTextField *passwordField; + +/*! + @abstract The email text field. It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFTextField *emailField; + +/*! + @abstract The additional text field. It is `nil` if the element is not enabled. + + @discussion This field is intended to be customized. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFTextField *additionalField; + +/*! + @abstract The sign up button. It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *signUpButton; + +/*! + @abstract The dismiss button. It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *dismissButton; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.m new file mode 100644 index 0000000..b171404 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.m @@ -0,0 +1,319 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFSignUpView.h" + +#import "PFColor.h" +#import "PFDismissButton.h" +#import "PFImage.h" +#import "PFLocalization.h" +#import "PFPrimaryButton.h" +#import "PFRect.h" +#import "PFTextButton.h" +#import "PFTextField.h" + +static NSString *const PFSignUpViewDefaultLogoImageName = @"parse_logo.png"; + +@implementation PFSignUpView + +#pragma mark - +#pragma mark NSObject + +- (instancetype)initWithFields:(PFSignUpFields)otherFields { + self = [super init]; + if (!self) return nil; + + _fields = otherFields; + + self.opaque = YES; + self.backgroundColor = [PFColor commonBackgroundColor]; + + _logo = [[UIImageView alloc] initWithImage:[PFImage imageNamed:PFSignUpViewDefaultLogoImageName]]; + _logo.contentMode = UIViewContentModeScaleAspectFit; + [self addSubview:_logo]; + + if (_fields & PFSignUpFieldsDismissButton) { + _dismissButton = [[PFDismissButton alloc] initWithFrame:CGRectZero]; + [self addSubview:_dismissButton]; + } + + _usernameField = [[PFTextField alloc] initWithFrame:CGRectZero + separatorStyle:(PFTextFieldSeparatorStyleTop | + PFTextFieldSeparatorStyleBottom)]; + _usernameField.autocorrectionType = UITextAutocorrectionTypeNo; + _usernameField.autocapitalizationType = UITextAutocapitalizationTypeNone; + _usernameField.returnKeyType = UIReturnKeyNext; + [self addSubview:_usernameField]; + [self _updateUsernameFieldStyle]; + + _passwordField = [[PFTextField alloc] initWithFrame:CGRectZero + separatorStyle:PFTextFieldSeparatorStyleBottom]; + _passwordField.placeholder = NSLocalizedString(@"Password", @"Password"); + _passwordField.secureTextEntry = YES; + _passwordField.autocorrectionType = UITextAutocorrectionTypeNo; + _passwordField.autocapitalizationType = UITextAutocapitalizationTypeNone; + if (!(_fields & PFSignUpFieldsEmail) && !(_fields & PFSignUpFieldsAdditional)) { + _passwordField.returnKeyType = UIReturnKeyDone; + } else { + _passwordField.returnKeyType = UIReturnKeyNext; + } + [self addSubview:_passwordField]; + + if (_fields & PFSignUpFieldsEmail) { + _emailField = [[PFTextField alloc] initWithFrame:CGRectZero + separatorStyle:PFTextFieldSeparatorStyleBottom]; + _emailField.autocorrectionType = UITextAutocorrectionTypeNo; + _emailField.autocapitalizationType = UITextAutocapitalizationTypeNone; + _emailField.keyboardType = UIKeyboardTypeEmailAddress; + _emailField.placeholder = NSLocalizedString(@"Email", @"Email"); + if (!(_fields & PFSignUpFieldsAdditional)) { + _emailField.returnKeyType = UIReturnKeyDone; + } else { + _emailField.returnKeyType = UIReturnKeyNext; + } + [self addSubview:_emailField]; + } + + if (_fields & PFSignUpFieldsAdditional) { + _additionalField = [[PFTextField alloc] initWithFrame:CGRectZero + separatorStyle:PFTextFieldSeparatorStyleBottom]; + _additionalField.autocorrectionType = UITextAutocorrectionTypeNo; + _additionalField.autocapitalizationType = UITextAutocapitalizationTypeNone; + _additionalField.placeholder = NSLocalizedString(@"Additional", @"Additional"); + _additionalField.returnKeyType = UIReturnKeyDone; + [self addSubview:_additionalField]; + } + + if (_fields & PFSignUpFieldsSignUpButton) { + _signUpButton = [[PFPrimaryButton alloc] initWithBackgroundImageColor:[PFColor signupButtonBackgroundColor]]; + [_signUpButton setTitle:NSLocalizedString(@"Sign Up", @"Sign Up") forState:UIControlStateNormal]; + [self addSubview:_signUpButton]; + } + + return self; +} + +#pragma mark - +#pragma mark UIView + +- (void)layoutSubviews { + [super layoutSubviews]; + + CGRect bounds = self.bounds; + + if (_dismissButton) { + CGPoint origin = CGPointMake(16.0f, 16.0f); + + // In iOS 7+, if the view controller that contains this view + // is presented modally, it's edges extend under the status bar. + // This lets us move down the dismiss button a bit so that it's not covered by the status bar. + if ([self.presentingViewController respondsToSelector:@selector(topLayoutGuide)]) { + origin.y += self.presentingViewController.topLayoutGuide.length; + } + + CGRect frame = PFRectMakeWithOriginSize(origin, [_dismissButton sizeThatFits:bounds.size]); + _dismissButton.frame = frame; + } + + const CGRect contentRect = PFRectMakeWithSizeCenteredInRect([self _contentSizeThatFits:bounds.size], + PFRectMakeWithSize(bounds.size)); + const CGSize contentSize = contentRect.size; + const CGSize contentSizeScale = [self _contentSizeScaleForContentSize:bounds.size]; + + CGFloat currentY = CGRectGetMinY(contentRect); + if (_logo) { + CGFloat logoTopInset = floorf(48.0f * contentSizeScale.height); + CGFloat logoBottomInset = floorf(36.0f * contentSizeScale.height); + + CGFloat logoAvailableHeight = floorf(68.0f * contentSizeScale.height); + + CGSize logoSize = [_logo sizeThatFits:CGSizeMake(contentSize.width, logoAvailableHeight)]; + logoSize.width = MIN(contentSize.width, logoSize.width); + logoSize.height = MIN(logoAvailableHeight, logoSize.height); + + CGRect frame = PFRectMakeWithSizeCenteredInRect(logoSize, contentRect); + frame.origin.y = CGRectGetMinY(contentRect) + logoTopInset; + _logo.frame = CGRectIntegral(frame); + + currentY = floorf(CGRectGetMaxY(frame) + logoBottomInset); + } + + if (_usernameField) { + CGRect frame = PFRectMakeWithSizeCenteredInRect([_usernameField sizeThatFits:contentSize], contentRect); + frame.origin.y = currentY; + _usernameField.frame = frame; + + currentY = CGRectGetMaxY(frame); + } + + if (_passwordField) { + CGRect frame = PFRectMakeWithSizeCenteredInRect([_passwordField sizeThatFits:contentSize], contentRect); + frame.origin.y = currentY; + _passwordField.frame = frame; + + currentY = CGRectGetMaxY(frame); + } + + if (_emailField && !_emailAsUsername) { + CGRect frame = PFRectMakeWithSizeCenteredInRect([_emailField sizeThatFits:contentSize], contentRect); + frame.origin.y = currentY; + _emailField.frame = frame; + + currentY = CGRectGetMaxY(frame); + } + + if (_additionalField) { + CGRect frame = PFRectMakeWithSizeCenteredInRect([_additionalField sizeThatFits:contentSize], contentRect); + frame.origin.y = currentY; + _additionalField.frame = frame; + + currentY = CGRectGetMaxY(frame); + } + + if (_signUpButton) { + CGFloat loginButtonTopInset = floorf(24.0f * contentSizeScale.height); + + CGRect frame = PFRectMakeWithSizeCenteredInRect([_signUpButton sizeThatFits:contentSize], contentRect);; + frame.origin.y = currentY + loginButtonTopInset; + _signUpButton.frame = frame; + + currentY = CGRectGetMaxY(frame); + } +} + +- (CGSize)_contentSizeThatFits:(CGSize)boundingSize { + CGSize maxContentSize = [self _maxContentSize]; + CGSize contentSizeScale = [self _contentSizeScaleForContentSize:boundingSize]; + + CGSize size = PFSizeMin(maxContentSize, boundingSize); + size.height = 0.0f; + if (_logo) { + CGFloat logoTopInset = floorf(36.0f * contentSizeScale.height); + CGFloat logoBottomInset = floorf(36.0f * contentSizeScale.height); + + CGFloat logoAvailableHeight = floorf(68.0f * contentSizeScale.height); + + CGFloat scale = MAX(contentSizeScale.width, contentSizeScale.height); + + CGSize logoSize = [_logo sizeThatFits:CGSizeMake(boundingSize.width, logoAvailableHeight)]; + logoSize.height *= scale; + logoSize.width *= scale; + + size.height += logoSize.height + logoTopInset + logoBottomInset; + } + if (_usernameField) { + CGSize fieldSize = [_usernameField sizeThatFits:boundingSize]; + size.height += fieldSize.height; + } + if (_passwordField) { + CGSize fieldSize = [_passwordField sizeThatFits:boundingSize]; + size.height += fieldSize.height; + } + if (_emailField && !_emailAsUsername) { + CGSize fieldSize = [_emailField sizeThatFits:boundingSize]; + size.height += fieldSize.height; + } + if (_additionalField) { + CGSize fieldSize = [_additionalField sizeThatFits:boundingSize]; + size.height += fieldSize.height; + } + if (_signUpButton) { + CGFloat buttonTopInset = floorf(24.0f * contentSizeScale.height); + + CGSize buttonSize = [_signUpButton sizeThatFits:boundingSize]; + + size.height += buttonSize.height + buttonTopInset; + } + + size.width = floorf(size.width); + size.height = floorf(size.height); + + return size; +} + +- (CGSize)_maxContentSize { + return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? + CGSizeMake(420.0f, 500.0f) : + CGSizeMake(500.0f, 800.0f)); +} + +- (CGSize)_contentSizeScaleForContentSize:(CGSize)contentSize { + CGSize maxContentSize = [self _maxContentSize]; + if (maxContentSize.width < contentSize.width && + maxContentSize.height < contentSize.height) { + return CGSizeMake(1.0f, 1.0f); + } + + CGSize contentSizeScale = CGSizeMake(contentSize.width / maxContentSize.width, + contentSize.height / maxContentSize.height); + return contentSizeScale; +} + +#pragma mark - +#pragma mark PFSignUpView + +- (void)setLogo:(UIView *)logo { + if (self.logo != logo) { + [_logo removeFromSuperview]; + _logo = logo; + [self addSubview:_logo]; + + [self setNeedsLayout]; + } +} + +- (void)setEmailAsUsername:(BOOL)otherEmailAsUsername { + if (_emailAsUsername != otherEmailAsUsername) { + _emailAsUsername = otherEmailAsUsername; + + if (_emailAsUsername) { + if (_emailField.superview) { + [_emailField removeFromSuperview]; + } + } else { + if (_emailField.superview == nil) { + [self addSubview:_emailField]; + } + [self setNeedsLayout]; + } + [self _updateUsernameFieldStyle]; + } +} + +#pragma mark - +#pragma mark Private + +- (void)_updateUsernameFieldStyle { + UIKeyboardType keyboardType = UIKeyboardTypeDefault; + NSString *placeholder = nil; + if (!_emailAsUsername) { + placeholder = NSLocalizedString(@"Username", @"Username"); + keyboardType = UIKeyboardTypeDefault; + } else { + placeholder = NSLocalizedString(@"Email", @"Email"); + keyboardType = UIKeyboardTypeEmailAddress; + } + + _usernameField.placeholder = placeholder; + _usernameField.keyboardType = keyboardType; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.h new file mode 100644 index 0000000..88b2332 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.h @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import +#import + +@class PFUser; +@protocol PFSignUpViewControllerDelegate; + +PFUI_ASSUME_NONNULL_BEGIN + +/*! + The `PFSignUpViewController` class that presents and manages + a standard authentication interface for signing up a . + */ +@interface PFSignUpViewController : UIViewController + +///-------------------------------------- +/// @name Configuring Sign Up Elements +///-------------------------------------- + +/*! + @abstract A bitmask specifying the log in elements which are enabled in the view. + + @see PFSignUpFields + */ +@property (nonatomic, assign) PFSignUpFields fields; + +/*! + @abstract The sign up view. It contains all the enabled log in elements. + + @see PFSignUpView + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFSignUpView *signUpView; + +///-------------------------------------- +/// @name Configuring Sign Up Behaviors +///-------------------------------------- + +/*! + @abstract The delegate that responds to the control events of `PFSignUpViewController`. + + @see PFSignUpViewControllerDelegate + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, weak) id delegate; + +/*! + @abstract Minimum required password length for user signups, defaults to `0`. + */ +@property (nonatomic, assign) NSUInteger minPasswordLength; + +/*! + @abstract Whether to use the email as username on the attached . + + @discussion If set to `YES`, we'll hide the email field, prompt for the email in + the username field, and save the email into both username and email + fields on the new object. By default, this is set to `NO`. + */ +@property (nonatomic, assign) BOOL emailAsUsername; + +@end + +///-------------------------------------- +/// @name Notifications +///-------------------------------------- + +/*! + @abstract The notification is posted immediately after the sign up succeeds. + */ +extern NSString *const PFSignUpSuccessNotification; + +/*! + @abstract The notification is posted immediately after the sign up fails. + + @discussion If the delegate prevents the sign up to start, the notification is not sent. + */ +extern NSString *const PFSignUpFailureNotification; + +/*! + @abstract The notification is posted immediately after the user cancels sign up. + */ +extern NSString *const PFSignUpCancelNotification; + +///-------------------------------------- +/// @name PFSignUpViewControllerDelegate +///-------------------------------------- + +/*! + The `PFLogInViewControllerDelegate` protocol defines methods a delegate of a should implement. + All methods of this protocol are optional. + */ +@protocol PFSignUpViewControllerDelegate + +@optional + +///-------------------------------------- +/// @name Customizing Behavior +///-------------------------------------- + +/*! + @abstract Sent to the delegate to determine whether the sign up request should be submitted to the server. + + @param signUpController The signup view controller that is requesting the data. + @param info An `NSDictionary` instance which contains all sign up information that the user entered. + + @returns A `BOOL` indicating whether the sign up should proceed. + */ +- (BOOL)signUpViewController:(PFSignUpViewController *)signUpController shouldBeginSignUp:(NSDictionary *)info; + +///-------------------------------------- +/// @name Responding to Actions +///-------------------------------------- + +/*! + @abstract Sent to the delegate when a is signed up. + + @param signUpController The signup view controller where signup finished. + @param user object that is a result of the sign up. + */ +- (void)signUpViewController:(PFSignUpViewController *)signUpController didSignUpUser:(PFUser *)user; + +/*! + @abstract Sent to the delegate when the sign up attempt fails. + + @param signUpController The signup view controller where signup failed. + @param error `NSError` object representing the error that occured. + */ +- (void)signUpViewController:(PFSignUpViewController *)signUpController + didFailToSignUpWithError:(PFUI_NULLABLE NSError *)error; + +/*! + @abstract Sent to the delegate when the sign up screen is cancelled. + + @param signUpController The signup view controller where signup was cancelled. + */ +- (void)signUpViewControllerDidCancelSignUp:(PFSignUpViewController *)signUpController; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.m new file mode 100644 index 0000000..257b5fb --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.m @@ -0,0 +1,513 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFSignUpViewController.h" + +#import +#import + +#import "PFUIAlertView.h" +#import "PFLocalization.h" +#import "PFPrimaryButton.h" +#import "PFTextField.h" + +NSString *const PFSignUpSuccessNotification = @"com.parse.ui.signup.success"; +NSString *const PFSignUpFailureNotification = @"com.parse.ui.signup.failure"; +NSString *const PFSignUpCancelNotification = @"com.parse.ui.signup.cancel"; + +// Keys that are used to pass information to the delegate on `signUpViewController:shouldBeginSignUp`. +static NSString *const PFSignUpViewControllerDelegateInfoUsernameKey = @"username"; +static NSString *const PFSignUpViewControllerDelegateInfoPasswordKey = @"password"; +static NSString *const PFSignUpViewControllerDelegateInfoEmailKey = @"email"; +static NSString *const PFSignUpViewControllerDelegateInfoAdditionalKey = @"additional"; + +@interface PFSignUpViewController () { + struct { + BOOL shouldSignUp : YES; + BOOL didSignUp : YES; + BOOL didFailToSignUp : YES; + BOOL didCancelSignUp : YES; + } _delegateExistingMethods; +} + +@property (nonatomic, strong, readwrite) PFSignUpView *signUpView; + +@property (nonatomic, assign) BOOL loading; + +@property (nonatomic, assign) CGFloat visibleKeyboardHeight; + +@end + +@implementation PFSignUpViewController + +#pragma mark - +#pragma mark Init + +- (instancetype)init { + if (self = [super init]) { + [self _commonInit]; + } + return self; +} + +- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { + [self _commonInit]; + } + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder { + if (self = [super initWithCoder:decoder]) { + [self _commonInit]; + } + return self; +} + +- (void)_commonInit { + self.modalTransitionStyle = UIModalTransitionStyleCoverVertical; + self.modalPresentationStyle = UIModalPresentationFormSheet; + _fields = PFSignUpFieldsDefault; + + if ([self respondsToSelector:@selector(automaticallyAdjustsScrollViewInsets)]) { + self.automaticallyAdjustsScrollViewInsets = NO; + } +} + +#pragma mark - +#pragma mark Dealloc + +- (void)dealloc { + // Unregister from all notifications + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +#pragma mark - +#pragma mark UIViewController + +- (void)loadView { + _signUpView = [[PFSignUpView alloc] initWithFields:_fields]; + _signUpView.presentingViewController = self; + self.view = _signUpView; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self _setupHandlers]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + [self _registerForKeyboardNotifications]; + if (self.navigationController && + self.fields & PFSignUpFieldsDismissButton) { + self.fields = self.fields & ~PFSignUpFieldsDismissButton; + + [_signUpView.dismissButton removeFromSuperview]; + } +} + +#pragma mark - +#pragma mark Rotation + +- (UIInterfaceOrientationMask)supportedInterfaceOrientations { + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + return UIInterfaceOrientationMaskAll; + } + + return UIInterfaceOrientationMaskPortrait; +} + +#pragma mark - +#pragma mark PFSignUpViewController + +- (PFSignUpView *)signUpView { + return (PFSignUpView *)self.view; // self.view will call loadView if the view is nil +} + +- (void)setDelegate:(id)delegate { + if (self.delegate != delegate) { + _delegate = delegate; + + _delegateExistingMethods.shouldSignUp = [delegate respondsToSelector:@selector(signUpViewController: + shouldBeginSignUp:)]; + _delegateExistingMethods.didSignUp = [delegate respondsToSelector:@selector(signUpViewController: + didSignUpUser:)]; + _delegateExistingMethods.didFailToSignUp = [delegate respondsToSelector:@selector(signUpViewController: + didFailToSignUpWithError:)]; + _delegateExistingMethods.didCancelSignUp = [delegate + respondsToSelector:@selector(signUpViewControllerDidCancelSignUp:)]; + } +} + +- (void)setEmailAsUsername:(BOOL)otherEmailAsUsername { + self.signUpView.emailAsUsername = otherEmailAsUsername; +} + +- (BOOL)emailAsUsername { + return self.signUpView.emailAsUsername; +} + +#pragma mark - +#pragma mark UITextFieldDelegate + +- (void)textFieldDidBeginEditing:(UITextField *)textField { + [self _updateSignUpViewContentOffsetAnimated:YES]; +} + +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + if (textField == _signUpView.usernameField) { + [_signUpView.passwordField becomeFirstResponder]; + return YES; + } + + if (textField == _signUpView.passwordField) { + if (_signUpView.emailField) { + [_signUpView.emailField becomeFirstResponder]; + return YES; + } else if (_signUpView.additionalField) { + [_signUpView.additionalField becomeFirstResponder]; + return YES; + } + } + + if (textField == _signUpView.emailField) { + if (_signUpView.additionalField) { + [_signUpView.additionalField becomeFirstResponder]; + return YES; + } + } + + [self _signUpAction]; + + return YES; +} + +#pragma mark - +#pragma mark Private + +- (void)_setupHandlers { + _signUpView.delegate = self; // UIScrollViewDelegate + [_signUpView.dismissButton addTarget:self + action:@selector(_dismissAction) + forControlEvents:UIControlEventTouchUpInside]; + _signUpView.usernameField.delegate = self; + _signUpView.passwordField.delegate = self; + _signUpView.emailField.delegate = self; + _signUpView.additionalField.delegate = self; + [_signUpView.signUpButton addTarget:self + action:@selector(_signUpAction) + forControlEvents:UIControlEventTouchUpInside]; + + UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] + initWithTarget:self + action:@selector(_dismissKeyboard)]; + gestureRecognizer.cancelsTouchesInView = NO; + [_signUpView addGestureRecognizer:gestureRecognizer]; +} + +- (void)_dismissAction { + [self _cancelSignUp]; + + // Normally the role of dismissing a modal controller lies on the presenting controller. + // Here we violate the principle so that the presenting modal log in controller is especially easy. + // Cons of this design is that it makes working with non-modally presented log in controller hard; + // but this concern is mitigated by the fact that navigationally presented controller should not have + // dismiss button. + + [self dismissViewControllerAnimated:YES completion:nil]; +} + +- (void)_signUpAction { + if (self.loading) { + return; + } + + [self _dismissKeyboard]; + + NSString *username = _signUpView.usernameField.text ?: @""; + NSString *password = _signUpView.passwordField.text ?: @""; + NSString *email = (self.emailAsUsername ? username : _signUpView.emailField.text); + email = [email stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + + NSString *additional = _signUpView.additionalField.text; + + NSMutableDictionary *dictionary = [@{ PFSignUpViewControllerDelegateInfoUsernameKey : username, + PFSignUpViewControllerDelegateInfoPasswordKey : password } mutableCopy]; + + if (email) { + dictionary[PFSignUpViewControllerDelegateInfoEmailKey] = email; + } + if (additional) { + dictionary[PFSignUpViewControllerDelegateInfoAdditionalKey] = additional; + } + + if (_delegateExistingMethods.shouldSignUp) { + if (![_delegate signUpViewController:self shouldBeginSignUp:dictionary]) { + return; + } + } + + if ([password length] < _minPasswordLength) { + NSString *errorMessage = NSLocalizedString(@"Password must be at least %d characters.", + @"Password too short error message in PFSignUpViewController"); + errorMessage = [NSString stringWithFormat:errorMessage, (unsigned long)_minPasswordLength]; + NSError *error = [NSError errorWithDomain:PFParseErrorDomain + code:0 + userInfo:@{ NSLocalizedDescriptionKey : errorMessage }]; + [self _signUpDidFailWithError:error]; + [_signUpView.passwordField becomeFirstResponder]; + + return; + } + + PFUser *user = [PFUser user]; + user.username = username; + user.password = password; + + if (email) { + user.email = email; + } + if (additional) { + user[PFSignUpViewControllerDelegateInfoAdditionalKey] = additional; + } + + self.loading = YES; + if ([_signUpView.signUpButton isKindOfClass:[PFPrimaryButton class]]) { + [(PFPrimaryButton *)_signUpView.signUpButton setLoading:YES]; + } + [user signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { + self.loading = NO; + if ([_signUpView.signUpButton isKindOfClass:[PFPrimaryButton class]]) { + [(PFPrimaryButton *)_signUpView.signUpButton setLoading:NO]; + } + + if (succeeded) { + [self _signUpDidSuceedWithUser:user]; + } + else { + [self _signUpDidFailWithError:error]; + } + }]; +} + +- (void)_signUpDidSuceedWithUser:(PFUser *)user { + if (_delegateExistingMethods.didSignUp) { + [_delegate signUpViewController:self didSignUpUser:user]; + } + [[NSNotificationCenter defaultCenter] postNotificationName:PFSignUpSuccessNotification object:self]; +} + +- (void)_signUpDidFailWithError:(NSError *)error { + if (_delegateExistingMethods.didFailToSignUp) { + [_delegate signUpViewController:self didFailToSignUpWithError:error]; + } + [[NSNotificationCenter defaultCenter] postNotificationName:PFSignUpFailureNotification object:self]; + + NSString *title = NSLocalizedString(@"Sign Up Error", @"Sign Up Error"); + + if ([[error domain] isEqualToString:PFParseErrorDomain]) { + NSInteger errorCode = [error code]; + NSString *message = nil; + UIResponder *responder = nil; + + if (errorCode == kPFErrorInvalidEmailAddress) { + message = NSLocalizedString(@"The email address is invalid. Please enter a valid email.", + @"Invalid email address error message in PFSignUpViewControllers"); + responder = _signUpView.emailField ?: _signUpView.usernameField; + } else if (errorCode == kPFErrorUsernameMissing) { + message = NSLocalizedString(@"Please enter a username.", + @"Username missing error message in PFSignUpViewController"); + responder = _signUpView.usernameField; + } else if (errorCode == kPFErrorUserPasswordMissing) { + message = NSLocalizedString(@"Please enter a password.", + @"Password missing error message in PFSignUpViewController"); + responder = _signUpView.passwordField; + } else if (errorCode == kPFErrorUsernameTaken) { + NSString *format = NSLocalizedString(@"The username '%@' is taken. Please try choosing a different username.", + @"Username taken error format in PFSignUpViewController"); + message = [NSString stringWithFormat:format, _signUpView.usernameField.text]; + responder = _signUpView.usernameField; + } else if (error.code == kPFErrorUserEmailTaken) { + NSString *format = NSLocalizedString(@"The email '%@' is taken. Please try using a different email.", + @"Email is taken error format in PFSignUpViewController."); + UITextField *textField = self.emailAsUsername ? _signUpView.usernameField : _signUpView.emailField; + + message = [NSString stringWithFormat:format, textField.text]; + responder = textField; + } else if (error.code == kPFErrorUserEmailMissing) { + message = NSLocalizedString(@"Please enter an email.", + @"Email missing error message in PFSignUpViewController"); + responder = _signUpView.emailField; + } + + if (message != nil) { + [PFUIAlertView showAlertViewWithTitle:title message:message]; + [responder becomeFirstResponder]; + + return; + } + } + + // Show the generic error alert, as no custom cases matched before + [PFUIAlertView showAlertViewWithTitle:title error:error]; +} + +- (void)_cancelSignUp { + if (_delegateExistingMethods.didCancelSignUp) { + [_delegate signUpViewControllerDidCancelSignUp:self]; + } + [[NSNotificationCenter defaultCenter] postNotificationName:PFSignUpCancelNotification object:self]; +} + +- (UIView *)_currentFirstResponder { + if ([_signUpView.usernameField isFirstResponder]) { + return _signUpView.usernameField; + } + if ([_signUpView.passwordField isFirstResponder]) { + return _signUpView.passwordField; + } + if ([_signUpView.emailField isFirstResponder]) { + return _signUpView.emailField; + } + if ([_signUpView.additionalField isFirstResponder]) { + return _signUpView.additionalField; + } + + return nil; +} + +#pragma mark Keyboard + +- (void)_dismissKeyboard { + [self.view endEditing:YES]; +} + +- (void)_registerForKeyboardNotifications { + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(_keyboardWillShow:) + name:UIKeyboardWillShowNotification + object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(_keyboardWillHide:) + name:UIKeyboardWillHideNotification object:nil]; +} + +- (void)_keyboardWillShow:(NSNotification *)notification { + NSDictionary *userInfo = [notification userInfo]; + CGRect endFrame = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; + CGFloat duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]; + UIViewAnimationCurve curve = [userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]; + + CGRect keyboardFrame = [self.view convertRect:endFrame fromView:self.view.window]; + CGFloat visibleKeyboardHeight = CGRectGetMaxY(self.view.bounds) - CGRectGetMinY(keyboardFrame); + + [self setVisibleKeyboardHeight:visibleKeyboardHeight + animationDuration:duration + animationOptions:curve << 16]; +} + +- (void)_keyboardWillHide:(NSNotification *)notification { + NSDictionary *userInfo = [notification userInfo]; + CGFloat duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]; + UIViewAnimationCurve curve = [userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]; + [self setVisibleKeyboardHeight:0.0 + animationDuration:duration + animationOptions:curve << 16]; +} + +- (void)setVisibleKeyboardHeight:(CGFloat)visibleKeyboardHeight + animationDuration:(NSTimeInterval)animationDuration + animationOptions:(UIViewAnimationOptions)animationOptions { + + dispatch_block_t animationsBlock = ^{ + self.visibleKeyboardHeight = visibleKeyboardHeight; + }; + + if (animationDuration == 0.0) { + animationsBlock(); + } else { + [UIView animateWithDuration:animationDuration + delay:0.0 + options:animationOptions | UIViewAnimationOptionBeginFromCurrentState + animations:animationsBlock + completion:nil]; + } +} + +- (void)setVisibleKeyboardHeight:(CGFloat)visibleKeyboardHeight { + if (self.visibleKeyboardHeight != visibleKeyboardHeight) { + _visibleKeyboardHeight = visibleKeyboardHeight; + [self _updateSignUpViewContentOffsetAnimated:NO]; + } +} + +- (void)_updateSignUpViewContentOffsetAnimated:(BOOL)animated { + CGPoint contentOffset = CGPointZero; + if (self.visibleKeyboardHeight > 0.0f) { + // Scroll the view to keep fields visible + CGFloat offsetForScrollingTextFieldToTop = CGRectGetMinY([self _currentFirstResponder].frame); + + UIView *lowestView; + if (_signUpView.signUpButton) { + lowestView = _signUpView.signUpButton; + } else if (_signUpView.additionalField) { + lowestView = _signUpView.additionalField; + } else if (_signUpView.emailField) { + lowestView = _signUpView.emailField; + } else { + lowestView = _signUpView.passwordField; + } + + CGFloat offsetForScrollingLowestViewToBottom = 0.0f; + offsetForScrollingLowestViewToBottom += self.visibleKeyboardHeight; + offsetForScrollingLowestViewToBottom += CGRectGetMaxY(lowestView.frame); + offsetForScrollingLowestViewToBottom -= CGRectGetHeight(_signUpView.bounds); + + if (offsetForScrollingLowestViewToBottom < 0) { + return; // No scrolling required + } + + contentOffset = CGPointMake(0.0f, MIN(offsetForScrollingTextFieldToTop, + offsetForScrollingLowestViewToBottom)); + } + + [_signUpView setContentOffset:contentOffset animated:animated]; +} + +#pragma mark - +#pragma mark Accessors + +- (void)setLoading:(BOOL)loading { + if (self.loading != loading) { + _loading = loading; + + _signUpView.usernameField.enabled = !self.loading; + _signUpView.passwordField.enabled = !self.loading; + _signUpView.emailField.enabled = !self.loading; + _signUpView.additionalField.enabled = !self.loading; + _signUpView.dismissButton.enabled = !self.loading; + } +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.h new file mode 100644 index 0000000..368b3d6 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import + +PFUI_ASSUME_NONNULL_BEGIN + +typedef void(^PFImageViewImageResultBlock)(UIImage *PFUI_NULLABLE_S image, NSError *PFUI_NULLABLE_S error); + +@class BFTask; +@class PFFile; + +/*! + An image view that downloads and displays remote image stored on Parse's server. + */ +@interface PFImageView : UIImageView + +/*! + @abstract The remote file on Parse's server that stores the image. + + @warning Note that the download does not start until is called. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong) PFFile *file; + +/*! + @abstract Initiate downloading of the remote image. + + @discussion Once the download completes, the remote image will be displayed. + + @returns The task, that encapsulates the work being done. + */ +- (BFTask *)loadInBackground; + +/*! + @abstract Initiate downloading of the remote image. + + @discussion Once the download completes, the remote image will be displayed. + + @param completion the completion block. + */ +- (void)loadInBackground:(PFUI_NULLABLE PFImageViewImageResultBlock)completion; + +/*! + @abstract Initiate downloading of the remote image. + + @discussion Once the download completes, the remote image will be displayed. + + @param completion the completion block. + @param progressBlock called with the download progress as the image is being downloaded. + Will be called with a value of 100 before the completion block is called. + */ +- (void)loadInBackground:(PFUI_NULLABLE PFImageViewImageResultBlock)completion + progressBlock:(PFUI_NULLABLE void (^)(int percentDone))progressBlock; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.m new file mode 100644 index 0000000..fe44076 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.m @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFImageView.h" + +#import + +#import + +#import "PFImageCache.h" + +@implementation PFImageView + +#pragma mark - +#pragma mark Accessors + +- (void)setFile:(PFFile *)otherFile { + // Here we don't check (file != otherFile) + // because self.image needs to be updated regardless. + // setFile: could have altered self.image + _file = otherFile; + NSURL *url = [NSURL URLWithString:self.file.url]; + UIImage *cachedImage = [[PFImageCache sharedCache] imageForURL:url]; + if (cachedImage) { + self.image = cachedImage; + } +} + +#pragma mark - +#pragma mark Load + +- (BFTask *)loadInBackground { + BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; + [self loadInBackground:^(UIImage *image, NSError *error) { + if (error) { + [source trySetError:error]; + } else { + [source trySetResult:image]; + } + }]; + return source.task; +} + + +- (void)loadInBackground:(void (^)(UIImage *, NSError *))completion { + [self loadInBackground:completion progressBlock:nil]; +} + +- (void)loadInBackground:(void (^)(UIImage *, NSError *))completion progressBlock:(PFProgressBlock)progressBlock { + if (!self.file) { + // When there is nothing to load, the user just wants to display + // the placeholder image. I think the better design decision is + // to return with no error, to simplify caller logic. (arguable) + if (completion) { + completion(nil, nil); + } + return; + } + + if (!self.file.url) { + // The file has not been saved. + if (completion) { + NSError *error = [NSError errorWithDomain:PFParseErrorDomain code:kPFErrorUnsavedFile userInfo:nil]; + completion(nil, error); + } + return; + } + + NSURL *url = [NSURL URLWithString:self.file.url]; + if (url) { + UIImage *cachedImage = [[PFImageCache sharedCache] imageForURL:url]; + if (cachedImage) { + self.image = cachedImage; + + if (progressBlock) { + progressBlock(100); + } + if (completion) { + completion(cachedImage, nil); + } + return; + } + } + + + PFFile *file = _file; + [_file getDataInBackgroundWithBlock:^(NSData *data, NSError *error) { + if (error) { + if (completion) { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(nil, error); + }); + } + return; + } + + // We dispatch to a background queue to offload the work to decode data into image + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ + UIImage *image = [UIImage imageWithData:data]; + if (!image) { + if (completion) { + NSError *invalidDataError = [NSError errorWithDomain:PFParseErrorDomain + code:kPFErrorInvalidImageData + userInfo:nil]; + dispatch_async(dispatch_get_main_queue(), ^{ + completion(nil, invalidDataError); + }); + } + return; + } + + dispatch_async(dispatch_get_main_queue(), ^{ + // check if a latter issued loadInBackground has not replaced the file being loaded + if (file == _file) { + self.image = image; + } + + if (completion) { + completion(image, nil); + } + }); + + if (url) { + // We always want to store the image in the cache. + // In previous checks we've verified neither key nor value is nil. + [[PFImageCache sharedCache] setImage:image forURL:url]; + } + }); + } progressBlock:progressBlock]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.h new file mode 100644 index 0000000..5bfb168 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import + +PFUI_ASSUME_NONNULL_BEGIN + +/*! + `PFTextFieldSeparatorStyle` bitmask specifies the style of the separators, + that should be used for a given `PFTextField`. + + @see PFTextField + */ +typedef NS_OPTIONS(uint8_t, PFTextFieldSeparatorStyle){ + /*! No separators are visible. */ + PFTextFieldSeparatorStyleNone = 0, + /*! Separator on top of the text field. */ + PFTextFieldSeparatorStyleTop = 1 << 0, + /*! Separator at the bottom of the text field. */ + PFTextFieldSeparatorStyleBottom = 1 << 1 +}; + +/*! + `PFTextField` class serves as a stylable subclass of `UITextField`. + It includes styles that are specific to `ParseUI` framework and allows advanced customization. + */ +@interface PFTextField : UITextField + +/*! + @abstract Separator style bitmask that should be applied to this textfield. + + @discussion Default: + + @see PFTextFieldSeparatorStyle + */ +@property (nonatomic, assign) PFTextFieldSeparatorStyle separatorStyle; + +/*! + @abstract Color that should be used for the separators, if they are visible. + + @discussion Default: `227,227,227,1.0`. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong) UIColor *separatorColor UI_APPEARANCE_SELECTOR; + +/*! + This method is a convenience initializer that sets both `frame` and `separatorStyle` for an instance of `PFTextField.` + + @param frame The frame rectangle for the view, measured in points. + @param separatorStyle Initial separator style to use. + + @return An initialized instance of `PFTextField` or `nil` if it couldn't be created. + */ +- (instancetype)initWithFrame:(CGRect)frame separatorStyle:(PFTextFieldSeparatorStyle)separatorStyle; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.m new file mode 100644 index 0000000..7372cd5 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.m @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFTextField.h" + +#import "PFColor.h" + +@implementation PFTextField + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (!self) return nil; + + self.backgroundColor = [PFColor textFieldBackgroundColor]; + self.textColor = [PFColor textFieldTextColor]; + + self.font = [UIFont systemFontOfSize:17.0f]; + + self.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; + + _separatorColor = [PFColor textFieldSeparatorColor]; + + return self; +} + +- (instancetype)initWithFrame:(CGRect)frame separatorStyle:(PFTextFieldSeparatorStyle)separatorStyle { + self = [self initWithFrame:frame]; + if (!self) return nil; + + _separatorStyle = separatorStyle; + + return self; +} + +#pragma mark - +#pragma mark Accessors + +- (void)setPlaceholder:(NSString *)placeholder { + NSDictionary *attributes = @{ NSForegroundColorAttributeName : [PFColor textFieldPlaceholderColor] }; + self.attributedPlaceholder = [[NSAttributedString alloc] initWithString:placeholder attributes:attributes]; +} + +- (void)setSeparatorStyle:(PFTextFieldSeparatorStyle)separatorStyle { + if (self.separatorStyle != separatorStyle) { + _separatorStyle = separatorStyle; + [self setNeedsDisplay]; + } +} + +#pragma mark - +#pragma mark Drawing + +- (void)drawRect:(CGRect)rect { + [super drawRect:rect]; + + const CGRect bounds = self.bounds; + CGContextRef context = UIGraphicsGetCurrentContext(); + + if (self.separatorStyle != PFTextFieldSeparatorStyleNone) { + [self.separatorColor setFill]; + } + + if (self.separatorStyle & PFTextFieldSeparatorStyleTop) { + CGRect borderRect = CGRectMake(0.0f, 0.0f, CGRectGetWidth(bounds), 1.0f); + CGContextFillRect(context, borderRect); + } + + if (self.separatorStyle & PFTextFieldSeparatorStyleBottom) { + CGRect borderRect = CGRectMake(0.0f, CGRectGetMaxY(bounds) - 1.0f, CGRectGetWidth(bounds), 1.0f); + CGContextFillRect(context, borderRect); + } +} + +#pragma mark - +#pragma mark Frame + +- (CGRect)textRectForBounds:(CGRect)bounds { + return CGRectMake(20.0f, 0.0f, CGRectGetWidth(bounds) - 30.0f, CGRectGetHeight(bounds)); +} + +- (CGRect)placeholderRectForBounds:(CGRect)bounds { + return [self textRectForBounds:bounds]; +} + +- (CGRect)editingRectForBounds:(CGRect)bounds { + return [self textRectForBounds:bounds]; +} + +#pragma mark - +#pragma mark Sizing + +- (CGSize)sizeThatFits:(CGSize)boundingSize { + CGSize size = CGSizeZero; + size.width = boundingSize.width; + size.height = MIN(44.0f, boundingSize.height); + return size; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Generated/PFResources.h b/BreakingBad/Pods/ParseUI/ParseUI/Generated/PFResources.h new file mode 100644 index 0000000..1f5fc1a --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Generated/PFResources.h @@ -0,0 +1,13 @@ +// This is an auto-generated file. +#import +@interface PFResources : NSObject ++ (NSData *)facebook_icon_png;//modified:2015-10-15 13:48:20 -0400 ++ (NSData *)facebook_icon2x_png;//modified:2015-10-15 13:48:20 -0400 ++ (NSData *)facebook_icon3x_png;//modified:2015-10-15 13:48:20 -0400 ++ (NSData *)parse_logo_png;//modified:2015-10-15 13:48:20 -0400 ++ (NSData *)parse_logo2x_png;//modified:2015-10-15 13:48:20 -0400 ++ (NSData *)parse_logo3x_png;//modified:2015-10-15 13:48:20 -0400 ++ (NSData *)twitter_icon_png;//modified:2015-10-15 13:48:20 -0400 ++ (NSData *)twitter_icon2x_png;//modified:2015-10-15 13:48:20 -0400 ++ (NSData *)twitter_icon3x_png;//modified:2015-10-15 13:48:20 -0400 +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Generated/PFResources.m b/BreakingBad/Pods/ParseUI/ParseUI/Generated/PFResources.m new file mode 100644 index 0000000..5475765 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Generated/PFResources.m @@ -0,0 +1,76 @@ +// This is an auto-generated file. +#import "PFResources.h" +@implementation PFResources + const unsigned char facebook_icon_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x16, 0x0, 0x0, 0x0, 0x16, 0x8, 0x6, 0x0, 0x0, 0x0, 0xc4, 0xb4, 0x6c, 0x3b, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9, 0x65, 0x3c, 0x0, 0x0, 0x3, 0x23, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x35, 0x2d, 0x63, 0x30, 0x31, 0x34, 0x20, 0x37, 0x39, 0x2e, 0x31, 0x35, 0x31, 0x34, 0x38, 0x31, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2f, 0x30, 0x33, 0x2f, 0x31, 0x33, 0x2d, 0x31, 0x32, 0x3a, 0x30, 0x39, 0x3a, 0x31, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x43, 0x20, 0x28, 0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x29, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x46, 0x34, 0x42, 0x46, 0x44, 0x38, 0x36, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x46, 0x34, 0x42, 0x46, 0x44, 0x38, 0x37, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x46, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x38, 0x30, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, 0x3f, 0x3e, 0x98, 0x50, 0xa6, 0xc2, 0x0, 0x0, 0x1, 0x78, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x62, 0xd8, 0xbc, 0x79, 0xf3, 0x9a, 0xbf, 0x7f, 0xff, 0x7e, 0xff, 0xff, 0xff, 0xff, 0xf, 0x6a, 0xe0, 0x7f, 0xff, 0xfe, 0x7d, 0xdf, 0xb5, 0x6b, 0xd7, 0x26, 0x46, 0x20, 0xe7, 0x2f, 0x3, 0x3, 0x3, 0x13, 0x3, 0x95, 0x1, 0xc8, 0xc0, 0x3f, 0xc, 0xd4, 0x7, 0x7f, 0x59, 0xc8, 0xd1, 0xf5, 0xf9, 0xf3, 0xe7, 0xf, 0x6b, 0xd7, 0xae, 0x5d, 0x75, 0xf6, 0xec, 0xd9, 0x73, 0xbf, 0x7f, 0xff, 0xfe, 0xc9, 0xc1, 0xc1, 0xc1, 0xe5, 0xe1, 0xe1, 0xe1, 0xe, 0xc4, 0x7e, 0x70, 0x45, 0xc0, 0xa0, 0xf8, 0xf9, 0x9f, 0x4, 0x70, 0xef, 0xde, 0xbd, 0x5b, 0x3a, 0x3a, 0x3a, 0x1a, 0xe8, 0x96, 0x65, 0x65, 0x65, 0x25, 0x21, 0x29, 0xfb, 0x43, 0x72, 0xd8, 0xe6, 0xe4, 0xe4, 0x64, 0x5d, 0xb9, 0x72, 0xe5, 0x6, 0x16, 0x29, 0x46, 0x64, 0xe, 0x49, 0x41, 0xf1, 0xe8, 0xd1, 0xa3, 0x7b, 0x7b, 0xf6, 0xec, 0x39, 0x0, 0xe3, 0xeb, 0xeb, 0xeb, 0x6b, 0x45, 0x46, 0x46, 0x46, 0x70, 0x73, 0x73, 0x73, 0x18, 0x1a, 0x1a, 0x1a, 0xa1, 0x28, 0x26, 0x25, 0x28, 0x4e, 0x9e, 0x3c, 0x79, 0x18, 0x59, 0xef, 0x91, 0x23, 0x47, 0xf6, 0xe1, 0x50, 0x4a, 0x5a, 0x50, 0x30, 0x32, 0xa2, 0xf8, 0x96, 0x41, 0x0, 0x8, 0xf0, 0x25, 0x37, 0xa2, 0x1, 0x33, 0x33, 0x33, 0xba, 0xfa, 0xff, 0xb8, 0xd4, 0x12, 0xc, 0xe3, 0x97, 0x2f, 0x5f, 0x3e, 0xf, 0xb, 0xb, 0xb, 0xf9, 0xf9, 0xf3, 0xe7, 0xef, 0x2f, 0x5f, 0xbe, 0x7c, 0x46, 0x96, 0x3, 0x86, 0x6f, 0x2c, 0x17, 0x17, 0x17, 0x37, 0x88, 0x5d, 0x55, 0x55, 0x55, 0xee, 0xe7, 0xe7, 0x17, 0x4c, 0xb4, 0xc1, 0x40, 0x3, 0x7f, 0x1c, 0x3a, 0x74, 0xe8, 0x18, 0x36, 0xb9, 0xcb, 0x97, 0x2f, 0x5f, 0xc3, 0xe5, 0x1b, 0x82, 0x41, 0x1, 0x8a, 0x9, 0x62, 0x82, 0x49, 0x5e, 0x5e, 0x5e, 0x81, 0xa4, 0xa0, 0x10, 0x14, 0x14, 0x14, 0xea, 0xe8, 0xe8, 0x68, 0xfd, 0x3, 0x4, 0x4f, 0x9e, 0x3c, 0x79, 0x38, 0x63, 0xc6, 0x8c, 0x79, 0x48, 0x69, 0x3a, 0x4d, 0x42, 0x42, 0x42, 0x9a, 0x8d, 0x8d, 0x8d, 0x55, 0x51, 0x51, 0x51, 0x99, 0xec, 0xe4, 0x76, 0xed, 0xda, 0xb5, 0x73, 0xc8, 0x7a, 0xef, 0xde, 0xbd, 0x7b, 0x9d, 0x2a, 0xc9, 0xd, 0x18, 0x79, 0x5f, 0xd1, 0xf8, 0x5f, 0xa8, 0x92, 0xdc, 0x48, 0x2d, 0x36, 0x47, 0xd, 0x86, 0x1b, 0x4c, 0x74, 0x9, 0x47, 0x64, 0x92, 0x6, 0xe7, 0x17, 0xa6, 0xdd, 0xbb, 0x77, 0x6f, 0x5, 0x6a, 0xf8, 0x5, 0xad, 0xa2, 0x88, 0xc1, 0xc8, 0x16, 0x61, 0xc8, 0x3, 0xc5, 0x7e, 0x1f, 0x3c, 0x78, 0x70, 0x17, 0x40, 0x80, 0x1, 0x0, 0x86, 0x7f, 0xa9, 0xd0, 0x39, 0x35, 0xd1, 0x78, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; + + + + + (NSData *)facebook_icon_png { + return [NSData dataWithBytes:facebook_icon_png length:sizeof(facebook_icon_png)]; + } + + const unsigned char facebook_icon2x_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x2c, 0x0, 0x0, 0x0, 0x2c, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1e, 0x84, 0x5a, 0x1, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9, 0x65, 0x3c, 0x0, 0x0, 0x3, 0x23, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x35, 0x2d, 0x63, 0x30, 0x31, 0x34, 0x20, 0x37, 0x39, 0x2e, 0x31, 0x35, 0x31, 0x34, 0x38, 0x31, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2f, 0x30, 0x33, 0x2f, 0x31, 0x33, 0x2d, 0x31, 0x32, 0x3a, 0x30, 0x39, 0x3a, 0x31, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x43, 0x20, 0x28, 0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x29, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x44, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x45, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x42, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x43, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, 0x3f, 0x3e, 0x64, 0xec, 0x39, 0x7f, 0x0, 0x0, 0x2, 0x9a, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec, 0x97, 0xcf, 0x8f, 0xd2, 0x40, 0x14, 0xc7, 0x99, 0x96, 0xd2, 0xf2, 0x63, 0xbb, 0x18, 0x10, 0x83, 0x42, 0x14, 0x12, 0x4f, 0x12, 0xaf, 0x60, 0xbc, 0x60, 0xf8, 0x2f, 0x8c, 0x81, 0x4, 0x88, 0x5c, 0xbc, 0x7a, 0xf2, 0x60, 0xb8, 0xb0, 0x7f, 0x0, 0xc6, 0x13, 0x7, 0xc2, 0xdd, 0x83, 0x37, 0xc2, 0xca, 0x9, 0x3, 0x44, 0x8d, 0x82, 0x31, 0x21, 0x1c, 0x48, 0x5c, 0x12, 0x48, 0x38, 0xd8, 0x8, 0xba, 0x14, 0x97, 0xa5, 0xf8, 0x6a, 0x62, 0xb2, 0x36, 0x9d, 0x2e, 0x34, 0xed, 0xb2, 0x8d, 0x7d, 0xc9, 0x24, 0x4d, 0xdf, 0xcc, 0x9b, 0x4f, 0xa7, 0x6f, 0xde, 0x7c, 0x7, 0x5, 0x2, 0x1, 0x5f, 0xa9, 0x54, 0x7a, 0x19, 0x8f, 0xc7, 0x1f, 0xd0, 0x34, 0x4d, 0x5a, 0x2e, 0xa1, 0x2d, 0x97, 0x4b, 0xe1, 0x1d, 0x58, 0x36, 0x9b, 0xcd, 0x59, 0xaa, 0xd5, 0xea, 0xab, 0xb5, 0x41, 0xac, 0xdd, 0x6e, 0x1f, 0x22, 0x41, 0x10, 0x7e, 0x20, 0x84, 0x5c, 0x16, 0x63, 0xd8, 0x9, 0x2, 0xf0, 0x29, 0x3c, 0xb0, 0x6, 0x1, 0x5e, 0x88, 0xc0, 0xdf, 0xe1, 0x61, 0xdf, 0x20, 0xc0, 0xbc, 0x9, 0xbc, 0xd1, 0x7f, 0x5d, 0x2c, 0x66, 0xc3, 0xe1, 0xf0, 0x2b, 0xc7, 0x71, 0xdf, 0x4e, 0xc1, 0xec, 0x76, 0x3b, 0x45, 0x92, 0x24, 0xe3, 0x72, 0xb9, 0x9c, 0x2c, 0xcb, 0xee, 0x7b, 0xbd, 0xde, 0xeb, 0x4, 0x41, 0x58, 0xe5, 0x80, 0x2d, 0x22, 0xf0, 0x45, 0xed, 0xf2, 0x6e, 0xb7, 0xdb, 0xcc, 0xe5, 0x72, 0x8f, 0xc2, 0xe1, 0xf0, 0xd, 0x8a, 0xa2, 0x90, 0x94, 0xc6, 0x66, 0xb3, 0x21, 0x8f, 0xc7, 0xe3, 0x18, 0xc, 0x6, 0x9f, 0x31, 0x21, 0xe6, 0x17, 0x6, 0x5c, 0x28, 0x14, 0x9e, 0x31, 0xc, 0x43, 0x6c, 0xf2, 0x7, 0xfa, 0xfd, 0xfe, 0xa7, 0x9d, 0x2, 0xe7, 0xf3, 0xf9, 0xa7, 0x9b, 0xa6, 0x8b, 0xd5, 0x6a, 0xdd, 0x2d, 0x30, 0x14, 0xfb, 0x37, 0xdb, 0xe4, 0xf7, 0x79, 0xc0, 0x84, 0xde, 0x1b, 0xec, 0x0, 0x6c, 0x9b, 0xfe, 0xb0, 0x7, 0xc5, 0x45, 0x5c, 0x63, 0x3f, 0x48, 0x4f, 0xd8, 0xc9, 0x64, 0x72, 0x54, 0xaf, 0xd7, 0xdf, 0x2a, 0xf5, 0xf1, 0xf9, 0x7c, 0x62, 0x55, 0x70, 0x43, 0x95, 0x40, 0x7f, 0x57, 0x18, 0x72, 0x9d, 0xc6, 0xe, 0xd0, 0x33, 0x25, 0x6a, 0xb5, 0xda, 0x6b, 0xdc, 0xbc, 0x4e, 0xa7, 0x93, 0x2e, 0x97, 0xcb, 0x45, 0x28, 0x6d, 0xe3, 0xd5, 0x6a, 0x35, 0x87, 0xee, 0xfc, 0x99, 0x26, 0xe0, 0x52, 0x42, 0xd7, 0x15, 0x1e, 0x8d, 0x46, 0x43, 0x9c, 0x2f, 0x93, 0xc9, 0x3c, 0x4c, 0xa5, 0x52, 0x4f, 0xb6, 0x8d, 0xa9, 0x6b, 0xe, 0x43, 0x3e, 0x2e, 0x70, 0xbe, 0x58, 0x2c, 0x76, 0x4f, 0x4d, 0x4c, 0x5d, 0x81, 0x41, 0x5, 0x62, 0x7d, 0xa0, 0xbd, 0x6d, 0x97, 0xe, 0x58, 0xc9, 0x40, 0xd6, 0xae, 0xd, 0x5, 0xac, 0xd6, 0x74, 0x5, 0x6, 0x51, 0xc3, 0xe0, 0x7c, 0xe, 0x87, 0xc3, 0xae, 0x2a, 0xcd, 0xb4, 0x50, 0x6b, 0xe3, 0xf1, 0xf8, 0xe8, 0x39, 0x98, 0x34, 0x36, 0x9c, 0x58, 0x5f, 0x1a, 0x8d, 0xc6, 0x7, 0xb9, 0x31, 0x89, 0x44, 0xe2, 0x7e, 0x28, 0x14, 0xba, 0x2d, 0x56, 0xd6, 0xb3, 0xef, 0xe1, 0x8e, 0x79, 0xd, 0x42, 0x1d, 0x60, 0x16, 0x53, 0x1b, 0xb5, 0x6, 0x2a, 0xec, 0xbd, 0x56, 0x7f, 0x25, 0x1a, 0x8d, 0xde, 0x55, 0x98, 0x4a, 0x9b, 0xa3, 0x19, 0xb4, 0x2b, 0xa1, 0x54, 0x11, 0xb6, 0xb1, 0x48, 0x24, 0x72, 0xc7, 0x50, 0x9b, 0xe, 0xd2, 0xe4, 0x96, 0x9, 0x2c, 0xa3, 0x47, 0x94, 0x4, 0xd6, 0x56, 0x16, 0xc, 0x6, 0x6f, 0x2a, 0xca, 0x4f, 0x2d, 0x26, 0x81, 0xab, 0xd, 0xe5, 0xf7, 0xfb, 0xaf, 0x4a, 0xa1, 0x79, 0x9e, 0x9f, 0x4f, 0xa7, 0xd3, 0x63, 0xb9, 0x31, 0x6e, 0xb7, 0x7b, 0xf, 0x54, 0xd9, 0x3f, 0x65, 0x4f, 0xbc, 0x36, 0x9d, 0x7, 0xac, 0x49, 0x95, 0x0, 0xb5, 0x75, 0xa, 0x60, 0x9c, 0xb4, 0x15, 0x8b, 0xc5, 0x3c, 0x6e, 0xde, 0x4a, 0xa5, 0xf2, 0x42, 0xda, 0x7f, 0x36, 0x9b, 0x71, 0xa, 0x4a, 0x4d, 0x3b, 0xb5, 0x6, 0x45, 0x82, 0x84, 0xdb, 0xee, 0x15, 0xe9, 0x7b, 0xb8, 0x5, 0xef, 0xe1, 0xc6, 0x80, 0x8f, 0x95, 0x1b, 0xb3, 0xd3, 0x93, 0xe, 0x56, 0x7e, 0xa5, 0xc6, 0x67, 0x6a, 0x9, 0x13, 0xd8, 0x4, 0x36, 0x81, 0x4d, 0x60, 0x13, 0xf8, 0xff, 0x6, 0x46, 0x6, 0xe2, 0x45, 0x22, 0x30, 0x69, 0x20, 0x60, 0x92, 0x68, 0xb5, 0x5a, 0x4d, 0x3d, 0x57, 0x44, 0xa5, 0x4f, 0xd6, 0x7a, 0xbd, 0xde, 0x47, 0x22, 0x9d, 0x4e, 0x3f, 0x6, 0xe8, 0x43, 0x10, 0x4f, 0x3f, 0xff, 0x5c, 0xa3, 0xb5, 0x6d, 0x27, 0xa, 0xf3, 0xff, 0xda, 0x34, 0x8e, 0x20, 0x8, 0xc7, 0x9d, 0x4e, 0xa7, 0x99, 0x4c, 0x26, 0xd3, 0xbf, 0x5, 0x18, 0x0, 0x98, 0xef, 0x3, 0xa7, 0xc, 0x73, 0xce, 0xd3, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; + + + + + (NSData *)facebook_icon2x_png { + return [NSData dataWithBytes:facebook_icon2x_png length:sizeof(facebook_icon2x_png)]; + } + + const unsigned char facebook_icon3x_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x42, 0x0, 0x0, 0x0, 0x42, 0x8, 0x6, 0x0, 0x0, 0x0, 0xe3, 0x54, 0x0, 0xe8, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9, 0x65, 0x3c, 0x0, 0x0, 0x3, 0x23, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x35, 0x2d, 0x63, 0x30, 0x31, 0x34, 0x20, 0x37, 0x39, 0x2e, 0x31, 0x35, 0x31, 0x34, 0x38, 0x31, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2f, 0x30, 0x33, 0x2f, 0x31, 0x33, 0x2d, 0x31, 0x32, 0x3a, 0x30, 0x39, 0x3a, 0x31, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x43, 0x20, 0x28, 0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x29, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x39, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x41, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x37, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x38, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, 0x3f, 0x3e, 0x90, 0x6f, 0x2b, 0x47, 0x0, 0x0, 0x3, 0x4d, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec, 0x9c, 0xdf, 0x4b, 0x53, 0x61, 0x18, 0xc7, 0xcf, 0x39, 0x9b, 0x4e, 0xdc, 0x28, 0x6d, 0xb3, 0xd4, 0xd9, 0x36, 0x1c, 0x4a, 0x2c, 0x49, 0xa2, 0x1b, 0x17, 0x24, 0xde, 0xc8, 0x48, 0x85, 0xa3, 0x5e, 0xf4, 0x17, 0x94, 0xd2, 0xa5, 0x5e, 0x8c, 0x6, 0x42, 0x41, 0x46, 0x30, 0x6, 0x61, 0x74, 0x57, 0xd7, 0x43, 0x2f, 0x92, 0xae, 0x84, 0x89, 0x45, 0x9b, 0x3f, 0x82, 0x5, 0xf9, 0xa3, 0x99, 0x76, 0xe3, 0x61, 0x3, 0x65, 0x84, 0xc2, 0xf4, 0xa0, 0xec, 0x6c, 0x3b, 0x3b, 0x3d, 0xcb, 0x6e, 0xba, 0x48, 0x5f, 0x73, 0x9c, 0xce, 0xf6, 0x3e, 0xf, 0x1c, 0x36, 0xb6, 0x67, 0xe7, 0x3d, 0xfb, 0xec, 0xf9, 0xf1, 0x7d, 0xde, 0x3, 0x63, 0x19, 0x30, 0x97, 0xcb, 0x65, 0xb, 0x4, 0x2, 0xcf, 0xdc, 0x6e, 0xf7, 0x9d, 0x9a, 0x9a, 0x1a, 0x3, 0xbc, 0xa4, 0x30, 0xe5, 0x6d, 0xec, 0xe1, 0xe1, 0x61, 0xf6, 0xb, 0xd8, 0xd8, 0xd8, 0xd8, 0xe3, 0x48, 0x24, 0xb2, 0x5a, 0x80, 0x60, 0xdf, 0xda, 0xda, 0x8a, 0x29, 0x94, 0x5a, 0x2a, 0x95, 0xda, 0xe9, 0xea, 0xea, 0xba, 0xc9, 0x84, 0x42, 0xa1, 0xa0, 0x42, 0xb9, 0xad, 0xac, 0xac, 0x7c, 0x60, 0x45, 0x51, 0xdc, 0x36, 0x99, 0x4c, 0x8d, 0xc, 0xc5, 0x96, 0xcf, 0xe7, 0xf, 0x38, 0x80, 0xc0, 0x31, 0x94, 0x1b, 0xc7, 0x71, 0x2c, 0x47, 0x41, 0x61, 0x24, 0x31, 0x85, 0x43, 0x6, 0xbf, 0xa3, 0x2, 0x11, 0x20, 0x88, 0xb2, 0x2, 0x91, 0x83, 0xee, 0x97, 0x85, 0x47, 0xf9, 0xbc, 0x27, 0xd2, 0x97, 0xd0, 0x97, 0xce, 0x80, 0x10, 0x5c, 0x9c, 0x9f, 0x9f, 0xff, 0xb8, 0xbc, 0xbc, 0xbc, 0x9a, 0x48, 0x24, 0xb6, 0x41, 0x1d, 0x8a, 0x70, 0xe4, 0xcd, 0x66, 0xb3, 0xe, 0xde, 0xaf, 0x80, 0xc3, 0x0, 0xcf, 0x8d, 0xd5, 0xd5, 0xd5, 0x17, 0xea, 0xea, 0xea, 0xcc, 0x9d, 0x9d, 0x9d, 0xb7, 0x7, 0x6, 0x6, 0x1e, 0x90, 0x95, 0x4b, 0x45, 0xd9, 0xd1, 0xb8, 0xde, 0x91, 0x82, 0xc1, 0xe0, 0xcb, 0x8e, 0x8e, 0xe, 0xd7, 0x59, 0xc9, 0xf5, 0xf5, 0xf5, 0xb9, 0x9, 0xd7, 0xd8, 0xd7, 0x74, 0x44, 0x8, 0x82, 0xf0, 0x75, 0x68, 0x68, 0xe8, 0xfe, 0xdc, 0xdc, 0x5c, 0xf4, 0x5f, 0x3e, 0xf, 0x91, 0x61, 0x2c, 0xf9, 0xd4, 0x88, 0xc5, 0x62, 0x8b, 0xf0, 0x8b, 0xf2, 0xf1, 0x78, 0x7c, 0x8f, 0xda, 0x62, 0x99, 0x4c, 0x26, 0x5, 0x9e, 0xe7, 0x7, 0xd5, 0x82, 0xa0, 0x59, 0x10, 0xa3, 0xa3, 0xa3, 0xf, 0x61, 0x22, 0xfe, 0x41, 0x75, 0xfb, 0x8c, 0x46, 0xa3, 0x33, 0x93, 0x93, 0x93, 0x21, 0xea, 0x75, 0xc4, 0xc4, 0xc4, 0xc4, 0x2b, 0xa8, 0xe2, 0x74, 0xb, 0xaa, 0x54, 0x2a, 0xb5, 0x3d, 0x3b, 0x3b, 0x1b, 0x2e, 0x9a, 0xf0, 0xc8, 0x64, 0x8e, 0x4a, 0xb2, 0x6b, 0x80, 0x60, 0xfa, 0xbc, 0xbb, 0xbb, 0x4b, 0x7c, 0xf1, 0x6d, 0x6d, 0x6d, 0xf6, 0xfe, 0xfe, 0xfe, 0xbb, 0x2d, 0x2d, 0x2d, 0x2e, 0x10, 0x50, 0x26, 0x96, 0x65, 0xff, 0x90, 0x48, 0xf5, 0xf5, 0xf5, 0xd6, 0x92, 0x4, 0xb1, 0xbe, 0xbe, 0xbe, 0x46, 0xea, 0x3b, 0x3c, 0x3c, 0x3c, 0x8, 0x69, 0xf4, 0xc6, 0x60, 0x30, 0xd4, 0x96, 0x5d, 0x6a, 0x80, 0x6c, 0x4e, 0x90, 0xf8, 0xd9, 0xed, 0x76, 0xb, 0x40, 0x78, 0x5d, 0x2c, 0x8, 0x9a, 0x3, 0x1, 0x73, 0xc3, 0x3e, 0x89, 0x1f, 0xcc, 0x10, 0x6e, 0x80, 0x70, 0xa9, 0x6c, 0x8b, 0x25, 0xe4, 0x38, 0xd1, 0x14, 0xd9, 0xdc, 0xdc, 0x6c, 0xc3, 0x31, 0xbc, 0x50, 0xd8, 0xf4, 0xfa, 0xa, 0x4, 0x71, 0x3c, 0x31, 0x2b, 0x8, 0x82, 0xa6, 0x59, 0x3, 0x41, 0x20, 0x88, 0x63, 0xab, 0xac, 0xac, 0x24, 0x2a, 0x82, 0x55, 0x55, 0x55, 0x86, 0xa2, 0x17, 0x60, 0x15, 0xf7, 0x18, 0xe2, 0xd3, 0xd3, 0xd3, 0x6f, 0x4f, 0xea, 0x9e, 0x20, 0xb1, 0x37, 0x48, 0xce, 0x15, 0x89, 0x44, 0x3e, 0x19, 0x8d, 0xc6, 0x17, 0xcc, 0x29, 0x37, 0xa7, 0x7a, 0x7a, 0x7a, 0x3c, 0xe, 0x87, 0xe3, 0x3a, 0x69, 0x5, 0x56, 0x65, 0xcf, 0x32, 0x1c, 0xe, 0xcf, 0xa8, 0x1d, 0x61, 0xb0, 0xe6, 0x3b, 0xd2, 0x3d, 0x4b, 0xd5, 0x52, 0x43, 0xa7, 0xd3, 0xa9, 0x3a, 0xd7, 0x80, 0xf2, 0x64, 0x6d, 0x36, 0x9b, 0x93, 0xfa, 0x62, 0x69, 0xb1, 0x58, 0x2e, 0xc2, 0x44, 0x7a, 0x85, 0x7a, 0x10, 0xd, 0xd, 0xd, 0x97, 0xa1, 0x8e, 0xd4, 0x52, 0xf, 0xc2, 0x6a, 0xb5, 0x36, 0x9e, 0xa5, 0x19, 0x94, 0x2d, 0x8, 0xe8, 0x16, 0x76, 0x14, 0x54, 0xc7, 0x13, 0xaa, 0x3, 0x41, 0x30, 0xbf, 0x36, 0x6f, 0xb4, 0x9, 0x42, 0x96, 0xe5, 0x9c, 0x9a, 0x20, 0x9a, 0x9a, 0x9a, 0xae, 0x6a, 0x52, 0x59, 0x3a, 0x9d, 0xce, 0x6b, 0x81, 0x40, 0xe0, 0xe9, 0x49, 0xca, 0x12, 0x94, 0x67, 0x70, 0x69, 0x69, 0xe9, 0xdb, 0x69, 0xe7, 0xf2, 0x78, 0x3c, 0xee, 0xee, 0xee, 0xee, 0xde, 0xbf, 0x29, 0x4b, 0xd0, 0x2c, 0x6c, 0x6b, 0x6b, 0xeb, 0x8d, 0xb3, 0xce, 0xf6, 0x9a, 0xb9, 0x1b, 0x3e, 0x32, 0x32, 0x72, 0x8f, 0xe4, 0x9a, 0xfd, 0x7e, 0xbf, 0xb7, 0xc8, 0x4b, 0xef, 0x6b, 0xaa, 0x46, 0x48, 0x92, 0x94, 0x25, 0xf1, 0x4b, 0xa7, 0xd3, 0x12, 0x8e, 0xe1, 0xb8, 0x1f, 0x81, 0x20, 0x10, 0x4, 0x82, 0x40, 0x10, 0x8, 0x2, 0x41, 0x20, 0x8, 0x4, 0x81, 0x20, 0x10, 0x4, 0x82, 0x40, 0x10, 0x8, 0x2, 0x41, 0x20, 0x8, 0x4, 0x51, 0x7e, 0x20, 0x58, 0xc4, 0xc0, 0xb0, 0x9c, 0x24, 0x49, 0x88, 0xa1, 0x10, 0x11, 0x85, 0xbf, 0xe, 0xa0, 0x1d, 0x82, 0x20, 0x8, 0xdf, 0x39, 0xaf, 0xd7, 0xeb, 0x13, 0x45, 0x31, 0xa9, 0x95, 0x10, 0x2d, 0xb2, 0xdf, 0xa9, 0x26, 0xcb, 0xf2, 0x91, 0xcf, 0xe7, 0x7b, 0xa4, 0x5f, 0x58, 0x58, 0x58, 0xe3, 0x79, 0xbe, 0xd7, 0xef, 0xf7, 0x3f, 0x6f, 0x6f, 0x6f, 0xbf, 0x55, 0x1, 0xf6, 0x1f, 0x41, 0x64, 0x9, 0xfd, 0xa, 0xf9, 0x7c, 0x70, 0x9e, 0x85, 0x72, 0xb9, 0x9c, 0xbc, 0xb9, 0xb9, 0xb9, 0x31, 0x3e, 0x3e, 0xfe, 0x64, 0x6a, 0x6a, 0xea, 0xfd, 0x4f, 0x1, 0x6, 0x0, 0xec, 0x28, 0x31, 0x86, 0x11, 0x87, 0xbb, 0xa9, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; + + + + + (NSData *)facebook_icon3x_png { + return [NSData dataWithBytes:facebook_icon3x_png length:sizeof(facebook_icon3x_png)]; + } + + const unsigned char parse_logo_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xde, 0x0, 0x0, 0x0, 0x44, 0x8, 0x6, 0x0, 0x0, 0x0, 0xee, 0x9a, 0x8b, 0x92, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9, 0x65, 0x3c, 0x0, 0x0, 0x3, 0x23, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x35, 0x2d, 0x63, 0x30, 0x31, 0x34, 0x20, 0x37, 0x39, 0x2e, 0x31, 0x35, 0x31, 0x34, 0x38, 0x31, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2f, 0x30, 0x33, 0x2f, 0x31, 0x33, 0x2d, 0x31, 0x32, 0x3a, 0x30, 0x39, 0x3a, 0x31, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x43, 0x20, 0x28, 0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x29, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x44, 0x43, 0x37, 0x45, 0x43, 0x42, 0x35, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x44, 0x43, 0x37, 0x45, 0x43, 0x42, 0x36, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x31, 0x30, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x44, 0x43, 0x37, 0x45, 0x43, 0x42, 0x34, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, 0x3f, 0x3e, 0xf6, 0xc4, 0x10, 0x9d, 0x0, 0x0, 0x11, 0x8e, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec, 0x5d, 0x9, 0x98, 0x54, 0xc5, 0x11, 0xae, 0xdd, 0x9d, 0x5, 0x59, 0x90, 0x9b, 0x5, 0xb9, 0x5, 0x11, 0xf0, 0x2, 0x14, 0x54, 0x54, 0x22, 0x6e, 0x44, 0x3c, 0x50, 0xbc, 0x95, 0xc3, 0x88, 0x9, 0x41, 0x3c, 0x21, 0x1e, 0x68, 0x30, 0x11, 0x8f, 0x18, 0x3c, 0x51, 0x14, 0x13, 0x94, 0x28, 0x26, 0x9e, 0x78, 0x44, 0x12, 0x15, 0x25, 0xe0, 0x89, 0x8a, 0x28, 0x88, 0xa0, 0xe2, 0xe2, 0x2, 0x72, 0xca, 0xd, 0xcb, 0xd, 0x7b, 0xb0, 0xe9, 0xdf, 0xf7, 0xf7, 0x37, 0x9d, 0x9, 0xc8, 0xcc, 0xce, 0x3b, 0xe6, 0x3d, 0xba, 0xbe, 0xaf, 0xbe, 0xe9, 0xd9, 0x9d, 0x79, 0xd3, 0xaf, 0xbb, 0xff, 0xea, 0xaa, 0xea, 0xaa, 0x7a, 0x59, 0xfd, 0xae, 0xbd, 0xe5, 0x55, 0x11, 0x69, 0xa3, 0xb8, 0x5c, 0xfc, 0xa1, 0x2c, 0xc5, 0x6b, 0x15, 0x17, 0x2a, 0xfe, 0x54, 0xf1, 0xc7, 0x8a, 0x97, 0x8b, 0x25, 0x4b, 0x11, 0xa5, 0x8a, 0x8a, 0xa, 0xc5, 0x22, 0xf7, 0xe, 0x1f, 0x2a, 0xcd, 0x9b, 0x1c, 0xf4, 0xd3, 0xdf, 0x62, 0x8a, 0x4f, 0x52, 0xdc, 0x30, 0x80, 0xfe, 0xf4, 0x50, 0x7c, 0x9d, 0xe2, 0x95, 0x8a, 0xa7, 0x29, 0xfe, 0x87, 0xe2, 0xc9, 0x8a, 0xcb, 0xec, 0x54, 0x59, 0x8a, 0x3a, 0x1, 0x78, 0xbb, 0xd9, 0xde, 0xaa, 0x78, 0x1, 0x77, 0x24, 0xcf, 0xc0, 0xaf, 0xb8, 0x8a, 0xe2, 0x3a, 0x8a, 0x1b, 0xf0, 0xf7, 0x21, 0x2, 0x2e, 0x26, 0xcf, 0x54, 0x7c, 0xa7, 0xe2, 0x37, 0xed, 0xd4, 0x58, 0x8a, 0x3a, 0xf0, 0x34, 0xcd, 0x50, 0x7c, 0xaa, 0x4f, 0xbf, 0x59, 0x53, 0x71, 0x63, 0xc5, 0xc7, 0x2a, 0x3e, 0x9b, 0xbb, 0x5f, 0x75, 0xc5, 0x9d, 0x15, 0xbf, 0xa1, 0x78, 0x82, 0xe2, 0x6b, 0x15, 0xaf, 0xb3, 0x53, 0x64, 0x29, 0x8a, 0x94, 0x9d, 0x60, 0x7b, 0xf9, 0x41, 0x50, 0x25, 0x37, 0x28, 0xfe, 0x46, 0xf1, 0xd3, 0x8a, 0xcf, 0x53, 0xdc, 0x41, 0xf1, 0x63, 0x8a, 0x77, 0xf2, 0x33, 0x97, 0xd0, 0xfe, 0xeb, 0x64, 0xa7, 0xc8, 0x52, 0xd4, 0x81, 0x17, 0x24, 0x2d, 0x54, 0x7c, 0xbd, 0xe2, 0xe3, 0x15, 0x4f, 0xe7, 0xdf, 0xe0, 0xf0, 0x79, 0x57, 0x71, 0x81, 0x9d, 0x26, 0x4b, 0x16, 0x78, 0xde, 0xd2, 0x1c, 0xc5, 0xa7, 0x28, 0xfe, 0x2b, 0xdf, 0xc3, 0x16, 0x7c, 0x4d, 0xf1, 0x71, 0x76, 0xaa, 0x2c, 0x59, 0xe0, 0x79, 0x4b, 0xbb, 0x14, 0x5f, 0xad, 0xf8, 0x76, 0xbe, 0xaf, 0xad, 0xf8, 0x45, 0xc5, 0xcd, 0xec, 0x74, 0x59, 0xb2, 0xc0, 0xf3, 0x9e, 0xee, 0x56, 0xfc, 0x0, 0xdb, 0x7, 0x2b, 0xfe, 0x8b, 0x8f, 0x76, 0xa8, 0x25, 0x4b, 0xfb, 0x2d, 0xf0, 0x40, 0xb7, 0x88, 0xe3, 0xe5, 0x4, 0xf5, 0x52, 0x7c, 0xa5, 0x9d, 0x32, 0x4b, 0x16, 0x78, 0xde, 0x13, 0xce, 0xfd, 0xe0, 0x74, 0x59, 0xc5, 0xf7, 0xb7, 0x29, 0xce, 0xb7, 0xd3, 0x66, 0xc9, 0x2, 0xcf, 0x7b, 0x5a, 0xac, 0x78, 0x4, 0xdb, 0x4d, 0xc5, 0x89, 0x76, 0xb1, 0x64, 0xc9, 0x2, 0xcf, 0x7, 0x7a, 0x46, 0xf1, 0x6c, 0xb6, 0x2f, 0x57, 0x5c, 0xd7, 0x4e, 0x9d, 0x25, 0xb, 0x3c, 0xef, 0xa9, 0x44, 0xf1, 0xe3, 0x6c, 0xc3, 0xbb, 0xd9, 0xdb, 0x4e, 0x9d, 0x25, 0xb, 0x3c, 0x7f, 0x68, 0xa2, 0x38, 0x1, 0xd5, 0xa0, 0xf3, 0xec, 0xd4, 0x59, 0xb2, 0xc0, 0xf3, 0x87, 0xd6, 0x2b, 0x7e, 0x8f, 0x6d, 0x44, 0xb8, 0x34, 0xb0, 0xd3, 0x67, 0xc9, 0x2, 0xcf, 0x1f, 0xd2, 0xc0, 0x3, 0xe8, 0xe, 0xb7, 0xd3, 0x67, 0x29, 0xac, 0x14, 0xb, 0x59, 0x7f, 0xbf, 0x34, 0xda, 0x0, 0xde, 0x7, 0x2e, 0x5f, 0x1f, 0x7, 0xf4, 0x4d, 0x79, 0xed, 0x76, 0x8a, 0x9b, 0x28, 0xce, 0x13, 0xe7, 0x58, 0x3, 0xb4, 0x51, 0xf1, 0xf, 0x8a, 0xe7, 0x8b, 0x93, 0xc8, 0xbb, 0xde, 0xa7, 0xfb, 0x46, 0xbf, 0xaa, 0x89, 0x93, 0xac, 0xbc, 0xcb, 0xa5, 0x6b, 0xe6, 0x48, 0xfa, 0xc9, 0xcf, 0xb8, 0x46, 0x73, 0xc5, 0x6d, 0xc5, 0x9, 0x72, 0x40, 0xc6, 0x49, 0x9d, 0x84, 0xcf, 0x14, 0x8b, 0x73, 0x1c, 0xb4, 0x48, 0x9c, 0xb4, 0xb3, 0x25, 0x2e, 0xde, 0x83, 0x9b, 0x73, 0xde, 0x8e, 0xf7, 0x1, 0x1f, 0x42, 0xd, 0xce, 0x39, 0xfe, 0xb7, 0x59, 0x9c, 0x44, 0xed, 0x22, 0xc5, 0xf3, 0x14, 0xaf, 0x30, 0xd6, 0xc3, 0x7e, 0x3, 0xbc, 0x95, 0x5c, 0xec, 0xf5, 0x14, 0xb7, 0x76, 0x71, 0xd7, 0xef, 0x48, 0xbb, 0xb1, 0xa7, 0xe2, 0xf6, 0x1c, 0xf8, 0x7d, 0x11, 0xb2, 0xe8, 0x91, 0x41, 0xf1, 0x8a, 0x38, 0x87, 0xfc, 0x9b, 0x3d, 0xbc, 0xef, 0x2b, 0x14, 0xdf, 0x27, 0xce, 0xd1, 0xca, 0x99, 0xfc, 0xed, 0x64, 0xa9, 0x85, 0xe2, 0x13, 0x15, 0x1f, 0xa3, 0xb8, 0x15, 0xb5, 0x85, 0xfa, 0x4, 0xc1, 0xf9, 0xe2, 0x38, 0xae, 0x52, 0x5, 0xdb, 0x9, 0x8a, 0x2f, 0x54, 0xdc, 0x5d, 0x9c, 0x60, 0xf6, 0x6a, 0x49, 0x7e, 0xb7, 0x84, 0xc0, 0xfb, 0x94, 0x36, 0xfb, 0x54, 0x71, 0xf2, 0x40, 0x83, 0xa0, 0xc3, 0x14, 0x5f, 0xa4, 0xf8, 0x74, 0xc5, 0x47, 0x24, 0x39, 0xe7, 0x5b, 0x8, 0xbe, 0x77, 0x14, 0xa3, 0x72, 0xc3, 0x37, 0xfb, 0xb, 0xf0, 0x70, 0xe3, 0x1b, 0x8, 0xbc, 0xfa, 0x69, 0x5e, 0xb, 0x3, 0x8d, 0xe4, 0xdb, 0xdf, 0x8a, 0x13, 0x84, 0x9d, 0x18, 0x8e, 0xb6, 0x9b, 0xd2, 0x7a, 0x13, 0x77, 0x6, 0xec, 0x7c, 0xb5, 0xf9, 0xaa, 0xd5, 0xdd, 0xde, 0x64, 0x2c, 0xa6, 0x87, 0x14, 0x8f, 0x93, 0x78, 0x6a, 0x93, 0x9b, 0xd4, 0x8a, 0xf7, 0x8b, 0x9c, 0xc5, 0x9a, 0x49, 0x0, 0xf, 0xf3, 0x8a, 0x3c, 0xc7, 0x41, 0x8a, 0xbb, 0xf1, 0x7b, 0x89, 0x54, 0x93, 0x80, 0x29, 0x49, 0x41, 0x40, 0x61, 0xbc, 0x6e, 0x56, 0x7c, 0xf4, 0x1e, 0xfe, 0x5f, 0xc6, 0xb1, 0xda, 0xc6, 0x6b, 0x66, 0xf1, 0x77, 0x6b, 0x19, 0xc0, 0xac, 0x42, 0xa0, 0x82, 0x2f, 0xe7, 0xb8, 0x3d, 0x25, 0x4e, 0x38, 0xa0, 0x5f, 0xda, 0x43, 0x77, 0xde, 0xc3, 0xa9, 0xec, 0x8f, 0x49, 0x15, 0x9c, 0x73, 0x8, 0xd1, 0x52, 0xc5, 0xb9, 0x8a, 0xf, 0xe4, 0x3d, 0xe4, 0xb0, 0x7d, 0x1c, 0xf9, 0x36, 0x9a, 0x3e, 0xf, 0x13, 0x88, 0x91, 0x6, 0xde, 0xe, 0x4e, 0xac, 0x96, 0xbc, 0x95, 0x5, 0xdc, 0x60, 0x71, 0x12, 0x6d, 0x5b, 0x24, 0x0, 0xed, 0x3b, 0xc5, 0x1f, 0x2a, 0xfe, 0x84, 0xd2, 0x6c, 0xd, 0x25, 0x72, 0x39, 0x17, 0x4f, 0x4d, 0xaa, 0x56, 0x5d, 0xc4, 0x49, 0xde, 0xfd, 0x5, 0xff, 0x8e, 0xeb, 0x3c, 0xca, 0x9d, 0x69, 0x60, 0x82, 0x4a, 0xec, 0x6, 0x95, 0x1b, 0xb, 0x63, 0x5f, 0x6a, 0xe, 0x42, 0xeb, 0xee, 0x92, 0x3d, 0xe7, 0x32, 0x6e, 0xa5, 0xd6, 0xa0, 0xf3, 0x21, 0x93, 0x15, 0x12, 0x87, 0x2a, 0x1e, 0x2b, 0x4e, 0xe6, 0x88, 0x79, 0xad, 0x4f, 0xa9, 0xee, 0xcf, 0xe6, 0x6e, 0xac, 0x81, 0x57, 0x4a, 0xe0, 0xe5, 0x71, 0xb1, 0xe6, 0x73, 0x87, 0x41, 0xa2, 0xf3, 0x49, 0x6c, 0xc7, 0x38, 0x6e, 0xe8, 0x2b, 0x42, 0x1, 0x6f, 0x55, 0xfc, 0x9c, 0x87, 0x6b, 0x7, 0xf7, 0x70, 0xbf, 0xfc, 0xff, 0x51, 0xd4, 0x7c, 0x2, 0x8, 0x73, 0xfe, 0xad, 0x31, 0xe7, 0xa5, 0xec, 0x63, 0xd, 0xa, 0x7a, 0x7c, 0xbf, 0xab, 0x38, 0x69, 0x6a, 0x1d, 0xf8, 0xbf, 0xd3, 0xc8, 0x28, 0x59, 0x82, 0xf0, 0xc6, 0x39, 0x51, 0x5, 0x5e, 0x2e, 0x59, 0x24, 0xf5, 0x80, 0x69, 0x48, 0xec, 0x3e, 0xe2, 0x94, 0x96, 0x30, 0xd5, 0xd4, 0xd5, 0x8a, 0x5f, 0xe6, 0xa4, 0x7f, 0x29, 0x7b, 0xaf, 0xf9, 0xb2, 0x83, 0xb, 0x16, 0xb, 0xec, 0x23, 0xee, 0x70, 0x87, 0x28, 0xbe, 0x8a, 0xbb, 0xe6, 0x81, 0x5c, 0xec, 0xd3, 0x8, 0xbe, 0x17, 0x7d, 0x1e, 0x9b, 0x7c, 0x4a, 0xdf, 0xbe, 0x9, 0x7f, 0x2f, 0xa2, 0x2a, 0x3c, 0x85, 0x6a, 0xd2, 0xaa, 0x14, 0xd5, 0xcb, 0xd3, 0x39, 0x36, 0xf5, 0xf8, 0x7e, 0xa9, 0xe2, 0x31, 0x8a, 0x5f, 0x52, 0xbc, 0x6c, 0x1f, 0xdf, 0xdd, 0x2e, 0x4e, 0x15, 0x1, 0xd8, 0xc5, 0xa8, 0x70, 0x30, 0x9e, 0x2, 0xf3, 0x8, 0xf6, 0x73, 0x0, 0xfb, 0xd, 0x5b, 0xfa, 0x59, 0xaa, 0xb0, 0x43, 0xb8, 0xe8, 0xdd, 0xa4, 0x6b, 0x14, 0x8f, 0xe4, 0x1c, 0x9, 0x6d, 0xcc, 0x7f, 0x29, 0x7e, 0x42, 0x9c, 0x62, 0x5b, 0x25, 0xfb, 0xd0, 0xb2, 0x56, 0x52, 0x50, 0xfd, 0x93, 0xeb, 0xa8, 0x13, 0x85, 0x6c, 0x7f, 0xee, 0x86, 0x3d, 0xb9, 0x93, 0xde, 0x45, 0x93, 0xa0, 0x3c, 0x99, 0xc5, 0x18, 0x26, 0xca, 0xe3, 0xae, 0x23, 0x29, 0xda, 0x6, 0x47, 0x71, 0xe1, 0x3d, 0x67, 0x80, 0xe, 0x8b, 0x61, 0x28, 0xa5, 0x2f, 0xe2, 0x41, 0x3f, 0x97, 0xd4, 0xb, 0x2d, 0xc1, 0x4e, 0xba, 0x91, 0x92, 0x7c, 0xaa, 0xd1, 0x47, 0x2c, 0xa2, 0x5f, 0xf9, 0x38, 0x2e, 0x28, 0xa1, 0x31, 0x3d, 0x1, 0x74, 0xef, 0x2b, 0x3e, 0x47, 0xf1, 0x91, 0xec, 0xe3, 0x3b, 0x4, 0x4d, 0x2a, 0xa0, 0xc3, 0xae, 0xfe, 0xba, 0x1, 0xba, 0xd1, 0x1c, 0xcb, 0x7, 0x92, 0x0, 0xdd, 0xcf, 0xed, 0xde, 0x73, 0xb8, 0x43, 0x1c, 0xce, 0x5d, 0x48, 0xef, 0xbc, 0x57, 0x11, 0x9c, 0x6e, 0xd1, 0x1, 0xbc, 0xde, 0x18, 0x3, 0x74, 0x93, 0x38, 0x5e, 0x97, 0x70, 0xa7, 0x4b, 0xd5, 0xc6, 0x85, 0x66, 0x34, 0x8b, 0x1a, 0x13, 0xc6, 0xe2, 0x6f, 0xbc, 0xa7, 0xaa, 0x8a, 0xef, 0x21, 0xa0, 0xeb, 0x45, 0xd, 0x78, 0xb5, 0xc, 0xdb, 0x6e, 0x65, 0x92, 0xdf, 0x19, 0x46, 0x69, 0x5b, 0x60, 0x78, 0x26, 0x87, 0x53, 0x5d, 0x18, 0xcd, 0x5d, 0x2c, 0x5d, 0xfa, 0x9e, 0x52, 0xef, 0x21, 0x43, 0xd, 0x1e, 0xc7, 0x85, 0xeb, 0x35, 0x9d, 0x45, 0xd0, 0xb7, 0xe2, 0xfb, 0xc5, 0x74, 0x1a, 0x14, 0x70, 0xa7, 0xab, 0xac, 0x7, 0xb1, 0xa5, 0x38, 0xa1, 0x7a, 0x7, 0x70, 0x61, 0x5d, 0x41, 0x41, 0xb5, 0xc9, 0xc5, 0xbe, 0xaf, 0x23, 0x0, 0x7b, 0x48, 0xbc, 0xc4, 0x63, 0x3f, 0x89, 0xe7, 0x62, 0xa6, 0x43, 0x75, 0x79, 0xff, 0x3, 0xf8, 0xbe, 0x98, 0xf7, 0x80, 0xf1, 0x9a, 0xeb, 0x52, 0xff, 0x97, 0x52, 0xdb, 0x39, 0x8d, 0x42, 0x58, 0xcf, 0x7, 0x2a, 0x27, 0x34, 0x8b, 0x12, 0xf0, 0xe, 0x31, 0xc, 0xf5, 0xc2, 0x24, 0xbf, 0x53, 0xc0, 0xc5, 0x23, 0x54, 0x8f, 0x3a, 0x50, 0xed, 0xd8, 0xe2, 0x72, 0xdf, 0x20, 0x9, 0x6f, 0x12, 0x27, 0x8f, 0x50, 0x3b, 0x12, 0x9e, 0x10, 0x6f, 0xb3, 0x29, 0xe0, 0xe1, 0x7c, 0xcd, 0x90, 0xe6, 0x13, 0xe8, 0xbd, 0x7c, 0xd5, 0x85, 0x6b, 0x63, 0x8c, 0x1a, 0x1b, 0x3b, 0xd1, 0x33, 0x1e, 0xde, 0xc7, 0xc7, 0x54, 0x69, 0x7f, 0xe4, 0xfb, 0x6b, 0xd3, 0x1c, 0xb7, 0xea, 0x1c, 0x17, 0x5d, 0xbc, 0xeb, 0x3b, 0xda, 0xe3, 0x5e, 0xdd, 0x3, 0x76, 0xce, 0xe3, 0xd, 0x27, 0x4b, 0x7, 0xee, 0xac, 0xcd, 0xa2, 0x2, 0xbc, 0x2e, 0x86, 0x93, 0x21, 0x59, 0xe0, 0x5d, 0x47, 0xd5, 0xa0, 0x2f, 0x6d, 0xbc, 0x65, 0x1e, 0xf7, 0x11, 0xd2, 0xfa, 0x79, 0xb6, 0xf, 0xa6, 0xde, 0xef, 0x5, 0x75, 0xa5, 0x1d, 0x59, 0x95, 0xef, 0x1, 0xf8, 0x4b, 0x5d, 0xda, 0xc1, 0xbb, 0xf2, 0x5a, 0xa0, 0x17, 0xb8, 0x7b, 0x7b, 0x4d, 0xdf, 0xd2, 0x16, 0x9b, 0xc4, 0xdf, 0x5e, 0x53, 0xc9, 0xeb, 0xc0, 0xf6, 0xff, 0x3b, 0x6d, 0x2e, 0xe1, 0xdc, 0x43, 0xf8, 0x7e, 0xed, 0x71, 0xff, 0xd7, 0xd3, 0x71, 0xf3, 0x2c, 0xdf, 0x1f, 0x41, 0xb5, 0xb3, 0x6e, 0x14, 0x80, 0x57, 0x60, 0xa8, 0x53, 0xf3, 0x93, 0xfc, 0x4e, 0x11, 0x8d, 0x76, 0x3f, 0x9d, 0x1d, 0x37, 0xb0, 0x8f, 0x42, 0xf5, 0xe6, 0x28, 0x17, 0xaf, 0xd, 0x9b, 0xa4, 0xe, 0x17, 0x97, 0xb6, 0x77, 0x87, 0xbb, 0xa4, 0x9e, 0x69, 0xea, 0x6f, 0x38, 0x21, 0xee, 0xf5, 0x71, 0xdc, 0x26, 0x52, 0x55, 0x7b, 0x2f, 0x8d, 0x6b, 0xdc, 0xa1, 0xf8, 0x2, 0xb6, 0xe1, 0x10, 0xe9, 0x25, 0xf1, 0x7c, 0x4e, 0xaf, 0x9, 0x73, 0xf3, 0x6b, 0xee, 0xb6, 0x42, 0x27, 0xcc, 0x38, 0xd9, 0x83, 0x23, 0x30, 0x4c, 0xc0, 0x6b, 0xc5, 0xed, 0x5c, 0xab, 0x26, 0xdb, 0x53, 0x1c, 0x10, 0x3f, 0x69, 0x4d, 0x82, 0xca, 0x39, 0xd8, 0x45, 0x75, 0x16, 0x93, 0x88, 0xa3, 0x8b, 0x36, 0xfc, 0xdb, 0xa3, 0x54, 0xb, 0xdd, 0xa2, 0xaa, 0x86, 0x8a, 0xf6, 0xae, 0xf, 0x3b, 0x85, 0x9b, 0x84, 0x7e, 0xff, 0x91, 0xed, 0xb5, 0xdc, 0x39, 0x57, 0xf9, 0xdc, 0x87, 0x32, 0xa, 0xdb, 0xcf, 0xf9, 0xfe, 0x7c, 0x9a, 0x20, 0xa1, 0x5, 0xde, 0x25, 0x86, 0x2d, 0xf3, 0x6a, 0x8, 0xfa, 0xfb, 0x3c, 0xd5, 0x27, 0x10, 0xa2, 0x62, 0xdc, 0x8, 0xea, 0xde, 0x4e, 0x67, 0x41, 0x7f, 0x3, 0x18, 0x37, 0xb9, 0xdc, 0xef, 0x36, 0x74, 0xac, 0x80, 0xa6, 0x84, 0x68, 0x7d, 0xc0, 0xae, 0x7b, 0xd0, 0xd8, 0x5d, 0xae, 0x37, 0xc6, 0xdf, 0x6f, 0xda, 0x42, 0xa7, 0x4b, 0x31, 0xdf, 0x23, 0x91, 0xfb, 0xc8, 0x30, 0x2, 0xaf, 0x16, 0x6f, 0x44, 0x1b, 0xca, 0x53, 0x43, 0xd0, 0x67, 0xa8, 0x69, 0xfa, 0x40, 0xb8, 0x11, 0x8d, 0xfb, 0x74, 0xa9, 0xb6, 0x1, 0xb4, 0x62, 0xda, 0xaf, 0x6e, 0x9f, 0x79, 0x35, 0x93, 0x78, 0x44, 0x47, 0x61, 0x88, 0x80, 0x77, 0x3d, 0x9d, 0x1a, 0x42, 0x35, 0xfc, 0xa5, 0x80, 0xfb, 0x33, 0x57, 0xe2, 0x95, 0x13, 0xaa, 0x1b, 0x1a, 0x50, 0xa8, 0x80, 0x37, 0x88, 0x8e, 0xa, 0xa1, 0xce, 0xbc, 0x3d, 0x24, 0xfd, 0x7e, 0xc3, 0x0, 0x86, 0x1b, 0xe5, 0xf1, 0xab, 0x18, 0x76, 0xdd, 0x83, 0x14, 0x42, 0x6e, 0x53, 0xbe, 0xa1, 0xd6, 0xae, 0x9, 0xc9, 0x38, 0xe7, 0xd3, 0x31, 0x3, 0xc2, 0x11, 0xc5, 0x9d, 0x19, 0xd2, 0x2f, 0xd4, 0x87, 0x9d, 0x9e, 0x95, 0x95, 0x25, 0x25, 0xa5, 0x25, 0xbd, 0x67, 0xcd, 0x9d, 0xd7, 0x23, 0x4c, 0xc0, 0x83, 0xea, 0x73, 0x2b, 0xdb, 0x70, 0xa8, 0x3c, 0x1d, 0x22, 0x29, 0x5c, 0x28, 0xf1, 0x40, 0x5a, 0x37, 0xcb, 0xd1, 0xc3, 0x61, 0x34, 0xc6, 0xa3, 0x3e, 0xe7, 0x26, 0xd8, 0x94, 0x61, 0x20, 0xa8, 0xdf, 0x4d, 0xd8, 0x7e, 0x52, 0x9c, 0xe0, 0x88, 0x4c, 0x20, 0x8, 0xdd, 0x3f, 0xa1, 0x11, 0x8b, 0xc5, 0x64, 0xf2, 0x87, 0x9f, 0xdc, 0xb0, 0x79, 0xeb, 0xb6, 0x50, 0x0, 0x2f, 0xc6, 0x5, 0xa6, 0x5d, 0xb2, 0x77, 0x88, 0xbb, 0x7, 0xb8, 0x5e, 0x53, 0xb9, 0x1, 0x3c, 0x44, 0xcc, 0xd4, 0x71, 0xe9, 0xba, 0xe3, 0x3c, 0x1c, 0x87, 0x5d, 0x86, 0x50, 0xae, 0x1f, 0x82, 0x31, 0xc6, 0x19, 0xad, 0x8e, 0x12, 0x82, 0x4b, 0x7f, 0x6c, 0x86, 0xf5, 0xef, 0x6d, 0xc5, 0x1f, 0xc7, 0x72, 0x72, 0x64, 0xed, 0xfa, 0x8d, 0xa7, 0x7d, 0x53, 0x58, 0x74, 0x6c, 0x18, 0x80, 0x37, 0x4a, 0x9c, 0xa8, 0x0, 0xd0, 0xb, 0x19, 0xa0, 0xb7, 0x57, 0x86, 0xb4, 0x81, 0xf, 0xc7, 0x90, 0x1b, 0xcf, 0x21, 0x5c, 0xc7, 0xb1, 0xf0, 0x8a, 0x4c, 0x2f, 0x60, 0xdb, 0x10, 0x8c, 0x2f, 0x82, 0xae, 0x75, 0x52, 0x34, 0xdc, 0xf8, 0xcb, 0x32, 0xac, 0x7f, 0x38, 0x73, 0x46, 0x58, 0x99, 0x28, 0x95, 0x33, 0x7b, 0xea, 0xb4, 0xe9, 0x7d, 0x32, 0x1d, 0x78, 0xa3, 0x24, 0x5e, 0xca, 0xf, 0xbb, 0xc6, 0x10, 0x9, 0x27, 0xad, 0xe0, 0x2b, 0xdc, 0xf4, 0xf5, 0x5c, 0xb8, 0xde, 0x5b, 0xc6, 0x35, 0xbd, 0x20, 0x84, 0xbf, 0xe9, 0x38, 0xd8, 0x30, 0x14, 0x95, 0x3a, 0xc7, 0x68, 0x4f, 0xc8, 0xd0, 0x3e, 0x22, 0x28, 0x60, 0x75, 0x95, 0xdc, 0x5c, 0x59, 0xb8, 0x64, 0xf9, 0x99, 0xab, 0xd6, 0xac, 0xab, 0x96, 0x89, 0xc0, 0x83, 0xf3, 0x0, 0xae, 0xf8, 0xdf, 0xf1, 0x3d, 0x62, 0x32, 0x2f, 0x95, 0xf0, 0x3e, 0x2b, 0xaf, 0x38, 0xc1, 0x39, 0x92, 0x2e, 0xbd, 0xee, 0x71, 0x7f, 0x91, 0x23, 0x37, 0x83, 0x6d, 0x38, 0x3, 0x2e, 0xc8, 0xe0, 0xb1, 0xc5, 0xfa, 0x3d, 0x99, 0x6d, 0xc4, 0x4a, 0x7e, 0x96, 0xa1, 0xfd, 0xc4, 0x99, 0xe2, 0xfb, 0xd9, 0xd9, 0x59, 0xb2, 0x7d, 0xc7, 0xce, 0x43, 0x7f, 0x58, 0xbe, 0xa2, 0x63, 0xa6, 0x1, 0xf, 0x51, 0xb, 0x38, 0x78, 0xec, 0x6b, 0x2c, 0x82, 0xb3, 0x24, 0xb8, 0xf3, 0x18, 0xb7, 0x54, 0xd, 0x31, 0xd4, 0xcd, 0x74, 0x68, 0x87, 0xa4, 0x91, 0xf5, 0x9c, 0x2, 0x99, 0x8e, 0x1b, 0xa8, 0x49, 0xa7, 0x66, 0xe8, 0xd8, 0x1e, 0x4a, 0x6, 0x21, 0x9f, 0x2e, 0x93, 0xbd, 0xdd, 0x3f, 0x1d, 0x81, 0xed, 0x2e, 0x2f, 0x97, 0xa2, 0x45, 0x4b, 0x4e, 0x34, 0x81, 0x17, 0x94, 0x7, 0xb, 0x6, 0x3c, 0xe, 0xc7, 0x91, 0xc6, 0xf2, 0xa6, 0x61, 0x57, 0x20, 0xaf, 0xd, 0x67, 0x5f, 0xb3, 0x25, 0xdc, 0x94, 0xe5, 0x32, 0x88, 0xfd, 0x98, 0xa7, 0x89, 0xda, 0x2e, 0x11, 0xe7, 0xec, 0x10, 0xf3, 0x32, 0x52, 0x32, 0xcf, 0xd9, 0xd2, 0x56, 0xe2, 0x1, 0xf0, 0x9f, 0x64, 0xf8, 0x3a, 0xc0, 0x6e, 0x5c, 0x1e, 0xcb, 0x8d, 0xc9, 0xf7, 0xb, 0x17, 0x77, 0x36, 0x13, 0x61, 0x71, 0x70, 0x8a, 0x4c, 0xe0, 0x1c, 0xf1, 0xfe, 0x39, 0xe8, 0x31, 0xfe, 0x1e, 0xe, 0x3c, 0x3b, 0x25, 0x4c, 0x28, 0xec, 0x8b, 0xfb, 0xc9, 0x41, 0x14, 0xc5, 0xc1, 0xfd, 0xd7, 0xa2, 0xca, 0x8b, 0x7e, 0x9a, 0x45, 0x86, 0xf0, 0xa, 0x7f, 0x30, 0x22, 0x13, 0x76, 0x46, 0x0, 0xc8, 0x3f, 0x47, 0xd7, 0xf1, 0xde, 0xfb, 0xd1, 0x3e, 0xc5, 0x91, 0xe, 0x12, 0x7c, 0x91, 0x34, 0x8c, 0xb8, 0xd7, 0x2f, 0x24, 0xf8, 0xa2, 0x45, 0x87, 0x19, 0xed, 0x4c, 0xf, 0x6d, 0x5b, 0xac, 0x78, 0x69, 0x4e, 0x76, 0xf6, 0xc1, 0xc5, 0x9b, 0xb7, 0xb4, 0x8f, 0x25, 0x48, 0x8f, 0x20, 0x5d, 0xb1, 0xc8, 0x93, 0x7b, 0x89, 0x4e, 0x95, 0x5, 0x3e, 0xfe, 0x2e, 0x4a, 0x39, 0x20, 0x6, 0x14, 0xe9, 0x34, 0x8, 0xeb, 0x69, 0x41, 0x29, 0xaf, 0x81, 0x57, 0x95, 0xbb, 0x4c, 0x49, 0x2, 0xf0, 0x60, 0xbb, 0x21, 0x87, 0xc, 0x67, 0x46, 0x85, 0x64, 0x9c, 0xaf, 0xad, 0x12, 0x17, 0xaa, 0x50, 0x65, 0x0, 0x41, 0xb0, 0xf4, 0xa7, 0x26, 0x82, 0xb3, 0xa8, 0x46, 0x14, 0x90, 0x57, 0x93, 0x8b, 0xf8, 0xbf, 0xa9, 0x4, 0xe1, 0xd2, 0x0, 0xb4, 0xa6, 0xa6, 0x7c, 0x45, 0x8d, 0x94, 0x65, 0x19, 0x3e, 0x9e, 0x58, 0x37, 0x4b, 0xb3, 0x15, 0xf0, 0x36, 0x14, 0x6f, 0x6a, 0x10, 0x54, 0xe9, 0x87, 0x32, 0xe, 0x16, 0xca, 0x2e, 0x7c, 0x25, 0x4e, 0x1e, 0xd3, 0x64, 0xbe, 0xf7, 0x83, 0xb0, 0x88, 0x2e, 0xa4, 0xe3, 0x0, 0xe7, 0x2a, 0x79, 0x49, 0xec, 0x82, 0x3a, 0xf, 0x10, 0x35, 0x38, 0xf4, 0xb1, 0x40, 0xe7, 0x84, 0xcf, 0x6d, 0xe2, 0x82, 0x9c, 0xce, 0x45, 0xf9, 0x1f, 0x9, 0xcf, 0x21, 0xf4, 0xde, 0xe8, 0x29, 0xaa, 0x9e, 0x38, 0x2b, 0x1b, 0x40, 0xe1, 0x84, 0x5d, 0x57, 0x17, 0x2d, 0x1a, 0x44, 0xdb, 0xea, 0x3b, 0xaa, 0x53, 0xa8, 0xc3, 0x32, 0x93, 0x2, 0xa9, 0xd4, 0xe3, 0xbe, 0x69, 0x2f, 0xb1, 0xae, 0x3e, 0x97, 0xe9, 0x84, 0x0, 0x90, 0x93, 0x15, 0xf8, 0x6a, 0x99, 0xc0, 0x83, 0x53, 0xe3, 0xa, 0x4a, 0x79, 0x2f, 0xd5, 0x99, 0x2c, 0x4a, 0x53, 0xec, 0x18, 0xeb, 0x24, 0xf5, 0x72, 0xb, 0xe9, 0x4a, 0xc8, 0x61, 0x94, 0xe4, 0x7b, 0xaa, 0xff, 0x8, 0x75, 0x60, 0x11, 0xa5, 0xe7, 0x7a, 0xee, 0xc2, 0x15, 0x46, 0xbf, 0xb5, 0xa, 0xa, 0xc9, 0x7f, 0x10, 0xd5, 0xe5, 0x46, 0x5c, 0x0, 0xfa, 0xff, 0x9d, 0xc9, 0x50, 0xd5, 0x10, 0x72, 0xf5, 0x63, 0x4, 0x76, 0x3f, 0x8c, 0x5, 0xea, 0xb9, 0x3c, 0x46, 0xcd, 0x0, 0xa9, 0x36, 0x3d, 0x8, 0xc2, 0x3c, 0xf2, 0x31, 0xe4, 0x6b, 0xa8, 0x1d, 0x2c, 0x22, 0x0, 0x3f, 0xa2, 0x20, 0x2a, 0xf2, 0x40, 0x35, 0xad, 0xcd, 0x57, 0x8c, 0xfb, 0xef, 0x25, 0x9e, 0xbd, 0x91, 0xa9, 0x1a, 0x84, 0x3e, 0x6f, 0xcc, 0x33, 0x81, 0xa7, 0x6b, 0x6, 0x46, 0x91, 0x30, 0x19, 0x57, 0x51, 0x65, 0x32, 0x1, 0x57, 0x48, 0xc7, 0xc1, 0x14, 0xda, 0x8, 0xab, 0x53, 0xdc, 0xa1, 0x72, 0x8, 0xba, 0xe6, 0x5c, 0x84, 0xd8, 0x3d, 0x91, 0xfb, 0x87, 0xe2, 0xa8, 0x38, 0x3a, 0xc8, 0x97, 0x68, 0x3d, 0xcf, 0xf, 0x42, 0x72, 0x6, 0x79, 0x4, 0x5, 0xf, 0x92, 0x66, 0x4f, 0xa4, 0xba, 0xde, 0x8e, 0x1a, 0x41, 0x15, 0xb6, 0xdb, 0x51, 0xc8, 0xe1, 0x7b, 0xb, 0xe9, 0x0, 0x41, 0x24, 0x7, 0x2a, 0xb9, 0xad, 0x75, 0xb1, 0x5f, 0x10, 0x7e, 0xb7, 0x67, 0xfa, 0xe0, 0x55, 0x54, 0xc4, 0x2d, 0x90, 0x58, 0x0, 0x46, 0xbb, 0xdf, 0x4, 0xa9, 0x88, 0xf8, 0x4e, 0xf3, 0x41, 0x27, 0x38, 0xd0, 0x1c, 0x4d, 0x75, 0x30, 0x1d, 0x75, 0xa8, 0x9c, 0xbb, 0xda, 0x1a, 0x4a, 0x77, 0x5d, 0x45, 0xb, 0x2a, 0x18, 0x5c, 0xf0, 0xe7, 0x8a, 0x13, 0x59, 0x51, 0x35, 0x82, 0xe3, 0xa, 0x1, 0xb5, 0x84, 0xc, 0xdb, 0x1c, 0x1e, 0x72, 0xc4, 0x4b, 0x76, 0x24, 0x18, 0x1, 0xc4, 0xa3, 0x28, 0x98, 0x62, 0xf4, 0x21, 0x80, 0x91, 0x28, 0xba, 0x81, 0x63, 0xff, 0x22, 0x81, 0xb8, 0x3d, 0x8d, 0xf1, 0x17, 0xc3, 0xf9, 0x95, 0x15, 0x2, 0xe0, 0xa1, 0x8f, 0xa5, 0x31, 0x89, 0x36, 0x21, 0x7, 0xe, 0x19, 0x2, 0xc7, 0xf1, 0x3d, 0xd4, 0x9d, 0x21, 0x9c, 0x6c, 0xaf, 0xa8, 0xdc, 0x70, 0xb6, 0x8c, 0xa1, 0x5d, 0x34, 0x5e, 0xa2, 0x4f, 0xbb, 0xa9, 0xa2, 0x2f, 0x93, 0xf8, 0xe3, 0xb3, 0xeb, 0x13, 0x88, 0xa8, 0xc7, 0xd9, 0x9d, 0x6d, 0xa8, 0xa5, 0x75, 0x69, 0x5f, 0x5f, 0x40, 0x95, 0x14, 0x51, 0xfc, 0x4f, 0x48, 0xea, 0x75, 0x70, 0x36, 0xf2, 0x15, 0x26, 0x2, 0xa, 0xf8, 0xee, 0x90, 0xca, 0xd7, 0x5b, 0xf5, 0x7c, 0xa7, 0x1b, 0x3a, 0xf0, 0x32, 0x69, 0xd6, 0xb8, 0x51, 0x56, 0x69, 0x59, 0x59, 0xa4, 0x81, 0x57, 0x95, 0x12, 0x55, 0x83, 0xe, 0x35, 0x11, 0x7f, 0x23, 0xff, 0x1b, 0x49, 0xe2, 0x7, 0xad, 0x95, 0xfd, 0x97, 0x60, 0xc3, 0x4f, 0x95, 0x78, 0xfe, 0x24, 0x52, 0xbb, 0x7a, 0x12, 0x70, 0xdd, 0x38, 0x47, 0xa8, 0x2c, 0x80, 0x72, 0x81, 0x57, 0x52, 0x28, 0x4e, 0xaa, 0xc4, 0xd8, 0xd6, 0xe2, 0x2e, 0xba, 0x3a, 0x53, 0x7, 0x2, 0xd8, 0x6b, 0x94, 0x5f, 0x5f, 0xe, 0x6a, 0xe8, 0xe4, 0x43, 0x67, 0x47, 0x78, 0xd2, 0x61, 0x83, 0xfc, 0x92, 0x6d, 0xa8, 0x42, 0x17, 0x5, 0x0, 0xba, 0x28, 0xab, 0xf0, 0x95, 0x21, 0x78, 0x3a, 0xc7, 0xd2, 0x31, 0x83, 0x33, 0xdc, 0x51, 0xc6, 0x9c, 0xa0, 0x82, 0x1c, 0xe2, 0x50, 0xff, 0x90, 0xe2, 0xf5, 0xf4, 0xce, 0xda, 0x38, 0x4c, 0x3, 0x11, 0x55, 0xe0, 0xc1, 0xb6, 0x18, 0xca, 0x36, 0xce, 0x98, 0x6, 0x4a, 0xf8, 0xdd, 0xfa, 0x51, 0x23, 0xb8, 0xd6, 0x6f, 0xe4, 0x5c, 0x99, 0xa5, 0xdb, 0x91, 0xa9, 0x3d, 0x2c, 0xc9, 0x6b, 0x98, 0x89, 0xc0, 0x9d, 0x2c, 0xf0, 0x82, 0x27, 0xd4, 0x65, 0xc4, 0xb9, 0x5b, 0x5, 0x27, 0x71, 0x9b, 0x5d, 0xe7, 0x19, 0x4b, 0xb0, 0x9, 0x2f, 0x93, 0x78, 0x26, 0x8a, 0x6, 0xdf, 0xb1, 0x49, 0x7c, 0xb7, 0xd0, 0xd8, 0x31, 0x4f, 0xb2, 0xc0, 0xb, 0x96, 0x60, 0xb8, 0x9f, 0xc5, 0x36, 0xe, 0xe5, 0x3f, 0xb0, 0x6b, 0x3b, 0x14, 0x4, 0x47, 0x94, 0xae, 0x34, 0x80, 0xe3, 0x88, 0x5b, 0x92, 0x4, 0xed, 0x3c, 0x3, 0x78, 0x79, 0x16, 0x78, 0xc1, 0xaa, 0x99, 0x5a, 0xdf, 0x9f, 0x68, 0xd7, 0x73, 0xa8, 0x8, 0x25, 0xf0, 0x75, 0x59, 0x3c, 0xd8, 0x81, 0x2d, 0x93, 0xf8, 0xce, 0xbb, 0x7c, 0xc5, 0x11, 0x4e, 0x57, 0xb, 0xbc, 0xe0, 0xc8, 0xcc, 0x9a, 0x9e, 0x69, 0xd7, 0x72, 0xa8, 0x8, 0x7, 0xed, 0xcf, 0xb0, 0x8d, 0x14, 0xaa, 0x2e, 0x49, 0x7c, 0xe7, 0xd, 0x89, 0x47, 0x17, 0xf5, 0xb1, 0xc0, 0xb, 0x8e, 0x74, 0x1c, 0x25, 0xb2, 0x1c, 0x36, 0xda, 0xb5, 0x1c, 0x3a, 0x9a, 0x61, 0x0, 0xa9, 0x55, 0x12, 0x9f, 0x87, 0xf3, 0x4c, 0xa7, 0x4, 0x21, 0x48, 0xa2, 0xb9, 0x5, 0x5e, 0x30, 0x94, 0x69, 0xee, 0xfb, 0xa, 0x8b, 0xa5, 0x94, 0x68, 0xa5, 0x21, 0x30, 0x93, 0xb5, 0xd9, 0xc6, 0x1b, 0xf6, 0xfd, 0x95, 0x16, 0x78, 0xc1, 0x90, 0x2e, 0x11, 0x51, 0x4d, 0xd2, 0xcf, 0xf8, 0x76, 0x83, 0x1a, 0x5b, 0x2c, 0xa5, 0x44, 0x8, 0xe1, 0x2b, 0x4f, 0xf1, 0x3b, 0xc8, 0x11, 0xd4, 0x4e, 0x16, 0xc4, 0xe4, 0xb6, 0xb6, 0xc0, 0xf3, 0x9f, 0x16, 0xf3, 0x35, 0x27, 0x49, 0x55, 0xc5, 0x6b, 0xea, 0x65, 0xb1, 0x94, 0x12, 0x21, 0xb6, 0xb6, 0xba, 0x61, 0x2e, 0x24, 0x43, 0xf8, 0xdc, 0x68, 0xb6, 0x11, 0x4, 0x7f, 0x77, 0x86, 0xdc, 0x4b, 0x4d, 0x89, 0x3f, 0xc5, 0xa9, 0x6e, 0xd4, 0x81, 0x87, 0x43, 0xd5, 0x1d, 0x6c, 0x17, 0x4, 0xdc, 0x97, 0x6e, 0x16, 0x78, 0x29, 0x53, 0x2b, 0x43, 0xc5, 0x4c, 0x25, 0x21, 0x7a, 0xbc, 0x61, 0xeb, 0xc1, 0xc9, 0xd2, 0x2f, 0x3, 0xee, 0x5, 0xd1, 0x52, 0x88, 0xc4, 0x41, 0xe8, 0xe2, 0xc5, 0x51, 0x7, 0x1e, 0x82, 0x6e, 0x75, 0x9d, 0x96, 0x33, 0x2, 0x54, 0x37, 0x21, 0xb5, 0x1f, 0x92, 0x68, 0x87, 0xe5, 0x79, 0x41, 0xba, 0xb0, 0x12, 0x84, 0xe7, 0x9c, 0x14, 0x55, 0x54, 0x4, 0x4b, 0xe8, 0x27, 0x43, 0x3d, 0x22, 0xf1, 0xfc, 0xb7, 0xa0, 0x4c, 0xc, 0xfd, 0xe4, 0x22, 0xe4, 0x33, 0x4e, 0x8a, 0x3a, 0xf0, 0x40, 0xfa, 0xf9, 0x64, 0xad, 0x29, 0x75, 0x82, 0x20, 0x80, 0xae, 0x4b, 0xc8, 0xc6, 0xd, 0xc5, 0x83, 0x7, 0x5, 0xf8, 0xfb, 0x8, 0x76, 0xd6, 0xe5, 0x4, 0xbf, 0xa0, 0x10, 0x4d, 0x85, 0x90, 0xfd, 0xae, 0x1f, 0x14, 0x82, 0xf8, 0x4d, 0x14, 0xfe, 0x6d, 0x18, 0xd0, 0xbd, 0xe0, 0xf1, 0x69, 0x2d, 0xd8, 0xc6, 0x73, 0x2e, 0x96, 0xee, 0xf, 0xc0, 0xc3, 0x80, 0xeb, 0x8a, 0xc8, 0xb7, 0xca, 0x5e, 0x9e, 0xca, 0xe9, 0x21, 0x41, 0xaf, 0xd7, 0xde, 0x35, 0x84, 0xab, 0x85, 0x21, 0x4e, 0x14, 0xc5, 0x6b, 0x91, 0x14, 0x8c, 0xf4, 0x9c, 0x9b, 0x2, 0xea, 0xc3, 0x10, 0xc3, 0x2e, 0xaf, 0x6c, 0x2a, 0x15, 0x1e, 0xa4, 0xa9, 0x2b, 0x8e, 0x23, 0x98, 0x62, 0x2, 0x1, 0xed, 0xb7, 0xd0, 0xd5, 0x2, 0x4, 0xcf, 0x72, 0x1c, 0x95, 0xf8, 0x81, 0xa8, 0x2, 0xf, 0xa0, 0x7b, 0x98, 0xed, 0x36, 0x46, 0xdb, 0x6b, 0x42, 0x9a, 0xcb, 0x38, 0x89, 0x47, 0xd8, 0x7f, 0xc5, 0x76, 0x18, 0xc6, 0x19, 0x65, 0xf2, 0xf4, 0x3, 0x4b, 0x90, 0xa6, 0x83, 0x10, 0xae, 0x2a, 0x3e, 0xfe, 0x7e, 0x77, 0x71, 0xca, 0x37, 0x80, 0xbe, 0x94, 0xf4, 0x9e, 0xe0, 0x8b, 0x47, 0xba, 0x7d, 0xc8, 0x36, 0xa, 0xde, 0xa2, 0xc2, 0x80, 0x5f, 0xe7, 0x7b, 0x0, 0xd9, 0xd, 0x6c, 0xa3, 0xec, 0xc7, 0x40, 0xd9, 0xc3, 0x83, 0x51, 0xa3, 0x6c, 0x7f, 0x3c, 0x42, 0x69, 0x3, 0x42, 0xa1, 0x9e, 0xfb, 0x3c, 0xfe, 0x3d, 0x44, 0xc7, 0x4f, 0xe3, 0x40, 0x83, 0xe0, 0xe4, 0x39, 0x53, 0xc2, 0x53, 0x8c, 0x17, 0x3b, 0xc3, 0x0, 0x89, 0x67, 0xe4, 0xa3, 0x76, 0xa, 0xc2, 0xb1, 0xda, 0xfb, 0xf0, 0xdb, 0x28, 0x1d, 0xf1, 0xa, 0xc1, 0x5f, 0x46, 0x5b, 0x2d, 0x9d, 0xfa, 0x2c, 0x5b, 0xb9, 0xe3, 0xe8, 0xf9, 0xef, 0xc2, 0xb9, 0x39, 0xc5, 0xc3, 0x7b, 0x40, 0xa2, 0x1d, 0xaa, 0x7c, 0xeb, 0xa, 0xe8, 0xa8, 0x4a, 0x80, 0xa7, 0xc1, 0xee, 0xf1, 0x91, 0xe1, 0x51, 0x6, 0x1e, 0xa4, 0xc, 0x12, 0x5f, 0xf5, 0x73, 0x6, 0x30, 0x99, 0x8f, 0x8b, 0xfb, 0x65, 0x18, 0x1a, 0x11, 0xe4, 0xd3, 0xd, 0x9b, 0x6e, 0x32, 0x25, 0xf8, 0x4a, 0x89, 0x17, 0x5c, 0xd, 0x3, 0xe1, 0x81, 0x8e, 0x88, 0xfe, 0xd0, 0x7, 0xd8, 0x8, 0x3c, 0xfe, 0x8c, 0xea, 0x7a, 0x35, 0x8f, 0x7e, 0x13, 0xa5, 0x20, 0xde, 0x96, 0x78, 0x6d, 0xd5, 0x9b, 0x25, 0x1e, 0x7f, 0x99, 0xe, 0xc1, 0xa1, 0xd1, 0x8b, 0xea, 0xb3, 0x70, 0xc7, 0x9b, 0xc2, 0xdd, 0xdc, 0x6d, 0xd5, 0xf3, 0x22, 0xda, 0xa4, 0xe7, 0xf2, 0x3d, 0xd6, 0x1c, 0x32, 0xe2, 0x67, 0xec, 0xed, 0xb, 0x51, 0xf7, 0xb8, 0xe1, 0x1, 0x1c, 0x28, 0xe3, 0xa7, 0x33, 0x95, 0x51, 0xf, 0x12, 0x2e, 0xe7, 0x13, 0xd2, 0xbc, 0x2e, 0xa2, 0x63, 0x8e, 0x16, 0xa7, 0xea, 0xd6, 0x3c, 0xda, 0x26, 0x0, 0x34, 0x2a, 0x49, 0xd, 0xe7, 0x84, 0xeb, 0x87, 0x3a, 0x9a, 0x55, 0xd4, 0xaa, 0x84, 0x60, 0xcc, 0xde, 0x22, 0xe0, 0x74, 0xb0, 0x32, 0xce, 0xa2, 0x46, 0x52, 0x6d, 0x86, 0xdd, 0x5a, 0xdb, 0x85, 0xdf, 0xc0, 0xf8, 0xa1, 0x4a, 0x38, 0x32, 0xd3, 0x51, 0x3e, 0xf0, 0x40, 0x43, 0x38, 0x3e, 0xe2, 0xe2, 0xbd, 0x6c, 0x22, 0x18, 0xa0, 0xed, 0x20, 0x82, 0x28, 0x87, 0xf6, 0x2b, 0xee, 0x65, 0xb0, 0xc4, 0x1f, 0xf2, 0x59, 0x19, 0xc2, 0xb5, 0x90, 0x4d, 0x8f, 0xda, 0x31, 0x2f, 0x1b, 0x8e, 0x94, 0xf7, 0xb9, 0xbe, 0x3e, 0xff, 0xb9, 0x2f, 0xef, 0xf, 0xae, 0x6e, 0x48, 0x6c, 0x64, 0xa2, 0xeb, 0x67, 0xe, 0x1c, 0x43, 0xfd, 0x7f, 0x22, 0x55, 0xc1, 0x1a, 0x29, 0xa8, 0x12, 0x50, 0x55, 0xee, 0xa0, 0x24, 0xc3, 0xc0, 0x22, 0xef, 0x4f, 0x57, 0x2d, 0x7b, 0x93, 0x3b, 0xde, 0xc8, 0x4, 0xb0, 0xa1, 0xce, 0x8b, 0x3e, 0x57, 0xbc, 0x91, 0xbf, 0x9f, 0xe9, 0x34, 0x8f, 0xc0, 0x18, 0x21, 0xf1, 0x43, 0x6c, 0x3c, 0xa3, 0x60, 0x2c, 0x55, 0x68, 0xd4, 0x48, 0x41, 0xea, 0x55, 0x43, 0x49, 0x3e, 0x44, 0x2f, 0x8f, 0xea, 0xf8, 0x30, 0x8e, 0xdf, 0x7, 0x12, 0xaf, 0x10, 0xb0, 0x96, 0x2, 0xf2, 0x1, 0xf, 0xee, 0xa5, 0x9c, 0x3b, 0xf6, 0x19, 0x9c, 0xb, 0x50, 0x4b, 0xde, 0xc3, 0xb7, 0xb4, 0xff, 0xbb, 0x25, 0xb9, 0xe, 0xe, 0xe0, 0x3d, 0xc0, 0x16, 0x9d, 0x25, 0x4e, 0x3d, 0xd8, 0xee, 0xfc, 0xdf, 0x66, 0xee, 0xd6, 0x0, 0xe3, 0xd2, 0x7d, 0x5d, 0xc8, 0xeb, 0x1a, 0x9a, 0x99, 0x42, 0x5f, 0x53, 0x8a, 0xff, 0x59, 0x1c, 0x77, 0x39, 0xee, 0xbb, 0x37, 0x79, 0x5, 0x8d, 0xf9, 0x79, 0x34, 0x86, 0x35, 0x68, 0x70, 0xe, 0x87, 0xd2, 0x7c, 0x28, 0x61, 0xd7, 0x9a, 0x93, 0x95, 0xf8, 0xec, 0x80, 0x52, 0xaa, 0x95, 0xf, 0x1a, 0xc6, 0x7c, 0x22, 0x2d, 0x20, 0x28, 0xa1, 0x8e, 0xa0, 0xf2, 0xd6, 0x5d, 0x12, 0xcf, 0x17, 0x4c, 0x65, 0x87, 0xf0, 0x9b, 0x76, 0xb1, 0xaf, 0x78, 0x72, 0x13, 0x72, 0xe3, 0xfa, 0x72, 0x4c, 0x1a, 0x71, 0xb7, 0x18, 0x4c, 0x95, 0x74, 0x21, 0xed, 0x98, 0x65, 0x4, 0xd0, 0x4e, 0xf6, 0x17, 0x42, 0xbd, 0x2e, 0x3f, 0xdf, 0x9a, 0xc0, 0x6d, 0x96, 0x20, 0xec, 0xf1, 0x1b, 0xcf, 0x52, 0x98, 0xad, 0xf0, 0xf8, 0x7e, 0x26, 0x4b, 0xbc, 0xee, 0xe7, 0x50, 0xa, 0x8d, 0xa6, 0x6c, 0x83, 0x97, 0x13, 0x88, 0xf3, 0xd9, 0xd6, 0xc9, 0xd3, 0x50, 0xb1, 0x51, 0x3d, 0xd, 0x4e, 0xba, 0xc3, 0xb8, 0xb3, 0x99, 0x5, 0x95, 0xb6, 0x73, 0x8c, 0xee, 0x11, 0xa7, 0xe2, 0x5a, 0x52, 0x14, 0x33, 0x16, 0x5a, 0x79, 0xc4, 0xc1, 0xb7, 0x89, 0x83, 0x3e, 0x8e, 0x52, 0xf7, 0x1c, 0x2e, 0xa4, 0x26, 0xe4, 0xb3, 0x53, 0x58, 0x90, 0xd8, 0x3d, 0xff, 0x4d, 0x87, 0x40, 0x32, 0xcf, 0x21, 0x47, 0x76, 0x35, 0xca, 0xdc, 0x15, 0x48, 0xe5, 0x82, 0xa6, 0x4b, 0x8c, 0x39, 0x2a, 0xf3, 0x79, 0xdc, 0x16, 0x52, 0x58, 0x41, 0x68, 0xf5, 0xe1, 0xce, 0x84, 0x1a, 0xa2, 0xb9, 0xdc, 0xed, 0x75, 0x1, 0xdf, 0x54, 0x68, 0x1, 0x1d, 0x11, 0x4f, 0xed, 0xcd, 0xf9, 0xe0, 0x11, 0xa1, 0x8a, 0xd9, 0xbd, 0x5c, 0x3, 0xfd, 0xe8, 0x74, 0xeb, 0x48, 0x20, 0x35, 0x25, 0xf7, 0x4c, 0xe2, 0x3a, 0x15, 0x14, 0xd4, 0x13, 0x28, 0x38, 0x16, 0xa7, 0xda, 0x91, 0x18, 0x75, 0xe0, 0x6, 0xc9, 0x6c, 0x8f, 0x11, 0xa1, 0xaf, 0x28, 0xbd, 0x5b, 0x52, 0xfd, 0x0, 0x18, 0xe, 0xe7, 0xee, 0x56, 0x9d, 0xea, 0x44, 0x29, 0x25, 0xf7, 0x36, 0x2, 0x56, 0x67, 0x3a, 0xcf, 0xa4, 0x9a, 0x84, 0x85, 0x93, 0xca, 0xd9, 0xdc, 0x6a, 0xaa, 0xb5, 0x9d, 0xa5, 0x72, 0xa9, 0x4a, 0x4f, 0xd2, 0x78, 0xdf, 0x44, 0x69, 0x1c, 0x4, 0x2d, 0xa6, 0x1a, 0x7d, 0x3f, 0x77, 0xaf, 0x6e, 0xdc, 0x41, 0xda, 0x53, 0x70, 0xd5, 0xe4, 0xee, 0x50, 0x8d, 0xbb, 0xda, 0x4e, 0xa, 0x29, 0xf4, 0x79, 0x1d, 0xed, 0xed, 0xd9, 0xb4, 0xb1, 0x67, 0x49, 0x70, 0xf, 0x7d, 0xd1, 0x8e, 0x97, 0x47, 0xe9, 0x6c, 0x3b, 0x92, 0x26, 0x4, 0xec, 0xb2, 0xb6, 0xc4, 0x42, 0xd, 0xae, 0x85, 0xdd, 0xdc, 0xd1, 0xb6, 0x72, 0x37, 0x9f, 0xcf, 0xf9, 0x87, 0x76, 0x33, 0x57, 0xf6, 0x70, 0x4c, 0x90, 0x2c, 0xfd, 0x57, 0x80, 0x1, 0x0, 0xc5, 0xb1, 0xf0, 0x59, 0xcd, 0x2e, 0xe2, 0x4, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; + + + + + (NSData *)parse_logo_png { + return [NSData dataWithBytes:parse_logo_png length:sizeof(parse_logo_png)]; + } + + const unsigned char parse_logo2x_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x1, 0xbb, 0x0, 0x0, 0x0, 0x88, 0x8, 0x6, 0x0, 0x0, 0x0, 0x7e, 0xf0, 0x45, 0xa9, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9, 0x65, 0x3c, 0x0, 0x0, 0x3, 0x23, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x35, 0x2d, 0x63, 0x30, 0x31, 0x34, 0x20, 0x37, 0x39, 0x2e, 0x31, 0x35, 0x31, 0x34, 0x38, 0x31, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2f, 0x30, 0x33, 0x2f, 0x31, 0x33, 0x2d, 0x31, 0x32, 0x3a, 0x30, 0x39, 0x3a, 0x31, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x43, 0x20, 0x28, 0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x29, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x45, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x46, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x43, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x44, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, 0x3f, 0x3e, 0xe8, 0x51, 0xff, 0x90, 0x0, 0x0, 0x26, 0xd1, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec, 0x5d, 0x7, 0x98, 0x14, 0x55, 0xd6, 0xbd, 0xd, 0x33, 0xcc, 0x90, 0x54, 0x24, 0x88, 0xa2, 0x2, 0x8a, 0x28, 0x20, 0x62, 0x40, 0x51, 0x5c, 0x57, 0x10, 0x51, 0x44, 0xd7, 0x35, 0xff, 0xbb, 0x46, 0x5c, 0x31, 0xc3, 0x9a, 0x45, 0xd4, 0x55, 0x74, 0xd7, 0xac, 0xb0, 0x86, 0x5d, 0x73, 0x5e, 0x75, 0x4d, 0x6b, 0x56, 0x14, 0x11, 0xcc, 0x1, 0x41, 0xc9, 0x51, 0x82, 0x8, 0x8, 0x22, 0x82, 0x48, 0x9a, 0xf8, 0xbf, 0x63, 0x9d, 0x96, 0xa6, 0xe6, 0x55, 0x4f, 0xcf, 0x4c, 0x55, 0x77, 0x55, 0xf5, 0x3d, 0xdf, 0x77, 0x3f, 0xe0, 0x55, 0x33, 0x53, 0xfd, 0xea, 0xd5, 0x3b, 0x37, 0xbf, 0xc4, 0x49, 0x83, 0x86, 0xb4, 0x13, 0x91, 0x53, 0x8c, 0x34, 0x96, 0xf8, 0xa2, 0xbe, 0x91, 0xa9, 0x46, 0x66, 0x19, 0x99, 0x61, 0x64, 0xb5, 0x91, 0x52, 0x51, 0x28, 0x14, 0xa, 0x45, 0x6c, 0xb0, 0x66, 0xed, 0x3a, 0x19, 0x3a, 0x68, 0xa0, 0xec, 0xb3, 0x47, 0xd7, 0x2a, 0xd7, 0xa, 0x8c, 0xdc, 0x62, 0xa4, 0xb7, 0x91, 0xe2, 0x18, 0xcf, 0x41, 0x82, 0xe4, 0x56, 0x66, 0xa4, 0xc4, 0xc8, 0x14, 0x92, 0xdf, 0x24, 0xfe, 0x1d, 0xb2, 0x41, 0x97, 0x8a, 0x42, 0xa1, 0x50, 0xc4, 0x13, 0x20, 0xbb, 0xed, 0x8c, 0x34, 0xe3, 0xdf, 0xf3, 0x5, 0x6d, 0x8c, 0x1c, 0xca, 0xbf, 0xff, 0x42, 0xd2, 0xfb, 0xd0, 0xc8, 0x33, 0xfc, 0x7b, 0xa5, 0x2e, 0xd, 0x85, 0x42, 0xa1, 0x88, 0xf, 0xea, 0x19, 0x29, 0x37, 0x52, 0x91, 0xc7, 0x73, 0xd0, 0xc4, 0x48, 0x4f, 0x23, 0x43, 0x8c, 0x8c, 0x33, 0x32, 0xd2, 0xc8, 0x31, 0x46, 0xa, 0x75, 0x79, 0x28, 0x14, 0xa, 0x45, 0x7c, 0xc8, 0x4e, 0xb1, 0x11, 0x20, 0xb8, 0x43, 0x8c, 0xbc, 0x68, 0x64, 0xb4, 0x91, 0x63, 0x75, 0x8e, 0x14, 0xa, 0x85, 0x22, 0xfa, 0xf0, 0x72, 0x5d, 0x22, 0x89, 0x63, 0x6a, 0x8c, 0x8, 0xbd, 0x95, 0x91, 0x46, 0xfc, 0x73, 0xeb, 0xc, 0x9, 0xec, 0x0, 0xca, 0x28, 0x23, 0x7f, 0x17, 0xc7, 0xcd, 0xa9, 0x50, 0x28, 0x14, 0x8a, 0x18, 0x91, 0xdd, 0x93, 0x46, 0x6e, 0x8c, 0xd1, 0xf7, 0x6c, 0x40, 0xb2, 0xdb, 0xca, 0x48, 0x6b, 0x23, 0x9d, 0x53, 0xc8, 0xc, 0xf1, 0xbb, 0x44, 0x9a, 0xff, 0xdb, 0x97, 0x9f, 0xbb, 0xd7, 0xc8, 0x75, 0x46, 0x56, 0xe9, 0xb2, 0x51, 0x28, 0x14, 0x8a, 0xe8, 0x59, 0x3d, 0x36, 0x34, 0x8c, 0xd9, 0xf7, 0x44, 0x6, 0xe6, 0x4a, 0x23, 0x33, 0x8d, 0xbc, 0x4f, 0xe2, 0x3a, 0xd1, 0x48, 0x27, 0x23, 0xfd, 0x8d, 0x3c, 0x6a, 0xe4, 0xbb, 0x34, 0xff, 0x1f, 0x99, 0xaa, 0x17, 0x19, 0x79, 0xdb, 0x48, 0x77, 0x5d, 0x36, 0xa, 0x85, 0x42, 0x11, 0xf, 0xb2, 0xcb, 0x17, 0x20, 0x13, 0x13, 0x9, 0x29, 0x7f, 0x31, 0x72, 0x90, 0x91, 0x2b, 0x8d, 0xcc, 0x4d, 0xf3, 0xf9, 0x1e, 0x46, 0xde, 0x32, 0x32, 0x40, 0x97, 0x8e, 0x42, 0xa1, 0x50, 0x28, 0xd9, 0x45, 0x11, 0xb3, 0x8d, 0xdc, 0x64, 0x64, 0x2f, 0x71, 0xdc, 0x95, 0xcb, 0x3c, 0x3e, 0xd7, 0x82, 0x96, 0x20, 0xdc, 0xbc, 0x9, 0x9d, 0x36, 0x85, 0x42, 0xa1, 0x50, 0xb2, 0x8b, 0x22, 0xe0, 0xee, 0x1c, 0x66, 0xa4, 0x8f, 0x91, 0x17, 0xd2, 0x7c, 0x6e, 0xa8, 0x38, 0xee, 0xd0, 0x22, 0x9d, 0x32, 0x85, 0x42, 0xa1, 0x50, 0xb2, 0x8b, 0x2a, 0xd0, 0x55, 0xe5, 0x78, 0x23, 0x3, 0x8d, 0xac, 0xf0, 0xf8, 0xcc, 0xd9, 0x46, 0x1e, 0x96, 0xf8, 0xc5, 0x38, 0x15, 0xa, 0x85, 0x42, 0xc9, 0x2e, 0xcf, 0x0, 0x32, 0x43, 0xed, 0xdd, 0xd7, 0x1e, 0xd7, 0x4f, 0xa2, 0x85, 0xa7, 0x45, 0xe8, 0xa, 0x85, 0x42, 0xa1, 0x64, 0x17, 0x69, 0x8c, 0x17, 0xa7, 0x4, 0xe1, 0x4d, 0x8f, 0xeb, 0xa7, 0x89, 0xe3, 0xfa, 0x54, 0x28, 0x14, 0xa, 0x85, 0x92, 0x5d, 0xa4, 0xb1, 0xdc, 0xc8, 0x9f, 0xc4, 0x49, 0x4e, 0xb1, 0x1, 0x99, 0x9c, 0x67, 0xea, 0x34, 0x29, 0x14, 0xa, 0x85, 0x92, 0x5d, 0xd4, 0x81, 0xa3, 0x81, 0x10, 0xc3, 0x7b, 0xc8, 0xe3, 0xfa, 0x8, 0x23, 0xbd, 0x74, 0x9a, 0x14, 0xa, 0x85, 0x42, 0xc9, 0x2e, 0xea, 0x40, 0xd3, 0xec, 0xc1, 0xe2, 0xf4, 0xcf, 0x74, 0x3, 0x67, 0x2, 0x22, 0x7e, 0xd7, 0x42, 0xa7, 0x49, 0xa1, 0x50, 0x28, 0x94, 0xec, 0xa2, 0x8e, 0xf5, 0xb4, 0xf0, 0x3e, 0xb6, 0x5c, 0xdb, 0x45, 0x9c, 0x33, 0x2, 0xb, 0x74, 0x9a, 0x14, 0xa, 0x85, 0x42, 0xc9, 0x2e, 0xea, 0x40, 0x3d, 0xde, 0x0, 0x23, 0xdf, 0x5a, 0xae, 0x9d, 0x6a, 0xe4, 0x70, 0x9d, 0x22, 0x85, 0x42, 0xa1, 0x50, 0xb2, 0x8b, 0x3, 0xe6, 0x18, 0x19, 0x24, 0xce, 0x29, 0xe8, 0xa9, 0x48, 0x9e, 0x0, 0xbf, 0x85, 0x4e, 0x91, 0x42, 0xa1, 0x50, 0x28, 0xd9, 0xc5, 0x1, 0xaf, 0x19, 0xb9, 0xdb, 0x32, 0xbe, 0xb3, 0x91, 0x8b, 0x75, 0x7a, 0x14, 0xa, 0x85, 0x42, 0xc9, 0x2e, 0x2e, 0xb8, 0xd9, 0xc8, 0x44, 0xcb, 0xf8, 0x19, 0x46, 0x76, 0xd2, 0xe9, 0x51, 0x28, 0x14, 0xa, 0x25, 0xbb, 0x38, 0xe0, 0x7, 0x23, 0x97, 0x59, 0xc6, 0xb7, 0x11, 0xe7, 0x68, 0x20, 0x85, 0x42, 0xa1, 0x50, 0x28, 0xd9, 0xc5, 0x2, 0x38, 0xd1, 0xfc, 0x19, 0xcb, 0x38, 0x92, 0x55, 0xda, 0xeb, 0xf4, 0x28, 0x14, 0xa, 0x85, 0x92, 0x5d, 0x5c, 0x80, 0xa2, 0xf2, 0x9f, 0x5d, 0x63, 0xa8, 0xbd, 0xfb, 0x8b, 0x4e, 0x8d, 0x42, 0xa1, 0x50, 0x28, 0xd9, 0xc5, 0x5, 0xe3, 0x8c, 0xbc, 0x6a, 0x19, 0x3f, 0xc1, 0x48, 0x4b, 0x9d, 0x1e, 0x85, 0x42, 0xa1, 0x50, 0xb2, 0x8b, 0x93, 0x75, 0xe7, 0x46, 0x47, 0xd1, 0x36, 0x62, 0xa, 0x85, 0x42, 0xa1, 0x64, 0x17, 0x23, 0x7c, 0x65, 0xe4, 0xd, 0xcb, 0xf8, 0x19, 0x3a, 0x35, 0xa, 0x85, 0x42, 0xa1, 0x64, 0x17, 0x17, 0x54, 0x1a, 0x79, 0xce, 0x32, 0xde, 0xd3, 0x48, 0x3b, 0x9d, 0x1e, 0x85, 0x42, 0xa1, 0x50, 0xb2, 0x8b, 0xb, 0xde, 0x36, 0x32, 0xd7, 0x35, 0xd6, 0x54, 0x9c, 0x33, 0xf1, 0x14, 0xa, 0x85, 0x42, 0xa1, 0x64, 0x17, 0xb, 0x2c, 0x35, 0xf2, 0xa5, 0x65, 0xfc, 0x77, 0x3a, 0x35, 0xa, 0x85, 0x42, 0xa1, 0x64, 0x17, 0x27, 0xd8, 0xb2, 0x32, 0xf7, 0x36, 0xd2, 0x5a, 0xa7, 0x46, 0xa1, 0x50, 0x28, 0x94, 0xec, 0xe2, 0x82, 0xb1, 0x46, 0x4a, 0x5c, 0x63, 0x68, 0x1d, 0xb6, 0x9d, 0x4e, 0x8d, 0x42, 0xa1, 0x50, 0x28, 0xd9, 0xc5, 0x5, 0x3f, 0x1a, 0x99, 0xea, 0x1a, 0x2b, 0x10, 0xed, 0x95, 0xa9, 0x50, 0x28, 0x14, 0x59, 0x87, 0x1e, 0x30, 0x1a, 0x1c, 0x70, 0xc0, 0xeb, 0x27, 0x46, 0xf6, 0x70, 0x8d, 0xef, 0x66, 0xe4, 0xe9, 0x8, 0x7f, 0xaf, 0x42, 0x23, 0xd, 0x8c, 0x34, 0xf1, 0xb0, 0x52, 0x13, 0x46, 0xd6, 0x19, 0x59, 0x48, 0xcb, 0x76, 0x83, 0x38, 0xa7, 0xbb, 0x2b, 0x14, 0x99, 0xee, 0x49, 0xc9, 0x35, 0x86, 0xf5, 0xd5, 0x50, 0x9c, 0xc, 0x67, 0x9b, 0xa2, 0xe, 0x85, 0xf2, 0x7b, 0xae, 0x2f, 0xac, 0xb5, 0x72, 0x9d, 0x3e, 0x5f, 0x90, 0xe0, 0xfc, 0xe3, 0x59, 0x6c, 0x6d, 0x64, 0x4b, 0xcb, 0x3b, 0x8c, 0xf9, 0xc7, 0x99, 0x9e, 0x8b, 0x8c, 0x94, 0x89, 0x73, 0xcc, 0x59, 0x45, 0xd8, 0x17, 0x96, 0x22, 0x38, 0xcc, 0xb0, 0x8c, 0xed, 0x1c, 0xb1, 0x8d, 0x7, 0x27, 0xaf, 0x77, 0x30, 0xd2, 0xc9, 0xc8, 0x5e, 0x46, 0xda, 0xf2, 0xdf, 0x45, 0xdc, 0x94, 0x2a, 0x2d, 0x2f, 0x4a, 0x5, 0x17, 0xff, 0x4f, 0xe2, 0x9c, 0xf9, 0x87, 0x79, 0x98, 0x69, 0x64, 0x16, 0xff, 0xfc, 0x26, 0xa6, 0xcf, 0xbb, 0x1e, 0x37, 0x9, 0xe1, 0xc6, 0x5b, 0xaa, 0xaf, 0x40, 0x5a, 0x6c, 0x6b, 0x64, 0x47, 0xa, 0xd6, 0x19, 0x9a, 0x2f, 0xa0, 0x79, 0xfa, 0xf6, 0x54, 0xa6, 0xa, 0x39, 0xa7, 0x95, 0x1e, 0x1b, 0x72, 0x39, 0x37, 0x5a, 0x6c, 0xba, 0xf3, 0xc5, 0x39, 0x48, 0x79, 0x26, 0xff, 0x3e, 0xdb, 0xc8, 0x2, 0x6e, 0xc6, 0x8a, 0xf4, 0x68, 0xcd, 0xf7, 0xbb, 0x3, 0xf7, 0xa7, 0x2e, 0x46, 0x76, 0x30, 0xd2, 0x86, 0x7b, 0x40, 0x7d, 0x8f, 0xf7, 0x3c, 0x39, 0xff, 0xdf, 0x73, 0xee, 0x67, 0xf0, 0x1d, 0x9f, 0xc2, 0x77, 0x7c, 0x9e, 0x92, 0x5d, 0xfe, 0x60, 0x11, 0x17, 0x49, 0x22, 0x65, 0xac, 0x63, 0xc8, 0xef, 0x19, 0xbd, 0x3c, 0xf, 0x31, 0x72, 0xb0, 0x91, 0xae, 0x5c, 0xfc, 0xad, 0x6a, 0xf1, 0x73, 0x1a, 0xf0, 0x67, 0x61, 0x43, 0xeb, 0x95, 0x32, 0x8e, 0xd, 0x68, 0xba, 0x91, 0x31, 0x46, 0xfe, 0x27, 0x4e, 0x89, 0x46, 0x1c, 0x2c, 0x3f, 0x28, 0x2, 0xb7, 0x53, 0x9, 0x10, 0x6e, 0x2, 0x77, 0x18, 0x79, 0x25, 0x8b, 0xf7, 0xd0, 0x90, 0xd6, 0xd0, 0xce, 0x54, 0x4a, 0x5a, 0xf3, 0x7e, 0x92, 0x8d, 0xc8, 0x8b, 0x68, 0x1, 0x5d, 0x60, 0xe4, 0xbb, 0x1c, 0xcc, 0x11, 0x7e, 0x7f, 0x37, 0x23, 0x87, 0x89, 0x93, 0xac, 0xb5, 0x13, 0x89, 0xae, 0x7e, 0x1d, 0xf6, 0xaf, 0x22, 0xae, 0x33, 0x6c, 0xcc, 0xfb, 0xbb, 0x3c, 0x2b, 0xdf, 0x52, 0xd9, 0x1a, 0x2f, 0xce, 0xb9, 0x93, 0x93, 0xe8, 0x69, 0xc8, 0x77, 0xd4, 0xe7, 0x3e, 0x84, 0xf7, 0xbc, 0x37, 0x9f, 0x43, 0xe7, 0x3a, 0xcc, 0x7f, 0x52, 0x61, 0xe9, 0x9d, 0x72, 0x6d, 0x1e, 0x15, 0x8e, 0x64, 0xb, 0xc5, 0xaf, 0xa5, 0x6a, 0xe, 0x83, 0x92, 0x5d, 0x8c, 0xb0, 0xd8, 0xc8, 0x2f, 0xe2, 0xd4, 0xd8, 0x25, 0xd1, 0x82, 0xda, 0x6a, 0x98, 0x36, 0x78, 0xb8, 0x29, 0x50, 0xf4, 0x7e, 0x84, 0x91, 0xc3, 0x49, 0x50, 0x41, 0xa1, 0x2d, 0xa5, 0x9f, 0x91, 0xeb, 0x8d, 0x7c, 0x64, 0xe4, 0x29, 0x23, 0x6f, 0x8a, 0x53, 0xb2, 0x11, 0x55, 0x1c, 0x21, 0x55, 0x5b, 0xc2, 0x2d, 0xa, 0x98, 0xec, 0xb0, 0x69, 0x75, 0x37, 0xb2, 0x9f, 0x91, 0x3, 0x8c, 0xec, 0x23, 0x4e, 0xf, 0xd6, 0xa2, 0x6a, 0xfe, 0xdf, 0xf3, 0x46, 0xfe, 0x9b, 0xc5, 0xb9, 0x1, 0xb1, 0xf5, 0x31, 0x72, 0x1a, 0xad, 0x87, 0x6c, 0xec, 0x3b, 0xc5, 0xdc, 0xd0, 0x21, 0xfd, 0x8d, 0xc, 0xe5, 0x6, 0x8c, 0x86, 0xf, 0x23, 0xb9, 0xee, 0xf2, 0xd, 0xed, 0xa9, 0xc4, 0x9e, 0xc8, 0xf7, 0xbd, 0x41, 0xc0, 0xbf, 0xab, 0x3d, 0x9, 0x75, 0x8, 0x95, 0x8e, 0xff, 0x70, 0xee, 0xc7, 0x2b, 0xd9, 0xc5, 0xf, 0x38, 0x1, 0x61, 0x8d, 0x8b, 0xec, 0x8a, 0xa8, 0x7d, 0x2f, 0x8, 0xc1, 0xfd, 0x61, 0x23, 0x38, 0x95, 0x1b, 0x75, 0xb7, 0x1c, 0x69, 0xfa, 0x7d, 0x28, 0xd3, 0x8c, 0x3c, 0x6e, 0xe4, 0x3e, 0xa9, 0x7a, 0x72, 0x44, 0x14, 0x60, 0x73, 0xb5, 0x95, 0x7, 0xb8, 0x91, 0x9c, 0xcc, 0x79, 0xeb, 0x4e, 0xcb, 0xa6, 0x26, 0x48, 0x64, 0x61, 0x3e, 0x12, 0x24, 0x19, 0x9c, 0xf8, 0xd1, 0xd7, 0xf5, 0xe, 0xe4, 0x6a, 0xaf, 0x83, 0x5, 0x73, 0x95, 0x38, 0x67, 0x4f, 0xc2, 0xb3, 0x80, 0x23, 0xb9, 0x9e, 0xa5, 0x15, 0x18, 0x67, 0xec, 0x6e, 0xe4, 0x1c, 0x23, 0x87, 0x4a, 0x6e, 0xba, 0x38, 0x25, 0xc3, 0x21, 0xff, 0xe0, 0xdc, 0x7f, 0xc0, 0xf7, 0xfc, 0x1d, 0x7a, 0x40, 0x94, 0xec, 0x62, 0x80, 0xd5, 0x46, 0xd6, 0x5a, 0xb4, 0xf1, 0x46, 0x39, 0xbe, 0xaf, 0x83, 0xb8, 0x9, 0x1d, 0x23, 0x8e, 0xeb, 0xab, 0xa6, 0xc0, 0x26, 0xe, 0x3f, 0x3d, 0x12, 0x51, 0x56, 0x88, 0x13, 0x9b, 0x4a, 0x70, 0xc3, 0x87, 0x65, 0x81, 0x58, 0x4b, 0x73, 0x23, 0x9b, 0xd5, 0xe0, 0x67, 0xc2, 0x8d, 0x72, 0x8b, 0x91, 0xb3, 0xc4, 0x39, 0xf9, 0xfd, 0x71, 0x89, 0x56, 0xcc, 0xab, 0x32, 0xc3, 0xb1, 0xba, 0xa0, 0x27, 0x37, 0xad, 0xa3, 0x42, 0x40, 0x1e, 0xe9, 0x80, 0xe6, 0x9, 0x57, 0x53, 0xab, 0xaf, 0xd, 0xb1, 0xae, 0xa4, 0x60, 0xfe, 0x96, 0x71, 0x43, 0x4c, 0xfe, 0x1c, 0x78, 0x44, 0xb6, 0x20, 0xc1, 0x37, 0xa2, 0x57, 0xa2, 0xb0, 0x86, 0x3f, 0xbf, 0x1, 0x37, 0x7e, 0xc8, 0xa5, 0x46, 0x6e, 0x23, 0xe9, 0xc5, 0xcd, 0xc5, 0x9, 0x4b, 0xff, 0x5c, 0x5a, 0x72, 0xb5, 0xb1, 0xe2, 0xa0, 0x74, 0x22, 0xee, 0xe, 0xf7, 0xe3, 0xf2, 0x94, 0xf5, 0x5c, 0xc9, 0xf5, 0xd7, 0x94, 0xcf, 0x21, 0xe9, 0xad, 0xca, 0x4, 0x9b, 0x1b, 0xf9, 0x3, 0x15, 0x6c, 0x58, 0x78, 0x77, 0xd0, 0xd3, 0x10, 0x78, 0x72, 0x91, 0x92, 0x5d, 0xb0, 0xc0, 0x42, 0xf9, 0xc5, 0xb2, 0x1, 0xe6, 0xc2, 0x85, 0x59, 0x9f, 0x9b, 0xe4, 0x59, 0xb4, 0x8, 0x32, 0x8d, 0x93, 0x94, 0x93, 0xd0, 0x3e, 0x17, 0xa7, 0xc9, 0x35, 0x82, 0xcf, 0x70, 0x37, 0x2e, 0xa1, 0x46, 0x9c, 0x4a, 0x76, 0x15, 0x29, 0x64, 0x87, 0x17, 0xa0, 0x15, 0xad, 0x10, 0x4, 0xbc, 0x7f, 0x4f, 0xcd, 0xba, 0xba, 0x97, 0xe, 0xbe, 0xff, 0x7, 0x8d, 0xfc, 0xd9, 0xc8, 0xe5, 0xb9, 0x72, 0x79, 0x84, 0xc, 0x3d, 0x8c, 0x5c, 0xc8, 0xe7, 0x57, 0x1c, 0xe2, 0xfb, 0x44, 0x72, 0xc9, 0x35, 0x46, 0x4e, 0xcf, 0x70, 0x73, 0xc5, 0xba, 0x41, 0xec, 0x10, 0xb1, 0x34, 0xc4, 0x76, 0xe6, 0x51, 0x89, 0x5a, 0xc9, 0x77, 0x47, 0xaa, 0x21, 0xbb, 0x86, 0x54, 0xaa, 0x40, 0x78, 0xad, 0xb9, 0xce, 0xba, 0xd3, 0x8a, 0xd8, 0x3c, 0xc3, 0xd, 0x78, 0x57, 0x2a, 0x56, 0x3, 0x68, 0x79, 0xbc, 0x17, 0x83, 0xf5, 0x2, 0xeb, 0xed, 0x62, 0x2a, 0xb4, 0x99, 0x5a, 0xfd, 0x78, 0x97, 0x67, 0xf1, 0x3d, 0x1f, 0xc7, 0xe7, 0xb0, 0x84, 0xef, 0x77, 0x2a, 0xd9, 0x25, 0x95, 0xda, 0x26, 0x54, 0x66, 0x93, 0x64, 0xb7, 0xd, 0xdf, 0xef, 0xae, 0x54, 0x76, 0x9a, 0x57, 0xc3, 0x2f, 0x9, 0x3e, 0x2b, 0x58, 0xd7, 0x3, 0x8d, 0xdc, 0x4a, 0x4b, 0x4f, 0xc9, 0x2e, 0xa2, 0xa8, 0x97, 0x25, 0x97, 0x51, 0x75, 0xe8, 0x4f, 0xf7, 0x41, 0xaf, 0x1a, 0x68, 0xd6, 0xe3, 0xb9, 0xf0, 0xb1, 0x0, 0x27, 0xd0, 0x4a, 0xcd, 0x4, 0xc9, 0xec, 0xb7, 0xf9, 0x16, 0x6d, 0x1a, 0x19, 0x5e, 0x87, 0x51, 0xa3, 0x3e, 0xa0, 0x1a, 0xb, 0x17, 0xd6, 0xe7, 0x28, 0x5a, 0x8, 0xff, 0xce, 0xd3, 0xf5, 0x83, 0xac, 0xc4, 0x21, 0x54, 0x50, 0x6a, 0xfa, 0xae, 0x42, 0x2b, 0x5f, 0x98, 0x42, 0x1e, 0x73, 0xb9, 0x69, 0x81, 0x5c, 0x3e, 0xe, 0xe0, 0x5e, 0xf1, 0x5c, 0xef, 0x12, 0x27, 0x26, 0x97, 0xe, 0x3f, 0x70, 0x33, 0x7d, 0x5f, 0x9c, 0xf8, 0xcd, 0x2c, 0xa9, 0xb9, 0x1b, 0x71, 0x59, 0x35, 0x7b, 0x1a, 0x48, 0x10, 0x9, 0x43, 0x7, 0x8a, 0x93, 0xb4, 0xd2, 0x85, 0x9b, 0x71, 0x3a, 0xf4, 0xe6, 0x9a, 0xbc, 0xdb, 0xc8, 0x30, 0x89, 0xa6, 0x2b, 0x1d, 0xdf, 0xfd, 0x4c, 0x2a, 0x1c, 0x99, 0x74, 0x6a, 0x42, 0x1c, 0xed, 0xb, 0x71, 0x7a, 0xf9, 0x7e, 0xc8, 0x77, 0x37, 0xd3, 0x24, 0x12, 0x58, 0xc1, 0x3f, 0x7a, 0x5c, 0xc3, 0xfc, 0xef, 0xce, 0xf7, 0x1c, 0x4a, 0xee, 0xde, 0x24, 0x47, 0x2f, 0xf4, 0xe1, 0xfb, 0xfe, 0xb0, 0x91, 0x9b, 0xa4, 0x6a, 0x5f, 0x61, 0x25, 0x3b, 0x45, 0xb5, 0xc0, 0xb, 0x7f, 0xa5, 0x91, 0x23, 0x33, 0x78, 0xd6, 0x15, 0xd4, 0xb0, 0x9f, 0xe0, 0x46, 0x34, 0xc1, 0xe7, 0x7b, 0xc1, 0x4b, 0x34, 0x83, 0x82, 0x33, 0xff, 0xf6, 0x35, 0x72, 0x34, 0x37, 0xf2, 0x2d, 0x3c, 0xfe, 0x4f, 0x33, 0x23, 0xff, 0xa2, 0xa6, 0x8e, 0x4d, 0x7f, 0x5d, 0x1e, 0x3d, 0xbb, 0x53, 0xb8, 0x69, 0x75, 0xc8, 0xf0, 0xf3, 0x20, 0x8c, 0x89, 0xdc, 0xb8, 0xbe, 0x22, 0xa9, 0x2d, 0x94, 0xec, 0x24, 0xfd, 0xc0, 0xea, 0x84, 0xeb, 0x39, 0x5d, 0x62, 0xc, 0xb2, 0xf1, 0x1e, 0xa5, 0xe5, 0x34, 0x25, 0xc0, 0x7b, 0x29, 0xa3, 0x62, 0x36, 0x96, 0x22, 0x5c, 0x3f, 0x70, 0x1, 0xff, 0x89, 0xa, 0x5f, 0x61, 0x9a, 0xfd, 0xf0, 0x22, 0xbe, 0x37, 0x58, 0x97, 0x33, 0x23, 0xb4, 0x5e, 0x92, 0x61, 0x80, 0x23, 0x32, 0x98, 0x9f, 0xd1, 0xe2, 0x24, 0x8b, 0x20, 0x76, 0xf6, 0x6d, 0x0, 0xf7, 0x82, 0xf7, 0xf4, 0x53, 0x4a, 0x82, 0x64, 0x77, 0x38, 0xd7, 0x74, 0xfb, 0x34, 0x96, 0x1e, 0x2c, 0xbc, 0xbe, 0x5c, 0xf7, 0x4f, 0x28, 0xd9, 0x45, 0xb, 0x30, 0xe5, 0x9b, 0x7a, 0x3c, 0xd8, 0xa0, 0x2d, 0x2, 0xb8, 0x31, 0xce, 0x91, 0xea, 0x33, 0xf3, 0x16, 0xd3, 0x82, 0x7a, 0x82, 0xda, 0x5d, 0xb6, 0xe2, 0x64, 0x9f, 0x51, 0x86, 0xf3, 0x5e, 0xe1, 0xfa, 0xf2, 0x3a, 0xcd, 0x7d, 0x30, 0x5d, 0x24, 0x27, 0xd1, 0xad, 0x12, 0x67, 0x40, 0x23, 0xbf, 0x9d, 0xdf, 0x35, 0x13, 0x5, 0x2, 0x1b, 0xfa, 0x5b, 0x46, 0x5e, 0x26, 0xc1, 0x95, 0x65, 0xf1, 0x5e, 0xb, 0xf9, 0xfc, 0x6, 0xa5, 0xf9, 0xcc, 0x47, 0xb4, 0x96, 0x5e, 0x92, 0xdc, 0xc5, 0x60, 0x93, 0x4a, 0xd6, 0x63, 0xb4, 0x38, 0xce, 0x33, 0x72, 0x6c, 0x1a, 0x25, 0xb, 0xd6, 0x8, 0xd2, 0xe5, 0x7, 0x70, 0xc3, 0x8e, 0x82, 0x62, 0x84, 0xe7, 0xd0, 0x22, 0xcd, 0x67, 0xf0, 0xde, 0xa0, 0xd4, 0xe7, 0x11, 0xbe, 0x77, 0x95, 0x59, 0xba, 0xb7, 0x4a, 0x5a, 0x8f, 0x10, 0xb8, 0x2a, 0x8f, 0xe1, 0xbe, 0xd4, 0xd3, 0xe3, 0xf3, 0xc8, 0xd4, 0x7e, 0x9c, 0x4a, 0xc9, 0x10, 0x7a, 0x2, 0x7c, 0x81, 0xb6, 0xb, 0xb, 0x16, 0x70, 0xd3, 0x15, 0x5b, 0x2c, 0xa8, 0xa0, 0xb2, 0xbf, 0xea, 0x91, 0x34, 0xa0, 0x3d, 0x5f, 0x50, 0xd, 0xd1, 0x2d, 0xa4, 0xbb, 0xe6, 0x20, 0xbe, 0xd4, 0xef, 0xe5, 0x68, 0x33, 0x5a, 0xca, 0x45, 0xdd, 0x87, 0x1b, 0xa2, 0x17, 0xfa, 0x51, 0x1b, 0x6d, 0x16, 0xe3, 0xf5, 0x82, 0xd, 0xe0, 0x9d, 0xc, 0x88, 0x6e, 0x39, 0xad, 0x63, 0x3c, 0x3b, 0xb8, 0x8a, 0xfe, 0x29, 0x8e, 0xdb, 0xb8, 0x2c, 0xcb, 0xf7, 0x3b, 0x22, 0xd, 0xd1, 0x2d, 0xe2, 0xa6, 0x86, 0x24, 0x95, 0xe7, 0x24, 0x1c, 0xc9, 0x46, 0x15, 0xf4, 0x58, 0xc, 0xe4, 0x7a, 0x43, 0x46, 0xa0, 0x57, 0x62, 0x44, 0x47, 0x12, 0xde, 0x81, 0x21, 0x5e, 0x2f, 0x5, 0x24, 0x90, 0xc7, 0xd3, 0x10, 0x5d, 0x5, 0x49, 0x1e, 0xdf, 0xf7, 0x4c, 0x92, 0x77, 0x65, 0x8e, 0xee, 0x17, 0x99, 0xe9, 0x4f, 0xf2, 0x5e, 0xb0, 0xc6, 0xa7, 0xa6, 0xf9, 0xec, 0xe9, 0x54, 0xe2, 0x7a, 0x28, 0xd9, 0x45, 0x3, 0x4d, 0xa5, 0x6a, 0x5c, 0x6a, 0x43, 0x40, 0xae, 0x3, 0x68, 0xac, 0x23, 0xa9, 0xb9, 0xed, 0x98, 0xe6, 0x73, 0x88, 0x91, 0xc0, 0xb5, 0x89, 0xb6, 0x65, 0xd7, 0x85, 0xc8, 0x55, 0x33, 0x99, 0x5a, 0xdf, 0x5f, 0x65, 0x63, 0x72, 0x82, 0x1b, 0x88, 0xb, 0x3d, 0x95, 0x46, 0x23, 0x8f, 0x32, 0x4e, 0xe4, 0xf3, 0xeb, 0x9a, 0xe6, 0x33, 0x8b, 0xa8, 0xa0, 0xec, 0x46, 0x6b, 0xf8, 0xe3, 0x1c, 0xde, 0x2f, 0xea, 0xd6, 0xce, 0xf7, 0xb8, 0xf6, 0x16, 0x35, 0xf3, 0xfb, 0x25, 0xbc, 0xae, 0x67, 0x90, 0xde, 0xb9, 0x54, 0x16, 0x3e, 0xf4, 0xf8, 0x4c, 0xb, 0x2a, 0x58, 0x5d, 0x42, 0x78, 0xff, 0xf0, 0x82, 0x20, 0x83, 0x14, 0xb1, 0x78, 0x2f, 0x4f, 0xd1, 0xe7, 0xfc, 0x7e, 0x20, 0x8e, 0xaf, 0x43, 0x74, 0xef, 0x50, 0xf6, 0x9f, 0x26, 0x91, 0xd, 0x4d, 0x63, 0xbd, 0xc1, 0x9d, 0xfc, 0x6, 0xf7, 0x5, 0x25, 0xbb, 0x90, 0x3, 0xd9, 0x88, 0xee, 0xf4, 0xfb, 0x1f, 0xc4, 0xdf, 0x6c, 0x4c, 0x68, 0x77, 0x97, 0x88, 0xe3, 0x8a, 0xec, 0x5b, 0x8d, 0x1b, 0xe3, 0x6, 0x5a, 0x3, 0x8, 0x2, 0xaf, 0xc, 0xe9, 0x9c, 0xc1, 0xe5, 0x75, 0x38, 0x49, 0xd9, 0x8b, 0xf0, 0x86, 0x4b, 0x38, 0x12, 0x7f, 0xfc, 0xc2, 0x60, 0x6a, 0xdf, 0x4d, 0xd3, 0x68, 0xe7, 0xf, 0x50, 0x23, 0x86, 0x82, 0xb2, 0x24, 0xc7, 0xf7, 0x8b, 0x58, 0xeb, 0xdf, 0x3d, 0xae, 0xdd, 0xc1, 0xeb, 0x73, 0x22, 0x32, 0xf7, 0x88, 0x5f, 0xf5, 0xa7, 0x75, 0x6c, 0xc3, 0xb6, 0xb4, 0x9c, 0xb6, 0xc, 0xd1, 0x3d, 0xb7, 0xa5, 0x17, 0xc4, 0x8b, 0x4, 0xa0, 0x50, 0x27, 0x4b, 0x3f, 0xde, 0xd, 0xf1, 0xdc, 0xc3, 0xd2, 0xbb, 0x99, 0x7b, 0xd2, 0x48, 0x8f, 0xcf, 0x34, 0xe7, 0xfc, 0x5f, 0xa0, 0x64, 0x17, 0x6e, 0x6c, 0x6f, 0x19, 0x9b, 0xef, 0xb3, 0xe5, 0x8, 0x17, 0xd1, 0xed, 0x69, 0xdc, 0x18, 0x58, 0xf8, 0x88, 0xc7, 0xed, 0xc3, 0x17, 0x20, 0xa, 0xbd, 0x2, 0x3f, 0xe5, 0x6, 0xf4, 0x59, 0x1a, 0x17, 0xc7, 0xc5, 0x31, 0x58, 0x1f, 0x50, 0x54, 0xae, 0x15, 0x27, 0x8b, 0xd1, 0x2b, 0x69, 0x2, 0xc9, 0x26, 0x70, 0xe1, 0x9e, 0x1d, 0x12, 0x2b, 0x1c, 0xb1, 0xd3, 0x3b, 0xc5, 0x5e, 0xba, 0x72, 0xa3, 0x38, 0x75, 0x6b, 0x51, 0xab, 0x57, 0x43, 0x79, 0x10, 0x12, 0x53, 0x4e, 0x13, 0x7b, 0x88, 0x61, 0x2f, 0x3e, 0xa7, 0x30, 0x0, 0x56, 0x26, 0xba, 0xd, 0xed, 0xef, 0x71, 0x7d, 0x1a, 0xdf, 0x1d, 0x28, 0xb6, 0x51, 0xc9, 0x28, 0x9d, 0x42, 0x5, 0x17, 0x56, 0x9e, 0x2d, 0xeb, 0xbb, 0x9, 0x95, 0x91, 0xcb, 0x94, 0xec, 0xc2, 0xb, 0x5b, 0x26, 0x9d, 0x9f, 0x1a, 0x2f, 0x5c, 0x19, 0x7, 0xa4, 0xb9, 0xfe, 0x39, 0x17, 0x11, 0x5e, 0xe2, 0xa8, 0x35, 0x5f, 0xfe, 0x86, 0x16, 0xc2, 0x27, 0x1e, 0xd7, 0x61, 0x59, 0xfc, 0x3e, 0xe2, 0xeb, 0x3, 0x75, 0x5d, 0xc3, 0xaa, 0xb1, 0x72, 0xfb, 0xd2, 0x6a, 0xf, 0xb, 0xb0, 0xe9, 0xdb, 0x4e, 0xbb, 0xb8, 0x85, 0xca, 0x54, 0x94, 0x1, 0xa5, 0x10, 0xc9, 0x2b, 0xb6, 0xf8, 0xe2, 0xb9, 0x54, 0x3a, 0x72, 0x89, 0x4e, 0xb4, 0xe8, 0xbc, 0xfa, 0x58, 0xbe, 0x40, 0x6b, 0x2e, 0x8a, 0xb5, 0x82, 0x15, 0xb4, 0xf2, 0x8e, 0x13, 0xef, 0xee, 0x52, 0x37, 0x53, 0x29, 0x51, 0xb2, 0xb, 0x19, 0xa0, 0xa9, 0xef, 0x6a, 0x19, 0x9f, 0xec, 0xe3, 0xef, 0x98, 0x27, 0x76, 0x77, 0x12, 0x12, 0x18, 0xae, 0x20, 0x19, 0x8c, 0x8e, 0xf0, 0x1c, 0x7e, 0xcf, 0xc5, 0x6f, 0x4b, 0x55, 0x47, 0x2d, 0xcf, 0x8, 0x9, 0x77, 0x27, 0x91, 0x74, 0x80, 0x5b, 0x66, 0x88, 0xc7, 0x35, 0x3c, 0x3f, 0xb4, 0x3, 0x43, 0xfc, 0xf2, 0xc7, 0x10, 0xdd, 0x33, 0x14, 0xa7, 0x13, 0x2c, 0xe3, 0x2f, 0x92, 0xe8, 0x2a, 0x63, 0xf0, 0xde, 0xa2, 0x3c, 0xe2, 0x7c, 0xcb, 0x77, 0xc1, 0xfb, 0xdc, 0x26, 0x87, 0xf7, 0x5, 0xc5, 0xf6, 0x71, 0xf1, 0x3e, 0xf, 0x13, 0xef, 0x2, 0x4a, 0x2b, 0xa2, 0x7e, 0xca, 0xc3, 0x3b, 0x5c, 0x67, 0x5f, 0x7a, 0xf0, 0xd5, 0x70, 0x7a, 0xf, 0x94, 0xec, 0x42, 0x4, 0xc4, 0xea, 0xf6, 0xb3, 0x8c, 0xcf, 0xf2, 0xf1, 0x77, 0xe0, 0x85, 0xbc, 0x47, 0x36, 0x3d, 0x1f, 0x6f, 0x24, 0xad, 0x1, 0x68, 0xda, 0x25, 0x31, 0x98, 0xc7, 0x25, 0xb4, 0x4c, 0x6d, 0x41, 0xec, 0x3d, 0xeb, 0xea, 0xda, 0xc8, 0x11, 0x50, 0xc3, 0x75, 0x87, 0xc7, 0x35, 0x14, 0xd4, 0xa2, 0x9d, 0xd2, 0x53, 0x21, 0xbb, 0x67, 0x64, 0x15, 0x5f, 0x2c, 0x55, 0xdd, 0xad, 0x8b, 0x39, 0x5e, 0x16, 0xa3, 0x77, 0x17, 0x1d, 0x7c, 0x1e, 0x4a, 0xf9, 0x37, 0xdc, 0xe9, 0xe8, 0x21, 0xfb, 0x4c, 0x8e, 0xee, 0x7, 0xa, 0x1d, 0x5a, 0x6a, 0xed, 0xed, 0x71, 0xfd, 0x1a, 0x3e, 0x83, 0xb8, 0x9c, 0xe7, 0x87, 0x2c, 0xcd, 0x3f, 0xca, 0xc6, 0x3a, 0x49, 0x9b, 0x17, 0xe1, 0x7c, 0x25, 0xbb, 0xf0, 0x0, 0x8d, 0x95, 0xdd, 0xad, 0x7a, 0x16, 0x5, 0xa0, 0x79, 0x55, 0x70, 0xa1, 0x63, 0x61, 0xdc, 0xc4, 0x45, 0xf2, 0x75, 0xcc, 0xe6, 0x72, 0x2, 0xdd, 0x17, 0xb6, 0xc4, 0x1e, 0x8c, 0xef, 0x16, 0xa1, 0xef, 0x2, 0x57, 0x98, 0x57, 0xcc, 0xb, 0x5d, 0x6b, 0xe, 0x16, 0xef, 0x58, 0x65, 0x2e, 0x81, 0x98, 0x6f, 0x6f, 0xcb, 0xf8, 0xdf, 0x24, 0x98, 0xec, 0xe2, 0x5c, 0x3, 0x1e, 0x13, 0x64, 0x36, 0xa3, 0x1e, 0xf, 0xa1, 0x2, 0xa4, 0xcc, 0xaf, 0xcd, 0xc1, 0x7d, 0x60, 0x9d, 0x20, 0xa6, 0xeb, 0x55, 0x2, 0x71, 0x95, 0x78, 0x27, 0xb, 0x45, 0x19, 0x8b, 0xa9, 0xf4, 0xbd, 0xe2, 0xc1, 0x5b, 0xe8, 0x67, 0xda, 0x5f, 0xc9, 0x2e, 0x1c, 0x38, 0xd2, 0x43, 0x63, 0x59, 0x18, 0xc0, 0xef, 0x5a, 0xca, 0xdf, 0x77, 0x65, 0x4c, 0xac, 0x39, 0x1b, 0x60, 0xe9, 0x3c, 0x6a, 0x19, 0x47, 0xf0, 0x7a, 0x50, 0x44, 0xbe, 0x3, 0x6a, 0xb7, 0xee, 0x13, 0x7b, 0x7f, 0xcb, 0x2f, 0xf9, 0xc, 0xe7, 0x85, 0xf4, 0xde, 0x61, 0xd9, 0xb8, 0x33, 0x60, 0xe1, 0x92, 0x7f, 0x2e, 0xa6, 0xeb, 0xd, 0xef, 0xe9, 0x19, 0xe2, 0x14, 0x62, 0xe7, 0xd2, 0x6a, 0x1d, 0x4c, 0xcf, 0x86, 0x97, 0x45, 0x77, 0x63, 0x8c, 0xf7, 0x50, 0x24, 0xe, 0xd, 0xf0, 0x50, 0xfe, 0x10, 0xc6, 0x40, 0x86, 0x72, 0xa6, 0x1d, 0x86, 0x94, 0xec, 0x2, 0x2, 0xfa, 0x40, 0xda, 0x3a, 0x4, 0xa0, 0x8b, 0x40, 0x50, 0xc5, 0xb5, 0xab, 0xf3, 0x60, 0x5e, 0x87, 0x79, 0x90, 0x1, 0x62, 0x15, 0x5d, 0x43, 0x7e, 0xef, 0x28, 0xf0, 0x47, 0xdd, 0x59, 0x5b, 0xcb, 0xb5, 0xc9, 0xb4, 0x20, 0x16, 0x87, 0xf4, 0xde, 0xe1, 0x92, 0x3f, 0xd4, 0xe2, 0x51, 0xb8, 0x47, 0xaa, 0x36, 0x3a, 0x57, 0xf8, 0x7, 0xa4, 0xe4, 0xdf, 0x22, 0xf6, 0x32, 0x9b, 0xbb, 0x62, 0x6a, 0xd1, 0xb9, 0x81, 0x12, 0x29, 0xc4, 0xed, 0x6d, 0xde, 0xaa, 0x36, 0xb4, 0xb8, 0x33, 0x3a, 0x5d, 0x45, 0xc9, 0x2e, 0x18, 0xa0, 0xc0, 0x7b, 0x67, 0xd7, 0x18, 0xfc, 0xe9, 0x63, 0x74, 0x6a, 0xea, 0x84, 0xef, 0xf8, 0xf2, 0xbb, 0x81, 0x98, 0xc6, 0xd9, 0x21, 0xbf, 0x77, 0xd4, 0xc7, 0xf5, 0xf2, 0xb0, 0x20, 0x50, 0x50, 0x1e, 0x66, 0x57, 0x20, 0x36, 0xdd, 0xad, 0x5d, 0x63, 0x70, 0xc7, 0xbf, 0xac, 0x4b, 0x32, 0x30, 0xa0, 0x6d, 0xdc, 0xdd, 0x62, 0x3f, 0x3d, 0x2, 0x9d, 0x5d, 0x2e, 0xcb, 0xa3, 0xb9, 0xc0, 0x5a, 0x3b, 0xd9, 0xe3, 0x1d, 0x41, 0x8f, 0xdd, 0x8c, 0xca, 0x42, 0x94, 0xec, 0x82, 0xc1, 0x11, 0x16, 0x6d, 0x3, 0xe9, 0xb4, 0x1f, 0xeb, 0xd4, 0xd4, 0x19, 0xe8, 0x68, 0x31, 0xc9, 0x32, 0x7e, 0xbc, 0x64, 0xd6, 0xe9, 0x3d, 0x17, 0x40, 0x31, 0xf8, 0x85, 0x96, 0x71, 0xc4, 0x80, 0x90, 0xac, 0x32, 0x25, 0xe4, 0x73, 0xe, 0x2f, 0x85, 0x3b, 0xc6, 0x88, 0x92, 0x90, 0x65, 0xba, 0x1c, 0x3, 0x3, 0x36, 0x70, 0x5b, 0x89, 0x1, 0x9a, 0x7d, 0xa3, 0xc, 0xa2, 0x24, 0xcf, 0xe6, 0x63, 0x2a, 0xdf, 0x21, 0x9b, 0x67, 0xc, 0x39, 0xb, 0x47, 0x29, 0xd9, 0x65, 0x1f, 0x68, 0xf, 0xf6, 0x7f, 0x96, 0x71, 0xd4, 0xc7, 0x6c, 0xd0, 0xe9, 0xa9, 0x33, 0xd0, 0x75, 0xe1, 0x1e, 0xcb, 0x78, 0xcb, 0x4c, 0x16, 0x7c, 0x96, 0x51, 0x42, 0xab, 0x13, 0xd6, 0xa8, 0xad, 0x4f, 0x29, 0xd2, 0xf5, 0x47, 0x86, 0x7c, 0xbe, 0x11, 0x5f, 0xb4, 0x9d, 0x62, 0xff, 0xb6, 0x2e, 0xc5, 0xc0, 0xd0, 0x97, 0x4a, 0x90, 0x1b, 0xd8, 0x3f, 0xd0, 0x6f, 0x74, 0x71, 0x9e, 0xce, 0xb, 0xf6, 0x50, 0xaf, 0x2c, 0x66, 0xd4, 0xac, 0xb6, 0x50, 0xb2, 0xcb, 0x2e, 0x50, 0x8, 0xdd, 0xd1, 0x35, 0x6, 0x6d, 0xe4, 0x39, 0x9d, 0x1a, 0xdf, 0x80, 0x14, 0xf0, 0x19, 0xae, 0xb1, 0x4, 0xc9, 0xae, 0x28, 0x44, 0xf7, 0x9, 0xb2, 0x43, 0x3d, 0xdd, 0x5e, 0x96, 0x6b, 0x48, 0x7c, 0x18, 0x11, 0x81, 0xb9, 0x46, 0x1f, 0x52, 0xdb, 0xb1, 0x2c, 0x9f, 0xeb, 0x32, 0xc, 0x4, 0x50, 0x8e, 0x6e, 0xb7, 0xec, 0xcd, 0x28, 0x33, 0x42, 0xe6, 0xe5, 0x67, 0x79, 0x3e, 0x3f, 0xc8, 0x38, 0xff, 0xc0, 0x32, 0x8e, 0xce, 0x32, 0x43, 0x94, 0xec, 0xb2, 0x87, 0x22, 0xba, 0x18, 0xdc, 0x80, 0xcb, 0x67, 0x92, 0x4e, 0x8f, 0x6f, 0x40, 0x52, 0xc4, 0xf3, 0x96, 0x71, 0x9c, 0x90, 0xbc, 0x7d, 0x88, 0xee, 0x13, 0x75, 0x51, 0x36, 0xf7, 0xe5, 0x3c, 0x8f, 0xf1, 0xb0, 0x92, 0x9d, 0x7b, 0x4e, 0xe1, 0xbe, 0x5c, 0xa1, 0xcb, 0x30, 0x10, 0x60, 0xff, 0xb0, 0x95, 0xd2, 0x8c, 0x15, 0xe7, 0x6c, 0xc7, 0x7c, 0x7, 0x5a, 0xa0, 0x9d, 0x27, 0xf6, 0xc4, 0xa8, 0xf3, 0x3c, 0x14, 0x4b, 0x25, 0xbb, 0x0, 0x80, 0xd4, 0x71, 0x5b, 0xcf, 0x3a, 0xa4, 0xcd, 0xaf, 0xd7, 0xe9, 0xf1, 0x15, 0xb0, 0x94, 0xdd, 0x1d, 0xf5, 0x51, 0xd7, 0xd8, 0x33, 0x44, 0xf7, 0x88, 0x17, 0xaf, 0xb9, 0x6b, 0xc, 0x59, 0x8c, 0xc3, 0x24, 0x98, 0x12, 0x94, 0x20, 0xd0, 0xc4, 0x62, 0x2d, 0xa3, 0x31, 0xc2, 0x6a, 0x5d, 0x82, 0xbe, 0x3, 0xa7, 0xa9, 0xdb, 0xba, 0x83, 0x60, 0x9d, 0x5f, 0xa4, 0x7b, 0xc8, 0x6f, 0x98, 0x4a, 0xeb, 0xd7, 0x8d, 0x46, 0x95, 0x95, 0x95, 0xd7, 0x16, 0x35, 0x68, 0xd0, 0x40, 0xc9, 0x2e, 0x58, 0xa0, 0xb3, 0x84, 0xad, 0x33, 0xf7, 0x7c, 0x51, 0x17, 0x66, 0x10, 0x80, 0x1b, 0xd3, 0x76, 0x34, 0x4b, 0xbf, 0x90, 0xdf, 0x37, 0xda, 0xb7, 0x3d, 0x1d, 0xa1, 0x79, 0xb6, 0x95, 0x4a, 0x20, 0x76, 0x54, 0xa6, 0x4b, 0xd0, 0x77, 0xa0, 0x2b, 0x88, 0xed, 0x0, 0x63, 0xc4, 0xa8, 0x27, 0xea, 0xf4, 0x6c, 0x2, 0x34, 0x86, 0x9e, 0xe6, 0x1e, 0x34, 0x44, 0xd7, 0xef, 0x8d, 0xd1, 0x1f, 0xf4, 0x56, 0xb2, 0xb, 0x16, 0xa7, 0x79, 0x58, 0x75, 0x88, 0xcb, 0xac, 0xd2, 0xe9, 0xf1, 0x1d, 0x65, 0x1e, 0x64, 0xb7, 0xaf, 0x84, 0x2b, 0x6e, 0xe7, 0x26, 0x89, 0x2b, 0x23, 0x46, 0x14, 0x4d, 0x2c, 0x63, 0x68, 0xdd, 0x56, 0xaa, 0x4b, 0xd0, 0x57, 0x20, 0x2e, 0x3a, 0xc0, 0x32, 0x3e, 0x4f, 0xa2, 0x11, 0xdb, 0xcd, 0x36, 0xb0, 0xa7, 0x5e, 0xef, 0x1e, 0x2c, 0x28, 0x28, 0x28, 0x9c, 0x38, 0x6d, 0xe6, 0x25, 0xd3, 0x67, 0xcf, 0x4d, 0x28, 0xd9, 0x5, 0x3, 0xd4, 0x20, 0x5d, 0x61, 0x19, 0x9f, 0x2d, 0xb9, 0xeb, 0xa7, 0x97, 0xf, 0x40, 0x92, 0x84, 0xdb, 0xb5, 0x83, 0x73, 0xc7, 0x3a, 0x87, 0xf4, 0x7e, 0xd1, 0xc8, 0x77, 0x42, 0xc4, 0xe6, 0xd8, 0xd6, 0xa2, 0x6d, 0xb5, 0xf8, 0x7b, 0x26, 0xa3, 0xc2, 0x51, 0x96, 0xb7, 0xb1, 0x8c, 0xa3, 0x65, 0xd9, 0x12, 0x9d, 0x1e, 0x2b, 0x70, 0xca, 0xc3, 0x26, 0x8d, 0xee, 0x13, 0x86, 0xe2, 0x4a, 0x4a, 0x4b, 0xfb, 0xbe, 0xfc, 0xf6, 0x7b, 0x87, 0x54, 0x54, 0x54, 0x28, 0xd9, 0xf9, 0xc, 0x68, 0x10, 0xe8, 0x64, 0x60, 0x3b, 0x1d, 0xfc, 0x1f, 0xe2, 0x7d, 0xa, 0xaf, 0xa2, 0xee, 0x98, 0x60, 0xd9, 0x8, 0x90, 0xcd, 0xb6, 0x4b, 0x8, 0xef, 0x15, 0xa7, 0x17, 0xdc, 0x11, 0x13, 0x92, 0x80, 0x15, 0x52, 0xac, 0xcb, 0xcf, 0x37, 0x6c, 0xee, 0x61, 0xd5, 0xa1, 0x98, 0xfa, 0x5e, 0x9d, 0x1e, 0x4f, 0xa0, 0x51, 0xc7, 0xad, 0x6e, 0x2f, 0x43, 0xe3, 0x46, 0xd, 0x65, 0xfc, 0xa4, 0xa9, 0x83, 0xbf, 0x9e, 0x3a, 0xa3, 0xbe, 0x92, 0x9d, 0xbf, 0x40, 0xab, 0xaa, 0xd3, 0x2d, 0xe3, 0xef, 0x1b, 0x79, 0x56, 0xa7, 0x27, 0x70, 0x2, 0x59, 0x60, 0x51, 0x3e, 0xc2, 0x48, 0x76, 0x6f, 0x89, 0xbf, 0x27, 0x5e, 0x64, 0x53, 0x99, 0x73, 0xa3, 0xbe, 0x2e, 0x3d, 0x5f, 0x81, 0x63, 0x93, 0x6c, 0xb1, 0xd1, 0x7f, 0x4b, 0xb8, 0x8e, 0x78, 0xa, 0x23, 0x50, 0x86, 0x30, 0xae, 0xa, 0xb, 0x96, 0x57, 0xf4, 0x5a, 0xb7, 0x7e, 0x43, 0x77, 0x25, 0x3b, 0xff, 0x80, 0xb6, 0x60, 0x23, 0x2c, 0xf3, 0x88, 0xf4, 0xd8, 0x28, 0x9e, 0xd8, 0x1c, 0x45, 0x4c, 0xb3, 0x8c, 0x6d, 0x1b, 0xb2, 0x7b, 0x44, 0xbd, 0xdd, 0xdd, 0x11, 0x9d, 0x5f, 0x9b, 0x67, 0x2, 0x87, 0xb7, 0x36, 0xd6, 0xa5, 0xe7, 0xb, 0x10, 0x5f, 0x3e, 0xd6, 0x32, 0x8e, 0xc2, 0xf1, 0xa7, 0x74, 0x7a, 0xaa, 0x5, 0xc2, 0x18, 0x55, 0x4a, 0x32, 0x8a, 0x8b, 0x8b, 0x1a, 0xff, 0xe7, 0xc5, 0xd7, 0x8f, 0x57, 0xb2, 0xf3, 0x7, 0x88, 0xd, 0x3d, 0x6c, 0x64, 0x2b, 0xcb, 0x35, 0xb8, 0xab, 0xbe, 0xd4, 0x29, 0xca, 0xa, 0x6c, 0xf5, 0x8b, 0x88, 0xa1, 0x16, 0x86, 0xe8, 0x1e, 0xdf, 0x95, 0xe8, 0xc5, 0xea, 0x92, 0xb0, 0xc5, 0x8b, 0x60, 0x85, 0x34, 0xd5, 0xa5, 0xe7, 0xb, 0xe0, 0x85, 0xe8, 0x65, 0x19, 0x7f, 0x43, 0xbc, 0x4f, 0xec, 0x56, 0x6c, 0x8a, 0x57, 0xdc, 0x73, 0x55, 0x2f, 0x91, 0x90, 0x1f, 0x57, 0xae, 0x3a, 0xe9, 0xb5, 0x51, 0x63, 0x37, 0x53, 0xb2, 0xab, 0x1b, 0x50, 0x3b, 0x5, 0x17, 0xe5, 0x9e, 0x96, 0x6b, 0x1f, 0x89, 0x73, 0x7c, 0xbc, 0x22, 0x3b, 0xb0, 0x6d, 0x8, 0xcd, 0xc4, 0x69, 0xdb, 0x16, 0x6, 0x20, 0xae, 0xf0, 0x5f, 0x89, 0x6e, 0xaa, 0x3e, 0xba, 0xce, 0x2f, 0x75, 0x8d, 0x41, 0x91, 0xe8, 0xa9, 0x4b, 0xcf, 0x17, 0xf4, 0x11, 0x7b, 0xf6, 0xf0, 0x23, 0x3a, 0x35, 0x19, 0x3, 0x2d, 0x4, 0x1f, 0x4b, 0x1d, 0x48, 0x18, 0xb2, 0x2b, 0x29, 0x29, 0x6d, 0x3d, 0x67, 0xfe, 0xb7, 0x7d, 0x95, 0xec, 0x6a, 0x8f, 0x2d, 0xb8, 0x79, 0x1d, 0x6c, 0xb9, 0x86, 0xae, 0xfc, 0xe8, 0xbe, 0x5f, 0xa2, 0xd3, 0x94, 0x35, 0xd8, 0x3a, 0xa1, 0xb7, 0xe, 0x91, 0xe5, 0x1, 0xcb, 0xe8, 0xf5, 0x8, 0xcf, 0xef, 0x4f, 0x1e, 0x73, 0xfc, 0x47, 0x5d, 0x7a, 0xbe, 0xe0, 0x78, 0xcb, 0xd8, 0x78, 0x8a, 0x22, 0x73, 0xe0, 0x1d, 0xdb, 0xa4, 0xd1, 0x41, 0xc3, 0xe2, 0x6, 0x32, 0x7d, 0xf6, 0xdc, 0xa3, 0xd, 0xe1, 0x29, 0xd9, 0xd5, 0x2, 0xb0, 0x18, 0x9e, 0xf7, 0x20, 0x3a, 0x10, 0xdc, 0x99, 0x62, 0x8f, 0x21, 0x29, 0x82, 0xc3, 0x5a, 0x8b, 0x72, 0x1, 0xa2, 0x6b, 0x10, 0x92, 0xfb, 0x1b, 0x49, 0xc2, 0x88, 0x2a, 0x56, 0x79, 0x6c, 0xbc, 0xb0, 0x48, 0x3a, 0xea, 0xf2, 0xab, 0x13, 0x76, 0x12, 0xfb, 0x39, 0x8c, 0x50, 0xa6, 0xb5, 0x8e, 0xb1, 0x66, 0xc0, 0xc9, 0x21, 0x9b, 0x84, 0xa, 0xa, 0xa, 0xa, 0x64, 0xc9, 0xd2, 0xe5, 0xfb, 0x2d, 0x5f, 0xf1, 0x53, 0x1b, 0x25, 0xbb, 0x9a, 0x1, 0xbe, 0xf5, 0xb7, 0x3c, 0x88, 0xe, 0x18, 0x2c, 0xe1, 0xef, 0x60, 0x1f, 0x47, 0xa0, 0x95, 0x92, 0x3b, 0x89, 0x2, 0xae, 0xc3, 0xb0, 0xa4, 0xf8, 0xc7, 0x21, 0x23, 0x77, 0xb4, 0x65, 0x3e, 0xe1, 0xca, 0xbf, 0x5c, 0x97, 0x5f, 0x9d, 0x80, 0x73, 0x2, 0xdd, 0xee, 0x76, 0xf4, 0x7c, 0xd4, 0xa3, 0xc0, 0x6a, 0xe, 0x24, 0xaa, 0x8c, 0x4a, 0x1d, 0xa8, 0xac, 0xac, 0x34, 0x84, 0x57, 0xbf, 0x5d, 0x79, 0x45, 0xc5, 0xee, 0x4a, 0x76, 0x35, 0x73, 0x35, 0xe0, 0x85, 0xef, 0xe1, 0x71, 0x1d, 0x7, 0x73, 0x3e, 0xa0, 0xd3, 0x94, 0x33, 0x94, 0xbb, 0xfe, 0x8d, 0x1a, 0xb0, 0x30, 0x74, 0x51, 0x81, 0xff, 0x64, 0x72, 0xc, 0xe6, 0xf7, 0x1d, 0x23, 0x73, 0x2d, 0xe3, 0x67, 0x88, 0x93, 0x36, 0xaf, 0xa8, 0x1d, 0xd0, 0x71, 0xc9, 0x5d, 0xda, 0x31, 0x4f, 0xc2, 0x7f, 0xbe, 0x61, 0x58, 0xf1, 0x86, 0x5b, 0x29, 0x6b, 0x58, 0x5c, 0x54, 0xef, 0xc9, 0x17, 0x5e, 0xdb, 0x7f, 0x43, 0x49, 0x89, 0x92, 0x5d, 0x35, 0xc0, 0xf9, 0x48, 0x48, 0x19, 0x47, 0x2f, 0xc3, 0x6d, 0x3c, 0x3e, 0x73, 0x83, 0x38, 0x8d, 0x7d, 0x15, 0xb9, 0x83, 0x7b, 0xc3, 0x40, 0x6, 0x56, 0x93, 0x10, 0xdc, 0xd7, 0xa7, 0x12, 0x8f, 0x3, 0x4e, 0x51, 0x4a, 0x73, 0xbf, 0xc7, 0xb5, 0xfb, 0x8c, 0x1c, 0xa6, 0x4b, 0xb0, 0xc6, 0x40, 0x48, 0xa4, 0x8b, 0x65, 0x1c, 0x56, 0x9d, 0x36, 0xd9, 0xae, 0x1d, 0x10, 0x42, 0x9a, 0xed, 0x1e, 0x2c, 0x2d, 0x2b, 0x3b, 0xa0, 0x41, 0x61, 0x61, 0x42, 0xc9, 0xce, 0xe, 0x6c, 0x94, 0x28, 0x14, 0x47, 0x3b, 0xaa, 0x41, 0x46, 0xa, 0x2c, 0x9f, 0x41, 0x76, 0x1d, 0x8e, 0xe3, 0xb8, 0x5a, 0xa7, 0x2b, 0x94, 0xa8, 0xc, 0xc1, 0x3d, 0x6c, 0x8, 0xc9, 0x7d, 0xf8, 0x81, 0xc7, 0xc4, 0x1e, 0x8f, 0xc6, 0xa6, 0x8d, 0x18, 0xd3, 0xa9, 0xba, 0xe4, 0x6a, 0x84, 0x76, 0x46, 0x3a, 0x59, 0xc6, 0xc7, 0xe8, 0xd4, 0xd4, 0x1a, 0x25, 0xee, 0xf9, 0xfb, 0x35, 0x2b, 0xb3, 0xb4, 0xb4, 0xfb, 0xec, 0x79, 0xb, 0x5a, 0x28, 0xd9, 0x6d, 0x8a, 0x86, 0xe2, 0xb4, 0xed, 0x81, 0xcb, 0x12, 0xa9, 0xbf, 0x3b, 0x78, 0x7c, 0xe, 0xda, 0xfa, 0x49, 0xd4, 0x6a, 0x15, 0xa, 0x2f, 0xc4, 0xe9, 0xfd, 0x5a, 0x2e, 0xce, 0xe1, 0x98, 0xb6, 0x12, 0x8a, 0xcd, 0xf8, 0xbe, 0xa0, 0x13, 0x7d, 0x2b, 0x7d, 0xec, 0x19, 0x61, 0x3b, 0xee, 0x37, 0x6e, 0x5, 0x4d, 0xeb, 0x73, 0xeb, 0x86, 0x8f, 0xdd, 0x64, 0xf7, 0xcb, 0x2f, 0x6b, 0x8b, 0x47, 0x8e, 0xf9, 0x68, 0x8f, 0x7a, 0x21, 0xd6, 0x8a, 0xb3, 0x5, 0xbc, 0xa8, 0xbd, 0xc4, 0xe9, 0x63, 0x9, 0x5f, 0xf9, 0xa3, 0x46, 0xf6, 0x49, 0xf3, 0xf9, 0x2f, 0x8c, 0x1c, 0x22, 0x7a, 0x6c, 0x8f, 0x22, 0xff, 0x80, 0xf4, 0xee, 0x6b, 0x3d, 0xae, 0xa1, 0x85, 0xd8, 0x5, 0xdc, 0xac, 0x71, 0x54, 0x4d, 0x6b, 0x9d, 0xae, 0xb4, 0xb0, 0x35, 0x2b, 0x47, 0x7c, 0x57, 0x9b, 0x3e, 0xd7, 0xd, 0xd3, 0xc5, 0x75, 0xb0, 0x2b, 0x8, 0xaf, 0xb8, 0xa8, 0xa8, 0x73, 0x41, 0x9a, 0x85, 0x8b, 0x6b, 0x89, 0x18, 0x4d, 0x42, 0x25, 0xbf, 0x53, 0x63, 0xba, 0xf, 0xba, 0x89, 0x73, 0x1c, 0xc, 0xfe, 0xbe, 0x67, 0x6, 0xdf, 0x15, 0x49, 0x10, 0x77, 0x8a, 0xd3, 0xf4, 0x79, 0xa5, 0xae, 0x29, 0x45, 0x9e, 0x2, 0xd, 0x13, 0xd0, 0x35, 0xe8, 0xaf, 0x69, 0x2c, 0x96, 0x7b, 0x48, 0x78, 0xaf, 0x89, 0xe3, 0xfe, 0x9c, 0x91, 0x67, 0xa, 0x74, 0x26, 0xb0, 0x95, 0x1c, 0xe0, 0x50, 0x52, 0x3d, 0xa0, 0xb5, 0x6e, 0x40, 0xad, 0xf3, 0x42, 0x71, 0xb9, 0x88, 0xcb, 0xca, 0xcb, 0x3d, 0xc9, 0xe, 0xf1, 0x2a, 0xa4, 0xd8, 0xc7, 0xc9, 0xd, 0x53, 0xc9, 0x97, 0x14, 0x49, 0x27, 0x45, 0x52, 0xb3, 0x66, 0xb6, 0x63, 0xc5, 0xc9, 0xb8, 0x1c, 0x9b, 0xa7, 0xb, 0x8, 0xf3, 0x85, 0x62, 0xfa, 0x86, 0x29, 0xf3, 0x57, 0xc9, 0xf5, 0xd1, 0x82, 0x73, 0x89, 0xf8, 0xd4, 0xa, 0xd7, 0x7c, 0xe3, 0xdf, 0xf0, 0xa3, 0xaf, 0xa1, 0x82, 0xa0, 0xc5, 0xf6, 0xd1, 0x47, 0x5, 0x2d, 0xb8, 0xf9, 0x7c, 0x27, 0xbc, 0x8a, 0xf7, 0x3b, 0x51, 0x40, 0x8a, 0xef, 0x19, 0x79, 0xc9, 0xc8, 0x67, 0xa2, 0x99, 0x86, 0x49, 0xd8, 0x1a, 0x3f, 0xcf, 0x54, 0xa5, 0xa0, 0xce, 0x58, 0x4a, 0xc2, 0xfb, 0x8d, 0xec, 0x1a, 0x35, 0x2c, 0x96, 0xcf, 0x27, 0x4c, 0xda, 0xda, 0x8b, 0xec, 0xb6, 0xa6, 0xe4, 0x3b, 0x92, 0xc7, 0xbf, 0x3f, 0x9d, 0x27, 0x1b, 0x35, 0xda, 0x40, 0xc1, 0xad, 0xbb, 0x87, 0x38, 0x6e, 0x96, 0x5d, 0xb8, 0xe, 0x70, 0x7a, 0x72, 0x33, 0x17, 0xd9, 0x55, 0x90, 0xec, 0x52, 0x8b, 0xb7, 0x93, 0x5a, 0x69, 0xc2, 0x45, 0x76, 0x70, 0x2b, 0xa0, 0x38, 0x19, 0x59, 0x7d, 0xc8, 0x34, 0x43, 0x8b, 0xaf, 0x6f, 0x29, 0xd8, 0x34, 0xe7, 0xf0, 0x73, 0x7a, 0xfa, 0x75, 0x74, 0x80, 0x6, 0xe8, 0xe3, 0xf8, 0x7e, 0xf4, 0x48, 0xf3, 0x39, 0x94, 0x81, 0xf4, 0xa7, 0x2c, 0xe3, 0xff, 0x41, 0x5c, 0xe5, 0x4d, 0x5a, 0x7c, 0xf9, 0xda, 0x2c, 0x7d, 0x7b, 0xf, 0xb2, 0x53, 0xd4, 0x1d, 0xdf, 0x18, 0xe9, 0xeb, 0xb2, 0xec, 0x5a, 0x16, 0xe8, 0xbc, 0x54, 0x1, 0x36, 0x5d, 0xf4, 0xb7, 0x7c, 0x88, 0xda, 0x68, 0xdc, 0xdd, 0xa, 0x70, 0xa7, 0xec, 0x26, 0x4e, 0xaf, 0x43, 0xd4, 0xfd, 0x20, 0x29, 0xa7, 0x71, 0x2d, 0xad, 0x7a, 0xf7, 0x19, 0x67, 0xdb, 0x64, 0xf0, 0x7f, 0x4a, 0x49, 0x80, 0x58, 0xa0, 0x13, 0xc5, 0xa9, 0xe7, 0x9a, 0x4c, 0x57, 0xc4, 0x7c, 0xd1, 0x53, 0xde, 0xc3, 0xc, 0xbc, 0x27, 0xbd, 0x8d, 0x5c, 0x22, 0x4e, 0xf7, 0xa0, 0xed, 0xab, 0xf9, 0x3c, 0x92, 0x57, 0xe, 0xa7, 0x5c, 0xc7, 0xe7, 0x8b, 0x42, 0xe0, 0x4f, 0x48, 0x7c, 0x33, 0xe8, 0x5, 0x88, 0x3b, 0xa0, 0x30, 0x36, 0xb1, 0xec, 0x3b, 0x7a, 0xf6, 0xa5, 0x3f, 0xa8, 0x52, 0x13, 0x9a, 0x48, 0x24, 0x36, 0x57, 0xb2, 0xdb, 0xb8, 0xd0, 0x90, 0x56, 0x8d, 0x93, 0x6f, 0xdf, 0xa7, 0xe6, 0x19, 0x57, 0x77, 0x2, 0x48, 0xac, 0x83, 0x91, 0xa3, 0x8d, 0x1c, 0x6a, 0x64, 0x57, 0x5a, 0x6e, 0xb9, 0xb4, 0x26, 0xb7, 0xa4, 0xec, 0x9d, 0x32, 0xe, 0xab, 0x70, 0x1e, 0x5, 0xee, 0xaf, 0xb1, 0x7c, 0x46, 0xeb, 0x74, 0xb9, 0x86, 0xa, 0x78, 0x1e, 0x48, 0xee, 0x42, 0xf9, 0x1, 0xce, 0x76, 0x1c, 0x28, 0x76, 0x17, 0x9d, 0xed, 0xb9, 0xef, 0x44, 0x39, 0x8f, 0x4a, 0xcd, 0xc, 0x3e, 0x63, 0xbc, 0x7f, 0x1f, 0x50, 0xe1, 0x89, 0xa3, 0xb2, 0x89, 0xee, 0x33, 0xee, 0xbd, 0x17, 0xdf, 0x7f, 0xb9, 0x2e, 0x27, 0x5f, 0x30, 0xdf, 0x32, 0xb6, 0x59, 0xbe, 0x91, 0x1d, 0x5c, 0x26, 0x70, 0xa5, 0xe1, 0x40, 0xc4, 0xa5, 0xdc, 0x48, 0x91, 0x3d, 0x86, 0xda, 0x8c, 0xd9, 0x12, 0xef, 0x7e, 0x74, 0xdb, 0xd0, 0xb4, 0x3f, 0xc5, 0xc8, 0xef, 0x24, 0x1c, 0x1d, 0x46, 0xd2, 0x21, 0x49, 0x80, 0x7b, 0x19, 0x39, 0x8e, 0xcf, 0x6, 0x9a, 0xef, 0x48, 0x12, 0xdf, 0x24, 0x5a, 0x82, 0x3f, 0x8b, 0xc6, 0x39, 0xc2, 0x80, 0x39, 0x24, 0xbd, 0xbb, 0x8c, 0x1c, 0x43, 0xe2, 0x43, 0x56, 0x73, 0xb3, 0xc, 0xff, 0x3f, 0x4e, 0xeb, 0xee, 0x41, 0x39, 0x9d, 0xef, 0xea, 0x12, 0x3e, 0xeb, 0xf, 0x69, 0xf9, 0xcf, 0x90, 0xaa, 0x27, 0x30, 0x44, 0x11, 0xb0, 0xea, 0xdc, 0x39, 0x3, 0x3f, 0xc7, 0xe4, 0xbb, 0x85, 0x1, 0xf3, 0xb8, 0x5f, 0xa4, 0x1e, 0xf3, 0xd5, 0xc8, 0x8b, 0xec, 0x5e, 0xa0, 0xa6, 0x16, 0x27, 0xac, 0xe5, 0x82, 0x4a, 0x92, 0xdd, 0xf7, 0x12, 0x9e, 0xfe, 0x89, 0x41, 0x2, 0xae, 0xa5, 0xb3, 0xb9, 0x1, 0xd5, 0xe5, 0x4, 0xef, 0x52, 0x4a, 0x32, 0x16, 0xb7, 0x58, 0xec, 0x49, 0x3e, 0xb8, 0x8e, 0x7e, 0x7f, 0xdb, 0x52, 0x7b, 0xad, 0xc7, 0x3f, 0xeb, 0x4b, 0xdd, 0x12, 0x9e, 0xa, 0x49, 0xd8, 0x7f, 0xa1, 0xac, 0xa0, 0xc5, 0x87, 0x26, 0xc5, 0xd, 0xf5, 0xfd, 0xe, 0xd, 0xf0, 0x7e, 0x3d, 0x46, 0x41, 0xec, 0xb7, 0x27, 0xd7, 0xde, 0x7e, 0x35, 0x7c, 0x4e, 0x50, 0xc6, 0xda, 0x89, 0x53, 0xf7, 0xa, 0x41, 0x36, 0xf4, 0x4c, 0x92, 0xea, 0x44, 0x92, 0xe0, 0x4, 0x5a, 0x44, 0x51, 0x53, 0x76, 0x90, 0xb1, 0x5a, 0x6c, 0xb1, 0x90, 0xb1, 0x1f, 0xe9, 0xa1, 0xb8, 0x75, 0xc7, 0x1a, 0xae, 0x97, 0x54, 0xb2, 0xdb, 0xc2, 0x8b, 0xec, 0xbe, 0x36, 0xf2, 0xa2, 0xce, 0x59, 0xa4, 0x81, 0xc4, 0x12, 0xc4, 0x51, 0x2e, 0x12, 0x27, 0x93, 0x32, 0x53, 0x20, 0x6b, 0x72, 0x1, 0x5d, 0x1, 0xb, 0x68, 0xf1, 0x22, 0x91, 0x64, 0x91, 0x38, 0x6e, 0xa5, 0xe4, 0x42, 0x42, 0x32, 0x49, 0xc2, 0x83, 0xec, 0xea, 0xa5, 0x2c, 0xb4, 0x26, 0x24, 0x3e, 0x64, 0xed, 0xa1, 0xfb, 0xf8, 0x56, 0xdc, 0xc4, 0xf0, 0xc2, 0xa3, 0x16, 0xab, 0x25, 0xc7, 0x8b, 0x6b, 0x61, 0xf9, 0x25, 0x13, 0x1f, 0x14, 0xe1, 0xc4, 0x57, 0x94, 0x7b, 0xb9, 0x1e, 0xf1, 0xac, 0x10, 0xe3, 0xeb, 0x4a, 0xc5, 0xab, 0x26, 0x9e, 0x25, 0x28, 0x4b, 0x9d, 0x29, 0x47, 0x1a, 0xb9, 0x4a, 0x9c, 0xd3, 0x24, 0xd0, 0xe5, 0xe8, 0x7d, 0x12, 0xdf, 0x2c, 0xb1, 0x1f, 0x47, 0x14, 0x36, 0x94, 0x5b, 0x8, 0x1a, 0xdf, 0x6b, 0xae, 0x2e, 0x19, 0x5f, 0x50, 0x29, 0x16, 0xcf, 0x95, 0xd7, 0x62, 0x2b, 0xd6, 0xf9, 0x8a, 0x34, 0xe0, 0xaa, 0x1c, 0x2a, 0xf6, 0x76, 0x44, 0x36, 0x8b, 0xd, 0xee, 0x21, 0xb8, 0x72, 0x3f, 0xe0, 0xb, 0xb7, 0x40, 0x36, 0x2d, 0x23, 0xa8, 0xd, 0x4a, 0x52, 0xb4, 0x2c, 0x2f, 0xf7, 0x4c, 0xa3, 0x14, 0xb2, 0x83, 0xd5, 0x86, 0x44, 0x19, 0x74, 0x28, 0xef, 0x2e, 0x4e, 0x10, 0xbf, 0x50, 0x1f, 0x65, 0x2c, 0x50, 0x41, 0x65, 0xe9, 0x41, 0x4a, 0x4b, 0xae, 0x4d, 0x3c, 0x6f, 0x34, 0x68, 0x40, 0xbd, 0x6b, 0xb3, 0x1a, 0x92, 0x1f, 0x14, 0xaa, 0xe6, 0x2e, 0x85, 0x7, 0xae, 0x4e, 0x14, 0x15, 0x23, 0xe6, 0x87, 0xd3, 0xe1, 0x91, 0xe8, 0x14, 0x95, 0x6c, 0xcf, 0x7a, 0x6a, 0xd5, 0x5, 0xb, 0x4d, 0x50, 0x89, 0x17, 0x60, 0x2d, 0xdd, 0x40, 0xb2, 0xab, 0x6e, 0xf3, 0x41, 0x6, 0x1c, 0x62, 0x21, 0x38, 0x9f, 0x6f, 0xaa, 0xe4, 0xa6, 0xb4, 0x62, 0x2d, 0x89, 0x35, 0x79, 0xda, 0xf8, 0xb, 0xfc, 0x13, 0xee, 0x2e, 0x24, 0x2e, 0xf4, 0x12, 0xc7, 0xd, 0x6, 0xad, 0xb7, 0x8b, 0xe8, 0x29, 0x1d, 0x71, 0xc1, 0xf, 0x14, 0x28, 0x57, 0xf7, 0xd0, 0xea, 0x7, 0xf9, 0xfd, 0x5e, 0x1c, 0x77, 0x27, 0xce, 0xc9, 0xdb, 0x41, 0x6a, 0x7e, 0xda, 0xfc, 0x8e, 0x94, 0x23, 0x8c, 0x5c, 0x2f, 0x4e, 0xec, 0xe6, 0x15, 0x92, 0xdf, 0x67, 0xa2, 0x31, 0x31, 0x25, 0x3b, 0x45, 0x2c, 0x80, 0xce, 0xf3, 0x48, 0xe, 0xe8, 0x50, 0xd, 0xb9, 0x3c, 0x45, 0xf9, 0x44, 0xc2, 0x9b, 0x90, 0x83, 0xf8, 0xc5, 0x24, 0xca, 0x5d, 0xb4, 0x4, 0x40, 0x76, 0xfb, 0xf3, 0x7b, 0x22, 0x6b, 0xb3, 0x81, 0x3e, 0xf2, 0xd8, 0x0, 0xa5, 0x27, 0x5f, 0x50, 0x80, 0x56, 0x24, 0xbb, 0xce, 0xb4, 0xfa, 0x90, 0xe8, 0x2, 0xb7, 0x67, 0x4d, 0x92, 0xaa, 0xa, 0x49, 0x9a, 0x97, 0x51, 0x90, 0xe5, 0x39, 0x8e, 0xa, 0xd5, 0x58, 0x71, 0xb5, 0x94, 0xca, 0x81, 0x15, 0x97, 0xd0, 0xc7, 0xae, 0x64, 0xa7, 0xa8, 0x39, 0xd0, 0xa5, 0xe2, 0x16, 0xf1, 0x76, 0x3f, 0x23, 0xa5, 0x19, 0x8d, 0x7a, 0x11, 0x3b, 0x99, 0x1f, 0x51, 0x4b, 0x60, 0x2c, 0xe5, 0x66, 0x6e, 0x62, 0x28, 0x9d, 0xe8, 0xc7, 0xcd, 0x50, 0xdd, 0x9d, 0xf1, 0xc2, 0x32, 0xca, 0x67, 0x5c, 0xb7, 0x78, 0xbe, 0x6d, 0xa9, 0xe4, 0xe0, 0x79, 0xef, 0x46, 0x4b, 0x70, 0xab, 0x1a, 0xfc, 0xcc, 0x64, 0xbc, 0xef, 0x34, 0x7a, 0x12, 0x90, 0x80, 0xf7, 0x32, 0x7f, 0x47, 0x2e, 0x3c, 0x1a, 0xe5, 0x2e, 0x4f, 0x5, 0xe2, 0x4c, 0x1b, 0xf4, 0xd1, 0xd7, 0xd, 0xe8, 0x83, 0xb9, 0x6e, 0xfd, 0x6, 0x29, 0x2f, 0xdf, 0xe4, 0x88, 0x4b, 0xc4, 0x7b, 0x57, 0x2a, 0xd9, 0x45, 0x1f, 0x68, 0xcc, 0x3b, 0x2c, 0xcd, 0x75, 0x58, 0x71, 0xb7, 0xd2, 0x4a, 0x8a, 0x3, 0xb0, 0x8a, 0xa7, 0x53, 0xf0, 0xbd, 0x10, 0xaf, 0x79, 0x58, 0x9c, 0x18, 0x9f, 0x22, 0x9e, 0x80, 0x7, 0x62, 0xe, 0xe5, 0x19, 0x92, 0xc4, 0x2e, 0x54, 0x7a, 0x50, 0xaa, 0x70, 0x8, 0x2d, 0xff, 0x4c, 0x2d, 0x3f, 0x10, 0x27, 0x4e, 0x70, 0x18, 0x2c, 0x4e, 0x6c, 0xf, 0xeb, 0xe7, 0xd, 0xa9, 0x7a, 0x8, 0x70, 0x50, 0x40, 0xfc, 0x72, 0xbd, 0x4b, 0x49, 0x83, 0xcb, 0xf5, 0x6c, 0x12, 0xa1, 0xa2, 0x96, 0x58, 0x6f, 0x88, 0xee, 0x98, 0xc3, 0xfa, 0x48, 0x87, 0xf6, 0x6d, 0xdd, 0x96, 0xb4, 0x92, 0x5d, 0xc4, 0x81, 0xb8, 0xc4, 0xdf, 0x3c, 0xae, 0xc1, 0x82, 0xbb, 0x9a, 0x64, 0x17, 0x57, 0x20, 0x23, 0x14, 0x7d, 0x17, 0xd7, 0x28, 0xd9, 0xe5, 0x15, 0x10, 0x73, 0x9e, 0x46, 0x81, 0x75, 0x76, 0x8d, 0x38, 0x25, 0x36, 0x7, 0x18, 0xe9, 0x43, 0xcb, 0x6f, 0xb7, 0xc, 0x7e, 0xe, 0x62, 0x82, 0x47, 0x52, 0xe0, 0x35, 0x18, 0x2e, 0x4e, 0xf3, 0xea, 0xc0, 0xf7, 0x64, 0xa9, 0x9a, 0x8d, 0x9, 0xeb, 0x3, 0x9, 0x35, 0x1a, 0x57, 0xac, 0x8b, 0x56, 0x54, 0x56, 0x26, 0x5d, 0x3a, 0x76, 0x90, 0x6e, 0x5d, 0x76, 0xae, 0x72, 0x4d, 0x3, 0xfe, 0xd1, 0xc5, 0xe0, 0x34, 0x44, 0x7, 0x2d, 0xf5, 0xa0, 0x98, 0x13, 0x5d, 0x12, 0x8d, 0x75, 0x1d, 0xeb, 0x1e, 0x27, 0x4e, 0x26, 0xe6, 0x63, 0xe2, 0x24, 0x67, 0x61, 0xed, 0xa3, 0x81, 0x2, 0x8a, 0xdc, 0x67, 0x65, 0x68, 0xb1, 0xf5, 0x12, 0x27, 0x99, 0xe5, 0x79, 0x5a, 0x8c, 0x41, 0x2, 0x8d, 0x8a, 0xdd, 0x2e, 0x4b, 0x94, 0xd2, 0xb4, 0xd7, 0x47, 0x59, 0x37, 0xc0, 0x8d, 0xb9, 0xa1, 0xc4, 0x9e, 0x6b, 0xa7, 0x9b, 0x44, 0x34, 0x81, 0x6c, 0xb3, 0x5b, 0x3c, 0xae, 0xa1, 0xa7, 0xe7, 0x51, 0xe2, 0xb8, 0x45, 0x14, 0x8a, 0x7c, 0x4, 0x9a, 0x46, 0xbc, 0x4b, 0x65, 0x10, 0x47, 0x79, 0x1d, 0x28, 0x4e, 0xa2, 0xd3, 0xe4, 0xea, 0xf6, 0x4a, 0x71, 0xba, 0xf5, 0x20, 0x4b, 0xf9, 0x1c, 0x9, 0x2e, 0x89, 0x4, 0xbb, 0xf1, 0x32, 0xd7, 0x18, 0xea, 0x51, 0xf5, 0xc, 0xc0, 0x0, 0xa1, 0x64, 0x17, 0x3d, 0x20, 0x28, 0x8f, 0x74, 0x6d, 0x5b, 0x37, 0xa, 0x74, 0xa0, 0x3f, 0x57, 0xf4, 0xf4, 0x0, 0x85, 0x22, 0x9, 0xb8, 0xc, 0x51, 0x7a, 0x70, 0x1, 0x2d, 0x3e, 0xb4, 0x31, 0x7b, 0xb3, 0x1a, 0x6b, 0xf, 0xd9, 0xa0, 0xf7, 0x52, 0x82, 0x6a, 0xab, 0xb7, 0xc0, 0x42, 0xb4, 0x3b, 0xe8, 0xe3, 0x52, 0xb2, 0x53, 0x6c, 0x7c, 0x5e, 0xb0, 0xe8, 0x6c, 0x8d, 0x76, 0x9f, 0x14, 0x27, 0xc5, 0x5a, 0x89, 0x4e, 0xa1, 0xb0, 0x3, 0x59, 0xc9, 0xcf, 0x8a, 0xe3, 0x19, 0x41, 0x6c, 0xef, 0x25, 0x49, 0x5f, 0x5f, 0x7a, 0x36, 0x3f, 0x13, 0x44, 0xa3, 0xf4, 0x19, 0x96, 0xb1, 0x1d, 0xf5, 0x11, 0x29, 0xd9, 0x29, 0x1c, 0xa0, 0xd5, 0xd2, 0x9f, 0x2d, 0xe3, 0x68, 0x97, 0x74, 0x8e, 0x4e, 0x8f, 0x42, 0x91, 0x11, 0x2a, 0xf9, 0xce, 0xa0, 0x67, 0x27, 0xea, 0x36, 0xdf, 0x4b, 0xf3, 0x59, 0x5c, 0x7f, 0x24, 0x0, 0xb, 0xcf, 0x46, 0x76, 0x28, 0xa8, 0xd7, 0xee, 0x55, 0x4a, 0x76, 0x79, 0xf, 0xb8, 0x39, 0x2e, 0x97, 0xaa, 0xc5, 0xd4, 0x88, 0x4f, 0xe0, 0x88, 0x14, 0x4d, 0x59, 0x56, 0x28, 0x6a, 0xe, 0x10, 0x1d, 0x8e, 0xba, 0xba, 0x50, 0x9c, 0x5e, 0x9b, 0x36, 0xc0, 0x12, 0xbc, 0x55, 0xfc, 0x8d, 0xe1, 0x81, 0xec, 0xdc, 0xae, 0x54, 0x94, 0x4f, 0x68, 0x56, 0xb1, 0x92, 0x5d, 0xde, 0x3, 0xf1, 0x86, 0x43, 0x2c, 0xe3, 0xc8, 0x38, 0x9b, 0xa6, 0xd3, 0xa3, 0x50, 0xd4, 0x1a, 0x70, 0xfd, 0xdf, 0x69, 0xe4, 0xf, 0xe2, 0x7d, 0x5a, 0x38, 0x14, 0xca, 0xa3, 0x7c, 0xfc, 0x9d, 0x68, 0xaa, 0xbe, 0xd8, 0x35, 0x6, 0x45, 0xb6, 0x87, 0x3e, 0xe, 0x25, 0xbb, 0x7c, 0xc7, 0xf9, 0x96, 0x31, 0xf4, 0xb4, 0x7c, 0x5c, 0xa7, 0x46, 0xa1, 0xf0, 0x5, 0x48, 0x64, 0x39, 0xc6, 0x83, 0xf0, 0xa, 0xa8, 0x58, 0x36, 0xf5, 0xe9, 0x77, 0x2d, 0xf2, 0x50, 0x52, 0x7b, 0xeb, 0x63, 0x50, 0xb2, 0xcb, 0x67, 0xa0, 0x29, 0xf2, 0xfe, 0x96, 0x71, 0x94, 0x19, 0xfc, 0xa4, 0xd3, 0xa3, 0x50, 0xf8, 0x6, 0x10, 0x10, 0x8a, 0xcc, 0x97, 0x58, 0xae, 0xa1, 0xdd, 0xd8, 0xa9, 0x3e, 0xfd, 0x1e, 0xd4, 0x6, 0x7e, 0x65, 0x19, 0x47, 0x1f, 0x50, 0x8d, 0xdb, 0x29, 0xd9, 0xe5, 0x2d, 0x10, 0xb8, 0x6e, 0xe5, 0x1a, 0x43, 0xbf, 0xc8, 0x67, 0x74, 0x6a, 0x14, 0xa, 0xdf, 0x81, 0x42, 0xf4, 0x81, 0x62, 0x8f, 0x83, 0x23, 0x11, 0xcc, 0xaf, 0xc3, 0x82, 0xd1, 0x8c, 0xdd, 0x7d, 0x80, 0x34, 0x7a, 0x7e, 0xee, 0xae, 0x8f, 0x40, 0xc9, 0x2e, 0x5f, 0xb1, 0x97, 0x65, 0xc, 0xd9, 0x64, 0xda, 0x5a, 0x48, 0xa1, 0x8, 0x6, 0xa8, 0xc5, 0x7b, 0xc9, 0x32, 0x8e, 0xee, 0x2a, 0x7, 0xf8, 0xf4, 0x3b, 0xf0, 0xe, 0xbb, 0x3d, 0x33, 0x4d, 0x7c, 0xfc, 0xf9, 0xa, 0x25, 0xbb, 0x48, 0x1, 0x2e, 0x8d, 0xee, 0x96, 0xf1, 0x51, 0x3a, 0x35, 0xa, 0x45, 0xa0, 0xb8, 0x4d, 0x9c, 0xbe, 0xab, 0xa9, 0x40, 0x12, 0x49, 0x2f, 0x9f, 0x7e, 0xfe, 0xcf, 0x46, 0x46, 0x5b, 0xc6, 0x4f, 0x11, 0x3d, 0xc2, 0x4a, 0xc9, 0x2e, 0xf, 0x81, 0xde, 0x8f, 0xee, 0x33, 0xea, 0x90, 0xb2, 0xfc, 0xb5, 0x4e, 0x8d, 0x42, 0x11, 0x28, 0x26, 0x8a, 0xd3, 0x3a, 0xcc, 0x8d, 0x1e, 0x3e, 0x92, 0xd1, 0x2b, 0x96, 0xb1, 0xae, 0xe2, 0x1c, 0x5a, 0xac, 0x50, 0xb2, 0xcb, 0x3b, 0xcb, 0xce, 0x1d, 0xaf, 0x43, 0x5f, 0xbd, 0xe5, 0x3a, 0x35, 0xa, 0x45, 0xe0, 0x78, 0xce, 0x32, 0x86, 0x98, 0xda, 0x66, 0x3e, 0xfd, 0xfc, 0x31, 0x46, 0xe6, 0x5a, 0xc6, 0x4f, 0xd7, 0xa9, 0x57, 0xb2, 0xcb, 0x37, 0xd8, 0x5a, 0x83, 0x81, 0xec, 0x56, 0xeb, 0xd4, 0x28, 0x14, 0x81, 0x3, 0x19, 0x93, 0xa5, 0xae, 0x31, 0x9c, 0x50, 0xb0, 0xb9, 0x4f, 0x3f, 0x1f, 0x59, 0x9f, 0xef, 0x58, 0xc6, 0x51, 0xe8, 0xae, 0xed, 0xc3, 0x94, 0xec, 0xf2, 0xa, 0x8d, 0x3d, 0x9e, 0x5b, 0x42, 0xa7, 0x46, 0xa1, 0x8, 0x1c, 0xe8, 0x50, 0xb4, 0xd0, 0x32, 0xde, 0xce, 0xc7, 0xdf, 0x81, 0xa3, 0xb8, 0xdc, 0x59, 0x99, 0x68, 0xf8, 0xfe, 0x27, 0x9d, 0x7e, 0x25, 0xbb, 0x7c, 0x42, 0xa5, 0x4e, 0x81, 0x42, 0x91, 0x33, 0xac, 0x12, 0x7b, 0xd6, 0xb3, 0x9f, 0xca, 0x26, 0x4a, 0x10, 0x6c, 0xb1, 0x41, 0x9c, 0x60, 0xd2, 0x5c, 0x1f, 0x81, 0x92, 0x5d, 0xbe, 0xa0, 0xc4, 0x83, 0x0, 0x95, 0x4, 0x37, 0xce, 0x45, 0x85, 0x4e, 0x83, 0x22, 0x20, 0xfc, 0x62, 0x64, 0x45, 0xc0, 0xbf, 0x3, 0xeb, 0xf7, 0x7e, 0xcb, 0x78, 0x1b, 0x12, 0x9e, 0x42, 0xc9, 0x2e, 0x2f, 0xb0, 0xc0, 0x32, 0x6, 0xd7, 0x66, 0x91, 0x4e, 0xcd, 0xaf, 0x40, 0x81, 0x6f, 0x2b, 0x9d, 0x6, 0x45, 0xc0, 0xa, 0x55, 0xd0, 0x78, 0xd5, 0xc8, 0x78, 0xcb, 0xf8, 0x59, 0x46, 0xb6, 0xd7, 0x47, 0xa0, 0x64, 0x97, 0xf, 0x40, 0x17, 0x7, 0x77, 0xad, 0xcf, 0xd6, 0xe2, 0x4, 0xc9, 0x15, 0x4e, 0x9a, 0x76, 0x43, 0x9d, 0x6, 0x45, 0x40, 0x48, 0x64, 0x69, 0x9f, 0xc4, 0x3b, 0x7e, 0xa7, 0x65, 0x7c, 0x3b, 0x23, 0x97, 0xea, 0x63, 0x50, 0xb2, 0xcb, 0x7, 0xac, 0x33, 0xf2, 0x8d, 0x6b, 0xac, 0x91, 0x5a, 0x33, 0xbf, 0xe1, 0x8f, 0x3a, 0x5, 0x8a, 0x0, 0x81, 0xc6, 0xcf, 0xb6, 0xb8, 0x59, 0x10, 0xae, 0x73, 0x94, 0x39, 0x4c, 0xb4, 0x8c, 0xe3, 0x10, 0x59, 0x3d, 0xd, 0xa1, 0x2a, 0xba, 0x89, 0x93, 0xad, 0x9e, 0x11, 0x8f, 0x29, 0xd9, 0x45, 0x83, 0xec, 0xe6, 0x58, 0xc6, 0xf7, 0xd4, 0xa9, 0x91, 0xd6, 0xe2, 0x1c, 0xae, 0xa9, 0x50, 0x4, 0x85, 0x26, 0x16, 0xb2, 0x83, 0x5b, 0x73, 0x56, 0x0, 0xbf, 0x6b, 0x83, 0x91, 0x9b, 0xa5, 0xea, 0x39, 0x77, 0x28, 0x60, 0xbf, 0x4b, 0xfc, 0xab, 0xed, 0x8b, 0xcb, 0xbb, 0xff, 0x82, 0x38, 0xe7, 0x2, 0xbe, 0x6b, 0xe4, 0xa, 0xb1, 0x77, 0x9a, 0x52, 0xb2, 0x8b, 0x10, 0xb0, 0xf0, 0xa7, 0x5a, 0xc6, 0xf, 0xd5, 0xa9, 0xf9, 0x35, 0x9e, 0xd1, 0x46, 0xa7, 0x41, 0x11, 0xf0, 0xa6, 0xda, 0xde, 0x35, 0x86, 0xe3, 0x79, 0xd6, 0x4, 0xf4, 0xfb, 0x5e, 0x34, 0x32, 0xd2, 0x32, 0x8e, 0xd3, 0x10, 0x2e, 0xd6, 0xc7, 0xf1, 0x1b, 0xfe, 0x4f, 0x9c, 0xce, 0x52, 0x68, 0xba, 0x81, 0x63, 0x91, 0x6e, 0xe2, 0xbc, 0x15, 0x2b, 0xd9, 0x45, 0x1b, 0x68, 0xd, 0x56, 0x61, 0xb1, 0xec, 0xb6, 0xcd, 0xe3, 0x39, 0xc1, 0xa9, 0xce, 0x7f, 0xd5, 0xa5, 0xa1, 0x8, 0x18, 0xbb, 0x18, 0xa9, 0xef, 0x1a, 0x9b, 0x2c, 0x4e, 0x96, 0x66, 0x10, 0x40, 0x1, 0xfb, 0x95, 0x62, 0x6f, 0x1a, 0x31, 0xd4, 0xc8, 0xef, 0xf4, 0x91, 0xfc, 0x5a, 0x83, 0x78, 0xa5, 0x65, 0x1c, 0x46, 0x41, 0x99, 0x92, 0x5d, 0xb4, 0x31, 0x9e, 0xda, 0x64, 0x2a, 0xd0, 0xc1, 0xe1, 0xc8, 0x3c, 0x9d, 0xf, 0x24, 0xd, 0xdc, 0x2a, 0x5a, 0x83, 0xa4, 0x8, 0x1e, 0xfd, 0x3c, 0x94, 0xcf, 0xd2, 0x0, 0x7f, 0xe7, 0x24, 0x23, 0x77, 0x58, 0xc6, 0xe1, 0xce, 0xbc, 0xcf, 0xc8, 0x36, 0x79, 0xfe, 0x4c, 0xae, 0x15, 0x7b, 0xce, 0xc2, 0xbf, 0x94, 0xec, 0xa2, 0xf, 0x94, 0x1f, 0x7c, 0x62, 0xd9, 0xf0, 0x8f, 0x95, 0xfc, 0xec, 0x8e, 0x7e, 0x89, 0x91, 0xfe, 0xba, 0x2c, 0x14, 0x1, 0x63, 0x4b, 0xb, 0xd9, 0xc1, 0xc3, 0xf2, 0x65, 0x16, 0x7e, 0xf7, 0x70, 0xb1, 0x17, 0x9a, 0xc3, 0xa3, 0x71, 0xaf, 0xe4, 0x6f, 0xe9, 0x11, 0x14, 0xfc, 0xb3, 0x2c, 0xe3, 0x98, 0xab, 0x37, 0xd3, 0xfd, 0x47, 0x25, 0xbb, 0xe8, 0xc0, 0xd6, 0x1d, 0x1d, 0x2e, 0x8d, 0xdf, 0xe7, 0xd9, 0x3c, 0xc0, 0x3f, 0xff, 0x37, 0x5d, 0xe, 0x59, 0xc1, 0xbe, 0x92, 0xdf, 0x49, 0x11, 0xc7, 0x19, 0x69, 0xe6, 0x1a, 0x83, 0x87, 0x65, 0x42, 0x16, 0x7e, 0x37, 0xdc, 0x98, 0x70, 0xd3, 0xff, 0xe4, 0xb1, 0xe1, 0xff, 0x23, 0xf, 0x9f, 0x7, 0x2c, 0x5a, 0x94, 0x67, 0xd4, 0xb7, 0x5c, 0xbb, 0x41, 0xaa, 0x71, 0x2d, 0x2b, 0xd9, 0x45, 0x7, 0xaf, 0x4b, 0xd5, 0xee, 0xe8, 0xb0, 0xea, 0x2e, 0xcf, 0xa3, 0x39, 0xc0, 0x29, 0xce, 0xf, 0x8b, 0x66, 0xa5, 0x65, 0x3, 0x97, 0x51, 0x5b, 0x7e, 0x44, 0x9c, 0x8c, 0xc4, 0x7c, 0x3, 0x12, 0x1d, 0x4e, 0xb7, 0xec, 0x91, 0xef, 0x19, 0x99, 0x9f, 0xa5, 0x7b, 0x80, 0xbb, 0x14, 0x59, 0x86, 0x36, 0xd7, 0x1c, 0x6a, 0xef, 0x86, 0xe6, 0xd1, 0xf3, 0x68, 0xcc, 0xb5, 0xd8, 0xce, 0x72, 0xed, 0x49, 0x23, 0x6f, 0x57, 0xf7, 0x3, 0x94, 0xec, 0xa2, 0x83, 0xd5, 0xdc, 0xe8, 0xdd, 0x38, 0x58, 0x1c, 0x77, 0x66, 0x3e, 0x68, 0x75, 0xcf, 0x48, 0xd5, 0xcc, 0x38, 0x85, 0xbf, 0x80, 0x7b, 0xc, 0x87, 0x96, 0x22, 0x26, 0x5a, 0xc0, 0xb5, 0x95, 0x8f, 0x84, 0x77, 0x2a, 0x2d, 0x5b, 0x37, 0x1e, 0xcf, 0xf2, 0x7d, 0x3c, 0x64, 0xe4, 0x41, 0x8f, 0x6b, 0xd7, 0x1b, 0x39, 0x39, 0x4f, 0x9e, 0x7, 0xd6, 0xa4, 0x2d, 0x3, 0x1d, 0x8a, 0x47, 0x46, 0x9e, 0x1e, 0x25, 0xbb, 0x68, 0xe1, 0x9, 0xa9, 0xda, 0x81, 0x1d, 0xb1, 0xbb, 0x1b, 0xc5, 0x49, 0x91, 0x8e, 0x2b, 0x90, 0x62, 0x8c, 0x9a, 0x9a, 0x6e, 0x96, 0x6b, 0x3f, 0x48, 0xf0, 0xbd, 0xb, 0xf3, 0x9, 0x37, 0x4a, 0xd5, 0x8e, 0x1d, 0xc7, 0x8b, 0xe3, 0x46, 0xdf, 0x2a, 0x4f, 0xe6, 0xa0, 0x2d, 0x89, 0xc4, 0x8d, 0xb7, 0xc4, 0x1e, 0x47, 0xb, 0x12, 0x88, 0x11, 0x5e, 0xe8, 0x61, 0xb9, 0x14, 0x90, 0x8, 0x4f, 0x8d, 0xf1, 0xb3, 0xc0, 0x77, 0x1c, 0x21, 0xf6, 0x1e, 0xa1, 0x65, 0xf4, 0x40, 0x2c, 0x50, 0xb2, 0x8b, 0x1f, 0xbe, 0x13, 0x27, 0x1b, 0xcb, 0x8d, 0x8e, 0x62, 0xcf, 0xde, 0x8a, 0x3, 0xd0, 0x39, 0x2, 0x45, 0xa3, 0xfb, 0x59, 0xae, 0x7d, 0x6b, 0x64, 0xa0, 0xe8, 0x41, 0xb6, 0x7e, 0xc2, 0x6b, 0x4f, 0x38, 0x88, 0xcf, 0x61, 0xf7, 0x98, 0x7f, 0x7f, 0xc4, 0x83, 0x86, 0x5b, 0x88, 0x1d, 0xd9, 0x97, 0x77, 0x49, 0x9a, 0x6c, 0xbf, 0x0, 0x81, 0x66, 0xf0, 0x3, 0xc4, 0x39, 0x5b, 0xcf, 0x8d, 0x62, 0xee, 0x9, 0x43, 0x62, 0xfa, 0x3c, 0x6e, 0x25, 0xd9, 0xdb, 0x30, 0x82, 0x4a, 0x70, 0x9d, 0x16, 0xb6, 0x22, 0xbc, 0xf8, 0xa7, 0xd8, 0x5b, 0xa, 0x9d, 0x98, 0x66, 0x51, 0x44, 0x15, 0x28, 0x1c, 0x7d, 0x5d, 0xec, 0x7, 0xd8, 0x7e, 0x6f, 0xe4, 0x4, 0x23, 0xa3, 0x44, 0x7b, 0x63, 0xfa, 0x9, 0x58, 0x34, 0x5e, 0x59, 0x6d, 0xbb, 0xf2, 0x79, 0x1c, 0x17, 0xe3, 0xef, 0x7f, 0x9d, 0x91, 0x63, 0x2c, 0xe3, 0x2f, 0x89, 0xbd, 0xd8, 0x3b, 0x5b, 0xc0, 0x7a, 0x87, 0xcb, 0x72, 0xb6, 0xe5, 0x1a, 0xd6, 0x3f, 0x3a, 0xaf, 0xdc, 0x46, 0x4b, 0x28, 0xe, 0x80, 0xdb, 0xfc, 0x1, 0x23, 0x17, 0x79, 0x5c, 0x47, 0x48, 0xa3, 0x46, 0x31, 0x4b, 0x25, 0xbb, 0xe8, 0x61, 0x2d, 0x1f, 0xf2, 0x7a, 0xcb, 0x35, 0x64, 0x68, 0x9d, 0x12, 0x93, 0x85, 0xe, 0x52, 0xc7, 0xa1, 0x96, 0x2d, 0x2c, 0xd7, 0x91, 0x11, 0x7, 0xd7, 0xda, 0xe7, 0xa2, 0xc9, 0x2a, 0x7e, 0xe3, 0x27, 0x6e, 0xaa, 0x5e, 0x1b, 0x3b, 0x3a, 0xd6, 0xfc, 0x87, 0xa4, 0x10, 0xb7, 0xb2, 0x97, 0xab, 0x8d, 0x5c, 0xe5, 0x31, 0x27, 0x57, 0x87, 0xe0, 0xfe, 0xa6, 0x19, 0x39, 0xda, 0xc8, 0x4c, 0x8f, 0xeb, 0x97, 0xf2, 0xd9, 0xb4, 0x8c, 0xf8, 0x73, 0xc0, 0x29, 0xf, 0xe8, 0x13, 0x7a, 0xa6, 0xc7, 0x75, 0x9c, 0x10, 0x1, 0xb7, 0x66, 0xb9, 0x92, 0x5d, 0xfc, 0x81, 0xd8, 0xc1, 0x70, 0xcb, 0x38, 0x32, 0x96, 0x90, 0xc4, 0x12, 0x65, 0x1f, 0x3e, 0xdc, 0x65, 0x63, 0x8c, 0x5c, 0x20, 0xf6, 0x14, 0xe3, 0xe9, 0xd4, 0xbc, 0x3f, 0xd2, 0x65, 0x10, 0x28, 0xe1, 0xc1, 0x53, 0xe0, 0xe5, 0x22, 0x42, 0x12, 0xcb, 0x35, 0x46, 0xde, 0x31, 0xb2, 0x47, 0xc, 0xbe, 0x2f, 0xd6, 0xd9, 0x30, 0x23, 0x7f, 0xb7, 0x5c, 0xc3, 0x86, 0x3a, 0xd8, 0xc3, 0xa2, 0xca, 0x5, 0xa6, 0xd2, 0xb2, 0x9e, 0x93, 0xc6, 0x1b, 0x32, 0x8a, 0xef, 0x51, 0x14, 0x81, 0xfa, 0xd9, 0xb1, 0xe2, 0xdd, 0xf3, 0xf6, 0x25, 0x2a, 0x63, 0xab, 0x6a, 0xfa, 0x83, 0x95, 0xec, 0xa2, 0xb, 0xd4, 0x95, 0xd8, 0xdc, 0x4d, 0x85, 0xe2, 0x14, 0x9d, 0xe, 0x8c, 0xd8, 0xf7, 0xd9, 0x41, 0x9c, 0x60, 0x3b, 0x2c, 0xa, 0xaf, 0x86, 0xae, 0x78, 0x89, 0xf, 0x31, 0xf2, 0x85, 0x3e, 0xfe, 0xac, 0x59, 0x78, 0xf7, 0xa6, 0xf9, 0xcc, 0x81, 0xe2, 0x24, 0x4e, 0xa0, 0x75, 0x53, 0x71, 0x44, 0xbf, 0x27, 0xa, 0xc7, 0x91, 0x6d, 0x7a, 0xad, 0xc7, 0xf5, 0x11, 0xf4, 0x30, 0x84, 0x9, 0x53, 0x8c, 0x1c, 0x2e, 0x55, 0x1b, 0x4d, 0x24, 0xd1, 0x8d, 0xd6, 0xcf, 0xb5, 0x12, 0x9d, 0x2c, 0x5a, 0x3c, 0x87, 0xdb, 0xa9, 0x60, 0xb5, 0x4f, 0x63, 0xd1, 0xd, 0x10, 0x7b, 0x2b, 0x35, 0x25, 0xbb, 0x18, 0x63, 0x2d, 0x9, 0xcd, 0x16, 0xb4, 0x6e, 0x44, 0xe2, 0x80, 0xf5, 0xd7, 0x34, 0xe4, 0xdf, 0x63, 0x3b, 0x5a, 0x9, 0xe3, 0xf9, 0x7d, 0xa, 0x3d, 0x3e, 0x87, 0x56, 0x40, 0x28, 0xa6, 0xfd, 0x4e, 0x1f, 0x7d, 0xd6, 0x80, 0x2e, 0xfc, 0xe7, 0x89, 0x13, 0xb, 0x5e, 0xef, 0xf1, 0x99, 0x96, 0x54, 0xbc, 0x90, 0xa5, 0xf8, 0x87, 0x88, 0x7d, 0x3f, 0x28, 0x4e, 0xef, 0xa6, 0xf1, 0x84, 0x20, 0xfb, 0x39, 0xac, 0xb5, 0x6c, 0x38, 0x75, 0x1, 0x2e, 0xcd, 0xb7, 0x3c, 0xae, 0x37, 0xa6, 0xb5, 0x8a, 0xba, 0xc0, 0x7e, 0x21, 0x7e, 0x6, 0xc8, 0x26, 0x47, 0x48, 0x2, 0x9e, 0x1a, 0x74, 0x46, 0xf2, 0x8a, 0xbf, 0xa3, 0x4, 0x3, 0x21, 0x9a, 0x9f, 0x6b, 0xfb, 0x8b, 0x94, 0xec, 0xa2, 0x8d, 0x25, 0xd4, 0xbe, 0x67, 0x78, 0x5c, 0x47, 0x70, 0x17, 0xae, 0xa6, 0x7d, 0x43, 0x78, 0xef, 0xd0, 0xde, 0x90, 0x41, 0x3a, 0x5a, 0x9c, 0xf8, 0xcf, 0x16, 0x69, 0xbe, 0xe3, 0x69, 0x46, 0x6, 0xa5, 0xd9, 0x70, 0x13, 0x96, 0xb1, 0x72, 0x5d, 0x1e, 0xbe, 0x1, 0x5d, 0x2b, 0xe0, 0xd6, 0xfc, 0x36, 0xcd, 0x67, 0x60, 0x8d, 0xc3, 0xc5, 0xf4, 0x9a, 0x84, 0xdf, 0x85, 0xb6, 0x13, 0xad, 0x39, 0x24, 0xdb, 0x78, 0xb9, 0x61, 0x51, 0xa8, 0x7c, 0x8e, 0xe4, 0x26, 0xfb, 0x32, 0x53, 0x2c, 0x13, 0xa7, 0xe, 0xf2, 0x9f, 0x69, 0x3e, 0xb3, 0x37, 0xbf, 0xe7, 0xb3, 0x46, 0x76, 0xb, 0x19, 0xc9, 0xf5, 0x25, 0x59, 0x23, 0x3e, 0xd7, 0xc9, 0xe3, 0x73, 0xc8, 0x44, 0x45, 0x1c, 0xf5, 0xec, 0xba, 0x10, 0x9d, 0x92, 0x5d, 0x3c, 0x80, 0xa0, 0x35, 0x7c, 0xf8, 0x5e, 0x41, 0xeb, 0x7d, 0x49, 0x28, 0xc8, 0xd4, 0xca, 0xf5, 0x29, 0x9, 0x2d, 0x68, 0x9d, 0xe1, 0xc5, 0x43, 0xb3, 0xdb, 0x8b, 0xb9, 0xf1, 0x78, 0xe1, 0x79, 0x71, 0x5a, 0xa2, 0x3d, 0x91, 0xe6, 0x33, 0x78, 0x19, 0x56, 0x5a, 0xc6, 0x5b, 0xeb, 0xd2, 0xf0, 0x15, 0x20, 0x32, 0x34, 0x30, 0x78, 0x35, 0xcd, 0x67, 0x10, 0xfb, 0x3a, 0x42, 0x1c, 0x77, 0x33, 0x48, 0xef, 0xa8, 0x34, 0x4a, 0x4c, 0x2e, 0xb0, 0x97, 0x38, 0x47, 0xc1, 0x7c, 0x26, 0x4e, 0x77, 0x14, 0x2f, 0x2f, 0xc2, 0xfd, 0x46, 0xce, 0x10, 0xe7, 0x2c, 0xc9, 0xb0, 0x63, 0x1d, 0x95, 0x5a, 0x28, 0xbd, 0xdf, 0xa7, 0x79, 0x2e, 0x27, 0xf0, 0x7b, 0xa3, 0x4c, 0x21, 0x97, 0x2d, 0x6, 0x1b, 0x73, 0xf, 0x0, 0x1, 0x23, 0x64, 0x71, 0x68, 0x35, 0xd6, 0x2b, 0xbc, 0x5, 0xa8, 0xfd, 0xac, 0xf3, 0x61, 0xb9, 0x4a, 0x76, 0xf1, 0x0, 0x82, 0xd6, 0x8, 0xec, 0xbe, 0xeb, 0x71, 0x1d, 0x6e, 0xcd, 0x4b, 0xe9, 0xd2, 0x80, 0x6b, 0x63, 0xfb, 0x2c, 0xde, 0x5b, 0x23, 0x2e, 0xe8, 0xbb, 0x49, 0xba, 0xaf, 0xf0, 0xc5, 0x6b, 0x52, 0xcd, 0x22, 0x3f, 0x85, 0x9f, 0x9b, 0x5b, 0xcd, 0xcf, 0x5f, 0xe5, 0x61, 0xd9, 0x9e, 0x2f, 0xd1, 0x8d, 0x23, 0x85, 0x15, 0x48, 0xd2, 0x80, 0xcb, 0x9, 0x6e, 0xcd, 0xe5, 0xd5, 0xec, 0x2b, 0x47, 0x90, 0x20, 0xf1, 0xcc, 0x6f, 0xa1, 0xe6, 0x5e, 0x98, 0x83, 0x7b, 0xde, 0x92, 0x44, 0xf0, 0x3c, 0xd7, 0xff, 0x15, 0x1c, 0xb3, 0x1, 0xb5, 0x74, 0x70, 0xa5, 0x9d, 0x2b, 0xc1, 0x9e, 0x6a, 0x10, 0x4, 0x10, 0x57, 0xec, 0x43, 0x12, 0xf1, 0x42, 0x43, 0x5a, 0x48, 0xa3, 0x68, 0x51, 0xd, 0xc8, 0x92, 0x32, 0x2, 0x2b, 0x6e, 0x47, 0x71, 0xc2, 0x15, 0xc9, 0x3d, 0xa0, 0x7f, 0x35, 0xfc, 0xf3, 0x0, 0x3d, 0x4, 0xef, 0xf8, 0x75, 0x13, 0x5, 0xfa, 0xfe, 0xc6, 0x6, 0x20, 0x85, 0xa3, 0xb9, 0xb1, 0x9c, 0xe7, 0xf1, 0x19, 0x58, 0x51, 0x8, 0x5a, 0x23, 0xd3, 0xf1, 0x65, 0x71, 0x82, 0xc1, 0xe8, 0xbf, 0xb7, 0xc8, 0xc7, 0xfb, 0xd8, 0x8e, 0xb, 0xbb, 0x2b, 0x35, 0xc8, 0x9e, 0x46, 0xb6, 0x16, 0xbb, 0xab, 0xd1, 0xd, 0xb8, 0xc9, 0x1e, 0x13, 0xc7, 0xbd, 0x99, 0xa9, 0xcb, 0xa2, 0x82, 0x1a, 0xab, 0xbb, 0xf6, 0xb, 0x1a, 0xe1, 0x4, 0x6e, 0x2, 0xb7, 0xd1, 0x2, 0x54, 0xd4, 0x1d, 0x98, 0xc7, 0x3b, 0xb9, 0x9, 0x5d, 0x4d, 0x85, 0x24, 0xdd, 0x3e, 0xb2, 0x27, 0x5, 0x4d, 0x8d, 0x91, 0x58, 0x81, 0xa4, 0xaa, 0x4f, 0xc5, 0xc9, 0xaa, 0x5d, 0xe8, 0x87, 0xc6, 0xee, 0x2, 0x36, 0xef, 0x9d, 0x8d, 0x74, 0xe6, 0xe6, 0x7f, 0xa8, 0xd8, 0xcb, 0x57, 0xdc, 0x98, 0x44, 0x12, 0x1f, 0x13, 0x71, 0x2f, 0xcf, 0x91, 0x24, 0xeb, 0x2b, 0xf8, 0x2e, 0xda, 0x80, 0x92, 0x91, 0x7e, 0x94, 0xdb, 0x68, 0x85, 0xc3, 0xca, 0x9a, 0x4c, 0xc5, 0xb1, 0xd2, 0x87, 0x7b, 0x69, 0xce, 0xe7, 0x0, 0xcf, 0x12, 0x62, 0xa3, 0x7, 0x66, 0xa8, 0x7c, 0x8e, 0x13, 0x27, 0x6, 0xfc, 0x8a, 0xdf, 0x93, 0xa3, 0x64, 0x17, 0x2f, 0xfc, 0x42, 0x8b, 0x6, 0xc9, 0x1e, 0x28, 0x32, 0x6d, 0x99, 0x66, 0x43, 0x18, 0x40, 0x99, 0xc5, 0x17, 0x7d, 0xa, 0x17, 0xda, 0x54, 0x6a, 0xed, 0xa5, 0xdc, 0x88, 0x52, 0x49, 0xaa, 0x92, 0x6b, 0xa6, 0x3e, 0xb5, 0x63, 0xf4, 0xab, 0x44, 0xc1, 0x37, 0x32, 0x29, 0xd1, 0xc5, 0x5, 0x35, 0x58, 0xed, 0x49, 0x76, 0x35, 0xf1, 0x1a, 0xfc, 0x40, 0x4d, 0xe, 0x44, 0x37, 0xa7, 0x16, 0xdf, 0x1b, 0xc4, 0x3d, 0x54, 0xaa, 0x9e, 0x6f, 0x7, 0x6b, 0x62, 0x8, 0x7f, 0xee, 0x22, 0x5d, 0x1e, 0xbe, 0x2, 0x64, 0x75, 0x12, 0xe7, 0x16, 0x73, 0xdf, 0xbb, 0x9a, 0xcf, 0x63, 0xa3, 0xeb, 0x2e, 0x1b, 0x33, 0x6d, 0xe7, 0x92, 0xec, 0xe6, 0x71, 0xed, 0xc1, 0xd, 0xbf, 0x98, 0xe3, 0xa5, 0x24, 0xd5, 0x4a, 0xcb, 0xfa, 0x4b, 0x70, 0xd, 0xd6, 0xe3, 0xfa, 0x83, 0x22, 0xd5, 0x81, 0x8a, 0x5c, 0x27, 0x7a, 0x2d, 0x76, 0xa6, 0x47, 0x21, 0x13, 0xac, 0xa6, 0x72, 0xf5, 0x6f, 0xae, 0xc3, 0xa8, 0xa3, 0x92, 0xdf, 0x5, 0xd6, 0xdb, 0x20, 0x12, 0x5f, 0x3a, 0x8b, 0x1a, 0x8a, 0xc0, 0xe9, 0x94, 0xef, 0xf9, 0x5c, 0xe7, 0x90, 0xf8, 0xb0, 0x17, 0x7c, 0x93, 0x66, 0x3f, 0x10, 0xfe, 0xec, 0x62, 0xce, 0x3f, 0xf6, 0x82, 0x3d, 0x38, 0xff, 0x3b, 0x72, 0x4f, 0xc8, 0xd4, 0xbb, 0xf2, 0x1d, 0x15, 0xf5, 0x27, 0xa5, 0x16, 0x65, 0x5, 0x4a, 0x76, 0xf9, 0x8b, 0x47, 0xe8, 0xb2, 0xb9, 0x96, 0x1b, 0x52, 0xba, 0xc5, 0xde, 0x91, 0x72, 0x1c, 0x5f, 0x94, 0xd, 0xdc, 0x68, 0xd0, 0x6f, 0x6e, 0xbd, 0x6b, 0x71, 0x57, 0x90, 0x40, 0x5b, 0x91, 0xf0, 0xa, 0xea, 0xb8, 0x86, 0xd0, 0x9, 0xe6, 0x7f, 0xe2, 0xd4, 0x6, 0xd6, 0x85, 0x8c, 0xf0, 0x42, 0xc2, 0x4d, 0x3a, 0xcc, 0x72, 0x6d, 0xad, 0xd8, 0xeb, 0xf5, 0x14, 0xfe, 0x0, 0x9b, 0xea, 0x68, 0x5a, 0xd2, 0x83, 0xa8, 0xc1, 0x67, 0xe2, 0xae, 0xdc, 0x81, 0x72, 0x60, 0xca, 0x58, 0x69, 0x8a, 0x5, 0x3e, 0x87, 0x7f, 0xb7, 0x79, 0x4, 0x10, 0x7b, 0x6e, 0x9a, 0xb2, 0xfe, 0x6a, 0xf3, 0x7c, 0x57, 0x71, 0xed, 0xdd, 0x29, 0xf6, 0x8e, 0x44, 0x51, 0xc7, 0x6c, 0x7a, 0x70, 0x1e, 0x15, 0x27, 0x36, 0x7e, 0x94, 0x54, 0x9f, 0x99, 0xdd, 0x9a, 0xd2, 0x3b, 0xe5, 0x7d, 0xc7, 0x33, 0x28, 0xe7, 0x7e, 0xb0, 0xc6, 0xf2, 0x3c, 0xda, 0x51, 0xb1, 0x68, 0x50, 0xcb, 0xbd, 0x60, 0x3a, 0x9f, 0x3, 0xde, 0xdf, 0xa5, 0x41, 0x4e, 0x88, 0xd7, 0x42, 0xd1, 0x58, 0x5e, 0xf4, 0x31, 0x9f, 0xda, 0x1a, 0x88, 0xef, 0x12, 0x6e, 0x46, 0xd5, 0x3d, 0xd7, 0x4, 0x35, 0x31, 0x48, 0xd7, 0x80, 0xee, 0xb, 0x2f, 0xc, 0xe2, 0xa, 0x88, 0xa1, 0x8c, 0x35, 0xf2, 0xa3, 0x4f, 0x3f, 0x17, 0x41, 0xec, 0x5d, 0xa5, 0xaa, 0x3b, 0x33, 0x91, 0xa5, 0xf9, 0xae, 0x9f, 0xe1, 0x58, 0x1c, 0x81, 0x4d, 0x11, 0x6e, 0x27, 0x24, 0xaf, 0x1c, 0x60, 0xe4, 0xcf, 0xe2, 0xc4, 0xf6, 0x6a, 0x7a, 0x92, 0x7c, 0x61, 0xa, 0x51, 0x76, 0xb, 0xe8, 0x5e, 0x57, 0x90, 0x0, 0x9e, 0xa1, 0x7, 0x24, 0xee, 0x40, 0x98, 0x2, 0xa5, 0x15, 0x7b, 0xf3, 0xb9, 0x9c, 0x26, 0xde, 0x31, 0x4b, 0x1b, 0xf, 0x24, 0x2d, 0xb3, 0xce, 0x3e, 0xde, 0x13, 0xc8, 0xf3, 0xb, 0x7a, 0x5, 0x5e, 0x15, 0xef, 0xc4, 0x1a, 0xdf, 0xc9, 0x6e, 0x83, 0x54, 0x6d, 0xfb, 0x53, 0x2a, 0x8a, 0xb8, 0xe0, 0x43, 0xa, 0xb4, 0xb5, 0xf3, 0xb8, 0x19, 0x65, 0xbb, 0x7b, 0x3d, 0x5c, 0x53, 0x53, 0x48, 0x72, 0x6f, 0x4a, 0x30, 0x2e, 0x45, 0xac, 0xd9, 0x93, 0xa9, 0x29, 0x9e, 0x23, 0x1b, 0x5d, 0xb8, 0xd, 0x24, 0x3b, 0xf1, 0x3a, 0x5b, 0x46, 0xe8, 0xea, 0x3c, 0x5b, 0x6b, 0xf0, 0xc, 0x7c, 0x40, 0x41, 0x3c, 0xf, 0x9d, 0x6e, 0x8e, 0xa4, 0xe2, 0xd4, 0x36, 0x87, 0xf7, 0x5, 0x8b, 0xe1, 0x4b, 0xae, 0x3d, 0xa4, 0xb9, 0xe7, 0x63, 0xe3, 0xf0, 0x71, 0x94, 0x9b, 0xf9, 0x9e, 0x20, 0x81, 0xa8, 0xbb, 0x64, 0xb7, 0xe, 0x17, 0x7b, 0xc0, 0xc7, 0x46, 0x9e, 0x16, 0xa7, 0x20, 0x3e, 0xab, 0x65, 0x1d, 0x5, 0x34, 0x71, 0xfb, 0xa4, 0x30, 0x78, 0x5, 0x6f, 0x46, 0x11, 0x2f, 0x8c, 0xa1, 0x40, 0x43, 0xeb, 0xcb, 0x4d, 0x68, 0x1f, 0xf1, 0xbf, 0xc3, 0x42, 0x19, 0x37, 0xf9, 0x9, 0xb4, 0xdc, 0xf0, 0xe7, 0x34, 0xc9, 0xce, 0x81, 0x97, 0x50, 0xdc, 0xae, 0xe1, 0x86, 0x96, 0x4c, 0x8c, 0x81, 0x3b, 0x67, 0x59, 0x16, 0x7e, 0xf7, 0x53, 0xd4, 0x84, 0x1b, 0xf3, 0xdf, 0x20, 0xd8, 0x17, 0xf3, 0x78, 0xbd, 0xc1, 0x62, 0x7f, 0x90, 0x82, 0xf8, 0x4d, 0x17, 0x71, 0x12, 0x96, 0xb0, 0xd7, 0x20, 0xbe, 0xd3, 0x28, 0x40, 0xab, 0x7b, 0x3d, 0x15, 0x2a, 0x28, 0x79, 0xa3, 0x53, 0xd6, 0xa0, 0xc2, 0x79, 0x17, 0x86, 0x53, 0x60, 0xed, 0xe1, 0x34, 0x11, 0x94, 0x94, 0xa0, 0xc4, 0x67, 0x73, 0xf1, 0xd7, 0xab, 0xb7, 0x8e, 0x96, 0x25, 0xba, 0xec, 0x7c, 0xca, 0xbf, 0x2f, 0xcb, 0xd5, 0x17, 0x4f, 0x9c, 0x34, 0x68, 0x88, 0x3e, 0xfe, 0xfc, 0x44, 0x3d, 0x5a, 0x3f, 0xfb, 0x8b, 0x73, 0x8c, 0xe, 0x12, 0x4b, 0x5a, 0xd3, 0xc5, 0xd1, 0x9c, 0x1b, 0x11, 0x12, 0x59, 0x8a, 0x52, 0x88, 0xe4, 0x27, 0x8e, 0x63, 0x33, 0x41, 0xcc, 0x63, 0xd, 0xc7, 0x20, 0xf3, 0x68, 0xc1, 0x21, 0xb0, 0x3d, 0x93, 0xd7, 0x2a, 0x74, 0x9a, 0x15, 0x2e, 0x14, 0x72, 0x7d, 0x81, 0xfc, 0x76, 0x11, 0x27, 0x99, 0xa1, 0xd, 0xd7, 0x5d, 0x33, 0x71, 0xd2, 0xe3, 0x37, 0xe7, 0xda, 0x81, 0xe2, 0x90, 0xda, 0xe8, 0xbb, 0x84, 0x6b, 0x2d, 0xf9, 0xf7, 0x1f, 0xb9, 0xce, 0xf0, 0xe7, 0xf, 0x5c, 0x7f, 0xd3, 0x69, 0xc5, 0x2d, 0xe3, 0x9a, 0x55, 0x64, 0x6, 0xcc, 0x39, 0x92, 0x4b, 0xe0, 0x3e, 0xee, 0x44, 0x45, 0xb1, 0x15, 0xc7, 0x93, 0xe5, 0x9, 0x5b, 0xc8, 0xc6, 0xe, 0x27, 0x6b, 0x52, 0x3c, 0x17, 0x2b, 0xb9, 0x1f, 0x2c, 0xa3, 0x15, 0x8d, 0x78, 0x2b, 0xe2, 0xa0, 0x70, 0x13, 0xc3, 0x6d, 0x9c, 0xb5, 0x6, 0xf, 0x6b, 0xd6, 0xae, 0x93, 0xa1, 0x83, 0x6, 0xca, 0x3e, 0x7b, 0x54, 0x8d, 0xc2, 0xfc, 0xbf, 0x0, 0x3, 0x0, 0x73, 0x78, 0xf7, 0xf2, 0x7e, 0x74, 0x3a, 0x48, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; + + + + + (NSData *)parse_logo2x_png { + return [NSData dataWithBytes:parse_logo2x_png length:sizeof(parse_logo2x_png)]; + } + + const unsigned char parse_logo3x_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x2, 0x99, 0x0, 0x0, 0x0, 0xcc, 0x8, 0x6, 0x0, 0x0, 0x0, 0x38, 0x73, 0xb8, 0x3f, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9, 0x65, 0x3c, 0x0, 0x0, 0x3, 0x23, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x35, 0x2d, 0x63, 0x30, 0x31, 0x34, 0x20, 0x37, 0x39, 0x2e, 0x31, 0x35, 0x31, 0x34, 0x38, 0x31, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2f, 0x30, 0x33, 0x2f, 0x31, 0x33, 0x2d, 0x31, 0x32, 0x3a, 0x30, 0x39, 0x3a, 0x31, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x43, 0x20, 0x28, 0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x29, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x41, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x42, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x38, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x39, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, 0x3f, 0x3e, 0x66, 0x5f, 0x10, 0x71, 0x0, 0x0, 0x22, 0xe8, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec, 0x9d, 0x4d, 0x72, 0x1b, 0xbd, 0x11, 0x86, 0x3b, 0x29, 0xef, 0xa3, 0xef, 0x4, 0xdf, 0xf8, 0x4, 0xa6, 0x4f, 0xa0, 0xd1, 0x9, 0x4c, 0xaf, 0x93, 0x2a, 0x53, 0xfb, 0xa4, 0x2c, 0xad, 0x92, 0x9d, 0xc8, 0x5d, 0x76, 0x92, 0x2b, 0x7, 0x10, 0x5d, 0x95, 0xbd, 0xe8, 0x13, 0x68, 0x74, 0x2, 0x53, 0x27, 0xf0, 0xf8, 0x4, 0x56, 0x6e, 0x10, 0x21, 0x2, 0x22, 0x98, 0xa6, 0x8, 0x60, 0x7e, 0x31, 0xc0, 0xf3, 0x54, 0x4d, 0x49, 0x32, 0x29, 0x99, 0x83, 0x1, 0xba, 0xdf, 0x6e, 0x0, 0x8d, 0x3f, 0xfc, 0xf9, 0xaf, 0x7f, 0x3f, 0x12, 0x91, 0x8f, 0x2, 0x7d, 0x70, 0xa7, 0xbf, 0x6e, 0x1f, 0xaf, 0x7, 0x9a, 0x3, 0x0, 0x0, 0x0, 0x52, 0xe0, 0xdf, 0xff, 0xfa, 0xa7, 0xf3, 0x3d, 0xaf, 0x1e, 0xaf, 0xeb, 0xc7, 0x6b, 0x4e, 0x73, 0xd, 0x42, 0xa5, 0x5, 0xe7, 0xbd, 0xfe, 0xba, 0xa5, 0x49, 0x0, 0x0, 0x0, 0x20, 0x45, 0x94, 0xc8, 0x3c, 0xa2, 0x19, 0x6, 0xa3, 0xd4, 0x97, 0x41, 0x65, 0x37, 0x37, 0xf2, 0x94, 0xf1, 0xdc, 0x8, 0xd9, 0x4e, 0x0, 0x0, 0x0, 0x48, 0x84, 0x3f, 0xd2, 0x4, 0xa3, 0xa2, 0x4, 0xfe, 0x42, 0x9e, 0xb2, 0xc9, 0x3f, 0x1e, 0xaf, 0x1b, 0xfd, 0x33, 0x0, 0x0, 0x0, 0x0, 0x22, 0x13, 0x3a, 0x63, 0x6e, 0x9, 0xce, 0xcb, 0xc7, 0xab, 0xa0, 0x49, 0x0, 0x0, 0x0, 0x0, 0x91, 0x9, 0x5d, 0xa1, 0x32, 0x9c, 0x67, 0x8f, 0xd7, 0x37, 0x2d, 0x3a, 0x11, 0x9b, 0x0, 0x0, 0x0, 0x80, 0xc8, 0x84, 0x4e, 0x59, 0x20, 0x36, 0x1, 0x0, 0x0, 0x0, 0x91, 0x9, 0x7d, 0x8b, 0x4d, 0x35, 0x8d, 0xce, 0x66, 0x2d, 0x0, 0x0, 0x0, 0x88, 0x9a, 0x57, 0x8e, 0xd7, 0xab, 0xc7, 0xeb, 0x84, 0x66, 0xa, 0xa6, 0xd4, 0x5f, 0x8b, 0xc7, 0xeb, 0xf7, 0xc7, 0x6b, 0xa6, 0xbf, 0x9f, 0x75, 0xf0, 0xb7, 0xcf, 0xb4, 0xe0, 0x3c, 0x7f, 0xbc, 0xd6, 0x34, 0x35, 0x0, 0x0, 0x0, 0x4c, 0x51, 0x64, 0x42, 0x33, 0xaa, 0x17, 0xfe, 0xfd, 0x48, 0xb, 0xd0, 0x63, 0xfd, 0xb5, 0xa9, 0xe8, 0x54, 0x7f, 0x47, 0x4d, 0x9f, 0x7f, 0x78, 0xbc, 0x4e, 0x1f, 0xaf, 0x9a, 0x26, 0x7, 0x0, 0x0, 0x80, 0x98, 0x60, 0xba, 0x7c, 0x58, 0x4c, 0x5d, 0x4c, 0x95, 0x85, 0x7c, 0xfb, 0x78, 0xbd, 0xd6, 0xdf, 0x37, 0x2d, 0xca, 0xae, 0x84, 0xea, 0x57, 0xa1, 0x98, 0x3e, 0x0, 0x0, 0x0, 0x20, 0x32, 0xc1, 0xa2, 0x7e, 0xbc, 0xae, 0xb4, 0xe0, 0x54, 0xd7, 0xba, 0xc1, 0xdf, 0x50, 0x59, 0x4d, 0x55, 0x5f, 0xf3, 0x92, 0xe6, 0x4, 0x0, 0x0, 0x0, 0x44, 0x26, 0xec, 0xa2, 0xb2, 0x99, 0x6a, 0xea, 0x5b, 0x65, 0x37, 0x97, 0x12, 0x7e, 0xfa, 0x8f, 0x5a, 0xab, 0xf9, 0x55, 0xd8, 0x14, 0x4, 0x0, 0x0, 0x0, 0x88, 0x4c, 0xd8, 0x43, 0xfd, 0x78, 0xad, 0xb4, 0xd8, 0xbc, 0xa, 0xfc, 0x5d, 0xb5, 0xc6, 0xf3, 0x9b, 0x74, 0xb3, 0xc1, 0x8, 0x0, 0x0, 0x0, 0x0, 0x91, 0x99, 0x20, 0x2a, 0x93, 0x79, 0xae, 0xc5, 0x66, 0x15, 0xf0, 0x7b, 0x2a, 0x93, 0x79, 0x2b, 0x3f, 0x9f, 0x91, 0xe, 0x0, 0x0, 0x0, 0x80, 0xc8, 0x84, 0x9f, 0xa8, 0xe5, 0xa9, 0x8c, 0xd4, 0x7b, 0xf1, 0x9f, 0x42, 0x37, 0x42, 0x73, 0x41, 0xf3, 0x1, 0x0, 0x0, 0x0, 0x22, 0x13, 0xe, 0xa1, 0x76, 0xa5, 0xbf, 0xd6, 0x5f, 0x7d, 0xb9, 0x46, 0x68, 0x2, 0x0, 0x0, 0x0, 0x22, 0x13, 0x5c, 0xa8, 0x4c, 0xa6, 0xca, 0x68, 0x9e, 0x23, 0x34, 0x1, 0x0, 0x0, 0x0, 0x91, 0x9, 0x5d, 0x63, 0xca, 0x1e, 0xf9, 0x4e, 0x9f, 0x23, 0x34, 0x1, 0x0, 0x0, 0x0, 0x91, 0x9, 0x5e, 0xa8, 0x92, 0x47, 0xaf, 0xc5, 0xbf, 0x90, 0xbb, 0xaa, 0xa3, 0xc9, 0xae, 0x73, 0x0, 0x0, 0x0, 0x40, 0x64, 0x82, 0x13, 0x95, 0xc9, 0x54, 0x9b, 0x82, 0x7c, 0xd6, 0x69, 0x9a, 0xcd, 0x40, 0x5, 0xcd, 0x6, 0x0, 0x0, 0x0, 0x88, 0x4c, 0xf0, 0x11, 0x9a, 0x6a, 0x9d, 0xe6, 0xda, 0x53, 0x68, 0xde, 0x8, 0x5, 0xdb, 0x1, 0x0, 0x0, 0x0, 0x91, 0x9, 0x9e, 0x9c, 0x7a, 0xa, 0x4d, 0x35, 0x65, 0x7e, 0x4d, 0x73, 0x1, 0x0, 0x0, 0x0, 0x22, 0x13, 0xba, 0x16, 0x9a, 0x73, 0x79, 0x3a, 0x86, 0x12, 0x0, 0x0, 0x0, 0x0, 0x91, 0x9, 0xde, 0x42, 0xb3, 0xf2, 0x78, 0x1f, 0x1b, 0x81, 0x0, 0x0, 0x0, 0x0, 0x91, 0x9, 0x41, 0xa8, 0x35, 0x9a, 0x3e, 0xbb, 0xce, 0xd5, 0xb4, 0x39, 0xeb, 0x33, 0x1, 0x0, 0x0, 0x0, 0x91, 0x9, 0x5e, 0x98, 0xcd, 0x40, 0xae, 0x3a, 0x9a, 0x2a, 0x93, 0x79, 0x41, 0x73, 0x1, 0x0, 0x0, 0x0, 0x22, 0x13, 0x7c, 0xa9, 0xb5, 0xd0, 0x74, 0x71, 0x26, 0x4c, 0x9b, 0x3, 0x0, 0x0, 0x0, 0x22, 0x13, 0x2, 0xa8, 0x1e, 0xaf, 0xa5, 0xc7, 0xfb, 0xd8, 0x6d, 0xe, 0x0, 0x0, 0x0, 0x88, 0x4c, 0x8, 0x62, 0x25, 0xee, 0x8d, 0x40, 0x2a, 0x93, 0xc9, 0x6e, 0x73, 0x0, 0x0, 0x0, 0x40, 0x64, 0x42, 0x10, 0x6a, 0xc7, 0xb9, 0x6b, 0x7d, 0xa6, 0x5a, 0x9b, 0xc9, 0x26, 0x20, 0x0, 0x0, 0x0, 0x40, 0x64, 0x82, 0x37, 0xb5, 0x3c, 0x65, 0x34, 0xf, 0xa1, 0x4, 0xe6, 0x47, 0x9a, 0xa, 0x0, 0x0, 0x0, 0x10, 0x99, 0x10, 0xc2, 0x95, 0xb8, 0xa7, 0xcd, 0x97, 0xc2, 0xd9, 0xe6, 0x0, 0x0, 0x0, 0x80, 0xc8, 0x84, 0x40, 0x4e, 0x3d, 0xde, 0x43, 0x49, 0x23, 0x0, 0x0, 0x0, 0x40, 0x64, 0x42, 0x10, 0xb5, 0x3c, 0x65, 0x34, 0xf, 0xb1, 0x10, 0xb2, 0x99, 0x0, 0x0, 0x0, 0x80, 0xc8, 0x84, 0x40, 0xd4, 0xda, 0x4c, 0xd7, 0x26, 0xa0, 0xf, 0x34, 0x13, 0x0, 0x0, 0x0, 0x20, 0x32, 0x21, 0x4, 0x25, 0x30, 0x5d, 0xd9, 0x4c, 0x55, 0xce, 0x88, 0x9d, 0xe6, 0x0, 0x0, 0x0, 0x80, 0xc8, 0x84, 0x20, 0x3e, 0xc9, 0xe1, 0x6c, 0xa6, 0x12, 0x98, 0x73, 0x9a, 0x9, 0x0, 0x0, 0x0, 0x10, 0x99, 0x10, 0x82, 0x4f, 0x36, 0x93, 0x72, 0x46, 0x0, 0x0, 0x0, 0x80, 0xc8, 0x84, 0x60, 0x3e, 0x39, 0x5e, 0x9f, 0x9, 0x67, 0x9a, 0x3, 0x0, 0x0, 0x0, 0x22, 0x13, 0x2, 0x51, 0xd9, 0xcc, 0xb5, 0xe3, 0x3d, 0x64, 0x33, 0x1, 0x0, 0x0, 0x0, 0x91, 0x9, 0xc1, 0xb8, 0xb2, 0x99, 0xac, 0xcb, 0x4, 0x0, 0x0, 0x0, 0x44, 0x26, 0x4, 0xb3, 0x95, 0xa7, 0xda, 0x99, 0x2f, 0xc1, 0x6, 0x20, 0x0, 0x0, 0x0, 0x40, 0x64, 0x42, 0x23, 0x5c, 0xd9, 0xcc, 0x63, 0x9a, 0x8, 0x0, 0x0, 0x0, 0x10, 0x99, 0x10, 0xca, 0xc6, 0xf1, 0x3a, 0x99, 0x4c, 0x0, 0x0, 0x0, 0x40, 0x64, 0x42, 0x30, 0xb5, 0x3c, 0x4d, 0x9b, 0xbf, 0x44, 0x21, 0x1c, 0x33, 0x9, 0x0, 0x0, 0x0, 0x88, 0x4c, 0x68, 0x0, 0xd9, 0x4c, 0x0, 0x0, 0x0, 0x40, 0x64, 0x42, 0xe7, 0x7c, 0x71, 0xbc, 0xce, 0xba, 0x4c, 0x0, 0x0, 0x0, 0x40, 0x64, 0x42, 0x30, 0x6a, 0xba, 0xfc, 0xd0, 0x31, 0x93, 0x14, 0x65, 0x7, 0x0, 0x0, 0x0, 0x44, 0x26, 0x34, 0x16, 0x9a, 0x2f, 0x51, 0x8, 0xeb, 0x32, 0x1, 0x0, 0x0, 0x0, 0x91, 0x9, 0xd, 0xa8, 0x1c, 0xaf, 0x23, 0x32, 0x1, 0x0, 0x0, 0xc0, 0x9b, 0x57, 0x34, 0x1, 0x68, 0xee, 0x1c, 0xaf, 0x1f, 0x7b, 0x8, 0x51, 0x78, 0x42, 0x15, 0xb1, 0xf7, 0x5d, 0x62, 0x50, 0xcb, 0xe1, 0x82, 0xf8, 0x0, 0xd0, 0x9e, 0xa2, 0x41, 0xa0, 0xec, 0x5a, 0x46, 0x4, 0xf4, 0x23, 0x6c, 0x3b, 0x22, 0x13, 0x2, 0xc, 0xaa, 0x6b, 0x70, 0xc1, 0xaf, 0x42, 0xf2, 0xd8, 0x32, 0x3c, 0x33, 0xfd, 0xef, 0x4d, 0xa9, 0xb4, 0x53, 0x53, 0xcf, 0xe2, 0x5e, 0xdc, 0xe5, 0xa5, 0x0, 0xe0, 0x89, 0x99, 0x1e, 0x83, 0x6f, 0xac, 0xf1, 0x18, 0x12, 0xec, 0xf9, 0xa, 0x4e, 0xf3, 0xf5, 0xce, 0xfa, 0x19, 0xd2, 0xed, 0x4b, 0xc6, 0xa6, 0x97, 0x2d, 0xff, 0x66, 0x65, 0x7d, 0xfd, 0xae, 0x6d, 0x7b, 0x85, 0xc8, 0x84, 0x9c, 0x70, 0x45, 0xec, 0xb9, 0x8b, 0xcc, 0x42, 0x1b, 0x9a, 0x63, 0xfd, 0xb5, 0x8f, 0xf6, 0x30, 0x86, 0x6c, 0xbe, 0xc7, 0x40, 0x55, 0xda, 0xb1, 0x55, 0x74, 0xd5, 0x5e, 0x32, 0x11, 0x29, 0x67, 0xad, 0x8c, 0xe0, 0x4a, 0x45, 0x10, 0x1d, 0x59, 0x63, 0x71, 0xd6, 0x81, 0x0, 0xf0, 0x15, 0x1e, 0xf2, 0xc2, 0xff, 0x55, 0x59, 0x81, 0x61, 0x25, 0x64, 0xaf, 0xa6, 0x86, 0x6d, 0xd7, 0xcb, 0x1e, 0xff, 0x8f, 0x7d, 0xfd, 0xc7, 0xf4, 0x9d, 0x3b, 0x2b, 0xc9, 0x80, 0xc8, 0x84, 0x64, 0xa9, 0xe, 0xc, 0xb2, 0x1c, 0x77, 0x98, 0x2b, 0xb1, 0xf7, 0xae, 0x47, 0x51, 0x19, 0x62, 0xa0, 0x4a, 0x2b, 0x18, 0x50, 0x75, 0x4d, 0xbf, 0x88, 0xbb, 0xbe, 0x29, 0xfc, 0xda, 0x87, 0x6f, 0x65, 0x7f, 0xb6, 0x59, 0x19, 0xfa, 0x93, 0x9, 0x19, 0x79, 0x3b, 0xdb, 0xb2, 0x9b, 0xb1, 0x7b, 0x69, 0xc, 0x9f, 0x3e, 0x5e, 0xeb, 0x9, 0xb, 0x1, 0x33, 0x16, 0x67, 0x11, 0x7e, 0x36, 0xbb, 0xcd, 0x6b, 0x6d, 0x4b, 0x19, 0xa3, 0xf1, 0x6, 0x5d, 0x73, 0x2d, 0x2c, 0xe7, 0x91, 0xf4, 0x9d, 0x33, 0xcb, 0xe, 0x19, 0xfb, 0x9e, 0x44, 0x50, 0x88, 0xc8, 0x4, 0x9b, 0x7, 0x47, 0xf6, 0x20, 0x27, 0x61, 0x39, 0x8f, 0xf4, 0x9e, 0xd5, 0x67, 0x5a, 0xe8, 0xcb, 0x8, 0xce, 0xcf, 0x42, 0x86, 0xd3, 0x87, 0x77, 0x7, 0x9e, 0xe9, 0x4c, 0x5f, 0x55, 0xa4, 0xcf, 0xbc, 0x94, 0xf6, 0x99, 0xbb, 0xf, 0x13, 0x13, 0x99, 0xea, 0x5e, 0x3f, 0x46, 0x3c, 0x16, 0xf, 0x89, 0x18, 0x33, 0x46, 0xc5, 0x12, 0xd, 0x6b, 0x86, 0xe0, 0xa8, 0x63, 0x68, 0xae, 0xfb, 0xd3, 0x2c, 0xf2, 0x3e, 0xaf, 0xae, 0xa5, 0xe, 0x56, 0x54, 0xdf, 0xf9, 0x24, 0x13, 0xce, 0x8e, 0xb3, 0xbb, 0x1c, 0x6c, 0xb6, 0x1e, 0x3, 0x35, 0x45, 0xd4, 0xa0, 0xbe, 0x7e, 0xbc, 0x7e, 0x3c, 0x5e, 0x37, 0xda, 0x39, 0x4c, 0xe1, 0x5e, 0x8d, 0xe0, 0x54, 0xd9, 0xb9, 0xaf, 0x96, 0x53, 0x83, 0x34, 0x9c, 0xe2, 0x42, 0xf7, 0x47, 0xd3, 0x2f, 0xcf, 0x64, 0x98, 0xa9, 0xe1, 0xb1, 0xef, 0x5b, 0xdd, 0xe7, 0x37, 0xab, 0x4f, 0x4f, 0xdd, 0xee, 0xcc, 0x2d, 0xfb, 0x72, 0x2d, 0xd4, 0x1d, 0x1e, 0x92, 0x72, 0xc2, 0x6d, 0x5f, 0x58, 0x63, 0xe1, 0x76, 0xaa, 0xf6, 0x1d, 0x91, 0x9, 0xa1, 0x62, 0x2c, 0x35, 0x27, 0xfe, 0x35, 0x11, 0x67, 0x66, 0x84, 0xf2, 0x37, 0xc4, 0xe6, 0xe4, 0x5, 0xc9, 0x8d, 0xe5, 0x14, 0x73, 0x39, 0xd2, 0xb5, 0xb0, 0xfa, 0xef, 0xa5, 0xa4, 0xb9, 0x6, 0xdc, 0xb6, 0x39, 0xb7, 0x8c, 0xd3, 0x5e, 0x49, 0xad, 0x9d, 0x6d, 0xb1, 0x7c, 0x31, 0x25, 0x5f, 0x85, 0xc8, 0x4, 0x9b, 0xff, 0x64, 0xe2, 0xcc, 0x2e, 0xb5, 0x33, 0x4b, 0x31, 0xab, 0x60, 0x3b, 0x6b, 0xce, 0x9c, 0x9f, 0x8e, 0xf8, 0xb8, 0xd0, 0xcf, 0xec, 0x26, 0xb3, 0xe7, 0x76, 0xb4, 0x13, 0x1c, 0xe5, 0xb2, 0x2c, 0xa7, 0x24, 0x28, 0xec, 0x4d, 0x5c, 0xa6, 0x6a, 0xdb, 0xcd, 0x78, 0x59, 0x5a, 0x41, 0x68, 0xf4, 0xc1, 0x18, 0x6b, 0x32, 0xc1, 0x26, 0xe5, 0x72, 0x1c, 0x66, 0x7d, 0xd7, 0xa2, 0xe7, 0xf6, 0x53, 0xeb, 0x24, 0x2b, 0x4b, 0xb4, 0xbf, 0xd4, 0xa6, 0xc7, 0x3b, 0xe, 0xa7, 0xcb, 0x72, 0x2b, 0x46, 0x6c, 0xde, 0xe8, 0xcf, 0xa2, 0x36, 0x7c, 0xd4, 0x74, 0xef, 0x28, 0x1d, 0x86, 0xea, 0x93, 0x67, 0x19, 0x89, 0x2b, 0x9b, 0x8b, 0x1e, 0xef, 0xdd, 0x8c, 0xc5, 0x7a, 0xa7, 0xef, 0xfb, 0xd4, 0x3, 0xb6, 0x6d, 0xc6, 0x91, 0xf4, 0x7b, 0xe2, 0x99, 0x9, 0xa, 0x55, 0x3f, 0x38, 0x17, 0xd6, 0x56, 0xb7, 0x11, 0x97, 0x17, 0x3d, 0x3e, 0xa7, 0x4a, 0x7e, 0x2e, 0x59, 0x75, 0xc8, 0xb6, 0xab, 0x3e, 0xf3, 0xc6, 0xfa, 0x7e, 0xd6, 0x83, 0x7d, 0x37, 0xf7, 0xac, 0xae, 0xab, 0xc7, 0x6b, 0x25, 0x91, 0x6e, 0x5a, 0x44, 0x64, 0x42, 0xe, 0x19, 0x83, 0xb, 0xe9, 0x7e, 0x2d, 0xdb, 0x56, 0x1b, 0x9e, 0x7b, 0xfd, 0x7d, 0xa8, 0x40, 0xb7, 0x9d, 0xc9, 0x6a, 0xc7, 0xb1, 0x15, 0xf2, 0x5c, 0x52, 0x63, 0xd6, 0xc1, 0xfd, 0x7f, 0xd3, 0xd1, 0xef, 0x8a, 0xee, 0x80, 0xb8, 0x8c, 0x64, 0x4c, 0x76, 0x95, 0x85, 0xa9, 0xad, 0xf1, 0x77, 0x27, 0xed, 0xb, 0x60, 0x57, 0xe, 0x41, 0x68, 0xc6, 0xe6, 0xcc, 0x1a, 0xab, 0x5d, 0x5, 0xc1, 0x6a, 0x6a, 0x77, 0xa3, 0xc5, 0x26, 0x41, 0xe1, 0x38, 0xf6, 0xdd, 0x24, 0x9, 0x4c, 0x7f, 0x6a, 0x5a, 0xda, 0x6c, 0x73, 0xe0, 0x39, 0x17, 0x5a, 0x84, 0x96, 0x1d, 0x7d, 0xee, 0xb3, 0x1d, 0xb1, 0x89, 0xc8, 0x4, 0x98, 0xa0, 0xf1, 0xa9, 0xb5, 0xe1, 0xe8, 0xbb, 0x9e, 0x99, 0x71, 0x98, 0x1b, 0x4b, 0x90, 0xd8, 0xe5, 0x36, 0x9a, 0x8a, 0x92, 0xa5, 0x6e, 0xb, 0xb2, 0x9a, 0xe3, 0xa2, 0x9c, 0xc1, 0xe5, 0x40, 0xe2, 0xb2, 0xda, 0xe9, 0x57, 0xf7, 0x11, 0xdc, 0xff, 0xa5, 0x3c, 0x97, 0x6b, 0x69, 0x23, 0x2, 0xbe, 0xc8, 0xf0, 0x35, 0x29, 0x8d, 0x80, 0xad, 0x76, 0x2, 0x86, 0xb2, 0xc3, 0xa0, 0x70, 0xae, 0xff, 0xce, 0x4a, 0x8b, 0x6, 0x78, 0x39, 0x50, 0xbb, 0x94, 0x6e, 0x66, 0xa6, 0x6c, 0xbb, 0xde, 0xf7, 0x6c, 0x9e, 0x6d, 0xdf, 0x57, 0x96, 0xaf, 0x32, 0xf6, 0x7d, 0xd6, 0xa2, 0x3d, 0x96, 0xba, 0x3d, 0x4e, 0x25, 0xa2, 0x8c, 0x38, 0x22, 0x13, 0x52, 0xa3, 0xd0, 0xe2, 0x72, 0xd1, 0x91, 0x41, 0xf8, 0xac, 0xd, 0xc2, 0x58, 0xc2, 0x4c, 0x39, 0xd5, 0xb5, 0xbe, 0x4e, 0xf5, 0x7d, 0x7d, 0x68, 0x28, 0x9e, 0xd5, 0xef, 0xa8, 0xc5, 0xf0, 0xef, 0x85, 0x69, 0xb9, 0xa1, 0x99, 0x69, 0xa7, 0x58, 0x76, 0xfc, 0x77, 0x6b, 0xcb, 0x71, 0xc5, 0x7c, 0x4a, 0x94, 0x1a, 0x97, 0x37, 0xd, 0x9d, 0x68, 0xcc, 0xb5, 0x61, 0xcd, 0x67, 0xdb, 0x58, 0xf7, 0xa9, 0x9e, 0xb1, 0x29, 0x83, 0xd6, 0x46, 0x40, 0x1d, 0xeb, 0x31, 0xcf, 0xd1, 0x96, 0xbf, 0xa, 0xf1, 0xeb, 0x96, 0x81, 0x9a, 0xdd, 0x9f, 0xc6, 0x6e, 0xdf, 0x4a, 0x5f, 0x2b, 0x79, 0xae, 0xe1, 0xf9, 0xa1, 0xe1, 0x58, 0x51, 0xbf, 0x6f, 0x32, 0xe2, 0x51, 0xf4, 0x1d, 0x36, 0xfe, 0x40, 0x6a, 0x91, 0x6d, 0xdb, 0x85, 0xf4, 0xb5, 0xce, 0x20, 0xbc, 0x7e, 0xbc, 0xde, 0xea, 0xef, 0xeb, 0x88, 0xee, 0x53, 0x89, 0xcd, 0x13, 0xfd, 0xf9, 0xd6, 0xd, 0xdb, 0x49, 0x19, 0xa1, 0x33, 0xba, 0xcc, 0x60, 0x5c, 0x68, 0x71, 0xdf, 0x85, 0xc0, 0x34, 0xfd, 0x53, 0x5, 0xa, 0xbf, 0xe9, 0x7e, 0xf0, 0x5e, 0x3b, 0xa8, 0x4d, 0xa4, 0x2, 0x73, 0xa6, 0xef, 0x3f, 0xd4, 0x69, 0x6e, 0xb5, 0xa3, 0x7c, 0xad, 0xbf, 0x4e, 0xa1, 0xb0, 0x79, 0xad, 0xc7, 0xa5, 0x79, 0x3e, 0xa7, 0x2d, 0x9e, 0xc9, 0xbc, 0x61, 0xbb, 0xa5, 0x6c, 0xe3, 0x6f, 0xf4, 0x75, 0xd4, 0xf0, 0xd9, 0x2c, 0xad, 0x31, 0xb3, 0x8e, 0x50, 0xc0, 0x9b, 0xf1, 0xfd, 0x56, 0x5f, 0x4d, 0x3f, 0xe3, 0x5c, 0x22, 0xd9, 0xfc, 0x89, 0xc8, 0x84, 0xdd, 0x28, 0x68, 0x8a, 0x98, 0x5a, 0x62, 0x6d, 0x84, 0xd3, 0x46, 0x1b, 0x1e, 0x65, 0x80, 0xa6, 0xb0, 0x26, 0xaa, 0xd6, 0xe, 0xec, 0x37, 0x69, 0x36, 0xad, 0x76, 0xa9, 0xb3, 0x1, 0xd0, 0xbf, 0xb8, 0x5a, 0xb6, 0xfc, 0x3b, 0x5b, 0xdd, 0x27, 0x5f, 0x5b, 0xfd, 0x33, 0x86, 0xc, 0x8c, 0xf, 0xb, 0x79, 0xf9, 0x94, 0xa5, 0x97, 0xa8, 0x74, 0x20, 0xd5, 0xc6, 0xc9, 0xc6, 0x80, 0x99, 0x85, 0xb0, 0x5, 0x43, 0x13, 0x9b, 0x7c, 0x2b, 0xe9, 0xd7, 0x47, 0x75, 0x51, 0xb6, 0x10, 0x4d, 0x95, 0x15, 0xac, 0xac, 0x64, 0x3a, 0xcb, 0x85, 0x76, 0x83, 0xac, 0xd0, 0xcf, 0x6d, 0x44, 0x79, 0xdb, 0xac, 0x2f, 0x22, 0x13, 0x3a, 0xe3, 0xf7, 0x9, 0x1a, 0x9e, 0xaf, 0xd2, 0x7c, 0x8d, 0xdb, 0xc3, 0x4e, 0x64, 0x3b, 0xc5, 0x23, 0xe0, 0x1e, 0x2c, 0x1, 0x12, 0xfa, 0xf9, 0x17, 0x8, 0xcd, 0xde, 0xc5, 0xd5, 0xac, 0xc5, 0x73, 0x8d, 0x39, 0xa3, 0x1e, 0xd2, 0xbf, 0x7c, 0xc7, 0xa6, 0x39, 0xda, 0xf3, 0x44, 0xd2, 0x5b, 0xce, 0x61, 0xb, 0x86, 0x50, 0xb1, 0x69, 0x66, 0x1f, 0x16, 0x99, 0x8e, 0xa5, 0x8b, 0x6, 0x81, 0x8a, 0x1d, 0xac, 0x9c, 0xc8, 0xb4, 0x4f, 0x5b, 0x32, 0xc1, 0x4a, 0x53, 0xb1, 0xd9, 0xd6, 0x16, 0x21, 0x32, 0x61, 0xd0, 0xce, 0x1e, 0x3, 0xa6, 0xb6, 0x5e, 0xd3, 0x81, 0x53, 0x5b, 0xc2, 0x6c, 0x4a, 0x91, 0xad, 0xeb, 0x9e, 0xde, 0xeb, 0x2b, 0xe4, 0x7e, 0x10, 0x9a, 0xdd, 0x73, 0xdd, 0x22, 0x7b, 0x60, 0xc4, 0xc8, 0x6f, 0x32, 0xed, 0x5d, 0xc6, 0x21, 0xfd, 0xca, 0x4, 0x4a, 0x6f, 0x25, 0xfd, 0xb5, 0xc2, 0x75, 0xb, 0xb1, 0x79, 0x9d, 0x99, 0xd0, 0x34, 0x99, 0xb8, 0x65, 0x83, 0x36, 0x4e, 0x35, 0x58, 0x31, 0x62, 0xf3, 0x3c, 0xd0, 0x1f, 0xcf, 0xc6, 0xa, 0x54, 0x10, 0x99, 0xb0, 0x3b, 0xa8, 0x5d, 0xe, 0x70, 0x6c, 0xcc, 0xd4, 0x78, 0x93, 0xc1, 0x62, 0x1b, 0xf8, 0x2b, 0x49, 0x73, 0x41, 0xfd, 0x46, 0x3b, 0xeb, 0x90, 0xac, 0x26, 0x42, 0xb3, 0xbb, 0xf1, 0xd3, 0xf4, 0x78, 0xcf, 0x4a, 0x7e, 0x9e, 0x22, 0x9e, 0x32, 0xb3, 0x80, 0xfe, 0xb4, 0x95, 0xe7, 0x4c, 0x6d, 0x4e, 0x18, 0x5b, 0x74, 0x12, 0x68, 0x57, 0x55, 0xbb, 0x96, 0x19, 0xb4, 0x4f, 0xa1, 0x45, 0x51, 0xc8, 0xf4, 0xb8, 0x3d, 0xab, 0x93, 0x7a, 0xb0, 0x72, 0x65, 0xf9, 0xb1, 0x10, 0xfb, 0xa4, 0xfa, 0xcf, 0x25, 0x22, 0x13, 0xc6, 0x74, 0xe, 0xb1, 0x1b, 0x9d, 0x26, 0x53, 0xe3, 0x6d, 0xb2, 0x7, 0x53, 0x44, 0x19, 0xdb, 0xf7, 0xfa, 0x9e, 0x43, 0x84, 0xe6, 0x25, 0x43, 0xa0, 0xd5, 0xd8, 0x69, 0xb2, 0x49, 0xa3, 0x96, 0xb4, 0xb2, 0x2e, 0x66, 0x9c, 0xfa, 0x3a, 0xca, 0xb7, 0x92, 0x77, 0x49, 0xad, 0x4a, 0xb7, 0xc1, 0x32, 0xe0, 0x77, 0x9a, 0xee, 0xd2, 0x4f, 0x79, 0x2c, 0x6d, 0x32, 0xc, 0x56, 0xec, 0x19, 0x80, 0x90, 0x40, 0xe5, 0x4c, 0x6, 0x5c, 0xa7, 0x89, 0xc8, 0x84, 0xdd, 0x48, 0xe7, 0x50, 0xc6, 0x61, 0x2c, 0xce, 0xa4, 0xd9, 0xee, 0x5c, 0xb3, 0xe6, 0x32, 0x85, 0xec, 0x50, 0x13, 0xd6, 0xfa, 0xde, 0x1f, 0x2, 0xda, 0x79, 0xc1, 0x30, 0x68, 0xe4, 0x14, 0x6f, 0x25, 0x6c, 0xe3, 0x5c, 0xaa, 0x59, 0x17, 0xdf, 0x9d, 0xbf, 0xa7, 0xfa, 0xfe, 0xe1, 0x89, 0x95, 0xe, 0x34, 0x7c, 0xc6, 0xea, 0x91, 0x8c, 0xbc, 0x99, 0xa3, 0x47, 0x4a, 0x9, 0x5b, 0x7f, 0x69, 0x2, 0xea, 0xd0, 0x65, 0x42, 0x29, 0xb1, 0x6d, 0x10, 0xa8, 0x2c, 0xa4, 0xd9, 0x3a, 0x57, 0x44, 0x26, 0xb4, 0x76, 0x96, 0x87, 0x6, 0xf3, 0x18, 0xa2, 0xb7, 0x69, 0xf6, 0x72, 0x2d, 0xcf, 0x6b, 0x2e, 0x73, 0xae, 0x33, 0xb7, 0xd, 0x8c, 0x74, 0x53, 0x3d, 0xf3, 0x37, 0x16, 0xa7, 0xa8, 0xd8, 0x48, 0xf8, 0x54, 0xd7, 0x14, 0xb8, 0xf4, 0xec, 0x3b, 0xa7, 0x99, 0x6, 0x7d, 0x2e, 0x2a, 0xdd, 0x2f, 0x7c, 0xc6, 0xaa, 0x6a, 0xe7, 0x8b, 0xc4, 0xee, 0x3f, 0x54, 0xf8, 0x54, 0x12, 0xbe, 0x34, 0x28, 0xf5, 0x40, 0x25, 0x64, 0x66, 0x60, 0x36, 0x84, 0xd0, 0x44, 0x64, 0x82, 0x8f, 0xc0, 0x14, 0x19, 0x27, 0x93, 0xb9, 0x90, 0xf0, 0xec, 0xa5, 0x31, 0x3c, 0x14, 0x31, 0x7e, 0x46, 0x19, 0x9d, 0x90, 0xb5, 0x5f, 0x4d, 0xeb, 0xd0, 0xe5, 0x46, 0xa8, 0x53, 0xb4, 0xb3, 0x2e, 0xa9, 0xf5, 0x4d, 0x35, 0x4e, 0x7d, 0x4a, 0x88, 0x21, 0x30, 0xdd, 0x7d, 0xc4, 0x77, 0xac, 0x9e, 0x49, 0x3a, 0xeb, 0x33, 0x17, 0x12, 0xb6, 0x2e, 0xfc, 0x4a, 0xb7, 0x53, 0x4d, 0x97, 0xd9, 0x9b, 0x54, 0xf0, 0x1d, 0x63, 0xbd, 0xb, 0x4d, 0x44, 0x26, 0x18, 0xa, 0xc7, 0xeb, 0xdf, 0x47, 0x32, 0xb8, 0x21, 0xef, 0x6d, 0xb2, 0x90, 0x1e, 0xe7, 0xb5, 0xbf, 0x2f, 0xb0, 0x11, 0xe8, 0x30, 0xf3, 0xc0, 0x36, 0x52, 0xc1, 0x4f, 0x93, 0x32, 0x53, 0x53, 0xc1, 0x67, 0x3d, 0x2f, 0x2, 0xb3, 0xfb, 0xb1, 0x9a, 0xc2, 0x38, 0xd, 0x11, 0x98, 0x26, 0x50, 0x63, 0xa9, 0x85, 0xdb, 0x17, 0xfa, 0xb6, 0x51, 0xaf, 0x42, 0x13, 0x91, 0x9, 0x86, 0x37, 0x1e, 0x11, 0xd2, 0xd0, 0xac, 0x3d, 0x9d, 0xf2, 0x5a, 0xf2, 0xd9, 0xd4, 0x33, 0x94, 0xf3, 0x9a, 0x4b, 0x4, 0xa7, 0x45, 0x44, 0x4a, 0xc8, 0xee, 0x69, 0xc5, 0x52, 0xfc, 0xd7, 0xdb, 0x4d, 0x91, 0x33, 0x71, 0xcf, 0x84, 0x5c, 0x31, 0x3e, 0x7b, 0x19, 0xab, 0x85, 0x4c, 0x7b, 0xd6, 0x21, 0x64, 0x2c, 0x99, 0x36, 0x61, 0x7a, 0xdc, 0xf, 0x73, 0x32, 0xd8, 0x83, 0xe7, 0x73, 0xe8, 0x45, 0x68, 0x22, 0x32, 0xc1, 0x50, 0x46, 0x28, 0x32, 0x45, 0xe, 0x17, 0x9f, 0xad, 0xb5, 0xd1, 0x61, 0x6a, 0x3c, 0x3c, 0xca, 0xf5, 0x69, 0xaf, 0x54, 0x37, 0x17, 0xb4, 0x75, 0x8a, 0xbe, 0xc6, 0xd8, 0x64, 0x5d, 0x56, 0x9, 0xb7, 0x87, 0x6a, 0x7, 0xd7, 0xda, 0x40, 0x73, 0x62, 0x11, 0x74, 0x3f, 0x56, 0x97, 0x13, 0xb6, 0x7d, 0x66, 0x2c, 0xf9, 0xb0, 0x15, 0xff, 0xf5, 0xaa, 0xf0, 0xcc, 0x26, 0x20, 0xc0, 0xed, 0x45, 0x68, 0x22, 0x32, 0xc1, 0x47, 0x64, 0xd6, 0x23, 0x1a, 0x32, 0xe3, 0xa8, 0xf7, 0x45, 0x69, 0x39, 0x14, 0x6f, 0xee, 0x83, 0xed, 0xb, 0x6d, 0xba, 0x4f, 0x40, 0x50, 0xd6, 0xe8, 0x99, 0x22, 0x50, 0x60, 0xe6, 0x90, 0x75, 0xf9, 0xe8, 0xd1, 0x1e, 0xa7, 0x74, 0x9d, 0x56, 0x63, 0xf5, 0x7c, 0x4f, 0xdf, 0x32, 0x75, 0x12, 0x57, 0x19, 0x8c, 0xa5, 0xad, 0xa4, 0x3d, 0x13, 0x30, 0x44, 0x1f, 0xf2, 0x5d, 0xbf, 0x1a, 0x22, 0xfc, 0x11, 0x99, 0x10, 0x14, 0x51, 0xba, 0x3a, 0x69, 0x2c, 0x86, 0xd6, 0x5e, 0x93, 0x83, 0xd1, 0x69, 0x8e, 0x12, 0xe7, 0x4b, 0x8f, 0xf7, 0x2d, 0x84, 0x73, 0x93, 0x8d, 0xe0, 0xf6, 0xdd, 0x10, 0x95, 0x53, 0xd6, 0x65, 0xe1, 0x78, 0x7d, 0x29, 0x64, 0x9f, 0xda, 0xb2, 0xd6, 0xe3, 0xb5, 0x96, 0xe7, 0x63, 0x70, 0xa7, 0x7c, 0x1a, 0x54, 0xe8, 0x58, 0x42, 0x60, 0x76, 0xe3, 0x43, 0x7d, 0xab, 0x8c, 0x84, 0x2e, 0x7, 0x3a, 0xc8, 0x2b, 0xda, 0x1e, 0x1e, 0x79, 0xe7, 0x78, 0xfd, 0x2e, 0x82, 0xcf, 0x78, 0x65, 0x19, 0x5c, 0xc, 0x4e, 0x37, 0xac, 0xb4, 0x80, 0x74, 0x89, 0xc8, 0xb, 0x21, 0x63, 0xec, 0x5b, 0xda, 0x29, 0x27, 0xa7, 0xa8, 0x4, 0x66, 0x71, 0xe0, 0x75, 0xd5, 0x6, 0x9f, 0x18, 0x66, 0x9d, 0x90, 0x52, 0x45, 0x82, 0x4b, 0xc6, 0xd2, 0x28, 0x98, 0xd9, 0x95, 0xaf, 0xe2, 0xde, 0xe8, 0xab, 0xc6, 0xf6, 0xbd, 0x74, 0x50, 0x66, 0x8d, 0x4c, 0x26, 0x28, 0x5c, 0x1b, 0x3c, 0x62, 0x11, 0x18, 0xa9, 0x1e, 0x5, 0x39, 0x26, 0x3e, 0xeb, 0x33, 0x7d, 0x84, 0x68, 0xca, 0x5c, 0x88, 0xdf, 0x26, 0xa8, 0xdc, 0x9c, 0xe2, 0x3b, 0xc6, 0xeb, 0xa0, 0x2, 0x21, 0x5, 0x7c, 0xf, 0x7c, 0x40, 0x60, 0xf6, 0xd7, 0x8f, 0x7c, 0x3, 0x96, 0xcb, 0x2e, 0xec, 0x3e, 0x22, 0x13, 0x8e, 0xc4, 0x5d, 0x84, 0x9d, 0xe9, 0xae, 0x74, 0xa9, 0xc5, 0x6f, 0x5d, 0xd7, 0x45, 0xa6, 0xed, 0xa3, 0x8c, 0xec, 0x12, 0xa7, 0xb8, 0xd7, 0x6e, 0xcc, 0x1d, 0x76, 0x83, 0x2c, 0x26, 0xec, 0x8e, 0x25, 0x9f, 0x35, 0xde, 0xf, 0x8, 0xcc, 0x5e, 0x9, 0xb1, 0x55, 0x6a, 0x59, 0x43, 0x81, 0xc8, 0x84, 0x36, 0xb8, 0x32, 0x34, 0x94, 0x8b, 0x48, 0x9f, 0x2b, 0x8f, 0x40, 0xa2, 0x94, 0xfc, 0xb2, 0x99, 0x66, 0xed, 0x18, 0x4e, 0x31, 0xdc, 0x6e, 0xac, 0x11, 0x9, 0xb0, 0x33, 0x96, 0xae, 0x19, 0x4b, 0x51, 0x9, 0x4d, 0xdf, 0xcd, 0x9f, 0x37, 0x6d, 0xfe, 0x23, 0x44, 0x26, 0x4c, 0x61, 0x3d, 0x26, 0xf4, 0x8f, 0x4f, 0x89, 0x99, 0x8f, 0x99, 0xb5, 0x89, 0xcf, 0xe6, 0x84, 0x5c, 0x9d, 0xa2, 0xcb, 0x6e, 0x7c, 0x66, 0x48, 0x81, 0x85, 0x12, 0x98, 0x85, 0xc7, 0xfb, 0x4e, 0x85, 0x99, 0xb3, 0xa1, 0xa8, 0xc4, 0xaf, 0xf2, 0x43, 0xab, 0x23, 0x4c, 0x11, 0x99, 0x79, 0xa3, 0x6, 0x3d, 0x99, 0x4c, 0x30, 0x6, 0xa7, 0x72, 0xbc, 0x67, 0x2e, 0x2d, 0xa7, 0x4e, 0x26, 0x84, 0xef, 0x91, 0x7d, 0xb9, 0x3a, 0xc5, 0x43, 0x6d, 0x53, 0x23, 0x14, 0x60, 0xc7, 0x6e, 0xf8, 0xac, 0x69, 0x5e, 0xe2, 0x6f, 0x6, 0x67, 0x2d, 0x7e, 0x87, 0x24, 0x2c, 0xa5, 0xe1, 0x4c, 0x16, 0x22, 0x93, 0xc1, 0xef, 0x12, 0x98, 0x4c, 0x5b, 0xe4, 0x83, 0xcf, 0xda, 0xcc, 0xf, 0x99, 0x4, 0x5f, 0x3e, 0x91, 0x7b, 0xae, 0x4e, 0x51, 0x65, 0x36, 0x8e, 0x8, 0x4c, 0xc1, 0x3, 0xdf, 0x69, 0xf2, 0x8d, 0xa4, 0x7d, 0x68, 0x41, 0xcc, 0x9c, 0x8b, 0xff, 0x11, 0xa6, 0xc1, 0x85, 0xda, 0x11, 0x99, 0x79, 0xe3, 0x9a, 0xfe, 0xfc, 0x42, 0x13, 0x65, 0x45, 0x25, 0xee, 0x6c, 0xe6, 0x22, 0x83, 0x76, 0xf0, 0x31, 0xa6, 0x39, 0x3b, 0xc5, 0xd2, 0xf1, 0x3a, 0x4b, 0x6c, 0xc0, 0x70, 0x29, 0x7e, 0x4b, 0x4e, 0x28, 0xd8, 0x3f, 0x1e, 0xbe, 0xa7, 0xc0, 0x15, 0xd2, 0x60, 0xc9, 0x14, 0x22, 0x33, 0x5f, 0x5c, 0x53, 0x9f, 0xaa, 0xc3, 0xad, 0x69, 0xa6, 0xec, 0x70, 0x9, 0xa7, 0x42, 0xd2, 0xde, 0x0, 0x34, 0xf7, 0xb8, 0xbf, 0xdc, 0x9d, 0xe2, 0xef, 0x1e, 0xc1, 0xa, 0x40, 0xe9, 0x19, 0x94, 0xa6, 0x54, 0x3, 0x74, 0xaa, 0x6c, 0x3d, 0x83, 0xe6, 0xa5, 0xf8, 0xd5, 0x38, 0x45, 0x64, 0x82, 0x33, 0x22, 0x61, 0xca, 0x2b, 0x4f, 0x94, 0x40, 0xa8, 0x1d, 0xef, 0x49, 0x75, 0xca, 0xdc, 0x77, 0x6a, 0x2f, 0x77, 0xa7, 0xe8, 0x2a, 0x79, 0x86, 0x60, 0x0, 0xf1, 0x1c, 0x4b, 0x57, 0x4, 0x25, 0xd1, 0x70, 0xe5, 0xe9, 0xf7, 0x83, 0x8e, 0x1a, 0x46, 0x64, 0xe6, 0x1b, 0x61, 0x96, 0x8e, 0xf7, 0x50, 0xe3, 0x2e, 0x5f, 0x3e, 0x79, 0xf4, 0x9f, 0x54, 0x3, 0x2f, 0xd7, 0xd4, 0x1e, 0x4e, 0xf1, 0xf0, 0xc, 0x8, 0x1b, 0x7e, 0x40, 0x71, 0x26, 0xee, 0x4d, 0x82, 0x2a, 0x98, 0x65, 0x1d, 0x66, 0x5c, 0xf8, 0x1e, 0xce, 0xb1, 0x40, 0x64, 0xc2, 0x21, 0x5c, 0x9b, 0x1a, 0x2a, 0x9c, 0x45, 0xd6, 0xb8, 0xa2, 0x59, 0xe5, 0x3c, 0x66, 0x9, 0xde, 0xb7, 0x4b, 0x3c, 0xe3, 0x14, 0x11, 0x99, 0xe0, 0xe6, 0x48, 0xfc, 0x36, 0xce, 0xf9, 0x8, 0x1a, 0x18, 0x96, 0x7, 0xf1, 0x3f, 0x9c, 0xc3, 0x6b, 0x13, 0x10, 0x22, 0x33, 0x3f, 0x4a, 0xf, 0x67, 0x4a, 0x8d, 0xbb, 0xbc, 0xa9, 0x3d, 0x84, 0xe6, 0xbb, 0xc, 0xdb, 0xe5, 0x1c, 0xa7, 0xe8, 0xb5, 0x89, 0x3, 0xf2, 0xc6, 0x67, 0x46, 0x40, 0xd9, 0x97, 0x8a, 0xa6, 0x8a, 0x12, 0x9f, 0xd9, 0x9a, 0x42, 0x3c, 0x37, 0x1, 0x21, 0x32, 0xf3, 0xc3, 0x15, 0x61, 0x2a, 0x81, 0xb1, 0xa6, 0x99, 0xb2, 0xc7, 0x55, 0x59, 0xa0, 0xcc, 0xac, 0x3d, 0x2a, 0x61, 0x9d, 0xb2, 0x62, 0x46, 0x13, 0x80, 0x23, 0x8, 0x39, 0xf3, 0x8, 0x44, 0xce, 0x69, 0xaa, 0xa8, 0xf1, 0xc9, 0x66, 0x9e, 0xfd, 0xe5, 0x6f, 0xff, 0x70, 0x66, 0x33, 0x11, 0x99, 0x79, 0xe1, 0xb3, 0x73, 0x96, 0xe9, 0x40, 0x10, 0x8f, 0x48, 0x36, 0x37, 0x91, 0x49, 0x89, 0x15, 0x3f, 0xbe, 0xd3, 0x4, 0x59, 0xe3, 0xbb, 0xae, 0xb9, 0xa6, 0xa9, 0xa2, 0xb7, 0xff, 0x6b, 0x8f, 0x80, 0xc2, 0x99, 0xcd, 0x44, 0x64, 0xe6, 0x15, 0x61, 0xba, 0x76, 0x85, 0xd5, 0x42, 0x16, 0x13, 0x9e, 0xfb, 0x82, 0xcf, 0x79, 0xe6, 0x39, 0xb0, 0xc6, 0x29, 0x6, 0xf5, 0x1b, 0xc8, 0xd7, 0xc7, 0xf8, 0x64, 0x31, 0xd9, 0x54, 0x3a, 0xd, 0x3a, 0xc9, 0x66, 0x22, 0x32, 0xf3, 0x8a, 0x30, 0x8b, 0xe, 0x3a, 0x15, 0xe4, 0x15, 0xcd, 0x1e, 0x22, 0x87, 0xa9, 0x53, 0xa6, 0xf6, 0x0, 0xfc, 0x7d, 0x8c, 0x4f, 0x16, 0x93, 0x75, 0xbb, 0xd3, 0x9, 0x18, 0x97, 0x1e, 0x81, 0xc5, 0x47, 0x44, 0x26, 0xcc, 0x3c, 0x3a, 0x8b, 0x12, 0x14, 0x6b, 0x9a, 0xa, 0x2c, 0x5c, 0x27, 0xb7, 0xbc, 0xc9, 0xa0, 0xd, 0x70, 0x8a, 0x61, 0x1c, 0xd3, 0x4, 0xd9, 0xb2, 0xf0, 0x8, 0xd8, 0xc8, 0x62, 0x4e, 0x8b, 0x4f, 0x1e, 0xf6, 0xef, 0x60, 0x36, 0x13, 0x91, 0x99, 0x3e, 0xbe, 0x5, 0xa6, 0xc9, 0x62, 0xc2, 0xbe, 0xc0, 0xc3, 0x15, 0xbc, 0xa4, 0xc, 0x4e, 0x11, 0xc0, 0x5f, 0x60, 0x16, 0x4, 0x6c, 0x49, 0xda, 0xc0, 0xb5, 0x87, 0xc6, 0x98, 0x23, 0x32, 0xf3, 0xe5, 0xc2, 0x43, 0xc, 0xac, 0x85, 0x72, 0x12, 0xb0, 0xdf, 0xc0, 0xd4, 0x19, 0x8b, 0xcc, 0xd, 0x4e, 0x11, 0xc0, 0xb, 0xd7, 0x29, 0x60, 0x4, 0x6c, 0xd3, 0xc5, 0xe7, 0xb9, 0x5d, 0x20, 0x32, 0xf3, 0x8d, 0x2e, 0x29, 0x27, 0x1, 0x6d, 0xa8, 0x1d, 0xaf, 0x17, 0x9, 0xdf, 0x3b, 0xd9, 0xfd, 0xfd, 0xf6, 0x42, 0x32, 0xe, 0x3c, 0x60, 0xbf, 0xd, 0x28, 0x1d, 0xef, 0x59, 0x13, 0xb0, 0x4d, 0xda, 0x7, 0xac, 0x5d, 0x7d, 0xe0, 0x2f, 0x7f, 0xfb, 0x47, 0x89, 0xc8, 0xcc, 0xb, 0x65, 0xec, 0x7d, 0xce, 0x18, 0xe5, 0xd4, 0x5, 0x38, 0x44, 0x95, 0xa9, 0xc8, 0xdc, 0x8, 0x3b, 0xa5, 0xf7, 0xb1, 0xcd, 0xb4, 0x3f, 0xc0, 0xcb, 0xf8, 0x14, 0xe5, 0x26, 0x8b, 0x39, 0x6d, 0x7c, 0x9e, 0xdf, 0x7, 0x44, 0x66, 0x3e, 0xa8, 0x35, 0x12, 0x37, 0xe2, 0x77, 0xea, 0x2, 0x5, 0xa6, 0xe1, 0x10, 0xae, 0xba, 0x87, 0xa9, 0x8a, 0xa, 0x9c, 0x62, 0xf3, 0xe0, 0x16, 0xf2, 0x62, 0x4e, 0xc0, 0x96, 0x45, 0x70, 0xe9, 0xa, 0x30, 0x17, 0xfb, 0x36, 0x0, 0x21, 0x32, 0xd3, 0x14, 0x98, 0xb7, 0x1e, 0xce, 0x5f, 0x65, 0x2f, 0x29, 0x30, 0xd, 0x2e, 0x5c, 0xce, 0xe1, 0xf7, 0x44, 0xef, 0xb9, 0xe2, 0xd1, 0xbf, 0x88, 0xab, 0x6d, 0x4a, 0x9a, 0x28, 0xab, 0xa0, 0xc2, 0xe5, 0x6b, 0x38, 0xa6, 0x38, 0x9f, 0xc0, 0x7b, 0x8e, 0xc8, 0xcc, 0x43, 0x60, 0xfa, 0x64, 0x13, 0xde, 0xb, 0xd3, 0xe4, 0xd0, 0x5e, 0x64, 0xe6, 0x6a, 0x4c, 0xe9, 0x13, 0x2f, 0xf3, 0x8e, 0x26, 0xca, 0x6, 0x9f, 0xd, 0x3f, 0xcc, 0x96, 0xa5, 0x81, 0xcf, 0x46, 0xc8, 0x77, 0x88, 0x4c, 0x4, 0xa6, 0x62, 0x29, 0x64, 0x6a, 0xa0, 0x1b, 0x41, 0x51, 0x26, 0x6a, 0x4c, 0xe1, 0x65, 0xee, 0x1d, 0xaf, 0xcf, 0x69, 0xa2, 0x6c, 0x70, 0x3d, 0xeb, 0x35, 0x4d, 0x94, 0xc, 0x3e, 0x1, 0xc3, 0x7c, 0x77, 0xca, 0x1c, 0x91, 0x99, 0x9f, 0xc0, 0x54, 0x83, 0x9e, 0x5d, 0xb3, 0x0, 0xfb, 0xa9, 0x84, 0xf5, 0x63, 0x3e, 0x6d, 0x74, 0x88, 0x2, 0xa1, 0x99, 0x5, 0x4c, 0x95, 0xe7, 0xc7, 0x97, 0xd0, 0xc0, 0x3, 0x91, 0x99, 0x97, 0xc0, 0x54, 0xb, 0x77, 0x29, 0x57, 0x4, 0xa1, 0x6c, 0x33, 0xba, 0x57, 0x9c, 0xa2, 0x5f, 0x7f, 0x70, 0x9, 0xf1, 0x8f, 0x34, 0x53, 0xf2, 0x94, 0x8e, 0xd7, 0xeb, 0xcc, 0x6c, 0x47, 0xe, 0x4, 0x4f, 0x99, 0x23, 0x32, 0xa7, 0x1f, 0x49, 0x7e, 0xb, 0x10, 0x98, 0x27, 0xc2, 0x3a, 0x4c, 0x8, 0x27, 0xa7, 0x3e, 0xc3, 0x54, 0x79, 0x37, 0xed, 0xa4, 0x4, 0xc8, 0x19, 0xcd, 0x94, 0x34, 0xef, 0x18, 0x4b, 0x8c, 0xfd, 0x3d, 0x90, 0xc9, 0x4c, 0x4, 0x65, 0xc0, 0xbf, 0x8a, 0xbb, 0x4c, 0x91, 0x11, 0x9, 0xd4, 0xc3, 0x4, 0x70, 0x7, 0x62, 0x8c, 0x11, 0x3f, 0x7c, 0x32, 0xbe, 0xea, 0x14, 0x90, 0x82, 0xa6, 0x4a, 0x96, 0xd2, 0xf1, 0xfa, 0x1d, 0x4d, 0x94, 0x24, 0xce, 0x29, 0x73, 0xbb, 0x30, 0x3b, 0x22, 0x73, 0x7a, 0x98, 0x1a, 0x98, 0x97, 0x9e, 0xef, 0x57, 0x4e, 0xf3, 0x44, 0x98, 0xb6, 0x80, 0x71, 0x1c, 0x4d, 0x6a, 0xc2, 0x9, 0x9e, 0x5, 0x79, 0xe5, 0x69, 0xab, 0x8e, 0x68, 0xae, 0x2c, 0xc7, 0x3d, 0x99, 0xcc, 0x34, 0xa9, 0x3c, 0xde, 0x73, 0x8c, 0xc8, 0x9c, 0x26, 0x2a, 0xd, 0xfd, 0x4d, 0xfc, 0x17, 0xd5, 0x23, 0x30, 0x1, 0xc2, 0x84, 0x13, 0xf8, 0xe3, 0xb3, 0x81, 0x50, 0x2d, 0xe5, 0xb9, 0x45, 0x68, 0x26, 0xc7, 0x31, 0x2, 0x33, 0x5b, 0x1e, 0x24, 0xa0, 0x56, 0x2e, 0x22, 0x73, 0x1a, 0x14, 0xda, 0x50, 0x87, 0x64, 0x5, 0x94, 0xc3, 0x7c, 0x8b, 0xe3, 0x4, 0x80, 0x9e, 0xa8, 0xc4, 0x2f, 0xab, 0x61, 0x84, 0x66, 0x41, 0x93, 0x25, 0x43, 0xe9, 0x78, 0x9d, 0xa9, 0xf2, 0xf4, 0xc7, 0x3e, 0x22, 0x33, 0x11, 0x71, 0x79, 0x2d, 0x4f, 0xd9, 0xcb, 0x32, 0xe0, 0xf7, 0xcc, 0x26, 0x9f, 0x9a, 0x26, 0x4, 0x80, 0x1e, 0xf1, 0x5d, 0xeb, 0xad, 0x84, 0xe6, 0x57, 0xe1, 0x34, 0xa0, 0x54, 0x70, 0x6d, 0x36, 0x25, 0xb9, 0x91, 0x36, 0xce, 0x20, 0xc2, 0xac, 0xcb, 0x44, 0x64, 0xc6, 0x2f, 0x2e, 0x17, 0x81, 0xbf, 0xbb, 0x96, 0xa7, 0xc, 0x26, 0x1b, 0x18, 0x0, 0xa0, 0x6f, 0x54, 0x20, 0xeb, 0x5b, 0x77, 0xd7, 0x94, 0x5b, 0xbb, 0x14, 0xa6, 0xcf, 0xa7, 0xee, 0x9f, 0x5c, 0xcf, 0xaf, 0xa2, 0x99, 0x92, 0xc6, 0xe7, 0xf9, 0xce, 0x10, 0x99, 0x71, 0x71, 0xa4, 0x5, 0xe5, 0x6d, 0x43, 0x71, 0x69, 0xb2, 0xa, 0x9c, 0x47, 0xe, 0x0, 0x43, 0x72, 0x25, 0x61, 0x27, 0xbb, 0x9c, 0x69, 0x1b, 0x47, 0x89, 0xa3, 0xe9, 0x8a, 0x4c, 0x4, 0x26, 0xb8, 0x9e, 0xf3, 0x1b, 0x44, 0x66, 0x1c, 0x83, 0x55, 0x89, 0x49, 0xb5, 0xd6, 0xf2, 0x87, 0x3c, 0x65, 0x2f, 0xcb, 0x6, 0x7f, 0xc7, 0xac, 0xbf, 0x5c, 0xd3, 0xa4, 0x0, 0x30, 0x2, 0xa7, 0x81, 0xe2, 0x42, 0x5, 0xd5, 0x97, 0x96, 0xd8, 0x24, 0xb3, 0x39, 0x1d, 0x5c, 0x9b, 0x7e, 0x98, 0x2a, 0xcf, 0x3, 0xd7, 0x73, 0x26, 0x93, 0x39, 0x30, 0x47, 0xf2, 0x5c, 0xa0, 0xd8, 0x4c, 0x85, 0x7f, 0xd3, 0xdf, 0xb7, 0x39, 0x82, 0x4d, 0x65, 0x11, 0xd8, 0x41, 0xe, 0x0, 0x63, 0xf3, 0x5e, 0xc2, 0xb3, 0x58, 0x85, 0x25, 0x36, 0xaf, 0xc5, 0xef, 0x60, 0x9, 0x18, 0x97, 0xc2, 0xf1, 0xfa, 0x3d, 0x4d, 0x94, 0x5, 0xae, 0xe7, 0xfc, 0xbf, 0xb1, 0xfc, 0xca, 0xe3, 0x4d, 0xb7, 0xb4, 0x65, 0x6b, 0x71, 0xd9, 0x87, 0xe1, 0xdc, 0xea, 0xec, 0x1, 0xe2, 0x12, 0x0, 0x62, 0xc0, 0x94, 0x4c, 0x53, 0x62, 0x71, 0xd1, 0xc0, 0x4e, 0x2e, 0xf4, 0xa5, 0x6c, 0x9a, 0xaa, 0x59, 0xaa, 0xca, 0xe0, 0xd4, 0x34, 0xeb, 0xe4, 0x44, 0x26, 0xcf, 0x2c, 0xf, 0x9c, 0xda, 0xe3, 0x2f, 0x7f, 0xfb, 0xc7, 0xec, 0x95, 0xc7, 0xc0, 0x2f, 0x69, 0xcb, 0xa8, 0x50, 0x3, 0x58, 0x2d, 0xb4, 0x5f, 0xd3, 0x14, 0xa3, 0x51, 0x5a, 0x41, 0xd8, 0x9f, 0x76, 0xfe, 0xed, 0x50, 0x80, 0xf1, 0x70, 0x60, 0x60, 0xd6, 0x3b, 0xc6, 0xf9, 0xce, 0xe3, 0x77, 0x0, 0x62, 0xe4, 0x54, 0xf7, 0xdf, 0xa6, 0x1b, 0x7c, 0x66, 0xfa, 0xba, 0x44, 0x70, 0x4e, 0x52, 0x64, 0x56, 0x34, 0x11, 0x22, 0xd3, 0xf8, 0xc0, 0x57, 0xb4, 0xd3, 0xa4, 0xb2, 0x4, 0x6a, 0x6a, 0xfc, 0x93, 0xb0, 0x73, 0x7c, 0x8, 0x8c, 0x40, 0x3c, 0xd6, 0x46, 0xb5, 0xe8, 0x20, 0xe0, 0x6a, 0x1b, 0xb4, 0x6d, 0x2d, 0xd1, 0xa9, 0xbe, 0xde, 0x8b, 0x5f, 0x61, 0x5c, 0x80, 0xa1, 0x59, 0xeb, 0x7e, 0x79, 0xdd, 0xb2, 0xcf, 0xef, 0xa, 0x4e, 0xf5, 0x37, 0xbf, 0xd0, 0xe7, 0xa3, 0x15, 0x99, 0x4, 0x2, 0xf9, 0x9, 0xcd, 0x43, 0x33, 0xb5, 0xc7, 0x88, 0xcc, 0xf8, 0x51, 0x83, 0x76, 0xa5, 0x23, 0x79, 0xc4, 0x65, 0x7f, 0xcc, 0xb4, 0x33, 0x3c, 0xd6, 0xdf, 0x17, 0x91, 0x7e, 0x46, 0x79, 0xc1, 0x69, 0xd7, 0xfa, 0x52, 0xce, 0xf7, 0xbb, 0xf5, 0x3d, 0xc0, 0x98, 0xb6, 0x4b, 0x4d, 0x9f, 0x2f, 0xa4, 0x9b, 0xb2, 0x45, 0x46, 0x70, 0x9a, 0x5d, 0xe9, 0xca, 0x26, 0xde, 0xe9, 0x7e, 0x4e, 0xb6, 0x7f, 0xb8, 0xe0, 0xdb, 0xf5, 0xcc, 0x21, 0x1f, 0x9c, 0x9a, 0x4, 0x91, 0x19, 0x2f, 0xca, 0x80, 0x9a, 0x69, 0x22, 0xe8, 0xc7, 0x58, 0xce, 0xb5, 0xa8, 0x9c, 0xcb, 0xf4, 0x77, 0xb7, 0x16, 0xb2, 0x3f, 0xdb, 0xba, 0xd5, 0xd7, 0x3d, 0xce, 0x18, 0x46, 0x62, 0xad, 0xed, 0xd8, 0x47, 0xe9, 0x76, 0x27, 0xf9, 0x5c, 0x9e, 0x37, 0x4d, 0x9a, 0x8c, 0x3e, 0xa2, 0x73, 0x98, 0x40, 0x17, 0x91, 0x9, 0xa2, 0xc7, 0x5a, 0x79, 0xa8, 0xbf, 0x20, 0x32, 0xe3, 0x13, 0x96, 0x5f, 0x84, 0xac, 0x65, 0xdf, 0xc2, 0xf2, 0x9d, 0xb4, 0xdb, 0xd1, 0x3f, 0x35, 0xa7, 0x30, 0xdb, 0x63, 0x18, 0x6c, 0x87, 0xc, 0xd0, 0x37, 0xca, 0x9e, 0xa9, 0x19, 0x19, 0xb5, 0xdc, 0x67, 0xa1, 0x5, 0x67, 0xd1, 0xc3, 0xd8, 0x46, 0x74, 0x8e, 0xb, 0x22, 0x13, 0x7e, 0x1a, 0x97, 0x88, 0xcc, 0xf1, 0xa3, 0x80, 0xad, 0x36, 0x84, 0x64, 0x2c, 0xfb, 0x43, 0x39, 0x9e, 0xf, 0x19, 0x9, 0x4b, 0x17, 0xe5, 0x4e, 0xf4, 0x59, 0xc9, 0xf3, 0x3a, 0x37, 0x9c, 0x31, 0xf4, 0x2d, 0x36, 0xaf, 0xf4, 0xd5, 0xe7, 0xb8, 0xdc, 0x15, 0x9d, 0x4, 0x57, 0xc3, 0xf0, 0x1f, 0x9a, 0x20, 0x2b, 0x9c, 0xc7, 0x4b, 0x22, 0x32, 0xfb, 0x8f, 0xea, 0x4c, 0x64, 0x67, 0x6f, 0xd6, 0xa8, 0x71, 0xe6, 0xfd, 0x47, 0x50, 0xf2, 0x94, 0x2d, 0x59, 0x48, 0x9c, 0xeb, 0x2b, 0x63, 0x15, 0x9d, 0xb5, 0x25, 0x3a, 0x9, 0x7c, 0xa0, 0x4f, 0x36, 0xfa, 0x2a, 0x2c, 0xc1, 0x39, 0x1b, 0xa8, 0x9f, 0x1b, 0x9b, 0x6c, 0x8b, 0x4e, 0x66, 0x8f, 0xdc, 0x50, 0x88, 0x1d, 0x82, 0xc6, 0x9c, 0x4b, 0x64, 0xaa, 0x81, 0x77, 0x42, 0x3b, 0xc1, 0x84, 0x50, 0xe, 0xeb, 0x42, 0xc6, 0x5b, 0x67, 0x59, 0x35, 0xf8, 0xbc, 0x45, 0x64, 0xed, 0xb7, 0xd0, 0xd7, 0x83, 0x25, 0x2, 0x0, 0xfa, 0xc, 0xc6, 0x4d, 0x76, 0x73, 0x28, 0xc1, 0x29, 0xf2, 0xeb, 0x46, 0xa2, 0x7a, 0x47, 0x74, 0xd6, 0x3c, 0x1a, 0x80, 0x76, 0x41, 0x5, 0x99, 0x4c, 0x48, 0x5, 0x73, 0x4c, 0xdd, 0xa2, 0x47, 0x47, 0x58, 0xcb, 0xaf, 0xe5, 0x83, 0xea, 0x8e, 0x9d, 0x91, 0x5d, 0x5b, 0x53, 0x7d, 0xff, 0xc6, 0x72, 0x88, 0x47, 0xd6, 0xd7, 0xa1, 0xda, 0x74, 0x41, 0xd7, 0x82, 0x91, 0x4, 0xa7, 0xbd, 0x86, 0xba, 0x1c, 0xa0, 0xdf, 0xdb, 0x1, 0x16, 0xa2, 0xb3, 0x19, 0x1c, 0xde, 0x2, 0x88, 0x4c, 0x48, 0xe, 0x95, 0xb9, 0xec, 0x72, 0xd7, 0xaa, 0x71, 0x2e, 0xf7, 0xf2, 0x3c, 0xa5, 0x36, 0x14, 0xbb, 0x75, 0x2f, 0x5f, 0x9a, 0xb2, 0x2e, 0x2d, 0x11, 0x6a, 0x4a, 0x2e, 0x71, 0x24, 0x1f, 0xa4, 0x84, 0x1a, 0xb, 0x6b, 0x79, 0x3e, 0x78, 0x42, 0xf5, 0xf9, 0x63, 0xf9, 0x75, 0xda, 0x1b, 0xd1, 0x9, 0x80, 0xc8, 0x4, 0xe8, 0x1c, 0xe5, 0x68, 0xae, 0xa5, 0xfd, 0x74, 0xae, 0xed, 0x3c, 0xa6, 0xb2, 0xb3, 0xbf, 0x7a, 0x41, 0x84, 0x96, 0xba, 0x3d, 0x4c, 0xbd, 0x4f, 0x84, 0x27, 0xa4, 0x42, 0xa5, 0xaf, 0x95, 0xfe, 0x79, 0x6e, 0x89, 0xce, 0x21, 0xfa, 0xf9, 0xae, 0xe8, 0xdc, 0xee, 0xd8, 0xd, 0x0, 0x40, 0x64, 0x42, 0x2, 0xa8, 0xc, 0x9e, 0xc9, 0x5e, 0xb6, 0x11, 0x96, 0xa6, 0x16, 0x69, 0x4a, 0x8b, 0xd5, 0x8d, 0xf8, 0x5c, 0xef, 0x8, 0xcf, 0x21, 0x33, 0x40, 0x0, 0x43, 0xb0, 0xb1, 0xc4, 0x9d, 0x7d, 0x42, 0xd7, 0x50, 0xfd, 0x7c, 0x5f, 0x71, 0x78, 0x53, 0xa5, 0xa1, 0xe6, 0xf1, 0x0, 0x20, 0x32, 0x61, 0x7a, 0x28, 0xa3, 0x7e, 0x23, 0xcd, 0xb2, 0x97, 0x66, 0xfa, 0x2d, 0x35, 0x61, 0xe9, 0x23, 0x3c, 0xd5, 0xb5, 0xb2, 0x44, 0xa7, 0x59, 0xe7, 0x46, 0xa6, 0x13, 0x52, 0xe0, 0xe1, 0x85, 0x7e, 0x6e, 0x32, 0xfa, 0xa5, 0xf4, 0xbf, 0xa6, 0xd3, 0x2e, 0x99, 0xc4, 0x99, 0xeb, 0x0, 0x88, 0x4c, 0x98, 0x18, 0x2a, 0x63, 0x70, 0xd9, 0xe0, 0xf7, 0x6a, 0xed, 0x78, 0xd6, 0x34, 0xe1, 0x4f, 0xa2, 0x53, 0xe4, 0x79, 0x37, 0xef, 0xb1, 0x50, 0x47, 0x14, 0xd2, 0xed, 0xe7, 0x62, 0x89, 0xcd, 0x37, 0xf2, 0xbc, 0xac, 0xa4, 0xcf, 0x60, 0xd8, 0x3e, 0x73, 0x1d, 0xc1, 0x9, 0x88, 0x4c, 0x80, 0x88, 0x51, 0x6b, 0x2f, 0x17, 0xd, 0x9c, 0xcc, 0x4a, 0x28, 0xbc, 0xec, 0x12, 0xe0, 0xfb, 0x76, 0xf3, 0x22, 0x38, 0x21, 0x35, 0xcc, 0x11, 0xab, 0x62, 0x5, 0x58, 0xb6, 0xe8, 0xec, 0x2b, 0xab, 0x6f, 0xb, 0xce, 0xca, 0x12, 0x9c, 0xd4, 0xe5, 0x4, 0x44, 0x26, 0xc0, 0xc8, 0x28, 0xe1, 0x73, 0x1b, 0xe8, 0x0, 0x94, 0x70, 0x3a, 0x45, 0x5c, 0x6, 0x63, 0xef, 0xe6, 0x35, 0xe5, 0x8b, 0x86, 0xa8, 0x57, 0x8, 0x30, 0x56, 0x80, 0xb5, 0xde, 0xb1, 0x35, 0x4a, 0x6c, 0xf6, 0xb9, 0x99, 0xa8, 0xd4, 0xd7, 0xa5, 0xfe, 0xbf, 0x3f, 0xc9, 0xb4, 0xb2, 0x9b, 0xf7, 0x1e, 0x42, 0x1e, 0xf1, 0xc, 0x86, 0xcf, 0x88, 0x4c, 0x48, 0x49, 0x60, 0x9a, 0xf3, 0x91, 0xaf, 0x68, 0xba, 0x4e, 0x4, 0xa7, 0xc9, 0x70, 0xde, 0xa, 0x1b, 0x86, 0x20, 0x8f, 0x3e, 0xbf, 0xbb, 0x99, 0xc8, 0x88, 0x4e, 0x95, 0xd9, 0x2f, 0x3a, 0xb6, 0x6d, 0x67, 0xfa, 0xda, 0x68, 0xb1, 0x59, 0x4d, 0xa4, 0x8d, 0xe, 0x71, 0x4e, 0x70, 0x9f, 0xf, 0xff, 0xfe, 0xd7, 0x3f, 0x9d, 0xef, 0xf9, 0x23, 0xcd, 0x4, 0x89, 0x8, 0x4c, 0x65, 0xd8, 0xde, 0x22, 0x30, 0x1, 0xa0, 0x63, 0xd1, 0xa9, 0x84, 0xd3, 0x6b, 0x7d, 0xa9, 0x19, 0x92, 0xb5, 0x74, 0x9b, 0xad, 0x9b, 0x6b, 0x5b, 0x97, 0x42, 0x30, 0xc7, 0xac, 0x7, 0x20, 0x32, 0x21, 0x29, 0x81, 0xf9, 0xa0, 0x9d, 0x80, 0x3a, 0xfe, 0xb4, 0xa6, 0xe9, 0x0, 0xa0, 0x27, 0x6a, 0x2d, 0x30, 0x95, 0xd0, 0xfc, 0x4d, 0x7, 0xb5, 0x4b, 0xe9, 0xae, 0x52, 0x45, 0xa9, 0xed, 0x5e, 0xd3, 0xea, 0x19, 0x43, 0xb5, 0xc1, 0x21, 0xfe, 0x44, 0x37, 0x1, 0x44, 0x26, 0xc4, 0xce, 0xb5, 0xa7, 0xc0, 0xac, 0xb5, 0xb8, 0x24, 0x7b, 0x9, 0x0, 0x43, 0xa3, 0xc4, 0xe5, 0x4a, 0x8b, 0xcd, 0xd7, 0x3a, 0xd8, 0xed, 0x42, 0x70, 0xaa, 0xcc, 0xe6, 0x37, 0x79, 0xaa, 0x5, 0x3c, 0x35, 0x91, 0x49, 0x26, 0x13, 0x10, 0x99, 0x10, 0x35, 0x97, 0xe2, 0xb7, 0xb3, 0x79, 0xab, 0x8d, 0xfb, 0x96, 0x26, 0x3, 0x80, 0x8, 0xc4, 0xd7, 0x55, 0xc7, 0x82, 0x73, 0xf9, 0x78, 0x7d, 0x8d, 0x50, 0xb8, 0x1d, 0x5a, 0x2a, 0x70, 0x44, 0x57, 0x0, 0x44, 0x26, 0xc4, 0x8a, 0x12, 0x97, 0x3e, 0xa7, 0xf8, 0xa8, 0x75, 0x52, 0x27, 0xc2, 0x2e, 0x46, 0x0, 0x88, 0x5f, 0x70, 0x5e, 0xb5, 0xb0, 0x55, 0x33, 0x2d, 0x34, 0xcf, 0x22, 0xba, 0xbf, 0x43, 0xe2, 0xb9, 0xe4, 0xf1, 0x3, 0x22, 0x13, 0x62, 0x44, 0x45, 0xc0, 0xd7, 0x9e, 0x2, 0xf3, 0x3d, 0x2, 0x13, 0x0, 0x26, 0x22, 0x38, 0x55, 0x56, 0x53, 0xad, 0xe1, 0x6c, 0x53, 0x56, 0xed, 0xd2, 0xd3, 0x3e, 0xe, 0x81, 0xcb, 0xf6, 0x16, 0x3c, 0x76, 0x40, 0x64, 0x42, 0x6c, 0x5c, 0x8b, 0x7b, 0xaa, 0x65, 0xab, 0xd, 0x35, 0x0, 0xc0, 0xd4, 0x58, 0xcb, 0xd3, 0xc, 0xcc, 0x49, 0x43, 0xb1, 0xb9, 0x90, 0xa7, 0x8d, 0x41, 0x63, 0x4f, 0x49, 0xbb, 0x96, 0x1, 0x20, 0x32, 0x1, 0x91, 0x9, 0x51, 0x61, 0x9f, 0xf9, 0x7b, 0x28, 0x23, 0xc0, 0x14, 0x39, 0x0, 0x4c, 0x9d, 0xaa, 0x85, 0xd8, 0x2c, 0x23, 0x10, 0x9a, 0xae, 0x82, 0xec, 0xc7, 0x3c, 0x62, 0x40, 0x64, 0x42, 0x4c, 0xb8, 0xce, 0x23, 0x57, 0xc2, 0x92, 0x29, 0x72, 0x0, 0x48, 0x51, 0x6c, 0xbe, 0x97, 0xb0, 0xf2, 0x6b, 0x6a, 0x9d, 0xe6, 0x98, 0x53, 0xe7, 0xae, 0xcf, 0x5a, 0xf2, 0x68, 0x1, 0x91, 0x9, 0xb1, 0xb0, 0x10, 0xf7, 0xf4, 0x8a, 0x2a, 0x13, 0xc2, 0x2e, 0x72, 0x0, 0x48, 0x11, 0xb5, 0xce, 0x3c, 0xf4, 0x20, 0x89, 0xb9, 0x47, 0x70, 0xde, 0x17, 0x2e, 0x5b, 0x4c, 0x19, 0x23, 0x40, 0x64, 0x42, 0x34, 0xb8, 0x6a, 0xc1, 0x55, 0x42, 0x1d, 0x4c, 0x0, 0x48, 0x1b, 0xfb, 0x50, 0x9, 0xdf, 0x19, 0x9b, 0x33, 0xf1, 0x2b, 0xf7, 0xd6, 0x7, 0xd5, 0x81, 0xd7, 0x8e, 0x10, 0x9a, 0x80, 0xc8, 0x84, 0x18, 0x58, 0x88, 0x3b, 0x8b, 0xc9, 0x46, 0x1f, 0x0, 0xc8, 0x5, 0x25, 0xde, 0x42, 0xea, 0xff, 0xfa, 0x6c, 0x98, 0xec, 0x3, 0xd7, 0xe7, 0x2b, 0x79, 0x94, 0x80, 0xc8, 0x84, 0xb1, 0xf9, 0xe8, 0x78, 0x7d, 0x2d, 0x1c, 0x15, 0x9, 0x0, 0x79, 0xa1, 0x6c, 0xde, 0x89, 0xa7, 0xd0, 0x54, 0x2, 0x73, 0x8c, 0x93, 0x81, 0xee, 0x1c, 0xaf, 0xb3, 0xf9, 0x7, 0x10, 0x99, 0x30, 0x2a, 0x33, 0x71, 0x4f, 0xa9, 0xac, 0x68, 0x26, 0x0, 0xc8, 0x90, 0x87, 0x0, 0xa1, 0xa9, 0xa6, 0xcd, 0x8b, 0x81, 0x3f, 0x5f, 0xe5, 0x78, 0xbd, 0xe4, 0x11, 0x2, 0x22, 0x13, 0xc6, 0xe4, 0x83, 0xe3, 0xf5, 0xb5, 0x90, 0xc5, 0x4, 0x0, 0x84, 0xa6, 0xcf, 0x1a, 0xcd, 0x8b, 0x11, 0x3e, 0xdb, 0x21, 0x1, 0x7c, 0x84, 0xd0, 0x4, 0x44, 0x26, 0x8c, 0x89, 0xcb, 0x0, 0x7d, 0xa6, 0x89, 0x0, 0x0, 0xa1, 0xf9, 0x3f, 0xa1, 0xe9, 0x62, 0x21, 0xf1, 0x65, 0x33, 0xdf, 0xf1, 0xf8, 0x0, 0x91, 0x9, 0x63, 0xa0, 0x8c, 0xe1, 0xa1, 0xa9, 0xf2, 0x5a, 0x9a, 0x1f, 0xbf, 0x6, 0x0, 0x90, 0x12, 0x2a, 0x63, 0xb8, 0xf4, 0x78, 0xdf, 0xd0, 0x3b, 0xcd, 0xef, 0x22, 0xfb, 0x3c, 0x80, 0xc8, 0x4, 0xf8, 0x1f, 0xae, 0xb5, 0x98, 0x1b, 0x9a, 0x8, 0x0, 0xe0, 0xff, 0x7c, 0x12, 0xf7, 0xb4, 0xf9, 0x87, 0x81, 0x3f, 0x93, 0xcb, 0x4e, 0x17, 0x42, 0x29, 0x23, 0x44, 0x26, 0x4d, 0x0, 0x23, 0xe0, 0xda, 0x79, 0x78, 0x47, 0x13, 0x1, 0x0, 0xfc, 0x1f, 0x25, 0x30, 0x5d, 0x1b, 0x21, 0x67, 0x32, 0xfc, 0x94, 0xb9, 0x4b, 0x68, 0x7e, 0xe4, 0xd1, 0x21, 0x32, 0x1, 0x86, 0xc6, 0x15, 0xdd, 0x56, 0x34, 0x11, 0x0, 0xc0, 0x4f, 0xac, 0xc5, 0x9d, 0xcd, 0x2c, 0x7, 0xfe, 0x4c, 0x5f, 0x1c, 0xaf, 0x33, 0x65, 0x8e, 0xc8, 0x4, 0x18, 0x9c, 0x43, 0xd1, 0xf6, 0x56, 0x38, 0xa3, 0x1c, 0x0, 0x60, 0x17, 0x65, 0x17, 0x5d, 0x99, 0xc3, 0xa1, 0xeb, 0x53, 0xba, 0x3e, 0x8f, 0xda, 0x65, 0xbe, 0xe0, 0xd1, 0x21, 0x32, 0x1, 0x62, 0x11, 0x99, 0x8, 0x4c, 0x0, 0x80, 0xfd, 0xb8, 0x32, 0x87, 0x43, 0xaf, 0x81, 0x54, 0xf6, 0x7a, 0xed, 0x78, 0xcf, 0x7, 0x1e, 0x1b, 0x22, 0x13, 0x60, 0x28, 0x5c, 0x47, 0xa0, 0x55, 0x34, 0x11, 0x0, 0xc0, 0x5e, 0x5c, 0x99, 0xc3, 0x31, 0x36, 0xda, 0xb8, 0x84, 0x6f, 0x29, 0xc3, 0xaf, 0x15, 0x5, 0x44, 0x26, 0x64, 0xa, 0xbb, 0xd, 0x1, 0x0, 0x9a, 0xe3, 0x3a, 0x5, 0x68, 0xe8, 0xb3, 0xcc, 0x95, 0xf0, 0xad, 0x1d, 0xef, 0xb9, 0xe0, 0xb1, 0x21, 0x32, 0x1, 0x0, 0x0, 0x60, 0xda, 0x22, 0x73, 0x8c, 0x40, 0x7e, 0xed, 0x78, 0x7d, 0x3e, 0x82, 0xf8, 0x5, 0x44, 0x26, 0x0, 0x0, 0x0, 0x4, 0x50, 0x47, 0xf8, 0x99, 0x5c, 0x27, 0xb4, 0x29, 0x81, 0x49, 0x39, 0x23, 0x44, 0x26, 0x0, 0x0, 0x0, 0x44, 0xcc, 0xf7, 0x48, 0x85, 0xef, 0xda, 0xf1, 0x9e, 0x33, 0x21, 0x9b, 0x89, 0xc8, 0x4, 0x0, 0x0, 0x80, 0x68, 0xa9, 0x23, 0xfd, 0x5c, 0x64, 0x33, 0x1, 0x91, 0x9, 0x18, 0x48, 0x0, 0x0, 0xe8, 0x9c, 0x4a, 0xdc, 0xd5, 0x41, 0xc8, 0x66, 0x22, 0x32, 0x1, 0x46, 0x15, 0x99, 0x5, 0x4d, 0x14, 0x1d, 0x25, 0x4d, 0x0, 0x0, 0x1e, 0xb8, 0x8e, 0xbe, 0x54, 0x2, 0x93, 0x9d, 0xe6, 0x88, 0x4c, 0x80, 0xd1, 0x40, 0x64, 0xc6, 0x5, 0x25, 0xa7, 0x0, 0xc0, 0x97, 0x4a, 0xfc, 0xb2, 0x99, 0xd8, 0x79, 0x44, 0x26, 0x40, 0xaf, 0x86, 0x8, 0x51, 0x33, 0xd, 0x4a, 0x9a, 0x0, 0x20, 0x2a, 0x62, 0x9f, 0x6e, 0x5e, 0x79, 0xbc, 0xe7, 0x9a, 0xc7, 0x88, 0xc8, 0x4, 0xe8, 0x8b, 0x7, 0x87, 0x1, 0x65, 0xcd, 0x4e, 0x3c, 0x70, 0x24, 0x1c, 0x40, 0x5c, 0xbc, 0x89, 0xfc, 0xf3, 0x55, 0xe2, 0xce, 0x66, 0xaa, 0xe0, 0x75, 0xce, 0xa3, 0x8c, 0x9a, 0x85, 0x74, 0x90, 0x71, 0x46, 0x64, 0xc2, 0x18, 0xc4, 0x58, 0x4c, 0x18, 0xf6, 0x3f, 0x7, 0x9e, 0x5, 0xc0, 0xb4, 0xa8, 0x22, 0xf8, 0xc, 0xbe, 0xd9, 0x4c, 0x12, 0xa, 0xf1, 0xa, 0x4c, 0xf5, 0x7c, 0xbe, 0xe9, 0xeb, 0x52, 0x1a, 0x16, 0xd4, 0x47, 0x64, 0xc2, 0x18, 0xdc, 0x3b, 0x5e, 0x7f, 0x47, 0x13, 0x45, 0x1, 0xe5, 0x46, 0x0, 0xe2, 0xa3, 0x3c, 0xf0, 0xda, 0x43, 0x44, 0x42, 0x77, 0xed, 0x78, 0xcf, 0x91, 0x30, 0x6d, 0x1e, 0x2b, 0xf6, 0xc, 0x56, 0x21, 0x4f, 0xeb, 0x68, 0x6f, 0x1e, 0xaf, 0x1f, 0x5a, 0x70, 0x22, 0x32, 0x21, 0x6a, 0x5c, 0x99, 0xcc, 0x92, 0x26, 0x1a, 0x9d, 0x99, 0x8e, 0x66, 0x1, 0x20, 0xbe, 0xb1, 0xd9, 0xd4, 0xb6, 0xe, 0xc9, 0xca, 0x43, 0xf4, 0xce, 0x85, 0x69, 0xf3, 0xd8, 0x98, 0x3b, 0x7c, 0xf0, 0x19, 0x22, 0x13, 0x62, 0xa7, 0x96, 0xc3, 0xa5, 0x8c, 0x66, 0xc2, 0xee, 0xc3, 0xb1, 0xb9, 0xa4, 0x9, 0x0, 0xa2, 0x43, 0xd9, 0xc5, 0xa3, 0x89, 0x88, 0xcc, 0x5a, 0x98, 0x36, 0x4f, 0xd1, 0xf6, 0x57, 0x88, 0x4c, 0x98, 0x2, 0xae, 0x8e, 0x4a, 0x74, 0x3b, 0x1e, 0x67, 0x42, 0x36, 0x19, 0x20, 0x46, 0x5c, 0xe3, 0xf2, 0x3e, 0xb2, 0xcf, 0x7b, 0xe5, 0x21, 0x7c, 0x95, 0xc0, 0xbc, 0xe1, 0xd1, 0x46, 0x63, 0xfb, 0xb, 0xc7, 0x7b, 0x3e, 0x21, 0x32, 0x61, 0xa, 0x7c, 0x71, 0xbc, 0xce, 0xae, 0xe6, 0x71, 0x50, 0x6, 0x86, 0x62, 0xc9, 0x0, 0x71, 0xe2, 0x5a, 0xaf, 0x5e, 0x45, 0xf8, 0x99, 0x4f, 0x3d, 0xc5, 0x33, 0x76, 0x27, 0x7e, 0xdb, 0x5f, 0x3f, 0x5e, 0x1b, 0x44, 0x26, 0x4c, 0x1, 0xd5, 0x51, 0xf, 0xad, 0xd7, 0x61, 0x67, 0xf3, 0x38, 0xa8, 0x8c, 0x2, 0x53, 0x57, 0x0, 0xf1, 0xa1, 0xc6, 0xe5, 0xdc, 0x21, 0x0, 0xea, 0x8, 0x3f, 0xb7, 0xca, 0x64, 0x2e, 0x3d, 0xde, 0xb7, 0x14, 0x66, 0xb0, 0xc6, 0xc4, 0x67, 0xd9, 0xc2, 0x2a, 0xf4, 0x8f, 0x22, 0x32, 0x61, 0x6c, 0xa1, 0x79, 0x8, 0x76, 0x37, 0xf, 0xcb, 0x5, 0xc2, 0x1e, 0x20, 0x5a, 0x5c, 0x2, 0xac, 0x8a, 0xf8, 0xb3, 0xaf, 0xc4, 0x6f, 0xbd, 0xe8, 0x35, 0x36, 0x68, 0x14, 0x7c, 0x96, 0x48, 0xa9, 0xfe, 0xb5, 0x46, 0x64, 0xc2, 0x94, 0x70, 0x4d, 0x99, 0x2f, 0x84, 0xd, 0x40, 0x43, 0x3a, 0xb0, 0x25, 0xcd, 0x0, 0x2f, 0x70, 0x24, 0x81, 0xbb, 0x4a, 0xa1, 0x73, 0x5c, 0x41, 0xf7, 0x97, 0xc8, 0x3f, 0xff, 0x7b, 0x71, 0xef, 0x36, 0x37, 0xeb, 0x33, 0x99, 0x4d, 0x19, 0xe, 0x25, 0xea, 0x7d, 0x36, 0x7a, 0xae, 0x9a, 0xfc, 0x71, 0x44, 0x26, 0x8c, 0x89, 0xca, 0x64, 0xd6, 0x8e, 0xf7, 0xb0, 0x4e, 0x67, 0x18, 0x23, 0x43, 0xbd, 0x3a, 0x38, 0xd4, 0x3f, 0xbe, 0x6a, 0x47, 0x44, 0x3f, 0x19, 0x87, 0x52, 0xe, 0x67, 0xf8, 0x6a, 0x9, 0x5c, 0x2b, 0x37, 0x2, 0xea, 0x33, 0x9e, 0x7b, 0xbc, 0xaf, 0x78, 0xbc, 0x6e, 0x11, 0x9a, 0x83, 0x5, 0x8f, 0x3e, 0x9b, 0xae, 0xd6, 0xd2, 0x30, 0x53, 0x8e, 0xc8, 0x84, 0xb1, 0x71, 0xed, 0x54, 0x5b, 0x8, 0xd9, 0xcc, 0x3e, 0xc1, 0xa0, 0x83, 0x4b, 0xdc, 0xdc, 0x5a, 0x63, 0x70, 0x81, 0xd0, 0x1c, 0x5, 0x57, 0xb0, 0xbd, 0x99, 0xc8, 0x7d, 0x28, 0xb1, 0x72, 0xe5, 0x19, 0xd8, 0xb0, 0xe3, 0xbc, 0x7f, 0x6e, 0x3d, 0xfc, 0xeb, 0x83, 0x67, 0x70, 0x80, 0xc8, 0x84, 0x68, 0x8d, 0x8e, 0x6b, 0xa, 0x5, 0xa7, 0xd6, 0x6f, 0x14, 0x8b, 0xc0, 0x84, 0x97, 0x2, 0xbc, 0x7d, 0x1, 0x8, 0x42, 0x73, 0xf8, 0xe7, 0x50, 0xb6, 0xc, 0xd6, 0x63, 0x42, 0x9, 0x16, 0x9f, 0xf5, 0x99, 0x25, 0xfd, 0xac, 0x57, 0x7c, 0xd7, 0xbf, 0x9e, 0x4a, 0x8b, 0x93, 0xa4, 0x10, 0x99, 0x30, 0x36, 0xf, 0x1e, 0x91, 0x6d, 0x29, 0x9c, 0x3e, 0xd3, 0x87, 0xc0, 0xbc, 0xf5, 0x34, 0x32, 0xf, 0x34, 0x57, 0x76, 0x9c, 0x39, 0x1c, 0xfc, 0x4b, 0x2, 0x14, 0xba, 0x1f, 0xa7, 0xae, 0xf5, 0x72, 0x2a, 0x50, 0xaf, 0x27, 0x76, 0x5f, 0x27, 0x9e, 0x9f, 0x99, 0x80, 0xa6, 0x3f, 0x81, 0xe9, 0xe3, 0x53, 0x55, 0xdf, 0x6a, 0x95, 0x25, 0x47, 0x64, 0x42, 0xc, 0x7c, 0xf2, 0x10, 0x32, 0xca, 0xd0, 0x16, 0x34, 0x55, 0x27, 0x28, 0x61, 0xf9, 0xcd, 0x53, 0x60, 0xfa, 0x14, 0x53, 0x86, 0xf4, 0x78, 0xe7, 0xf1, 0x9e, 0x12, 0xa1, 0x39, 0x88, 0x18, 0xe8, 0xbc, 0xac, 0x4c, 0x24, 0xc9, 0x5, 0x9f, 0x8d, 0x40, 0xb6, 0xd0, 0xa4, 0x9f, 0xd, 0x2b, 0x30, 0x95, 0xdd, 0x3f, 0x6f, 0xfb, 0x9f, 0x21, 0x32, 0x21, 0x16, 0x83, 0xe3, 0x32, 0x94, 0x9c, 0xa, 0xd1, 0xd, 0x21, 0xc2, 0x60, 0xdd, 0x85, 0x91, 0x81, 0x49, 0xe2, 0xbb, 0x53, 0x39, 0x24, 0x60, 0x81, 0x30, 0x94, 0x10, 0x98, 0x7b, 0x8c, 0xd1, 0x7a, 0xa2, 0xf7, 0xb7, 0xd5, 0x42, 0xd3, 0xb7, 0x2d, 0x8, 0x68, 0x86, 0x13, 0x98, 0xca, 0x27, 0xb7, 0x9a, 0x26, 0x47, 0x64, 0x42, 0x6c, 0xf8, 0x64, 0xcc, 0x7c, 0x4b, 0x2d, 0x40, 0x7b, 0x43, 0xbd, 0x16, 0xbf, 0x93, 0x3a, 0x20, 0xdd, 0xf1, 0xb8, 0xf6, 0x7c, 0xaf, 0x59, 0x7a, 0xb1, 0xa0, 0xd9, 0x3a, 0xc3, 0xa7, 0xe2, 0x83, 0x4f, 0x70, 0x1e, 0x3b, 0x55, 0x80, 0x9d, 0x99, 0x89, 0xdf, 0x46, 0x15, 0xd8, 0x3f, 0x46, 0xaf, 0x3, 0xc6, 0xe8, 0x7b, 0xe9, 0x68, 0x6, 0xb, 0x91, 0x9, 0x31, 0xe1, 0x93, 0x35, 0x3b, 0xc3, 0x99, 0x35, 0x36, 0x30, 0xbe, 0x6b, 0x9b, 0x10, 0x98, 0x20, 0xba, 0xf, 0xac, 0x3, 0xfb, 0x18, 0x41, 0x60, 0x37, 0x2, 0xf3, 0xd6, 0xe3, 0x7d, 0x4a, 0x60, 0xd6, 0x9, 0xdc, 0x6f, 0x88, 0xbd, 0x31, 0xe5, 0xb4, 0xc8, 0x9c, 0x87, 0xd9, 0xff, 0x90, 0x20, 0xf0, 0x54, 0x3a, 0x2c, 0xec, 0x8f, 0xc8, 0x84, 0xd8, 0xa2, 0x5a, 0x9f, 0xf2, 0x16, 0x21, 0x11, 0x19, 0xe, 0xeb, 0xc9, 0x28, 0xfb, 0xb6, 0x17, 0x2, 0x13, 0x9a, 0xa, 0x4d, 0x13, 0x4, 0xaa, 0xfe, 0x56, 0xd0, 0x74, 0xad, 0x4, 0xa6, 0x6b, 0xb6, 0x61, 0xeb, 0x69, 0x2b, 0x53, 0x14, 0x9a, 0x47, 0x81, 0x36, 0xd, 0xfb, 0xef, 0x2f, 0xca, 0x43, 0xc7, 0x3b, 0x22, 0x13, 0x26, 0x87, 0x6f, 0x79, 0xb, 0x84, 0xa6, 0x9b, 0x8b, 0x40, 0x87, 0x7f, 0x85, 0xc0, 0x84, 0xe, 0x1c, 0x8f, 0x71, 0x6c, 0x9c, 0x10, 0xd4, 0x8f, 0xc0, 0x34, 0x9b, 0x66, 0x52, 0x23, 0x34, 0xc0, 0x35, 0xb3, 0x33, 0xac, 0xd3, 0xec, 0x26, 0xe0, 0xeb, 0x5c, 0x60, 0x22, 0x32, 0x21, 0x66, 0xa7, 0xe6, 0xb3, 0xe0, 0x18, 0xa1, 0xb9, 0x9f, 0x52, 0x9e, 0x36, 0x63, 0x2c, 0x3, 0xdb, 0x9c, 0x4d, 0x3e, 0xd0, 0x55, 0xff, 0x30, 0xa5, 0x77, 0x6e, 0x84, 0xac, 0xa6, 0xf, 0x73, 0xf1, 0x5f, 0x2f, 0xad, 0x9e, 0x45, 0x9d, 0x68, 0x3b, 0x84, 0xa, 0xcd, 0x85, 0x16, 0x52, 0x25, 0x5d, 0xe8, 0xa7, 0xb1, 0x77, 0x23, 0x61, 0x4b, 0x57, 0x7a, 0x11, 0x98, 0x88, 0x4c, 0x88, 0x95, 0x6d, 0x80, 0xa1, 0xb9, 0x16, 0x32, 0x26, 0x86, 0x42, 0x1b, 0x97, 0x90, 0xc5, 0xf1, 0x4a, 0xcc, 0x9f, 0xf4, 0x65, 0x60, 0x20, 0x29, 0x9a, 0x64, 0xba, 0xe7, 0x42, 0x56, 0xd3, 0xc5, 0x85, 0xf8, 0x1f, 0x8a, 0xa0, 0x2, 0xc7, 0x4d, 0xe2, 0xed, 0xb1, 0xd6, 0x36, 0xc9, 0x77, 0x67, 0x73, 0xa1, 0x6d, 0xde, 0x85, 0x90, 0xd5, 0x5c, 0xe8, 0x4, 0xc3, 0x3c, 0xe0, 0x77, 0x7a, 0x13, 0x98, 0x88, 0x4c, 0x88, 0x19, 0x65, 0x48, 0x7d, 0x33, 0x27, 0xe6, 0x4c, 0xe5, 0x5c, 0xd, 0x8c, 0xc9, 0x1a, 0x85, 0x1a, 0x17, 0x25, 0xe6, 0xdf, 0x4a, 0x87, 0x8b, 0xbc, 0x21, 0x79, 0xd6, 0xba, 0xcf, 0x3c, 0x34, 0xe8, 0x9f, 0x64, 0x9c, 0xf6, 0x8b, 0xa3, 0x65, 0x40, 0xdb, 0xaf, 0x32, 0x69, 0x9b, 0x2a, 0x50, 0x68, 0x1a, 0x1, 0x9e, 0x6b, 0x1f, 0x33, 0x7d, 0x29, 0xc4, 0xf, 0x3e, 0xf4, 0x2d, 0x30, 0x11, 0x99, 0x10, 0x3b, 0x21, 0x65, 0x54, 0x16, 0xe2, 0x7f, 0x82, 0x4d, 0x4a, 0xe2, 0xf2, 0x42, 0x8b, 0xcb, 0xd0, 0x4c, 0x91, 0xc9, 0x16, 0xd4, 0x74, 0x33, 0x8, 0xc4, 0x4, 0x27, 0xa1, 0x25, 0x4e, 0x66, 0x96, 0x23, 0x2c, 0x32, 0x6f, 0xc3, 0x8b, 0x40, 0x41, 0xb4, 0x96, 0xfc, 0xd6, 0x4b, 0xab, 0xfe, 0xf5, 0x3a, 0xb0, 0x9f, 0x19, 0xb1, 0x95, 0xcb, 0x32, 0xd, 0x3b, 0xc1, 0x10, 0x22, 0xae, 0x7, 0x9b, 0xc1, 0x42, 0x64, 0x42, 0xec, 0x84, 0x44, 0x5a, 0x66, 0xc3, 0xc1, 0x45, 0x6, 0x51, 0xab, 0x72, 0xd4, 0x3f, 0x74, 0xf4, 0x1e, 0x92, 0xc1, 0x35, 0x9b, 0x6, 0x3a, 0x29, 0xb4, 0xb, 0xd9, 0x52, 0xb7, 0x70, 0x52, 0xb, 0xed, 0x14, 0x73, 0x14, 0x9b, 0x73, 0x79, 0x5e, 0x2f, 0xed, 0x3b, 0x6e, 0x73, 0x14, 0x98, 0xb6, 0xbd, 0x7a, 0xdb, 0xa0, 0x9f, 0x99, 0x76, 0xbe, 0x94, 0x34, 0x67, 0xb8, 0xda, 0x24, 0x18, 0xaa, 0x6, 0xe2, 0x1d, 0x91, 0x9, 0x8, 0x4d, 0x8b, 0xa5, 0xa4, 0x39, 0x6d, 0xb2, 0xd0, 0x51, 0xfa, 0x37, 0x69, 0xb6, 0xe1, 0x69, 0xa3, 0x8d, 0x4b, 0xe8, 0x9a, 0x2e, 0x97, 0x18, 0x65, 0x77, 0x67, 0xbe, 0x2, 0xe0, 0xb4, 0x45, 0xc0, 0x62, 0x8b, 0xcd, 0xd4, 0x67, 0x20, 0x4a, 0x69, 0x96, 0x61, 0xcb, 0x59, 0x60, 0xee, 0xfa, 0x80, 0x26, 0xfd, 0xec, 0x4c, 0xf7, 0xb1, 0x8b, 0x44, 0x2, 0x1a, 0x5b, 0x5c, 0x86, 0x26, 0x18, 0x8c, 0x6f, 0x3c, 0x91, 0x1, 0x13, 0xc, 0x88, 0x4c, 0x48, 0x55, 0x68, 0xce, 0x24, 0x8d, 0x69, 0x13, 0x73, 0xf2, 0xc7, 0xf, 0xfd, 0xb5, 0x89, 0x70, 0x36, 0xd9, 0x4b, 0xdf, 0xb3, 0x82, 0x77, 0x71, 0x45, 0xbc, 0x73, 0xba, 0x67, 0xd6, 0xa8, 0x71, 0xd9, 0x66, 0x6d, 0xef, 0x42, 0x7, 0x85, 0xa9, 0x9d, 0x1a, 0x74, 0x64, 0x9, 0xe9, 0xdb, 0x6, 0x63, 0xf7, 0x1c, 0x81, 0xf9, 0x4b, 0x3f, 0x3b, 0x91, 0xf0, 0xc, 0xdc, 0x91, 0x16, 0x57, 0x53, 0xe, 0x68, 0x6c, 0x3f, 0xd0, 0x44, 0x5c, 0xd6, 0xba, 0xed, 0x6, 0x5f, 0xd3, 0x8b, 0xc8, 0x84, 0x29, 0x46, 0xb3, 0x21, 0x98, 0x69, 0x93, 0x1b, 0x99, 0x4e, 0x66, 0x53, 0x7d, 0x4e, 0xb3, 0xce, 0xc6, 0x14, 0x1d, 0x6e, 0x9a, 0x2d, 0x54, 0xeb, 0x5a, 0x9b, 0x64, 0x2f, 0x6d, 0xee, 0x1d, 0xaf, 0xb3, 0xab, 0x13, 0x8c, 0x13, 0x3b, 0x97, 0xe6, 0x59, 0x92, 0x72, 0x27, 0xa0, 0x9a, 0x6a, 0x76, 0x73, 0xae, 0x3f, 0x7f, 0xd3, 0x25, 0x1, 0x66, 0xbd, 0xdc, 0x15, 0xdd, 0x6a, 0x6f, 0xc0, 0xfb, 0x56, 0xc2, 0xca, 0xb3, 0xed, 0xb, 0x68, 0xda, 0xda, 0xd5, 0xa1, 0x82, 0x94, 0xb3, 0x9d, 0xcf, 0xdb, 0xd4, 0x7, 0x8c, 0xb6, 0xc1, 0x13, 0x91, 0x9, 0x53, 0x8d, 0x66, 0x43, 0x1d, 0x99, 0xa9, 0x43, 0x67, 0xca, 0xa9, 0xc4, 0x64, 0x5c, 0x66, 0xfa, 0x33, 0xdd, 0x68, 0x7, 0x7b, 0xab, 0x7f, 0x2e, 0x5a, 0xfc, 0xcd, 0x4a, 0x8b, 0xcb, 0x36, 0x4e, 0xdf, 0xfe, 0x5b, 0x87, 0x28, 0x2c, 0x87, 0x4a, 0x56, 0x33, 0x6f, 0x8c, 0x43, 0x6b, 0x13, 0xd4, 0x1c, 0x59, 0x62, 0xc0, 0xee, 0x57, 0xb1, 0xa, 0x82, 0x23, 0x4b, 0x58, 0xfe, 0xd0, 0xe3, 0xb8, 0xa9, 0x80, 0x31, 0xe3, 0xb6, 0xa2, 0x2b, 0x1d, 0x64, 0x25, 0xcd, 0x36, 0x9f, 0xd9, 0x36, 0xb7, 0x8b, 0xe7, 0xd5, 0x35, 0xc5, 0x8e, 0x2f, 0xb8, 0x6c, 0x11, 0x6c, 0x6d, 0x3b, 0x8, 0xfc, 0x5a, 0xf3, 0x8a, 0xbe, 0xa, 0x13, 0xc4, 0x18, 0xe2, 0x26, 0xd9, 0xc9, 0x99, 0xbe, 0x2e, 0xb5, 0x23, 0xbc, 0xd3, 0x5f, 0xeb, 0x1, 0x1d, 0x92, 0xfa, 0xff, 0x8f, 0xf5, 0xd7, 0xb2, 0x63, 0xe3, 0x56, 0x69, 0x3, 0xdc, 0xa5, 0x93, 0x7a, 0xd0, 0x6d, 0x34, 0xf7, 0x10, 0x6, 0x8b, 0x96, 0xc6, 0x1f, 0xa6, 0x8f, 0x1a, 0x4b, 0xef, 0xe5, 0x39, 0x23, 0xdf, 0x26, 0x23, 0x59, 0x58, 0xfd, 0xca, 0xf4, 0x6f, 0x75, 0xdd, 0xeb, 0x3e, 0x56, 0x8f, 0x70, 0x7f, 0x85, 0x35, 0x86, 0x4b, 0xe9, 0x26, 0xe3, 0xfa, 0xa0, 0xc7, 0x2d, 0xd9, 0xcb, 0x30, 0x11, 0xf5, 0x56, 0x8b, 0xb2, 0x36, 0xb3, 0x29, 0x73, 0x2b, 0x48, 0x30, 0xfd, 0xeb, 0x6e, 0x20, 0xa1, 0x9f, 0x7c, 0x5f, 0x42, 0x64, 0xc2, 0x54, 0x31, 0x53, 0x4a, 0xca, 0xb8, 0x2c, 0x5b, 0x1a, 0x97, 0x4b, 0xed, 0xac, 0xb6, 0xfa, 0xba, 0xd3, 0x3f, 0xd7, 0x2d, 0xc, 0x47, 0xa1, 0x8d, 0xde, 0x1b, 0xeb, 0xe7, 0x59, 0x8f, 0xd1, 0x72, 0x1f, 0xe2, 0xd2, 0xe6, 0x93, 0xf8, 0x67, 0x29, 0x99, 0x3a, 0x7, 0xd3, 0x27, 0xdf, 0x6a, 0x81, 0xd8, 0xd5, 0xc6, 0x8b, 0x72, 0x27, 0xb0, 0x7c, 0xb0, 0xc6, 0xed, 0x77, 0x2b, 0xb8, 0x69, 0x3b, 0xe, 0x8e, 0x2c, 0x87, 0x7f, 0x6c, 0xfd, 0xdc, 0xc7, 0x18, 0x5e, 0xcb, 0xc8, 0xd9, 0xa6, 0x89, 0x63, 0x4a, 0xdd, 0x5d, 0x48, 0xfb, 0xa2, 0xff, 0xbb, 0xfd, 0x6b, 0x6b, 0x5, 0x33, 0x77, 0x56, 0x7f, 0x6b, 0xda, 0x9f, 0xd4, 0x18, 0xf8, 0x5d, 0xff, 0x1f, 0x85, 0x74, 0xbf, 0x5f, 0x60, 0xa9, 0x6d, 0x75, 0x34, 0x7d, 0x9, 0x91, 0x9, 0x53, 0x47, 0x9, 0xab, 0xcf, 0xd2, 0x7c, 0x53, 0xcc, 0xae, 0x30, 0x9c, 0xef, 0x11, 0xb3, 0xdb, 0x80, 0xdf, 0x1f, 0x9a, 0x8d, 0x36, 0x2a, 0x7d, 0x47, 0xdd, 0x26, 0xc2, 0x2f, 0xe9, 0x72, 0xd0, 0x40, 0x44, 0xad, 0x3b, 0x16, 0x9b, 0xb6, 0xf3, 0x2e, 0x1d, 0xfd, 0xb2, 0xa, 0xf8, 0x5b, 0x43, 0xae, 0x3, 0xed, 0x3b, 0x30, 0xcc, 0x2d, 0xe9, 0x70, 0xae, 0x6d, 0xe1, 0x85, 0x74, 0xb7, 0x81, 0x6c, 0x76, 0xa0, 0x4f, 0x6c, 0x3d, 0xc4, 0x5c, 0x9f, 0x89, 0x85, 0xdd, 0x31, 0xb6, 0x92, 0x8, 0xeb, 0x1e, 0x23, 0x32, 0x21, 0x5, 0xd4, 0xc0, 0x3a, 0x91, 0xe7, 0xac, 0x64, 0x1f, 0x4e, 0x2c, 0x36, 0x83, 0xba, 0xd6, 0x6, 0x75, 0x48, 0xa3, 0xa2, 0xa6, 0x40, 0xbf, 0x9, 0x99, 0x4a, 0x68, 0x2f, 0x36, 0x3f, 0xc, 0x38, 0xae, 0x62, 0x1b, 0xbf, 0x88, 0xcb, 0x7e, 0x7d, 0xc1, 0xa9, 0x6e, 0xdf, 0x2e, 0xc5, 0xe6, 0x4b, 0x2, 0x72, 0x6c, 0x3f, 0xa0, 0xb2, 0xb8, 0x9f, 0x25, 0xe2, 0x43, 0x35, 0xd8, 0xf8, 0x3, 0x29, 0x61, 0xea, 0x40, 0x9e, 0x4a, 0x9a, 0x27, 0xd9, 0x6c, 0xb4, 0xd0, 0xfb, 0x4d, 0x47, 0xed, 0x43, 0xdf, 0xa3, 0x59, 0xa2, 0xc0, 0xb4, 0x1e, 0xb4, 0x15, 0x9b, 0xaa, 0x1f, 0x99, 0x22, 0xdb, 0xf, 0x19, 0xdd, 0xf7, 0x5b, 0x7d, 0xef, 0x8, 0xcc, 0x61, 0xc4, 0xa6, 0xf2, 0x7, 0xcb, 0xc4, 0xfa, 0xd8, 0xd6, 0xba, 0xb7, 0x28, 0xb3, 0x97, 0x88, 0x4c, 0xc8, 0xc1, 0x98, 0xa7, 0x22, 0x36, 0x37, 0xfa, 0x3e, 0x7e, 0xd3, 0x2, 0x73, 0x33, 0xf2, 0xe7, 0x31, 0x3b, 0x16, 0xd9, 0xd8, 0x3, 0x5d, 0x39, 0xcb, 0xdf, 0xf4, 0xd7, 0x4d, 0xa2, 0xf7, 0x78, 0x6e, 0xdd, 0x23, 0xe3, 0x66, 0x78, 0xb1, 0xb9, 0xb2, 0xda, 0x7f, 0xaa, 0xe2, 0xfe, 0xc1, 0xa, 0x52, 0x26, 0x15, 0x9c, 0xfd, 0xd1, 0xd1, 0xe9, 0x19, 0x10, 0x90, 0x82, 0xd8, 0x1c, 0xe4, 0x8c, 0xd6, 0xe, 0x8d, 0xe2, 0x5a, 0x9e, 0x33, 0x96, 0xef, 0x23, 0x34, 0x28, 0x66, 0x57, 0xe7, 0x3e, 0x11, 0xff, 0x10, 0xb1, 0xb0, 0xff, 0x72, 0xa0, 0x1d, 0xb7, 0xd8, 0xbb, 0xd1, 0xc7, 0xea, 0x7b, 0x4b, 0xc, 0x4c, 0xc6, 0x89, 0x1e, 0x10, 0x96, 0xaf, 0xf5, 0x38, 0xb9, 0x12, 0xb2, 0xff, 0xb1, 0xf4, 0xb1, 0x13, 0x79, 0x2e, 0xed, 0x16, 0xfb, 0x78, 0x7f, 0xd8, 0x33, 0x2e, 0x26, 0x67, 0xa3, 0xfe, 0xf0, 0xe7, 0xbf, 0xfe, 0x5d, 0x7d, 0x2d, 0x5f, 0x78, 0xbd, 0xa2, 0x5f, 0x42, 0x42, 0x98, 0x7a, 0x76, 0xef, 0xa4, 0xfb, 0xd2, 0x41, 0x6d, 0x44, 0xa5, 0x1a, 0x67, 0xa6, 0x64, 0x46, 0x3d, 0xc1, 0x76, 0x2d, 0xe4, 0x79, 0x1d, 0x6c, 0x1d, 0xf9, 0x3d, 0xd8, 0x9f, 0x75, 0x57, 0x18, 0x20, 0x4, 0xe2, 0x63, 0x66, 0x8d, 0xd7, 0x99, 0xc4, 0xb9, 0x1e, 0xd8, 0x1e, 0xc3, 0x1b, 0xfa, 0xd1, 0xe4, 0x6c, 0x57, 0x19, 0x91, 0x4f, 0xa8, 0xf4, 0xf5, 0x65, 0xa, 0x82, 0xf2, 0xdf, 0xff, 0xfa, 0xa7, 0xb7, 0xc8, 0x4, 0xc8, 0x11, 0x65, 0x54, 0x8e, 0x7, 0x74, 0x60, 0x95, 0x25, 0xc2, 0xee, 0x10, 0x36, 0x0, 0x8d, 0x44, 0xa7, 0xba, 0xfa, 0x2c, 0x3, 0x73, 0x8, 0x53, 0xce, 0x66, 0xcb, 0x18, 0x4e, 0xb6, 0x7f, 0xa9, 0x7e, 0xf5, 0x46, 0xe, 0xef, 0x2c, 0xef, 0xb2, 0x2f, 0x99, 0x7e, 0x54, 0x4d, 0xad, 0xb1, 0x7c, 0x44, 0x26, 0xbb, 0xcb, 0x21, 0x67, 0x4c, 0xd4, 0xb8, 0xb2, 0xa2, 0xda, 0x42, 0xb, 0x4f, 0x23, 0x42, 0x65, 0xe7, 0x35, 0x9b, 0x7d, 0xe5, 0x8d, 0x6c, 0xa7, 0x73, 0xb7, 0xe7, 0xdf, 0x0, 0xa0, 0x9d, 0x63, 0x36, 0x63, 0x6e, 0xb5, 0x13, 0x30, 0x8a, 0x35, 0x76, 0xf7, 0x95, 0x23, 0x7a, 0x29, 0x90, 0x34, 0x81, 0xdf, 0xae, 0x6d, 0x50, 0x7c, 0xb7, 0x5e, 0xaf, 0x69, 0xfe, 0xac, 0xfa, 0xd7, 0x6e, 0xbf, 0x39, 0x7e, 0xa1, 0x1f, 0x95, 0xe, 0xbf, 0x60, 0xff, 0xdc, 0xa6, 0xd6, 0xe6, 0x24, 0xf9, 0xaf, 0x0, 0x3, 0x0, 0x58, 0xbf, 0x46, 0x22, 0x7, 0x65, 0x51, 0xc8, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; + + + + + (NSData *)parse_logo3x_png { + return [NSData dataWithBytes:parse_logo3x_png length:sizeof(parse_logo3x_png)]; + } + + const unsigned char twitter_icon_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x16, 0x0, 0x0, 0x0, 0x12, 0x8, 0x6, 0x0, 0x0, 0x0, 0x5f, 0x25, 0x2e, 0x2d, 0x0, 0x0, 0x0, 0x1, 0x73, 0x52, 0x47, 0x42, 0x0, 0xae, 0xce, 0x1c, 0xe9, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0x2e, 0x23, 0x0, 0x0, 0x2e, 0x23, 0x1, 0x78, 0xa5, 0x3f, 0x76, 0x0, 0x0, 0x1, 0xcb, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0xa, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0xa, 0x29, 0x2e, 0xcd, 0x3d, 0x0, 0x0, 0x2, 0x34, 0x49, 0x44, 0x41, 0x54, 0x38, 0x11, 0x8d, 0x93, 0xbd, 0x6b, 0x54, 0x41, 0x14, 0x47, 0xdf, 0x6e, 0x36, 0x51, 0x8b, 0xa0, 0x9d, 0x44, 0x8b, 0x10, 0xb4, 0x10, 0xac, 0x4, 0xb1, 0x52, 0x50, 0x10, 0x8b, 0x80, 0x76, 0x36, 0x16, 0xfe, 0x7, 0xda, 0x5a, 0x58, 0x8b, 0xad, 0x88, 0x20, 0x16, 0x82, 0x36, 0x36, 0x12, 0x10, 0x24, 0xda, 0x89, 0x48, 0x10, 0x92, 0x42, 0xc1, 0x2e, 0x5a, 0xaa, 0x85, 0x22, 0x2a, 0x4a, 0xd4, 0xe8, 0xee, 0xbe, 0x9c, 0x33, 0x6f, 0xee, 0x63, 0xb2, 0x1b, 0xd4, 0xb, 0xe7, 0xdd, 0x3b, 0x77, 0x66, 0x7e, 0xef, 0xce, 0x57, 0x55, 0x61, 0x75, 0x5d, 0x77, 0xb3, 0x9f, 0xd0, 0x6f, 0x65, 0x8c, 0x49, 0x7d, 0xf8, 0x39, 0xb8, 0xb, 0xef, 0xe0, 0x3b, 0x2c, 0xc3, 0xf9, 0x98, 0x43, 0x7c, 0x6, 0xe, 0xa4, 0x36, 0xc1, 0x7d, 0x38, 0x6e, 0x3, 0x3f, 0x5, 0xe9, 0x47, 0xa9, 0xb3, 0xc9, 0x85, 0xe8, 0x41, 0xfa, 0xbe, 0xc0, 0x56, 0xf6, 0x80, 0xe4, 0x4b, 0x58, 0x84, 0x6d, 0xa, 0xed, 0x86, 0x3e, 0xfc, 0x84, 0x13, 0x85, 0xd8, 0x24, 0xed, 0x2e, 0x74, 0x8a, 0xdc, 0x12, 0x6d, 0x6d, 0xd, 0xfa, 0x43, 0xc, 0xff, 0x1b, 0xfe, 0x80, 0xe6, 0xa, 0xae, 0xc2, 0x39, 0x85, 0x67, 0x21, 0x55, 0xd1, 0x8c, 0xab, 0x2f, 0xd3, 0xee, 0x15, 0x62, 0x29, 0x26, 0x77, 0x18, 0x14, 0x1a, 0x64, 0x41, 0xe3, 0x1c, 0xa6, 0xfc, 0x2f, 0xda, 0xda, 0x2b, 0x98, 0x4b, 0xf3, 0x9, 0x56, 0xcd, 0x60, 0x56, 0xae, 0xbd, 0x81, 0x8b, 0xb0, 0xb7, 0xf8, 0xc1, 0x31, 0x3b, 0xb0, 0x41, 0x26, 0x9, 0x13, 0xeb, 0xa3, 0x62, 0x75, 0xb6, 0xc7, 0x1c, 0xab, 0x3e, 0xb, 0x9a, 0x3, 0x5c, 0x5a, 0xd8, 0x57, 0x82, 0x27, 0x70, 0x5, 0x6e, 0xe4, 0x64, 0x2b, 0x98, 0x57, 0x68, 0x3a, 0xe6, 0x3c, 0x56, 0x94, 0x76, 0xaf, 0xc7, 0xc7, 0xaa, 0x76, 0xc0, 0x23, 0x98, 0x87, 0x1, 0xf4, 0xa1, 0x86, 0x9d, 0xe0, 0xbe, 0xa7, 0xbd, 0x57, 0xa1, 0xd3, 0x69, 0xb7, 0xbc, 0x22, 0x76, 0x4c, 0x69, 0x6b, 0xb9, 0x31, 0x74, 0xff, 0xd6, 0xe1, 0x16, 0x78, 0x13, 0xdc, 0x8a, 0x5e, 0x31, 0x61, 0x48, 0xce, 0x1f, 0x69, 0x5d, 0xf2, 0x9b, 0x6e, 0x8b, 0xc9, 0xe6, 0x5f, 0xed, 0xf, 0x56, 0xcd, 0x61, 0x13, 0xe, 0xfe, 0x44, 0x70, 0x1b, 0xa6, 0x60, 0x58, 0x88, 0xd2, 0xac, 0x3a, 0x4c, 0x9c, 0xc4, 0x5b, 0xc0, 0x98, 0x68, 0x1a, 0xd0, 0x54, 0x1d, 0x7d, 0xcb, 0xe6, 0xb0, 0x66, 0x25, 0x4c, 0x9e, 0x86, 0xa7, 0x10, 0xe6, 0x1, 0xb5, 0x7b, 0xf9, 0x8f, 0x38, 0xe, 0xfc, 0x3d, 0xe3, 0x76, 0x25, 0x55, 0xdf, 0x1, 0x8d, 0xb8, 0xfc, 0x33, 0xc4, 0x37, 0xc1, 0x3b, 0xaa, 0xfd, 0xaf, 0xf8, 0x7a, 0x33, 0xbc, 0xbe, 0x96, 0x45, 0x9b, 0xd7, 0x4b, 0x32, 0x84, 0x4f, 0x12, 0x7f, 0x0, 0x85, 0xbd, 0x1d, 0x9b, 0x84, 0xf3, 0xd, 0x18, 0x5d, 0x45, 0x54, 0xfb, 0x8d, 0xf1, 0xb3, 0x6d, 0xb5, 0x6, 0x1a, 0xc9, 0x74, 0xd4, 0xf8, 0x3b, 0xd0, 0x5a, 0xf9, 0x10, 0x48, 0x8e, 0x8a, 0xda, 0x8e, 0x6a, 0x2f, 0x64, 0x9d, 0xf6, 0x61, 0x25, 0x51, 0x6, 0xb4, 0x9, 0xe2, 0x4b, 0xf0, 0x2, 0x3e, 0x43, 0x3c, 0xad, 0x52, 0xd4, 0xb4, 0xab, 0x89, 0x97, 0xb6, 0x90, 0xaa, 0x2b, 0xa, 0x8c, 0xf6, 0x98, 0x67, 0x92, 0xcf, 0xf7, 0x35, 0x68, 0xb1, 0x5c, 0xc5, 0x15, 0xf4, 0x31, 0x44, 0xee, 0x21, 0x71, 0x6c, 0x65, 0xdc, 0x8c, 0x46, 0x8f, 0x8e, 0x3d, 0xb0, 0xf, 0xf6, 0xc3, 0x69, 0xb8, 0x7, 0x3f, 0x40, 0x73, 0xaf, 0x15, 0x51, 0x4c, 0x14, 0xf, 0xbb, 0x1e, 0x15, 0x91, 0x68, 0xe, 0x2c, 0x12, 0x7a, 0x92, 0x87, 0x60, 0x1, 0xa2, 0xa, 0xc2, 0xbf, 0xda, 0x33, 0x7a, 0x4f, 0x85, 0x6, 0xf1, 0xb8, 0x28, 0x9d, 0x71, 0x68, 0xfa, 0xa3, 0xe0, 0x84, 0x23, 0xe0, 0x9, 0xcf, 0x80, 0xaf, 0xee, 0x23, 0xbc, 0x85, 0x15, 0x58, 0xe4, 0x1, 0x3d, 0xc7, 0x5b, 0x90, 0x4b, 0xf7, 0x89, 0x8f, 0x3e, 0x6b, 0xbb, 0xab, 0xd, 0x23, 0x5c, 0xa6, 0xb2, 0xce, 0x6d, 0xd4, 0xea, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; + + + + + (NSData *)twitter_icon_png { + return [NSData dataWithBytes:twitter_icon_png length:sizeof(twitter_icon_png)]; + } + + const unsigned char twitter_icon2x_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x2c, 0x0, 0x0, 0x0, 0x24, 0x8, 0x6, 0x0, 0x0, 0x0, 0xf2, 0xd7, 0xd8, 0x6c, 0x0, 0x0, 0x0, 0x1, 0x73, 0x52, 0x47, 0x42, 0x0, 0xae, 0xce, 0x1c, 0xe9, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0x2e, 0x23, 0x0, 0x0, 0x2e, 0x23, 0x1, 0x78, 0xa5, 0x3f, 0x76, 0x0, 0x0, 0x1, 0xcb, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0xa, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0xa, 0x29, 0x2e, 0xcd, 0x3d, 0x0, 0x0, 0x5, 0xbd, 0x49, 0x44, 0x41, 0x54, 0x58, 0x9, 0xc5, 0x98, 0x5b, 0xa8, 0x95, 0x45, 0x14, 0xc7, 0xdd, 0x9e, 0xa3, 0x42, 0x56, 0x50, 0x91, 0x5, 0x86, 0x9c, 0xae, 0x44, 0x50, 0x68, 0x46, 0xd1, 0x85, 0x12, 0x7a, 0x28, 0x22, 0x88, 0xa0, 0x22, 0x2, 0xe9, 0x25, 0x90, 0x82, 0xea, 0x21, 0xe8, 0xf6, 0x90, 0xd1, 0x4b, 0x29, 0xbd, 0x56, 0x4, 0x81, 0x51, 0x50, 0xd4, 0x93, 0x2f, 0x85, 0x74, 0x21, 0x3a, 0xa6, 0x60, 0x54, 0x90, 0x12, 0x89, 0x91, 0xfa, 0x90, 0x5d, 0xf5, 0xa1, 0x9b, 0x78, 0x3d, 0xbb, 0xdf, 0x6f, 0xed, 0x59, 0xdf, 0xf9, 0xbe, 0x7d, 0xf6, 0xf6, 0xec, 0xbd, 0xf, 0xda, 0x82, 0xff, 0x59, 0x6b, 0xd6, 0xcc, 0xac, 0xf9, 0xcf, 0xcc, 0x9a, 0xd9, 0xf3, 0x9d, 0x79, 0xf3, 0x90, 0x76, 0xbb, 0xdd, 0x52, 0x2b, 0xd8, 0xf3, 0x3b, 0xd6, 0xdc, 0xff, 0xd6, 0x63, 0x61, 0x4f, 0x80, 0xe7, 0xc1, 0x24, 0xf8, 0x19, 0x1c, 0x7, 0x3f, 0x81, 0xcf, 0xc0, 0x33, 0xe0, 0x82, 0x1c, 0x11, 0x7b, 0x1, 0x18, 0xcf, 0xb2, 0x9a, 0xf2, 0x32, 0xd0, 0xd2, 0x8, 0xb2, 0xe8, 0xd3, 0xc0, 0xe9, 0xa5, 0x72, 0xac, 0xde, 0x78, 0x14, 0x9b, 0x58, 0x55, 0xc, 0x6c, 0x89, 0x1e, 0x4, 0x75, 0x99, 0xaa, 0x17, 0xb0, 0xff, 0x6, 0x4f, 0x74, 0x8f, 0x85, 0x6f, 0x5, 0xf8, 0x10, 0x3c, 0x1b, 0x75, 0x18, 0x31, 0x13, 0xf4, 0x23, 0x60, 0x5b, 0x76, 0x48, 0x7f, 0x96, 0x87, 0xd1, 0xf4, 0x8d, 0x5d, 0x42, 0xb7, 0xc0, 0x46, 0x90, 0x72, 0x4, 0x43, 0x1c, 0x3, 0x12, 0x56, 0xa7, 0xf, 0x33, 0xe4, 0x2d, 0xfe, 0xde, 0x8, 0xd6, 0x82, 0xcd, 0x40, 0x39, 0x4, 0xce, 0x4b, 0xc2, 0xb9, 0xc2, 0x9b, 0xa2, 0xaa, 0xdd, 0x7e, 0x27, 0xc9, 0x51, 0x6e, 0x6c, 0x4b, 0xfa, 0x67, 0xd3, 0xf4, 0xcb, 0x98, 0x6f, 0x96, 0x98, 0xe, 0x98, 0x24, 0x25, 0xda, 0xb, 0xd6, 0x8b, 0x5e, 0x72, 0x7b, 0x63, 0x4c, 0x5a, 0x2c, 0x1, 0x7f, 0xd4, 0x5a, 0x7e, 0x80, 0xbd, 0xc0, 0x46, 0xe8, 0x85, 0x8d, 0xc6, 0xb3, 0x14, 0x68, 0x9f, 0x3b, 0x76, 0x7f, 0x89, 0xe7, 0xa, 0xf6, 0x22, 0xd8, 0xcf, 0x97, 0xc4, 0xd5, 0x7f, 0x82, 0x7b, 0xa, 0x8f, 0x55, 0xd8, 0xf, 0xe4, 0x1, 0x73, 0xb9, 0xcf, 0x2e, 0x5c, 0x8e, 0xa0, 0xef, 0x0, 0x5b, 0x69, 0xb0, 0xb4, 0xd5, 0x6a, 0x39, 0xe0, 0x98, 0x28, 0xf5, 0x7d, 0x15, 0x6d, 0x68, 0xde, 0x3a, 0x56, 0x1a, 0x3c, 0xd9, 0xb7, 0xe1, 0x9, 0x2a, 0x88, 0x21, 0x27, 0x77, 0xc8, 0xf1, 0x3e, 0x5, 0x57, 0xe2, 0xdb, 0x89, 0xfe, 0x8, 0xec, 0x5, 0xb1, 0x8a, 0x57, 0xe3, 0xc, 0x99, 0x42, 0x30, 0xe, 0x97, 0xe2, 0x7e, 0xf4, 0xbd, 0xd1, 0xa8, 0xd3, 0x6e, 0x9c, 0x72, 0x5f, 0xe2, 0x59, 0x87, 0xbe, 0x16, 0x28, 0xc6, 0xf2, 0x36, 0xe8, 0xb7, 0x9a, 0x3d, 0xfd, 0x1d, 0xa, 0x55, 0x3f, 0xe3, 0x28, 0x77, 0x26, 0xf, 0xb7, 0xfd, 0x22, 0xf0, 0xaf, 0x5e, 0xc4, 0x1, 0x14, 0x57, 0x36, 0xe5, 0x5d, 0x8c, 0x89, 0xec, 0x80, 0xed, 0x8a, 0x4b, 0x3e, 0x72, 0xb5, 0xe6, 0xcf, 0x74, 0x78, 0x94, 0x3a, 0xe5, 0x28, 0xe8, 0x49, 0xaa, 0xdb, 0x5f, 0x48, 0xd6, 0xdb, 0x66, 0x3e, 0xbb, 0x78, 0x91, 0xc3, 0xe8, 0xce, 0x99, 0xc2, 0xf0, 0xde, 0xfb, 0x1e, 0x28, 0x39, 0x48, 0xda, 0xd9, 0xd1, 0x6b, 0xe7, 0x45, 0xb0, 0x34, 0x9, 0xaa, 0x29, 0xcf, 0x7, 0xb1, 0xf2, 0xe8, 0xc8, 0x77, 0xf4, 0x3a, 0xa0, 0xc, 0x9c, 0xbf, 0x5d, 0x84, 0x73, 0xd1, 0xf6, 0x11, 0xe3, 0xa6, 0x32, 0x4e, 0x90, 0x75, 0xb0, 0x31, 0xf2, 0xee, 0x28, 0xce, 0x4d, 0x56, 0x20, 0x53, 0x1d, 0x25, 0x97, 0x98, 0x91, 0x39, 0x65, 0xbd, 0x77, 0xf4, 0xd3, 0xc0, 0x89, 0x79, 0xf5, 0xdc, 0x6, 0x16, 0xd3, 0x77, 0xca, 0xbc, 0x5, 0xc7, 0x81, 0xf9, 0xaf, 0xe4, 0xd9, 0x30, 0x48, 0x63, 0x17, 0x3a, 0xd5, 0x33, 0xff, 0xd2, 0xb7, 0x5d, 0xf3, 0x1e, 0x2f, 0xf6, 0x1b, 0xf8, 0xbf, 0x20, 0xc6, 0x22, 0x74, 0x9c, 0xd, 0x3, 0x67, 0xc3, 0xd7, 0xb1, 0x1d, 0xd0, 0x55, 0xa, 0xd2, 0x19, 0x84, 0xe, 0xde, 0x18, 0xfa, 0x24, 0x7e, 0x6, 0x58, 0xd, 0x9c, 0xe0, 0xe, 0xea, 0xde, 0x6, 0x6b, 0xc0, 0xd, 0x60, 0x2, 0x9f, 0xf2, 0x4b, 0x47, 0xcd, 0x23, 0x44, 0x83, 0x48, 0x71, 0xf, 0xac, 0xf2, 0x86, 0xca, 0x83, 0x1c, 0x5b, 0x5a, 0xad, 0x0, 0x3, 0x3e, 0x7, 0x94, 0x13, 0x1d, 0x14, 0xeb, 0xdc, 0xea, 0x4c, 0x15, 0xdb, 0xa7, 0x78, 0xd, 0xed, 0x2, 0x7b, 0x8b, 0xa3, 0x9e, 0x93, 0xc3, 0xd8, 0xa6, 0xa5, 0xb2, 0xd6, 0xa9, 0xa1, 0x3b, 0xb9, 0x8b, 0x3d, 0xee, 0xa, 0x20, 0x4b, 0x8a, 0xfd, 0x2, 0xb6, 0xd7, 0xdb, 0xe3, 0xc0, 0x6d, 0xa9, 0xb6, 0x16, 0x3b, 0xc5, 0xe, 0xb, 0xca, 0xca, 0xd9, 0xc6, 0x95, 0xd7, 0x67, 0xac, 0x33, 0xb1, 0x45, 0xe4, 0x13, 0x65, 0xcd, 0xb9, 0xc8, 0xfe, 0xee, 0xce, 0x49, 0xe8, 0xa, 0x2a, 0xbe, 0x63, 0xd0, 0x57, 0xd0, 0x5b, 0xc1, 0x16, 0xe0, 0xf5, 0x15, 0xa9, 0x81, 0xbf, 0x31, 0x72, 0x21, 0x4b, 0x75, 0x4c, 0xc8, 0xd9, 0x7b, 0xe, 0x6c, 0x2b, 0x9c, 0x84, 0xf9, 0x8c, 0x1a, 0x5c, 0xba, 0xc6, 0xc8, 0xce, 0xfb, 0xba, 0x23, 0x44, 0x5, 0x8d, 0x2f, 0xa4, 0x62, 0x17, 0xc8, 0xa5, 0x3f, 0x8c, 0x9d, 0xf9, 0xd3, 0xdd, 0xe7, 0x64, 0x97, 0x3d, 0x53, 0x2e, 0xa4, 0x79, 0xbb, 0x92, 0x89, 0x6f, 0x87, 0x9f, 0xb, 0xe2, 0x42, 0x74, 0xb6, 0x9c, 0xc2, 0x1e, 0xec, 0x6f, 0x74, 0x20, 0x1e, 0xac, 0x45, 0x61, 0xfd, 0x3f, 0x7f, 0xf2, 0x12, 0x70, 0x75, 0xe5, 0xa5, 0xc4, 0x4e, 0x6b, 0xc4, 0x1d, 0xaa, 0x81, 0xbc, 0xdf, 0x51, 0x71, 0x6b, 0x64, 0xa7, 0xe2, 0x3a, 0x35, 0xaa, 0xa4, 0x45, 0x92, 0xfb, 0x96, 0x85, 0xf4, 0xee, 0x9f, 0x8f, 0xae, 0xf8, 0xb8, 0xf4, 0xb1, 0xd4, 0x68, 0xf3, 0xd7, 0xb4, 0x30, 0x15, 0x5c, 0xe5, 0xcc, 0x23, 0xcc, 0x69, 0x29, 0x41, 0xc3, 0x51, 0xb7, 0xa7, 0x5b, 0x8c, 0x6e, 0xd5, 0x89, 0x11, 0xe5, 0x93, 0x12, 0x29, 0xcf, 0x59, 0x14, 0x83, 0x3d, 0x3, 0x7b, 0xc2, 0xf, 0xe1, 0x79, 0xa8, 0x34, 0x92, 0xb4, 0x79, 0x3c, 0x43, 0xba, 0x82, 0xce, 0xa8, 0x9f, 0xa3, 0xc3, 0x95, 0xf4, 0xce, 0x77, 0x11, 0x3f, 0x2e, 0xb1, 0xaa, 0xd5, 0xb5, 0x1c, 0xec, 0x21, 0xe1, 0x9d, 0x2a, 0xe9, 0xcd, 0xf8, 0xee, 0x6, 0x76, 0xc8, 0x3c, 0x6e, 0x74, 0xc0, 0x5f, 0xc9, 0x49, 0x20, 0x9f, 0xbb, 0xfd, 0x39, 0xb1, 0x77, 0x96, 0x1d, 0xcc, 0x14, 0x89, 0x71, 0xab, 0xe5, 0xa6, 0x41, 0x92, 0xde, 0x48, 0xcd, 0x25, 0xc0, 0x5f, 0x32, 0xd3, 0xc2, 0x3c, 0x47, 0x9d, 0x52, 0xd9, 0x50, 0x46, 0xf3, 0x76, 0x68, 0xc, 0x3e, 0x23, 0x4f, 0x21, 0xe7, 0x9b, 0x61, 0x31, 0x30, 0x45, 0xee, 0x2, 0x8f, 0x81, 0x95, 0xc0, 0x99, 0xfa, 0x3, 0x41, 0x8c, 0x4e, 0x90, 0xba, 0x4d, 0xdd, 0x5c, 0xc5, 0xd5, 0xf5, 0x5a, 0xfd, 0x1, 0x5c, 0xc5, 0x18, 0x7e, 0xa5, 0x54, 0x63, 0x65, 0xf0, 0xbc, 0x77, 0xe3, 0x91, 0x52, 0x88, 0x1c, 0xa4, 0xd2, 0xfc, 0x59, 0xe, 0x7e, 0x5, 0xe7, 0x0, 0x25, 0x26, 0x97, 0x64, 0xc3, 0xd1, 0x35, 0xfb, 0x68, 0x35, 0xf7, 0x3f, 0xeb, 0xa, 0x59, 0x53, 0x74, 0xfa, 0xd, 0xd1, 0x2b, 0x2e, 0x33, 0x8a, 0x9, 0xa0, 0x57, 0x83, 0xba, 0xf4, 0x7c, 0x7, 0x74, 0x3d, 0x9, 0x7b, 0xb6, 0x21, 0xc8, 0x6c, 0x7e, 0xc7, 0xf1, 0x6d, 0xa2, 0x7c, 0x9d, 0xbc, 0xb0, 0x67, 0xec, 0x7e, 0xd6, 0xd5, 0x75, 0x6c, 0xb9, 0xe, 0x3a, 0xbc, 0x67, 0x4, 0xc4, 0xcf, 0xf3, 0x7c, 0x9f, 0xce, 0x36, 0xf8, 0x28, 0xf5, 0xc6, 0xce, 0xf8, 0x37, 0x97, 0xb1, 0xab, 0x9d, 0xaf, 0x93, 0xeb, 0x69, 0xd3, 0x39, 0xe, 0x22, 0x7a, 0x11, 0x98, 0x4, 0x6d, 0x56, 0x52, 0x22, 0xbe, 0xfc, 0x3d, 0x98, 0x6, 0x1f, 0x85, 0x58, 0xbf, 0x3e, 0xf9, 0x39, 0xb6, 0x7e, 0x68, 0xb2, 0x39, 0x3, 0x8, 0xc5, 0x77, 0x1b, 0x7a, 0x21, 0x78, 0xd, 0xf4, 0x92, 0x7e, 0x4, 0x6, 0xf5, 0x1b, 0x33, 0xc9, 0x4e, 0xd6, 0xc6, 0x1e, 0x28, 0x15, 0xb2, 0x7d, 0xa5, 0x9, 0x56, 0x7d, 0x6c, 0x62, 0x5f, 0x7, 0x36, 0x80, 0xdd, 0xe0, 0x77, 0x90, 0x3, 0xd, 0x4a, 0xae, 0xbb, 0x1d, 0x21, 0xe2, 0x9f, 0x23, 0xea, 0x3d, 0x20, 0xbe, 0xd8, 0xd1, 0xd5, 0x98, 0x15, 0x91, 0x61, 0xc, 0x2, 0x78, 0x7, 0x37, 0x5e, 0x6d, 0x94, 0x1f, 0x6, 0xe6, 0xb5, 0x32, 0x6a, 0x7a, 0x78, 0x65, 0x29, 0x7e, 0x95, 0x5f, 0x26, 0x27, 0xb4, 0xbf, 0x70, 0xb3, 0xb, 0xd, 0x25, 0x55, 0x47, 0x7e, 0x11, 0x37, 0xbe, 0x8a, 0x69, 0x73, 0x3e, 0x78, 0x19, 0xe4, 0xea, 0xe, 0x4b, 0x96, 0xae, 0x31, 0xc1, 0xec, 0xbf, 0x87, 0xf2, 0xa5, 0x32, 0x44, 0xf, 0x46, 0x76, 0xf6, 0xe9, 0x44, 0xb0, 0xcb, 0x9, 0xf8, 0x12, 0x38, 0x0, 0x52, 0x86, 0x25, 0x6b, 0x4a, 0x78, 0x75, 0xa9, 0x95, 0xcd, 0x20, 0xee, 0x77, 0xf4, 0x50, 0x64, 0xbd, 0xc6, 0x96, 0x41, 0xdc, 0x44, 0x3f, 0x0, 0xdc, 0x7e, 0x3f, 0x97, 0x26, 0xc0, 0x35, 0xe0, 0x56, 0x70, 0x3d, 0xc8, 0x77, 0x85, 0xaf, 0x38, 0xf3, 0x6c, 0x90, 0x83, 0x61, 0x1b, 0x7f, 0x56, 0xf3, 0x7d, 0x90, 0x57, 0xd5, 0x7a, 0x7e, 0x10, 0x9e, 0xc2, 0x1f, 0x2b, 0x8b, 0x6d, 0xcc, 0xc1, 0x5, 0xc2, 0xcb, 0x81, 0xff, 0x61, 0xfc, 0x7, 0xb8, 0x5d, 0xb9, 0x65, 0x98, 0x95, 0xb8, 0x3a, 0xae, 0xaa, 0xd2, 0x38, 0x40, 0xde, 0x78, 0x89, 0x52, 0x67, 0x3b, 0xaf, 0x3f, 0xe3, 0x64, 0x1f, 0xcc, 0xf6, 0x16, 0xe0, 0xe4, 0x43, 0xb0, 0x47, 0x3f, 0x60, 0x74, 0x36, 0x5f, 0x1f, 0x4, 0x5f, 0x81, 0xba, 0xf8, 0xf5, 0x2a, 0x59, 0xa1, 0x2d, 0x24, 0xe3, 0xd5, 0x2c, 0x71, 0xed, 0xee, 0x36, 0xb8, 0x1a, 0xb2, 0x8d, 0xd2, 0x7d, 0x35, 0xa2, 0x8d, 0xb3, 0x91, 0xfe, 0x81, 0x35, 0xc1, 0xaa, 0x17, 0x9b, 0x9d, 0x28, 0xdf, 0x2, 0x5e, 0x5, 0x3f, 0x82, 0x51, 0xc5, 0xbe, 0xde, 0xdf, 0xab, 0xea, 0x44, 0x28, 0x67, 0x5a, 0xd4, 0xdd, 0x43, 0xd9, 0x91, 0x8b, 0x4, 0x52, 0xfb, 0x94, 0xab, 0x1e, 0x1b, 0xf8, 0xcc, 0xdb, 0x15, 0xc0, 0x5c, 0xf6, 0x21, 0x74, 0x31, 0x38, 0x17, 0x9c, 0x5, 0xbc, 0x37, 0x6d, 0x6b, 0xde, 0xff, 0x5, 0x7e, 0x3, 0xbb, 0xc1, 0x76, 0xf0, 0x25, 0xd8, 0x41, 0x2c, 0x5f, 0x7b, 0x21, 0x85, 0xa8, 0x5f, 0xd2, 0x8d, 0xa7, 0x62, 0xd6, 0xf, 0xa3, 0xff, 0x3, 0xf7, 0x93, 0x7f, 0xd4, 0xd5, 0x86, 0x9a, 0x4d, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; + + + + + (NSData *)twitter_icon2x_png { + return [NSData dataWithBytes:twitter_icon2x_png length:sizeof(twitter_icon2x_png)]; + } + + const unsigned char twitter_icon3x_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x42, 0x0, 0x0, 0x0, 0x36, 0x8, 0x6, 0x0, 0x0, 0x0, 0x73, 0xe7, 0x4f, 0x3f, 0x0, 0x0, 0x0, 0x1, 0x73, 0x52, 0x47, 0x42, 0x0, 0xae, 0xce, 0x1c, 0xe9, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0x2e, 0x23, 0x0, 0x0, 0x2e, 0x23, 0x1, 0x78, 0xa5, 0x3f, 0x76, 0x0, 0x0, 0x1, 0xcb, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0xa, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0xa, 0x29, 0x2e, 0xcd, 0x3d, 0x0, 0x0, 0xb, 0x9, 0x49, 0x44, 0x41, 0x54, 0x68, 0x5, 0xd5, 0x9a, 0x7b, 0xa8, 0xe5, 0x55, 0x15, 0xc7, 0xe7, 0xce, 0x1d, 0xc7, 0xd1, 0x44, 0xcd, 0xde, 0x33, 0x15, 0xa9, 0x94, 0x56, 0x14, 0x64, 0x30, 0x44, 0xa1, 0x5d, 0x1a, 0x2c, 0x6d, 0xe8, 0x61, 0x94, 0x45, 0x30, 0x4a, 0x49, 0x52, 0x50, 0x4a, 0x18, 0x18, 0x64, 0xd0, 0x3, 0x26, 0x8, 0x89, 0xe8, 0x41, 0xfd, 0xa3, 0x21, 0x15, 0xa5, 0xff, 0x68, 0x62, 0x89, 0x77, 0xd4, 0x92, 0xc9, 0xc7, 0x58, 0x8, 0x9a, 0x64, 0xce, 0x4c, 0x83, 0x36, 0x39, 0x5a, 0x96, 0x8f, 0xd1, 0xd2, 0x79, 0xdc, 0xb9, 0x7d, 0x3e, 0xfb, 0xec, 0xf5, 0x73, 0xff, 0x7e, 0xe7, 0xf7, 0x3b, 0xf7, 0x9e, 0x39, 0xe7, 0xdc, 0x99, 0x16, 0x7c, 0xcf, 0x5a, 0x7b, 0xed, 0xb5, 0xd7, 0xde, 0x7b, 0xed, 0xb5, 0xf7, 0x6f, 0x9f, 0x73, 0x7e, 0x53, 0xcb, 0x1a, 0x34, 0x3f, 0x3f, 0x3f, 0x8d, 0x6a, 0x7e, 0x6a, 0x6a, 0xea, 0x40, 0xa3, 0x6a, 0x49, 0x8a, 0xf4, 0xbf, 0xdc, 0x8e, 0xa2, 0x7f, 0xca, 0xab, 0x29, 0xce, 0x80, 0x33, 0xc0, 0xa9, 0xe0, 0x64, 0xf0, 0x6a, 0xb0, 0x1b, 0x6c, 0x7, 0x3b, 0xc0, 0xdd, 0xe0, 0x16, 0xda, 0xdc, 0x3, 0x4f, 0x44, 0xbb, 0x15, 0x94, 0xf7, 0x17, 0xe5, 0x29, 0x64, 0xe7, 0xa6, 0xef, 0x52, 0x7f, 0x24, 0xe5, 0x3d, 0x61, 0xb7, 0x8c, 0x86, 0x1a, 0x56, 0x44, 0x39, 0x35, 0xaa, 0x14, 0x4b, 0x20, 0x94, 0x7d, 0x22, 0xbf, 0x1c, 0x5c, 0x6, 0xb6, 0x82, 0x1a, 0x1d, 0x80, 0x6a, 0x8a, 0x5e, 0xe1, 0x19, 0xd8, 0x2f, 0xc0, 0xbb, 0x62, 0xa8, 0xc8, 0x2b, 0xc1, 0x11, 0x22, 0x74, 0xc1, 0xd1, 0xad, 0x5, 0x5f, 0x7, 0x6b, 0x42, 0x67, 0x10, 0xd2, 0x2a, 0xc0, 0xa7, 0xc1, 0x9b, 0xc0, 0x31, 0x56, 0xc2, 0xfb, 0x1c, 0x54, 0x8d, 0xc6, 0x2c, 0xd8, 0x77, 0xb8, 0x44, 0x7e, 0x1f, 0xb8, 0x17, 0x24, 0xca, 0xf3, 0xde, 0x47, 0x61, 0x2f, 0xd8, 0xf, 0xc, 0xc4, 0x1c, 0x28, 0x75, 0x14, 0x13, 0x3d, 0xc7, 0xa7, 0x13, 0x5c, 0x15, 0xfe, 0x82, 0xab, 0x3, 0xa7, 0x83, 0xef, 0x2, 0xdb, 0x5f, 0x13, 0x75, 0x89, 0xa3, 0x48, 0x13, 0x86, 0xaf, 0x1, 0xf7, 0x81, 0x8d, 0x61, 0x80, 0xbc, 0x22, 0xe4, 0x49, 0x71, 0xfa, 0x48, 0xb, 0xa1, 0x7f, 0xe4, 0xb, 0xc1, 0x1e, 0x20, 0xc5, 0x44, 0x1d, 0xb4, 0x93, 0x6f, 0x45, 0xce, 0x10, 0x6d, 0x9f, 0x7, 0x41, 0xd7, 0x20, 0xbc, 0x12, 0x1c, 0xb, 0xce, 0x0, 0x97, 0x80, 0x9b, 0xc0, 0x6e, 0x20, 0x19, 0xd4, 0x37, 0xe7, 0x3e, 0xa7, 0xd3, 0x96, 0x40, 0x91, 0xb6, 0x5, 0x7c, 0x3, 0x8, 0xba, 0x20, 0x26, 0x8e, 0x62, 0x62, 0xc1, 0xc0, 0xf7, 0x94, 0xc8, 0x3, 0xba, 0x20, 0x3a, 0x87, 0xbb, 0xb2, 0x73, 0x39, 0x1b, 0x5a, 0x3, 0x40, 0x7d, 0x4d, 0x9f, 0x6d, 0x23, 0x88, 0xba, 0xba, 0x7, 0x6c, 0x6, 0xcf, 0x5a, 0x68, 0xd0, 0xa5, 0xb9, 0x4f, 0xb7, 0x4e, 0xa, 0x44, 0x35, 0x49, 0x14, 0xee, 0xb1, 0x20, 0x23, 0x76, 0xde, 0xa4, 0x83, 0x41, 0x1f, 0xa9, 0x7f, 0xf8, 0xbb, 0x41, 0xc, 0xf8, 0xf9, 0x61, 0x2, 0x40, 0xbb, 0x32, 0x20, 0x14, 0xd3, 0xf6, 0x71, 0xb, 0x95, 0xe4, 0x7c, 0xc, 0xae, 0x74, 0x3d, 0x38, 0x3a, 0xe6, 0x96, 0x38, 0x8a, 0x18, 0x88, 0x69, 0xf4, 0x0, 0x90, 0xfe, 0xd3, 0x63, 0x29, 0x7d, 0x2e, 0x8c, 0x6, 0xe8, 0xc6, 0x7a, 0x66, 0xe0, 0x2f, 0xfa, 0x3e, 0x6, 0xf9, 0x8e, 0xdc, 0xa7, 0x2b, 0x5a, 0x4e, 0x6c, 0x68, 0xb9, 0x8, 0xa2, 0xbe, 0xdc, 0x2e, 0xe5, 0x96, 0xf9, 0x15, 0xe5, 0xf2, 0x3c, 0x7a, 0xb, 0xe5, 0xf5, 0x6e, 0x8d, 0xa4, 0x84, 0x9f, 0x6, 0x9e, 0x6, 0x92, 0xd1, 0x2c, 0x53, 0xec, 0xb2, 0x32, 0x18, 0xd4, 0xd5, 0x9e, 0x30, 0x51, 0x37, 0x2c, 0xc7, 0x4f, 0xf4, 0x7d, 0x11, 0x72, 0x90, 0x7b, 0x5d, 0x1a, 0x3a, 0x0, 0x2d, 0x6d, 0xc2, 0x8f, 0xdc, 0x6c, 0xf8, 0x11, 0x58, 0xd, 0x5e, 0x7, 0xce, 0x7, 0xee, 0x80, 0xad, 0xe0, 0x23, 0x6, 0x22, 0x9e, 0x18, 0xeb, 0x90, 0x3d, 0x94, 0xa4, 0x48, 0xab, 0x2a, 0x18, 0x73, 0x73, 0x73, 0x3f, 0x41, 0x7f, 0x9c, 0x93, 0x85, 0x2f, 0x7, 0x55, 0x54, 0x87, 0xd, 0x40, 0xf6, 0x11, 0xd9, 0xe0, 0x61, 0x76, 0x27, 0x90, 0xa2, 0xbf, 0x71, 0x4, 0x21, 0x7c, 0xc4, 0x9c, 0x1e, 0xc6, 0xff, 0xcf, 0xc0, 0x2c, 0x78, 0x14, 0x4, 0xf5, 0x1e, 0xc, 0x94, 0x22, 0x10, 0x67, 0x45, 0xd, 0x3c, 0x1e, 0x51, 0xaa, 0xf6, 0x16, 0xfa, 0x2d, 0xc8, 0xef, 0x8c, 0x89, 0x23, 0xaf, 0x0, 0x6, 0x65, 0xe8, 0xc, 0xa1, 0xcd, 0xca, 0x1c, 0x90, 0xb3, 0x91, 0x63, 0xef, 0x46, 0x5f, 0x31, 0x89, 0x81, 0xbc, 0xd8, 0x2, 0x3, 0xed, 0xf0, 0x6f, 0x7d, 0x2c, 0x2e, 0x62, 0x45, 0xdf, 0x8f, 0xb9, 0x18, 0x84, 0x98, 0xc4, 0x73, 0xc8, 0xfb, 0xa2, 0x22, 0xf3, 0x79, 0xb8, 0xe7, 0x82, 0x37, 0x31, 0x6f, 0x9a, 0x6b, 0xc1, 0x8d, 0xb8, 0xf9, 0xa, 0x58, 0xe5, 0xd, 0xd, 0xa8, 0x37, 0x18, 0x8b, 0xe, 0x8, 0xb6, 0xf6, 0x19, 0xb7, 0x3b, 0x7d, 0xfa, 0xcc, 0xb7, 0x2f, 0xb3, 0x4c, 0x5e, 0xa3, 0x6c, 0x5f, 0xd3, 0x75, 0x15, 0x6, 0xd8, 0xea, 0x7b, 0x2e, 0xc3, 0xe6, 0x57, 0x80, 0x8b, 0x15, 0x68, 0xb3, 0xa2, 0xf7, 0xd1, 0x2b, 0x78, 0x91, 0x7a, 0x1c, 0x48, 0xee, 0xd3, 0x32, 0xca, 0xea, 0x8c, 0x68, 0xec, 0x5f, 0xcb, 0xb7, 0x83, 0xf7, 0xeb, 0x28, 0x88, 0x72, 0xda, 0x32, 0xf2, 0xd0, 0xb5, 0x71, 0xea, 0xab, 0x6d, 0x85, 0xfc, 0x73, 0x20, 0x99, 0xd, 0x65, 0x9f, 0x63, 0x93, 0x73, 0xe6, 0x94, 0x63, 0xff, 0x31, 0x7d, 0xc5, 0xd6, 0x4c, 0xbc, 0xc, 0xc4, 0xf1, 0x54, 0xfe, 0x1, 0x48, 0xee, 0xd5, 0xda, 0x40, 0x8a, 0x34, 0x2c, 0x1d, 0xba, 0xff, 0xae, 0x6, 0xd5, 0xb5, 0x36, 0x26, 0x8e, 0xce, 0x5b, 0xaa, 0x5b, 0x47, 0x1e, 0x59, 0x97, 0xaa, 0xd5, 0x2b, 0xc0, 0x8f, 0x2, 0x9b, 0x80, 0x34, 0x89, 0xf3, 0x21, 0xe6, 0x10, 0xe7, 0x84, 0xc1, 0xfe, 0x6a, 0x31, 0xc6, 0x5e, 0x10, 0x50, 0xb8, 0x72, 0x29, 0x15, 0x49, 0xf1, 0xa7, 0x90, 0xef, 0xca, 0x46, 0xb5, 0x81, 0xab, 0xa3, 0x3e, 0x52, 0x36, 0x52, 0xcc, 0xd4, 0xb6, 0xfd, 0xb9, 0xe0, 0x16, 0x3a, 0xf0, 0x26, 0xb7, 0x1e, 0xbc, 0x88, 0xb2, 0xf6, 0x73, 0xc0, 0xad, 0x63, 0x3a, 0x7a, 0x69, 0x32, 0x28, 0xbd, 0xcb, 0x4b, 0xfe, 0xf2, 0x83, 0xde, 0x73, 0xa2, 0xef, 0x2a, 0x8c, 0x6e, 0x9c, 0xe4, 0xb8, 0x23, 0x43, 0xbf, 0xcc, 0x78, 0xbe, 0xa9, 0x73, 0xc7, 0xe3, 0xf8, 0xa2, 0xa3, 0xe5, 0xe, 0x14, 0x65, 0xa4, 0xea, 0x6f, 0x72, 0x85, 0xe7, 0x82, 0x7b, 0xbf, 0x95, 0xb4, 0xcf, 0x6d, 0x62, 0xcf, 0x1d, 0x89, 0xe1, 0xc7, 0xc0, 0xd, 0xe0, 0x66, 0xea, 0x2e, 0x5, 0x6f, 0x7, 0x47, 0xe9, 0x80, 0x3e, 0xe, 0xd8, 0x29, 0xd8, 0x67, 0x7f, 0xa8, 0xe2, 0x2c, 0xb2, 0xf, 0xcb, 0x93, 0xa4, 0x58, 0x40, 0xfb, 0x78, 0xc0, 0xf, 0xc6, 0x75, 0x84, 0xe3, 0x51, 0xe, 0x8a, 0xd4, 0x88, 0xc, 0xb8, 0x95, 0x8a, 0x59, 0xf0, 0x5e, 0xa0, 0xa1, 0x13, 0x2c, 0x1d, 0x51, 0xac, 0x65, 0x87, 0x67, 0x42, 0x5a, 0xfd, 0x6c, 0xa7, 0xbf, 0x77, 0x64, 0x3c, 0xb, 0xff, 0x23, 0xf5, 0xbf, 0x97, 0x83, 0x7, 0xc1, 0x2e, 0x6, 0xb0, 0x1b, 0xa4, 0x20, 0xc3, 0xfd, 0xc6, 0xf8, 0x77, 0xf4, 0x92, 0x63, 0xe8, 0xeb, 0x2b, 0xd5, 0x8c, 0xef, 0x23, 0x7d, 0x99, 0xc4, 0x5d, 0x5f, 0xf0, 0x53, 0x20, 0x8c, 0x4e, 0x8e, 0x92, 0xfb, 0xf4, 0x3b, 0x18, 0xae, 0x3, 0x6, 0x61, 0x2f, 0x30, 0x7d, 0x3b, 0x7, 0x48, 0x5b, 0xaa, 0xab, 0xd4, 0x73, 0x82, 0x42, 0xa5, 0x9d, 0xce, 0x64, 0xc0, 0x96, 0x3d, 0x6, 0x76, 0xe0, 0x7f, 0x7, 0x7c, 0x27, 0x78, 0x34, 0xe3, 0x78, 0xb8, 0x14, 0x59, 0x99, 0xa, 0xd8, 0xe1, 0xba, 0xb7, 0x1d, 0x4b, 0x39, 0x55, 0xe6, 0x8f, 0x36, 0x7d, 0xa9, 0xcb, 0x72, 0xd9, 0xc4, 0xf9, 0x48, 0xb1, 0xf0, 0xbd, 0x52, 0x9b, 0xc2, 0x1a, 0x1c, 0x5c, 0xe, 0xbb, 0x44, 0x11, 0x98, 0x19, 0x6e, 0x95, 0xce, 0x60, 0x50, 0xd7, 0x24, 0x6d, 0x45, 0x4, 0x25, 0x5, 0xbc, 0x69, 0x94, 0xcb, 0x74, 0x97, 0xb2, 0xaa, 0xa3, 0x7a, 0x24, 0xb5, 0x13, 0x76, 0xf5, 0xd, 0xb2, 0xf3, 0x58, 0x4f, 0x70, 0x67, 0xe9, 0xaf, 0x76, 0x3e, 0xa0, 0xaf, 0x56, 0xd2, 0xc9, 0x9b, 0x1, 0x89, 0x30, 0xfe, 0x12, 0x82, 0xdf, 0xd5, 0x75, 0x64, 0x10, 0x3c, 0x47, 0xfa, 0xa2, 0x88, 0xbe, 0x8b, 0xb4, 0xf5, 0x80, 0x32, 0x0, 0xe, 0xc2, 0x80, 0x78, 0x2e, 0xb8, 0x22, 0xc2, 0x41, 0xa9, 0x93, 0x5c, 0xf9, 0x9e, 0x54, 0x7c, 0x96, 0xfd, 0x95, 0x72, 0x61, 0xe2, 0x98, 0xfb, 0x1a, 0x96, 0x3a, 0x64, 0xcd, 0x63, 0x1, 0xbd, 0x27, 0x3d, 0x53, 0xb6, 0x2f, 0xe5, 0x38, 0x4d, 0xd5, 0x9d, 0x49, 0xc3, 0x2b, 0xc0, 0xba, 0x6c, 0xf0, 0x49, 0xf8, 0xf, 0x80, 0x13, 0x98, 0x66, 0xb0, 0x31, 0xf0, 0x5c, 0x3d, 0x14, 0xf3, 0xa9, 0x61, 0x40, 0xdd, 0x66, 0xf2, 0xd8, 0x6, 0xfa, 0x6c, 0xf5, 0x4b, 0x7f, 0x31, 0x1, 0x23, 0x55, 0xc9, 0xd8, 0x57, 0xd4, 0xa6, 0x2f, 0x75, 0xc8, 0xda, 0x46, 0x5b, 0x7f, 0xda, 0x7b, 0x32, 0x37, 0xee, 0xb, 0x60, 0xba, 0x22, 0xd3, 0xc0, 0xc1, 0xb8, 0xa7, 0x3f, 0xd, 0xce, 0x65, 0xd0, 0xf7, 0xc2, 0x37, 0x83, 0x47, 0xc0, 0x76, 0xf0, 0x46, 0x30, 0x12, 0x95, 0x3, 0xcc, 0x8e, 0xd2, 0xef, 0x10, 0x2d, 0xfa, 0x91, 0xfa, 0x69, 0x69, 0x1c, 0x81, 0x78, 0x9c, 0xba, 0x27, 0x5a, 0xea, 0x93, 0xca, 0xd4, 0x8d, 0xe8, 0xfc, 0x15, 0xd9, 0x93, 0xde, 0x80, 0x78, 0x41, 0x12, 0x92, 0x29, 0x45, 0x6c, 0xe6, 0x7d, 0xd4, 0x86, 0xd3, 0x94, 0x96, 0x51, 0xa6, 0xe, 0xf1, 0x85, 0x83, 0xcd, 0x46, 0x51, 0x56, 0xee, 0xa2, 0x41, 0x36, 0x4d, 0x9f, 0x6d, 0xb6, 0xa5, 0x4d, 0x57, 0x1f, 0x85, 0x7e, 0x27, 0x72, 0x64, 0x44, 0x35, 0x8f, 0xa8, 0x77, 0x6b, 0x44, 0x20, 0x34, 0x14, 0xd2, 0x7f, 0x41, 0x3c, 0x62, 0xe2, 0x2e, 0x50, 0x6b, 0x5c, 0xe, 0xac, 0x29, 0x97, 0xe5, 0xe4, 0xed, 0x20, 0x3e, 0x4a, 0x1f, 0xa5, 0x5c, 0xba, 0xea, 0xd2, 0x17, 0x36, 0x8e, 0x39, 0xb6, 0xff, 0x36, 0xec, 0xdd, 0xe6, 0x52, 0xdf, 0x76, 0xd4, 0x28, 0x4d, 0x10, 0x23, 0x1f, 0x6f, 0x77, 0x6a, 0x5, 0xb9, 0x8f, 0xad, 0xf3, 0x50, 0x8b, 0x80, 0x20, 0xfe, 0xdf, 0x91, 0x13, 0x8e, 0x27, 0xd6, 0x9f, 0x1d, 0xbd, 0x99, 0x2d, 0x53, 0x2e, 0x49, 0xa5, 0xf7, 0x71, 0xb9, 0x74, 0x7d, 0x8f, 0xa5, 0x40, 0x84, 0x93, 0xa8, 0xcb, 0x55, 0x3d, 0x66, 0x5a, 0x86, 0x62, 0x31, 0x72, 0xd8, 0x6, 0xb7, 0x4d, 0xd9, 0xae, 0xd4, 0x2b, 0x97, 0x75, 0xa5, 0x1c, 0x76, 0x4d, 0x9b, 0x52, 0x9f, 0x65, 0xc7, 0x17, 0x2b, 0xef, 0x96, 0xb8, 0x3f, 0xeb, 0x3d, 0xf8, 0xfb, 0x3, 0x91, 0x95, 0x31, 0xd9, 0x59, 0x8c, 0x6f, 0xce, 0xd, 0x22, 0x8d, 0x72, 0xb1, 0xce, 0x4a, 0x67, 0x8b, 0x91, 0xeb, 0xad, 0x7b, 0x67, 0x48, 0xd9, 0x2e, 0xea, 0x43, 0x17, 0x5c, 0x7d, 0x29, 0x87, 0xdd, 0x20, 0x7d, 0x61, 0x13, 0x81, 0xf8, 0xb, 0xba, 0xad, 0x85, 0xbe, 0x4f, 0x4c, 0x1, 0xa0, 0x23, 0x6f, 0x96, 0x46, 0xca, 0x83, 0xd1, 0xcb, 0x94, 0x5b, 0xc2, 0x2f, 0x43, 0x3e, 0xf3, 0xab, 0x95, 0x47, 0xee, 0xa3, 0xae, 0xd5, 0xea, 0x33, 0x5c, 0x7a, 0x85, 0xab, 0x3e, 0x9d, 0xbb, 0xdd, 0xc2, 0xdc, 0xe2, 0xa0, 0x6c, 0xdd, 0xea, 0x91, 0x9, 0xda, 0xc7, 0x59, 0x71, 0x13, 0xf2, 0xc6, 0xec, 0xc0, 0xe7, 0x7e, 0x4, 0xa3, 0x35, 0x20, 0x5d, 0xab, 0x95, 0xdb, 0x1f, 0x2a, 0xe6, 0x58, 0x9d, 0xb0, 0xe7, 0x83, 0xfc, 0x36, 0xe0, 0x76, 0xf3, 0xcb, 0x56, 0x64, 0x89, 0xaa, 0x8a, 0xaa, 0x40, 0x68, 0x80, 0x61, 0x1c, 0x2c, 0xdf, 0xc0, 0xe2, 0xca, 0x6c, 0x65, 0x30, 0xfc, 0x6f, 0x50, 0x7, 0x76, 0xd0, 0x1a, 0x10, 0xf4, 0x87, 0x1b, 0xc5, 0xca, 0xdf, 0xc7, 0xc0, 0xee, 0x58, 0x68, 0x70, 0x55, 0x20, 0x34, 0x24, 0x18, 0x6e, 0x11, 0xef, 0xe1, 0x3a, 0xf9, 0x2c, 0xf8, 0xa1, 0x7a, 0x28, 0xae, 0xdf, 0x6, 0x64, 0xe0, 0xd9, 0x91, 0xac, 0xf, 0xfd, 0x87, 0x8b, 0xe6, 0x93, 0x4f, 0x9a, 0x65, 0x3e, 0xff, 0xec, 0x89, 0x69, 0xcb, 0x67, 0xb1, 0xce, 0x6a, 0x81, 0xb0, 0xaa, 0x8, 0x86, 0xbf, 0x1d, 0x7c, 0x1e, 0xd5, 0x45, 0x60, 0x17, 0xd0, 0xd6, 0x80, 0xd8, 0x41, 0x67, 0x56, 0x94, 0x67, 0x46, 0x29, 0xd3, 0xa6, 0x46, 0xd6, 0xb5, 0xd5, 0x87, 0x2e, 0xb8, 0x8d, 0x4a, 0xb9, 0x74, 0xd2, 0xa1, 0x77, 0x6c, 0x9e, 0x71, 0x8e, 0xd7, 0x73, 0xe1, 0x3a, 0xa0, 0x8f, 0x95, 0xcc, 0xa7, 0xef, 0x69, 0x61, 0x9d, 0x34, 0x68, 0x42, 0xee, 0xa7, 0xb4, 0xfa, 0x38, 0x79, 0x29, 0xb6, 0x9f, 0x1, 0xeb, 0xc1, 0x29, 0xe0, 0xc5, 0xa0, 0x2f, 0x88, 0xe8, 0xe, 0x17, 0x8a, 0xf3, 0xe1, 0x6a, 0xe6, 0xf0, 0x9, 0x7, 0xc5, 0x1c, 0xbc, 0x19, 0xb7, 0x9e, 0xf, 0xd6, 0x77, 0x6, 0x22, 0x37, 0xf6, 0x3b, 0x86, 0x93, 0xde, 0x9e, 0x6d, 0xd7, 0xc2, 0x75, 0xfc, 0x41, 0xe0, 0x55, 0x3c, 0xce, 0xd, 0xc4, 0xc3, 0x82, 0x9c, 0x8f, 0x8b, 0x67, 0xd6, 0xba, 0x8d, 0xcf, 0x61, 0xf2, 0xfe, 0xea, 0x5e, 0x2d, 0x2a, 0xba, 0x56, 0x8a, 0xc3, 0xb1, 0x56, 0x49, 0xc3, 0xf8, 0xbe, 0xee, 0xc4, 0xfd, 0xa1, 0x46, 0xa7, 0x5e, 0xbb, 0x25, 0x3, 0xe0, 0xa3, 0x55, 0x1a, 0x18, 0xc8, 0x9e, 0xc9, 0xd2, 0x7d, 0x32, 0xee, 0xf4, 0xa5, 0x27, 0xf7, 0x78, 0xa3, 0x41, 0xc8, 0x72, 0x1c, 0x9c, 0x9d, 0x83, 0x69, 0xd, 0x44, 0x61, 0xbd, 0x9, 0xf9, 0x69, 0x70, 0x62, 0xa1, 0xb, 0xb1, 0x75, 0xbf, 0xe5, 0xb1, 0xb4, 0xd6, 0x45, 0xc3, 0x9, 0x71, 0xe6, 0x9d, 0xb6, 0xb2, 0xd9, 0xe0, 0x7d, 0xe8, 0x7b, 0xf6, 0xc3, 0x78, 0x16, 0xcc, 0x6, 0xed, 0x5a, 0xf7, 0x39, 0xe, 0xe3, 0xe9, 0xe1, 0x21, 0xb9, 0x51, 0x43, 0xc8, 0xa8, 0x9a, 0x15, 0xd6, 0x75, 0x4e, 0x94, 0xb6, 0x9d, 0x75, 0x3a, 0x99, 0x4, 0x19, 0x7c, 0xfc, 0xba, 0x4d, 0xe3, 0x2, 0xf5, 0x53, 0xc6, 0xf1, 0xdb, 0xdc, 0x97, 0x7, 0xe7, 0x82, 0xd4, 0x99, 0xda, 0x38, 0xf7, 0xa6, 0x19, 0xbf, 0x4c, 0x5d, 0x8b, 0xa7, 0xf, 0x81, 0x48, 0x31, 0x3b, 0x5c, 0xf2, 0x9, 0x2f, 0x30, 0x1b, 0x27, 0x6c, 0x36, 0x3c, 0x4, 0x66, 0x18, 0xfb, 0xc3, 0xcc, 0x21, 0xb6, 0x38, 0xaa, 0xc1, 0xd4, 0x9a, 0x11, 0x36, 0xc9, 0x41, 0xd0, 0x91, 0x13, 0xfe, 0x2, 0xf8, 0x13, 0x30, 0x0, 0x46, 0x3e, 0x45, 0x39, 0xaf, 0x4, 0xc5, 0x43, 0x4a, 0x2e, 0xa6, 0xb, 0x64, 0x10, 0xa4, 0xaf, 0xe5, 0x20, 0xb8, 0x90, 0x8b, 0xca, 0x6, 0x1b, 0x75, 0x6, 0xc2, 0x4a, 0x1d, 0xe5, 0xa8, 0xee, 0xa4, 0xf8, 0x71, 0x60, 0x30, 0xec, 0x30, 0x5d, 0x5d, 0xa9, 0x77, 0x0, 0x91, 0x19, 0x9d, 0xd9, 0x85, 0xcd, 0x24, 0xa9, 0x7c, 0x72, 0x5d, 0xc9, 0x98, 0xae, 0xca, 0x9d, 0xc5, 0xb8, 0xc6, 0xd3, 0xb7, 0xab, 0xe, 0xd2, 0xde, 0x83, 0xbf, 0x6, 0x5c, 0xb, 0x4a, 0x72, 0xfb, 0xf8, 0x37, 0xa0, 0x7f, 0xa7, 0x19, 0xb8, 0xf8, 0x9b, 0x6d, 0xa9, 0xb8, 0xfd, 0x4a, 0xfe, 0x87, 0xf2, 0x12, 0x67, 0xd, 0x5f, 0xe8, 0x21, 0x70, 0x70, 0xc1, 0xc1, 0x71, 0x19, 0xc, 0xff, 0xd4, 0xf1, 0x85, 0xaf, 0xfb, 0x41, 0x1b, 0x2d, 0x55, 0x0, 0xec, 0x27, 0xfe, 0x2f, 0xfd, 0x7, 0xf2, 0x69, 0xa3, 0x4, 0x61, 0xa8, 0x74, 0xa6, 0xb3, 0x74, 0x80, 0xe6, 0xe, 0xbd, 0x68, 0x7d, 0x20, 0xe3, 0x6d, 0x70, 0xef, 0x17, 0x2b, 0xc1, 0x71, 0xc0, 0x2d, 0x57, 0x4b, 0x4d, 0xda, 0x92, 0xb5, 0x2f, 0x3c, 0x51, 0x2c, 0x63, 0xe3, 0xf6, 0x1b, 0x68, 0xa7, 0x4d, 0x7, 0x79, 0x71, 0xb2, 0x3f, 0xef, 0x38, 0x1f, 0xc5, 0xcf, 0xd, 0xf8, 0x4c, 0xfd, 0x36, 0x7d, 0x76, 0xb4, 0x1f, 0x4d, 0x6d, 0x67, 0x31, 0x89, 0xf0, 0x44, 0xd9, 0x3f, 0x77, 0x7d, 0x17, 0xe9, 0x97, 0x20, 0xc8, 0x2d, 0x33, 0xd6, 0xec, 0x28, 0xfe, 0x91, 0x8f, 0x4c, 0xd0, 0xff, 0x86, 0x62, 0x1c, 0x3, 0xcf, 0xbc, 0xb0, 0x1b, 0xb, 0xa7, 0x63, 0x3, 0xe1, 0x1b, 0xad, 0xd5, 0x3e, 0x44, 0x7e, 0x15, 0xf0, 0x25, 0xce, 0x78, 0x2b, 0xae, 0x2f, 0x8, 0xc5, 0x24, 0x52, 0x70, 0x2c, 0x37, 0x75, 0xb4, 0x1f, 0x14, 0x38, 0xaa, 0xd3, 0xab, 0x4d, 0xf1, 0x62, 0x98, 0xe7, 0xd1, 0xa7, 0x62, 0x52, 0xc8, 0xe9, 0x1c, 0x8b, 0xf2, 0xd8, 0x39, 0x1d, 0xa4, 0xf3, 0x1, 0xee, 0xaa, 0xc7, 0x23, 0x2a, 0xf5, 0x43, 0xf9, 0x4, 0xe0, 0x8b, 0x60, 0x7f, 0x3, 0x41, 0xfb, 0x87, 0x9c, 0xe0, 0xa0, 0xc9, 0x47, 0x9d, 0xbe, 0x9d, 0x78, 0x1c, 0x8c, 0xbe, 0xf4, 0xe6, 0x53, 0x2c, 0xc6, 0x31, 0x7a, 0x10, 0x70, 0x18, 0x2b, 0x9c, 0x26, 0x4a, 0x59, 0xee, 0x8a, 0xb, 0xe5, 0xbe, 0x74, 0x43, 0xf7, 0x5a, 0xf0, 0x39, 0xb0, 0x5, 0x4, 0xf9, 0xe4, 0x18, 0x6b, 0x10, 0x72, 0x40, 0xf5, 0xbf, 0xa7, 0x90, 0xb7, 0x51, 0x7e, 0xcf, 0x58, 0x83, 0x80, 0xb3, 0x45, 0x1f, 0x96, 0x74, 0xbe, 0x6, 0x7b, 0xf, 0xc5, 0x75, 0xe0, 0x2c, 0x70, 0x2a, 0x90, 0x3c, 0xec, 0xe2, 0x1b, 0x5f, 0x52, 0x8c, 0xe9, 0xc3, 0xb1, 0x79, 0x4f, 0xf1, 0x52, 0x14, 0x3f, 0xc, 0xfd, 0x1a, 0xf9, 0x8b, 0x1c, 0x86, 0x6, 0x23, 0x2d, 0x10, 0xb2, 0xf7, 0x88, 0x91, 0xc9, 0xb4, 0x7f, 0x3d, 0x5e, 0x7c, 0xfe, 0x3e, 0x6, 0xfc, 0x2e, 0xe1, 0x1f, 0x3a, 0x3e, 0x1, 0x7c, 0x2a, 0xac, 0x6, 0x27, 0x3, 0xdf, 0x59, 0x7e, 0x2b, 0x70, 0xf2, 0xe5, 0xf6, 0xf0, 0xf7, 0x4c, 0xcf, 0xa, 0x7, 0x55, 0x3b, 0xfd, 0x29, 0x1f, 0x14, 0x31, 0x1e, 0xe6, 0x96, 0x26, 0x67, 0x70, 0x23, 0x0, 0xbb, 0x91, 0xbf, 0xd, 0x2e, 0xa7, 0xce, 0x83, 0x32, 0x2e, 0x74, 0x63, 0xe9, 0xd3, 0x81, 0xea, 0xd0, 0xce, 0xce, 0x3, 0x67, 0x83, 0x55, 0xc0, 0x4e, 0xd5, 0xfb, 0xde, 0x82, 0x68, 0x6e, 0xd, 0x57, 0xc8, 0x55, 0xd0, 0xc6, 0xc7, 0x97, 0x83, 0x19, 0xd7, 0x80, 0x7c, 0xb3, 0x26, 0xae, 0xcb, 0x11, 0x4, 0xb3, 0xe0, 0x5b, 0xe8, 0x6f, 0x87, 0x2f, 0xfa, 0xdb, 0xa4, 0xb6, 0x43, 0x13, 0x11, 0x7e, 0x5, 0xb8, 0x18, 0x3c, 0x8, 0x9a, 0xe4, 0x21, 0xe5, 0x2a, 0x78, 0x5a, 0x7b, 0x58, 0x79, 0x80, 0x55, 0x27, 0xfe, 0x28, 0x7, 0x23, 0x6d, 0xf5, 0x55, 0xde, 0x4c, 0x75, 0x1d, 0x74, 0x17, 0xc2, 0x6, 0x60, 0xb0, 0x13, 0x21, 0x1b, 0xfc, 0x89, 0x50, 0xed, 0x8c, 0xa0, 0x23, 0x5f, 0x4, 0xfb, 0x30, 0x38, 0x1f, 0xcc, 0x80, 0x72, 0x1b, 0xb8, 0x52, 0x41, 0x55, 0x3b, 0xda, 0xb0, 0x58, 0x55, 0x31, 0xea, 0x9b, 0xbc, 0x99, 0x31, 0x65, 0x16, 0x35, 0x27, 0xf7, 0x3b, 0x1a, 0x5f, 0x5, 0xae, 0xc3, 0xef, 0x53, 0x3a, 0xa2, 0xf, 0xc7, 0xe1, 0xcb, 0x69, 0x63, 0x39, 0xf, 0xf4, 0xd9, 0x24, 0xcf, 0x8, 0x67, 0xe1, 0x60, 0xaa, 0x8e, 0xd0, 0x1d, 0x4d, 0xf9, 0x74, 0x70, 0xe, 0x38, 0x13, 0x9c, 0x4, 0x9a, 0xe4, 0xa0, 0x9a, 0x13, 0xd4, 0x97, 0x3e, 0xbd, 0x31, 0xb6, 0xd, 0xda, 0x6d, 0xd6, 0x16, 0xb5, 0x1d, 0xe8, 0x37, 0x1, 0xbf, 0xee, 0x6f, 0xa6, 0x6d, 0xfa, 0x35, 0xc, 0x3f, 0xda, 0xfb, 0x5b, 0xe3, 0xa2, 0xbf, 0x45, 0x62, 0x7f, 0x50, 0x54, 0xd, 0x2a, 0x7, 0xc4, 0xe7, 0xb1, 0x1, 0xa9, 0x26, 0x88, 0xde, 0xa7, 0x85, 0x2f, 0x88, 0xcd, 0x80, 0xb5, 0xe0, 0xd, 0xc0, 0xb3, 0x63, 0x14, 0xfa, 0x37, 0x8d, 0xb7, 0x81, 0xbb, 0xc1, 0x6d, 0xc0, 0x7f, 0xa2, 0x1e, 0x81, 0x27, 0xea, 0x1a, 0x4b, 0xd4, 0x4f, 0x82, 0x57, 0x81, 0x8, 0xe7, 0xc5, 0x20, 0x3c, 0xb8, 0x6a, 0xab, 0x4a, 0x9d, 0x5b, 0xe7, 0x44, 0x70, 0x4a, 0x86, 0x99, 0xe2, 0x93, 0xe5, 0x4, 0x70, 0x2c, 0x78, 0x19, 0xd0, 0xc6, 0x76, 0x4f, 0x82, 0x27, 0x80, 0xef, 0x5c, 0xfc, 0xb, 0xec, 0x2, 0xae, 0xbc, 0x1, 0xd8, 0xa, 0x1e, 0xc2, 0x7f, 0x5a, 0x79, 0xe4, 0x44, 0xf8, 0x4f, 0x19, 0x40, 0xa1, 0xb6, 0x18, 0xb9, 0x7a, 0xa2, 0xec, 0x7f, 0x27, 0x77, 0xca, 0xf8, 0x2b, 0x28, 0xe6, 0x63, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; + + + + + (NSData *)twitter_icon3x_png { + return [NSData dataWithBytes:twitter_icon3x_png length:sizeof(twitter_icon3x_png)]; + } + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Other/ParseUI.h b/BreakingBad/Pods/ParseUI/ParseUI/Other/ParseUI.h new file mode 100644 index 0000000..788a4b0 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Other/ParseUI.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Other/ParseUIConstants.h b/BreakingBad/Pods/ParseUI/ParseUI/Other/ParseUIConstants.h new file mode 100644 index 0000000..19cfa1d --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Other/ParseUIConstants.h @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import +#import + +#ifndef ParseUI_ParseUIConstants_h +#define ParseUI_ParseUIConstants_h + +///-------------------------------------- +/// @name Deprecated Macros +///-------------------------------------- + +#ifndef PARSE_UI_DEPRECATED +# ifdef __deprecated_msg +# define PARSE_UI_DEPRECATED(_MSG) (deprecated(_MSG)) +# else +# ifdef __deprecated +# define PARSE_UI_DEPRECATED(_MSG) (deprecated) +# else +# define PARSE_UI_DEPRECATED(_MSG) +# endif +# endif +#endif + +///-------------------------------------- +/// @name Nullability Support +///-------------------------------------- + +#if __has_feature(nullability) +# define PFUI_NULLABLE nullable +# define PFUI_NULLABLE_S __nullable +# define PFUI_NULL_UNSPECIFIED null_unspecified +# define PFUI_NULLABLE_PROPERTY nullable, +#else +# define PFUI_NULLABLE +# define PFUI_NULLABLE_S +# define PFUI_NULL_UNSPECIFIED +# define PFUI_NULLABLE_PROPERTY +#endif + +#if __has_feature(assume_nonnull) +# ifdef NS_ASSUME_NONNULL_BEGIN +# define PFUI_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN +# else +# define PFUI_ASSUME_NONNULL_BEGIN _Pragma("clang assume_nonnull begin") +# endif +# ifdef NS_ASSUME_NONNULL_END +# define PFUI_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END +# else +# define PFUI_ASSUME_NONNULL_END _Pragma("clang assume_nonnull end") +# endif +#else +# define PFUI_ASSUME_NONNULL_BEGIN +# define PFUI_ASSUME_NONNULL_END +#endif + +#endif diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Resources/Localization/en.lproj/ParseUI.strings b/BreakingBad/Pods/ParseUI/ParseUI/Resources/Localization/en.lproj/ParseUI.strings new file mode 100644 index 0000000000000000000000000000000000000000..998662295e68838b7a263a8971d5cbcb8518aa52 GIT binary patch literal 6528 zcmd5>TTc@~6h6=ViVX=N@d18-F-m|EA^{Z8=hBu!EUmUh!k<^aZ^q%Ax$JhU<&vg! zcjnyhGyMLwEpMcf9qHq9BXfKwGM284u=+-}Wlh$LyX)A0hi~2PTVSpMpVUu5Z-&o3 zXiveX!ruYj2jEx9t$UsUW{9T>5{w;AM~(nLlta9K!Ri3`yH2_}@F$RPgtaMPRZe0K zK(PyWYH*L=xm@GPawLZt)~9kOy+@sAfVy^)R&og{11ATi96LGZ;91G0Y{&=v-Gb(7 zf#>CGZMzGJ$IxOBdCab=objrqvIpJnL1%>DuJh17tV1hX`!+!-mu9G#>xq1oWBB<* zc4QBpK9&PmHTZK6>-oOrRNl8d_DwVdy1J&c>{^VU+d*w(@dMnt)ZtIyrygRCkOODs zzI$Ul4xxA7d68M+vrsLe94q)_IVvR?|AmUxs)HzD%w0m7iF`9YOLvrez7tbqtPMep zH6g7S?;{S)ke1^jNGk!O?@Z2R2l03$`-n%if4-+&N_&mZaz zJw%C9h^Mr&PUOnjwj-YqcdVTc(6#1m!Ph+gi!S;m|qs+Y-qm5+ee|yo~*?qBGG5lhwQutgZ`lLbx_}=L25BoghfH}vi zGk5R*(}NiwLr@|w+LnEoyiyHH5LV_B`Do&UZ%VmvJvYNl zvC7GY^39@IW%ZPst!C%08FXOp;_Sz1YgN&=1zMrE=lXqi{Mc3NeP4-%YOj&?|8r|o zmtRd5NO77qy+z#8Q;cNRVXN(Gqdmki=YKzMlNTeTLe9je2RnJ6K4w5$Osnw)bR!?0 zcc>4u>@{f2Ot*5i*SLgfHP$Kjb?C}2F?gKN+v=HP)#=FU^TW+LzDCwZt?yfhh=q1@ zP<`a_yy>G+&!L?E`iQhp`L0|CsW5*{Af1nNRz|+@wAs!QtKwv>cK{j3_)d`tJ$PpX znL5~S7Z)Y;j0M`l-r3154+b`N@^3}w4V6O`rJ zaefY`nzWMnTL~MVtC_*Hm*poZ)uI{7Y7yp_%1toZYvXmLoUS*~DtRHsx1Orw5yM!1 zw&Jn2bI$GJ#OiN%80TSr^Et_!>H%Fu$%R$Vzo`h&-JrCWNy^wcw zSNKrwa4%J^pD!nYwLa_VPgryWxq0uWvNEURnrMAdUr$18ESjZh;gHoOTcq5*PiSkE zH}^|An<%W+%~tQ1;B7sS&p1yN|GB->X+&>Nm&pNEW1hSgXF|%a?~eRQ*~%BMTUr;0MAj-jHH12o?kK%{$5Z?RcM%~( literal 0 HcmV?d00001 diff --git a/BreakingBad/Pods/ParseUI/README.md b/BreakingBad/Pods/ParseUI/README.md new file mode 100644 index 0000000..7cb8a41 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/README.md @@ -0,0 +1,115 @@ +# ParseUI + +[![Build Status](http://img.shields.io/travis/ParsePlatform/ParseUI-iOS/master.svg?style=flat)](https://travis-ci.org/ParsePlatform/ParseUI-iOS) +[![Pod Version](http://img.shields.io/cocoapods/v/ParseUI.svg?style=flat)](http://cocoadocs.org/docsets/ParseUI/) +[![Pod Platform](http://img.shields.io/cocoapods/p/ParseUI.svg?style=flat)](http://cocoadocs.org/docsets/ParseUI/) +[![Pod License](http://img.shields.io/cocoapods/l/ParseUI.svg?style=flat)](https://github.com/ParsePlatform/ParseUI-iOS/blob/master/LICENSE) + +## Overview + +`ParseUI` is a collection of a handy user interface components to be used with Parse iOS SDK, +which streamline and simplify logging in / signing up `PFUser`s and displaying a list of `PFObject`s. + +## Getting Started + +#### CocoaPods + +`ParseUI` is available on CocoaPods. +Add the following to your `Podfile`: + +```ruby +pod 'ParseUI' +``` + +#### Packaged Releases + +You can download the latest release in a form of `ParseUI.framework` from our [Releases](https://github.com/ParsePlatform/ParseUI-iOS/releases) page. + +Add `ParseUI.framework` to your Xcode project by dragging it into your project folder target, then add the following to any files that use `ParseUI` components: + + #import + +#### Build from Source + +`ParseUI` can also be built from source and supports Xcode subproject referencing. +Follow these steps to build and run via source code: +- Download the source code via `git clone` or in an archive +- Run `pod install` in the repo root to download all the dependencies +- Open `ParseUI.xcworkspace` +- Build and Run `ParseUIDemo` target + +## Components + +#### PFLogInViewController +If you are using Parse to manage users in your mobile app, you are already familiar with the `PFUser` class. +At some point in your app, you might want to present a screen to log in your `PFUser`. +`ParseUI` provides a view controller that does exactly this: +```objective-c +PFLogInViewController *logInViewController = [[PFLogInViewController alloc] init]; +logInViewController.delegate = self; +[self presentViewController:logInViewController animated:YES completion:nil]; +``` + +#### PFSignUpViewController +If you are using `PFLogInViewController` with the `PFLogInFieldsSignUpButton` option enabled, +you do not need to do any additional work to enable the sign up functionality. +When your user taps on the sign up button on the log in screen - a sign up screen will appear. +However, there are occasions where you might want to use the sign up screen independently of the log in screen. +This is when the `PFSignUpViewController` comes in handy. +```objective-c +PFSignUpViewController *controller = [[PFSignUpViewController alloc] init]; +controller.delegate = self; +[self presentViewController:controller animated:YES completion:nil]; +``` + +#### PFQueryTableViewController +Data oriented iOS applications are mostly a collection of `UITableViewController`s and corresponding `UITableView`s. +When using Parse, each cell of a `UITableView` typically represents data from a `PFObject`. +`PFQueryTableViewController` is a sub-class of `UITableViewController` that provides a layer of abstraction that lets you easily display data from one of your Parse classes. +```objective-c +PFQueryTableViewController *controller = [[PFQueryTableViewController alloc] initWithStyle:UITableViewStylePlain className:@"Todo"]; +[self presentViewController:controller animated:YES completion:nil]; +``` + +#### PFQueryCollectionViewController +A lot of advanced use cases usually include displaying data in a custom dynamic layout that is different from a simple list. +`PFQueryTableViewController` is a sub-class of `UICollectionViewController` that provides a layer of abstraction that lets you easily display data from one of your Parse classes in any dynamic and custom layout you might think of + +To display data in a simple grid layout you can use the default `UICollectionViewFlowLayout`: +```objective-c +PFQueryCollectionViewController *controller = [[PFQueryCollectionViewController alloc] initWithClassName:@"Todo"]; +UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout *)controller.collectionViewLayout; +flowLayout.itemSize = CGSizeMake(100.0f, 100.0f); +[self presentViewController:controller animated:YES completion:nil]; +``` + +And, for example, to display data in a circular layout - you can pass an instance of `UICollectionViewLayout` at initialization time: +```objective-c +UICollectionViewLayout *customCircularLayout = ...; +PFQueryCollectionViewController *controller = [[PFQueryCollectionViewController alloc] initWithCollectionViewLayout:customCircularLayout + className:@"Todo"]; +[self presentViewController:controller animated:YES completion:nil]; +``` + +#### PFImageView +Many apps need to display images stored in the Parse Cloud as `PFFile`s. +However, to load remote images with the built-in `UIImageView` involves writing many lines of boilerplate code. +`PFImageView` simplifies this task by abstracting away these parts. +```objective-c +PFImageView *imageView = [[PFImageView alloc] init]; +imageView.image = [UIImage imageNamed:@"..."]; // placeholder image +imageView.file = (PFFile *)someObject[@"picture"]; // remote image +[imageView loadInBackground]; +``` + +#### PFProductTableViewController +`PFProductTableViewController` is a subclass of `PFQueryTableViewController` that displays all IAP products in a table view. Some content apps, such as an app that sells comic books or video tutorials, may find it handy to use `PFProductTableViewController` to sell the products. By default, each cell is a product, and tapping on a cell initiates the purchase for the product. If the product has associated downloadable content, the download will start when the cell is selected and a progress bar is displayed to indicate the progress of the download. + +## Learn More +- Check out [ParseUIDemo](https://github.com/ParsePlatform/ParseUI-iOS/tree/master/ParseUIDemo) project +- Read the [iOS Guides](https://parse.com/docs/ios_guide#ui/iOS) +- Browse official [API Reference](https://parse.com/docs/ios/api/) +- Follow few [tutorials](https://parse.com/tutorials/) + +## Contributing +See the CONTRIBUTING file for how to help out. diff --git a/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj b/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj index 4ce7cd5..ec7e817 100644 --- a/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj +++ b/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj @@ -7,1239 +7,1433 @@ objects = { /* Begin PBXBuildFile section */ - 00275592A13B5D46B08409D995DB6ADB /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = FB46E4BC6BAC7355C701C95033BF325F /* UIButton+AFNetworking.m */; }; - 013AE4595BF56A559DD3CA81669B0D67 /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 411AD8B8B53F6CAF9198BBBBB07AC033 /* AFNetworkReachabilityManager.h */; }; - 0153E7B72CC1F58001A1FB4CA726D5C8 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BABE1F9D15A2416835BA1EC9EB7E043 /* QuartzCore.framework */; }; - 025598DFFF793FB641F506825074F34A /* PFPushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CCBDC7EA64ECE9974D334AA69A02EEA /* PFPushManager.m */; }; - 025BE970FE1936D8AE73A5BD6FCF5A4D /* PFAnalyticsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B55313727430781904B26ED39BC5BD6 /* PFAnalyticsController.m */; }; + 015C2EFB4BDA114E874289A8BC01B844 /* PFLogInView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F4C5429E2494ED58C557A5F11CCC6AC /* PFLogInView.h */; }; + 02A1E68F7CA023CBC64E581A3325EF6F /* PFURLSessionDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E645516AFC0CAD5C08101D5F844874F /* PFURLSessionDataTaskDelegate.h */; }; + 02D90891E401812590EFB1B7FD947312 /* PFFileController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8B01C970E96BD862FECF58F194D051 /* PFFileController.h */; }; + 02E5D6EBF54BD9D4CF221E7D76081855 /* ParseUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 51B91EABBB44E7CF6E6B3CD95D857313 /* ParseUI.h */; }; + 0375A436998F237A79A936E6CCE33148 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A97DD8424AA6D29A671297332ADC6CA1 /* CoreGraphics.framework */; }; + 03A6F38CA14AD317B341884170C3BB7D /* PFAnonymousUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = A1C86812C1E16F9AE6E6995B0510FCF5 /* PFAnonymousUtils.h */; }; 03FF532EB8C5304EFA2E77016458C281 /* POPPropertyAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2726A20CBCFFB77F9972C445E8972099 /* POPPropertyAnimation.mm */; }; - 055D430D3080E69525A1CB4E226AE6AD /* PFAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = EE8606221826FA5909EFFA2016DEE26C /* PFAnalytics.h */; }; - 0567E8CB52A88D784048A608C7DFA3AD /* PFAnonymousUtils_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 671A1745311D8EA359B1DB95D621711E /* PFAnonymousUtils_Private.h */; }; - 058502343AC3618129AC9439EA85335A /* PFMutableFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 61DE303474ACF3AAEB6BEF7CF3151683 /* PFMutableFileState.h */; }; - 060F06CDB2C21C334A0082FD9EA5D079 /* PFRelation.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FCA6291D3A1D8E40FC410D0747380DC /* PFRelation.m */; }; + 04C59EDFE151A61EBE17E21743FCD39C /* PFOfflineObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9825AD54796F54B9AE10955E1AFEDD77 /* PFOfflineObjectController.m */; }; + 0548214136FCCAE0412E4688B4F8CDCB /* ParseModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D60E52FD4E440EA2F1B080932410DE /* ParseModule.m */; }; + 05834B536D3A455ED3798FD75FC72F8E /* PFPushState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D70110CA542D79C645FCD20E2C9674AB /* PFPushState_Private.h */; }; + 058C33FB5C2A3719FE4ADF9A72690954 /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F7FEA8114B1934AF71EEAF5B655B908 /* Pods-dummy.m */; }; + 058D0D5CE02E50025C29F3C920C0342C /* PFFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 563F4B9FC46A7DD720D8945683D2129D /* PFFileState.m */; }; + 0655C53AF3514D826B20F7892BBE3352 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A97DD8424AA6D29A671297332ADC6CA1 /* CoreGraphics.framework */; }; + 06FAB48E1E97530EA1D69FEE81B6B4FB /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC83DB2D364DF47142AB2F90071DA9F5 /* CFNetwork.framework */; }; + 097B901143156E3D41E99BE3AAF835EC /* PFFileState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AD697B984E89B4847323B087964A48EA /* PFFileState_Private.h */; }; + 09B6D79E22DEA5ADF5509786C8710E80 /* PFGeoPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 62A507869EFBA5A9140C70CE67650D5F /* PFGeoPoint.h */; }; 09F160052D6F4DF4F769F6A2A351071C /* POPAnimationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = EC10F21A5E230A911C2C2E5082CDAE4B /* POPAnimationPrivate.h */; }; - 0A963324CC60CAA719E82B65A42F8F92 /* PFRESTPushCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D244FD9C2061C46A05C67E3557A6D7A9 /* PFRESTPushCommand.h */; }; - 0BE6F472A9E14DECF3CC4B2AC719A807 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F270D2F5F74F0965904AC60E014742A /* UIKit.framework */; }; - 0CADB282A28A344B568CD36701CD99A0 /* PFFileDataStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 206BAB6E51C3AC0ACA2E1320A911DA36 /* PFFileDataStream.m */; }; - 0D2DC39580098F73627DE62060F0E256 /* PFEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C0E7BEE92130638A860786486BF4398 /* PFEventuallyQueue.m */; }; + 0A9D4D20C55270EF697A3961B39D3FE0 /* PFQueryUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 39FFEDFCBEA2D381B7572D62222BF55D /* PFQueryUtilities.m */; }; + 0B0292923091FED205120BD5097527E9 /* PFRESTSessionCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = A026613DFF149D8BD7D37DDB26152A35 /* PFRESTSessionCommand.h */; }; + 0BDA91D5869CA4191D33157C3F626421 /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 838239C2DC01EAB9AEE7B5553878AB6A /* PFObjectSubclassingController.m */; }; + 0C25D8A64EB9575F6EE8297DDB7E28D6 /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = E504BFBB2DBF9126FAB2DC1F339CB325 /* UIButton+AFNetworking.h */; }; + 0C2B045D7E5509E8F7EFA57AC39B6629 /* UIAlertView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1B49F66FFBB4AD6CCEC0A90A66D326 /* UIAlertView+AFNetworking.m */; }; + 0C3E40A1E1F5C062336954953535A147 /* PFMutableObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = F25C9F58CFDC13B49DEA0CD5013B1F28 /* PFMutableObjectState.m */; }; + 0C49F0B3FD4736F8E75C2B6BF4CBB182 /* PFCurrentUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = C5ADC6D84457794AAF2D20A45BAD22C5 /* PFCurrentUserController.h */; }; + 0D13A6CE3055797D395FB3B1432F8F0E /* PFConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 87D5C76598D7EF5558AB88A80F0ADCF6 /* PFConfig.h */; }; + 0DB56799333E9A43236FF8CD130F07E7 /* PFSessionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 50A3A1846FA5A0CC07A927EBC49B5BF2 /* PFSessionController.h */; }; 0E111996ED8AB07B504AD6200F460C6E /* POP.h in Headers */ = {isa = PBXBuildFile; fileRef = 38C1E5A4A6882760CB349FCABD22A9DC /* POP.h */; }; - 0ECD46F443DEFF63C3BCBDC3A75363AA /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DB8817B308E2B46E23993461AC18E54 /* BFExecutor.h */; }; - 0F0B220351D06ECFB17DFF2EC338D0CD /* PFCurrentConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D19EBD75979B9CD23ABA38BA45D0DCB /* PFCurrentConfigController.h */; }; - 1067E9F5F6F4D70E1111D34A159980FB /* PFUserAuthenticationController.m in Sources */ = {isa = PBXBuildFile; fileRef = AD9250D9FE4979DF37C24BE1CDB4FF8B /* PFUserAuthenticationController.m */; }; - 10812A750A13684F4C638D481A7B5234 /* PFInstallationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A8AD04541066E8C429FCD51E8A604FF1 /* PFInstallationPrivate.h */; }; - 10989B990683FCA58C99BB82050E5077 /* PFPinningEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BC40E8FF522D488100477128A373255 /* PFPinningEventuallyQueue.m */; }; - 10B6EC5F1F87C64ECBB431E75CBFD609 /* PFRelation.h in Headers */ = {isa = PBXBuildFile; fileRef = D26D8AB91D60CAC4AF163A949239DE49 /* PFRelation.h */; }; - 118BAA009D3D59B3EAE79710C991E16F /* PFObjectConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 5710C75607065D22ED2DB5CCCFB27A3D /* PFObjectConstants.h */; }; + 0E6063551D612BD83F5BDE564BB459B0 /* PFThreadsafety.h in Headers */ = {isa = PBXBuildFile; fileRef = 34E2D0613E3152D0F6D3B2C1F125895C /* PFThreadsafety.h */; }; + 0F238050CCA06FB31AC3B53D1853A928 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + 1083B349581427A54BEBDAAF8F3F79CC /* PFCachedQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = D16A398DDB303A767A2CF933083655C3 /* PFCachedQueryController.h */; }; + 10A29DA15D651C10348F412CAF7756A6 /* PFUserPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B50558B71D8208975C6283BE61E816D /* PFUserPrivate.h */; }; + 1138646361F9E460DD21884B0F6DFF9C /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = C29500E205220EB8DB49F1C825FADA89 /* PFRESTConfigCommand.h */; }; 11924DA123F63743B409090BFC425AD2 /* POPCGUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CC05709207C91767940918CDD4779DC /* POPCGUtils.h */; }; - 1249B7E8D033D0D59D0D8F097A745AB3 /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 41A069B9AF3C8F611F76F20326AB035E /* AFNetworkActivityIndicatorManager.m */; }; - 12641D479C071B60EF715865ABFCE798 /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C4ACAFFC579192F80AE309D38F4CE0D /* PFDecoder.m */; }; - 1380A386F92D641C726FA9687404B11E /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 80B7FAB2B889140EDF2DC60D3C4A5969 /* AFURLResponseSerialization.m */; }; - 1421591EB34905B0745B67D11682989B /* PFPush.h in Headers */ = {isa = PBXBuildFile; fileRef = E6235BD1313049794F1B1DA7AB8B72BF /* PFPush.h */; }; - 144AF01BA8F6AC27B465052C4C1F4A63 /* PFSQLiteDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 846998BF4B29751792079F5759BBA274 /* PFSQLiteDatabase_Private.h */; }; - 149FA64D0DB7931320E1337D5DF51D95 /* PFPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 189B90A77BD5596205FB77D8F7DBBC66 /* PFPin.h */; }; - 14AFCA315D7308DDC8D506B3F74FADF7 /* PFQueryPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E19C92B6E4B8413D0F549918EC73FD0 /* PFQueryPrivate.h */; }; - 1502050CA80F5B97E273857066C10540 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 51740A0EDDF3B04E8A46D98B3807D440 /* AFHTTPSessionManager.m */; }; - 157A5FFCF49C427C049F82A6C6E7EF9C /* PFPinningObjectStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 315895D529B1136E61253E4EEE127FAC /* PFPinningObjectStore.m */; }; - 16076CA62CD1EEB4CFA1957E9F923B40 /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = F08E0A9E75FBD4FAACDB3C8A68081A32 /* BFTask+Private.m */; }; - 16CF2BCA2E368236EF475D6362A13491 /* PFRESTAnalyticsCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 82175545FE728571466A9FD6E8D8A7DE /* PFRESTAnalyticsCommand.h */; }; - 186FCA5BEF75F30B6A368BD3819F22E7 /* PFConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = E8FCE3D950703287AE285D63EEA38289 /* PFConstants.h */; }; - 18B651969BB7CBCC4E2B38F1631FF6E2 /* PFObjectFileCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D14E98ACAAB4CCD1367FDFBC9088D27 /* PFObjectFileCoder.h */; }; - 18B67D18CD4B27B89C1FB0B4C6E33EDE /* PFCommandURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 669BF4D4C83FA3E0ABEF32501AC4C5EE /* PFCommandURLRequestConstructor.h */; }; - 191D1C449C141C961A7F6B7D6982B73E /* PFRESTAnalyticsCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 946D9742CB5DB1C57ED0E3BBA63E66BD /* PFRESTAnalyticsCommand.m */; }; - 192C2017BBCDB1177A5F77494B10ADEF /* PFObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 656B8A19AFF797C4926D6E2E8D102049 /* PFObjectController.m */; }; + 11A4692CEBB8730B94ACA3DE9386A360 /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = A24FE0141387F910F17488671E600BA8 /* BFExecutor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 11C30B6D836D34D9B469D3EB466BC3C6 /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = A5170E55DE35501B4A713A17711AA0A0 /* PFConfig.m */; }; + 1280D553590D730A67E0F99C1B65F136 /* YALContextMenuCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 526FB5D06EEAEC04BB51ADED7679CF69 /* YALContextMenuCell.h */; }; + 12905F13464787C5271CC5D9FA18C667 /* PFObject+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = 585CC800D2685BF4E18ADBC41D9E73B1 /* PFObject+Subclass.h */; }; + 12F7F6FF549BFF3F9E125CC05FFDE06A /* PFCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = B1C6CB67201095492AA37DBE54C06E7D /* PFCategoryLoader.h */; }; + 132AFB274CF349B143A6CE62178DCE73 /* PFCommandURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 8261B575C444CC37A75DDD38033FCDD3 /* PFCommandURLRequestConstructor.m */; }; + 13407B834F3178398FB483A7A5E16B1F /* PFEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = C0CF8725DD1DD49BE8D6A0907238EA04 /* PFEventuallyQueue.m */; }; + 15D39B2C1708F2F2D00CBC4C37D7D242 /* PFSessionUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 505C7EAE502AC992E9273C10AEFCC86D /* PFSessionUtilities.h */; }; + 1618761B80BC0810912C0E5A6FA8AED2 /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = CB295B33B0FC530FD77C52FEB400203E /* PFCloud.m */; }; + 1640F9FA2671E79FC0BA756063D41D8A /* PFRESTCommand_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B72B60C944C86664F4D05675D934FC68 /* PFRESTCommand_Private.h */; }; + 16C58D5E53A49592C8CBE347C2A8902D /* PFRelation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D0D627CB39CA6EDBC298591F7FB9D15 /* PFRelation.m */; }; + 16D57AA10CE0A2E5D61FD7DF78139724 /* PFURLSessionUploadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D52EE0139EA03EDDE83AA9D9685536FB /* PFURLSessionUploadTaskDelegate.m */; }; + 16E5664C03179ABE5E7339A5D8536E5B /* PFLocalization.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB79D7DC036E7A8C84740F1E542074B /* PFLocalization.h */; }; + 173ED34A0356542BC4AABA232A87BEDC /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = E2143F74B5AD9A40EA532F839BD3B314 /* UIImageView+AFNetworking.m */; }; + 183010BEEB58B8B3CC8C1509BD15346B /* PFResources.h in Headers */ = {isa = PBXBuildFile; fileRef = DFC690133F99B68E1F8CE7784769EF36 /* PFResources.h */; }; + 18379233D2D2B1502FC76DD4C5C692DC /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = C69C27BDBB8B1E63677A91477C52FDA5 /* PFEventuallyPin.m */; }; + 18A8BC9861EDA4C6869FC91964FA284A /* PFErrorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C55517F4B7361A3891B563478721DED /* PFErrorUtilities.h */; }; 1937EC6CD83AA2FAB3455591AB074459 /* POPPropertyAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 134BDC30251FB7A5465C17F603FCAC5F /* POPPropertyAnimationInternal.h */; }; - 1B15C523B8D5B8B3661CEA14DA2BE238 /* PFLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 80678CF83F7E4592403D479266CD73C6 /* PFLogger.h */; }; - 1B3D2F66E11EACBEC93D5138DDA5991E /* PFProduct.h in Headers */ = {isa = PBXBuildFile; fileRef = C4F300D4AA623B3DFFDF7971E2B5A614 /* PFProduct.h */; }; - 1BCB49287D526538FE27C92495A7C7C9 /* PFMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = E4A624B26435247F139B091B03F95E5A /* PFMacros.h */; }; + 19A8A885F0AD8ABBE6397819787BA1A8 /* PFFieldOperationDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 314F14CB5AC1E3119F923E7D73FD2F55 /* PFFieldOperationDecoder.h */; }; + 19EC4D553FB816F1000C41CF1051066B /* PFMutableObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = CA749ACCAF73A8469072D11F78DA1FDA /* PFMutableObjectState.h */; }; + 1A172F3623296435FBE39CA9DECBE299 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A97DD8424AA6D29A671297332ADC6CA1 /* CoreGraphics.framework */; }; + 1A199A539421FD9EF267C20C58B80BFD /* PFCommandURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 70AE4459357403A9AA0B61959202F9A7 /* PFCommandURLRequestConstructor.h */; }; + 1AB31BD52213E4929644D1AA98D1448D /* PFAsyncTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 17A3AD5BCF18F3E0478C884A2B764C4B /* PFAsyncTaskQueue.h */; }; + 1BD3A897099353079B220469631AC62B /* PFSQLiteDatabaseResult.m in Sources */ = {isa = PBXBuildFile; fileRef = C235A6B7A110CC5F4093F80159287E17 /* PFSQLiteDatabaseResult.m */; }; + 1BD80BCC808E7E9643CC37C4AA3ADDFC /* PFConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BABC47EC65B9265C3909474DE8574C9 /* PFConstants.h */; }; 1BEBEDAB53B9DB3AD45E1F70637747F9 /* POPSpringSolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 6961E549FC85F85EB7560B887B11C928 /* POPSpringSolver.h */; }; - 1CAD0670AB203262F90F62BC3BADEB14 /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA4157CE1B57DF0CDF63B24888DCEA61 /* PFObjectSubclassingController.m */; }; - 1D5C062D011FA396D6BD0652197BC3D9 /* PFUserConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 9645D0E8258AB75B2C992E0915EA9BC2 /* PFUserConstants.h */; }; - 1DA04B4E7477A3C6ED4E64EB100997C3 /* PFACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 53683441896998F6CE0216D4310DD24D /* PFACLState.h */; }; - 1E924C4848F63BBFC1FCF597FC9D5FD2 /* PFReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EBBF4F6FA934C6BCACE0C5744A3BF58 /* PFReachability.h */; }; - 1EEB8D22B9718EDB6CB1C314B3EB38F4 /* PFFileStagingController.h in Headers */ = {isa = PBXBuildFile; fileRef = AD274DB5984402947E47F0A1B92E9CA4 /* PFFileStagingController.h */; }; - 2060BB5093B7CC2D7AB326AD3FE0CEDC /* PFInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81EA6C27FFDF760CFB4767BB48E66220 /* PFInstallationController.m */; }; - 20CE99207001FC9C10E242287C253996 /* PFObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = CCFA76D1938B2CCED5785C13FA4FC5B8 /* PFObjectController.h */; }; - 21D65B5E8DF938F32091BDBD66B1E5D1 /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = AAAE696C714BEA1FD2CB7F7E37484204 /* BFCancellationTokenRegistration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 22028A0623B440907DBA76FE0F64B6E0 /* PFSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 752500BB2A0459E3CB234F46BFDE1EED /* PFSession.h */; }; + 1C7F42CA15296DA4A6644553F81E234A /* PFMutableRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 8553BBD3BB32BA047968D8FCC0BB7A4A /* PFMutableRelationState.m */; }; + 1D0B465250743982AC6B53A0826FBBD0 /* PFObjectFilePersistenceController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DA3372CAB38E88F7791F2DE96931153 /* PFObjectFilePersistenceController.m */; }; + 1E3C0F09FCE1C3025D98EC3E79134920 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D1BA2737792A257200ECAE76708D233 /* SystemConfiguration.framework */; }; + 1E6A6D284A6252C645194A7DD669B76E /* PFSQLiteDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A40A4CAE6145F41C05AA25BD5CA9BD9 /* PFSQLiteDatabase.h */; }; + 1EBD269DC4FE87225B78B3ED0FDA1D0F /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D9C3B80FDA98CB3B3C80A70441B019C /* PFUserState.h */; }; + 1F881486E8CB860C4E24913A8F5D5F40 /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 02410F25AB700FDE2DC3E940E8F641D3 /* AFNetworking-dummy.m */; }; + 20917DF017F324A8D15F0D9C4D141FA4 /* PFPurchase.h in Headers */ = {isa = PBXBuildFile; fileRef = 7126CE5A9A9393978939ABBD58F26EA9 /* PFPurchase.h */; }; + 20F38429DB788EC0750BAE41035D38BD /* PFReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B19DBC177333992D2D0D2D98EB6BA58 /* PFReachability.m */; }; + 21B089C37641C0DD264CE5D3A4F6561A /* PFPush.m in Sources */ = {isa = PBXBuildFile; fileRef = B8FB92BD0F40B979678430FF43192D73 /* PFPush.m */; }; 22030D04E39440FA02B75449A95BF767 /* POPAnimationEventInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5785AD09C2208501D5161E950E701889 /* POPAnimationEventInternal.h */; }; 226B9015C8E393975BCF1AFEA63C1D51 /* POPGeometry.mm in Sources */ = {isa = PBXBuildFile; fileRef = B330BCF969EF6189E02E10926FB95CED /* POPGeometry.mm */; }; - 2322FAF5379B9BC9FBEFF748570BECCA /* PFCommandResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 653B4653F0D1C20696A6E65E888E8D15 /* PFCommandResult.m */; }; + 229C97335867E932CB618AFF2AD68FA1 /* BFTask+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F2457C51DB8F154FDFD167B5690FC35C /* BFTask+Private.h */; }; + 22A0E63EE43ED826D8DFAB3444112A06 /* PFUserConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 0835AF0C620B80377CFA5F0070B6F2A8 /* PFUserConstants.m */; }; 23FC5124B2FA2C879AFE378BBB12AC3A /* POPSpringAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C24554FAA71D841BC3C0759DA37874AE /* POPSpringAnimation.mm */; }; - 244417641E77C9E95C92078E54777D85 /* PFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C7C65DD82B3A08F62D43E9DAC3B23880 /* PFNetworkActivityIndicatorManager.h */; }; - 2499A62D47B33872BF0DADA0BAC4BD47 /* PFMulticastDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 016F2569F5E0DA62E089B095D3A04E84 /* PFMulticastDelegate.h */; }; - 24B5B7B9820114759F93C6FD6A713CD4 /* PFMutableACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E69E884C61DBE3CA50B5B88897651DB /* PFMutableACLState.h */; }; - 24BA59BBC3BD72DAB4E18A3549C1C70C /* PFLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F0F3A2FA993D77CC93EA7FCA0571B6E3 /* PFLocationManager.m */; }; - 2627401700D6CCD2EF48DDF1FE042FFE /* PFObjectLocalIdStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 9102F91F4F8FC737DF8F8B04EB6B1183 /* PFObjectLocalIdStore.m */; }; - 26BC591287F171CDC227D4C715DE0BFD /* PFSQLiteDatabaseResult.h in Headers */ = {isa = PBXBuildFile; fileRef = FFD183F4D915B996DC61B082E5317000 /* PFSQLiteDatabaseResult.h */; }; - 26E8BB7BF9D5A57648508C4E19560B77 /* PFCachedQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = F9A596AB40BA679CB6E7CAFF9C12420F /* PFCachedQueryController.m */; }; - 279E99356D07335E887C39DB5C0E5370 /* PFPinningObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 37D8598915FD79DCA21C88192869017A /* PFPinningObjectStore.h */; }; - 27B935CBBBBEFD1F68871D79F7631F58 /* PFRESTCloudCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 63CF9DFF309CFA031748CEB31E227BB9 /* PFRESTCloudCommand.h */; }; - 27C6F9BEE80BC03933C78785106C81FE /* YALContextMenuTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 385A446A8250571BBD7FF461E05E1382 /* YALContextMenuTableView.m */; }; - 27EAB5CE83D76D32110761949B978720 /* PFBaseState.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7693C271516E5E5D162BA7DC113F4E /* PFBaseState.h */; }; - 2802861D952EDBB98D3D81BAFDEBC041 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BABE1F9D15A2416835BA1EC9EB7E043 /* QuartzCore.framework */; }; - 28A7C073D31DDF6C59967A931BD5766C /* PFOfflineQueryLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = EAFA435D26900861E36F1BAF155390C7 /* PFOfflineQueryLogic.h */; }; - 298E48D1F7EE66DBD2CE7B1081DAAAB3 /* PFObjectFilePersistenceController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7123F7FE1F84DEDBE2ED35D8844839 /* PFObjectFilePersistenceController.h */; }; + 246B3249C33500DE5CA8091842FD161E /* PFRESTConfigCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EA0F7203418529BD442E51DEA289F3E /* PFRESTConfigCommand.m */; }; + 24D81C37FF895F44D6D4D8C1108EE0AD /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 005D86B592A4BA2B3547363ECF47A177 /* ParseModule.h */; }; + 24DE67F780C71ADDD3ECD6654317FE72 /* AFHTTPRequestOperationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E72971E8203922C334379D6EF46D2C3A /* AFHTTPRequestOperationManager.h */; }; + 253E5BAE428DD70BB381435C235FE16E /* PFOfflineObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = A51A35330B4AB677C74A6579FC025B7C /* PFOfflineObjectController.h */; }; + 254832160B15699E7724F95DE8DD5752 /* PFPurchaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A0D3F66C0F548DA826E162FB412704A /* PFPurchaseController.m */; }; + 256B22C8EF9B5B23E67AD183CF08A370 /* YALContextMenuTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3827F868B3F08C9E6CA5CFEEE3C83EED /* YALContextMenuTableView.m */; }; + 2585D2B973EDD9644622A4C685DC746A /* PFEventuallyQueue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E873F760B193DFBEF81E19B36B33FCED /* PFEventuallyQueue_Private.h */; }; + 25A85CEAA3DA9477C9380336E9223EFA /* PFObjectFileCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = C8BC0FA6F2C382BF336FF4ECE47C192B /* PFObjectFileCoder.m */; }; + 260117E289FF83C3E56161D34507AC08 /* PFObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 062A3C8CA2C198CBC3F4184AE0DE01AB /* PFObjectController.m */; }; + 2621A0600ABC3EB86C65B713B86601BD /* PFRESTObjectBatchCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = A5E89E9F5A5618CE7965C7807CC99B95 /* PFRESTObjectBatchCommand.h */; }; + 268BFCB72A6AC4C466ACE860992F00C3 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3C592B1563BAD172B026388C571DBE5 /* StoreKit.framework */; }; + 26BF7F88592AF38813101555097DD55C /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 348553BBE97419579F9F55AA50C5F99B /* BFTask+Private.m */; }; + 278028677CDB8067FFF832B90AE73116 /* ParseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 09293FA9DE2829C01FD1BC90B6481E0C /* ParseManager.m */; }; + 27EAF05CC70083B9C74622C4C3F1F50B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CF2B2B9DD2ED593C69A3425ABF50CEA /* Security.framework */; }; + 288F78B90BDDF8D2354804F3326D6A9C /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = E28AF701482179FE07EE17023210453F /* BFExecutor.h */; }; + 28EF03109A91A0399E7ED7DD0DCEC43A /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 415E520ADA42019A24142D17486874BE /* PFDecoder.h */; }; + 29E64CEA35638C93186B498049B7E98C /* PFRESTCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = A81137DE4CAF25A53FED9F979106F428 /* PFRESTCommand.h */; }; + 2A47EF83A3F0B843959DC8DA3ABDC4EA /* PFURLConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = FE3AA7D1FB50A9011DE1F2F4F8986498 /* PFURLConstructor.h */; }; + 2A6D34424562F80CD74C3B2BAC7172D5 /* PFObjectLocalIdStore.h in Headers */ = {isa = PBXBuildFile; fileRef = C04DABE57BA79040087CCBBA081B3616 /* PFObjectLocalIdStore.h */; }; 2AD822A4C6DD9CA6D499CF6955198F4A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - 2AE2ADB09903F3B39869810739754118 /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B6673C9F7E97CEA6C3B3B57C906C095 /* AFURLSessionManager.h */; }; - 2B08C89BCB6F8CDE246F90E71C343694 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 74BAE971C6A2FC6F319D21B31E77EAE8 /* SystemConfiguration.framework */; }; - 2B0B2B3095BEFC0D0520B92D5354F428 /* PFURLSessionCommandRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = 075D17B28FD88D19723BDD0F7C7ACF85 /* PFURLSessionCommandRunner.m */; }; - 2C043C346C73A86BCA7BAF2D9B4A6D42 /* PFConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3501C65AE5330DD19D3236E70095C9D8 /* PFConfigController.m */; }; - 2C7EC42E5437F4F927B80CF65D5CEA3B /* PFObject.m in Sources */ = {isa = PBXBuildFile; fileRef = ADEFE34C92FF818B135715C323E4963C /* PFObject.m */; }; - 2CD85B954E0A03C2FC81163F60CFC4D8 /* PFApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DC525DF3A9AB295F68FFA79C1865B4D /* PFApplication.m */; }; - 2CF3E58396AB85B06C5F11298F43FE91 /* PFMultiProcessFileLockController.h in Headers */ = {isa = PBXBuildFile; fileRef = CA70C152E8EBE75160C47A587C7EC00D /* PFMultiProcessFileLockController.h */; }; - 2E135CA6B413C0D9809F7BC1D11822E1 /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = C61F3C1B791FFC9E7C5ADE180684470E /* UIActivityIndicatorView+AFNetworking.h */; }; - 2F3A21F75992E245B70D2FAB4213679F /* PFObjectConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 923EF0E8FAAA93BA1AF9399DE58923FF /* PFObjectConstants.m */; }; - 3039F75251A2A754A7525EEDBF3907D1 /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 754C6873E010FF768376E458C1EA6449 /* BFCancellationToken.h */; }; - 307DC92332AA8387F0ED533660A7A2DF /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E1148A11007AFF78ABDECD376185D39 /* CoreLocation.framework */; }; - 30FFBDB396C82253175D828DA2BEA835 /* PFRESTQueryCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 91B168BFBEBBF3272A49E4240325DAC3 /* PFRESTQueryCommand.h */; }; - 3114529BA3CA84D2274E6E9220D1B1EE /* PFUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = 358BFE48BAAE8F3F03CD0C0904BC4C08 /* PFUserController.m */; }; - 31E55D99949F54193700F33C7FD34DA6 /* PFFileController.h in Headers */ = {isa = PBXBuildFile; fileRef = 489E3B9351E8F3F82DAFE89EEEC84804 /* PFFileController.h */; }; + 2B805B0D9C82263BED05712F6F61F508 /* PFCurrentObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 035328EF0D2E9A7C6F011700B6486C4B /* PFCurrentObjectControlling.h */; }; + 2BA4EE91EE2A2D2392A549A5D0265E02 /* PFACL.h in Headers */ = {isa = PBXBuildFile; fileRef = 895CF8E6F7A84B12553BCA9E79EC79C3 /* PFACL.h */; }; + 2BA5C7017464A16F4C706785FA19D75B /* PFCurrentConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 863525FC6AF9553E708425B9E1FBBBE3 /* PFCurrentConfigController.m */; }; + 2BA85187131ECA5CF5B3C9339913E5FC /* PFCloud.h in Headers */ = {isa = PBXBuildFile; fileRef = 84EE46E65A1FBB043B8876D673FADFCA /* PFCloud.h */; }; + 2C7C264D41F9220DEB49C3A1B180B546 /* PFObjectFilePersistenceController.h in Headers */ = {isa = PBXBuildFile; fileRef = 92551145ADCBD6A18D43AA2DA73CB21B /* PFObjectFilePersistenceController.h */; }; + 2CAD92B1CD9E623C21762FDD9970ED0A /* PFSQLiteStatement.m in Sources */ = {isa = PBXBuildFile; fileRef = 36204B280B4F34FB73981677EC64B941 /* PFSQLiteStatement.m */; }; + 2D7FC9420988E8825835F617C085C8F0 /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C45BAC8E657D5D25B91CF13FDC4C8C /* PFCommandRunning.m */; }; + 2ED1F725C7A2D9C3B088755133185E3E /* PFHTTPURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = EEDB7E1475A81EE2F12373656077D160 /* PFHTTPURLRequestConstructor.m */; }; + 2F2C8AD562611FDC0AF5CDCD530D5A0D /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 44E52571D995DF254E53AD007ED4859C /* BFTaskCompletionSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 2F8806F964E2757E0AE4C18A63D549F7 /* PFObjectBatchController.m in Sources */ = {isa = PBXBuildFile; fileRef = B63D2BB991AB59607701D89CDA8174A8 /* PFObjectBatchController.m */; }; + 2F95E9BCF26DD34957769CFD6E7B08F7 /* PFOfflineQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 63D62EED87FA9B033C640237039C5D71 /* PFOfflineQueryController.m */; }; + 2FA63B393DD60EC8FD23E587F04E482D /* PFOfflineStore.h in Headers */ = {isa = PBXBuildFile; fileRef = E31FED7E103689AA50C7795F772BDA23 /* PFOfflineStore.h */; }; + 31996DCA29D4E878B0583CFF567CA0CA /* PFPin.h in Headers */ = {isa = PBXBuildFile; fileRef = DBC82AC944CB7F585939AB9589D4F9B4 /* PFPin.h */; }; + 31E45E0290C278EF3172695D508A2E71 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + 32A2CE35418BD5633F9217B88B539CC3 /* PFLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9981AF787E3013B9030751CAD2D7A086 /* PFLoadingView.m */; }; 32A7371F19FC366D8DF77A2FA2166918 /* POPCustomAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8EC4FC6A3A06D9292C296C691005546B /* POPCustomAnimation.mm */; }; - 33D4081B410C93515F3AE2B05B1E6FEB /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 52808B026D92DB8F0DCCBCA2EE24FEEF /* AFSecurityPolicy.h */; }; - 3535E9FC786DCF87B160127BE2ECB0BD /* PFACLState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FE27C4E5599C93B42BFE6AFD312AC39A /* PFACLState_Private.h */; }; - 354DC5158891E616616904856C60FA22 /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A207317F4EF6A614BE7034DE5F3A9E9 /* UIActivityIndicatorView+AFNetworking.m */; }; - 3576593700E45C9EBD7D41E2565B1DF9 /* PFSessionUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 810E80DCE80B90D80B5F21BF7212FEFB /* PFSessionUtilities.m */; }; - 359312B1BB35A2C98A870CFE8FB33B67 /* PFInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A0A7E7C948EBD45C167B8D1A339D98A /* PFInstallation.m */; }; - 364E56F74AFA751A33C35FFD3FCA4EC8 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2BD22E7A59F4BEFF52D4F43A0AA7EB30 /* MobileCoreServices.framework */; }; - 36A0EDEF8443BF059C5DB307F7965A1F /* PFRESTCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 595A306B6C145E017C4B885F8ABB9F94 /* PFRESTCommand.h */; }; - 36DA904B38775E96B9F00B1F60A4EAB8 /* PFPaymentTransactionObserver_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7203E516FF95A460652ADF5DFDEB3FB7 /* PFPaymentTransactionObserver_Private.h */; }; - 36EC255A02DFAD503AE5742DB66EAFBC /* PFBase64Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 507ED5364F8D323521133232F9E26134 /* PFBase64Encoder.h */; }; - 375E59B3F0F22CB28FA382DDB3790F5D /* PFCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 96403B2BFDB3FEACA24969CF6378D7B3 /* PFCategoryLoader.m */; }; - 37A5F32AC77016F849D167378E9675A3 /* PFObjectUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A988AADA8AE3AFF34F68D1673691E59A /* PFObjectUtilities.m */; }; - 39508B096050C3D476E0601B62A67570 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - 3B3D6A60DE4D34A1163B63BAB228AD0E /* PFRESTFileCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 5367E0C94AEC8755F6974A3C97264428 /* PFRESTFileCommand.m */; }; - 3BC9D144F933784273CB48ED48DEEDE1 /* PFQueryUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = E1129C74BCA89B5DEF89974B3EADEAF6 /* PFQueryUtilities.h */; }; - 3BEDAF0982149FC43350CD19D854DB44 /* PFDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 721E34BBC2F5BFD148652BD36955365C /* PFDataProvider.h */; }; - 3C0D480E2EB6981485CFFA27131FACCC /* PFQueryUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = BE9F74FE3902C79E0394988E24194855 /* PFQueryUtilities.m */; }; - 3C401E23A540BDCC225B5C87F2069A02 /* PFObjectUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = E90014A2B5A64CF0A01CA41D71769C7B /* PFObjectUtilities.h */; }; - 3C76079F931B8D254646B65609456C1C /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 48514E935FE3E435F151EFEB4D829A65 /* CFNetwork.framework */; }; - 3D264439507D686CBF9E7040B2B181EE /* PFPropertyInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = B1D6FB68F1851036506A1E965B20FBD5 /* PFPropertyInfo.m */; }; - 3D6CCE33D20C53A3D9E7C977ADFD6072 /* PFRESTUserCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 876ECCCFCF0B3F87EC5560A2FF6B5059 /* PFRESTUserCommand.m */; }; - 3E1E0EBBE4CD3857AF753AA1AB9DF965 /* PFQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = F3FCAEE7ACA390A41ACE7637EA5338AE /* PFQueryController.m */; }; - 3E36642B632C36FD496D0345C6B12E15 /* UIAlertView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 512576519C7D60E088B9946D68C2893B /* UIAlertView+AFNetworking.m */; }; - 3E422E5F9B8E3F76E4C900039E54EE29 /* PFKeyValueCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A63FC1750D756C077EBF6610F23A216B /* PFKeyValueCache_Private.h */; }; - 3EEF37314E80E89B4E7A8176F07348A2 /* PFMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 475310436BBAD84F7095E6DB0BB83F78 /* PFMulticastDelegate.m */; }; - 4059140EA33C2322618F795A388B41D5 /* PFCurrentConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2966362D026D5B9C80E247EEDC0F4E9B /* PFCurrentConfigController.m */; }; - 405FB9DDBD091D87674AF85C7B194D5A /* PFRESTFileCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = E20D9CF29C188B71F5C9BA5C972A8960 /* PFRESTFileCommand.h */; }; - 4071546C204958FA56B126598AA21012 /* PFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E2534618753A8E575CA58125DE04D03D /* PFNetworkActivityIndicatorManager.m */; }; - 40B66FB31F7627FB33B911C4E2AAA916 /* PFOfflineQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = BBFE8A0106C591064C969ED096275D29 /* PFOfflineQueryController.h */; }; - 40E084818025A5B88AA7BDBFCA7F3D3D /* PFDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 965FBA9FA425FE1BA4E41B4FFEE42FA8 /* PFDateFormatter.h */; }; - 40FA82215DAF72DD25F30AE4D6AC2F5D /* PFOperationSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 92A56E592AF27DDA726FCE1F4C398C8E /* PFOperationSet.m */; }; - 410C3023E9AAE2B3E429CDCDA5B48391 /* PFAnalyticsUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D237A86108BD1DB8A37BCC3FCA0DC90 /* PFAnalyticsUtilities.m */; }; - 41521CD3844A812C3397D6564CA06416 /* PFPushState.h in Headers */ = {isa = PBXBuildFile; fileRef = 97D5C73BC159E5CEFA38B5345BB3B77E /* PFPushState.h */; }; - 416DEEABAAEF3F52A524963C6185F128 /* PFObjectPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = B7E18330D5E87E2825CE1B429D6F6693 /* PFObjectPrivate.h */; }; - 434E79FDEC38451A64203A9A367D52A7 /* PFQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 58EC2DED4BCC481232C4E104FEB2F9ED /* PFQueryState.h */; }; - 449AC60A131638EEEA3F97F931C03891 /* PFPurchaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = F48EC1FB45579CEBC6000F723C5E081B /* PFPurchaseController.h */; }; - 44EB9612F4CAF48C8B63696822A2A3BF /* AFHTTPRequestOperationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 202A2922E63631CD23C09430889F7248 /* AFHTTPRequestOperationManager.h */; }; + 33DF104A201E932802169E493F3AEC0A /* PFMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 08DF92C3B8A5DF531A37052EE2D36BA2 /* PFMacros.h */; }; + 344EFC366CB3853905AAC01462A21557 /* PFUser.h in Headers */ = {isa = PBXBuildFile; fileRef = DC8B8475B2B05D335E837929C3ABB2AD /* PFUser.h */; }; + 352D02CEC844BC2D22026A777FA39ACB /* PFActivityIndicatorTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = EF790182566A5099C39C1B289E8BB3B8 /* PFActivityIndicatorTableViewCell.h */; }; + 35953B553BD925643165F1ACB35878BB /* PFQueryState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E1183E2718E99F11B4E9C9C8A80C1AF /* PFQueryState_Private.h */; }; + 359921E987152F2E32ED5A7E95D3D7ED /* PFPushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F44B7D42437E31FF67AF695E26480E07 /* PFPushManager.m */; }; + 360B21E0EB75AA4B2A34C129E7CF78C1 /* PFURLSessionUploadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = F3C4D6B4BF5063C2EC4B6F8862998D93 /* PFURLSessionUploadTaskDelegate.h */; }; + 36ACEFEC11A81EF47DE0C0BFFC6CB97C /* PFCurrentConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = C11D9DEA5457F8EBBADB980FD16BFF7B /* PFCurrentConfigController.h */; }; + 36CCBAA76E5ED042EBDC5DB0D33BE8A4 /* PFNetworkCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 753E0E1AA4BBDE64D2AE0835F63D119F /* PFNetworkCommand.h */; }; + 36D8D65FF0AB068BF9906A86619644F7 /* PFLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CC4DDA9182F4F5C704598B6E722CDC50 /* PFLocationManager.m */; }; + 37A15CF58C488A0BE71C9DF43F028E8D /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = CC980D88098DADD0C68CCE0CC413730A /* PFURLConstructor.m */; }; + 37CEB19E87B3AC3323BBD2E66B42C190 /* PFFileDataStream.h in Headers */ = {isa = PBXBuildFile; fileRef = DFC41E4010D852E3977AF17A221CF0CA /* PFFileDataStream.h */; }; + 3824CB594AD78B77B5FB2FC04D839958 /* PFEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = BED41B8E7F85EE8E67A39865C037C805 /* PFEventuallyQueue.h */; }; + 38253CE84769ED15D8C99ED4B898847F /* PFRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E987F26F4B8054102531C64F176F982 /* PFRelationState.m */; }; + 3859BC5571F7217642873574773EADB1 /* PFSignUpView.m in Sources */ = {isa = PBXBuildFile; fileRef = 33BB29F39122EC7F976E5232ED519B46 /* PFSignUpView.m */; }; + 38E0B7A70C54C146D6E7800490D59C20 /* PFWeakValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AEFA60D137098ACED4615C88DBA7D17 /* PFWeakValue.h */; }; + 3A3EE6FBA4054D41BB3BE24552D0555B /* PFLogInView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BF05C278FCCB54E2356A81F4362E3FB /* PFLogInView_Private.h */; }; + 3A4A4FB0FEE8E11FD14800D236F62CE4 /* ParseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 58D592B48830284011209E1663E7D733 /* ParseManager.h */; }; + 3B22B3CA89C62E0452385CE2796AF1F3 /* PFRelationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5501D5BA77001B3A319125F589DE4774 /* PFRelationPrivate.h */; }; + 3B664B6E61C833CD4BEA0C3FA5F6A204 /* PFPushState.m in Sources */ = {isa = PBXBuildFile; fileRef = AECDAF19F1A734986EF3B6CEE0E5C285 /* PFPushState.m */; }; + 3B6B89143DF62DF0EC2889D8E22D7E12 /* PFDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 17A3A025CC5669EAB17537171EB530B4 /* PFDataProvider.h */; }; + 3CE532D0EA44055EEC7FD1B5A7C27BF1 /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FEDA810326DCCCBD587DEF33586F24C /* PFURLSessionDataTaskDelegate_Private.h */; }; + 3E9FFD7FDD05C6B3A8181F997D776BBA /* PFObjectUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 45637DE63711406B9BE1BECBB23B8EE0 /* PFObjectUtilities.h */; }; + 3F0E3DF64315302D29713F842A484DBB /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = 05E01E38D82A4797E14C9CE9355C3F23 /* PFMultiProcessFileLockController.m */; }; + 3F1414F449E14D51686282DE08C99213 /* PFFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8844A67AC930593786AECB0231747628 /* PFFileManager.m */; }; + 3FA97E218C8EC403B801CDBEED9D7981 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B5B237502D9B0D2DDFB52EE72716703 /* PFURLSessionFileDownloadTaskDelegate.m */; }; + 3FD03AE3ADAAC712667DE736AE685541 /* PFUserFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FA9B2ECC9A26394B543D0F42751F2B3 /* PFUserFileCodingLogic.h */; }; + 3FE2CD905A0D90E675C92E2800E03D9E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + 40D2ADCF0128DEB096B46905667E4E9F /* PFCoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F9B9BF93B8FEFA346B7D92DBA659A391 /* PFCoreManager.h */; }; + 412B08BFF6DAFBF18BBBB68A4E1729C2 /* PFSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CB50B697271E10AC0A2FFC3D43C3AD6D /* PFSession_Private.h */; }; + 417817B29B272C3A7E76522DCED4641B /* PFQueryCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 66C32C6E7A5D7E52B33E0268964CE9D7 /* PFQueryCollectionViewController.m */; }; + 41FA752847E7911579CB5994CACFB55A /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E0AAD20A6FEA44B0CFB6CF47B721809 /* AFHTTPRequestOperationManager.m */; }; + 421F18C338A1D96267A6D56CC4A606DF /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A2F0A20C55B0387272AD66520D13A5C /* PFDecoder.m */; }; + 42B46BB8EB49882AEE36BB5575578EC4 /* PFMulticastDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0C2EFD1475837A15B4834D37F70DCA /* PFMulticastDelegate.h */; }; + 42F4541D75A4F6BA407EB7096B1092F2 /* PFObjectConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = AF40A6B842E8FD9BC950FE00DC5B6F40 /* PFObjectConstants.h */; }; + 435DA30E314A631C5CB9C52A61140AC7 /* PFRESTPushCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 159D21FB91947A9EBAD9A6D923A0E579 /* PFRESTPushCommand.m */; }; + 443BCE5C454E56FCA662D4F1F149CBB7 /* UIImage+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 365EAFBED43EBA1E76B6777D42421642 /* UIImage+AFNetworking.h */; }; + 44CBCCBCF7F96491E4FB42CED4E75332 /* PFCommandRunningConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = EB8DC8124CEE001FB0DCB7332A0E4F5F /* PFCommandRunningConstants.h */; }; + 4559F2C1310C63FC0393148479027450 /* PFRESTObjectCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = D7CBDA2EC1FB8FB11CC6A2C5C9808D47 /* PFRESTObjectCommand.m */; }; + 45E33698BC39D7FF3123216BFE1C1368 /* PFTextField.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CAA43C472F7F6152B3507ABDDE9AD44 /* PFTextField.h */; }; + 4618DA1F5A356DD83541A37748F954DF /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5216F571A9C35B49AC646497DEBD2B3C /* AFHTTPSessionManager.m */; }; 461ADD1403E940D9DB7BBB5B7323376F /* POPMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C3FE18EB564AF4087573DE6F3F2D3D3 /* POPMath.h */; }; - 469AFCA6DF69037CC22B9353A5840D2E /* PFURLConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BAB10EAFDE7E6E60F85AB4A4C3AD67E /* PFURLConstructor.h */; }; - 46DCE2CC317AC30889B0B674F4C86173 /* ContextMenu.iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C3E92FDA0225F57156353438BB9F934B /* ContextMenu.iOS-dummy.m */; }; - 4954EF0625F842D1C956DA967DE52064 /* Parse_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FFEA133F46FCCEC9897A623F3336EC38 /* Parse_Private.h */; }; - 4A9B74E229EB5509659505EE1DE1692E /* PFRESTSessionCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 9507DB69A2FE53769B24313F98BCFB5B /* PFRESTSessionCommand.m */; }; + 4638D38DCDF526A476CE05B3F81CCAD9 /* PFRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = DD64D76CC193A68DABCF84C619EFCFC8 /* PFRelationState.h */; }; + 46649DBE5BC69B649093125569635AC6 /* PFObjectBatchController.h in Headers */ = {isa = PBXBuildFile; fileRef = A133BB30724BEF75ABB81AA509743A45 /* PFObjectBatchController.h */; }; + 46C4231E5E04D67139F9F975246E5DF7 /* PFSQLiteStatement.h in Headers */ = {isa = PBXBuildFile; fileRef = 060DB4FD225A0238252576BE01EEF381 /* PFSQLiteStatement.h */; }; + 46D0E3242C28B43577C2AA06E6FBE718 /* PFPinningObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FC9896164A2A05D8D267241CD2C2615 /* PFPinningObjectStore.h */; }; + 46D4BDDE8AB87A9CAD5D625F9CEF64DE /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9FB80727EBDBCBDEEBCAB45A1785BAF1 /* UIKit.framework */; }; + 4824B7BE52BA2402CED14500E2932601 /* PFMultiProcessFileLock.m in Sources */ = {isa = PBXBuildFile; fileRef = F0CC09558A010C10AAC9F4CD4C53AD04 /* PFMultiProcessFileLock.m */; }; + 48885F40AD8BD0D697CE625FBD2E2E21 /* PFMultiProcessFileLockController.h in Headers */ = {isa = PBXBuildFile; fileRef = A8F222054463224431341AD45804A6AF /* PFMultiProcessFileLockController.h */; }; + 497D21FDF4A360CB97A439754143062F /* PFMutableACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC0B4DB266A15A3A61A62142BDA7069 /* PFMutableACLState.h */; }; + 4987776369E562F38585FC37361D3CBF /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = F182401E66857C7D4B875E79122BD830 /* BFTask.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 49C0D0A6E99F8649034F787477573B57 /* PFMutableFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 74B8114FC619CF23645359BCCE432DBC /* PFMutableFileState.h */; }; + 49CDC02250754AB9B406C89687DF3417 /* PFSubclassing.h in Headers */ = {isa = PBXBuildFile; fileRef = AF2FAD7A53F3AACF9B492617ABD3B62F /* PFSubclassing.h */; }; + 49DD3F7AD1B9FDEFF123B570668F7154 /* PFDismissButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 99C80D21838865183077DD44395D6C3A /* PFDismissButton.h */; }; + 4A80DF5A34C30001E5ED3BAF54228FA7 /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = AA2D73F6B555F385C9E33E7F424BBFE5 /* PFInternalUtils.m */; }; + 4A8C9FF00E3384BC4C3CD3FB2F55E990 /* PFInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = 2FF4FE0BB509523AA3AB48C24B04D2AD /* PFInstallation.m */; }; + 4A9C3367259B56358D28505ACB440384 /* PFSignUpViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C97247E12ADC1F7516B907DB1083863 /* PFSignUpViewController.h */; }; 4ACF656AFA1302DCF387C7A2D0F238F2 /* POPVector.mm in Sources */ = {isa = PBXBuildFile; fileRef = F0B4105C7EE2DA010EA4746E79138C7C /* POPVector.mm */; }; - 4B9E5C8C8330A9073755CD7BA0DE94E1 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = E12E9AD26CFEFE56F770EBC8224F9542 /* PFEncoder.h */; }; + 4AF062F4FC2B5263DEB1CF994FAAB679 /* PFMutableACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = F657AD9C72FE5B432F841B53493D1253 /* PFMutableACLState.m */; }; 4BA566241FA98C1D5E4A5284D84EAB71 /* POPSpringAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = EB56BE02F1B0412A41C9D9834B04BC30 /* POPSpringAnimationInternal.h */; }; - 4C554340F9C8D98F3D3DF059FF829952 /* PFSQLiteStatement.h in Headers */ = {isa = PBXBuildFile; fileRef = 007D017430CAD14C507E4E16894E1ED8 /* PFSQLiteStatement.h */; }; - 4D7202CCD20BEE8BD04BB17D3D304AF2 /* PFAnalyticsUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 857A8C29F0006E02894A63C09D31CB85 /* PFAnalyticsUtilities.h */; }; - 4D74C041164EA0F477B58E5AC7FE23E5 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = BA8D893893775B109603AF7A33CD563B /* PFURLSessionFileDownloadTaskDelegate.m */; }; - 4EFB6054A4319D663B1AB4BA681A03B9 /* PFConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = D4186E5938E4D869A1267A20AC002113 /* PFConfigController.h */; }; - 4F4F44F87B9F2B6059549A42131F2930 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 74BAE971C6A2FC6F319D21B31E77EAE8 /* SystemConfiguration.framework */; }; - 4F8D2DF83D8B2D41170ED4D1C05D6B55 /* PFErrorUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = E97A297341B3E569BD3DEA54A611D6DF /* PFErrorUtilities.m */; }; - 4FBE8D3A5BB9B088B3D381A2A623FD4D /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = F6357CB5A05AA7E18DC9505CDB7B5CE8 /* PFJSONSerialization.m */; }; - 4FC6DEBE5ABA5E9CBABDD1DBC3BBFB04 /* PFFileDataStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 26DE5D007AAFB71206252AE40BAE833B /* PFFileDataStream.h */; }; - 507D5F0F50CC15E879DD054990D1693E /* PFHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F6D07CF3F5445D97AACFB330CF98F66 /* PFHash.m */; }; - 524D6BEE8260BC395116B1055A619C4B /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = A6EBD847848C1C85F961433CE4F102A3 /* UIRefreshControl+AFNetworking.h */; }; - 532D3DF59CE8F5865F4E86368EB6462A /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D3ED73DF6D62367D4288EA69377B589 /* PFURLConstructor.m */; }; - 543DE88D4CFC0102FF1D16C6718032A6 /* PFPushChannelsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B2FDDD8F730AFFD1DFF805E250C3654 /* PFPushChannelsController.h */; }; - 5489C4B47D41585D9CD38481265528D7 /* PFMutableQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 345A7737A02453DD9D85EE95F928690B /* PFMutableQueryState.h */; }; - 54CC3108BC26BBB273A857924B6173BF /* PFObjectEstimatedData.m in Sources */ = {isa = PBXBuildFile; fileRef = 734124A4F7A87553483F895904EE19A9 /* PFObjectEstimatedData.m */; }; + 4BE7FDB3D3FD6EB4DBDBF4A8D6251C93 /* PFUIAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 10926AEF9594A323E624C27E8F4B643A /* PFUIAlertView.h */; }; + 4CF686EDA5878E2B7DE2627B409B34CC /* PFRESTQueryCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B131657B4AE8F0B2C6E0A0C5EA11C6E /* PFRESTQueryCommand.m */; }; + 4D5EF7D0B4D861DF9F3B699C7F838528 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62B4F6275559C45BDBB446ABDB11EB0A /* MobileCoreServices.framework */; }; + 4D925619B81D08AC5E84925C79BE5A59 /* PFMutablePushState.h in Headers */ = {isa = PBXBuildFile; fileRef = 8804B5C3B20BA33A62CE380BBCCC489C /* PFMutablePushState.h */; }; + 4E6EC4EE31AFB4E83A925AD0CA54E128 /* Parse.h in Headers */ = {isa = PBXBuildFile; fileRef = E557ABF7F7687DC7DFF115D7F62AEDA5 /* Parse.h */; }; + 4E72C8BDEF684D123F3726A401ABCB36 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D1BA2737792A257200ECAE76708D233 /* SystemConfiguration.framework */; }; + 4F3FF316B9AC1B085B0BED76753BBF9A /* PFImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F1F7C24D363A023B057B4B020BED379 /* PFImageView.m */; }; + 4F95459B59771365653E226A2D9EBF89 /* PFObjectEstimatedData.h in Headers */ = {isa = PBXBuildFile; fileRef = F908ADAD5734EE4C1EA4466E7FE108C1 /* PFObjectEstimatedData.h */; }; + 50A0B5735FC58289849B81903379466F /* PFCommandCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EA17DCC97E135EB8F1461B291A14122 /* PFCommandCache.m */; }; + 51CB85FCD806DF8447C6FA52391C1E04 /* PFPushController.m in Sources */ = {isa = PBXBuildFile; fileRef = DF6863C55207FC14F127AB7F8E41415A /* PFPushController.m */; }; + 5231BCCB308A3F31F6177D3DE45B4B2A /* PFAsyncTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 511824AA2AD76251DC45B56662AA4DA7 /* PFAsyncTaskQueue.m */; }; + 52FDC5383B9B5D2EEEF373E403D77417 /* PFQueryPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C6EC3EAC5F58685494656DAB9912EA7 /* PFQueryPrivate.h */; }; + 531A2D3B4A600ED6ADC40EA5A46DE3EB /* PFErrorUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = B7F9DB4E614C6F9EFC52811652A1D27F /* PFErrorUtilities.m */; }; 5520088E66FB2528F595AA617FFC5D9A /* POPAnimationRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A5F7AF86D19E519B94AD6D8CB98CC34 /* POPAnimationRuntime.h */; }; - 5555C4B8729021B6051BD58E96BEA0BD /* PFConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 18D7C9B8DD8A89571437499374A39984 /* PFConfig_Private.h */; }; - 55D282FE0C9269BA1E05D31AF560DB2D /* PFProduct+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CBCE01FE706B02A990236BCCFB09B153 /* PFProduct+Private.h */; }; - 5615E187912379539C73AEBDCBB69AB4 /* PFCurrentObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = ED172D7F5B84203E7C6617EC01D187F2 /* PFCurrentObjectControlling.h */; }; - 562F0029981DB78EAF4891EFE5DD13A6 /* PFUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 08DB18CB20934926437D11F21D1D9B8E /* PFUserController.h */; }; - 57F507F10A1BB85EA45DA90E31045D4C /* PFFieldOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A250843CDACF4CC56A8C27C4FDF9C270 /* PFFieldOperation.h */; }; - 5935304BB5A45EE7BF047CD984EBFB73 /* PFCommandCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E424F4FC00D39BFE64948677EB2D53A7 /* PFCommandCache.h */; }; + 55785784D679DD24B00E9A95DF6CCBE2 /* PFTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 024EDBAD6DEA89979FB7FA48DF6FD2E1 /* PFTaskQueue.h */; }; + 55BB2075236A6D419A39C20BDAE77AA1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED8D97DDDCF9842413073AA979D81CD2 /* QuartzCore.framework */; }; + 57BDB360A71C5C40769FEBCF4EEA9286 /* PFKeyValueCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 57D6481216B3368FC95D692879E27822 /* PFKeyValueCache.m */; }; + 57F9FD71CB5753B5943820CB971EABAC /* PFCloudCodeController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F0070F7D9C1BBF95C7F9EDB863AD555 /* PFCloudCodeController.m */; }; + 59BA7CCA0E9AF6D155A512DF3A8BED25 /* PFQueryTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = B539C1B5ED1A98FE70171B60D8186E32 /* PFQueryTableViewController.h */; }; + 59C5C4F84FE226A4542348E92177F952 /* PFPushManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F241847217017ADBC4283C2F8F469A /* PFPushManager.h */; }; 59CB94574F710422B4C9CD6D388CCA03 /* POPCustomAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 928EC8B9105DA581C7896C2102E87BE2 /* POPCustomAnimation.h */; }; - 5B2E3974FFB3B52E1377C6959B742F56 /* PFInstallationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F214F1BB9B408A25954535EFA736CA6 /* PFInstallationConstants.m */; }; + 59DBB816A81FD1511D1E38EC0CEEEBB6 /* PFBaseState.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B7B6DB35230E2855BBD62DA92FC70BE /* PFBaseState.h */; }; + 5A77D55F5B0750BBEB517B644365A500 /* PFKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = AD6BEE4FF1F262959DD604F6DFDBAE3B /* PFKeychainStore.m */; }; + 5AC93CEB9283C651882F05B1273DD103 /* PFCurrentInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = B1D36F734A33A907E9958F6778F6D9B1 /* PFCurrentInstallationController.m */; }; + 5B03265249AD905F4FB6E3DB631658AD /* PFQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F8925C71640AC9E18B09C2F32530257 /* PFQueryState.h */; }; + 5BB3EFBBD58F469D64FE05C97A816968 /* BoltsVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = CF7F21D5332C89148FDF4E4644891872 /* BoltsVersion.h */; }; + 5BD0448FB27F6926E8AC4C43AD94F214 /* PFRESTCloudCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 19A96C3911D00F07330D94949348F1EE /* PFRESTCloudCommand.m */; }; + 5BEA0703B949E403FCF00B1C99CE5312 /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EE2B15BEF4BF5D9E73B0F8A28BFE3AF /* PFBaseState.m */; }; 5BFDF4E4848A83D2225D948A6D0B79B5 /* POPAnimationRuntime.mm in Sources */ = {isa = PBXBuildFile; fileRef = E85E0983DBE882A8009D0F7EAB591B91 /* POPAnimationRuntime.mm */; }; - 5DC9D0A553754F872A6C6EDF5B8D51C3 /* PFApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B2B77FA62BB014F37CDD536B7F39AD5 /* PFApplication.h */; }; - 5E344479C1E3FE458D0D732D5EFD8C8B /* PFPushState.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B3991EEAD0B989CE24DC09DA3F6F84B /* PFPushState.m */; }; - 5EB711D9E225DDEED6606BBF5E4D400E /* PFFileStagingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 461917BD0B571A033CB9E74AD334A12C /* PFFileStagingController.m */; }; - 606DAFEA41DB4A57A32229A007CAE7F4 /* PFURLSessionCommandRunner_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 47DED761A5B41071D4A460714CF9A610 /* PFURLSessionCommandRunner_Private.h */; }; - 60E2A7A43AE9D6EACF4B5E3AD4FBFA04 /* PFRESTCommand_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EAEF6A0ABE272D5803680B4298EB62D2 /* PFRESTCommand_Private.h */; }; + 5C0AF4E1346CE2C73EEEE2F76444DBE8 /* ParseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D23A382F14DB50C5CF89F62A1401FFD /* ParseInternal.h */; }; + 5C20B36FFE00F5AC30E5338C5F4E1C95 /* PFRESTUserCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 331270F5C910E5D29DEFABA0DA889E54 /* PFRESTUserCommand.m */; }; + 5C25A0B2AE2D5A04ED1AA575D9D517F2 /* PFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C343079DDD088139CD814C6470830F6 /* PFObject.h */; }; + 5C586D9F95CFEDF896F447BFC98AF4C3 /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = FD9F0F4B22EEC61402D34AE9EEF30DD0 /* AFNetworkActivityIndicatorManager.h */; }; + 5CE8743FE0F90E511A4C84E0995D1397 /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = FA1957D2FB6FAD2FDD777C1424EE93F5 /* AFNetworkReachabilityManager.h */; }; + 5D1D8DB17C40891783970781D35AAADB /* PFRect.h in Headers */ = {isa = PBXBuildFile; fileRef = 15B3921F710AB762D4B6DCFC53018A70 /* PFRect.h */; }; + 5DF1B5387A1DD9CAB5E13CEA1DEBE334 /* PFAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 031E9E0D8D5FFE61CA69EBB13DFF940B /* PFAnalytics.m */; }; + 5E45AE079AC451D88127C79FEB659466 /* PFPaymentTransactionObserver_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 48D4D5780017286C543013DEDE63D651 /* PFPaymentTransactionObserver_Private.h */; }; + 5E5D8BCA6AA7723270741D3B30129E95 /* PFAnonymousUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 25C2F29D6B6FBDBAA33D8593E65EC348 /* PFAnonymousUtils.m */; }; + 5E8A9993BF21FC6A83FD93B1805E7E08 /* PFDismissButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 9151DC926D00004E1604381F7985BB36 /* PFDismissButton.m */; }; + 5EA2BCB87865A7A04C48507EFBBC12DF /* PFObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = CBC8CC7D9B59534667A62E84BF1C8B31 /* PFObjectState.h */; }; + 5FAFA9B41F2A03D77C11EB75A4494750 /* PFInstallationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 16BA4C30B79BFCF3F4A3AE316FC70C8F /* PFInstallationConstants.m */; }; + 5FC02173813B41B3D99A1856EC7B340B /* PFInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F101824BC10648B2A569BDBA9C23BE5 /* PFInstallation.h */; }; 620920967F6C1FB5C501AD33EFDA1639 /* POPAnimationEvent.mm in Sources */ = {isa = PBXBuildFile; fileRef = C0DF3C83EBC5F7BF6DAAACEBD7D72791 /* POPAnimationEvent.mm */; }; - 626E3E94132CE3E2B174CCB5C2E61241 /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = FA74881F0C5E486DA753412D3B49338C /* UIWebView+AFNetworking.m */; }; - 628EC2E2FC6B26D0F6C7ED0DAB935A84 /* PFOfflineObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = D8AA77C187E180A556AF4ADA309BC0B6 /* PFOfflineObjectController.m */; }; - 629633A8DDB4D329242214C1C6EA85A5 /* PFInstallationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = C01AC5406A1FE996C23D44F2D1E54AE2 /* PFInstallationConstants.h */; }; - 6378CF7EDB22FBB77D96DEBAA2552517 /* PFACLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = B627B86FB20866D18CE3E2A40FF283B7 /* PFACLPrivate.h */; }; - 638A30D79CD262C8C3291933357B2135 /* PFFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F3726655401860B18DB85328C091228 /* PFFileManager.h */; }; - 63C69E993C498EA39DD1E26BC8919A39 /* PFPinningEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0EFB7BECF9EB8E71FD258F0F60D3E5 /* PFPinningEventuallyQueue.h */; }; - 64CF2D655AAA7C7FBED2449AEC710E4A /* PFSQLiteDatabaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = A78F4615CC1292D0FA53088C626957D8 /* PFSQLiteDatabaseController.m */; }; - 650C59C74ED1EB13FF81B3AD92EB75A5 /* PFURLSessionDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DFE6FDE4C6292695F3EBEFE040B0685E /* PFURLSessionDataTaskDelegate.h */; }; - 65BBE10D6AD162A261BD96636B2810CA /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = FF7D93CF68584FFA70133B196EFB59F0 /* AFNetworkActivityIndicatorManager.h */; }; - 65C3A46AFEC65C14F9A669B9E2171ABA /* PFJSONSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 58898FE04784C24EDFF6D77428F6BB91 /* PFJSONSerialization.h */; }; - 65EAB2BF94627BD112EE4724B065D38E /* PFCurrentUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C6B8C7E82B804AB1382E38F8E99158C /* PFCurrentUserController.m */; }; - 6628D87D3C8481FD02EC5908FE0842F4 /* PFMutablePushState.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DBB0CAB75C437C618EEBFAF8F62A947 /* PFMutablePushState.m */; }; - 67674A2B768D1BFF618FE2F7DAF24321 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB0347B267799D3314B6438A04D898BF /* AudioToolbox.framework */; }; - 6848B68295C1A953461430BFAB2A5D46 /* PFURLSessionJSONDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9357693A996038C30E8C787613239775 /* PFURLSessionJSONDataTaskDelegate.m */; }; - 69067BE779C91E991C908BA33C234ACB /* PFSQLiteDatabaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = A60A05A0392E32822607D587C5380E61 /* PFSQLiteDatabaseController.h */; }; - 69134BFEE551E2C9B6F3DACC87775C7C /* PFAnonymousAuthenticationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A5BCF29FD1B3CBCBD8B387388746B55 /* PFAnonymousAuthenticationProvider.m */; }; - 6A5F690E541D3B2BFCDFB9EC94F1AA73 /* PFLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = ECBD824DA95D72A1DD329C331E1D9D09 /* PFLocationManager.h */; }; - 6A7DBAA42BF1E9104329ED6DD2FD0E91 /* ParseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DB83418592CB04C28FA16D53A2F50BB /* ParseManager.m */; }; - 6A96EFBD2ECDE315AA0FCC4BAD67A9F8 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = B0D0D5C8FF6EA31C0E29554F03FFAE35 /* PFEncoder.m */; }; - 6ACF579F7F083EF03A3DBB128D76B4C3 /* UIView+YALConstraints.m in Sources */ = {isa = PBXBuildFile; fileRef = C5560C46514764C06929B264B533F518 /* UIView+YALConstraints.m */; }; - 6C073E3CAB26DE3EC33FE490DF02FC8C /* PFFile_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0854CFF4AC229E21A7EC471BB9EAC43F /* PFFile_Private.h */; }; - 6C39436633D2F7986ED9FAE8CF87F494 /* PFCommandRunningConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EDD645EA043AC01BD2D294C8E25D7C9 /* PFCommandRunningConstants.h */; }; - 6D2F9FB21ADBAC74D397280A5832D308 /* PFURLSessionDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A3DF42FD99A813DEBC5C62B3491B1AC0 /* PFURLSessionDataTaskDelegate.m */; }; - 6D67873D2EDAAB5DDBC501CA69E630C6 /* BoltsVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AF96B14E5200CC44AFA17F564FAFCE9 /* BoltsVersion.h */; }; - 6DC9DCD2E199EE08136DFB9D8BBE17BF /* PFPushState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 56CE00CA829DE03D96192E0DB1B3B4B5 /* PFPushState_Private.h */; }; - 6ECC50446D8CE723BFA8398E30E0B34B /* PFACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = 06BDEA785CD1CCF3EC5F7D97641DB94B /* PFACLState.m */; }; - 6F3AA29F68F856746B4055983C6BF793 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6408EC1F7E48296B333659567543173D /* CoreGraphics.framework */; }; - 6F827A5588B3DF26C10C2E566D2D41E1 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5583C012407DD3D86BE591291FD5B40E /* AFURLSessionManager.m */; }; - 6FDF337377416BE9C6958B05AC1C571E /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F189D28F4E7A0D39192B35D412642BA /* UIRefreshControl+AFNetworking.m */; }; - 7070EE01AEB4E7454E9C81B2A421900C /* PFCoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 033DE2F20554C4483F70BB66112A660D /* PFCoreManager.m */; }; - 7140367343A5DBE5AEABEE022C385B6B /* PFFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 283151768413CC359CA4D2B1E9BA275A /* PFFileState.m */; }; - 7196C7AF34A6CEA821271AD022AB457C /* PFLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 0931322359A8E70F6F16FED5F97879E5 /* PFLogging.h */; }; - 72A2AA035FA76AFDB9F2081C1E6E9617 /* PFHTTPURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 022CFAB7CC0CBD47E0AC47A4EC57B983 /* PFHTTPURLRequestConstructor.h */; }; - 738F9BE2CEAA34CA252698CB2D3724B3 /* PFMutableQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = E50C20130F417DFB11F5B3BD1EE46846 /* PFMutableQueryState.m */; }; - 74036443FB7468F873D7086A1E47B948 /* PFUserPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 457B2F0DFF5B74AEFF8A1D9A714104EA /* PFUserPrivate.h */; }; - 7469D8A552A998387B59B30A9AD71F68 /* PFPurchase.h in Headers */ = {isa = PBXBuildFile; fileRef = DD2F94AB2074545E677D5F66F9D63121 /* PFPurchase.h */; }; - 75050C536E96095BD980D5A9F3593D53 /* PFSQLiteDatabaseResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 13D7A1D1A9F6D9020B6E721D5D4D5730 /* PFSQLiteDatabaseResult.m */; }; - 75E51F885183754FEFE576DB32781B13 /* PFCommandResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F06EEE3B8D8FE8CE602F2D363FEE64C /* PFCommandResult.h */; }; - 761655FD6EAFDF34F4BB6B5024A9950C /* PFInstallationIdentifierStore.h in Headers */ = {isa = PBXBuildFile; fileRef = AC3758631123BBA424D0C687A75ED31C /* PFInstallationIdentifierStore.h */; }; - 76266C2FA1D348D717AC228690DC36EA /* PFRole.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DA3428B35116EA19374F593BE42F3BD /* PFRole.m */; }; - 766CF09C4050A89F6FF611B19D3AEA11 /* PFPropertyInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3070F8AC10357FBF3BA3FE9A093D8A9B /* PFPropertyInfo_Private.h */; }; - 76BE46560E2489F20B07ADE2A8383AB0 /* PFACL.m in Sources */ = {isa = PBXBuildFile; fileRef = B94497EF1A56D3F72FD2BA76060DF1EE /* PFACL.m */; }; - 76CCB91B392B898460B3E17FAE24BC80 /* PFMutableUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = ECA0CA78D651CA48D080363398697627 /* PFMutableUserState.m */; }; - 77A778BD6F968FCB02BD567C7B5A6D79 /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = C9BD34A121ED46D7A11BF5ED82E5B876 /* PFEventuallyPin.m */; }; - 77C37F47F9E54490AB397A6C560DF60C /* PFURLSessionJSONDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = C40DDFB915A319DD1CC8CD9340920EFF /* PFURLSessionJSONDataTaskDelegate.h */; }; - 77FFDD6A37B8A941ACF4ABEF102EE786 /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C3B64369BE6A9ACF09E4E03E3747FA0 /* PFMultiProcessFileLockController.m */; }; - 786D083E69FEC7BBDAD2112F88692F61 /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B19A6DDEB20A310104A97E0953192B8 /* AFNetworking-dummy.m */; }; - 78D9A4A9E2EB39C92A78BBA7A7C2892F /* PFAnalytics_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A3A9D34733E3E1E62E950164A6B84C80 /* PFAnalytics_Private.h */; }; - 7944A48A8FCFDF523DD67A11DA48E2D3 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = D8CEAB9CDED9C3CA1445D6F3DAF05029 /* AFSecurityPolicy.m */; }; + 639AA00D5A683FEF99EED79AA5886679 /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = B18E4523B7A2D3BA68FE05BE72681E02 /* BFCancellationTokenRegistration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 648E7747FB62EEEFE96BD5622128F170 /* PFHash.h in Headers */ = {isa = PBXBuildFile; fileRef = BADE09B4EF587C0DCFC3F014B3DD1767 /* PFHash.h */; }; + 64E5E6820D9816C209547D94F2BB6562 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A0A214D3D8D8170F77B8631024D14E1 /* PFEncoder.m */; }; + 65DC0149C069D90ECFEBF56941250C67 /* PFPurchaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = CF1F38521C14DBB0BD9845FBEBA5D9CC /* PFPurchaseController.h */; }; + 65DC1218144FBCE4EF1FD774A527E3C8 /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1039D733B7402E51965445AD5B5DCB98 /* AFURLSessionManager.h */; }; + 65E631D06E8973BA219DED288619559C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + 66271ACDD8C7FC27215842A9656C1088 /* PFLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E9B0790246604518A313DFB192E257C /* PFLogging.h */; }; + 6655468950083AF61524A6275FF9A2F3 /* PFRESTPushCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E80BE5758F379DA9001B14AF95B3C8B /* PFRESTPushCommand.h */; }; + 6680EDA225DDBD24AAA8AD3D9373828C /* PFSignUpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C9EF79160C35E4B837E7EBBF7C95D158 /* PFSignUpViewController.m */; }; + 66DCFF3A85030DB15D244781AC3FD8BD /* PFObjectFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 63FEAF34522E76198D04B10565E8B1AB /* PFObjectFileCodingLogic.m */; }; + 67469D5ADC9D1553949D7916A288E8EA /* PFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 0706E15293B087CF3BC18798F10E6F37 /* PFNetworkActivityIndicatorManager.h */; }; + 6760D65BFEF0A2FEE179CF031B5B5E07 /* PFPush.h in Headers */ = {isa = PBXBuildFile; fileRef = 775ECD6B6F3AADB8D98379981C1AD2A4 /* PFPush.h */; }; + 676C6E38537C4802051691D8056EBE41 /* PFLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 59EE9ABCCF20271B1A4D97DE22AA8DA7 /* PFLocationManager.h */; }; + 67D2F6E5A3216E43D97B63E771F06DD6 /* PFObjectSubclassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D701A317BF6E49246153A00794CCB57 /* PFObjectSubclassInfo.h */; }; + 67F4EDD1978EF86C5280CB051D92B690 /* ParseUIConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = A1297C03656FAE86C50B3C5179093556 /* ParseUIConstants.h */; }; + 68C107E42DDAB28C80D321FA102CF4A8 /* PFMutablePushState.m in Sources */ = {isa = PBXBuildFile; fileRef = B6CE6D85363B92C1CEFB2272C5148AFD /* PFMutablePushState.m */; }; + 69240AA871D54B8545057A3076CE4093 /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = C40BCF6A4E2863E61431A31D979EE9C9 /* UIRefreshControl+AFNetworking.h */; }; + 69A5F0FA9789A4C66CB54381A98D4A66 /* PFCoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9780F90C830BDBFB169674AFE0921D8C /* PFCoreManager.m */; }; + 69E78077EDD72A6AA494222FD75922C7 /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 041725EB6A05B1CEEF10F1C68D2B4E1C /* AFURLResponseSerialization.h */; }; + 6A4FB15F0506670406DB87B03ED01510 /* PFRole.h in Headers */ = {isa = PBXBuildFile; fileRef = BFA480ECE7F710752C7409F5C380B0F8 /* PFRole.h */; }; + 6AD3C772F3FF85F3497088F60C7963F5 /* PFColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F8F0DF089A8D938A0A83B044D743001 /* PFColor.m */; }; + 6B0EBE7A376D36F9EFA1331E7F8B63CC /* PFReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 42416DC02ED2707B15870496281BE361 /* PFReachability.h */; }; + 6B16EAB0D7C1CA39B78A840EEA86A15D /* PFUserAuthenticationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C5FC55392104FEA040D1DDC37429A8C /* PFUserAuthenticationController.h */; }; + 6CF96D28E0D903FE5CECE870E959A7E3 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 94CA59055B37DA8DC1D9377D2231CF47 /* CoreLocation.framework */; }; + 6D43310BFA5F6AFAB4BE717DE7E9949D /* PFSQLiteDatabaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6131294FCF882C880A8DAC44B48846EF /* PFSQLiteDatabaseController.h */; }; + 6F022DB58BA290D7E1F34A13D16D19E2 /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AD362A7EBE3D2E2936C281C50AC04997 /* PFURLSession_Private.h */; }; + 6F082EA1396F168DFB2C6F030293EB84 /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AAB30B0C1218AFFC57C5B5A58F1925C /* AFHTTPSessionManager.h */; }; + 7201F0F99D6B13F35856DD253A5C0E07 /* PFInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D4152BFBEE6D5EE6216460618A0BFAC /* PFInstallationController.m */; }; + 728A2994B680379A6073F0EAF3197B09 /* PFFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D505F6BC2E75E018CC37E152B154653 /* PFFileState.h */; }; + 739FCF97DC8962B9DFE12B6887C002F7 /* PFCachedQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 777C43E3AA95750283ADAA2717A0595D /* PFCachedQueryController.m */; }; + 744CE28FEC63BC838F17C749DD7302A9 /* PFPushController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0133FEB4B03FB6F08C08C7B83AE52ED3 /* PFPushController.h */; }; + 74852E4264FB23300164F52A30200E5F /* PFCurrentUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = 190972B3389C83F8279C6D8F35289902 /* PFCurrentUserController.m */; }; + 7489C719E388B356406569AE3746E191 /* PFURLSessionJSONDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 96D3C7353F23912FD706CABC336D4D2E /* PFURLSessionJSONDataTaskDelegate.h */; }; + 7526478D2E78774A038474BCBD3F1C32 /* PFObjectConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 8015A60E5EC1992EE7F83FBCDBA181E4 /* PFObjectConstants.m */; }; + 75746B518C7E0EC504D1548C9CC4FC22 /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = E2CA6C46BBB76A49C80830DB49B9FFF5 /* Bolts.h */; }; + 76E92D32C24B20A93B6AE0969D585F4B /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 089FEED162CE81FFDB1F2F722CC53B19 /* AFHTTPRequestOperation.m */; }; + 7710B4CBEACBB6050BF74F5B5C08E484 /* PFThreadsafety.m in Sources */ = {isa = PBXBuildFile; fileRef = D31C147B6E9BBE54DE19804E1F7CC396 /* PFThreadsafety.m */; }; + 7785B27C7EBF0BD5696DC493EE247B6D /* PFPaymentTransactionObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B0FB893863BB0FE866F5AA02F5D0360 /* PFPaymentTransactionObserver.m */; }; + 7924C2A8992A0D316DB1E9A299F60BA2 /* PFQueryCollectionViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C0458126D7C16A449337164DDC84D21 /* PFQueryCollectionViewController.h */; }; 795E704A17919AB70FF6F5738289A44D /* POPAnimationExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = 22DC4C87D619EF0F28631B5560E82333 /* POPAnimationExtras.mm */; }; - 7A19D5E1912F1F0AC4DB6BAB2E818B19 /* PFObjectLocalIdStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 62C1941BE9E36B0C41BF43BFCF7681CB /* PFObjectLocalIdStore.h */; }; - 7A4647A24ED50F8CB942285D95285B10 /* PFObjectFileCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 196698284757A108BD18D4EFC0D470B2 /* PFObjectFileCoder.m */; }; - 7AA7CBCE858B7750EDE2B738DBC844E0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - 7B4FF17B0F855D9EBD572C18D1EE839B /* PFProductsRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 62FA41489E9F671A6D2AC37AA15E70FC /* PFProductsRequestHandler.m */; }; + 7A7BE0B71906AC4EEF741D34ACD5571B /* PFQueryTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 31F9E89C104ACA3B7C08B33DB94FFED2 /* PFQueryTableViewController.m */; }; + 7ABC7D13EC7F10833D72B1B5ED75102B /* PFURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 7017E1904439F48F0CC39653841838D9 /* PFURLSession.h */; }; 7B99231436CB0981EC5113A681AF7C8E /* POPAnimationTracerInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DA58C3428E2A0E2F88C2A0522297274 /* POPAnimationTracerInternal.h */; }; - 7C4A3111F3BA07CC804F53B11B85F91A /* PFObjectEstimatedData.h in Headers */ = {isa = PBXBuildFile; fileRef = 237D0CDD69C7B78A1BDB8DDF87F9EC2A /* PFObjectEstimatedData.h */; }; - 7CB69E68D976DE206E09BC7743792BA3 /* PFEventuallyPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 2348B7338D870B151D50A511AC6711D0 /* PFEventuallyPin.h */; }; + 7CB520A7F93480BCCE6ED3EAE4D53EAF /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 83A7946D9B9D56684542F8D584D20370 /* PFInternalUtils.h */; }; + 7CEA2506323C78806464A4ADCD1A9FE6 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 270B41DE1EE1C3B5391246CDAED4C8BE /* PFURLSessionFileDownloadTaskDelegate.h */; }; + 7D12660030E37B329BD37158B4BF8245 /* PFAnalyticsController.h in Headers */ = {isa = PBXBuildFile; fileRef = A08F05F414FDAD6FE00523BCDB90BE7B /* PFAnalyticsController.h */; }; 7D2E1DA076E379421DF5A9E74C0FD4DB /* POPBasicAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = F54B1AE39CAF0CA846C1C729B033E047 /* POPBasicAnimation.mm */; }; + 7D40734CC14F03B41F0E88B139689F00 /* PFPushPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B3E595A5E46C08CB6EDD2AECFC436E7 /* PFPushPrivate.h */; }; 7DC645E712D9190C15F71B1B92844D2C /* pop-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 59B3FD41DEC22C5891C9B83C27BC25E0 /* pop-dummy.m */; }; - 7DC754D4F086EC145F14F6CDF360960B /* PFInstallationIdentifierStore.m in Sources */ = {isa = PBXBuildFile; fileRef = C609AF7E1C4CAC8BDE38A1E28E64414A /* PFInstallationIdentifierStore.m */; }; - 7E150D7DB4B83C1DBCCFEFE86C047020 /* PFUserAuthenticationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DD1568F7E2ED50F1C629DDF3D9F3020C /* PFUserAuthenticationDelegate.h */; }; - 7E15C7398334F43931603A970C332DB9 /* PFPropertyInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = FD826E93D8E3CA261C02B951A6F9751D /* PFPropertyInfo.h */; }; + 7DDC420AD15D8E33ACCC0CBA24140E1A /* PFCommandResult.m in Sources */ = {isa = PBXBuildFile; fileRef = D39AAA20779A11314DE3292353142A99 /* PFCommandResult.m */; }; + 7DF684A676D0C6D6C9E217E70FBA4E4A /* PFMutableQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = A544D2F0BE5B4B49B319A783BAC77F80 /* PFMutableQueryState.m */; }; 7EE77B776CF54D5794EB5D9DB5FCF8D4 /* POPPropertyAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = F81E8633F1E784423FE8B9BE16D38981 /* POPPropertyAnimation.h */; }; - 7FA3F9143281C5C42D3CB8AD7442887A /* PFCurrentUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D2C0E09440F10C2834146B969AD0950 /* PFCurrentUserController.h */; }; - 8019DF40B2B2165FC5EB24BD6BB5C320 /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 28676FBC1D97921BD11D7A12C922CD0A /* PFObjectFileCodingLogic.h */; }; + 7EF1C86FE832452F519F51E44434854B /* PFRelation.h in Headers */ = {isa = PBXBuildFile; fileRef = 218C17FDFAF32433D839F97FF17B2F62 /* PFRelation.h */; }; + 7F06975A49D877D950872BE36CA60960 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 358076BF1FC2383D78542D2EFF4939ED /* AFNetworkReachabilityManager.m */; }; + 7FF604BCF508916C20FC96386B466D47 /* PFURLSessionCommandRunner.h in Headers */ = {isa = PBXBuildFile; fileRef = 875608FCABF08485CA5E0DB7D13A53FE /* PFURLSessionCommandRunner.h */; }; + 8035B29DD0D2E6CDE192CFB413021BB3 /* PFProduct.m in Sources */ = {isa = PBXBuildFile; fileRef = 53FB4903C13CD4B728E653A624D36228 /* PFProduct.m */; }; 804C70F77F75F0E75ACC3E3E4B47B727 /* POPLayerExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 9663A817A809169745F3F8E987FFE076 /* POPLayerExtras.h */; }; - 809B3785EA647CC67C699D8FEBB7461F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - 8214C48967620CE6A0CDE08A672A35E1 /* PFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = A52CE45BD75B2826314A3BCDCB813398 /* PFObject.h */; }; - 82756AE351CEDAA36F92E191804E5C29 /* PFThreadsafety.m in Sources */ = {isa = PBXBuildFile; fileRef = 436A81D9B2A9E41E99BF86F1C6871A0A /* PFThreadsafety.m */; }; - 82A1CF90239B1B2448900BC02195737D /* PFProduct.m in Sources */ = {isa = PBXBuildFile; fileRef = 893F517620D76C4DD97407C35B30C8DC /* PFProduct.m */; }; - 83B4223F07E9DB236E15C2F3242CF2E0 /* PFCoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FE1708AB969B7C864FA6A717B2332A5 /* PFCoreManager.h */; }; - 842DB9C51BA822F734AA6A66EBFD61C8 /* PFThreadsafety.h in Headers */ = {isa = PBXBuildFile; fileRef = D963AA70AF8A60F226D09FBC6225E686 /* PFThreadsafety.h */; }; - 842EC859A33C10671D3500B99F24C6C5 /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = 94E051272A8A44AC3C51C58EABF97D9F /* Bolts.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 84C42678DE4460E60A66876CDAC64149 /* PFTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E374390CBBC0449CF5CC0A1C32EE8C5 /* PFTaskQueue.m */; }; - 8503FD13A1BF53A7A91C6FC7FAFA90F9 /* PFObjectSubclassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = BF9B1FD5D1E2441D018DF7EDDDC4A3FC /* PFObjectSubclassInfo.h */; }; - 851D4FF3A335CF48002CAFE2E4F2E376 /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 73F5CAD466111E720F4983773D164AED /* PFConfig.m */; }; - 85320661106B07533362C37B029054F3 /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 562875D8611745AF8CD45A6CDA6DC927 /* PFUserState.h */; }; - 85F948A79ED6DA01A4AD4F8C2BFF690D /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = C452DCF65E6EEC6AD15BD77F01EDF779 /* PFInternalUtils.h */; }; - 86563FC6CF9DA9365C823E7285BFE1FF /* PFAnonymousUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 8675E8B47522DD1649EAE7CE1299B776 /* PFAnonymousUtils.m */; }; - 865A7864DFFA64506A9F6C30E05ECEE3 /* PFRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 3801D32A117D840B4286437B7A779361 /* PFRelationState.m */; }; + 809B4FC22A06B6B83E0282C7672432D3 /* PFSQLiteDatabaseResult.h in Headers */ = {isa = PBXBuildFile; fileRef = B99C240F89A7BC2E76B71472745234BA /* PFSQLiteDatabaseResult.h */; }; + 80B7075F5055261F04B4029C1406EB76 /* PFColor.h in Headers */ = {isa = PBXBuildFile; fileRef = F42BAF2FFD8FD598E5C736149EA031F8 /* PFColor.h */; }; + 80C528865C8895DB3426F02DBF3C0D9D /* PFActivityIndicatorCollectionReusableView.h in Headers */ = {isa = PBXBuildFile; fileRef = FF535EE9855D265BB146986E399302C9 /* PFActivityIndicatorCollectionReusableView.h */; }; + 80DCEB3A08253B03FC7474C3CAC072A7 /* PFRESTQueryCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 35F8D658E839BECDFF6BB8B4BC6CCE2D /* PFRESTQueryCommand.h */; }; + 817B500E5ED177D38A3EC98115632595 /* PFTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A8718EC782F1DDBEAC83251BEA9043B4 /* PFTableViewCell.m */; }; + 819642514BB29D64B2FF0C38CC0B797C /* PFAnalyticsUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = D74E2E4235E9688B273C0714402DEADB /* PFAnalyticsUtilities.h */; }; + 81E1A28345F03D19813EF682006BC6C7 /* PFFieldOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 9377FA8A24B121D60FE9AA1745B38DC4 /* PFFieldOperation.h */; }; + 82F37565E385A7E818C024A26D83F6FA /* PFACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = 024F688442FF537808B2B1F23FD1E740 /* PFACLState.m */; }; + 841DB4F4869F2D4E6F6F53CC10CE3B3A /* PFProductsRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = F82C8E9DF011E7453EA40431821FB283 /* PFProductsRequestHandler.h */; }; + 84272DB1EB4ACEB4D0BB01CBBF3B9978 /* PFFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A85625E51C91983512393262199899C /* PFFile.h */; }; + 8499099175A198098F7496115B1DBD82 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E49F373A0C99D0BDC90B707820423BE /* AudioToolbox.framework */; }; + 85AECDB66088F01AB3230A50CF38F9EE /* PFLogInViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A11AAB2D71A25709B7A73C3D4626B66 /* PFLogInViewController.h */; }; + 85B0C6E345CC679BACD3B8EC8BC903BF /* PFPrimaryButton.m in Sources */ = {isa = PBXBuildFile; fileRef = F8C27D2D58E1E3AF1C21FB7330AF1B98 /* PFPrimaryButton.m */; }; + 8634E397DB95B4A205CA46F9464A75F9 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = F363289FFEDBECB17FBC94ED2AE8C0EF /* AFSecurityPolicy.m */; }; 868BFBCD8263F71F8A14CBBDDAF5B748 /* POPLayerExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = 197635F0BFB93E63E82503F09B7AABBF /* POPLayerExtras.mm */; }; - 882F9183523311ED2A32898E978C05F0 /* Parse-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 73DEF6839984D1F48ACE568B6EC2E5EF /* Parse-dummy.m */; }; - 892C9CADE551523C8EDF800C648306EC /* PFURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = AE0BE1F355DE44ECCAEA5BF8D4526C5A /* PFURLSession.m */; }; - 896910FF549C79158B14DBA4B82DD337 /* PFAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = CAB37E3012ED80BEB1BCF0077E7E38F4 /* PFAnalytics.m */; }; - 897527170E376AFAE5654193F3308633 /* PFUserConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = F0662D5C0759804552360A67D1BDFBA0 /* PFUserConstants.m */; }; - 8A30DA243ACAA1A89F305D1AB23B2428 /* PFCommandRunning.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F1D200E550A12E3F43CD3F31E131DBE /* PFCommandRunning.h */; }; - 8A8C8E47DA7D2D2F3EB55930A84F9DE5 /* PFObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 2792004D5441520275B8E22F94BD8E5C /* PFObjectControlling.h */; }; - 8B3ECF63B2E1B777FC04BECEC1F7C0EB /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B072562DD642F896CD3C3B7CEF2911B /* PFCommandRunning.m */; }; - 8C29699238F02B904FACC35199216780 /* PFSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 96A60F95EF69292F16C085789B646687 /* PFSession_Private.h */; }; - 8C37D4BE18B21A9CD00B953782624248 /* PFSQLiteStatement.m in Sources */ = {isa = PBXBuildFile; fileRef = A1B4C9A06FB08BC3FE354D588CD09AF7 /* PFSQLiteStatement.m */; }; - 8DC7C47A7CC5950EC009B5618371C48E /* PFFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 82BCDD60CE06A0870E0ED0D853E05739 /* PFFile.h */; }; + 878393E04A1E6DF9BE7442BD2D45971D /* PFURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 31EF40A5583C282323AF183A3C383CBE /* PFURLSession.m */; }; + 878A11C8556D40E0F2D786C85E334456 /* PFConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 51E4264B938F3B426D4673C5853B2500 /* PFConfigController.h */; }; + 878FFB2B0C1CEBB717761B9969A4A64F /* PFObjectLocalIdStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 60ADD91AA56B1BFB00B61936E49D3CFD /* PFObjectLocalIdStore.m */; }; + 87C2F80153CA8A6BD8526B7DB9F4C1B8 /* PFInstallationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = EDBB5CF4F1A249E933B2469709D9F8DD /* PFInstallationPrivate.h */; }; + 880A556877BBB523DEE7001E1945C648 /* PFUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = 973D3E8805C0C339DAA7877098A99A7E /* PFUserController.m */; }; + 8853CBA2C0D6980916593B7808BC29BD /* PFOperationSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 29704F78778234595067B1E9C61399BE /* PFOperationSet.m */; }; + 88D9933BE4B375EB4C69530BC369E350 /* PFOperationSet.h in Headers */ = {isa = PBXBuildFile; fileRef = CCE6D23A84D4E85A3CD15B802A7AE4CE /* PFOperationSet.h */; }; + 8901469CC5AB2228CA972762BC61D3B7 /* PFObjectPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6423CE3A0CE5B59A5BF4B47922AB73A5 /* PFObjectPrivate.h */; }; + 892089BB4371D4B36ADC6A000613CB17 /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A3635CE479DD0FD03FB5589A75B62EC /* PFObjectFileCodingLogic.h */; }; + 8B1BD5642BA0A15B690E677651F808D3 /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = DBD6939AC0C49B37416ADF296729C43E /* AFURLRequestSerialization.h */; }; + 8B58E16D2F44D517D4CD0B5AFA479B54 /* PFUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = 28F300166004C87461905D9822D4C136 /* PFUserState.m */; }; + 8C09B8DEC14AE6744582DD2257C52CD5 /* PFRESTCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = FAAB83BF02473BC0A2415881560312DB /* PFRESTCommand.m */; }; + 8C19440562BFF499AC480DE8E608FF46 /* PFImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = FEF70A7046A494A88828C2736E5DB5BC /* PFImageCache.m */; }; + 8C611929D69DA8FDDD0C2D98B9E2FC02 /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = D44289371FAC5C4BED0F2F71337214A6 /* UIImageView+AFNetworking.h */; }; + 8CDB3264ED94C27CAA178E20CBEE8F8B /* PFDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 8277E669C14D90814D85CAF0D08745D7 /* PFDevice.m */; }; 8DF9960DD96F9AC25E32BFDD4A3B53B7 /* POPDecayAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C560616DDF5273CF7C53EF72EA6ED45A /* POPDecayAnimation.mm */; }; - 8DFE18ED9D0679395D555A5D2E1D6A61 /* PFPushController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7453E990BF208758602D5B39CB7388 /* PFPushController.h */; }; - 8E4E90FFCA09F9F8CBB4B3B02624C46A /* PFObjectState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 86D677D0061394762DEF101FECA5E262 /* PFObjectState_Private.h */; }; - 8F23210C8BC4F5C9280066640C17C69B /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 400935A9AE97EE38E7C59CBBD474FA32 /* BFCancellationToken.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 901C26F961EF48B307C4F82285380A0F /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 65F6F140EE00AE08D92C70E19B66F5A4 /* PFDecoder.h */; }; + 8E02FAA01BA3DCD0CA25C003FEC9C40B /* PFUserAuthenticationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 187E6237B057376167C9530E9E3D2597 /* PFUserAuthenticationController.m */; }; + 8E9C6364F65C04540B01F5F7864679FE /* PFPushChannelsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E49C46EB05E82BE8654545920C832EB /* PFPushChannelsController.m */; }; + 8EA3C689EDCDEBB6094FAB91A8FF8165 /* PFURLSessionCommandRunner_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D292B318B83D8D026CD2FAAAB59A62D9 /* PFURLSessionCommandRunner_Private.h */; }; + 8FE6DD5A880949235DF71570CD9AF86C /* PFLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = F1DD91DA807740D7FAB3167719838902 /* PFLoadingView.h */; }; 9088AFD3E6C678A42A8E0189F65F73B6 /* POPDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 90DA3C63E9AD758336342BC51C0BB859 /* POPDefines.h */; }; - 90F6AC61C0D614F4F3DD46C81171C8ED /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = CF335AC7E0E6EE3DD820467124C2102D /* BFTask.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 9195D181434FFDA880E3FFCCB38FE33C /* PFDateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = CF46F6E5A7E52A35C89851DED33A2176 /* PFDateFormatter.m */; }; - 91EDAEBEF03847E95272606E90B11838 /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = DAD2B1AEAEEE3B6167AA69B21E00DE2E /* PFInternalUtils.m */; }; - 91F2E7E0881F466BDF8CDDC26C780CFA /* PFQueryState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AA108C575CCC3045CF6EBEB7C2D35B5 /* PFQueryState_Private.h */; }; - 928177B9981A0BEC3E7CDCDA26DABE9C /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 39A27D94EB41AD237B4F4E722852F9B6 /* UIButton+AFNetworking.h */; }; - 93DF5CCBA43C09201E435ED14A2A0961 /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 93F14E13D1AAFFA4C781869593E6A6FF /* AFURLRequestSerialization.h */; }; - 947A48148E5A557DFCFE1524486F0748 /* PFAsyncTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 453A45902215CAB1B07AEEBCAEC35958 /* PFAsyncTaskQueue.h */; }; + 909CFE7FFE6FBF340F2838D4002C01ED /* PFPushUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = EA487C07C0F804790F5993CF5E3C6D3F /* PFPushUtilities.m */; }; + 91B64709D6B292496C4A6A225D4BB7CF /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 1315EBF14A0D75438D37ED2C3FA79516 /* UIWebView+AFNetworking.m */; }; + 92D43075C24E2442F4E3AD7C4DADBDC5 /* PFMutableQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 053C8DC2F31DA21D6E7CC1C8B47B7E7D /* PFMutableQueryState.h */; }; + 93986334C9BBABFA5A3090FE9494BE81 /* PFSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D78EE0601B6C0565B9C30B04EF23630 /* PFSession.h */; }; + 9475ADC7AEF8EB8886BA1A3EB222581B /* PFFieldOperationDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 877583FCE729451EBA709DD2F69EC026 /* PFFieldOperationDecoder.m */; }; 94BFE73B7E00A0FED987F553B0DCE94E /* POPAnimatableProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 313669CF0D1BF49C96C85FC593F4BC1D /* POPAnimatableProperty.h */; }; 94FACE1C5E4B42AB129DA7326E4E04F9 /* POPAnimationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F210DEEA777E0BF1995DC3570CC616E /* POPAnimationEvent.h */; }; - 9596BB57B15E0F32ADC0E88D588DB70C /* YALContextMenuTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7977EE0242992DA9A68D3DCB922B66CB /* YALContextMenuTableView.h */; }; - 9603828D1EE5DFF8E2FCC43A612C2F6E /* PFPushUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 39451587CFA3D7024575C72DA66A271B /* PFPushUtilities.h */; }; - 96397AB59008EA7392019A2EB9BCFE53 /* AFHTTPRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A6F04B61FAF09E9538B3AF6FD9536DC4 /* AFHTTPRequestOperation.h */; }; + 95910634F7060495109982E7841E381A /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED8D97DDDCF9842413073AA979D81CD2 /* QuartzCore.framework */; }; + 9600DCCC69D0F088EB727C5B1769B4B3 /* PFRESTObjectBatchCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 27C2859683043CE13C206444451CA55D /* PFRESTObjectBatchCommand.m */; }; 966900CAD39E8B592A35F8401549A86D /* TransformationMatrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E056FF5C4EC38A55B45FB52F395D72E /* TransformationMatrix.h */; }; - 97048C05413C62808681EA864F2667C4 /* PFFieldOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B4E5220C651194225EB11D393463146 /* PFFieldOperation.m */; }; - 9736106D305E2FACC163BE070DC6B12E /* PFRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = B3F7FC9A375F4CC184EF1CB84FFF2E2F /* PFRelationState.h */; }; - 99136C89548B177E60DD34A91B5ED192 /* PFFileState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D3E8D0F342FFF167540A96E017CCF674 /* PFFileState_Private.h */; }; - 991B10CE642953BD125D956E15532841 /* PFOperationSet.h in Headers */ = {isa = PBXBuildFile; fileRef = B1483642455FE93A36C64B730F27BCD1 /* PFOperationSet.h */; }; - 99B1982B53FDC71250D05FB8D0AC2C41 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6408EC1F7E48296B333659567543173D /* CoreGraphics.framework */; }; - 99CC3B1A726965F2F7E569FD3A7EA623 /* PFUserFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DA5FA1FA814DC209F9EABCD6B9119F6 /* PFUserFileCodingLogic.m */; }; - 9AA96E4A9687620F8C196ED2FABBA5DC /* PFObjectController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D97138DECF19BAFB63881A6D4EF92BF /* PFObjectController_Private.h */; }; - 9AEAE527EF5775E4554D7E8A48D2431B /* PFErrorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = AC7F1FE520C94B33E628A5BF7D802073 /* PFErrorUtilities.h */; }; - 9AEB47308349EFDFA683BF4A62CF195D /* PFPush.m in Sources */ = {isa = PBXBuildFile; fileRef = 62FAE8C508439F783E07B639E62E5388 /* PFPush.m */; }; - 9AFC0F0B06328DD11F5A269FC9D061D4 /* PFPushManager.h in Headers */ = {isa = PBXBuildFile; fileRef = BBEDFD1C6F661507D70B9C73268193B3 /* PFPushManager.h */; }; - 9BE55D00A42730AF0221D2294926610C /* PFWeakValue.h in Headers */ = {isa = PBXBuildFile; fileRef = BA10EEFBDA4AD314FB6D71B9DBD76FB7 /* PFWeakValue.h */; }; - 9C526742FC642C90CD9887187FD9478E /* PFBase64Encoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 568A6DDB145B9BE497001F309F81C25D /* PFBase64Encoder.m */; }; - 9CC680543CB311240352F92FB2493BB2 /* PFOfflineQueryLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 0862542F3708CEA8901318AE4F5FE02B /* PFOfflineQueryLogic.m */; }; - 9CDAF8961B1E25C066FAC4D7D44433EA /* PFURLSessionUploadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = AA5D3771AE76625915E333CFABB45A05 /* PFURLSessionUploadTaskDelegate.m */; }; - 9E5744C6E239498952CB6C2AB7AB8573 /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 38E00AD6C99A24C72256073EDD208D3F /* PFAssert.h */; }; - 9E7CF062169C9A81B37510D0AD9162C2 /* PFPushUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = DAF8AFF71E17239BC9D066B413214C0F /* PFPushUtilities.m */; }; - 9EED9C8A845D06EE53C1403FBFB196BF /* PFNetworkCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B131E3C12FA20F7C590D94EF645128F /* PFNetworkCommand.h */; }; - 9F2809547901C1650E2A6E3F1F11982C /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 780EF3BE11B2381FB28EB629FB8CBC29 /* PFURLSessionDataTaskDelegate_Private.h */; }; - 9FD4177987850C6E6E37BA911CDD3C1A /* PFRESTCloudCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 105DFF60164FDC71E3359B156DAE0937 /* PFRESTCloudCommand.m */; }; - 9FF02193886279AC96AFB7BB7D21DDE1 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D7C31A8D9DC68245949CD79BD5AD586 /* BFCancellationTokenRegistration.h */; }; - A04091E4AE50036E9788A73F231A5E7E /* PFPushPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A60CF5CEA93C2F6926C54CA3679A1556 /* PFPushPrivate.h */; }; - A0BA6E93BF48588EBC097ACE78DA328D /* PFRESTQueryCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A747E0C0BA89EAF9D9C9B35EA62B097 /* PFRESTQueryCommand.m */; }; - A0C4E0AE86CBEEDB70512630A54C1A74 /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 814B6E4C1E3AEC20607C2A43AADF132B /* UIProgressView+AFNetworking.h */; }; - A1984ACB538B0EB2EC33303455FF996F /* PFKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D4EBEE47CEE4A7801385DB1D8C88383E /* PFKeychainStore.m */; }; - A1EF906190CCCF5E5F778921BB29D04D /* PFDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 14BFF77A40EB6D31D0D53D242A01BED0 /* PFDevice.h */; }; - A20B7AB30DBD8368549A2ADD1834EE47 /* PFPurchase.m in Sources */ = {isa = PBXBuildFile; fileRef = DD428B827A37AD34DF77CC5C561BCE0C /* PFPurchase.m */; }; - A235BB018AD7FAAE25C4A295FCC5A8BD /* Parse.h in Headers */ = {isa = PBXBuildFile; fileRef = 12BB94C26636A7E690216E2AEEFAF264 /* Parse.h */; }; - A2C9CDC9EF3AFD417433B15BD6F3ED5C /* PFMultiProcessFileLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 372923DCA1E5BFDF1DBD57E93002E783 /* PFMultiProcessFileLock.h */; }; - A341920891C64694F15002A14274DBD0 /* PFObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = E0041782152C1ABC1F18B164311EAF2E /* PFObjectState.h */; }; - A57A790BA267D5575D66FBA7194C9C9C /* PFAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 37DCE2246C320FA0B8BF9CAD3758AE71 /* PFAlertView.m */; }; - A588DBAF2FF022F204CD18AA9E6FB568 /* PFRelationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = D15D922CCB9D2F0B65F44C7FBFE53EBC /* PFRelationPrivate.h */; }; - A6128B349568C6B56EF5FD2C22D0D98F /* PFInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = 57B1DA40C85BD720B286FFF8C7EA6F91 /* PFInstallation.h */; }; - A7A4C7B12C8EBCD1DD511612DF60BC62 /* PFRESTObjectCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = CB4444A178F9CEC2E097C90C7D351E7F /* PFRESTObjectCommand.h */; }; - A91F60D12B823B21A59FA96BC5AF0825 /* PFDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 0823AECF540B112CC0DD23CA1EB33F1E /* PFDevice.m */; }; + 96AD11F17A800AF7904D96EAE89192E6 /* Parse_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 01D98518A65B6A9D496DAB55A24824E7 /* Parse_Private.h */; }; + 9710BA2A332B179BA2827D289D2453F1 /* PFPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 3585F7A481D939D1D1C3294775ACDBE7 /* PFPin.m */; }; + 97A58492910A00B0B6A1149CB7B81FF7 /* PFDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BF42B9B3BCA6AC0E4C7A5C4A8D56C76 /* PFDevice.h */; }; + 98C36B42CA7EF2A5C43647355E1590AA /* PFUserFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = E04C49F5564B931B972E6F826A732529 /* PFUserFileCodingLogic.m */; }; + 9903DE555B85044677A815ACC47B5685 /* PFACLState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C3D77BC909D77D1BFD9EB010608B1E4 /* PFACLState_Private.h */; }; + 99FAD7969112EB91391E4535089F7A27 /* UIView+YALConstraints.m in Sources */ = {isa = PBXBuildFile; fileRef = C398F4947CB112102A0ADF8368272495 /* UIView+YALConstraints.m */; }; + 9A50C636573A1162D6620C5414D09BD7 /* PFRelationState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 57C18DD90130326F25EB38A9F343D5B5 /* PFRelationState_Private.h */; }; + 9A90E8F4BF92C990DE4167054E85D654 /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = AC969BF0B09B32631651A85209580443 /* BFCancellationToken.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 9B3D878BE422C022F78E6F3B8126F7EC /* PFPinningObjectStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 5359BA092EAD4FA522BBB80FC27C145E /* PFPinningObjectStore.m */; }; + 9B60A3C0A1E286E8398F7595B38C5FA8 /* PFRESTCloudCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F1B395CC49D380489BB0BFDABAC35D9 /* PFRESTCloudCommand.h */; }; + 9BAE39B1C12DF4038483AD24F4AEE5E1 /* YALContextMenuTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 37763F17F64B25496F9259C6C59F7CB8 /* YALContextMenuTableView.h */; }; + 9BB97D7622FDB67B314F93646C6A21A6 /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 0024E7BD94CF93AC26F575C1C8DDC77A /* UIWebView+AFNetworking.h */; }; + 9BBBA20A0D257B239AC0CDBEA6F29BC7 /* PFRect.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A835C10155FEF5DCB5D5E43843849B7 /* PFRect.m */; }; + 9BFE33D3520D009C6EB9E8AB56FE2752 /* PFCurrentInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 752312E41E6828D9DFD974503E6DA356 /* PFCurrentInstallationController.h */; }; + 9C967AB082218D0703E71E7522D2DC20 /* PFObjectFileCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F9ABD34BEBC96F253CE102411DABDED /* PFObjectFileCoder.h */; }; + 9D84517F42EDA4E47A670724BEE974C3 /* PFFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 89362786CE0111AEDE7DA9FACAB648E7 /* PFFileManager.h */; }; + 9DA42084513E9EDEC1FD2877C7358DA4 /* PFAnalyticsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DE095F15D0DA44B27DE6F3F40B748C5 /* PFAnalyticsController.m */; }; + 9DFB0B43F8AD5124869FA8B0C49518E6 /* PFObjectState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FF0B9CB696808B8C85640C9F7180BB8 /* PFObjectState_Private.h */; }; + 9FC0A759B553E4C1DA3D0F5B50ACEE0E /* PFInstallationIdentifierStore_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0691E15B84DC22B58B24454A662AF44F /* PFInstallationIdentifierStore_Private.h */; }; + A06391D968AFE47F156783742F646922 /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = BEAFF13EAEE726C139773BE3860F7AB6 /* AFURLConnectionOperation.m */; }; + A13C4BB86354DFB46C4C5481307883E5 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D8F3DA883848E2DCAD665B10531671C /* BFCancellationTokenSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + A1B79A413EF7DAA8A4EB9CA5A8BD08A4 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 26F7C6740719BEC436C7CD3912C491A4 /* AFURLResponseSerialization.m */; }; + A1E6CFAC51C967076FB1942859BCCCA2 /* PFObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 01AF5FDFA32CA58C779C40A40EA3D2AE /* PFObject.m */; }; + A1FBBD9D4DB3E0B403F55E475200D922 /* PFMutableFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BE6A6845F3586D10E5408C9FB591328 /* PFMutableFileState.m */; }; + A2473BDD6B4DF7982A694061166A7FD9 /* PFOfflineQueryLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 29883E2F7FA2CA83E9313FBE44CEE849 /* PFOfflineQueryLogic.h */; }; + A2A4F23CEEDDE6AC6AB5E12823B090FD /* PFDefaultACLController.m in Sources */ = {isa = PBXBuildFile; fileRef = 110EB87EF49E8CF2B18E11692AC1E903 /* PFDefaultACLController.m */; }; + A34DE9EF9C14F3296963A55768201841 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + A352DD166FE10E5DB1BFA5A59C2766FB /* PFPropertyInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E495F30B2C591E5AD9A1CC249901ACD2 /* PFPropertyInfo_Private.h */; }; + A3CDFB8B5F9558B4914FDAAA3DEF0954 /* PFGeoPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 39673E55062D1B61E621B82E444AE6CA /* PFGeoPoint.m */; }; + A42F547AFB6AD220F9DCD4EDF6E6689B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9FB80727EBDBCBDEEBCAB45A1785BAF1 /* UIKit.framework */; }; + A6348F02CCC5CBD996733B7A6BC7B8F8 /* PFPropertyInfo_Runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = FF73455163A4B9C060A3B73C44658BB4 /* PFPropertyInfo_Runtime.h */; }; + A996E3E947C6267CC2641F8BCF6D3A0F /* PFRESTFileCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = F996BE0C38219298C5E7E92AF1A4B595 /* PFRESTFileCommand.m */; }; A9B701428585304B432F6FD45D7EB707 /* POPAnimatableProperty.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9565C73D5D4BE79747E60DCF1557E71 /* POPAnimatableProperty.mm */; }; - A9D0D78B1F9703C282B64100E9E8926C /* PFOfflineQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DC00CBF82C85912449AE191DBEC053D /* PFOfflineQueryController.m */; }; + A9F58BD8E15E32FE2F46C820F1E48E66 /* PFACL.m in Sources */ = {isa = PBXBuildFile; fileRef = 891A2E0E0FA20C1648F5C841F3E564AD /* PFACL.m */; }; AA0189A6FB9572B5BF87E3B0DD1F872C /* FloatConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = C091E831068E3E504A40AC6932B39C87 /* FloatConversion.h */; }; - AA14B649447F0CCDEE28838153CB8ED7 /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DDA8143D2C09DF9986817461C4DD498 /* UIKit+AFNetworking.h */; }; - AB0423F50C0C64EEE86C2680EC9F02B5 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB9D45B957B79F1459ABF1E81F01530 /* BFCancellationTokenSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - AC42EC854B284673B3E2CA42FD46285A /* PFConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D45F61B78D4419060D26A7EBAF70EC2 /* PFConstants.m */; }; - AD2E8FF8584E338AC854AD47224895B0 /* PFEventuallyQueue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CA572C4AE94CB9AC2FF8EE80A7E1179F /* PFEventuallyQueue_Private.h */; }; - ADD444672255653A7B0DE3C76FE9DA9B /* PFMutableUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A28796B1724F0F5B766249296CA182A /* PFMutableUserState.h */; }; - AE56E1589FBE716D4F7C22543A5A4C71 /* PFUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = 8072BEAB5E3DFBED370817399B610731 /* PFUserState.m */; }; - AFC728CC114630A6E88C55D3423F5B35 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 35568ABE019B8ED099EFF07CE242DD67 /* StoreKit.framework */; }; + ABBBC278EBDDA40702E0436212E86E9F /* ParseUI-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 91C2410DA547032FC3DC2AE3C259C844 /* ParseUI-dummy.m */; }; + ABC087DE99A9A9EB06CA4FC2E6D5D09E /* PFImage.h in Headers */ = {isa = PBXBuildFile; fileRef = B6715EFDF271A27FBC8980E595A56F18 /* PFImage.h */; }; + AC49A05B1513ABEC3365D1474436C6D1 /* PFFileStagingController.m in Sources */ = {isa = PBXBuildFile; fileRef = A1A2A66F3FC79A3E2778CF485801E64C /* PFFileStagingController.m */; }; + ACDDCAAF4C46330AD2D2AB16BFF02C4A /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BA57A433E33E9125A8347D57D7F766F /* UIActivityIndicatorView+AFNetworking.m */; }; + AD170D2AB15EA449A8AFCBED2A2564DC /* PFImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EDB22FC9E38F0BCE867A085A703C3C0 /* PFImageCache.h */; }; + AD28999B0D50D3B103822C3AA659D6D9 /* AFURLConnectionOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C5CBEAEA564EF7FD09CFE53392CC6424 /* AFURLConnectionOperation.h */; }; + AE613AD929239B7E4D5009D4AE5D3944 /* PFEventuallyPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 96B412F3169F62969DAC6A85BFBE68F4 /* PFEventuallyPin.h */; }; + AE61BE4F170E46BCA8557D4BA4CD06A4 /* PFInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = E615EEC282CDCEE0D432D51BEA8F872B /* PFInstallationController.h */; }; + AECED6B3110DF267738AECF5E1F6A7F0 /* UIView+YALConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = EFF1793AB041ED2DA9362386ECE91641 /* UIView+YALConstraints.h */; }; + AF63656DC5C09D391A445E07384ABD71 /* PFUIAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D0D83D976316A1E4675C57A59FD08D7 /* PFUIAlertView.m */; }; AFEBB8DD2F176DBEF3E1F0FFA6FE7AF8 /* POPCGUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0A9ED47A0EA56543BEB2F83DFD6122C8 /* POPCGUtils.mm */; }; - B038216F0632C36A1370F7C881A09001 /* PFHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 869C2B98A84E7A66ED53252EEBD534C7 /* PFHTTPRequest.h */; }; - B07458C275E7B87DEAF687642BB4EDA2 /* PFObjectSubclassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DFA1FB737DEBE392F5582656ED1040B /* PFObjectSubclassInfo.m */; }; - B0CBDEF8AB0A74F25C79B87615C2A832 /* PFQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = B7C407A664499E7354D9C1CCDB113A59 /* PFQueryState.m */; }; - B1905D70D1237C127EBBFCC391721F35 /* PFPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA3D2B13C2E276A13164FD9D412F89D /* PFPin.m */; }; - B255A029FDCAB0B2E6F6B106AC5BBF91 /* PFTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F5D0107B7A3A38D5B48854CDBEA6CD3 /* PFTaskQueue.h */; }; - B3E990CB8A89D42E7E9F7ED33D39721F /* PFMutableRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 372FE1327079A6911530ABFAF7BF2E68 /* PFMutableRelationState.m */; }; - B4C1CDF486FF24005182DE7A7BD1DF95 /* PFInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = FF3D2A57C25C1CECF52F0872DBB55F05 /* PFInstallationController.h */; }; - B4EBD2930890E190BA160A6B52C9029E /* PFCommandCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 24E60B787A9F785262AC44B47108D70D /* PFCommandCache.m */; }; - B54F3FF3E7274202D9C8F1E4AAC09873 /* ParseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = FC0150E534DA14510CC9BC5D0C1AFFB3 /* ParseInternal.h */; }; + B01375E6D33FF39CFC3AE8CB7D70AE2F /* PFKeyValueCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6744DE3000BEEB7DA4D7DAB0E9D6BB57 /* PFKeyValueCache_Private.h */; }; + B09E3CFB154075BCFE6AEA5F5D9EE8F5 /* PFKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = F820E3F0707C3FCB027CE5B4848D8564 /* PFKeychainStore.h */; }; + B0C4C32BA8DE1D5FE312176AC637848D /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 91FD3566B5AFA4DD010BBD80305BC28A /* Bolts-dummy.m */; }; + B1C7B0AA9E3B2A03A251EE453FA0DD35 /* PFTextButton.h in Headers */ = {isa = PBXBuildFile; fileRef = B2726742F4F01872C36F74F3A273125E /* PFTextButton.h */; }; + B35B52D2F3848F1D23A4734E8BA8CD25 /* PFObjectEstimatedData.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FAB614DE9EA103FF9C22D630ECA7C8A /* PFObjectEstimatedData.m */; }; + B43AAF16FE9A853D23B3997FED1D67C3 /* PFHTTPURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = F3FC1F5573A43949438409A8D53778C3 /* PFHTTPURLRequestConstructor.h */; }; B5B86F0561840C9F3408D9A3CE3BADD0 /* POPDecayAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = B0CE575CDDE0B1795BB8B88E0B49ACA0 /* POPDecayAnimationInternal.h */; }; - B5CFC6CC0CF004E986EEC23557FA0701 /* PFSubclassing.h in Headers */ = {isa = PBXBuildFile; fileRef = BCC77513019B8BF9A882928F74C52424 /* PFSubclassing.h */; }; - B62A1615577F1DF5C0987D382AFD154B /* PFObjectBatchController.h in Headers */ = {isa = PBXBuildFile; fileRef = 38C5CB3B26D08AF88F501A05B91F10B4 /* PFObjectBatchController.h */; }; - B642AE3024EF50F194A5BC047EECEB71 /* PFCurrentInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 009D766A60F44D81650E505380CF6EE5 /* PFCurrentInstallationController.h */; }; - B69E68EBE8B2C725353EEB0041CBDBF0 /* PFKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = BA733732E0D2D37C0A92D946DE2A9EEE /* PFKeychainStore.h */; }; + B613283A3EA71849002D5B8A87D39CD8 /* PFSQLiteDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C9F6E5345A39FC5550216E4F65A976B0 /* PFSQLiteDatabase_Private.h */; }; + B68778AB3A22AE8EEC182188399F709F /* PFPropertyInfo_Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = AC7C43830B8D324B7BDFBFD2376A6F01 /* PFPropertyInfo_Runtime.m */; }; B6DA545595D3CE47BC8F81E673889B4B /* UnitBezier.h in Headers */ = {isa = PBXBuildFile; fileRef = 96015F1C746803D9318614B277F71BCB /* UnitBezier.h */; }; - B7EAF0146BF7255844B4382778C1DCC3 /* PFMutableRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = ECE13A0CEBDF1FFEEF6A3A9D07298478 /* PFMutableRelationState.h */; }; - B87F4316CA745157952D0E957CEF8D0F /* PFMutableObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = D5CF558DFE9FECD0D4DAD9727F9E7447 /* PFMutableObjectState.m */; }; - B8B9F34E2BBC7F8F7715F6851457261E /* YALContextMenuCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 01D2ED1DF56FF3AE05B1515043302F71 /* YALContextMenuCell.h */; }; - BA1F5D0A6C8651ECC8F39A20205C2782 /* PFUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E8BFD8BC695971FCCBA291EDD68F350 /* PFUser.h */; }; - BA36862D7FCDDEF2FF3F44E4FCF1FEC7 /* PFMutableObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = B58A5A84AAAEBE1A391E99E9CAED0FF2 /* PFMutableObjectState.h */; }; - BA645FA6D6E0D66E9CF92B04F93777DD /* PFCommandRunningConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 48DF685D40431A00C7B7572D23340086 /* PFCommandRunningConstants.m */; }; + B88C872B4DC8DBF56B6C9AF592D0A1CE /* PFUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = A72EE5253DC8D7B55D95796E6F4F6DD3 /* PFUserController.h */; }; + B92A4315EE32C56D189C572C94666714 /* PFSQLiteDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = EED19F37D13868499C43F13264741ADA /* PFSQLiteDatabase.m */; }; + B93D433EE1E23B2A4114703E47EE6F7A /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F447819CD0C3DF808D6946A6364F969 /* PFEncoder.h */; }; + B975E56752236DD4E997D0291C621AC0 /* PFQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = B9680BBDD9701CD4FEFECC8FBFF038F0 /* PFQuery.h */; }; BA9989C7128E968BA7D20CFEB392AE9D /* POPBasicAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 212068113F29FA47D17730ED388F8706 /* POPBasicAnimation.h */; }; - BAB47A67F4485EE6E586A25B834A2801 /* ParseModule.m in Sources */ = {isa = PBXBuildFile; fileRef = A011CA3F808702224552F151CBB37A51 /* ParseModule.m */; }; + BAB4F191AD2790A60EF82E7261BEA3D9 /* PFQueryUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 89E660FBA2FA907C548F83F17BA9CF56 /* PFQueryUtilities.h */; }; + BB111D0ED255D3DC41C59A5EBFAA3660 /* PFApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = B5076516C4CA52DBE232087A86EF876A /* PFApplication.h */; }; + BC32FB211EB444652B6799002CA68C02 /* PFCommandRunningConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 05953FCDA42C0E7323C7F9B5AB886535 /* PFCommandRunningConstants.m */; }; BD6626643DD9C3A12AB86F9361EC89DB /* POPAnimatorPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0476012CEBFEB22B5F0926994E6AEEE3 /* POPAnimatorPrivate.h */; }; - BD7119081B9A134A53DCAD9949D575C4 /* PFSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C6969F6DC20ED490487711A80935900 /* PFSession.m */; }; - BE032518FE863AF44351DDE1D6844470 /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A5849314580BC3F82E4A799104E87FE3 /* Pods-dummy.m */; }; + BD9F08D593AA75F289F00EE82458F3F9 /* PFBase64Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = E6B87160188F7023D2B49F9B91DBAB94 /* PFBase64Encoder.h */; }; + BE22EB1A8780D81AABB9D2CD0CEA8E18 /* PFCoreDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 2713B9DB4119C31C77089DFEF6EE5B0E /* PFCoreDataProvider.h */; }; BE267A18590772AAA04953604BC7B310 /* POPAnimationExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = C1B6A53BFD919966B87CD6FBFD89CE1B /* POPAnimationExtras.h */; }; - BEDAE19BB304069C127DED5676C08866 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = A72A7753E28C0B037F3759A7CB7DC9CB /* UIProgressView+AFNetworking.m */; }; - BFA8D7680070FE36E35FDA31CD18B68A /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = BEAFE0D908EC855629B1121D957A354A /* ParseModule.h */; }; - C050B90E44F1D7D1B242336E9ED81E08 /* PFPropertyInfo_Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = 97ADB30A5976DC7FE832E68A415B22F8 /* PFPropertyInfo_Runtime.m */; }; - C0CD48B4F4A7ADE0E8F3763065D58B67 /* PFCommandCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A28218952E226A9395672AAF9BB98065 /* PFCommandCache_Private.h */; }; - C1570CA337867BEF23B4AC733E51D4B9 /* PFKeyValueCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E2E03FFA5C12908D09BC583858570B6 /* PFKeyValueCache.m */; }; - C22396DE37E095718482FAC4D8D796D1 /* PFHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A3138F383603A594BF1120840E69F93 /* PFHash.h */; }; - C2B622D57413084005AD4FF3FE3B4CBE /* PFFileController.m in Sources */ = {isa = PBXBuildFile; fileRef = 676C7A56F303C34B831F1F015F05812E /* PFFileController.m */; }; - C2E44B209546E7866532737094B259F1 /* PFObject+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = F0FF6176EC466320C2C4D25100A1B61E /* PFObject+Subclass.h */; }; - C35492542D744906958BA9387A6DEC2C /* PFPaymentTransactionObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 8510965E6696177882F8683FF279CA62 /* PFPaymentTransactionObserver.h */; }; - C44757A96D797254C3E4471D7DBC7A12 /* PFCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = BB51AB9AA27CE8D0A85E5690F23CF6EA /* PFCategoryLoader.h */; }; - C453240E137D151B7692C7F7F2061B9F /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AE87F34D52CD28E7113F03F7CEA01F06 /* Security.framework */; }; - C4CF94A0BBEAE79C88C879094C1FF6BB /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = 58143C3358B762BB4DC15795BD82B8B9 /* Bolts.h */; }; - C521D37D942FE201D29B17ED2BACAFE1 /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C8DC7559A9E804216A7455574ACC2FA /* AFHTTPRequestOperationManager.m */; }; - C5B8E5BD9C4C8E0AF430CD461992ACC0 /* PFPushController.m in Sources */ = {isa = PBXBuildFile; fileRef = B1E9EC0D78FBC6373DBD668B202BBA25 /* PFPushController.m */; }; - C68996C6D2A15E462A0B94666E1B17E3 /* PFQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D7ADA7673FDA922B924DB960BC45FEE /* PFQuery.h */; }; - C6C48576B6391837714FCEF3440243AE /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A16D1432732F853E3D7B39B1DB383E /* PFRESTConfigCommand.h */; }; - C6E0B8D8F68167D1CEA74DEAAE59F09A /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 5038524C4AA89B3EC607E5B47A706CCA /* BFTaskCompletionSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - C7344A2F05279C90561EED1D8EA489CD /* PFOfflineStore.m in Sources */ = {isa = PBXBuildFile; fileRef = B0E75CCDD1A5217E3601BF092D5385C1 /* PFOfflineStore.m */; }; - C7DF7CFB90482868050B69FEF4373317 /* PFCloudCodeController.h in Headers */ = {isa = PBXBuildFile; fileRef = C1555BCE0D8C4B718BB72214683D3907 /* PFCloudCodeController.h */; }; - C8E94A5768C9FEEDEEBE2D9513D7BD36 /* PFOfflineStore.h in Headers */ = {isa = PBXBuildFile; fileRef = FF6B3C0F9FB537B2DB4C17A15E8F06D2 /* PFOfflineStore.h */; }; - C910FDABF6D86FF242B7CD5A85FE7B94 /* PFRESTObjectCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 5775915FCBF7CB8AB7E50C1474A500B5 /* PFRESTObjectCommand.m */; }; - C91D09FFB740401B045D4AECAC5C997E /* PFInstallationIdentifierStore_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 92C8318F0774CE0DB5B5FA3C7961C69F /* PFInstallationIdentifierStore_Private.h */; }; - CA9B7B7B520E355A2E23B0D0EB8302A9 /* UIAlertView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 70A550454DC97E123E16BD631BDAD95C /* UIAlertView+AFNetworking.h */; }; - CB4CF87BD5935737F20BDF0C99B80495 /* PFFieldOperationDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = BFBC36D6FED37ED769BA66522F1A639F /* PFFieldOperationDecoder.m */; }; - CBE51D66F657DC502B81442C46F7220B /* UIImage+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = E58FC77B8AC9BB8CB123B072D0E7AD2F /* UIImage+AFNetworking.h */; }; - CDCB55B6E5A8A71A543987CB14B2045E /* PFWeakValue.m in Sources */ = {isa = PBXBuildFile; fileRef = FFE3BF2FE5A767CB3A9F0B32672156AB /* PFWeakValue.m */; }; - CF7A23F2E61E57A9F6E76E358E956306 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - CF9126AE266CD109325E9779E8989D52 /* PFAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2A46AA281CDF574C18A7B9311A6C93 /* PFAlertView.h */; }; - CFDDEDCA97A5F84CDDD5A6F1BFFA2243 /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = 70864853E727E60E7B86865739D2ECED /* PFCloud.m */; }; - D149C0E66489B8A63BF8ED2BA213DF12 /* PFObjectFilePersistenceController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AA0E5427E9EFCC96AC0F8CED0FBEEF4 /* PFObjectFilePersistenceController.m */; }; - D1ED7907552DF919137E30AEDBAC4AD3 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = D0E74CB04A2E39384A95EDA3500A04D2 /* AFURLRequestSerialization.m */; }; - D22255492F43BE2B59EDB2478E8C5818 /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DBD87B92425DF4F2F580DDE78C400947 /* Bolts-dummy.m */; }; - D3D1A0ACF80E0131F85BDE9E7D7E6303 /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F53F9E343FFBC0260E05A6277C25495 /* AFHTTPSessionManager.h */; }; + BE4F6803EAFE5A8C677FC5FE6FA8C4EF /* PFProductTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = BDF771A5145C765EE70F40CEBF7C3075 /* PFProductTableViewController.h */; }; + BF2D3113EF4F55028D7C0B93420D341F /* PFSession.m in Sources */ = {isa = PBXBuildFile; fileRef = EEC0387E8F35C7BADBD1B4D6A482702D /* PFSession.m */; }; + C03EBBEAFE95FD7E24990703FD68B77F /* PFProductTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3662B43E3AABF39CEFE44FA79A74BB70 /* PFProductTableViewController.m */; }; + C1D1A848BEBCD76FE7DEAC09CD97E421 /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = C074D541BD181F718CABF5FB5728F620 /* UIButton+AFNetworking.m */; }; + C244270D3D5EA67A2B254B493FC1E918 /* PFProduct.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E40D034FA34D8F3FB9563D4D5DE2705 /* PFProduct.h */; }; + C26DFE0E4BEAE15D72A60EEF9AB2119F /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = F1CD895FE6B420EB0729480BD79BE4E3 /* AFURLRequestSerialization.m */; }; + C2807FECCEA754DD6E77EAF01CD585C9 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A055D518CCF1B206751FCEC2DE32A701 /* AFURLSessionManager.m */; }; + C2AA7D8CD8800BA5C772B03344DCDC37 /* PFObjectUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 590E38452847AE815D9FF8AD36B38F82 /* PFObjectUtilities.m */; }; + C3538059D8FE0662CEE3DE41F3732317 /* PFAnonymousAuthenticationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EDD8E08548221489BFE965864FB3566 /* PFAnonymousAuthenticationProvider.m */; }; + C48FB5CC8A114D5BBFA5B5C6D2C6B7CD /* PFAnalytics_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B17307D8D5E9068BF81147ED3B8E9B3 /* PFAnalytics_Private.h */; }; + C4FA14E2FF9F8A9254BFFCDF71E56DCD /* PFLogInView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1045C6BD9178A7E123E2001F4061D8EF /* PFLogInView.m */; }; + C5EFDF7F763E623AFD30780B1982869A /* PFResources.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F8D3DC3F913BF4E10E3FDEBC2B57B62 /* PFResources.m */; }; + C5FA827AFA2784D7FB156DBAFD92012E /* PFCommandRunning.h in Headers */ = {isa = PBXBuildFile; fileRef = BCF178329E80A7C9788F12D35E84DE11 /* PFCommandRunning.h */; }; + C6BF85B2D68FF8596833EF3EF1BD50FD /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = D43B8CFF328D2BE6C9755924B181CF2F /* UIActivityIndicatorView+AFNetworking.h */; }; + C6D7800441271BE5C55F573916AA3EF5 /* PFCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = F1B7F591E729212EB6BF33EF88BA1981 /* PFCollectionViewCell.h */; }; + C6DAC0A70B2D4465FE543E1030E497E5 /* PFKeyValueCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 00513F8B5C023D9B6A67A40068570F19 /* PFKeyValueCache.h */; }; + C6F4896A69483CD338E2C278DB82D2BD /* PFFileController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2FD4E699963B718746F80595602968BA /* PFFileController.m */; }; + C6FAED6F757456167037A450C730376C /* PFURLSessionDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 3841F19677B4987758E47C8053644CD1 /* PFURLSessionDataTaskDelegate.m */; }; + C7E834F143C71B5C4194641E056B1BDC /* PFPurchaseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = DA89BE341EEC7242A78FEDA064807901 /* PFPurchaseTableViewCell.m */; }; + C7FC18B8A3E8B3CB9F135C9A31A5453F /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DB47428B78601AEE33C5C5D52E2D994 /* PFUser.m */; }; + C8C216A6FB717E67F1D6A90342AA8F77 /* PFPinningEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = AD21854D02782DB6A5EB737BB86B1861 /* PFPinningEventuallyQueue.m */; }; + C9A2FFE39ABD912BB7835CC83FDC9332 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + C9C11463ADF18ACBC73F8B748202928D /* PFPrimaryButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F8A7EECD6F3077A3B0FC86D271300A6 /* PFPrimaryButton.h */; }; + C9D17B038AAFEAC1050C417F57B02FF6 /* PFTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = D6974501F00D5E601A051C644A12DD71 /* PFTableViewCell.h */; }; + C9F67D469F5419E62C593ABA7DEB7197 /* PFConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 68500105927A08A48A3DA8C59A9B2E12 /* PFConstants.m */; }; + CA324992089BB916C0BEC4C99E3FF138 /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 58B5D2F2CD84279F74BE531861A83308 /* UIKit+AFNetworking.h */; }; + CB29E081C9F6BF7054D06FC63D3953F2 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED8D97DDDCF9842413073AA979D81CD2 /* QuartzCore.framework */; }; + CB41F2C692487CE5EA9C680B4C3CF354 /* PFPinningEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D3B7834060709F0758DAC799C640461 /* PFPinningEventuallyQueue.h */; }; + CB7DC9EDB7454CF34FB6251AB98972B6 /* PFWeakValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ECBBFC9244A3F50EA402F166DEB6DCA /* PFWeakValue.m */; }; + CB8894ACF0D1C6DF4BFDC392C293F25E /* PFAnonymousUtils_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C2A808722282E883FC6468CC1082F40D /* PFAnonymousUtils_Private.h */; }; + CC2AA775E69BED51AA50FA0982F06DB7 /* PFHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B440A60956319D37497AA73807B5A30 /* PFHash.m */; }; + CCDBD66664BB0CA36EBE89388868E078 /* PFImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A595D297E140ECE32592BFEFC293B9A /* PFImage.m */; }; + CD005BD069DE3A3806BBE81F6B4A4F20 /* PFAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 35F2BD9CCE69BA4DEBCD6F1FA72E072A /* PFAnalytics.h */; }; + CD1A2408C77C3419D1D374BDD5A858B0 /* PFProductsRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 75302811ECF5EDC235B0DB8B86291C2B /* PFProductsRequestHandler.m */; }; + CDC08305C998377AA557005E01DA48F2 /* PFBase64Encoder.m in Sources */ = {isa = PBXBuildFile; fileRef = CDB5EF0EC43B47E829CDC47DBC09A531 /* PFBase64Encoder.m */; }; + CE8ED072C6640F4DC793DE5F3CE674A1 /* PFAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = A543A68D1F635C787AFF440419B704A2 /* PFAlertView.h */; }; + D08B147823BE4AD36715360307952DEA /* PFHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C2055953D9AE502AA512CC756C8E07B8 /* PFHTTPRequest.h */; }; + D0C0E6DF830E9771B4A9ACA48BD1C2FA /* PFActivityIndicatorTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 161C522EE324169DC559AED510116C63 /* PFActivityIndicatorTableViewCell.m */; }; + D18540CCAD8048FDB4C2A9918DB92A9F /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = D4C9535D0DCC9CEAF41CAB114CBAC573 /* BFTask.h */; }; + D18CC3FCF71873622CF5F327A568B8BE /* ContextMenu.iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 56B759F1D8C8CB47D727B586BB4AC069 /* ContextMenu.iOS-dummy.m */; }; + D1EF657035114EEF42F10196C800AAB0 /* PFACLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = AE63CC96E753C252BF25110D864F48EF /* PFACLPrivate.h */; }; + D24AD1C1A16875A09867EFDB66DD7A5C /* PFCommandResult.h in Headers */ = {isa = PBXBuildFile; fileRef = D497EB0E3C5055E7FFF959587818764C /* PFCommandResult.h */; }; + D33372B006CA340C5A4A54110B69427B /* PFMutableRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 70DB3EA0DDEFC1284BB14523B754EDA6 /* PFMutableRelationState.h */; }; + D404E2D7015A2B76AABE42C287FAD36F /* PFQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = 506FFF3B464AAC43A21AD8404EDB0408 /* PFQueryState.m */; }; + D414CFD05FE420603C064C7307D13611 /* PFPushUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 17DC80DA8AA3988FB60EAEFDA4C6CAC5 /* PFPushUtilities.h */; }; D4224969BAFBC6138FFC872CCC829FB9 /* POPDecayAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = B0F7BCEE9A871E1193D694931FA31E17 /* POPDecayAnimation.h */; }; - D4B06A600FA1DBCBB68ACFDE2E554753 /* PFSessionController.m in Sources */ = {isa = PBXBuildFile; fileRef = CF35E714DE566F845ECEDF6AE894C5F0 /* PFSessionController.m */; }; - D4F7F5F0D98F002042E4891CD1DBFD5C /* PFUserState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E5F89585BF738F0A58C77BC3BE1A932 /* PFUserState_Private.h */; }; - D56CAFD0B02331EB90CE5F19010B827A /* PFRESTObjectBatchCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D973AF50D37829E5A629A80ED88FF2E9 /* PFRESTObjectBatchCommand.h */; }; + D4D98689D09FD3C38EA7A6092736446C /* PFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E16AA8270CAF5EA08D00D8A1D14F2059 /* PFNetworkActivityIndicatorManager.m */; }; + D4F8D5854AD4E10694B8543B01904E4A /* PFObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DD7435FB2C6E16C60951E238B329F43 /* PFObjectControlling.h */; }; D5792E05DB34C9521294B06A622AE040 /* POPAnimationTracer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E88590D291A3C131FC32F9BC9A80038 /* POPAnimationTracer.h */; }; - D5859A1400F3FE968B0AFCC64C078904 /* PFGeoPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 57F2605E98764A7779B3213480606C71 /* PFGeoPoint.m */; }; - D79E5121E2F988A64AE071076264C201 /* PFRESTCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 36E7ABF06376C0698BE4B369C1255EAD /* PFRESTCommand.m */; }; - D7EC19C57A7BE418E80D9B4321310DD0 /* PFMutablePushState.h in Headers */ = {isa = PBXBuildFile; fileRef = B2586CEB4DB20E7AED5EBFD3FB96B973 /* PFMutablePushState.h */; }; - D801E515C96AD14143FED389A6D20831 /* PFCachedQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 893348B36B23CFF515B649DF3EA05962 /* PFCachedQueryController.h */; }; - D8077B11B5F174C1072201BB8D597B08 /* PFGeoPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = AE96E6223940CD70D6F01EA288192D93 /* PFGeoPoint.h */; }; + D61130DAF8E0E1ECE22A93E52E1AF17D /* PFPurchase.m in Sources */ = {isa = PBXBuildFile; fileRef = DC073136FD3869B2BB9A9D30587BE1DD /* PFPurchase.m */; }; + D6B2773184F80196F49DF87870AD4FB5 /* UIAlertView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = C917E75AADCC6DB455A54504481914C6 /* UIAlertView+AFNetworking.h */; }; + D7AB6CC905033BE9701B6BE2D8B10474 /* PFActionButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C5F86DEE2CDAB301DCBD052E170C3DF /* PFActionButton.h */; }; D83868EA3920350C53488A4C4F9A5565 /* POPGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = 3155A15C877F794FB064A4A0CEEB2F13 /* POPGeometry.h */; }; - D9B2F24603C0F48EC73090BC6DC94FCE /* PFObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DC7D6BF37746831732BEE64A78E2E64 /* PFObjectState.m */; }; - D9B88BBFFE6342E41F3A86220B3B9410 /* PFCloudCodeController.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC012E8559514CD5FDA778785F7234B /* PFCloudCodeController.m */; }; - DBA301B469C007350C52449ADB7E4236 /* PFPurchaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 94DF16E2294CA8FEC9FD2ACF36D38638 /* PFPurchaseController.m */; }; + D8B21AB2A572F89802E2CAE754E11C1C /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CF33435C91D40E4A5913AAFD0EDE463 /* PFJSONSerialization.m */; }; + D9060FE6FF4B3F9BA85000AA5AB8B52F /* PFOfflineQueryLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 06A372A2F9877D7182971EB1783DA977 /* PFOfflineQueryLogic.m */; }; + D96A915CB19A7ACFC1FF38481113C4E5 /* PFLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 3191215D0811BF0108D28AC1F82B3739 /* PFLogger.m */; }; + D971E396F056FBA17C6CE0CF194FBE3E /* PFQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 843B775414C85A6B739A68A808587E0B /* PFQueryController.m */; }; + D99ED871F816595C6F2283257F5C95D5 /* AFHTTPRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = E6C8C116B56F8D1B7AB62768527EC072 /* AFHTTPRequestOperation.h */; }; + D9AA4A4142F44327165EBD0F2434C842 /* PFRESTAnalyticsCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = C41C99E60696D54F31E9D4B990F0B0B3 /* PFRESTAnalyticsCommand.h */; }; + D9D1261CE4BA4764455EBE65EE2047B4 /* PFTextButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 4415F3C02D8407018883CAFD17661FD9 /* PFTextButton.m */; }; + D9E62EB34600F4CA51ACE19BE7C65AF7 /* PFJSONSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = D96C8C02AE822A3F03B68FAA6D594497 /* PFJSONSerialization.h */; }; + DA0EC40E69DE3685E53603D2D6CD17A7 /* PFSQLiteDatabaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A7EEF110C12FC52BD3E497ADDEF6E48 /* PFSQLiteDatabaseController.m */; }; + DA46F604268312CA6BC6BA3CCB990411 /* PFLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 86CE1FC6E16C4981CCAB4D92ECBFB7B4 /* PFLogger.h */; }; + DA87B0B1CA41E9765DD17F295386E93C /* PFApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = CB6B147735D1F716FC2CE4332F65D798 /* PFApplication.m */; }; + DB25C2F1A23AE3183921A8D3DF4FE24D /* PFCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F0E3349A60D7826DA93B7B2959FCEB2D /* PFCollectionViewCell.m */; }; + DB2B7514E2C7903E4C564F9B4FB83D7C /* PFDateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF3C9636DEAF164594CC80C9C6F8A3F /* PFDateFormatter.m */; }; DBEF60495B33D1BA4C7BA3C8E3A24968 /* POPSpringAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7371F16336283F2D8BB2A199CD4DDEF5 /* POPSpringAnimation.h */; }; - DC765E1CE8C9208AB476C0138BEA41BA /* PFOfflineObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = B024D2C96D819E81E5D194B562CA7CCF /* PFOfflineObjectController.h */; }; - DD0CF6B6282013FA4E3830D6EC0F409A /* ParseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD3D62A5F9D0B310DCF7C520D812B6F /* ParseManager.h */; }; - DD3558902E5E8D951999253854B2A573 /* PFDefaultACLController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1896BB3AD97D1E8CB9D17C6A982672DB /* PFDefaultACLController.m */; }; - DDC4E7634F0E7C723FF2EF86872FA1DA /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EC8E900100484763798A1C6338E9061 /* BFTaskCompletionSource.h */; }; - DE1227CB453C1C67BEDF44DC54EF1BAA /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A09F4FD4303453124FB9D4870DDE2F0C /* PFGeoPointPrivate.h */; }; - DE7E8446AB52346D9156DC34976D7342 /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = A3A5889AC5CCB95EF1C4DD6B7C5C930D /* PFUser.m */; }; - DEBBD76F7A9E5B75BF2732334FA25155 /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = FC9971E4E70ED25A33B370FAEA88A589 /* UIImageView+AFNetworking.m */; }; - DF153F159E0E2D991A092293D9A30CC1 /* PFCloud.h in Headers */ = {isa = PBXBuildFile; fileRef = EA79AC3D10A54A6115A06F836846E4EB /* PFCloud.h */; }; - DF425C7C6CA426D5CBB0ADB6A96871C7 /* PFPushChannelsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 89A3DB76DA1562634E50BB32E31C34F7 /* PFPushChannelsController.m */; }; - DF6048F6B377ED247B79AFCC8B69621E /* PFConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 72C04520515C92C01E90D8D58C97BA21 /* PFConfig.h */; }; + DD05DB01536F7157D9362BE8E8083066 /* PFPurchaseTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BECD483F69DE182010F84F44CFAB40C /* PFPurchaseTableViewCell.h */; }; + DD069B29E4B7FB44E2756BA625DB5B9F /* PFCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = DD82088840AAB58D0F5243C0230D17B8 /* PFCategoryLoader.m */; }; + DD49064B9FD7B01B1F3E9EDD681A391C /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = E23709D1E2B358163967F34AC4683834 /* BFCancellationToken.h */; }; + DDE7A25B6FDDE44FC58C17F5BF85C2D6 /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = B319964A3771774ECF35609A331A9AC6 /* BFCancellationTokenSource.h */; }; + DDEAAA61B6C55BA10412B3B27110F0D7 /* PFFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AF83C8DCC1E7EFC3B79460BFA1DE1C9 /* PFFile.m */; }; + DDFA6862FB1CE0BA4A61CFE7EF8E083C /* PFObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = E2B8566040F468B4AED32A8BCB27E12A /* PFObjectState.m */; }; + DE961F754007F9A7471D4CF344ABCE82 /* PFPushChannelsController.h in Headers */ = {isa = PBXBuildFile; fileRef = C5603815F5CC7760F94208FF90B5488C /* PFPushChannelsController.h */; }; + DECE9EC538AEE7DBFA4F88A31DC92AC8 /* PFObjectSubclassingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 573E7709FAFC9CAAA3DF68F8C7ECC087 /* PFObjectSubclassingController.h */; }; + DF24C56A224FE7ECAB1EDB1657EE6FB9 /* PFPropertyInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 2248EAD3CAEF6EBEDAA0AC7AC52C51DF /* PFPropertyInfo.h */; }; + DF8191415D0D1255212AE2013F862152 /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = A8C983DB75FAE0BEF68EC8FAD134A4A8 /* PFAssert.h */; }; + E03055FBB48E6B94D8AD1FF653005CA5 /* BFDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 90E284AD7A6A52AEEF7D84AD765A3548 /* BFDefines.h */; }; E03238690A5A21C9B8ADCC9737633061 /* POPAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8336CCF2280C58E6C367DF4EC0EBB7B3 /* POPAnimation.mm */; }; - E0377CE7F7C2101F3D5BE001EFCABE4D /* PFACL.h in Headers */ = {isa = PBXBuildFile; fileRef = B332CC51A8213F3EF1C7A3FE399A5C2B /* PFACL.h */; }; - E08EE32C93126D92DC9E6961789914E7 /* PFMutableFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 61308EBC3E3CCE6EB380B4761543AD72 /* PFMutableFileState.m */; }; - E0C01AA7CFB002785436D33521E5328D /* PFQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 291630B6FE4315F0B5B789D1ED22A66C /* PFQuery.m */; }; - E12A39C3E3423DE57BA268CB553E74DD /* PFObjectBatchController.m in Sources */ = {isa = PBXBuildFile; fileRef = 530ED4C4F72784908C56CECFABD0231C /* PFObjectBatchController.m */; }; - E19D243F4ACB365A65A5BA008694E4B6 /* PFEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 63F5E36EFB9403CA32B8B5C3A3F78855 /* PFEventuallyQueue.h */; }; - E219C58B408FA57BF94D5A4113C59B87 /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 98C44F60AA929307291A20DC790BFEB1 /* BFExecutor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - E22F49523078CB46DB077CBF54C73202 /* UIView+YALConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E4D88B0EC5CA12C799F9F3C05C0B31E /* UIView+YALConstraints.h */; }; - E23601D8BB9D0538FAD5F3DAF6251F76 /* PFNullability.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AEDEB7E9CE1E1D2795C43EFD540009 /* PFNullability.h */; }; - E28D3D6AE3281331EFE0B93FB91853F6 /* PFURLSessionCommandRunner.h in Headers */ = {isa = PBXBuildFile; fileRef = CDAC0B9AE144C31E2DE5AF0A4DB1EDC4 /* PFURLSessionCommandRunner.h */; }; - E2D8E1BB40962D1F2A8E7C8B179CBB3A /* PFReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE1F1F92C05B5ADE677C606485BB75F /* PFReachability.m */; }; - E32C0C8E76B2398A462F2F44466C88C1 /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 285AE108BCA0C7BACB4D927E8D1F8665 /* UIImageView+AFNetworking.h */; }; - E387EBB7F209061962244F91C82014E1 /* PFAnonymousAuthenticationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 898ECE478F3C854611287289F4977E11 /* PFAnonymousAuthenticationProvider.h */; }; - E4322DEF695907DD78455D334243FC86 /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 06588E20E049A2E98B815265D06086EE /* BFTask.h */; }; - E4A9466EF1DE5966768709FD1DEBC244 /* PFAnalyticsController.h in Headers */ = {isa = PBXBuildFile; fileRef = BF99C2FE0ABD09A876B4FDC3B73D693D /* PFAnalyticsController.h */; }; - E4AEC74A16A03117C42C961DF1C65848 /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E08E20DF9125F146349FA765648DCA3 /* UIWebView+AFNetworking.h */; }; - E4D2116E355F2C101B6DE6296544C3BC /* PFRESTObjectBatchCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 32D54A528AA2134A544108B4E124A617 /* PFRESTObjectBatchCommand.m */; }; - E518D12AF66FE6BF2AA57FCECF4C5C09 /* PFDefaultACLController.h in Headers */ = {isa = PBXBuildFile; fileRef = B65D4C06593414E001B75B30C7A68F64 /* PFDefaultACLController.h */; }; - E531951BF8A2CDC0A1865EF2CA115D46 /* PFPropertyInfo_Runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DD825DA40E92E93FAC2EA00807BF7D1 /* PFPropertyInfo_Runtime.h */; }; - E5831BEBB501CAE9B5B49F7C5BE1433C /* PFCommandURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D0DD7229B595E60BA7D6C2A41C4B6B /* PFCommandURLRequestConstructor.m */; }; - E5EB368969123151E92F49962A1A3FCB /* PFRole.h in Headers */ = {isa = PBXBuildFile; fileRef = 33CAFF9933F161C320331CCA71D23A5F /* PFRole.h */; }; + E0FDA3418BDC08A45B8E4F8F6DE1A20C /* PFInstallationIdentifierStore.m in Sources */ = {isa = PBXBuildFile; fileRef = E74884D5A2FE748F09D5B9232A56C7CE /* PFInstallationIdentifierStore.m */; }; + E1D1C143E6692407376FB991936085DC /* PFActionButton.m in Sources */ = {isa = PBXBuildFile; fileRef = B2688E675D28E976EDC6B6AA84C41C84 /* PFActionButton.m */; }; + E23EAA43A1BBCD8353958BAF80880F44 /* PFFileStagingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 466D8E751494438DECF05B755061844C /* PFFileStagingController.h */; }; + E243E0679F630A2E3F9F4B7B24191D8D /* PFObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = F03D0C596469A502C868EB32FEE7D020 /* PFObjectController.h */; }; + E27F8532DB90E0766FA777C88379FA68 /* PFTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = CDF42DAF3471B27B84DD07F1A7E3391C /* PFTextField.m */; }; + E2C60F3460600725D4C2C17EDC0ECF18 /* PFConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = A57B413BD6BA1EA23004CBF88974B886 /* PFConfigController.m */; }; + E333B27781269607DD5B6237EDF09A12 /* PFUserConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = A8D02A717544E8E472DDB654462BA93B /* PFUserConstants.h */; }; + E37EEE527BAAFF772206A72DEF75F60B /* PFUserState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C8045DBF84B4C9FAE5F9493DEF7990E /* PFUserState_Private.h */; }; + E4F18F0BD37AC65F868864D1E55B7B60 /* PFNullability.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DC8B50782AEA44066CA5219CEC67A5F /* PFNullability.h */; }; + E4F65D360A870AE93E4A2CCD3D3491E3 /* PFActivityIndicatorCollectionReusableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E63A2D69F78652A010BB377EBB449C6 /* PFActivityIndicatorCollectionReusableView.m */; }; + E5866C6A6D58A011CCA749AA3EE87861 /* PFAnalyticsUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = C1D8402E147FF6607379D3B631C593FB /* PFAnalyticsUtilities.m */; }; + E5DAB0E03E10762C86ECD9FCC472761F /* PFObjectSubclassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 50FDC487ACDFDD8DDE2E916C1BC455FB /* PFObjectSubclassInfo.m */; }; + E5E316F403D65FF52D02A0665082C101 /* PFOfflineQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 99AC0E4FACC6E2558227DD51210B84EA /* PFOfflineQueryController.h */; }; + E651303757F3195255E0DEC635795BC2 /* PFRole.m in Sources */ = {isa = PBXBuildFile; fileRef = 9761E4B9A3217B85F0615BE7D41F1CB0 /* PFRole.m */; }; E66A972C821119D091B99E54200F7FC0 /* POPAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 94815AA3EE3CBA04CEE85515701AD534 /* POPAnimator.h */; }; - E743F3901CB2167FBBC28F2054A34421 /* PFCoreDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 7725DA2CCC4B05B3E8613121DAB013CB /* PFCoreDataProvider.h */; }; - E7E1B3EC902FD50B6643939B83B1E678 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - E8608D5E7A38E5A61282E3CF64502D18 /* PFURLSessionUploadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 347D5D631A6A12B0298E13B5415AEAAF /* PFURLSessionUploadTaskDelegate.h */; }; - E880F7F33114312DF66A4E88E617C825 /* PFURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CB47EA89DC2B49C7B2B12127098FB33 /* PFURLSession.h */; }; - EA2FD9A751EBAF09C8947C9BE65B8195 /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A69D20AEBC89B67DD33CA2CC54E309B /* AFURLResponseSerialization.h */; }; - EB8809FA99543F795F70FD6A9F457547 /* PFFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E745CDD44F448B0BB657E770CFDCF27C /* PFFileManager.m */; }; + E70727B793EBD607F1BE486B664CE33D /* PFObjectController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C16B1F4CA93F9A1D3CD11DFF0FE20F8D /* PFObjectController_Private.h */; }; + E72770739EA867C89DE740B977BE5C70 /* PFRESTSessionCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BF00A7674A2E0DCC20BFA18BCD89098 /* PFRESTSessionCommand.m */; }; + E7E9BAE2DCA65E7ABC83BE790E92E20E /* PFRESTObjectCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = AEEB033EF7B91BE4441AF7756D696170 /* PFRESTObjectCommand.h */; }; + E84B6B0C1564161E1DE83392CD28082A /* PFSessionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 470D6445B0D70D789438D349CC071D71 /* PFSessionController.m */; }; + E85D137DF70E4DCCFE461CCA6C3FA618 /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = FDE3D8A4479D0EA4BAFB41AD9CF6FF64 /* Bolts.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + E865E91B85761327812436CFD0EE21FE /* Parse-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F369CDC4FF93740544F25823CC584B90 /* Parse-dummy.m */; }; + E87B6C4AD10233A8EF5093E215BE7A4C /* PFUserAuthenticationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D9FF040FF41C3E677D9AE345094667B /* PFUserAuthenticationDelegate.h */; }; + E8BC741F9C816AB82DA07FF26AABEFE6 /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = AA922A41DD3C8A6F91E02EF0F731F0AB /* UIProgressView+AFNetworking.h */; }; + E99A53E0D4AD3D044F2A724C8906C655 /* PFConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 860AA407C8EE7F2BE1FF80F5F2C2A67C /* PFConfig_Private.h */; }; + E9C8E5867435024A65D9E929D85D2371 /* PFImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = A5BBD08523DDF7DFF2711114FC722A5E /* PFImageView.h */; }; + EA8A963881602AE0082051485B05AC32 /* PFMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = BF2B0A2A499B1873CEA684566E8B5487 /* PFMulticastDelegate.m */; }; + EB003F3813D731CCCC4EDE62A21258ED /* PFCommandCache.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF064AE7675931E4027B1B48FAC0E0E /* PFCommandCache.h */; }; + EB8DB296BB4DA32D527234A3DEE5F061 /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F3F5E33F74D6853C5320405E72A25A99 /* AFNetworkActivityIndicatorManager.m */; }; EB965B246F7206AE338A7DF882400A0E /* POPVector.h in Headers */ = {isa = PBXBuildFile; fileRef = D5CE48778301C24CD288B08DDA441605 /* POPVector.h */; }; - EBD7FD53C5DEA72FEB27FF599E88BC80 /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = 245BC03B9F6AB7B69A163206AF3C2C32 /* PFBaseState.m */; }; - EC1B42BDF93A2565BCCDE2A014286022 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = CFC48C77C63A582B14A5B098E6FCF482 /* PFURLSessionFileDownloadTaskDelegate.h */; }; + EBC4E1A2A578C68150812DF664F3CD2C /* PFSessionUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 747ED87BDA0CFC263BA40D355C825B04 /* PFSessionUtilities.m */; }; + EBDA959314C42ACA8FF53848015B383D /* PFMutableUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = B84E7ADA66D7676BCB6F6E7FF2FD89EB /* PFMutableUserState.h */; }; + EBF38A4299D038884C58103080EAA89A /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = B8678F4D5E8E1A277EAFCB398356B491 /* UIProgressView+AFNetworking.m */; }; + EC352BDDF7551229C44577334C79BF3D /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AED3FD61E1EF7915955E1D7600608EB /* AFNetworking.h */; }; + EC754433ED47C6B48A8CE9F4CB37E14B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CF2B2B9DD2ED593C69A3425ABF50CEA /* Security.framework */; }; + ECCDF1B41916BF0EAAA0A8CEB0F54B5B /* PFMultiProcessFileLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 732EEF0236374C25C56BB5C469D842CB /* PFMultiProcessFileLock.h */; }; + ED04F6FB01031FD159F530193AE75C79 /* PFACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = C61F7888A611C849888C8333EB005699 /* PFACLState.h */; }; ED0BF4FE2052871A5C209B796BA9D91E /* POPAnimator.mm in Sources */ = {isa = PBXBuildFile; fileRef = ECC48BF18D3BD01C21B65648709A45D6 /* POPAnimator.mm */; }; ED3821443DA3268139C3CE29A592C03C /* POPAction.h in Headers */ = {isa = PBXBuildFile; fileRef = F3A985A006B0CCD0116D8FC53C4D1834 /* POPAction.h */; }; - EDCC71FC92D40B3862592FF1F64D9F22 /* PFMutableACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = 82B2F774B2C3F6B000F7B323A1E51571 /* PFMutableACLState.m */; }; - EE2A8C0E8B415EC8E006AC7B1F243C65 /* PFObjectSubclassingController.h in Headers */ = {isa = PBXBuildFile; fileRef = CDE463E6B9D1AF8E6AE850CD5E68849F /* PFObjectSubclassingController.h */; }; - EEB02FC19C729B08DC6E52A58694A62E /* PFAnonymousUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 36B65B247D65EE46D2A8F3ACDC87870F /* PFAnonymousUtils.h */; }; - EEC3CE2CB2428CE7EEAF37BF2E0187AF /* PFSQLiteDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = DE2DE7B62241FC17A59B0C930D7837B4 /* PFSQLiteDatabase.h */; }; - EED1C92E54E432794307DC75AF87EE82 /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 994A5F73DF6BF6840DED92DDE2C12AC6 /* AFHTTPRequestOperation.m */; }; - EF0657162B6D12AB703D83918C3B36F9 /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 27E3589A502DA67E5F75BFDD5AB13E57 /* BFCancellationTokenSource.h */; }; - EFAE8EEDB4F6537B805A0D3FC7F794E5 /* PFRelationState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EF64AAF633AE4BDB30247D6A4090B89C /* PFRelationState_Private.h */; }; - EFCAC58E3F3A4442F400FFC8626AD9B9 /* PFSessionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B493332AF25497985B3420336C8E310 /* PFSessionController.h */; }; - F072D26ABA5162A0D5B098FC2773092E /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AE87F34D52CD28E7113F03F7CEA01F06 /* Security.framework */; }; - F085F0D853691CCA544D3D2152B34018 /* PFFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = FF3530F7B69DD859647B6416F1A85C73 /* PFFileState.h */; }; - F0B1181F18792D478147E3051A915EB6 /* PFAsyncTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 663C1A74DA7B1A684C31157464DF2CC6 /* PFAsyncTaskQueue.m */; }; - F120A50FD7FCA9658BBBDBA65EA9B1E2 /* PFUserFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = A2BD31107881F3881ADCD378256D4B02 /* PFUserFileCodingLogic.h */; }; + ED75CE5EE2F7C992A5186614070AEC5D /* PFDefaultACLController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A5DE351A0BF7F1BFDD329A0BA815E81 /* PFDefaultACLController.h */; }; + EDEEAA33E39E017A4C68ED263C84AE22 /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DBC85FB02CFE6EE23007AB1EE43B774 /* PFQueryController.h */; }; + EE649D37D119E85D26C3A56AF9481AC9 /* PFURLSessionJSONDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = EF879D6FEC35876A57F1E379EA8F1BEA /* PFURLSessionJSONDataTaskDelegate.m */; }; + EE9ABF7DB56F4A6D9F4969A3CAA035DC /* PFFileDataStream.m in Sources */ = {isa = PBXBuildFile; fileRef = AAC3249989EA908FBA78700563472204 /* PFFileDataStream.m */; }; + EF01EE384D79A1068581524113443FFF /* PFInstallationIdentifierStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 7055666DC363C604BD87260B48EA2D42 /* PFInstallationIdentifierStore.h */; }; + F0BF7C159497C345EFC2279414A9602B /* PFTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 8896894278B01270F7BDA51E345AEE3A /* PFTaskQueue.m */; }; F1869B0A07F843009A3268A12F2F96CF /* POPBasicAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F59C51782AE555897A5B92D6B3CECD1 /* POPBasicAnimationInternal.h */; }; - F2CCD104B91461CC1548C32C003353FD /* PFObjectFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 71E77E05CC2CDD5B79D7552C17004EFB /* PFObjectFileCodingLogic.m */; }; - F2D9EF32073176AC4B9F935577A44456 /* PFPaymentTransactionObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 76B1F1A7DACF8124FD67EEFFB88526F1 /* PFPaymentTransactionObserver.m */; }; + F1EB5D28E0347730C01E1C9F101A167C /* PFInstallationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = F846ACF033FD69EF28381C488F0B8AA0 /* PFInstallationConstants.h */; }; + F22042889D8469B686198BE4C3C967DE /* PFRESTFileCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 86B7508FF3B989FEF4B30FE544B32B91 /* PFRESTFileCommand.h */; }; + F23C5CA36BBCCEDC450C59ABD9167FF1 /* PFPropertyInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = A631F9A0F687BDDBC873BA5813B8D674 /* PFPropertyInfo.m */; }; + F29600110489E45471884162604FD700 /* PFCommandCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 66EBD08EBD02C88CCDFE2505E222DAD4 /* PFCommandCache_Private.h */; }; + F2C4F6DEE6564743D319F05B2AD6AF6D /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B54B045A5C8DC9D0510BE5BE3FE0A1C /* AFSecurityPolicy.h */; }; + F327003FE3AD1D094C218F976BE1F431 /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = D9E009FDFD4D025A77485806D951F056 /* UIRefreshControl+AFNetworking.m */; }; F353B70A061E08623279B54744E15DA7 /* POPAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = ED596D85957A49EC6092EC8EC38FCE49 /* POPAnimationInternal.h */; }; F388B7C3B4B0325048D4B5E4C1BAF904 /* POPAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 14938EB08280063D294781C3164C8332 /* POPAnimation.h */; }; - F39244CD95764B7D0C035FE193512606 /* PFFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 59143BC1CCA767489CC63EC79299C132 /* PFFile.m */; }; - F394B0E3DFFC7734AB5051D1A5F4D68F /* PFUserAuthenticationController.h in Headers */ = {isa = PBXBuildFile; fileRef = BB019CE2BDFE6EC36FCD9993DB744EFA /* PFUserAuthenticationController.h */; }; F3A5D609595883FAB0550B75A0237C58 /* POPMath.mm in Sources */ = {isa = PBXBuildFile; fileRef = A19FD133843D5FCF16B8AF3B4E165515 /* POPMath.mm */; }; - F3C1136C8D88E18B962C1C4AF612B3B3 /* PFRESTConfigCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F519C682C4E52952D376F5423040E5B /* PFRESTConfigCommand.m */; }; - F3DDD9A3039C1313F12C2A248576DD56 /* Parse.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A880B37F4F90E6B3CCA1B3FAD582B81 /* Parse.m */; }; - F412A6DC753D4FF45CA2663718823E3C /* AFURLConnectionOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A9EB6D7E4926B7E034816F709F1F518 /* AFURLConnectionOperation.h */; }; + F42F528AAFB4431133A3D12ECF1D97D6 /* PFAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F6C88082787B2C81249E9AC5C14B411 /* PFAlertView.m */; }; + F4CB32331A652F9BEC5790C7BD83488F /* PFQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CBECE1F342D08DEA6C849D4CA23FF5C /* PFQuery.m */; }; + F4D38EE812AF575E7C62AAC6A8E52540 /* PFPushState.h in Headers */ = {isa = PBXBuildFile; fileRef = EBA5F64F36074059AACC0B7DACE6B378 /* PFPushState.h */; }; F50CFC840B1B486D290EF5656C3AB5A4 /* TransformationMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 35574BADA6CDEA944F089CBC021F01AA /* TransformationMatrix.cpp */; }; - F5189CA8C80BB857AE36C733A89A5DC8 /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 860D58AD9C905EA188BEF7C2C8B3B2E4 /* PFQueryController.h */; }; - F5A533001D5694222A42A7E5733F70D7 /* PFRESTSessionCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = C5FE3CDD5FB245BC2913E868E9DE3995 /* PFRESTSessionCommand.h */; }; - F5D54F9BEFE298257F9134EA893B5C8D /* PFFieldOperationDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = D93333F49B10A154028722630A69414C /* PFFieldOperationDecoder.h */; }; - F6C4B0AB4C5CC75A89E9E082659B1181 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A2C302E4C6109CA0666CE25D782C9766 /* AFNetworkReachabilityManager.m */; }; - F8A080400150D1AC42F6C531CAB577D2 /* PFCurrentInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = E2F89C1AC67968BA35BD1123BE34D894 /* PFCurrentInstallationController.m */; }; - F947354D06D4DB18853AD81F00869ED3 /* PFLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = C124801645AB37C7712D483A5C87D83D /* PFLogger.m */; }; + F50F059F7518D8F68B09F674C1D81F1B /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 698035C4932D84777E5EC71DFC658ECE /* BFTaskCompletionSource.h */; }; + F5271A92421103FAA7B66901BDADE562 /* PFRESTAnalyticsCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C41DBC222643AB47C9976935B1047D3 /* PFRESTAnalyticsCommand.m */; }; + F5F8F81CDA532191D7DCCB020E9CDCD0 /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC1022DF912D32448DE24E2472BD2EB /* PFGeoPointPrivate.h */; }; + F666FF748D959A512841D717829362CD /* PFURLSessionCommandRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = 8258E5C6287CE05ECE4DBE3A83508112 /* PFURLSessionCommandRunner.m */; }; + F68AF78D542CBBAB1379651762D77220 /* PFFile_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 948A8D3F019700F19148AF5DEF0F0F49 /* PFFile_Private.h */; }; + F8797AD57E1C9E3248CEE5F1BC867DB7 /* PFLogInViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F22D85829359CAC7406869D232CB96B /* PFLogInViewController.m */; }; + F8CE939475DB06A79F0B42858F50A175 /* Parse.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C385EA5C279B003F8C215ED4163B769 /* Parse.m */; }; F9627C89FA11AC0378E77DF8EF1535FF /* POPAnimationTracer.mm in Sources */ = {isa = PBXBuildFile; fileRef = C1E27C3CBB149C1873F6CDC55D998CE2 /* POPAnimationTracer.mm */; }; - F965B0BA7C7E070E515C1ED0343E68A3 /* PFMultiProcessFileLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 7388AF1F66A03C223B0DA9338F552A19 /* PFMultiProcessFileLock.m */; }; - FA534A151F3B55AB2E7EA80B4C522BB0 /* PFProductsRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 529C0DC5511102F293AAA76310789551 /* PFProductsRequestHandler.h */; }; - FA8549933F4A9D5FC6E695B2C00C484E /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E6F16A936B103DF9237ED50EBF4D8631 /* AFURLConnectionOperation.m */; }; - FB0A5366764317E476526B1CCA42EB4C /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FE2EB61A95016598E72642BFBCBADBE /* AFNetworking.h */; }; - FB2E5E78E63B5474E21182AC6AB7AE38 /* PFSQLiteDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EAF2A823E92A730EC588801D943C514 /* PFSQLiteDatabase.m */; }; - FB4C49FBC327F28CB47026B0E290BE1A /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 450938391ACE611C45583A2F6117FD6D /* PFURLSession_Private.h */; }; - FBB9982DF9350395B60873C7EBC35687 /* PFKeyValueCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 245FF007BEF549EF81D7E0222214C303 /* PFKeyValueCache.h */; }; - FBE5198936C677351A1994966CFB0E0E /* PFRESTUserCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 60F954C2BD5989BD4626F5C1F5BCC48A /* PFRESTUserCommand.h */; }; - FC1C0CA9220FCDE5447A43920AB3960F /* BFDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 73E9B12D704E302D9DAC9FDE4C8D60AC /* BFDefines.h */; }; - FC49E18E4DE9E4CEA0E8144D55F407A7 /* PFHTTPURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 62078C4D93D4BF5CF7430EF680857264 /* PFHTTPURLRequestConstructor.m */; }; - FDE3635ACA000137F91099FB8A77B904 /* PFSessionUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 15DCE6DD786D364DDA4BCAD1F24895FD /* PFSessionUtilities.h */; }; - FF06683CECBB72CC198613D50C833E94 /* BFTask+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B26ED3E1774D8AF7C7968032E48D8AD /* BFTask+Private.h */; }; - FFDEE01AE0207886F8D70AA02F184FB3 /* PFRESTPushCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = A89E8441EF384E751C66846D8C7DA140 /* PFRESTPushCommand.m */; }; + F9D22128094FED62CC689A0DF077D742 /* PFProduct+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 35D8F9A9CC00721366C770FD9E85A417 /* PFProduct+Private.h */; }; + FA062724256AD7BD74E749525E96F593 /* PFMutableUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = B1214E8947EB72FF3291E4600C97D58F /* PFMutableUserState.m */; }; + FA4008023586470174D049C68D7BCA84 /* PFOfflineStore.m in Sources */ = {isa = PBXBuildFile; fileRef = A421A4107F66CC195D55371620880A47 /* PFOfflineStore.m */; }; + FB00925A23D5B4AE5B41E33B5FBD055E /* PFDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 11C9D5CD5B0EBCA52D876E7FBB58F435 /* PFDateFormatter.h */; }; + FB2C988761B71F5EC05ABAA20A10DD3E /* PFFieldOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = EB19AF401F51648EFC25CAA336AF77DA /* PFFieldOperation.m */; }; + FBB54F353706B4761D4C2BBCDE0D3DEC /* PFCloudCodeController.h in Headers */ = {isa = PBXBuildFile; fileRef = 22672E7A70EC530B20C26F2C140E29B2 /* PFCloudCodeController.h */; }; + FC7AD9CD6427562338E316F7D22C6CF5 /* PFAnonymousAuthenticationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D391B4B9A0CB9FD3E2A0BF899903190 /* PFAnonymousAuthenticationProvider.h */; }; + FC81649F3508121AFDC3B469E14C4BE7 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 08A7DDB501049FA74B5AC43628EF32BA /* BFCancellationTokenRegistration.h */; }; + FCE81758F981E89A3B88ED7485A67EA2 /* PFSignUpView.h in Headers */ = {isa = PBXBuildFile; fileRef = 63491A7EC224003EF49DC8F88BC3EB18 /* PFSignUpView.h */; }; + FF7441F3F46A777068C3E1ED9DB6988C /* PFPaymentTransactionObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 043843700614E5CF0208EF9E180A96B5 /* PFPaymentTransactionObserver.h */; }; + FFACAEE5617305A95FDB73B9E3765B25 /* PFRESTUserCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BB229E81638C48D768ACFA74D97E7E4 /* PFRESTUserCommand.h */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 103117E18087B3EEC84D8F67EA532CD6 /* PBXContainerItemProxy */ = { + 14463E173C08B7B666D09C49F5839A75 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 47C800E42623009B7192B025B3DD25A1; - remoteInfo = pop; + remoteGlobalIDString = FF04CF73CFE56992B404E8BC19C3A4FE; + remoteInfo = ContextMenu.iOS; }; - 11F61E646F82C7A3027EAFA6F2C283CA /* PBXContainerItemProxy */ = { + 4A62D857EC92BBBC0306F5AFC1E44540 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 7D5B41A236FF14B6B02D4BAF6C4A690A; - remoteInfo = ContextMenu.iOS; + remoteGlobalIDString = C8E26D4496BE6E05436ED5442A4A35C6; + remoteInfo = Parse; }; - 58FD68CA85B5E72697502824B988F051 /* PBXContainerItemProxy */ = { + 52518CE5417A0014201101497C436F9B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = F7D0346E5B3C07CA2678B48D1D1BD750; + remoteGlobalIDString = C8E26D4496BE6E05436ED5442A4A35C6; remoteInfo = Parse; }; - 5990CF4195D3965C7E2B2A3208652783 /* PBXContainerItemProxy */ = { + 990436F1E7C13E75A6DA3B6C9195DA14 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5E7ECA46011128F44607D2526FF28BBF; + remoteInfo = Bolts; + }; + 99961E400193CE18389BE0F5180AB7F3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 39991CD032545E130997094168EF96E2; + remoteGlobalIDString = 9CEF3252DBE731B89BE08B2C8D33D157; remoteInfo = AFNetworking; }; - 898759E58BADE0E9FBFA1E66E38F8039 /* PBXContainerItemProxy */ = { + B2E5C7781C3E2087AEA03EF41C4EE7C0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 9D8311DD3E0DA85313EF9710C8614AD8; + remoteGlobalIDString = 5E7ECA46011128F44607D2526FF28BBF; remoteInfo = Bolts; }; - A350E8606E02ACFA8AA6C838EE4FDE3D /* PBXContainerItemProxy */ = { + EE12126F62BD1EEFAD3A114F7165C35B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 47C800E42623009B7192B025B3DD25A1; + remoteInfo = pop; + }; + F35397A038CF6004F7D006C52C3042DF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 9D8311DD3E0DA85313EF9710C8614AD8; + remoteGlobalIDString = 5E7ECA46011128F44607D2526FF28BBF; remoteInfo = Bolts; }; + FABF293F3CD2F3C97F0EA10E96BAC2A6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 30B6C683408FE258B28EE47F87D10FD5; + remoteInfo = ParseUI; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 007D017430CAD14C507E4E16894E1ED8 /* PFSQLiteStatement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteStatement.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h; sourceTree = ""; }; - 009D766A60F44D81650E505380CF6EE5 /* PFCurrentInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentInstallationController.h; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h; sourceTree = ""; }; - 016F2569F5E0DA62E089B095D3A04E84 /* PFMulticastDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMulticastDelegate.h; path = Parse/Internal/PFMulticastDelegate.h; sourceTree = ""; }; - 01D2ED1DF56FF3AE05B1515043302F71 /* YALContextMenuCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YALContextMenuCell.h; path = YALContextMenu/YALContextMenuCell.h; sourceTree = ""; }; - 022CFAB7CC0CBD47E0AC47A4EC57B983 /* PFHTTPURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPURLRequestConstructor.h; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h; sourceTree = ""; }; - 033DE2F20554C4483F70BB66112A660D /* PFCoreManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCoreManager.m; path = Parse/Internal/PFCoreManager.m; sourceTree = ""; }; - 036A8C9E0C46D47ECECB6E33E53B2BEF /* Bolts.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.xcconfig; sourceTree = ""; }; + 0024E7BD94CF93AC26F575C1C8DDC77A /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+AFNetworking.h"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.h"; sourceTree = ""; }; + 00513F8B5C023D9B6A67A40068570F19 /* PFKeyValueCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache.h; sourceTree = ""; }; + 005D86B592A4BA2B3547363ECF47A177 /* ParseModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseModule.h; path = Parse/Internal/ParseModule.h; sourceTree = ""; }; + 0133FEB4B03FB6F08C08C7B83AE52ED3 /* PFPushController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushController.h; path = Parse/Internal/Push/Controller/PFPushController.h; sourceTree = ""; }; + 01AF5FDFA32CA58C779C40A40EA3D2AE /* PFObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObject.m; path = Parse/PFObject.m; sourceTree = ""; }; + 01D98518A65B6A9D496DAB55A24824E7 /* Parse_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse_Private.h; path = Parse/Internal/Parse_Private.h; sourceTree = ""; }; + 02410F25AB700FDE2DC3E940E8F641D3 /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; + 024EDBAD6DEA89979FB7FA48DF6FD2E1 /* PFTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTaskQueue.h; path = Parse/Internal/PFTaskQueue.h; sourceTree = ""; }; + 024F688442FF537808B2B1F23FD1E740 /* PFACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACLState.m; path = Parse/Internal/ACL/State/PFACLState.m; sourceTree = ""; }; + 031E9E0D8D5FFE61CA69EBB13DFF940B /* PFAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalytics.m; path = Parse/PFAnalytics.m; sourceTree = ""; }; + 035328EF0D2E9A7C6F011700B6486C4B /* PFCurrentObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentObjectControlling.h; path = Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h; sourceTree = ""; }; + 041725EB6A05B1CEEF10F1C68D2B4E1C /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; + 043843700614E5CF0208EF9E180A96B5 /* PFPaymentTransactionObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h; sourceTree = ""; }; 0476012CEBFEB22B5F0926994E6AEEE3 /* POPAnimatorPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimatorPrivate.h; path = pop/POPAnimatorPrivate.h; sourceTree = ""; }; - 06588E20E049A2E98B815265D06086EE /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; - 06BDEA785CD1CCF3EC5F7D97641DB94B /* PFACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACLState.m; path = Parse/Internal/ACL/State/PFACLState.m; sourceTree = ""; }; - 075D17B28FD88D19723BDD0F7C7ACF85 /* PFURLSessionCommandRunner.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionCommandRunner.m; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m; sourceTree = ""; }; - 07A16D1432732F853E3D7B39B1DB383E /* PFRESTConfigCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTConfigCommand.h; path = Parse/Internal/Commands/PFRESTConfigCommand.h; sourceTree = ""; }; - 0823AECF540B112CC0DD23CA1EB33F1E /* PFDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDevice.m; path = Parse/Internal/PFDevice.m; sourceTree = ""; }; - 0854CFF4AC229E21A7EC471BB9EAC43F /* PFFile_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile_Private.h; path = Parse/Internal/File/PFFile_Private.h; sourceTree = ""; }; - 0862542F3708CEA8901318AE4F5FE02B /* PFOfflineQueryLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryLogic.m; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m; sourceTree = ""; }; - 08DB18CB20934926437D11F21D1D9B8E /* PFUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserController.h; path = Parse/Internal/User/Controller/PFUserController.h; sourceTree = ""; }; - 0931322359A8E70F6F16FED5F97879E5 /* PFLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogging.h; path = Parse/Internal/PFLogging.h; sourceTree = ""; }; + 053C8DC2F31DA21D6E7CC1C8B47B7E7D /* PFMutableQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableQueryState.h; path = Parse/Internal/Query/State/PFMutableQueryState.h; sourceTree = ""; }; + 05953FCDA42C0E7323C7F9B5AB886535 /* PFCommandRunningConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunningConstants.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m; sourceTree = ""; }; + 05E01E38D82A4797E14C9CE9355C3F23 /* PFMultiProcessFileLockController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLockController.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m; sourceTree = ""; }; + 060DB4FD225A0238252576BE01EEF381 /* PFSQLiteStatement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteStatement.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h; sourceTree = ""; }; + 062A3C8CA2C198CBC3F4184AE0DE01AB /* PFObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectController.m; path = Parse/Internal/Object/Controller/PFObjectController.m; sourceTree = ""; }; + 0691E15B84DC22B58B24454A662AF44F /* PFInstallationIdentifierStore_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore_Private.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h; sourceTree = ""; }; + 06A372A2F9877D7182971EB1783DA977 /* PFOfflineQueryLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryLogic.m; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m; sourceTree = ""; }; + 0706E15293B087CF3BC18798F10E6F37 /* PFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkActivityIndicatorManager.h; path = Parse/PFNetworkActivityIndicatorManager.h; sourceTree = ""; }; + 07DD486CA0D467F3E4B0FA3AFB78B671 /* ContextMenu.iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ContextMenu.iOS.xcconfig; sourceTree = ""; }; + 0835AF0C620B80377CFA5F0070B6F2A8 /* PFUserConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserConstants.m; path = Parse/Internal/User/Constants/PFUserConstants.m; sourceTree = ""; }; + 089FEED162CE81FFDB1F2F722CC53B19 /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperation.m; path = AFNetworking/AFHTTPRequestOperation.m; sourceTree = ""; }; + 08A7DDB501049FA74B5AC43628EF32BA /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; + 08DF92C3B8A5DF531A37052EE2D36BA2 /* PFMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMacros.h; path = Parse/Internal/PFMacros.h; sourceTree = ""; }; + 09293FA9DE2829C01FD1BC90B6481E0C /* ParseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseManager.m; path = Parse/Internal/ParseManager.m; sourceTree = ""; }; + 0A0A214D3D8D8170F77B8631024D14E1 /* PFEncoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEncoder.m; path = Parse/Internal/PFEncoder.m; sourceTree = ""; }; + 0A0D3F66C0F548DA826E162FB412704A /* PFPurchaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseController.m; path = Parse/Internal/Purchase/Controller/PFPurchaseController.m; sourceTree = ""; }; 0A9ED47A0EA56543BEB2F83DFD6122C8 /* POPCGUtils.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPCGUtils.mm; path = pop/POPCGUtils.mm; sourceTree = ""; }; - 0B072562DD642F896CD3C3B7CEF2911B /* PFCommandRunning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunning.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.m; sourceTree = ""; }; - 0B19A6DDEB20A310104A97E0953192B8 /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; - 0BC40E8FF522D488100477128A373255 /* PFPinningEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningEventuallyQueue.m; path = Parse/Internal/PFPinningEventuallyQueue.m; sourceTree = ""; }; - 0D2C0E09440F10C2834146B969AD0950 /* PFCurrentUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentUserController.h; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.h; sourceTree = ""; }; - 0D7ADA7673FDA922B924DB960BC45FEE /* PFQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQuery.h; path = Parse/PFQuery.h; sourceTree = ""; }; - 0D7C31A8D9DC68245949CD79BD5AD586 /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; - 0DBB0CAB75C437C618EEBFAF8F62A947 /* PFMutablePushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutablePushState.m; path = Parse/Internal/Push/State/PFMutablePushState.m; sourceTree = ""; }; - 0E1148A11007AFF78ABDECD376185D39 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; }; - 0E374390CBBC0449CF5CC0A1C32EE8C5 /* PFTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTaskQueue.m; path = Parse/Internal/PFTaskQueue.m; sourceTree = ""; }; - 0E8BFD8BC695971FCCBA291EDD68F350 /* PFUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUser.h; path = Parse/PFUser.h; sourceTree = ""; }; - 0EDD645EA043AC01BD2D294C8E25D7C9 /* PFCommandRunningConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunningConstants.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h; sourceTree = ""; }; - 0F1D200E550A12E3F43CD3F31E131DBE /* PFCommandRunning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunning.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.h; sourceTree = ""; }; - 0F53F9E343FFBC0260E05A6277C25495 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; - 0F7453E990BF208758602D5B39CB7388 /* PFPushController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushController.h; path = Parse/Internal/Push/Controller/PFPushController.h; sourceTree = ""; }; - 0FE1708AB969B7C864FA6A717B2332A5 /* PFCoreManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreManager.h; path = Parse/Internal/PFCoreManager.h; sourceTree = ""; }; - 105DFF60164FDC71E3359B156DAE0937 /* PFRESTCloudCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCloudCommand.m; path = Parse/Internal/Commands/PFRESTCloudCommand.m; sourceTree = ""; }; - 10C1CF41ACFAC3F0E71569AE1A84C121 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = Parse/Resources/en.lproj; sourceTree = ""; }; - 12BB94C26636A7E690216E2AEEFAF264 /* Parse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse.h; path = Parse/Parse.h; sourceTree = ""; }; + 0AED3FD61E1EF7915955E1D7600608EB /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; + 0B440A60956319D37497AA73807B5A30 /* PFHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHash.m; path = Parse/Internal/PFHash.m; sourceTree = ""; }; + 0BE6A6845F3586D10E5408C9FB591328 /* PFMutableFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableFileState.m; path = Parse/Internal/File/State/PFMutableFileState.m; sourceTree = ""; }; + 0C0458126D7C16A449337164DDC84D21 /* PFQueryCollectionViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryCollectionViewController.h; path = ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h; sourceTree = ""; }; + 0D9C3B80FDA98CB3B3C80A70441B019C /* PFUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState.h; path = Parse/Internal/User/State/PFUserState.h; sourceTree = ""; }; + 0E987F26F4B8054102531C64F176F982 /* PFRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelationState.m; path = Parse/Internal/Relation/State/PFRelationState.m; sourceTree = ""; }; + 1039D733B7402E51965445AD5B5DCB98 /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; + 1045C6BD9178A7E123E2001F4061D8EF /* PFLogInView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogInView.m; path = ParseUI/Classes/LogInViewController/PFLogInView.m; sourceTree = ""; }; + 10926AEF9594A323E624C27E8F4B643A /* PFUIAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUIAlertView.h; path = ParseUI/Classes/Internal/Extensions/PFUIAlertView.h; sourceTree = ""; }; + 110EB87EF49E8CF2B18E11692AC1E903 /* PFDefaultACLController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDefaultACLController.m; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m; sourceTree = ""; }; + 11C9D5CD5B0EBCA52D876E7FBB58F435 /* PFDateFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDateFormatter.h; path = Parse/Internal/PFDateFormatter.h; sourceTree = ""; }; + 1315EBF14A0D75438D37ED2C3FA79516 /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+AFNetworking.m"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.m"; sourceTree = ""; }; 134BDC30251FB7A5465C17F603FCAC5F /* POPPropertyAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPPropertyAnimationInternal.h; path = pop/POPPropertyAnimationInternal.h; sourceTree = ""; }; - 13D7A1D1A9F6D9020B6E721D5D4D5730 /* PFSQLiteDatabaseResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseResult.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m; sourceTree = ""; }; 14938EB08280063D294781C3164C8332 /* POPAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimation.h; path = pop/POPAnimation.h; sourceTree = ""; }; - 14BFF77A40EB6D31D0D53D242A01BED0 /* PFDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDevice.h; path = Parse/Internal/PFDevice.h; sourceTree = ""; }; + 159D21FB91947A9EBAD9A6D923A0E579 /* PFRESTPushCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTPushCommand.m; path = Parse/Internal/Commands/PFRESTPushCommand.m; sourceTree = ""; }; 15A529C27057E4A57D259CBC6E6CE49C /* Pods-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-acknowledgements.markdown"; sourceTree = ""; }; - 15DCE6DD786D364DDA4BCAD1F24895FD /* PFSessionUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionUtilities.h; path = Parse/Internal/Session/Utilities/PFSessionUtilities.h; sourceTree = ""; }; - 1896BB3AD97D1E8CB9D17C6A982672DB /* PFDefaultACLController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDefaultACLController.m; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m; sourceTree = ""; }; - 189B90A77BD5596205FB77D8F7DBBC66 /* PFPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPin.h; path = Parse/Internal/LocalDataStore/Pin/PFPin.h; sourceTree = ""; }; - 18D7C9B8DD8A89571437499374A39984 /* PFConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig_Private.h; path = Parse/Internal/Config/PFConfig_Private.h; sourceTree = ""; }; - 196698284757A108BD18D4EFC0D470B2 /* PFObjectFileCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCoder.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.m; sourceTree = ""; }; + 15B3921F710AB762D4B6DCFC53018A70 /* PFRect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRect.h; path = ParseUI/Classes/Internal/Extensions/PFRect.h; sourceTree = ""; }; + 161C522EE324169DC559AED510116C63 /* PFActivityIndicatorTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActivityIndicatorTableViewCell.m; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.m; sourceTree = ""; }; + 16BA4C30B79BFCF3F4A3AE316FC70C8F /* PFInstallationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationConstants.m; path = Parse/Internal/Installation/Constants/PFInstallationConstants.m; sourceTree = ""; }; + 17A3A025CC5669EAB17537171EB530B4 /* PFDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDataProvider.h; path = Parse/Internal/PFDataProvider.h; sourceTree = ""; }; + 17A3AD5BCF18F3E0478C884A2B764C4B /* PFAsyncTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAsyncTaskQueue.h; path = Parse/Internal/PFAsyncTaskQueue.h; sourceTree = ""; }; + 17DC80DA8AA3988FB60EAEFDA4C6CAC5 /* PFPushUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushUtilities.h; path = Parse/Internal/Push/Utilites/PFPushUtilities.h; sourceTree = ""; }; + 187E6237B057376167C9530E9E3D2597 /* PFUserAuthenticationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserAuthenticationController.m; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m; sourceTree = ""; }; + 190972B3389C83F8279C6D8F35289902 /* PFCurrentUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentUserController.m; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.m; sourceTree = ""; }; + 1912D51690BFB2430D2FC6F89935CD27 /* Parse-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-prefix.pch"; sourceTree = ""; }; 197635F0BFB93E63E82503F09B7AABBF /* POPLayerExtras.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPLayerExtras.mm; path = pop/POPLayerExtras.mm; sourceTree = ""; }; - 1A207317F4EF6A614BE7034DE5F3A9E9 /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; - 1A28796B1724F0F5B766249296CA182A /* PFMutableUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableUserState.h; path = Parse/Internal/User/State/PFMutableUserState.h; sourceTree = ""; }; - 1A5BCF29FD1B3CBCBD8B387388746B55 /* PFAnonymousAuthenticationProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousAuthenticationProvider.m; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m; sourceTree = ""; }; - 1B2FDDD8F730AFFD1DFF805E250C3654 /* PFPushChannelsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushChannelsController.h; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.h; sourceTree = ""; }; - 1C0E7BEE92130638A860786486BF4398 /* PFEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyQueue.m; path = Parse/Internal/PFEventuallyQueue.m; sourceTree = ""; }; - 1C4613FF21CF534DDDB393C04D6279F3 /* Bolts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-prefix.pch"; sourceTree = ""; }; - 1DB83418592CB04C28FA16D53A2F50BB /* ParseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseManager.m; path = Parse/Internal/ParseManager.m; sourceTree = ""; }; - 1DD825DA40E92E93FAC2EA00807BF7D1 /* PFPropertyInfo_Runtime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Runtime.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h; sourceTree = ""; }; - 1E08E20DF9125F146349FA765648DCA3 /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+AFNetworking.h"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.h"; sourceTree = ""; }; - 1E4D88B0EC5CA12C799F9F3C05C0B31E /* UIView+YALConstraints.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+YALConstraints.h"; path = "YALContextMenu/UIView+YALConstraints.h"; sourceTree = ""; }; - 1EBBF4F6FA934C6BCACE0C5744A3BF58 /* PFReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFReachability.h; path = Parse/Internal/PFReachability.h; sourceTree = ""; }; - 1FCA6291D3A1D8E40FC410D0747380DC /* PFRelation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelation.m; path = Parse/PFRelation.m; sourceTree = ""; }; - 1FE2EB61A95016598E72642BFBCBADBE /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; - 202A2922E63631CD23C09430889F7248 /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperationManager.h; path = AFNetworking/AFHTTPRequestOperationManager.h; sourceTree = ""; }; - 206BAB6E51C3AC0ACA2E1320A911DA36 /* PFFileDataStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileDataStream.m; path = Parse/Internal/File/FileDataStream/PFFileDataStream.m; sourceTree = ""; }; + 19A96C3911D00F07330D94949348F1EE /* PFRESTCloudCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCloudCommand.m; path = Parse/Internal/Commands/PFRESTCloudCommand.m; sourceTree = ""; }; + 1A2F0A20C55B0387272AD66520D13A5C /* PFDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDecoder.m; path = Parse/Internal/PFDecoder.m; sourceTree = ""; }; + 1A40A4CAE6145F41C05AA25BD5CA9BD9 /* PFSQLiteDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h; sourceTree = ""; }; + 1A782DEC3085443686EE99BF46207C32 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 1C41DBC222643AB47C9976935B1047D3 /* PFRESTAnalyticsCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTAnalyticsCommand.m; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.m; sourceTree = ""; }; + 1C55517F4B7361A3891B563478721DED /* PFErrorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFErrorUtilities.h; path = Parse/Internal/PFErrorUtilities.h; sourceTree = ""; }; + 1C97247E12ADC1F7516B907DB1083863 /* PFSignUpViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSignUpViewController.h; path = ParseUI/Classes/SignUpViewController/PFSignUpViewController.h; sourceTree = ""; }; + 1D505F6BC2E75E018CC37E152B154653 /* PFFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState.h; path = Parse/Internal/File/State/PFFileState.h; sourceTree = ""; }; + 1F447819CD0C3DF808D6946A6364F969 /* PFEncoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEncoder.h; path = Parse/Internal/PFEncoder.h; sourceTree = ""; }; 212068113F29FA47D17730ED388F8706 /* POPBasicAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPBasicAnimation.h; path = pop/POPBasicAnimation.h; sourceTree = ""; }; + 212C53C992FAFCD6E80C8674CA34B074 /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; + 218C17FDFAF32433D839F97FF17B2F62 /* PFRelation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelation.h; path = Parse/PFRelation.h; sourceTree = ""; }; + 2248EAD3CAEF6EBEDAA0AC7AC52C51DF /* PFPropertyInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo.h; sourceTree = ""; }; + 22672E7A70EC530B20C26F2C140E29B2 /* PFCloudCodeController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloudCodeController.h; path = Parse/Internal/CloudCode/PFCloudCodeController.h; sourceTree = ""; }; 22DC4C87D619EF0F28631B5560E82333 /* POPAnimationExtras.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationExtras.mm; path = pop/POPAnimationExtras.mm; sourceTree = ""; }; - 2348B7338D870B151D50A511AC6711D0 /* PFEventuallyPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyPin.h; path = Parse/Internal/PFEventuallyPin.h; sourceTree = ""; }; - 237D0CDD69C7B78A1BDB8DDF87F9EC2A /* PFObjectEstimatedData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectEstimatedData.h; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h; sourceTree = ""; }; - 245BC03B9F6AB7B69A163206AF3C2C32 /* PFBaseState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBaseState.m; path = Parse/Internal/PFBaseState.m; sourceTree = ""; }; - 245FF007BEF549EF81D7E0222214C303 /* PFKeyValueCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache.h; sourceTree = ""; }; - 24E60B787A9F785262AC44B47108D70D /* PFCommandCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandCache.m; path = Parse/Internal/PFCommandCache.m; sourceTree = ""; }; - 26DE5D007AAFB71206252AE40BAE833B /* PFFileDataStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileDataStream.h; path = Parse/Internal/File/FileDataStream/PFFileDataStream.h; sourceTree = ""; }; + 25C2F29D6B6FBDBAA33D8593E65EC348 /* PFAnonymousUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousUtils.m; path = Parse/PFAnonymousUtils.m; sourceTree = ""; }; + 26F7C6740719BEC436C7CD3912C491A4 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; + 270B41DE1EE1C3B5391246CDAED4C8BE /* PFURLSessionFileDownloadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionFileDownloadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h; sourceTree = ""; }; + 2713B9DB4119C31C77089DFEF6EE5B0E /* PFCoreDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreDataProvider.h; path = Parse/Internal/PFCoreDataProvider.h; sourceTree = ""; }; 2726A20CBCFFB77F9972C445E8972099 /* POPPropertyAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPPropertyAnimation.mm; path = pop/POPPropertyAnimation.mm; sourceTree = ""; }; - 2792004D5441520275B8E22F94BD8E5C /* PFObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectControlling.h; path = Parse/Internal/Object/Controller/PFObjectControlling.h; sourceTree = ""; }; - 27E3589A502DA67E5F75BFDD5AB13E57 /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; - 283151768413CC359CA4D2B1E9BA275A /* PFFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileState.m; path = Parse/Internal/File/State/PFFileState.m; sourceTree = ""; }; - 285AE108BCA0C7BACB4D927E8D1F8665 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; - 28676FBC1D97921BD11D7A12C922CD0A /* PFObjectFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCodingLogic.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h; sourceTree = ""; }; - 291630B6FE4315F0B5B789D1ED22A66C /* PFQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQuery.m; path = Parse/PFQuery.m; sourceTree = ""; }; - 2966362D026D5B9C80E247EEDC0F4E9B /* PFCurrentConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentConfigController.m; path = Parse/Internal/Config/Controller/PFCurrentConfigController.m; sourceTree = ""; }; - 2B2B77FA62BB014F37CDD536B7F39AD5 /* PFApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFApplication.h; path = Parse/Internal/PFApplication.h; sourceTree = ""; }; - 2B493332AF25497985B3420336C8E310 /* PFSessionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionController.h; path = Parse/Internal/Session/Controller/PFSessionController.h; sourceTree = ""; }; - 2B6673C9F7E97CEA6C3B3B57C906C095 /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; - 2B7693C271516E5E5D162BA7DC113F4E /* PFBaseState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBaseState.h; path = Parse/Internal/PFBaseState.h; sourceTree = ""; }; - 2BD22E7A59F4BEFF52D4F43A0AA7EB30 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; - 2DA3428B35116EA19374F593BE42F3BD /* PFRole.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRole.m; path = Parse/PFRole.m; sourceTree = ""; }; - 2DC00CBF82C85912449AE191DBEC053D /* PFOfflineQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryController.m; path = Parse/Internal/Query/Controller/PFOfflineQueryController.m; sourceTree = ""; }; + 27C2859683043CE13C206444451CA55D /* PFRESTObjectBatchCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectBatchCommand.m; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.m; sourceTree = ""; }; + 28D60E52FD4E440EA2F1B080932410DE /* ParseModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseModule.m; path = Parse/Internal/ParseModule.m; sourceTree = ""; }; + 28F300166004C87461905D9822D4C136 /* PFUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserState.m; path = Parse/Internal/User/State/PFUserState.m; sourceTree = ""; }; + 2940BC6B2FD4089D74072136047C2FEE /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; + 29704F78778234595067B1E9C61399BE /* PFOperationSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOperationSet.m; path = Parse/Internal/Object/OperationSet/PFOperationSet.m; sourceTree = ""; }; + 29883E2F7FA2CA83E9313FBE44CEE849 /* PFOfflineQueryLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryLogic.h; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h; sourceTree = ""; }; + 2BA1448D29C364710AC0CCAC65063979 /* pop-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "pop-prefix.pch"; sourceTree = ""; }; + 2C343079DDD088139CD814C6470830F6 /* PFObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObject.h; path = Parse/PFObject.h; sourceTree = ""; }; 2E056FF5C4EC38A55B45FB52F395D72E /* TransformationMatrix.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TransformationMatrix.h; path = pop/WebCore/TransformationMatrix.h; sourceTree = ""; }; + 2E0AAD20A6FEA44B0CFB6CF47B721809 /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperationManager.m; path = AFNetworking/AFHTTPRequestOperationManager.m; sourceTree = ""; }; 2E88590D291A3C131FC32F9BC9A80038 /* POPAnimationTracer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationTracer.h; path = pop/POPAnimationTracer.h; sourceTree = ""; }; - 3070F8AC10357FBF3BA3FE9A093D8A9B /* PFPropertyInfo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Private.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h; sourceTree = ""; }; + 2ECBBFC9244A3F50EA402F166DEB6DCA /* PFWeakValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFWeakValue.m; path = Parse/Internal/PFWeakValue.m; sourceTree = ""; }; + 2F22D85829359CAC7406869D232CB96B /* PFLogInViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogInViewController.m; path = ParseUI/Classes/LogInViewController/PFLogInViewController.m; sourceTree = ""; }; + 2F4C5429E2494ED58C557A5F11CCC6AC /* PFLogInView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInView.h; path = ParseUI/Classes/LogInViewController/PFLogInView.h; sourceTree = ""; }; + 2F9ABD34BEBC96F253CE102411DABDED /* PFObjectFileCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCoder.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.h; sourceTree = ""; }; + 2FD4E699963B718746F80595602968BA /* PFFileController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileController.m; path = Parse/Internal/File/Controller/PFFileController.m; sourceTree = ""; }; + 2FEDA810326DCCCBD587DEF33586F24C /* PFURLSessionDataTaskDelegate_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h; sourceTree = ""; }; + 2FF4FE0BB509523AA3AB48C24B04D2AD /* PFInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallation.m; path = Parse/PFInstallation.m; sourceTree = ""; }; 313669CF0D1BF49C96C85FC593F4BC1D /* POPAnimatableProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimatableProperty.h; path = pop/POPAnimatableProperty.h; sourceTree = ""; }; + 314F14CB5AC1E3119F923E7D73FD2F55 /* PFFieldOperationDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperationDecoder.h; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.h; sourceTree = ""; }; 3155A15C877F794FB064A4A0CEEB2F13 /* POPGeometry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPGeometry.h; path = pop/POPGeometry.h; sourceTree = ""; }; - 315895D529B1136E61253E4EEE127FAC /* PFPinningObjectStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningObjectStore.m; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.m; sourceTree = ""; }; - 3161EE94B4EAC7208319195F1483596D /* libContextMenu.iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libContextMenu.iOS.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 32AEDEB7E9CE1E1D2795C43EFD540009 /* PFNullability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNullability.h; path = Parse/PFNullability.h; sourceTree = ""; }; - 32D54A528AA2134A544108B4E124A617 /* PFRESTObjectBatchCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectBatchCommand.m; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.m; sourceTree = ""; }; - 33CAFF9933F161C320331CCA71D23A5F /* PFRole.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRole.h; path = Parse/PFRole.h; sourceTree = ""; }; - 345A7737A02453DD9D85EE95F928690B /* PFMutableQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableQueryState.h; path = Parse/Internal/Query/State/PFMutableQueryState.h; sourceTree = ""; }; - 347D5D631A6A12B0298E13B5415AEAAF /* PFURLSessionUploadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionUploadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h; sourceTree = ""; }; - 3501C65AE5330DD19D3236E70095C9D8 /* PFConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfigController.m; path = Parse/Internal/Config/Controller/PFConfigController.m; sourceTree = ""; }; - 35568ABE019B8ED099EFF07CE242DD67 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; + 3191215D0811BF0108D28AC1F82B3739 /* PFLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogger.m; path = Parse/Internal/PFLogger.m; sourceTree = ""; }; + 31EF40A5583C282323AF183A3C383CBE /* PFURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSession.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m; sourceTree = ""; }; + 31F9E89C104ACA3B7C08B33DB94FFED2 /* PFQueryTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryTableViewController.m; path = ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m; sourceTree = ""; }; + 331270F5C910E5D29DEFABA0DA889E54 /* PFRESTUserCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTUserCommand.m; path = Parse/Internal/Commands/PFRESTUserCommand.m; sourceTree = ""; }; + 33BB29F39122EC7F976E5232ED519B46 /* PFSignUpView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSignUpView.m; path = ParseUI/Classes/SignUpViewController/PFSignUpView.m; sourceTree = ""; }; + 348553BBE97419579F9F55AA50C5F99B /* BFTask+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Private.m"; path = "Parse/Internal/BFTask+Private.m"; sourceTree = ""; }; + 34E2D0613E3152D0F6D3B2C1F125895C /* PFThreadsafety.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFThreadsafety.h; path = Parse/Internal/ThreadSafety/PFThreadsafety.h; sourceTree = ""; }; 35574BADA6CDEA944F089CBC021F01AA /* TransformationMatrix.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TransformationMatrix.cpp; path = pop/WebCore/TransformationMatrix.cpp; sourceTree = ""; }; - 358BFE48BAAE8F3F03CD0C0904BC4C08 /* PFUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserController.m; path = Parse/Internal/User/Controller/PFUserController.m; sourceTree = ""; }; - 36B65B247D65EE46D2A8F3ACDC87870F /* PFAnonymousUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils.h; path = Parse/PFAnonymousUtils.h; sourceTree = ""; }; - 36E7ABF06376C0698BE4B369C1255EAD /* PFRESTCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCommand.m; path = Parse/Internal/Commands/PFRESTCommand.m; sourceTree = ""; }; - 372923DCA1E5BFDF1DBD57E93002E783 /* PFMultiProcessFileLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLock.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h; sourceTree = ""; }; - 372FE1327079A6911530ABFAF7BF2E68 /* PFMutableRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableRelationState.m; path = Parse/Internal/Relation/State/PFMutableRelationState.m; sourceTree = ""; }; - 37D8598915FD79DCA21C88192869017A /* PFPinningObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningObjectStore.h; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.h; sourceTree = ""; }; - 37DCE2246C320FA0B8BF9CAD3758AE71 /* PFAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAlertView.m; path = Parse/Internal/PFAlertView.m; sourceTree = ""; }; - 3801D32A117D840B4286437B7A779361 /* PFRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelationState.m; path = Parse/Internal/Relation/State/PFRelationState.m; sourceTree = ""; }; - 385A446A8250571BBD7FF461E05E1382 /* YALContextMenuTableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YALContextMenuTableView.m; path = YALContextMenu/YALContextMenuTableView.m; sourceTree = ""; }; + 358076BF1FC2383D78542D2EFF4939ED /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; + 3585F7A481D939D1D1C3294775ACDBE7 /* PFPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPin.m; path = Parse/Internal/LocalDataStore/Pin/PFPin.m; sourceTree = ""; }; + 35D8F9A9CC00721366C770FD9E85A417 /* PFProduct+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFProduct+Private.h"; path = "Parse/Internal/Product/PFProduct+Private.h"; sourceTree = ""; }; + 35F2BD9CCE69BA4DEBCD6F1FA72E072A /* PFAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics.h; path = Parse/PFAnalytics.h; sourceTree = ""; }; + 35F8D658E839BECDFF6BB8B4BC6CCE2D /* PFRESTQueryCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTQueryCommand.h; path = Parse/Internal/Commands/PFRESTQueryCommand.h; sourceTree = ""; }; + 36204B280B4F34FB73981677EC64B941 /* PFSQLiteStatement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteStatement.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m; sourceTree = ""; }; + 365EAFBED43EBA1E76B6777D42421642 /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; + 3662B43E3AABF39CEFE44FA79A74BB70 /* PFProductTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductTableViewController.m; path = ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m; sourceTree = ""; }; + 37763F17F64B25496F9259C6C59F7CB8 /* YALContextMenuTableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YALContextMenuTableView.h; path = YALContextMenu/YALContextMenuTableView.h; sourceTree = ""; }; + 3827F868B3F08C9E6CA5CFEEE3C83EED /* YALContextMenuTableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YALContextMenuTableView.m; path = YALContextMenu/YALContextMenuTableView.m; sourceTree = ""; }; + 3841F19677B4987758E47C8053644CD1 /* PFURLSessionDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m; sourceTree = ""; }; + 3845B32677B589F5F7443E7D6E469D4A /* libParse.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libParse.a; sourceTree = BUILT_PRODUCTS_DIR; }; 38C1E5A4A6882760CB349FCABD22A9DC /* POP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POP.h; path = pop/POP.h; sourceTree = ""; }; - 38C5CB3B26D08AF88F501A05B91F10B4 /* PFObjectBatchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectBatchController.h; path = Parse/Internal/Object/BatchController/PFObjectBatchController.h; sourceTree = ""; }; - 38E00AD6C99A24C72256073EDD208D3F /* PFAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAssert.h; path = Parse/Internal/PFAssert.h; sourceTree = ""; }; - 39451587CFA3D7024575C72DA66A271B /* PFPushUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushUtilities.h; path = Parse/Internal/Push/Utilites/PFPushUtilities.h; sourceTree = ""; }; - 39A27D94EB41AD237B4F4E722852F9B6 /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; + 39673E55062D1B61E621B82E444AE6CA /* PFGeoPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFGeoPoint.m; path = Parse/PFGeoPoint.m; sourceTree = ""; }; + 39FFEDFCBEA2D381B7572D62222BF55D /* PFQueryUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryUtilities.m; path = Parse/Internal/Query/Utilities/PFQueryUtilities.m; sourceTree = ""; }; 3A5F7AF86D19E519B94AD6D8CB98CC34 /* POPAnimationRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationRuntime.h; path = pop/POPAnimationRuntime.h; sourceTree = ""; }; - 3D7123F7FE1F84DEDBE2ED35D8844839 /* PFObjectFilePersistenceController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFilePersistenceController.h; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h; sourceTree = ""; }; - 3DB8817B308E2B46E23993461AC18E54 /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; - 3DFA1FB737DEBE392F5582656ED1040B /* PFObjectSubclassInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassInfo.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m; sourceTree = ""; }; - 3E2E03FFA5C12908D09BC583858570B6 /* PFKeyValueCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeyValueCache.m; path = Parse/Internal/KeyValueCache/PFKeyValueCache.m; sourceTree = ""; }; - 400935A9AE97EE38E7C59CBBD474FA32 /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; - 411AD8B8B53F6CAF9198BBBBB07AC033 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; - 41A069B9AF3C8F611F76F20326AB035E /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; - 436A81D9B2A9E41E99BF86F1C6871A0A /* PFThreadsafety.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFThreadsafety.m; path = Parse/Internal/ThreadSafety/PFThreadsafety.m; sourceTree = ""; }; - 450938391ACE611C45583A2F6117FD6D /* PFURLSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h; sourceTree = ""; }; - 453A45902215CAB1B07AEEBCAEC35958 /* PFAsyncTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAsyncTaskQueue.h; path = Parse/Internal/PFAsyncTaskQueue.h; sourceTree = ""; }; - 457B2F0DFF5B74AEFF8A1D9A714104EA /* PFUserPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserPrivate.h; path = Parse/Internal/User/PFUserPrivate.h; sourceTree = ""; }; - 461917BD0B571A033CB9E74AD334A12C /* PFFileStagingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileStagingController.m; path = Parse/Internal/File/Controller/PFFileStagingController.m; sourceTree = ""; }; - 46A44DBE60FFDA06D7726DD3091A0E47 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; - 4743EB53C73E4B52C1EC84395BD476F5 /* Parse-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Parse-Private.xcconfig"; sourceTree = ""; }; - 475310436BBAD84F7095E6DB0BB83F78 /* PFMulticastDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMulticastDelegate.m; path = Parse/Internal/PFMulticastDelegate.m; sourceTree = ""; }; - 47DED761A5B41071D4A460714CF9A610 /* PFURLSessionCommandRunner_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h; sourceTree = ""; }; - 48514E935FE3E435F151EFEB4D829A65 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; - 489E3B9351E8F3F82DAFE89EEEC84804 /* PFFileController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileController.h; path = Parse/Internal/File/Controller/PFFileController.h; sourceTree = ""; }; - 48DF685D40431A00C7B7572D23340086 /* PFCommandRunningConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunningConstants.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m; sourceTree = ""; }; - 4A0A7E7C948EBD45C167B8D1A339D98A /* PFInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallation.m; path = Parse/PFInstallation.m; sourceTree = ""; }; - 4A747E0C0BA89EAF9D9C9B35EA62B097 /* PFRESTQueryCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTQueryCommand.m; path = Parse/Internal/Commands/PFRESTQueryCommand.m; sourceTree = ""; }; - 4B4E5220C651194225EB11D393463146 /* PFFieldOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperation.m; path = Parse/Internal/FieldOperation/PFFieldOperation.m; sourceTree = ""; }; + 3AF83C8DCC1E7EFC3B79460BFA1DE1C9 /* PFFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFile.m; path = Parse/PFFile.m; sourceTree = ""; }; + 3B19DBC177333992D2D0D2D98EB6BA58 /* PFReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFReachability.m; path = Parse/Internal/PFReachability.m; sourceTree = ""; }; + 3BB229E81638C48D768ACFA74D97E7E4 /* PFRESTUserCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTUserCommand.h; path = Parse/Internal/Commands/PFRESTUserCommand.h; sourceTree = ""; }; + 3C3D77BC909D77D1BFD9EB010608B1E4 /* PFACLState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState_Private.h; path = Parse/Internal/ACL/State/PFACLState_Private.h; sourceTree = ""; }; + 3C6EC3EAC5F58685494656DAB9912EA7 /* PFQueryPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryPrivate.h; path = Parse/Internal/Query/PFQueryPrivate.h; sourceTree = ""; }; + 3DBC85FB02CFE6EE23007AB1EE43B774 /* PFQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryController.h; path = Parse/Internal/Query/Controller/PFQueryController.h; sourceTree = ""; }; + 3E49F373A0C99D0BDC90B707820423BE /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; + 3F8A7EECD6F3077A3B0FC86D271300A6 /* PFPrimaryButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPrimaryButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h; sourceTree = ""; }; + 3F8F0DF089A8D938A0A83B044D743001 /* PFColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFColor.m; path = ParseUI/Classes/Internal/Extensions/PFColor.m; sourceTree = ""; }; + 3FC9896164A2A05D8D267241CD2C2615 /* PFPinningObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningObjectStore.h; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.h; sourceTree = ""; }; + 415E520ADA42019A24142D17486874BE /* PFDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDecoder.h; path = Parse/Internal/PFDecoder.h; sourceTree = ""; }; + 41E4EF38F3F42973C09F8820315F75C3 /* Bolts.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.xcconfig; sourceTree = ""; }; + 42416DC02ED2707B15870496281BE361 /* PFReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFReachability.h; path = Parse/Internal/PFReachability.h; sourceTree = ""; }; + 4415F3C02D8407018883CAFD17661FD9 /* PFTextButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTextButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFTextButton.m; sourceTree = ""; }; + 44E52571D995DF254E53AD007ED4859C /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; + 45637DE63711406B9BE1BECBB23B8EE0 /* PFObjectUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectUtilities.h; path = Parse/Internal/Object/Utilities/PFObjectUtilities.h; sourceTree = ""; }; + 466D8E751494438DECF05B755061844C /* PFFileStagingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileStagingController.h; path = Parse/Internal/File/Controller/PFFileStagingController.h; sourceTree = ""; }; + 470D6445B0D70D789438D349CC071D71 /* PFSessionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionController.m; path = Parse/Internal/Session/Controller/PFSessionController.m; sourceTree = ""; }; + 48D4D5780017286C543013DEDE63D651 /* PFPaymentTransactionObserver_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver_Private.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h; sourceTree = ""; }; + 4A3635CE479DD0FD03FB5589A75B62EC /* PFObjectFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCodingLogic.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h; sourceTree = ""; }; + 4A595D297E140ECE32592BFEFC293B9A /* PFImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImage.m; path = ParseUI/Classes/Internal/Extensions/PFImage.m; sourceTree = ""; }; + 4A7EEF110C12FC52BD3E497ADDEF6E48 /* PFSQLiteDatabaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseController.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m; sourceTree = ""; }; + 4B0FB893863BB0FE866F5AA02F5D0360 /* PFPaymentTransactionObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPaymentTransactionObserver.m; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m; sourceTree = ""; }; + 4B5B237502D9B0D2DDFB52EE72716703 /* PFURLSessionFileDownloadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionFileDownloadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m; sourceTree = ""; }; + 4CAA43C472F7F6152B3507ABDDE9AD44 /* PFTextField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTextField.h; path = ParseUI/Classes/Views/PFTextField.h; sourceTree = ""; }; 4CC05709207C91767940918CDD4779DC /* POPCGUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPCGUtils.h; path = pop/POPCGUtils.h; sourceTree = ""; }; - 4CD3D62A5F9D0B310DCF7C520D812B6F /* ParseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseManager.h; path = Parse/Internal/ParseManager.h; sourceTree = ""; }; - 4D237A86108BD1DB8A37BCC3FCA0DC90 /* PFAnalyticsUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsUtilities.m; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m; sourceTree = ""; }; - 4DC525DF3A9AB295F68FFA79C1865B4D /* PFApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFApplication.m; path = Parse/Internal/PFApplication.m; sourceTree = ""; }; - 4DDA8143D2C09DF9986817461C4DD498 /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; - 4FA3D2B13C2E276A13164FD9D412F89D /* PFPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPin.m; path = Parse/Internal/LocalDataStore/Pin/PFPin.m; sourceTree = ""; }; - 5038524C4AA89B3EC607E5B47A706CCA /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; - 507ED5364F8D323521133232F9E26134 /* PFBase64Encoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBase64Encoder.h; path = Parse/Internal/PFBase64Encoder.h; sourceTree = ""; }; - 512576519C7D60E088B9946D68C2893B /* UIAlertView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAlertView+AFNetworking.m"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.m"; sourceTree = ""; }; - 51740A0EDDF3B04E8A46D98B3807D440 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; - 52808B026D92DB8F0DCCBCA2EE24FEEF /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; - 529C0DC5511102F293AAA76310789551 /* PFProductsRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductsRequestHandler.h; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h; sourceTree = ""; }; - 530ED4C4F72784908C56CECFABD0231C /* PFObjectBatchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectBatchController.m; path = Parse/Internal/Object/BatchController/PFObjectBatchController.m; sourceTree = ""; }; - 5367E0C94AEC8755F6974A3C97264428 /* PFRESTFileCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTFileCommand.m; path = Parse/Internal/Commands/PFRESTFileCommand.m; sourceTree = ""; }; - 53683441896998F6CE0216D4310DD24D /* PFACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState.h; path = Parse/Internal/ACL/State/PFACLState.h; sourceTree = ""; }; - 554179C2DB1E42B74E86A13E79A45730 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; - 5583C012407DD3D86BE591291FD5B40E /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; - 562875D8611745AF8CD45A6CDA6DC927 /* PFUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState.h; path = Parse/Internal/User/State/PFUserState.h; sourceTree = ""; }; - 568A6DDB145B9BE497001F309F81C25D /* PFBase64Encoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBase64Encoder.m; path = Parse/Internal/PFBase64Encoder.m; sourceTree = ""; }; - 56CE00CA829DE03D96192E0DB1B3B4B5 /* PFPushState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState_Private.h; path = Parse/Internal/Push/State/PFPushState_Private.h; sourceTree = ""; }; - 5710C75607065D22ED2DB5CCCFB27A3D /* PFObjectConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectConstants.h; path = Parse/Internal/Object/Constants/PFObjectConstants.h; sourceTree = ""; }; - 5775915FCBF7CB8AB7E50C1474A500B5 /* PFRESTObjectCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectCommand.m; path = Parse/Internal/Commands/PFRESTObjectCommand.m; sourceTree = ""; }; + 4D1BA2737792A257200ECAE76708D233 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; + 4D23A382F14DB50C5CF89F62A1401FFD /* ParseInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseInternal.h; path = Parse/Internal/ParseInternal.h; sourceTree = ""; }; + 4D9FF040FF41C3E677D9AE345094667B /* PFUserAuthenticationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationDelegate.h; path = Parse/PFUserAuthenticationDelegate.h; sourceTree = ""; }; + 4DC8B50782AEA44066CA5219CEC67A5F /* PFNullability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNullability.h; path = Parse/PFNullability.h; sourceTree = ""; }; + 4E9B0790246604518A313DFB192E257C /* PFLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogging.h; path = Parse/Internal/PFLogging.h; sourceTree = ""; }; + 4F6C88082787B2C81249E9AC5C14B411 /* PFAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAlertView.m; path = Parse/Internal/PFAlertView.m; sourceTree = ""; }; + 4F7FEA8114B1934AF71EEAF5B655B908 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; + 505C7EAE502AC992E9273C10AEFCC86D /* PFSessionUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionUtilities.h; path = Parse/Internal/Session/Utilities/PFSessionUtilities.h; sourceTree = ""; }; + 506FFF3B464AAC43A21AD8404EDB0408 /* PFQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryState.m; path = Parse/Internal/Query/State/PFQueryState.m; sourceTree = ""; }; + 50A3A1846FA5A0CC07A927EBC49B5BF2 /* PFSessionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionController.h; path = Parse/Internal/Session/Controller/PFSessionController.h; sourceTree = ""; }; + 50FDC487ACDFDD8DDE2E916C1BC455FB /* PFObjectSubclassInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassInfo.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m; sourceTree = ""; }; + 511824AA2AD76251DC45B56662AA4DA7 /* PFAsyncTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAsyncTaskQueue.m; path = Parse/Internal/PFAsyncTaskQueue.m; sourceTree = ""; }; + 51B91EABBB44E7CF6E6B3CD95D857313 /* ParseUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseUI.h; path = ParseUI/Other/ParseUI.h; sourceTree = ""; }; + 51E4264B938F3B426D4673C5853B2500 /* PFConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfigController.h; path = Parse/Internal/Config/Controller/PFConfigController.h; sourceTree = ""; }; + 5216F571A9C35B49AC646497DEBD2B3C /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; + 526FB5D06EEAEC04BB51ADED7679CF69 /* YALContextMenuCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YALContextMenuCell.h; path = YALContextMenu/YALContextMenuCell.h; sourceTree = ""; }; + 5359BA092EAD4FA522BBB80FC27C145E /* PFPinningObjectStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningObjectStore.m; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.m; sourceTree = ""; }; + 53FB4903C13CD4B728E653A624D36228 /* PFProduct.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProduct.m; path = Parse/PFProduct.m; sourceTree = ""; }; + 5501D5BA77001B3A319125F589DE4774 /* PFRelationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationPrivate.h; path = Parse/Internal/Relation/PFRelationPrivate.h; sourceTree = ""; }; + 563F4B9FC46A7DD720D8945683D2129D /* PFFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileState.m; path = Parse/Internal/File/State/PFFileState.m; sourceTree = ""; }; + 56B759F1D8C8CB47D727B586BB4AC069 /* ContextMenu.iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ContextMenu.iOS-dummy.m"; sourceTree = ""; }; + 573E7709FAFC9CAAA3DF68F8C7ECC087 /* PFObjectSubclassingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassingController.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h; sourceTree = ""; }; 5785AD09C2208501D5161E950E701889 /* POPAnimationEventInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationEventInternal.h; path = pop/POPAnimationEventInternal.h; sourceTree = ""; }; - 57B1DA40C85BD720B286FFF8C7EA6F91 /* PFInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallation.h; path = Parse/PFInstallation.h; sourceTree = ""; }; - 57F2605E98764A7779B3213480606C71 /* PFGeoPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFGeoPoint.m; path = Parse/PFGeoPoint.m; sourceTree = ""; }; - 58143C3358B762BB4DC15795BD82B8B9 /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; - 58898FE04784C24EDFF6D77428F6BB91 /* PFJSONSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFJSONSerialization.h; path = Parse/Internal/PFJSONSerialization.h; sourceTree = ""; }; - 58EC2DED4BCC481232C4E104FEB2F9ED /* PFQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState.h; path = Parse/Internal/Query/State/PFQueryState.h; sourceTree = ""; }; - 59143BC1CCA767489CC63EC79299C132 /* PFFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFile.m; path = Parse/PFFile.m; sourceTree = ""; }; - 595A306B6C145E017C4B885F8ABB9F94 /* PFRESTCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand.h; path = Parse/Internal/Commands/PFRESTCommand.h; sourceTree = ""; }; + 57C18DD90130326F25EB38A9F343D5B5 /* PFRelationState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState_Private.h; path = Parse/Internal/Relation/State/PFRelationState_Private.h; sourceTree = ""; }; + 57D6481216B3368FC95D692879E27822 /* PFKeyValueCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeyValueCache.m; path = Parse/Internal/KeyValueCache/PFKeyValueCache.m; sourceTree = ""; }; + 585CC800D2685BF4E18ADBC41D9E73B1 /* PFObject+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFObject+Subclass.h"; path = "Parse/PFObject+Subclass.h"; sourceTree = ""; }; + 58B5D2F2CD84279F74BE531861A83308 /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; + 58D592B48830284011209E1663E7D733 /* ParseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseManager.h; path = Parse/Internal/ParseManager.h; sourceTree = ""; }; + 590E38452847AE815D9FF8AD36B38F82 /* PFObjectUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectUtilities.m; path = Parse/Internal/Object/Utilities/PFObjectUtilities.m; sourceTree = ""; }; 59B3FD41DEC22C5891C9B83C27BC25E0 /* pop-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "pop-dummy.m"; sourceTree = ""; }; - 5AA108C575CCC3045CF6EBEB7C2D35B5 /* PFQueryState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState_Private.h; path = Parse/Internal/Query/State/PFQueryState_Private.h; sourceTree = ""; }; + 59EE9ABCCF20271B1A4D97DE22AA8DA7 /* PFLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocationManager.h; path = Parse/Internal/PFLocationManager.h; sourceTree = ""; }; + 5A11AAB2D71A25709B7A73C3D4626B66 /* PFLogInViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInViewController.h; path = ParseUI/Classes/LogInViewController/PFLogInViewController.h; sourceTree = ""; }; + 5A12ABBF15A8F5506519823676F3C8DD /* Bolts-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Bolts-Private.xcconfig"; sourceTree = ""; }; + 5A5DE351A0BF7F1BFDD329A0BA815E81 /* PFDefaultACLController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDefaultACLController.h; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h; sourceTree = ""; }; 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "pop-Private.xcconfig"; sourceTree = ""; }; - 5B55313727430781904B26ED39BC5BD6 /* PFAnalyticsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsController.m; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.m; sourceTree = ""; }; - 5C3B64369BE6A9ACF09E4E03E3747FA0 /* PFMultiProcessFileLockController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLockController.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m; sourceTree = ""; }; - 5CE1AE8BFDFAA049F0F73E15ED7ACE9E /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 5DA5FA1FA814DC209F9EABCD6B9119F6 /* PFUserFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserFileCodingLogic.m; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m; sourceTree = ""; }; - 5E5F89585BF738F0A58C77BC3BE1A932 /* PFUserState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState_Private.h; path = Parse/Internal/User/State/PFUserState_Private.h; sourceTree = ""; }; - 5F3726655401860B18DB85328C091228 /* PFFileManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileManager.h; path = Parse/Internal/PFFileManager.h; sourceTree = ""; }; - 5F6D07CF3F5445D97AACFB330CF98F66 /* PFHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHash.m; path = Parse/Internal/PFHash.m; sourceTree = ""; }; - 60F954C2BD5989BD4626F5C1F5BCC48A /* PFRESTUserCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTUserCommand.h; path = Parse/Internal/Commands/PFRESTUserCommand.h; sourceTree = ""; }; - 61308EBC3E3CCE6EB380B4761543AD72 /* PFMutableFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableFileState.m; path = Parse/Internal/File/State/PFMutableFileState.m; sourceTree = ""; }; - 61DE303474ACF3AAEB6BEF7CF3151683 /* PFMutableFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableFileState.h; path = Parse/Internal/File/State/PFMutableFileState.h; sourceTree = ""; }; - 62078C4D93D4BF5CF7430EF680857264 /* PFHTTPURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHTTPURLRequestConstructor.m; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m; sourceTree = ""; }; - 62C1941BE9E36B0C41BF43BFCF7681CB /* PFObjectLocalIdStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectLocalIdStore.h; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h; sourceTree = ""; }; - 62FA41489E9F671A6D2AC37AA15E70FC /* PFProductsRequestHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductsRequestHandler.m; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m; sourceTree = ""; }; - 62FAE8C508439F783E07B639E62E5388 /* PFPush.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPush.m; path = Parse/PFPush.m; sourceTree = ""; }; - 63CF9DFF309CFA031748CEB31E227BB9 /* PFRESTCloudCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCloudCommand.h; path = Parse/Internal/Commands/PFRESTCloudCommand.h; sourceTree = ""; }; - 63F5E36EFB9403CA32B8B5C3A3F78855 /* PFEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue.h; path = Parse/Internal/PFEventuallyQueue.h; sourceTree = ""; }; - 6408EC1F7E48296B333659567543173D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + 5B131657B4AE8F0B2C6E0A0C5EA11C6E /* PFRESTQueryCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTQueryCommand.m; path = Parse/Internal/Commands/PFRESTQueryCommand.m; sourceTree = ""; }; + 5BF05C278FCCB54E2356A81F4362E3FB /* PFLogInView_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInView_Private.h; path = ParseUI/Classes/LogInViewController/PFLogInView_Private.h; sourceTree = ""; }; + 5C5F86DEE2CDAB301DCBD052E170C3DF /* PFActionButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActionButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h; sourceTree = ""; }; + 5C8045DBF84B4C9FAE5F9493DEF7990E /* PFUserState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState_Private.h; path = Parse/Internal/User/State/PFUserState_Private.h; sourceTree = ""; }; + 5D0D627CB39CA6EDBC298591F7FB9D15 /* PFRelation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelation.m; path = Parse/PFRelation.m; sourceTree = ""; }; + 5D78EE0601B6C0565B9C30B04EF23630 /* PFSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession.h; path = Parse/PFSession.h; sourceTree = ""; }; + 5E49C46EB05E82BE8654545920C832EB /* PFPushChannelsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushChannelsController.m; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.m; sourceTree = ""; }; + 5E63A2D69F78652A010BB377EBB449C6 /* PFActivityIndicatorCollectionReusableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActivityIndicatorCollectionReusableView.m; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.m; sourceTree = ""; }; + 5ECDB4A3D81CD22761B3E657A9193AE7 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = Parse/Resources/en.lproj; sourceTree = ""; }; + 5F0070F7D9C1BBF95C7F9EDB863AD555 /* PFCloudCodeController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloudCodeController.m; path = Parse/Internal/CloudCode/PFCloudCodeController.m; sourceTree = ""; }; + 5F1B395CC49D380489BB0BFDABAC35D9 /* PFRESTCloudCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCloudCommand.h; path = Parse/Internal/Commands/PFRESTCloudCommand.h; sourceTree = ""; }; + 5FA9B2ECC9A26394B543D0F42751F2B3 /* PFUserFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserFileCodingLogic.h; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h; sourceTree = ""; }; + 60ADD91AA56B1BFB00B61936E49D3CFD /* PFObjectLocalIdStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectLocalIdStore.m; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m; sourceTree = ""; }; + 6131294FCF882C880A8DAC44B48846EF /* PFSQLiteDatabaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseController.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h; sourceTree = ""; }; + 62A507869EFBA5A9140C70CE67650D5F /* PFGeoPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPoint.h; path = Parse/PFGeoPoint.h; sourceTree = ""; }; + 62B4F6275559C45BDBB446ABDB11EB0A /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; + 62BE8CADD4670ADEDF5FD8EF8072C87F /* pop.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = pop.xcconfig; sourceTree = ""; }; + 63491A7EC224003EF49DC8F88BC3EB18 /* PFSignUpView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSignUpView.h; path = ParseUI/Classes/SignUpViewController/PFSignUpView.h; sourceTree = ""; }; + 63D62EED87FA9B033C640237039C5D71 /* PFOfflineQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryController.m; path = Parse/Internal/Query/Controller/PFOfflineQueryController.m; sourceTree = ""; }; + 63FEAF34522E76198D04B10565E8B1AB /* PFObjectFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCodingLogic.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m; sourceTree = ""; }; 641AE05DD55E5E6AC1590CD7B4A18F97 /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = ""; }; - 653B4653F0D1C20696A6E65E888E8D15 /* PFCommandResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandResult.m; path = Parse/Internal/PFCommandResult.m; sourceTree = ""; }; - 656B8A19AFF797C4926D6E2E8D102049 /* PFObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectController.m; path = Parse/Internal/Object/Controller/PFObjectController.m; sourceTree = ""; }; - 65F6F140EE00AE08D92C70E19B66F5A4 /* PFDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDecoder.h; path = Parse/Internal/PFDecoder.h; sourceTree = ""; }; - 663C1A74DA7B1A684C31157464DF2CC6 /* PFAsyncTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAsyncTaskQueue.m; path = Parse/Internal/PFAsyncTaskQueue.m; sourceTree = ""; }; - 669BF4D4C83FA3E0ABEF32501AC4C5EE /* PFCommandURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandURLRequestConstructor.h; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h; sourceTree = ""; }; - 671A1745311D8EA359B1DB95D621711E /* PFAnonymousUtils_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils_Private.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h; sourceTree = ""; }; - 676C7A56F303C34B831F1F015F05812E /* PFFileController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileController.m; path = Parse/Internal/File/Controller/PFFileController.m; sourceTree = ""; }; + 6423CE3A0CE5B59A5BF4B47922AB73A5 /* PFObjectPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectPrivate.h; path = Parse/Internal/Object/PFObjectPrivate.h; sourceTree = ""; }; + 66C32C6E7A5D7E52B33E0268964CE9D7 /* PFQueryCollectionViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryCollectionViewController.m; path = ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m; sourceTree = ""; }; + 66EBD08EBD02C88CCDFE2505E222DAD4 /* PFCommandCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache_Private.h; path = Parse/Internal/PFCommandCache_Private.h; sourceTree = ""; }; + 6744DE3000BEEB7DA4D7DAB0E9D6BB57 /* PFKeyValueCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache_Private.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h; sourceTree = ""; }; + 68500105927A08A48A3DA8C59A9B2E12 /* PFConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConstants.m; path = Parse/PFConstants.m; sourceTree = ""; }; 6961E549FC85F85EB7560B887B11C928 /* POPSpringSolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringSolver.h; path = pop/POPSpringSolver.h; sourceTree = ""; }; - 69C89E4E56C77B03B486A9C81B595B44 /* AFNetworking-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AFNetworking-Private.xcconfig"; sourceTree = ""; }; - 6A3138F383603A594BF1120840E69F93 /* PFHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHash.h; path = Parse/Internal/PFHash.h; sourceTree = ""; }; - 6B26ED3E1774D8AF7C7968032E48D8AD /* BFTask+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Private.h"; path = "Parse/Internal/BFTask+Private.h"; sourceTree = ""; }; - 6BAB10EAFDE7E6E60F85AB4A4C3AD67E /* PFURLConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLConstructor.h; path = Parse/Internal/HTTPRequest/PFURLConstructor.h; sourceTree = ""; }; - 6D14E98ACAAB4CCD1367FDFBC9088D27 /* PFObjectFileCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCoder.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.h; sourceTree = ""; }; - 6D3ED73DF6D62367D4288EA69377B589 /* PFURLConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLConstructor.m; path = Parse/Internal/HTTPRequest/PFURLConstructor.m; sourceTree = ""; }; - 6D45F61B78D4419060D26A7EBAF70EC2 /* PFConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConstants.m; path = Parse/PFConstants.m; sourceTree = ""; }; - 6D97138DECF19BAFB63881A6D4EF92BF /* PFObjectController_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController_Private.h; path = Parse/Internal/Object/Controller/PFObjectController_Private.h; sourceTree = ""; }; - 6DC7D6BF37746831732BEE64A78E2E64 /* PFObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectState.m; path = Parse/Internal/Object/State/PFObjectState.m; sourceTree = ""; }; - 6E19C92B6E4B8413D0F549918EC73FD0 /* PFQueryPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryPrivate.h; path = Parse/Internal/Query/PFQueryPrivate.h; sourceTree = ""; }; - 6E2A46AA281CDF574C18A7B9311A6C93 /* PFAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAlertView.h; path = Parse/Internal/PFAlertView.h; sourceTree = ""; }; - 6FE7C428DAE4B23EBBF3039F8397D53E /* ContextMenu.iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ContextMenu.iOS.xcconfig; sourceTree = ""; }; - 70864853E727E60E7B86865739D2ECED /* PFCloud.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloud.m; path = Parse/PFCloud.m; sourceTree = ""; }; - 70A550454DC97E123E16BD631BDAD95C /* UIAlertView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAlertView+AFNetworking.h"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.h"; sourceTree = ""; }; - 71E77E05CC2CDD5B79D7552C17004EFB /* PFObjectFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCodingLogic.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m; sourceTree = ""; }; - 7203E516FF95A460652ADF5DFDEB3FB7 /* PFPaymentTransactionObserver_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver_Private.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h; sourceTree = ""; }; - 721E34BBC2F5BFD148652BD36955365C /* PFDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDataProvider.h; path = Parse/Internal/PFDataProvider.h; sourceTree = ""; }; - 72C04520515C92C01E90D8D58C97BA21 /* PFConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig.h; path = Parse/PFConfig.h; sourceTree = ""; }; - 734124A4F7A87553483F895904EE19A9 /* PFObjectEstimatedData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectEstimatedData.m; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m; sourceTree = ""; }; + 698035C4932D84777E5EC71DFC658ECE /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; + 6AAB30B0C1218AFFC57C5B5A58F1925C /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; + 6B50558B71D8208975C6283BE61E816D /* PFUserPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserPrivate.h; path = Parse/Internal/User/PFUserPrivate.h; sourceTree = ""; }; + 6B54B045A5C8DC9D0510BE5BE3FE0A1C /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; + 6B7B6DB35230E2855BBD62DA92FC70BE /* PFBaseState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBaseState.h; path = Parse/Internal/PFBaseState.h; sourceTree = ""; }; + 6BF00A7674A2E0DCC20BFA18BCD89098 /* PFRESTSessionCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTSessionCommand.m; path = Parse/Internal/Commands/PFRESTSessionCommand.m; sourceTree = ""; }; + 6CBECE1F342D08DEA6C849D4CA23FF5C /* PFQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQuery.m; path = Parse/PFQuery.m; sourceTree = ""; }; + 6CF33435C91D40E4A5913AAFD0EDE463 /* PFJSONSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFJSONSerialization.m; path = Parse/Internal/PFJSONSerialization.m; sourceTree = ""; }; + 6D3B7834060709F0758DAC799C640461 /* PFPinningEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningEventuallyQueue.h; path = Parse/Internal/PFPinningEventuallyQueue.h; sourceTree = ""; }; + 6D4152BFBEE6D5EE6216460618A0BFAC /* PFInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationController.m; path = Parse/Internal/Installation/Controller/PFInstallationController.m; sourceTree = ""; }; + 6D701A317BF6E49246153A00794CCB57 /* PFObjectSubclassInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassInfo.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h; sourceTree = ""; }; + 6D8F3DA883848E2DCAD665B10531671C /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; + 6DB47428B78601AEE33C5C5D52E2D994 /* PFUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUser.m; path = Parse/PFUser.m; sourceTree = ""; }; + 6EA0F7203418529BD442E51DEA289F3E /* PFRESTConfigCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTConfigCommand.m; path = Parse/Internal/Commands/PFRESTConfigCommand.m; sourceTree = ""; }; + 6EA17DCC97E135EB8F1461B291A14122 /* PFCommandCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandCache.m; path = Parse/Internal/PFCommandCache.m; sourceTree = ""; }; + 6EDB22FC9E38F0BCE867A085A703C3C0 /* PFImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImageCache.h; path = ParseUI/Classes/Internal/PFImageCache.h; sourceTree = ""; }; + 6F1F7C24D363A023B057B4B020BED379 /* PFImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImageView.m; path = ParseUI/Classes/Views/PFImageView.m; sourceTree = ""; }; + 6F2AB6103ACF8E3202AE317027CA808B /* libParseUI.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libParseUI.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 6F8D3DC3F913BF4E10E3FDEBC2B57B62 /* PFResources.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFResources.m; path = ParseUI/Generated/PFResources.m; sourceTree = ""; }; + 6FAB614DE9EA103FF9C22D630ECA7C8A /* PFObjectEstimatedData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectEstimatedData.m; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m; sourceTree = ""; }; + 7017E1904439F48F0CC39653841838D9 /* PFURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h; sourceTree = ""; }; + 7055666DC363C604BD87260B48EA2D42 /* PFInstallationIdentifierStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h; sourceTree = ""; }; + 70AE4459357403A9AA0B61959202F9A7 /* PFCommandURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandURLRequestConstructor.h; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h; sourceTree = ""; }; + 70DB3EA0DDEFC1284BB14523B754EDA6 /* PFMutableRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableRelationState.h; path = Parse/Internal/Relation/State/PFMutableRelationState.h; sourceTree = ""; }; + 7126CE5A9A9393978939ABBD58F26EA9 /* PFPurchase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchase.h; path = Parse/PFPurchase.h; sourceTree = ""; }; + 713723DAE7A2D766F7D8E9BB88E5E4CA /* ParseUI.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ParseUI.xcconfig; sourceTree = ""; }; + 732EEF0236374C25C56BB5C469D842CB /* PFMultiProcessFileLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLock.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h; sourceTree = ""; }; 7371F16336283F2D8BB2A199CD4DDEF5 /* POPSpringAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringAnimation.h; path = pop/POPSpringAnimation.h; sourceTree = ""; }; - 7388AF1F66A03C223B0DA9338F552A19 /* PFMultiProcessFileLock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLock.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m; sourceTree = ""; }; - 73DEF6839984D1F48ACE568B6EC2E5EF /* Parse-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Parse-dummy.m"; sourceTree = ""; }; - 73E9B12D704E302D9DAC9FDE4C8D60AC /* BFDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFDefines.h; path = Bolts/Common/BFDefines.h; sourceTree = ""; }; - 73F5CAD466111E720F4983773D164AED /* PFConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfig.m; path = Parse/PFConfig.m; sourceTree = ""; }; - 74BAE971C6A2FC6F319D21B31E77EAE8 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - 752500BB2A0459E3CB234F46BFDE1EED /* PFSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession.h; path = Parse/PFSession.h; sourceTree = ""; }; - 754C6873E010FF768376E458C1EA6449 /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; - 76B1F1A7DACF8124FD67EEFFB88526F1 /* PFPaymentTransactionObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPaymentTransactionObserver.m; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m; sourceTree = ""; }; - 7725DA2CCC4B05B3E8613121DAB013CB /* PFCoreDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreDataProvider.h; path = Parse/Internal/PFCoreDataProvider.h; sourceTree = ""; }; - 780EF3BE11B2381FB28EB629FB8CBC29 /* PFURLSessionDataTaskDelegate_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h; sourceTree = ""; }; - 7977EE0242992DA9A68D3DCB922B66CB /* YALContextMenuTableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YALContextMenuTableView.h; path = YALContextMenu/YALContextMenuTableView.h; sourceTree = ""; }; - 7A69D20AEBC89B67DD33CA2CC54E309B /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; - 7A880B37F4F90E6B3CCA1B3FAD582B81 /* Parse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Parse.m; path = Parse/Parse.m; sourceTree = ""; }; - 7B131E3C12FA20F7C590D94EF645128F /* PFNetworkCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkCommand.h; path = Parse/Internal/PFNetworkCommand.h; sourceTree = ""; }; - 7C4ACAFFC579192F80AE309D38F4CE0D /* PFDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDecoder.m; path = Parse/Internal/PFDecoder.m; sourceTree = ""; }; - 7C6969F6DC20ED490487711A80935900 /* PFSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSession.m; path = Parse/PFSession.m; sourceTree = ""; }; - 7C8DC7559A9E804216A7455574ACC2FA /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperationManager.m; path = AFNetworking/AFHTTPRequestOperationManager.m; sourceTree = ""; }; - 7F06EEE3B8D8FE8CE602F2D363FEE64C /* PFCommandResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandResult.h; path = Parse/Internal/PFCommandResult.h; sourceTree = ""; }; - 7F214F1BB9B408A25954535EFA736CA6 /* PFInstallationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationConstants.m; path = Parse/Internal/Installation/Constants/PFInstallationConstants.m; sourceTree = ""; }; + 747ED87BDA0CFC263BA40D355C825B04 /* PFSessionUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionUtilities.m; path = Parse/Internal/Session/Utilities/PFSessionUtilities.m; sourceTree = ""; }; + 74B8114FC619CF23645359BCCE432DBC /* PFMutableFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableFileState.h; path = Parse/Internal/File/State/PFMutableFileState.h; sourceTree = ""; }; + 752312E41E6828D9DFD974503E6DA356 /* PFCurrentInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentInstallationController.h; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h; sourceTree = ""; }; + 75302811ECF5EDC235B0DB8B86291C2B /* PFProductsRequestHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductsRequestHandler.m; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m; sourceTree = ""; }; + 753E0E1AA4BBDE64D2AE0835F63D119F /* PFNetworkCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkCommand.h; path = Parse/Internal/PFNetworkCommand.h; sourceTree = ""; }; + 775ECD6B6F3AADB8D98379981C1AD2A4 /* PFPush.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPush.h; path = Parse/PFPush.h; sourceTree = ""; }; + 777C43E3AA95750283ADAA2717A0595D /* PFCachedQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCachedQueryController.m; path = Parse/Internal/Query/Controller/PFCachedQueryController.m; sourceTree = ""; }; + 7A52DF7C69FED7E78E844893F5F58808 /* libAFNetworking.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAFNetworking.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 7B3E595A5E46C08CB6EDD2AECFC436E7 /* PFPushPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushPrivate.h; path = Parse/Internal/Push/PFPushPrivate.h; sourceTree = ""; }; + 7C385EA5C279B003F8C215ED4163B769 /* Parse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Parse.m; path = Parse/Parse.m; sourceTree = ""; }; + 7C5E7538EF5118E38934B9886BC17B43 /* libContextMenu.iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libContextMenu.iOS.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 7C5FC55392104FEA040D1DDC37429A8C /* PFUserAuthenticationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationController.h; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h; sourceTree = ""; }; + 7DE095F15D0DA44B27DE6F3F40B748C5 /* PFAnalyticsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsController.m; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.m; sourceTree = ""; }; + 7E80BE5758F379DA9001B14AF95B3C8B /* PFRESTPushCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTPushCommand.h; path = Parse/Internal/Commands/PFRESTPushCommand.h; sourceTree = ""; }; + 7F101824BC10648B2A569BDBA9C23BE5 /* PFInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallation.h; path = Parse/PFInstallation.h; sourceTree = ""; }; 7F59C51782AE555897A5B92D6B3CECD1 /* POPBasicAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPBasicAnimationInternal.h; path = pop/POPBasicAnimationInternal.h; sourceTree = ""; }; - 80678CF83F7E4592403D479266CD73C6 /* PFLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogger.h; path = Parse/Internal/PFLogger.h; sourceTree = ""; }; - 8072BEAB5E3DFBED370817399B610731 /* PFUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserState.m; path = Parse/Internal/User/State/PFUserState.m; sourceTree = ""; }; - 80B7FAB2B889140EDF2DC60D3C4A5969 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; - 810E80DCE80B90D80B5F21BF7212FEFB /* PFSessionUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionUtilities.m; path = Parse/Internal/Session/Utilities/PFSessionUtilities.m; sourceTree = ""; }; - 814B6E4C1E3AEC20607C2A43AADF132B /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; - 81EA6C27FFDF760CFB4767BB48E66220 /* PFInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationController.m; path = Parse/Internal/Installation/Controller/PFInstallationController.m; sourceTree = ""; }; - 82175545FE728571466A9FD6E8D8A7DE /* PFRESTAnalyticsCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTAnalyticsCommand.h; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.h; sourceTree = ""; }; - 82B2F774B2C3F6B000F7B323A1E51571 /* PFMutableACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableACLState.m; path = Parse/Internal/ACL/State/PFMutableACLState.m; sourceTree = ""; }; - 82BCDD60CE06A0870E0ED0D853E05739 /* PFFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile.h; path = Parse/PFFile.h; sourceTree = ""; }; + 8015A60E5EC1992EE7F83FBCDBA181E4 /* PFObjectConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectConstants.m; path = Parse/Internal/Object/Constants/PFObjectConstants.m; sourceTree = ""; }; + 81E5DF449A484A01D0D5D2D79856C74B /* ContextMenu.iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ContextMenu.iOS-prefix.pch"; sourceTree = ""; }; + 8258E5C6287CE05ECE4DBE3A83508112 /* PFURLSessionCommandRunner.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionCommandRunner.m; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m; sourceTree = ""; }; + 8261B575C444CC37A75DDD38033FCDD3 /* PFCommandURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandURLRequestConstructor.m; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m; sourceTree = ""; }; + 8277E669C14D90814D85CAF0D08745D7 /* PFDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDevice.m; path = Parse/Internal/PFDevice.m; sourceTree = ""; }; 8336CCF2280C58E6C367DF4EC0EBB7B3 /* POPAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimation.mm; path = pop/POPAnimation.mm; sourceTree = ""; }; - 846998BF4B29751792079F5759BBA274 /* PFSQLiteDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase_Private.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h; sourceTree = ""; }; - 8510965E6696177882F8683FF279CA62 /* PFPaymentTransactionObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h; sourceTree = ""; }; - 857A8C29F0006E02894A63C09D31CB85 /* PFAnalyticsUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsUtilities.h; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h; sourceTree = ""; }; - 860D58AD9C905EA188BEF7C2C8B3B2E4 /* PFQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryController.h; path = Parse/Internal/Query/Controller/PFQueryController.h; sourceTree = ""; }; - 8675E8B47522DD1649EAE7CE1299B776 /* PFAnonymousUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousUtils.m; path = Parse/PFAnonymousUtils.m; sourceTree = ""; }; - 869C2B98A84E7A66ED53252EEBD534C7 /* PFHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPRequest.h; path = Parse/Internal/HTTPRequest/PFHTTPRequest.h; sourceTree = ""; }; - 86A60F0A962861AF2DAA6A87C133F7E8 /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; - 86D677D0061394762DEF101FECA5E262 /* PFObjectState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState_Private.h; path = Parse/Internal/Object/State/PFObjectState_Private.h; sourceTree = ""; }; - 876ECCCFCF0B3F87EC5560A2FF6B5059 /* PFRESTUserCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTUserCommand.m; path = Parse/Internal/Commands/PFRESTUserCommand.m; sourceTree = ""; }; + 838239C2DC01EAB9AEE7B5553878AB6A /* PFObjectSubclassingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassingController.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m; sourceTree = ""; }; + 83A7946D9B9D56684542F8D584D20370 /* PFInternalUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInternalUtils.h; path = Parse/Internal/PFInternalUtils.h; sourceTree = ""; }; + 843B775414C85A6B739A68A808587E0B /* PFQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryController.m; path = Parse/Internal/Query/Controller/PFQueryController.m; sourceTree = ""; }; + 84EE46E65A1FBB043B8876D673FADFCA /* PFCloud.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloud.h; path = Parse/PFCloud.h; sourceTree = ""; }; + 8553BBD3BB32BA047968D8FCC0BB7A4A /* PFMutableRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableRelationState.m; path = Parse/Internal/Relation/State/PFMutableRelationState.m; sourceTree = ""; }; + 860AA407C8EE7F2BE1FF80F5F2C2A67C /* PFConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig_Private.h; path = Parse/Internal/Config/PFConfig_Private.h; sourceTree = ""; }; + 863525FC6AF9553E708425B9E1FBBBE3 /* PFCurrentConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentConfigController.m; path = Parse/Internal/Config/Controller/PFCurrentConfigController.m; sourceTree = ""; }; + 86B7508FF3B989FEF4B30FE544B32B91 /* PFRESTFileCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTFileCommand.h; path = Parse/Internal/Commands/PFRESTFileCommand.h; sourceTree = ""; }; + 86CE1FC6E16C4981CCAB4D92ECBFB7B4 /* PFLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogger.h; path = Parse/Internal/PFLogger.h; sourceTree = ""; }; + 875608FCABF08485CA5E0DB7D13A53FE /* PFURLSessionCommandRunner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h; sourceTree = ""; }; + 877583FCE729451EBA709DD2F69EC026 /* PFFieldOperationDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperationDecoder.m; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.m; sourceTree = ""; }; + 87D5C76598D7EF5558AB88A80F0ADCF6 /* PFConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig.h; path = Parse/PFConfig.h; sourceTree = ""; }; + 8804B5C3B20BA33A62CE380BBCCC489C /* PFMutablePushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutablePushState.h; path = Parse/Internal/Push/State/PFMutablePushState.h; sourceTree = ""; }; + 8844A67AC930593786AECB0231747628 /* PFFileManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileManager.m; path = Parse/Internal/PFFileManager.m; sourceTree = ""; }; 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 893348B36B23CFF515B649DF3EA05962 /* PFCachedQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCachedQueryController.h; path = Parse/Internal/Query/Controller/PFCachedQueryController.h; sourceTree = ""; }; - 893F517620D76C4DD97407C35B30C8DC /* PFProduct.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProduct.m; path = Parse/PFProduct.m; sourceTree = ""; }; - 898ECE478F3C854611287289F4977E11 /* PFAnonymousAuthenticationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousAuthenticationProvider.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h; sourceTree = ""; }; - 89A3DB76DA1562634E50BB32E31C34F7 /* PFPushChannelsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushChannelsController.m; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.m; sourceTree = ""; }; - 8A9EB6D7E4926B7E034816F709F1F518 /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLConnectionOperation.h; path = AFNetworking/AFURLConnectionOperation.h; sourceTree = ""; }; - 8AA0E5427E9EFCC96AC0F8CED0FBEEF4 /* PFObjectFilePersistenceController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFilePersistenceController.m; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m; sourceTree = ""; }; - 8BABE1F9D15A2416835BA1EC9EB7E043 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - 8C6B8C7E82B804AB1382E38F8E99158C /* PFCurrentUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentUserController.m; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.m; sourceTree = ""; }; - 8CCBDC7EA64ECE9974D334AA69A02EEA /* PFPushManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushManager.m; path = Parse/Internal/Push/Manager/PFPushManager.m; sourceTree = ""; }; - 8D19EBD75979B9CD23ABA38BA45D0DCB /* PFCurrentConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentConfigController.h; path = Parse/Internal/Config/Controller/PFCurrentConfigController.h; sourceTree = ""; }; - 8E69E884C61DBE3CA50B5B88897651DB /* PFMutableACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableACLState.h; path = Parse/Internal/ACL/State/PFMutableACLState.h; sourceTree = ""; }; + 88941524D385690CBCF300DD140DF00E /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; + 8896894278B01270F7BDA51E345AEE3A /* PFTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTaskQueue.m; path = Parse/Internal/PFTaskQueue.m; sourceTree = ""; }; + 891A2E0E0FA20C1648F5C841F3E564AD /* PFACL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACL.m; path = Parse/PFACL.m; sourceTree = ""; }; + 89362786CE0111AEDE7DA9FACAB648E7 /* PFFileManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileManager.h; path = Parse/Internal/PFFileManager.h; sourceTree = ""; }; + 895CF8E6F7A84B12553BCA9E79EC79C3 /* PFACL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACL.h; path = Parse/PFACL.h; sourceTree = ""; }; + 89E660FBA2FA907C548F83F17BA9CF56 /* PFQueryUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryUtilities.h; path = Parse/Internal/Query/Utilities/PFQueryUtilities.h; sourceTree = ""; }; + 8B17307D8D5E9068BF81147ED3B8E9B3 /* PFAnalytics_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics_Private.h; path = Parse/Internal/Analytics/PFAnalytics_Private.h; sourceTree = ""; }; + 8B8B01C970E96BD862FECF58F194D051 /* PFFileController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileController.h; path = Parse/Internal/File/Controller/PFFileController.h; sourceTree = ""; }; + 8BABC47EC65B9265C3909474DE8574C9 /* PFConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConstants.h; path = Parse/PFConstants.h; sourceTree = ""; }; + 8D0D83D976316A1E4675C57A59FD08D7 /* PFUIAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUIAlertView.m; path = ParseUI/Classes/Internal/Extensions/PFUIAlertView.m; sourceTree = ""; }; + 8D391B4B9A0CB9FD3E2A0BF899903190 /* PFAnonymousAuthenticationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousAuthenticationProvider.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h; sourceTree = ""; }; + 8E40D034FA34D8F3FB9563D4D5DE2705 /* PFProduct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProduct.h; path = Parse/PFProduct.h; sourceTree = ""; }; 8EC4FC6A3A06D9292C296C691005546B /* POPCustomAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPCustomAnimation.mm; path = pop/POPCustomAnimation.mm; sourceTree = ""; }; - 8EC8E900100484763798A1C6338E9061 /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; - 8F189D28F4E7A0D39192B35D412642BA /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; - 8F270D2F5F74F0965904AC60E014742A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - 8F5D0107B7A3A38D5B48854CDBEA6CD3 /* PFTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTaskQueue.h; path = Parse/Internal/PFTaskQueue.h; sourceTree = ""; }; + 8EE2B15BEF4BF5D9E73B0F8A28BFE3AF /* PFBaseState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBaseState.m; path = Parse/Internal/PFBaseState.m; sourceTree = ""; }; + 8FF0B9CB696808B8C85640C9F7180BB8 /* PFObjectState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState_Private.h; path = Parse/Internal/Object/State/PFObjectState_Private.h; sourceTree = ""; }; + 900D054E76F1D5D03B53DBFF276C5C0D /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = ParseUI/Resources/Localization/en.lproj; sourceTree = ""; }; 90DA3C63E9AD758336342BC51C0BB859 /* POPDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDefines.h; path = pop/POPDefines.h; sourceTree = ""; }; - 9102F91F4F8FC737DF8F8B04EB6B1183 /* PFObjectLocalIdStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectLocalIdStore.m; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m; sourceTree = ""; }; - 91B168BFBEBBF3272A49E4240325DAC3 /* PFRESTQueryCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTQueryCommand.h; path = Parse/Internal/Commands/PFRESTQueryCommand.h; sourceTree = ""; }; - 923EF0E8FAAA93BA1AF9399DE58923FF /* PFObjectConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectConstants.m; path = Parse/Internal/Object/Constants/PFObjectConstants.m; sourceTree = ""; }; + 90E284AD7A6A52AEEF7D84AD765A3548 /* BFDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFDefines.h; path = Bolts/Common/BFDefines.h; sourceTree = ""; }; + 9151DC926D00004E1604381F7985BB36 /* PFDismissButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDismissButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.m; sourceTree = ""; }; + 91C2410DA547032FC3DC2AE3C259C844 /* ParseUI-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ParseUI-dummy.m"; sourceTree = ""; }; + 91FD3566B5AFA4DD010BBD80305BC28A /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; + 92551145ADCBD6A18D43AA2DA73CB21B /* PFObjectFilePersistenceController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFilePersistenceController.h; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h; sourceTree = ""; }; 928EC8B9105DA581C7896C2102E87BE2 /* POPCustomAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPCustomAnimation.h; path = pop/POPCustomAnimation.h; sourceTree = ""; }; - 92A56E592AF27DDA726FCE1F4C398C8E /* PFOperationSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOperationSet.m; path = Parse/Internal/Object/OperationSet/PFOperationSet.m; sourceTree = ""; }; - 92C8318F0774CE0DB5B5FA3C7961C69F /* PFInstallationIdentifierStore_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore_Private.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h; sourceTree = ""; }; - 92EFA64DEEA2D7C788D39BE4B87668B0 /* ContextMenu.iOS-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ContextMenu.iOS-Private.xcconfig"; sourceTree = ""; }; - 9357693A996038C30E8C787613239775 /* PFURLSessionJSONDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionJSONDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m; sourceTree = ""; }; - 93F14E13D1AAFFA4C781869593E6A6FF /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; - 946D9742CB5DB1C57ED0E3BBA63E66BD /* PFRESTAnalyticsCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTAnalyticsCommand.m; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.m; sourceTree = ""; }; + 9377FA8A24B121D60FE9AA1745B38DC4 /* PFFieldOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperation.h; path = Parse/Internal/FieldOperation/PFFieldOperation.h; sourceTree = ""; }; 94815AA3EE3CBA04CEE85515701AD534 /* POPAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimator.h; path = pop/POPAnimator.h; sourceTree = ""; }; - 94DF16E2294CA8FEC9FD2ACF36D38638 /* PFPurchaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseController.m; path = Parse/Internal/Purchase/Controller/PFPurchaseController.m; sourceTree = ""; }; - 94E051272A8A44AC3C51C58EABF97D9F /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; - 9507DB69A2FE53769B24313F98BCFB5B /* PFRESTSessionCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTSessionCommand.m; path = Parse/Internal/Commands/PFRESTSessionCommand.m; sourceTree = ""; }; + 948A8D3F019700F19148AF5DEF0F0F49 /* PFFile_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile_Private.h; path = Parse/Internal/File/PFFile_Private.h; sourceTree = ""; }; + 94CA59055B37DA8DC1D9377D2231CF47 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; }; 96015F1C746803D9318614B277F71BCB /* UnitBezier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UnitBezier.h; path = pop/WebCore/UnitBezier.h; sourceTree = ""; }; - 96403B2BFDB3FEACA24969CF6378D7B3 /* PFCategoryLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCategoryLoader.m; path = Parse/Internal/PFCategoryLoader.m; sourceTree = ""; }; - 9645D0E8258AB75B2C992E0915EA9BC2 /* PFUserConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserConstants.h; path = Parse/Internal/User/Constants/PFUserConstants.h; sourceTree = ""; }; - 965FBA9FA425FE1BA4E41B4FFEE42FA8 /* PFDateFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDateFormatter.h; path = Parse/Internal/PFDateFormatter.h; sourceTree = ""; }; 9663A817A809169745F3F8E987FFE076 /* POPLayerExtras.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPLayerExtras.h; path = pop/POPLayerExtras.h; sourceTree = ""; }; - 96A60F95EF69292F16C085789B646687 /* PFSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession_Private.h; path = Parse/Internal/Session/PFSession_Private.h; sourceTree = ""; }; - 97ADB30A5976DC7FE832E68A415B22F8 /* PFPropertyInfo_Runtime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo_Runtime.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m; sourceTree = ""; }; - 97D5C73BC159E5CEFA38B5345BB3B77E /* PFPushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState.h; path = Parse/Internal/Push/State/PFPushState.h; sourceTree = ""; }; - 98C44F60AA929307291A20DC790BFEB1 /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; - 994A5F73DF6BF6840DED92DDE2C12AC6 /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperation.m; path = AFNetworking/AFHTTPRequestOperation.m; sourceTree = ""; }; - 9AF96B14E5200CC44AFA17F564FAFCE9 /* BoltsVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BoltsVersion.h; path = Bolts/Common/BoltsVersion.h; sourceTree = ""; }; - 9B3991EEAD0B989CE24DC09DA3F6F84B /* PFPushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushState.m; path = Parse/Internal/Push/State/PFPushState.m; sourceTree = ""; }; + 96B412F3169F62969DAC6A85BFBE68F4 /* PFEventuallyPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyPin.h; path = Parse/Internal/PFEventuallyPin.h; sourceTree = ""; }; + 96D3C7353F23912FD706CABC336D4D2E /* PFURLSessionJSONDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionJSONDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h; sourceTree = ""; }; + 973D3E8805C0C339DAA7877098A99A7E /* PFUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserController.m; path = Parse/Internal/User/Controller/PFUserController.m; sourceTree = ""; }; + 9761E4B9A3217B85F0615BE7D41F1CB0 /* PFRole.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRole.m; path = Parse/PFRole.m; sourceTree = ""; }; + 976A55E7CE8D654A68FBED3175180C45 /* Parse-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Parse-Private.xcconfig"; sourceTree = ""; }; + 9780F90C830BDBFB169674AFE0921D8C /* PFCoreManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCoreManager.m; path = Parse/Internal/PFCoreManager.m; sourceTree = ""; }; + 9825AD54796F54B9AE10955E1AFEDD77 /* PFOfflineObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineObjectController.m; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m; sourceTree = ""; }; + 9981AF787E3013B9030751CAD2D7A086 /* PFLoadingView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLoadingView.m; path = ParseUI/Classes/Internal/Views/PFLoadingView.m; sourceTree = ""; }; + 99AC0E4FACC6E2558227DD51210B84EA /* PFOfflineQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryController.h; path = Parse/Internal/Query/Controller/PFOfflineQueryController.h; sourceTree = ""; }; + 99C45BAC8E657D5D25B91CF13FDC4C8C /* PFCommandRunning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunning.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.m; sourceTree = ""; }; + 99C80D21838865183077DD44395D6C3A /* PFDismissButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDismissButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h; sourceTree = ""; }; + 9A835C10155FEF5DCB5D5E43843849B7 /* PFRect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRect.m; path = ParseUI/Classes/Internal/Extensions/PFRect.m; sourceTree = ""; }; + 9A85625E51C91983512393262199899C /* PFFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile.h; path = Parse/PFFile.h; sourceTree = ""; }; + 9AEFA60D137098ACED4615C88DBA7D17 /* PFWeakValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFWeakValue.h; path = Parse/Internal/PFWeakValue.h; sourceTree = ""; }; + 9BA57A433E33E9125A8347D57D7F766F /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; + 9BECD483F69DE182010F84F44CFAB40C /* PFPurchaseTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseTableViewCell.h; path = ParseUI/Classes/Cells/PFPurchaseTableViewCell.h; sourceTree = ""; }; + 9BF42B9B3BCA6AC0E4C7A5C4A8D56C76 /* PFDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDevice.h; path = Parse/Internal/PFDevice.h; sourceTree = ""; }; 9C3FE18EB564AF4087573DE6F3F2D3D3 /* POPMath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPMath.h; path = pop/POPMath.h; sourceTree = ""; }; - 9CB47EA89DC2B49C7B2B12127098FB33 /* PFURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h; sourceTree = ""; }; + 9CF2B2B9DD2ED593C69A3425ABF50CEA /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + 9D0C2EFD1475837A15B4834D37F70DCA /* PFMulticastDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMulticastDelegate.h; path = Parse/Internal/PFMulticastDelegate.h; sourceTree = ""; }; + 9DA3372CAB38E88F7791F2DE96931153 /* PFObjectFilePersistenceController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFilePersistenceController.m; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m; sourceTree = ""; }; 9DA58C3428E2A0E2F88C2A0522297274 /* POPAnimationTracerInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationTracerInternal.h; path = pop/POPAnimationTracerInternal.h; sourceTree = ""; }; - 9EAF2A823E92A730EC588801D943C514 /* PFSQLiteDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabase.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m; sourceTree = ""; }; + 9DD7435FB2C6E16C60951E238B329F43 /* PFObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectControlling.h; path = Parse/Internal/Object/Controller/PFObjectControlling.h; sourceTree = ""; }; + 9E1183E2718E99F11B4E9C9C8A80C1AF /* PFQueryState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState_Private.h; path = Parse/Internal/Query/State/PFQueryState_Private.h; sourceTree = ""; }; + 9E645516AFC0CAD5C08101D5F844874F /* PFURLSessionDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h; sourceTree = ""; }; + 9EDD8E08548221489BFE965864FB3566 /* PFAnonymousAuthenticationProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousAuthenticationProvider.m; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m; sourceTree = ""; }; 9F210DEEA777E0BF1995DC3570CC616E /* POPAnimationEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationEvent.h; path = pop/POPAnimationEvent.h; sourceTree = ""; }; - 9F519C682C4E52952D376F5423040E5B /* PFRESTConfigCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTConfigCommand.m; path = Parse/Internal/Commands/PFRESTConfigCommand.m; sourceTree = ""; }; - A011CA3F808702224552F151CBB37A51 /* ParseModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseModule.m; path = Parse/Internal/ParseModule.m; sourceTree = ""; }; - A09F4FD4303453124FB9D4870DDE2F0C /* PFGeoPointPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPointPrivate.h; path = Parse/Internal/PFGeoPointPrivate.h; sourceTree = ""; }; + 9F8925C71640AC9E18B09C2F32530257 /* PFQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState.h; path = Parse/Internal/Query/State/PFQueryState.h; sourceTree = ""; }; + 9FB80727EBDBCBDEEBCAB45A1785BAF1 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + A026613DFF149D8BD7D37DDB26152A35 /* PFRESTSessionCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTSessionCommand.h; path = Parse/Internal/Commands/PFRESTSessionCommand.h; sourceTree = ""; }; + A055D518CCF1B206751FCEC2DE32A701 /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; + A08F05F414FDAD6FE00523BCDB90BE7B /* PFAnalyticsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsController.h; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.h; sourceTree = ""; }; + A1297C03656FAE86C50B3C5179093556 /* ParseUIConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseUIConstants.h; path = ParseUI/Other/ParseUIConstants.h; sourceTree = ""; }; + A133BB30724BEF75ABB81AA509743A45 /* PFObjectBatchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectBatchController.h; path = Parse/Internal/Object/BatchController/PFObjectBatchController.h; sourceTree = ""; }; A19FD133843D5FCF16B8AF3B4E165515 /* POPMath.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPMath.mm; path = pop/POPMath.mm; sourceTree = ""; }; - A1B4C9A06FB08BC3FE354D588CD09AF7 /* PFSQLiteStatement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteStatement.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m; sourceTree = ""; }; - A250843CDACF4CC56A8C27C4FDF9C270 /* PFFieldOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperation.h; path = Parse/Internal/FieldOperation/PFFieldOperation.h; sourceTree = ""; }; - A28218952E226A9395672AAF9BB98065 /* PFCommandCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache_Private.h; path = Parse/Internal/PFCommandCache_Private.h; sourceTree = ""; }; - A2BD31107881F3881ADCD378256D4B02 /* PFUserFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserFileCodingLogic.h; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h; sourceTree = ""; }; - A2C302E4C6109CA0666CE25D782C9766 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; - A3A5889AC5CCB95EF1C4DD6B7C5C930D /* PFUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUser.m; path = Parse/PFUser.m; sourceTree = ""; }; - A3A9D34733E3E1E62E950164A6B84C80 /* PFAnalytics_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics_Private.h; path = Parse/Internal/Analytics/PFAnalytics_Private.h; sourceTree = ""; }; - A3DF42FD99A813DEBC5C62B3491B1AC0 /* PFURLSessionDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m; sourceTree = ""; }; + A1A2A66F3FC79A3E2778CF485801E64C /* PFFileStagingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileStagingController.m; path = Parse/Internal/File/Controller/PFFileStagingController.m; sourceTree = ""; }; + A1C86812C1E16F9AE6E6995B0510FCF5 /* PFAnonymousUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils.h; path = Parse/PFAnonymousUtils.h; sourceTree = ""; }; + A24FE0141387F910F17488671E600BA8 /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; + A421A4107F66CC195D55371620880A47 /* PFOfflineStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineStore.m; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m; sourceTree = ""; }; A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libpop.a; sourceTree = BUILT_PRODUCTS_DIR; }; - A52CE45BD75B2826314A3BCDCB813398 /* PFObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObject.h; path = Parse/PFObject.h; sourceTree = ""; }; - A5849314580BC3F82E4A799104E87FE3 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; - A60A05A0392E32822607D587C5380E61 /* PFSQLiteDatabaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseController.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h; sourceTree = ""; }; - A60CF5CEA93C2F6926C54CA3679A1556 /* PFPushPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushPrivate.h; path = Parse/Internal/Push/PFPushPrivate.h; sourceTree = ""; }; - A63FC1750D756C077EBF6610F23A216B /* PFKeyValueCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache_Private.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h; sourceTree = ""; }; - A6EBD847848C1C85F961433CE4F102A3 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; - A6F04B61FAF09E9538B3AF6FD9536DC4 /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperation.h; path = AFNetworking/AFHTTPRequestOperation.h; sourceTree = ""; }; - A72A7753E28C0B037F3759A7CB7DC9CB /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; - A78F4615CC1292D0FA53088C626957D8 /* PFSQLiteDatabaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseController.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m; sourceTree = ""; }; - A89E8441EF384E751C66846D8C7DA140 /* PFRESTPushCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTPushCommand.m; path = Parse/Internal/Commands/PFRESTPushCommand.m; sourceTree = ""; }; - A8AD04541066E8C429FCD51E8A604FF1 /* PFInstallationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationPrivate.h; path = Parse/Internal/Installation/PFInstallationPrivate.h; sourceTree = ""; }; - A988AADA8AE3AFF34F68D1673691E59A /* PFObjectUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectUtilities.m; path = Parse/Internal/Object/Utilities/PFObjectUtilities.m; sourceTree = ""; }; - AA0EFB7BECF9EB8E71FD258F0F60D3E5 /* PFPinningEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningEventuallyQueue.h; path = Parse/Internal/PFPinningEventuallyQueue.h; sourceTree = ""; }; - AA5D3771AE76625915E333CFABB45A05 /* PFURLSessionUploadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionUploadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m; sourceTree = ""; }; - AAAE696C714BEA1FD2CB7F7E37484204 /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; - AC3758631123BBA424D0C687A75ED31C /* PFInstallationIdentifierStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h; sourceTree = ""; }; - AC7F1FE520C94B33E628A5BF7D802073 /* PFErrorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFErrorUtilities.h; path = Parse/Internal/PFErrorUtilities.h; sourceTree = ""; }; - AD274DB5984402947E47F0A1B92E9CA4 /* PFFileStagingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileStagingController.h; path = Parse/Internal/File/Controller/PFFileStagingController.h; sourceTree = ""; }; - AD9250D9FE4979DF37C24BE1CDB4FF8B /* PFUserAuthenticationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserAuthenticationController.m; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m; sourceTree = ""; }; - ADEFE34C92FF818B135715C323E4963C /* PFObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObject.m; path = Parse/PFObject.m; sourceTree = ""; }; - AE0BE1F355DE44ECCAEA5BF8D4526C5A /* PFURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSession.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m; sourceTree = ""; }; - AE87F34D52CD28E7113F03F7CEA01F06 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - AE96E6223940CD70D6F01EA288192D93 /* PFGeoPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPoint.h; path = Parse/PFGeoPoint.h; sourceTree = ""; }; - B024D2C96D819E81E5D194B562CA7CCF /* PFOfflineObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineObjectController.h; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h; sourceTree = ""; }; + A5170E55DE35501B4A713A17711AA0A0 /* PFConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfig.m; path = Parse/PFConfig.m; sourceTree = ""; }; + A51A35330B4AB677C74A6579FC025B7C /* PFOfflineObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineObjectController.h; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h; sourceTree = ""; }; + A543A68D1F635C787AFF440419B704A2 /* PFAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAlertView.h; path = Parse/Internal/PFAlertView.h; sourceTree = ""; }; + A544D2F0BE5B4B49B319A783BAC77F80 /* PFMutableQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableQueryState.m; path = Parse/Internal/Query/State/PFMutableQueryState.m; sourceTree = ""; }; + A57B413BD6BA1EA23004CBF88974B886 /* PFConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfigController.m; path = Parse/Internal/Config/Controller/PFConfigController.m; sourceTree = ""; }; + A5BBD08523DDF7DFF2711114FC722A5E /* PFImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImageView.h; path = ParseUI/Classes/Views/PFImageView.h; sourceTree = ""; }; + A5E89E9F5A5618CE7965C7807CC99B95 /* PFRESTObjectBatchCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectBatchCommand.h; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.h; sourceTree = ""; }; + A631F9A0F687BDDBC873BA5813B8D674 /* PFPropertyInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo.m; sourceTree = ""; }; + A72EE5253DC8D7B55D95796E6F4F6DD3 /* PFUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserController.h; path = Parse/Internal/User/Controller/PFUserController.h; sourceTree = ""; }; + A81137DE4CAF25A53FED9F979106F428 /* PFRESTCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand.h; path = Parse/Internal/Commands/PFRESTCommand.h; sourceTree = ""; }; + A8718EC782F1DDBEAC83251BEA9043B4 /* PFTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTableViewCell.m; path = ParseUI/Classes/Cells/PFTableViewCell.m; sourceTree = ""; }; + A88B9D7B7216A9C1E1312C4CBC71128F /* libBolts.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBolts.a; sourceTree = BUILT_PRODUCTS_DIR; }; + A8C983DB75FAE0BEF68EC8FAD134A4A8 /* PFAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAssert.h; path = Parse/Internal/PFAssert.h; sourceTree = ""; }; + A8D02A717544E8E472DDB654462BA93B /* PFUserConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserConstants.h; path = Parse/Internal/User/Constants/PFUserConstants.h; sourceTree = ""; }; + A8F222054463224431341AD45804A6AF /* PFMultiProcessFileLockController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLockController.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h; sourceTree = ""; }; + A97DD8424AA6D29A671297332ADC6CA1 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + AA2D73F6B555F385C9E33E7F424BBFE5 /* PFInternalUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInternalUtils.m; path = Parse/Internal/PFInternalUtils.m; sourceTree = ""; }; + AA922A41DD3C8A6F91E02EF0F731F0AB /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; + AAC3249989EA908FBA78700563472204 /* PFFileDataStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileDataStream.m; path = Parse/Internal/File/FileDataStream/PFFileDataStream.m; sourceTree = ""; }; + AAF064AE7675931E4027B1B48FAC0E0E /* PFCommandCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache.h; path = Parse/Internal/PFCommandCache.h; sourceTree = ""; }; + AC7C43830B8D324B7BDFBFD2376A6F01 /* PFPropertyInfo_Runtime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo_Runtime.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m; sourceTree = ""; }; + AC969BF0B09B32631651A85209580443 /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; + AD21854D02782DB6A5EB737BB86B1861 /* PFPinningEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningEventuallyQueue.m; path = Parse/Internal/PFPinningEventuallyQueue.m; sourceTree = ""; }; + AD362A7EBE3D2E2936C281C50AC04997 /* PFURLSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h; sourceTree = ""; }; + AD697B984E89B4847323B087964A48EA /* PFFileState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState_Private.h; path = Parse/Internal/File/State/PFFileState_Private.h; sourceTree = ""; }; + AD6BEE4FF1F262959DD604F6DFDBAE3B /* PFKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeychainStore.m; path = Parse/Internal/PFKeychainStore.m; sourceTree = ""; }; + AE63CC96E753C252BF25110D864F48EF /* PFACLPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLPrivate.h; path = Parse/Internal/ACL/PFACLPrivate.h; sourceTree = ""; }; + AECDAF19F1A734986EF3B6CEE0E5C285 /* PFPushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushState.m; path = Parse/Internal/Push/State/PFPushState.m; sourceTree = ""; }; + AEEB033EF7B91BE4441AF7756D696170 /* PFRESTObjectCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectCommand.h; path = Parse/Internal/Commands/PFRESTObjectCommand.h; sourceTree = ""; }; + AF2FAD7A53F3AACF9B492617ABD3B62F /* PFSubclassing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSubclassing.h; path = Parse/PFSubclassing.h; sourceTree = ""; }; + AF40A6B842E8FD9BC950FE00DC5B6F40 /* PFObjectConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectConstants.h; path = Parse/Internal/Object/Constants/PFObjectConstants.h; sourceTree = ""; }; B0CE575CDDE0B1795BB8B88E0B49ACA0 /* POPDecayAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDecayAnimationInternal.h; path = pop/POPDecayAnimationInternal.h; sourceTree = ""; }; - B0D0D5C8FF6EA31C0E29554F03FFAE35 /* PFEncoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEncoder.m; path = Parse/Internal/PFEncoder.m; sourceTree = ""; }; - B0E75CCDD1A5217E3601BF092D5385C1 /* PFOfflineStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineStore.m; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m; sourceTree = ""; }; B0F7BCEE9A871E1193D694931FA31E17 /* POPDecayAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDecayAnimation.h; path = pop/POPDecayAnimation.h; sourceTree = ""; }; - B1483642455FE93A36C64B730F27BCD1 /* PFOperationSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOperationSet.h; path = Parse/Internal/Object/OperationSet/PFOperationSet.h; sourceTree = ""; }; - B1D6FB68F1851036506A1E965B20FBD5 /* PFPropertyInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo.m; sourceTree = ""; }; - B1E9EC0D78FBC6373DBD668B202BBA25 /* PFPushController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushController.m; path = Parse/Internal/Push/Controller/PFPushController.m; sourceTree = ""; }; - B2586CEB4DB20E7AED5EBFD3FB96B973 /* PFMutablePushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutablePushState.h; path = Parse/Internal/Push/State/PFMutablePushState.h; sourceTree = ""; }; + B1214E8947EB72FF3291E4600C97D58F /* PFMutableUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableUserState.m; path = Parse/Internal/User/State/PFMutableUserState.m; sourceTree = ""; }; + B18E4523B7A2D3BA68FE05BE72681E02 /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; + B1C6CB67201095492AA37DBE54C06E7D /* PFCategoryLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCategoryLoader.h; path = Parse/Internal/PFCategoryLoader.h; sourceTree = ""; }; + B1D36F734A33A907E9958F6778F6D9B1 /* PFCurrentInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentInstallationController.m; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m; sourceTree = ""; }; + B2688E675D28E976EDC6B6AA84C41C84 /* PFActionButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActionButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m; sourceTree = ""; }; + B2726742F4F01872C36F74F3A273125E /* PFTextButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTextButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h; sourceTree = ""; }; + B2954F531D3634410AB8A04C01539733 /* Bolts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-prefix.pch"; sourceTree = ""; }; + B319964A3771774ECF35609A331A9AC6 /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; B330BCF969EF6189E02E10926FB95CED /* POPGeometry.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPGeometry.mm; path = pop/POPGeometry.mm; sourceTree = ""; }; - B332CC51A8213F3EF1C7A3FE399A5C2B /* PFACL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACL.h; path = Parse/PFACL.h; sourceTree = ""; }; - B3F7FC9A375F4CC184EF1CB84FFF2E2F /* PFRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState.h; path = Parse/Internal/Relation/State/PFRelationState.h; sourceTree = ""; }; - B58A5A84AAAEBE1A391E99E9CAED0FF2 /* PFMutableObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableObjectState.h; path = Parse/Internal/Object/State/PFMutableObjectState.h; sourceTree = ""; }; - B627B86FB20866D18CE3E2A40FF283B7 /* PFACLPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLPrivate.h; path = Parse/Internal/ACL/PFACLPrivate.h; sourceTree = ""; }; - B65D4C06593414E001B75B30C7A68F64 /* PFDefaultACLController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDefaultACLController.h; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h; sourceTree = ""; }; - B7C407A664499E7354D9C1CCDB113A59 /* PFQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryState.m; path = Parse/Internal/Query/State/PFQueryState.m; sourceTree = ""; }; - B7E18330D5E87E2825CE1B429D6F6693 /* PFObjectPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectPrivate.h; path = Parse/Internal/Object/PFObjectPrivate.h; sourceTree = ""; }; - B86F68BE12DD9BF16FA4EA2B8D7C6F99 /* pop.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = pop.xcconfig; sourceTree = ""; }; - B94497EF1A56D3F72FD2BA76060DF1EE /* PFACL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACL.m; path = Parse/PFACL.m; sourceTree = ""; }; - BA10EEFBDA4AD314FB6D71B9DBD76FB7 /* PFWeakValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFWeakValue.h; path = Parse/Internal/PFWeakValue.h; sourceTree = ""; }; + B3C592B1563BAD172B026388C571DBE5 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; + B5076516C4CA52DBE232087A86EF876A /* PFApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFApplication.h; path = Parse/Internal/PFApplication.h; sourceTree = ""; }; + B539C1B5ED1A98FE70171B60D8186E32 /* PFQueryTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryTableViewController.h; path = ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h; sourceTree = ""; }; + B63D2BB991AB59607701D89CDA8174A8 /* PFObjectBatchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectBatchController.m; path = Parse/Internal/Object/BatchController/PFObjectBatchController.m; sourceTree = ""; }; + B6715EFDF271A27FBC8980E595A56F18 /* PFImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImage.h; path = ParseUI/Classes/Internal/Extensions/PFImage.h; sourceTree = ""; }; + B6CE6D85363B92C1CEFB2272C5148AFD /* PFMutablePushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutablePushState.m; path = Parse/Internal/Push/State/PFMutablePushState.m; sourceTree = ""; }; + B72B60C944C86664F4D05675D934FC68 /* PFRESTCommand_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand_Private.h; path = Parse/Internal/Commands/PFRESTCommand_Private.h; sourceTree = ""; }; + B7F9DB4E614C6F9EFC52811652A1D27F /* PFErrorUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFErrorUtilities.m; path = Parse/Internal/PFErrorUtilities.m; sourceTree = ""; }; + B84E7ADA66D7676BCB6F6E7FF2FD89EB /* PFMutableUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableUserState.h; path = Parse/Internal/User/State/PFMutableUserState.h; sourceTree = ""; }; + B8678F4D5E8E1A277EAFCB398356B491 /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; + B8FB92BD0F40B979678430FF43192D73 /* PFPush.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPush.m; path = Parse/PFPush.m; sourceTree = ""; }; + B9680BBDD9701CD4FEFECC8FBFF038F0 /* PFQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQuery.h; path = Parse/PFQuery.h; sourceTree = ""; }; + B99C240F89A7BC2E76B71472745234BA /* PFSQLiteDatabaseResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseResult.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h; sourceTree = ""; }; BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - BA733732E0D2D37C0A92D946DE2A9EEE /* PFKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeychainStore.h; path = Parse/Internal/PFKeychainStore.h; sourceTree = ""; }; - BA8D893893775B109603AF7A33CD563B /* PFURLSessionFileDownloadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionFileDownloadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m; sourceTree = ""; }; - BB019CE2BDFE6EC36FCD9993DB744EFA /* PFUserAuthenticationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationController.h; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h; sourceTree = ""; }; - BB51AB9AA27CE8D0A85E5690F23CF6EA /* PFCategoryLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCategoryLoader.h; path = Parse/Internal/PFCategoryLoader.h; sourceTree = ""; }; - BBEDFD1C6F661507D70B9C73268193B3 /* PFPushManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushManager.h; path = Parse/Internal/Push/Manager/PFPushManager.h; sourceTree = ""; }; - BBFE8A0106C591064C969ED096275D29 /* PFOfflineQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryController.h; path = Parse/Internal/Query/Controller/PFOfflineQueryController.h; sourceTree = ""; }; - BCC77513019B8BF9A882928F74C52424 /* PFSubclassing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSubclassing.h; path = Parse/PFSubclassing.h; sourceTree = ""; }; - BD2D7F17F9C540FBFE58E4DB0EEBDC9A /* libParse.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libParse.a; sourceTree = BUILT_PRODUCTS_DIR; }; - BE9F74FE3902C79E0394988E24194855 /* PFQueryUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryUtilities.m; path = Parse/Internal/Query/Utilities/PFQueryUtilities.m; sourceTree = ""; }; - BEAFE0D908EC855629B1121D957A354A /* ParseModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseModule.h; path = Parse/Internal/ParseModule.h; sourceTree = ""; }; + BADE09B4EF587C0DCFC3F014B3DD1767 /* PFHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHash.h; path = Parse/Internal/PFHash.h; sourceTree = ""; }; + BC83DB2D364DF47142AB2F90071DA9F5 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + BCF178329E80A7C9788F12D35E84DE11 /* PFCommandRunning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunning.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.h; sourceTree = ""; }; + BDF771A5145C765EE70F40CEBF7C3075 /* PFProductTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductTableViewController.h; path = ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h; sourceTree = ""; }; + BEAFF13EAEE726C139773BE3860F7AB6 /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLConnectionOperation.m; path = AFNetworking/AFURLConnectionOperation.m; sourceTree = ""; }; + BED41B8E7F85EE8E67A39865C037C805 /* PFEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue.h; path = Parse/Internal/PFEventuallyQueue.h; sourceTree = ""; }; + BF2B0A2A499B1873CEA684566E8B5487 /* PFMulticastDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMulticastDelegate.m; path = Parse/Internal/PFMulticastDelegate.m; sourceTree = ""; }; BF59BC15D23E1E1912C8F334E7236813 /* Pods-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-acknowledgements.plist"; sourceTree = ""; }; - BF99C2FE0ABD09A876B4FDC3B73D693D /* PFAnalyticsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsController.h; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.h; sourceTree = ""; }; - BF9B1FD5D1E2441D018DF7EDDDC4A3FC /* PFObjectSubclassInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassInfo.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h; sourceTree = ""; }; - BFBC36D6FED37ED769BA66522F1A639F /* PFFieldOperationDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperationDecoder.m; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.m; sourceTree = ""; }; - C01AC5406A1FE996C23D44F2D1E54AE2 /* PFInstallationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationConstants.h; path = Parse/Internal/Installation/Constants/PFInstallationConstants.h; sourceTree = ""; }; + BFA480ECE7F710752C7409F5C380B0F8 /* PFRole.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRole.h; path = Parse/PFRole.h; sourceTree = ""; }; + C04DABE57BA79040087CCBBA081B3616 /* PFObjectLocalIdStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectLocalIdStore.h; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h; sourceTree = ""; }; + C074D541BD181F718CABF5FB5728F620 /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; C091E831068E3E504A40AC6932B39C87 /* FloatConversion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FloatConversion.h; path = pop/WebCore/FloatConversion.h; sourceTree = ""; }; + C0CF8725DD1DD49BE8D6A0907238EA04 /* PFEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyQueue.m; path = Parse/Internal/PFEventuallyQueue.m; sourceTree = ""; }; C0DF3C83EBC5F7BF6DAAACEBD7D72791 /* POPAnimationEvent.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationEvent.mm; path = pop/POPAnimationEvent.mm; sourceTree = ""; }; - C124801645AB37C7712D483A5C87D83D /* PFLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogger.m; path = Parse/Internal/PFLogger.m; sourceTree = ""; }; - C1555BCE0D8C4B718BB72214683D3907 /* PFCloudCodeController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloudCodeController.h; path = Parse/Internal/CloudCode/PFCloudCodeController.h; sourceTree = ""; }; + C11D9DEA5457F8EBBADB980FD16BFF7B /* PFCurrentConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentConfigController.h; path = Parse/Internal/Config/Controller/PFCurrentConfigController.h; sourceTree = ""; }; + C157642B668892E40497C6E7E543A2FC /* AFNetworking-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AFNetworking-Private.xcconfig"; sourceTree = ""; }; + C16B1F4CA93F9A1D3CD11DFF0FE20F8D /* PFObjectController_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController_Private.h; path = Parse/Internal/Object/Controller/PFObjectController_Private.h; sourceTree = ""; }; C1B6A53BFD919966B87CD6FBFD89CE1B /* POPAnimationExtras.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationExtras.h; path = pop/POPAnimationExtras.h; sourceTree = ""; }; + C1D8402E147FF6607379D3B631C593FB /* PFAnalyticsUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsUtilities.m; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m; sourceTree = ""; }; C1E27C3CBB149C1873F6CDC55D998CE2 /* POPAnimationTracer.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationTracer.mm; path = pop/POPAnimationTracer.mm; sourceTree = ""; }; + C2055953D9AE502AA512CC756C8E07B8 /* PFHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPRequest.h; path = Parse/Internal/HTTPRequest/PFHTTPRequest.h; sourceTree = ""; }; + C213AD7370FD716E3010F4CCDE4BE681 /* ParseUI-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ParseUI-Private.xcconfig"; sourceTree = ""; }; + C235A6B7A110CC5F4093F80159287E17 /* PFSQLiteDatabaseResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseResult.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m; sourceTree = ""; }; C24554FAA71D841BC3C0759DA37874AE /* POPSpringAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPSpringAnimation.mm; path = pop/POPSpringAnimation.mm; sourceTree = ""; }; - C3E92FDA0225F57156353438BB9F934B /* ContextMenu.iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ContextMenu.iOS-dummy.m"; sourceTree = ""; }; - C40DDFB915A319DD1CC8CD9340920EFF /* PFURLSessionJSONDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionJSONDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h; sourceTree = ""; }; - C452DCF65E6EEC6AD15BD77F01EDF779 /* PFInternalUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInternalUtils.h; path = Parse/Internal/PFInternalUtils.h; sourceTree = ""; }; - C4F300D4AA623B3DFFDF7971E2B5A614 /* PFProduct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProduct.h; path = Parse/PFProduct.h; sourceTree = ""; }; - C5560C46514764C06929B264B533F518 /* UIView+YALConstraints.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+YALConstraints.m"; path = "YALContextMenu/UIView+YALConstraints.m"; sourceTree = ""; }; + C29500E205220EB8DB49F1C825FADA89 /* PFRESTConfigCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTConfigCommand.h; path = Parse/Internal/Commands/PFRESTConfigCommand.h; sourceTree = ""; }; + C2A808722282E883FC6468CC1082F40D /* PFAnonymousUtils_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils_Private.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h; sourceTree = ""; }; + C398F4947CB112102A0ADF8368272495 /* UIView+YALConstraints.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+YALConstraints.m"; path = "YALContextMenu/UIView+YALConstraints.m"; sourceTree = ""; }; + C40BCF6A4E2863E61431A31D979EE9C9 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; + C41C99E60696D54F31E9D4B990F0B0B3 /* PFRESTAnalyticsCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTAnalyticsCommand.h; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.h; sourceTree = ""; }; + C5603815F5CC7760F94208FF90B5488C /* PFPushChannelsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushChannelsController.h; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.h; sourceTree = ""; }; C560616DDF5273CF7C53EF72EA6ED45A /* POPDecayAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPDecayAnimation.mm; path = pop/POPDecayAnimation.mm; sourceTree = ""; }; - C5FE3CDD5FB245BC2913E868E9DE3995 /* PFRESTSessionCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTSessionCommand.h; path = Parse/Internal/Commands/PFRESTSessionCommand.h; sourceTree = ""; }; - C609AF7E1C4CAC8BDE38A1E28E64414A /* PFInstallationIdentifierStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationIdentifierStore.m; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m; sourceTree = ""; }; - C61F3C1B791FFC9E7C5ADE180684470E /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; - C7C65DD82B3A08F62D43E9DAC3B23880 /* PFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkActivityIndicatorManager.h; path = Parse/PFNetworkActivityIndicatorManager.h; sourceTree = ""; }; + C5ADC6D84457794AAF2D20A45BAD22C5 /* PFCurrentUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentUserController.h; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.h; sourceTree = ""; }; + C5CBEAEA564EF7FD09CFE53392CC6424 /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLConnectionOperation.h; path = AFNetworking/AFURLConnectionOperation.h; sourceTree = ""; }; + C61F7888A611C849888C8333EB005699 /* PFACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState.h; path = Parse/Internal/ACL/State/PFACLState.h; sourceTree = ""; }; + C69C27BDBB8B1E63677A91477C52FDA5 /* PFEventuallyPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyPin.m; path = Parse/Internal/PFEventuallyPin.m; sourceTree = ""; }; + C8BC0FA6F2C382BF336FF4ECE47C192B /* PFObjectFileCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCoder.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.m; sourceTree = ""; }; + C917E75AADCC6DB455A54504481914C6 /* UIAlertView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAlertView+AFNetworking.h"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.h"; sourceTree = ""; }; C9565C73D5D4BE79747E60DCF1557E71 /* POPAnimatableProperty.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimatableProperty.mm; path = pop/POPAnimatableProperty.mm; sourceTree = ""; }; - C9BD34A121ED46D7A11BF5ED82E5B876 /* PFEventuallyPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyPin.m; path = Parse/Internal/PFEventuallyPin.m; sourceTree = ""; }; - CA572C4AE94CB9AC2FF8EE80A7E1179F /* PFEventuallyQueue_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue_Private.h; path = Parse/Internal/PFEventuallyQueue_Private.h; sourceTree = ""; }; - CA70C152E8EBE75160C47A587C7EC00D /* PFMultiProcessFileLockController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLockController.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h; sourceTree = ""; }; - CAB37E3012ED80BEB1BCF0077E7E38F4 /* PFAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalytics.m; path = Parse/PFAnalytics.m; sourceTree = ""; }; - CB4444A178F9CEC2E097C90C7D351E7F /* PFRESTObjectCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectCommand.h; path = Parse/Internal/Commands/PFRESTObjectCommand.h; sourceTree = ""; }; - CBCE01FE706B02A990236BCCFB09B153 /* PFProduct+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFProduct+Private.h"; path = "Parse/Internal/Product/PFProduct+Private.h"; sourceTree = ""; }; - CBE1F1F92C05B5ADE677C606485BB75F /* PFReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFReachability.m; path = Parse/Internal/PFReachability.m; sourceTree = ""; }; - CC332C397ADA56AB76FB706A0ABF83E5 /* Parse-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-prefix.pch"; sourceTree = ""; }; - CCFA76D1938B2CCED5785C13FA4FC5B8 /* PFObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController.h; path = Parse/Internal/Object/Controller/PFObjectController.h; sourceTree = ""; }; - CDAC0B9AE144C31E2DE5AF0A4DB1EDC4 /* PFURLSessionCommandRunner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h; sourceTree = ""; }; - CDE463E6B9D1AF8E6AE850CD5E68849F /* PFObjectSubclassingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassingController.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h; sourceTree = ""; }; - CEB9D45B957B79F1459ABF1E81F01530 /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; - CF335AC7E0E6EE3DD820467124C2102D /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; - CF35E714DE566F845ECEDF6AE894C5F0 /* PFSessionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionController.m; path = Parse/Internal/Session/Controller/PFSessionController.m; sourceTree = ""; }; - CF46F6E5A7E52A35C89851DED33A2176 /* PFDateFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDateFormatter.m; path = Parse/Internal/PFDateFormatter.m; sourceTree = ""; }; - CF774A16F869C80126A81687EB1E85D6 /* libBolts.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBolts.a; sourceTree = BUILT_PRODUCTS_DIR; }; - CFC48C77C63A582B14A5B098E6FCF482 /* PFURLSessionFileDownloadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionFileDownloadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h; sourceTree = ""; }; - D0D0DD7229B595E60BA7D6C2A41C4B6B /* PFCommandURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandURLRequestConstructor.m; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m; sourceTree = ""; }; - D0E74CB04A2E39384A95EDA3500A04D2 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; - D15D922CCB9D2F0B65F44C7FBFE53EBC /* PFRelationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationPrivate.h; path = Parse/Internal/Relation/PFRelationPrivate.h; sourceTree = ""; }; - D244FD9C2061C46A05C67E3557A6D7A9 /* PFRESTPushCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTPushCommand.h; path = Parse/Internal/Commands/PFRESTPushCommand.h; sourceTree = ""; }; - D26D8AB91D60CAC4AF163A949239DE49 /* PFRelation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelation.h; path = Parse/PFRelation.h; sourceTree = ""; }; - D3E8D0F342FFF167540A96E017CCF674 /* PFFileState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState_Private.h; path = Parse/Internal/File/State/PFFileState_Private.h; sourceTree = ""; }; - D4186E5938E4D869A1267A20AC002113 /* PFConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfigController.h; path = Parse/Internal/Config/Controller/PFConfigController.h; sourceTree = ""; }; - D4EBEE47CEE4A7801385DB1D8C88383E /* PFKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeychainStore.m; path = Parse/Internal/PFKeychainStore.m; sourceTree = ""; }; + C9DD09269903183CC67B8C5718D9BE7F /* AFNetworking.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.xcconfig; sourceTree = ""; }; + C9EF79160C35E4B837E7EBBF7C95D158 /* PFSignUpViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSignUpViewController.m; path = ParseUI/Classes/SignUpViewController/PFSignUpViewController.m; sourceTree = ""; }; + C9F6E5345A39FC5550216E4F65A976B0 /* PFSQLiteDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase_Private.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h; sourceTree = ""; }; + CA749ACCAF73A8469072D11F78DA1FDA /* PFMutableObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableObjectState.h; path = Parse/Internal/Object/State/PFMutableObjectState.h; sourceTree = ""; }; + CB295B33B0FC530FD77C52FEB400203E /* PFCloud.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloud.m; path = Parse/PFCloud.m; sourceTree = ""; }; + CB50B697271E10AC0A2FFC3D43C3AD6D /* PFSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession_Private.h; path = Parse/Internal/Session/PFSession_Private.h; sourceTree = ""; }; + CB6B147735D1F716FC2CE4332F65D798 /* PFApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFApplication.m; path = Parse/Internal/PFApplication.m; sourceTree = ""; }; + CBC8CC7D9B59534667A62E84BF1C8B31 /* PFObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState.h; path = Parse/Internal/Object/State/PFObjectState.h; sourceTree = ""; }; + CC4DDA9182F4F5C704598B6E722CDC50 /* PFLocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLocationManager.m; path = Parse/Internal/PFLocationManager.m; sourceTree = ""; }; + CC980D88098DADD0C68CCE0CC413730A /* PFURLConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLConstructor.m; path = Parse/Internal/HTTPRequest/PFURLConstructor.m; sourceTree = ""; }; + CCE6D23A84D4E85A3CD15B802A7AE4CE /* PFOperationSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOperationSet.h; path = Parse/Internal/Object/OperationSet/PFOperationSet.h; sourceTree = ""; }; + CD1B49F66FFBB4AD6CCEC0A90A66D326 /* UIAlertView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAlertView+AFNetworking.m"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.m"; sourceTree = ""; }; + CDB5EF0EC43B47E829CDC47DBC09A531 /* PFBase64Encoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBase64Encoder.m; path = Parse/Internal/PFBase64Encoder.m; sourceTree = ""; }; + CDF42DAF3471B27B84DD07F1A7E3391C /* PFTextField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTextField.m; path = ParseUI/Classes/Views/PFTextField.m; sourceTree = ""; }; + CF1F38521C14DBB0BD9845FBEBA5D9CC /* PFPurchaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseController.h; path = Parse/Internal/Purchase/Controller/PFPurchaseController.h; sourceTree = ""; }; + CF7F21D5332C89148FDF4E4644891872 /* BoltsVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BoltsVersion.h; path = Bolts/Common/BoltsVersion.h; sourceTree = ""; }; + D16A398DDB303A767A2CF933083655C3 /* PFCachedQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCachedQueryController.h; path = Parse/Internal/Query/Controller/PFCachedQueryController.h; sourceTree = ""; }; + D292B318B83D8D026CD2FAAAB59A62D9 /* PFURLSessionCommandRunner_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h; sourceTree = ""; }; + D31C147B6E9BBE54DE19804E1F7CC396 /* PFThreadsafety.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFThreadsafety.m; path = Parse/Internal/ThreadSafety/PFThreadsafety.m; sourceTree = ""; }; + D39AAA20779A11314DE3292353142A99 /* PFCommandResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandResult.m; path = Parse/Internal/PFCommandResult.m; sourceTree = ""; }; + D43B8CFF328D2BE6C9755924B181CF2F /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; + D44289371FAC5C4BED0F2F71337214A6 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; + D497EB0E3C5055E7FFF959587818764C /* PFCommandResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandResult.h; path = Parse/Internal/PFCommandResult.h; sourceTree = ""; }; + D4C9535D0DCC9CEAF41CAB114CBAC573 /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; + D52EE0139EA03EDDE83AA9D9685536FB /* PFURLSessionUploadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionUploadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m; sourceTree = ""; }; D5CE48778301C24CD288B08DDA441605 /* POPVector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPVector.h; path = pop/POPVector.h; sourceTree = ""; }; - D5CF558DFE9FECD0D4DAD9727F9E7447 /* PFMutableObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableObjectState.m; path = Parse/Internal/Object/State/PFMutableObjectState.m; sourceTree = ""; }; - D8AA77C187E180A556AF4ADA309BC0B6 /* PFOfflineObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineObjectController.m; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m; sourceTree = ""; }; - D8CEAB9CDED9C3CA1445D6F3DAF05029 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; - D93333F49B10A154028722630A69414C /* PFFieldOperationDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperationDecoder.h; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.h; sourceTree = ""; }; - D963AA70AF8A60F226D09FBC6225E686 /* PFThreadsafety.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFThreadsafety.h; path = Parse/Internal/ThreadSafety/PFThreadsafety.h; sourceTree = ""; }; - D973AF50D37829E5A629A80ED88FF2E9 /* PFRESTObjectBatchCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectBatchCommand.h; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.h; sourceTree = ""; }; - DA4157CE1B57DF0CDF63B24888DCEA61 /* PFObjectSubclassingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassingController.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m; sourceTree = ""; }; - DAC577DC0CB800AB728273F16E83046D /* ContextMenu.iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ContextMenu.iOS-prefix.pch"; sourceTree = ""; }; - DAD2B1AEAEEE3B6167AA69B21E00DE2E /* PFInternalUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInternalUtils.m; path = Parse/Internal/PFInternalUtils.m; sourceTree = ""; }; - DAF8AFF71E17239BC9D066B413214C0F /* PFPushUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushUtilities.m; path = Parse/Internal/Push/Utilites/PFPushUtilities.m; sourceTree = ""; }; - DBD87B92425DF4F2F580DDE78C400947 /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; - DD1568F7E2ED50F1C629DDF3D9F3020C /* PFUserAuthenticationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationDelegate.h; path = Parse/PFUserAuthenticationDelegate.h; sourceTree = ""; }; - DD2F94AB2074545E677D5F66F9D63121 /* PFPurchase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchase.h; path = Parse/PFPurchase.h; sourceTree = ""; }; - DD428B827A37AD34DF77CC5C561BCE0C /* PFPurchase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchase.m; path = Parse/PFPurchase.m; sourceTree = ""; }; - DE2DE7B62241FC17A59B0C930D7837B4 /* PFSQLiteDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h; sourceTree = ""; }; - DE3508684073BF9ED1EE176A805EE3FC /* libAFNetworking.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAFNetworking.a; sourceTree = BUILT_PRODUCTS_DIR; }; - DFE6FDE4C6292695F3EBEFE040B0685E /* PFURLSessionDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h; sourceTree = ""; }; - E0041782152C1ABC1F18B164311EAF2E /* PFObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState.h; path = Parse/Internal/Object/State/PFObjectState.h; sourceTree = ""; }; - E1129C74BCA89B5DEF89974B3EADEAF6 /* PFQueryUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryUtilities.h; path = Parse/Internal/Query/Utilities/PFQueryUtilities.h; sourceTree = ""; }; - E12E9AD26CFEFE56F770EBC8224F9542 /* PFEncoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEncoder.h; path = Parse/Internal/PFEncoder.h; sourceTree = ""; }; - E20D9CF29C188B71F5C9BA5C972A8960 /* PFRESTFileCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTFileCommand.h; path = Parse/Internal/Commands/PFRESTFileCommand.h; sourceTree = ""; }; - E2534618753A8E575CA58125DE04D03D /* PFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFNetworkActivityIndicatorManager.m; path = Parse/PFNetworkActivityIndicatorManager.m; sourceTree = ""; }; - E2F89C1AC67968BA35BD1123BE34D894 /* PFCurrentInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentInstallationController.m; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m; sourceTree = ""; }; - E424F4FC00D39BFE64948677EB2D53A7 /* PFCommandCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache.h; path = Parse/Internal/PFCommandCache.h; sourceTree = ""; }; - E4A624B26435247F139B091B03F95E5A /* PFMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMacros.h; path = Parse/Internal/PFMacros.h; sourceTree = ""; }; - E50C20130F417DFB11F5B3BD1EE46846 /* PFMutableQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableQueryState.m; path = Parse/Internal/Query/State/PFMutableQueryState.m; sourceTree = ""; }; - E58FC77B8AC9BB8CB123B072D0E7AD2F /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; - E6235BD1313049794F1B1DA7AB8B72BF /* PFPush.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPush.h; path = Parse/PFPush.h; sourceTree = ""; }; - E6F16A936B103DF9237ED50EBF4D8631 /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLConnectionOperation.m; path = AFNetworking/AFURLConnectionOperation.m; sourceTree = ""; }; - E73B966684C4350307ED9BFDFA142DF1 /* AFNetworking.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.xcconfig; sourceTree = ""; }; - E745CDD44F448B0BB657E770CFDCF27C /* PFFileManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileManager.m; path = Parse/Internal/PFFileManager.m; sourceTree = ""; }; + D6974501F00D5E601A051C644A12DD71 /* PFTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTableViewCell.h; path = ParseUI/Classes/Cells/PFTableViewCell.h; sourceTree = ""; }; + D70110CA542D79C645FCD20E2C9674AB /* PFPushState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState_Private.h; path = Parse/Internal/Push/State/PFPushState_Private.h; sourceTree = ""; }; + D74E2E4235E9688B273C0714402DEADB /* PFAnalyticsUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsUtilities.h; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h; sourceTree = ""; }; + D7CBDA2EC1FB8FB11CC6A2C5C9808D47 /* PFRESTObjectCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectCommand.m; path = Parse/Internal/Commands/PFRESTObjectCommand.m; sourceTree = ""; }; + D96C8C02AE822A3F03B68FAA6D594497 /* PFJSONSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFJSONSerialization.h; path = Parse/Internal/PFJSONSerialization.h; sourceTree = ""; }; + D979F925569BC22D42FF30FE4C67B4E3 /* Parse.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Parse.xcconfig; sourceTree = ""; }; + D9E009FDFD4D025A77485806D951F056 /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; + DA89BE341EEC7242A78FEDA064807901 /* PFPurchaseTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseTableViewCell.m; path = ParseUI/Classes/Cells/PFPurchaseTableViewCell.m; sourceTree = ""; }; + DAC0B4DB266A15A3A61A62142BDA7069 /* PFMutableACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableACLState.h; path = Parse/Internal/ACL/State/PFMutableACLState.h; sourceTree = ""; }; + DAC1022DF912D32448DE24E2472BD2EB /* PFGeoPointPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPointPrivate.h; path = Parse/Internal/PFGeoPointPrivate.h; sourceTree = ""; }; + DBC82AC944CB7F585939AB9589D4F9B4 /* PFPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPin.h; path = Parse/Internal/LocalDataStore/Pin/PFPin.h; sourceTree = ""; }; + DBD6939AC0C49B37416ADF296729C43E /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; + DC073136FD3869B2BB9A9D30587BE1DD /* PFPurchase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchase.m; path = Parse/PFPurchase.m; sourceTree = ""; }; + DC8B8475B2B05D335E837929C3ABB2AD /* PFUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUser.h; path = Parse/PFUser.h; sourceTree = ""; }; + DD2C8034413D050CB11771F958F248F1 /* ContextMenu.iOS-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ContextMenu.iOS-Private.xcconfig"; sourceTree = ""; }; + DD64D76CC193A68DABCF84C619EFCFC8 /* PFRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState.h; path = Parse/Internal/Relation/State/PFRelationState.h; sourceTree = ""; }; + DD82088840AAB58D0F5243C0230D17B8 /* PFCategoryLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCategoryLoader.m; path = Parse/Internal/PFCategoryLoader.m; sourceTree = ""; }; + DF6863C55207FC14F127AB7F8E41415A /* PFPushController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushController.m; path = Parse/Internal/Push/Controller/PFPushController.m; sourceTree = ""; }; + DFB79D7DC036E7A8C84740F1E542074B /* PFLocalization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocalization.h; path = ParseUI/Classes/Internal/PFLocalization.h; sourceTree = ""; }; + DFC41E4010D852E3977AF17A221CF0CA /* PFFileDataStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileDataStream.h; path = Parse/Internal/File/FileDataStream/PFFileDataStream.h; sourceTree = ""; }; + DFC690133F99B68E1F8CE7784769EF36 /* PFResources.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFResources.h; path = ParseUI/Generated/PFResources.h; sourceTree = ""; }; + E04C49F5564B931B972E6F826A732529 /* PFUserFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserFileCodingLogic.m; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m; sourceTree = ""; }; + E16AA8270CAF5EA08D00D8A1D14F2059 /* PFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFNetworkActivityIndicatorManager.m; path = Parse/PFNetworkActivityIndicatorManager.m; sourceTree = ""; }; + E2143F74B5AD9A40EA532F839BD3B314 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; + E23709D1E2B358163967F34AC4683834 /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; + E28AF701482179FE07EE17023210453F /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; + E2B8566040F468B4AED32A8BCB27E12A /* PFObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectState.m; path = Parse/Internal/Object/State/PFObjectState.m; sourceTree = ""; }; + E2CA6C46BBB76A49C80830DB49B9FFF5 /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; + E31FED7E103689AA50C7795F772BDA23 /* PFOfflineStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineStore.h; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h; sourceTree = ""; }; + E495F30B2C591E5AD9A1CC249901ACD2 /* PFPropertyInfo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Private.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h; sourceTree = ""; }; + E504BFBB2DBF9126FAB2DC1F339CB325 /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; + E557ABF7F7687DC7DFF115D7F62AEDA5 /* Parse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse.h; path = Parse/Parse.h; sourceTree = ""; }; + E615EEC282CDCEE0D432D51BEA8F872B /* PFInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationController.h; path = Parse/Internal/Installation/Controller/PFInstallationController.h; sourceTree = ""; }; + E6B87160188F7023D2B49F9B91DBAB94 /* PFBase64Encoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBase64Encoder.h; path = Parse/Internal/PFBase64Encoder.h; sourceTree = ""; }; + E6C8C116B56F8D1B7AB62768527EC072 /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperation.h; path = AFNetworking/AFHTTPRequestOperation.h; sourceTree = ""; }; + E72971E8203922C334379D6EF46D2C3A /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperationManager.h; path = AFNetworking/AFHTTPRequestOperationManager.h; sourceTree = ""; }; + E74884D5A2FE748F09D5B9232A56C7CE /* PFInstallationIdentifierStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationIdentifierStore.m; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m; sourceTree = ""; }; E85E0983DBE882A8009D0F7EAB591B91 /* POPAnimationRuntime.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationRuntime.mm; path = pop/POPAnimationRuntime.mm; sourceTree = ""; }; - E8FCE3D950703287AE285D63EEA38289 /* PFConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConstants.h; path = Parse/PFConstants.h; sourceTree = ""; }; - E90014A2B5A64CF0A01CA41D71769C7B /* PFObjectUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectUtilities.h; path = Parse/Internal/Object/Utilities/PFObjectUtilities.h; sourceTree = ""; }; - E97A297341B3E569BD3DEA54A611D6DF /* PFErrorUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFErrorUtilities.m; path = Parse/Internal/PFErrorUtilities.m; sourceTree = ""; }; - EA79AC3D10A54A6115A06F836846E4EB /* PFCloud.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloud.h; path = Parse/PFCloud.h; sourceTree = ""; }; - EAEF6A0ABE272D5803680B4298EB62D2 /* PFRESTCommand_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand_Private.h; path = Parse/Internal/Commands/PFRESTCommand_Private.h; sourceTree = ""; }; - EAFA435D26900861E36F1BAF155390C7 /* PFOfflineQueryLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryLogic.h; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h; sourceTree = ""; }; + E873F760B193DFBEF81E19B36B33FCED /* PFEventuallyQueue_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue_Private.h; path = Parse/Internal/PFEventuallyQueue_Private.h; sourceTree = ""; }; + E8F241847217017ADBC4283C2F8F469A /* PFPushManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushManager.h; path = Parse/Internal/Push/Manager/PFPushManager.h; sourceTree = ""; }; + EA487C07C0F804790F5993CF5E3C6D3F /* PFPushUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushUtilities.m; path = Parse/Internal/Push/Utilites/PFPushUtilities.m; sourceTree = ""; }; + EA5338250BCA80817AD4E8F779E085E1 /* ParseUI-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ParseUI-prefix.pch"; sourceTree = ""; }; + EB19AF401F51648EFC25CAA336AF77DA /* PFFieldOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperation.m; path = Parse/Internal/FieldOperation/PFFieldOperation.m; sourceTree = ""; }; EB56BE02F1B0412A41C9D9834B04BC30 /* POPSpringAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringAnimationInternal.h; path = pop/POPSpringAnimationInternal.h; sourceTree = ""; }; + EB8DC8124CEE001FB0DCB7332A0E4F5F /* PFCommandRunningConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunningConstants.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h; sourceTree = ""; }; + EBA5F64F36074059AACC0B7DACE6B378 /* PFPushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState.h; path = Parse/Internal/Push/State/PFPushState.h; sourceTree = ""; }; EC10F21A5E230A911C2C2E5082CDAE4B /* POPAnimationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationPrivate.h; path = pop/POPAnimationPrivate.h; sourceTree = ""; }; - ECA0CA78D651CA48D080363398697627 /* PFMutableUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableUserState.m; path = Parse/Internal/User/State/PFMutableUserState.m; sourceTree = ""; }; - ECBD824DA95D72A1DD329C331E1D9D09 /* PFLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocationManager.h; path = Parse/Internal/PFLocationManager.h; sourceTree = ""; }; ECC48BF18D3BD01C21B65648709A45D6 /* POPAnimator.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimator.mm; path = pop/POPAnimator.mm; sourceTree = ""; }; - ECE13A0CEBDF1FFEEF6A3A9D07298478 /* PFMutableRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableRelationState.h; path = Parse/Internal/Relation/State/PFMutableRelationState.h; sourceTree = ""; }; - ED172D7F5B84203E7C6617EC01D187F2 /* PFCurrentObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentObjectControlling.h; path = Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h; sourceTree = ""; }; ED596D85957A49EC6092EC8EC38FCE49 /* POPAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationInternal.h; path = pop/POPAnimationInternal.h; sourceTree = ""; }; - EDB35C20F0111B6D8B6548B3DA6BA7CD /* pop-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "pop-prefix.pch"; sourceTree = ""; }; - EE8606221826FA5909EFFA2016DEE26C /* PFAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics.h; path = Parse/PFAnalytics.h; sourceTree = ""; }; - EF64AAF633AE4BDB30247D6A4090B89C /* PFRelationState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState_Private.h; path = Parse/Internal/Relation/State/PFRelationState_Private.h; sourceTree = ""; }; - F0662D5C0759804552360A67D1BDFBA0 /* PFUserConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserConstants.m; path = Parse/Internal/User/Constants/PFUserConstants.m; sourceTree = ""; }; - F08E0A9E75FBD4FAACDB3C8A68081A32 /* BFTask+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Private.m"; path = "Parse/Internal/BFTask+Private.m"; sourceTree = ""; }; - F0959918976A05003B1E7FB37A8F8749 /* Bolts-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Bolts-Private.xcconfig"; sourceTree = ""; }; + ED8D97DDDCF9842413073AA979D81CD2 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + EDBB5CF4F1A249E933B2469709D9F8DD /* PFInstallationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationPrivate.h; path = Parse/Internal/Installation/PFInstallationPrivate.h; sourceTree = ""; }; + EEC0387E8F35C7BADBD1B4D6A482702D /* PFSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSession.m; path = Parse/PFSession.m; sourceTree = ""; }; + EED19F37D13868499C43F13264741ADA /* PFSQLiteDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabase.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m; sourceTree = ""; }; + EEDB7E1475A81EE2F12373656077D160 /* PFHTTPURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHTTPURLRequestConstructor.m; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m; sourceTree = ""; }; + EEF3C9636DEAF164594CC80C9C6F8A3F /* PFDateFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDateFormatter.m; path = Parse/Internal/PFDateFormatter.m; sourceTree = ""; }; + EF790182566A5099C39C1B289E8BB3B8 /* PFActivityIndicatorTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActivityIndicatorTableViewCell.h; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h; sourceTree = ""; }; + EF879D6FEC35876A57F1E379EA8F1BEA /* PFURLSessionJSONDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionJSONDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m; sourceTree = ""; }; + EFF1793AB041ED2DA9362386ECE91641 /* UIView+YALConstraints.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+YALConstraints.h"; path = "YALContextMenu/UIView+YALConstraints.h"; sourceTree = ""; }; + F03D0C596469A502C868EB32FEE7D020 /* PFObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController.h; path = Parse/Internal/Object/Controller/PFObjectController.h; sourceTree = ""; }; F0B4105C7EE2DA010EA4746E79138C7C /* POPVector.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPVector.mm; path = pop/POPVector.mm; sourceTree = ""; }; - F0F3A2FA993D77CC93EA7FCA0571B6E3 /* PFLocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLocationManager.m; path = Parse/Internal/PFLocationManager.m; sourceTree = ""; }; - F0FF6176EC466320C2C4D25100A1B61E /* PFObject+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFObject+Subclass.h"; path = "Parse/PFObject+Subclass.h"; sourceTree = ""; }; + F0CC09558A010C10AAC9F4CD4C53AD04 /* PFMultiProcessFileLock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLock.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m; sourceTree = ""; }; + F0E3349A60D7826DA93B7B2959FCEB2D /* PFCollectionViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCollectionViewCell.m; path = ParseUI/Classes/Cells/PFCollectionViewCell.m; sourceTree = ""; }; + F182401E66857C7D4B875E79122BD830 /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; + F1B7F591E729212EB6BF33EF88BA1981 /* PFCollectionViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCollectionViewCell.h; path = ParseUI/Classes/Cells/PFCollectionViewCell.h; sourceTree = ""; }; + F1CD895FE6B420EB0729480BD79BE4E3 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; + F1DD91DA807740D7FAB3167719838902 /* PFLoadingView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLoadingView.h; path = ParseUI/Classes/Internal/Views/PFLoadingView.h; sourceTree = ""; }; + F2457C51DB8F154FDFD167B5690FC35C /* BFTask+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Private.h"; path = "Parse/Internal/BFTask+Private.h"; sourceTree = ""; }; + F25C9F58CFDC13B49DEA0CD5013B1F28 /* PFMutableObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableObjectState.m; path = Parse/Internal/Object/State/PFMutableObjectState.m; sourceTree = ""; }; + F363289FFEDBECB17FBC94ED2AE8C0EF /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; + F369CDC4FF93740544F25823CC584B90 /* Parse-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Parse-dummy.m"; sourceTree = ""; }; F3A985A006B0CCD0116D8FC53C4D1834 /* POPAction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAction.h; path = pop/POPAction.h; sourceTree = ""; }; - F3FCAEE7ACA390A41ACE7637EA5338AE /* PFQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryController.m; path = Parse/Internal/Query/Controller/PFQueryController.m; sourceTree = ""; }; - F48EC1FB45579CEBC6000F723C5E081B /* PFPurchaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseController.h; path = Parse/Internal/Purchase/Controller/PFPurchaseController.h; sourceTree = ""; }; + F3C4D6B4BF5063C2EC4B6F8862998D93 /* PFURLSessionUploadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionUploadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h; sourceTree = ""; }; + F3F5E33F74D6853C5320405E72A25A99 /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; + F3FC1F5573A43949438409A8D53778C3 /* PFHTTPURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPURLRequestConstructor.h; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h; sourceTree = ""; }; + F42BAF2FFD8FD598E5C736149EA031F8 /* PFColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFColor.h; path = ParseUI/Classes/Internal/Extensions/PFColor.h; sourceTree = ""; }; + F44B7D42437E31FF67AF695E26480E07 /* PFPushManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushManager.m; path = Parse/Internal/Push/Manager/PFPushManager.m; sourceTree = ""; }; F54B1AE39CAF0CA846C1C729B033E047 /* POPBasicAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPBasicAnimation.mm; path = pop/POPBasicAnimation.mm; sourceTree = ""; }; - F6357CB5A05AA7E18DC9505CDB7B5CE8 /* PFJSONSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFJSONSerialization.m; path = Parse/Internal/PFJSONSerialization.m; sourceTree = ""; }; + F657AD9C72FE5B432F841B53493D1253 /* PFMutableACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableACLState.m; path = Parse/Internal/ACL/State/PFMutableACLState.m; sourceTree = ""; }; F81E8633F1E784423FE8B9BE16D38981 /* POPPropertyAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPPropertyAnimation.h; path = pop/POPPropertyAnimation.h; sourceTree = ""; }; - F9A596AB40BA679CB6E7CAFF9C12420F /* PFCachedQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCachedQueryController.m; path = Parse/Internal/Query/Controller/PFCachedQueryController.m; sourceTree = ""; }; - FA74881F0C5E486DA753412D3B49338C /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+AFNetworking.m"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.m"; sourceTree = ""; }; - FB0347B267799D3314B6438A04D898BF /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; - FB46E4BC6BAC7355C701C95033BF325F /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; - FC0150E534DA14510CC9BC5D0C1AFFB3 /* ParseInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseInternal.h; path = Parse/Internal/ParseInternal.h; sourceTree = ""; }; - FC9971E4E70ED25A33B370FAEA88A589 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; - FCA0B925A9AF72339A9B4292607E97C8 /* Parse.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Parse.xcconfig; sourceTree = ""; }; - FD826E93D8E3CA261C02B951A6F9751D /* PFPropertyInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo.h; sourceTree = ""; }; - FE27C4E5599C93B42BFE6AFD312AC39A /* PFACLState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState_Private.h; path = Parse/Internal/ACL/State/PFACLState_Private.h; sourceTree = ""; }; - FEC012E8559514CD5FDA778785F7234B /* PFCloudCodeController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloudCodeController.m; path = Parse/Internal/CloudCode/PFCloudCodeController.m; sourceTree = ""; }; - FF3530F7B69DD859647B6416F1A85C73 /* PFFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState.h; path = Parse/Internal/File/State/PFFileState.h; sourceTree = ""; }; - FF3D2A57C25C1CECF52F0872DBB55F05 /* PFInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationController.h; path = Parse/Internal/Installation/Controller/PFInstallationController.h; sourceTree = ""; }; - FF6B3C0F9FB537B2DB4C17A15E8F06D2 /* PFOfflineStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineStore.h; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h; sourceTree = ""; }; - FF7D93CF68584FFA70133B196EFB59F0 /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; - FFD183F4D915B996DC61B082E5317000 /* PFSQLiteDatabaseResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseResult.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h; sourceTree = ""; }; - FFE3BF2FE5A767CB3A9F0B32672156AB /* PFWeakValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFWeakValue.m; path = Parse/Internal/PFWeakValue.m; sourceTree = ""; }; - FFEA133F46FCCEC9897A623F3336EC38 /* Parse_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse_Private.h; path = Parse/Internal/Parse_Private.h; sourceTree = ""; }; + F820E3F0707C3FCB027CE5B4848D8564 /* PFKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeychainStore.h; path = Parse/Internal/PFKeychainStore.h; sourceTree = ""; }; + F82C8E9DF011E7453EA40431821FB283 /* PFProductsRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductsRequestHandler.h; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h; sourceTree = ""; }; + F846ACF033FD69EF28381C488F0B8AA0 /* PFInstallationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationConstants.h; path = Parse/Internal/Installation/Constants/PFInstallationConstants.h; sourceTree = ""; }; + F8C27D2D58E1E3AF1C21FB7330AF1B98 /* PFPrimaryButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPrimaryButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.m; sourceTree = ""; }; + F908ADAD5734EE4C1EA4466E7FE108C1 /* PFObjectEstimatedData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectEstimatedData.h; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h; sourceTree = ""; }; + F996BE0C38219298C5E7E92AF1A4B595 /* PFRESTFileCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTFileCommand.m; path = Parse/Internal/Commands/PFRESTFileCommand.m; sourceTree = ""; }; + F9B9BF93B8FEFA346B7D92DBA659A391 /* PFCoreManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreManager.h; path = Parse/Internal/PFCoreManager.h; sourceTree = ""; }; + FA1957D2FB6FAD2FDD777C1424EE93F5 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; + FAAB83BF02473BC0A2415881560312DB /* PFRESTCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCommand.m; path = Parse/Internal/Commands/PFRESTCommand.m; sourceTree = ""; }; + FD9F0F4B22EEC61402D34AE9EEF30DD0 /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; + FDE3D8A4479D0EA4BAFB41AD9CF6FF64 /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; + FE3AA7D1FB50A9011DE1F2F4F8986498 /* PFURLConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLConstructor.h; path = Parse/Internal/HTTPRequest/PFURLConstructor.h; sourceTree = ""; }; + FEF70A7046A494A88828C2736E5DB5BC /* PFImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImageCache.m; path = ParseUI/Classes/Internal/PFImageCache.m; sourceTree = ""; }; + FF535EE9855D265BB146986E399302C9 /* PFActivityIndicatorCollectionReusableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActivityIndicatorCollectionReusableView.h; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h; sourceTree = ""; }; + FF73455163A4B9C060A3B73C44658BB4 /* PFPropertyInfo_Runtime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Runtime.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 23364613FB0830F19B97359477AA117C /* Frameworks */ = { + 2BB7104FAE246FFAFA4A6159E11F80B3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 39508B096050C3D476E0601B62A67570 /* Foundation.framework in Frameworks */, + 0655C53AF3514D826B20F7892BBE3352 /* CoreGraphics.framework in Frameworks */, + 31E45E0290C278EF3172695D508A2E71 /* Foundation.framework in Frameworks */, + 55BB2075236A6D419A39C20BDAE77AA1 /* QuartzCore.framework in Frameworks */, + A42F547AFB6AD220F9DCD4EDF6E6689B /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4A3A889F28618A29FB5570CB0D7FF3F5 /* Frameworks */ = { + 56A844AA177010E838BCF58676D0E939 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7AA7CBCE858B7750EDE2B738DBC844E0 /* Foundation.framework in Frameworks */, + 3FE2CD905A0D90E675C92E2800E03D9E /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 79D6AFC8C82330655C0BAB54399B5D2C /* Frameworks */ = { + 85674903FD27FE13717922FF4357F9B5 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 99B1982B53FDC71250D05FB8D0AC2C41 /* CoreGraphics.framework in Frameworks */, - E7E1B3EC902FD50B6643939B83B1E678 /* Foundation.framework in Frameworks */, - 364E56F74AFA751A33C35FFD3FCA4EC8 /* MobileCoreServices.framework in Frameworks */, - C453240E137D151B7692C7F7F2061B9F /* Security.framework in Frameworks */, - 4F4F44F87B9F2B6059549A42131F2930 /* SystemConfiguration.framework in Frameworks */, + 0375A436998F237A79A936E6CCE33148 /* CoreGraphics.framework in Frameworks */, + C9A2FFE39ABD912BB7835CC83FDC9332 /* Foundation.framework in Frameworks */, + 4D5EF7D0B4D861DF9F3B699C7F838528 /* MobileCoreServices.framework in Frameworks */, + EC754433ED47C6B48A8CE9F4CB37E14B /* Security.framework in Frameworks */, + 1E3C0F09FCE1C3025D98EC3E79134920 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 81EBEBB48DB0F24CCEE22EC96C01C619 /* Frameworks */ = { + 8C45497CBD83A66C8FBF1289DF39CE3D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 67674A2B768D1BFF618FE2F7DAF24321 /* AudioToolbox.framework in Frameworks */, - 3C76079F931B8D254646B65609456C1C /* CFNetwork.framework in Frameworks */, - 6F3AA29F68F856746B4055983C6BF793 /* CoreGraphics.framework in Frameworks */, - 307DC92332AA8387F0ED533660A7A2DF /* CoreLocation.framework in Frameworks */, - CF7A23F2E61E57A9F6E76E358E956306 /* Foundation.framework in Frameworks */, - 0153E7B72CC1F58001A1FB4CA726D5C8 /* QuartzCore.framework in Frameworks */, - F072D26ABA5162A0D5B098FC2773092E /* Security.framework in Frameworks */, - AFC728CC114630A6E88C55D3423F5B35 /* StoreKit.framework in Frameworks */, - 2B08C89BCB6F8CDE246F90E71C343694 /* SystemConfiguration.framework in Frameworks */, + 2AD822A4C6DD9CA6D499CF6955198F4A /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8C45497CBD83A66C8FBF1289DF39CE3D /* Frameworks */ = { + 965ABA69AF689352C7AFAA4D831B30F1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2AD822A4C6DD9CA6D499CF6955198F4A /* Foundation.framework in Frameworks */, + 65E631D06E8973BA219DED288619559C /* Foundation.framework in Frameworks */, + CB29E081C9F6BF7054D06FC63D3953F2 /* QuartzCore.framework in Frameworks */, + 46D4BDDE8AB87A9CAD5D625F9CEF64DE /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - E7338E47FCC5A3CEF6E7565747FBD02C /* Frameworks */ = { + 9BE8C57594B15EEAA567F911A1293696 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 809B3785EA647CC67C699D8FEBB7461F /* Foundation.framework in Frameworks */, - 2802861D952EDBB98D3D81BAFDEBC041 /* QuartzCore.framework in Frameworks */, - 0BE6F472A9E14DECF3CC4B2AC719A807 /* UIKit.framework in Frameworks */, + A34DE9EF9C14F3296963A55768201841 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FBED2FAC8FC38B52BADDF50DED237051 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8499099175A198098F7496115B1DBD82 /* AudioToolbox.framework in Frameworks */, + 06FAB48E1E97530EA1D69FEE81B6B4FB /* CFNetwork.framework in Frameworks */, + 1A172F3623296435FBE39CA9DECBE299 /* CoreGraphics.framework in Frameworks */, + 6CF96D28E0D903FE5CECE870E959A7E3 /* CoreLocation.framework in Frameworks */, + 0F238050CCA06FB31AC3B53D1853A928 /* Foundation.framework in Frameworks */, + 95910634F7060495109982E7841E381A /* QuartzCore.framework in Frameworks */, + 27EAF05CC70083B9C74622C4C3F1F50B /* Security.framework in Frameworks */, + 268BFCB72A6AC4C466ACE860992F00C3 /* StoreKit.framework in Frameworks */, + 4E72C8BDEF684D123F3726A401ABCB36 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1871510231A7BF05CD4E00BA2C29A9C6 /* UIKit */ = { + 02DC75DFC7A4F83A34208DF25798A845 /* Reachability */ = { isa = PBXGroup; children = ( - FF7D93CF68584FFA70133B196EFB59F0 /* AFNetworkActivityIndicatorManager.h */, - 41A069B9AF3C8F611F76F20326AB035E /* AFNetworkActivityIndicatorManager.m */, - C61F3C1B791FFC9E7C5ADE180684470E /* UIActivityIndicatorView+AFNetworking.h */, - 1A207317F4EF6A614BE7034DE5F3A9E9 /* UIActivityIndicatorView+AFNetworking.m */, - 70A550454DC97E123E16BD631BDAD95C /* UIAlertView+AFNetworking.h */, - 512576519C7D60E088B9946D68C2893B /* UIAlertView+AFNetworking.m */, - 39A27D94EB41AD237B4F4E722852F9B6 /* UIButton+AFNetworking.h */, - FB46E4BC6BAC7355C701C95033BF325F /* UIButton+AFNetworking.m */, - E58FC77B8AC9BB8CB123B072D0E7AD2F /* UIImage+AFNetworking.h */, - 285AE108BCA0C7BACB4D927E8D1F8665 /* UIImageView+AFNetworking.h */, - FC9971E4E70ED25A33B370FAEA88A589 /* UIImageView+AFNetworking.m */, - 4DDA8143D2C09DF9986817461C4DD498 /* UIKit+AFNetworking.h */, - 814B6E4C1E3AEC20607C2A43AADF132B /* UIProgressView+AFNetworking.h */, - A72A7753E28C0B037F3759A7CB7DC9CB /* UIProgressView+AFNetworking.m */, - A6EBD847848C1C85F961433CE4F102A3 /* UIRefreshControl+AFNetworking.h */, - 8F189D28F4E7A0D39192B35D412642BA /* UIRefreshControl+AFNetworking.m */, - 1E08E20DF9125F146349FA765648DCA3 /* UIWebView+AFNetworking.h */, - FA74881F0C5E486DA753412D3B49338C /* UIWebView+AFNetworking.m */, + FA1957D2FB6FAD2FDD777C1424EE93F5 /* AFNetworkReachabilityManager.h */, + 358076BF1FC2383D78542D2EFF4939ED /* AFNetworkReachabilityManager.m */, ); - name = UIKit; + name = Reachability; sourceTree = ""; }; - 343CC481EBFBA9EC3DCCBF88496BCB7E /* NSURLConnection */ = { + 0A35C5F1675B9377306ECAC57658FE06 /* Support Files */ = { isa = PBXGroup; children = ( - A6F04B61FAF09E9538B3AF6FD9536DC4 /* AFHTTPRequestOperation.h */, - 994A5F73DF6BF6840DED92DDE2C12AC6 /* AFHTTPRequestOperation.m */, - 202A2922E63631CD23C09430889F7248 /* AFHTTPRequestOperationManager.h */, - 7C8DC7559A9E804216A7455574ACC2FA /* AFHTTPRequestOperationManager.m */, - 8A9EB6D7E4926B7E034816F709F1F518 /* AFURLConnectionOperation.h */, - E6F16A936B103DF9237ED50EBF4D8631 /* AFURLConnectionOperation.m */, + 07DD486CA0D467F3E4B0FA3AFB78B671 /* ContextMenu.iOS.xcconfig */, + DD2C8034413D050CB11771F958F248F1 /* ContextMenu.iOS-Private.xcconfig */, + 56B759F1D8C8CB47D727B586BB4AC069 /* ContextMenu.iOS-dummy.m */, + 81E5DF449A484A01D0D5D2D79856C74B /* ContextMenu.iOS-prefix.pch */, ); - name = NSURLConnection; + name = "Support Files"; + path = "../Target Support Files/ContextMenu.iOS"; sourceTree = ""; }; - 44B2BD7E350527D031DAEA225965006A /* Reachability */ = { + 0D702677028DE77B5F98109E6E9A03F7 /* NSURLSession */ = { isa = PBXGroup; children = ( - 411AD8B8B53F6CAF9198BBBBB07AC033 /* AFNetworkReachabilityManager.h */, - A2C302E4C6109CA0666CE25D782C9766 /* AFNetworkReachabilityManager.m */, + 6AAB30B0C1218AFFC57C5B5A58F1925C /* AFHTTPSessionManager.h */, + 5216F571A9C35B49AC646497DEBD2B3C /* AFHTTPSessionManager.m */, + 1039D733B7402E51965445AD5B5DCB98 /* AFURLSessionManager.h */, + A055D518CCF1B206751FCEC2DE32A701 /* AFURLSessionManager.m */, ); - name = Reachability; + name = NSURLSession; sourceTree = ""; }; - 4A3B2BF0C2CE1DB37AB68EDF92FD44AB /* Support Files */ = { + 1088A147F4A4DB5B1AB0A3782F770EF4 /* Support Files */ = { isa = PBXGroup; children = ( - FCA0B925A9AF72339A9B4292607E97C8 /* Parse.xcconfig */, - 4743EB53C73E4B52C1EC84395BD476F5 /* Parse-Private.xcconfig */, - 73DEF6839984D1F48ACE568B6EC2E5EF /* Parse-dummy.m */, - CC332C397ADA56AB76FB706A0ABF83E5 /* Parse-prefix.pch */, + 62BE8CADD4670ADEDF5FD8EF8072C87F /* pop.xcconfig */, + 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */, + 59B3FD41DEC22C5891C9B83C27BC25E0 /* pop-dummy.m */, + 2BA1448D29C364710AC0CCAC65063979 /* pop-prefix.pch */, ); name = "Support Files"; - path = "../Target Support Files/Parse"; + path = "../Target Support Files/pop"; + sourceTree = ""; + }; + 200225903789300BB00A2889A4437CE8 /* Support Files */ = { + isa = PBXGroup; + children = ( + 41E4EF38F3F42973C09F8820315F75C3 /* Bolts.xcconfig */, + 5A12ABBF15A8F5506519823676F3C8DD /* Bolts-Private.xcconfig */, + 91FD3566B5AFA4DD010BBD80305BC28A /* Bolts-dummy.m */, + B2954F531D3634410AB8A04C01539733 /* Bolts-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/Bolts"; sourceTree = ""; }; - 58A31A01D078FCF8E66D5353FA341FA2 /* Resources */ = { + 23AE72B6B473935D6C17CA1B5CE6EBD0 /* Resources */ = { isa = PBXGroup; children = ( - 10C1CF41ACFAC3F0E71569AE1A84C121 /* en.lproj */, + 5ECDB4A3D81CD22761B3E657A9193AE7 /* en.lproj */, ); name = Resources; sourceTree = ""; }; - 70D08BD050FBEDBEF01649A778D854ED /* NSURLSession */ = { + 27C4DE13C26F320CD386E4DA6D6716B8 /* UIKit */ = { isa = PBXGroup; children = ( - 0F53F9E343FFBC0260E05A6277C25495 /* AFHTTPSessionManager.h */, - 51740A0EDDF3B04E8A46D98B3807D440 /* AFHTTPSessionManager.m */, - 2B6673C9F7E97CEA6C3B3B57C906C095 /* AFURLSessionManager.h */, - 5583C012407DD3D86BE591291FD5B40E /* AFURLSessionManager.m */, + FD9F0F4B22EEC61402D34AE9EEF30DD0 /* AFNetworkActivityIndicatorManager.h */, + F3F5E33F74D6853C5320405E72A25A99 /* AFNetworkActivityIndicatorManager.m */, + D43B8CFF328D2BE6C9755924B181CF2F /* UIActivityIndicatorView+AFNetworking.h */, + 9BA57A433E33E9125A8347D57D7F766F /* UIActivityIndicatorView+AFNetworking.m */, + C917E75AADCC6DB455A54504481914C6 /* UIAlertView+AFNetworking.h */, + CD1B49F66FFBB4AD6CCEC0A90A66D326 /* UIAlertView+AFNetworking.m */, + E504BFBB2DBF9126FAB2DC1F339CB325 /* UIButton+AFNetworking.h */, + C074D541BD181F718CABF5FB5728F620 /* UIButton+AFNetworking.m */, + 365EAFBED43EBA1E76B6777D42421642 /* UIImage+AFNetworking.h */, + D44289371FAC5C4BED0F2F71337214A6 /* UIImageView+AFNetworking.h */, + E2143F74B5AD9A40EA532F839BD3B314 /* UIImageView+AFNetworking.m */, + 58B5D2F2CD84279F74BE531861A83308 /* UIKit+AFNetworking.h */, + AA922A41DD3C8A6F91E02EF0F731F0AB /* UIProgressView+AFNetworking.h */, + B8678F4D5E8E1A277EAFCB398356B491 /* UIProgressView+AFNetworking.m */, + C40BCF6A4E2863E61431A31D979EE9C9 /* UIRefreshControl+AFNetworking.h */, + D9E009FDFD4D025A77485806D951F056 /* UIRefreshControl+AFNetworking.m */, + 0024E7BD94CF93AC26F575C1C8DDC77A /* UIWebView+AFNetworking.h */, + 1315EBF14A0D75438D37ED2C3FA79516 /* UIWebView+AFNetworking.m */, ); - name = NSURLSession; + name = UIKit; sourceTree = ""; }; - 748691C91C2E3A5C306BD96057F66CC9 /* Bolts */ = { + 2F8332C2B83A463D42D1B98C775DFC06 /* Tasks */ = { isa = PBXGroup; children = ( - FA527DA126D49BE2A84BEFE3B6068EF2 /* Support Files */, - 845B3317FB451DB091F4A240F9C6D658 /* Tasks */, + E23709D1E2B358163967F34AC4683834 /* BFCancellationToken.h */, + AC969BF0B09B32631651A85209580443 /* BFCancellationToken.m */, + 08A7DDB501049FA74B5AC43628EF32BA /* BFCancellationTokenRegistration.h */, + B18E4523B7A2D3BA68FE05BE72681E02 /* BFCancellationTokenRegistration.m */, + B319964A3771774ECF35609A331A9AC6 /* BFCancellationTokenSource.h */, + 6D8F3DA883848E2DCAD665B10531671C /* BFCancellationTokenSource.m */, + 90E284AD7A6A52AEEF7D84AD765A3548 /* BFDefines.h */, + E28AF701482179FE07EE17023210453F /* BFExecutor.h */, + A24FE0141387F910F17488671E600BA8 /* BFExecutor.m */, + D4C9535D0DCC9CEAF41CAB114CBAC573 /* BFTask.h */, + F182401E66857C7D4B875E79122BD830 /* BFTask.m */, + 698035C4932D84777E5EC71DFC658ECE /* BFTaskCompletionSource.h */, + 44E52571D995DF254E53AD007ED4859C /* BFTaskCompletionSource.m */, + E2CA6C46BBB76A49C80830DB49B9FFF5 /* Bolts.h */, + FDE3D8A4479D0EA4BAFB41AD9CF6FF64 /* Bolts.m */, + CF7F21D5332C89148FDF4E4644891872 /* BoltsVersion.h */, ); - path = Bolts; + name = Tasks; sourceTree = ""; }; - 7BD6D8170D87526BD20EC14D6EF61666 /* Security */ = { + 400B87487B883E2FBF3BA1A84CBD5001 /* Support Files */ = { isa = PBXGroup; children = ( - 52808B026D92DB8F0DCCBCA2EE24FEEF /* AFSecurityPolicy.h */, - D8CEAB9CDED9C3CA1445D6F3DAF05029 /* AFSecurityPolicy.m */, + D979F925569BC22D42FF30FE4C67B4E3 /* Parse.xcconfig */, + 976A55E7CE8D654A68FBED3175180C45 /* Parse-Private.xcconfig */, + F369CDC4FF93740544F25823CC584B90 /* Parse-dummy.m */, + 1912D51690BFB2430D2FC6F89935CD27 /* Parse-prefix.pch */, ); - name = Security; + name = "Support Files"; + path = "../Target Support Files/Parse"; sourceTree = ""; }; - 7DB346D0F39D3F0E887471402A8071AB = { + 4427CCC45CA8D857347960D5AA5A77C5 /* Pods */ = { isa = PBXGroup; children = ( - BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */, - EB57DDB3388FBC701046A1E93218737F /* Frameworks */, - 925A7ADD720C420997500F47DF7BAB59 /* Pods */, - CCA510CFBEA2D207524CDA0D73C3B561 /* Products */, - D2411A5FE7F7A004607BED49990C37F4 /* Targets Support Files */, + AE1FCC8648F4384498D2CF5B7F32DAAA /* AFNetworking */, + DDE689B6B09170B803B77F9EB078E1CC /* Bolts */, + B6564B7B05E0D234CDEE562117C5EBF9 /* ContextMenu.iOS */, + 979EFB6D9DB1886486B07494CC621CA9 /* Parse */, + DB950EF338A1419E0F336CF98E3D2AC9 /* ParseUI */, + E057C2EB9A740CE736968F80830BAC47 /* pop */, ); + name = Pods; sourceTree = ""; }; - 845B3317FB451DB091F4A240F9C6D658 /* Tasks */ = { + 560364AB93E50BBEF4B33AC759A5F066 /* NSURLConnection */ = { isa = PBXGroup; children = ( - 754C6873E010FF768376E458C1EA6449 /* BFCancellationToken.h */, - 400935A9AE97EE38E7C59CBBD474FA32 /* BFCancellationToken.m */, - 0D7C31A8D9DC68245949CD79BD5AD586 /* BFCancellationTokenRegistration.h */, - AAAE696C714BEA1FD2CB7F7E37484204 /* BFCancellationTokenRegistration.m */, - 27E3589A502DA67E5F75BFDD5AB13E57 /* BFCancellationTokenSource.h */, - CEB9D45B957B79F1459ABF1E81F01530 /* BFCancellationTokenSource.m */, - 73E9B12D704E302D9DAC9FDE4C8D60AC /* BFDefines.h */, - 3DB8817B308E2B46E23993461AC18E54 /* BFExecutor.h */, - 98C44F60AA929307291A20DC790BFEB1 /* BFExecutor.m */, - 06588E20E049A2E98B815265D06086EE /* BFTask.h */, - CF335AC7E0E6EE3DD820467124C2102D /* BFTask.m */, - 8EC8E900100484763798A1C6338E9061 /* BFTaskCompletionSource.h */, - 5038524C4AA89B3EC607E5B47A706CCA /* BFTaskCompletionSource.m */, - 58143C3358B762BB4DC15795BD82B8B9 /* Bolts.h */, - 94E051272A8A44AC3C51C58EABF97D9F /* Bolts.m */, - 9AF96B14E5200CC44AFA17F564FAFCE9 /* BoltsVersion.h */, + E6C8C116B56F8D1B7AB62768527EC072 /* AFHTTPRequestOperation.h */, + 089FEED162CE81FFDB1F2F722CC53B19 /* AFHTTPRequestOperation.m */, + E72971E8203922C334379D6EF46D2C3A /* AFHTTPRequestOperationManager.h */, + 2E0AAD20A6FEA44B0CFB6CF47B721809 /* AFHTTPRequestOperationManager.m */, + C5CBEAEA564EF7FD09CFE53392CC6424 /* AFURLConnectionOperation.h */, + BEAFF13EAEE726C139773BE3860F7AB6 /* AFURLConnectionOperation.m */, ); - name = Tasks; + name = NSURLConnection; sourceTree = ""; }; - 925A7ADD720C420997500F47DF7BAB59 /* Pods */ = { + 5D2BF76AAFCF51667EA94C561B87B388 /* Support Files */ = { isa = PBXGroup; children = ( - 99B74290A3DB42BACD4580083D40BFCA /* AFNetworking */, - 748691C91C2E3A5C306BD96057F66CC9 /* Bolts */, - EE85D36C044E4BB468AE05B65485762A /* ContextMenu.iOS */, - B9C0326EEBE4AB593BEB84C616215B18 /* Parse */, - 97CCAC9C8256E53F277AEF405699EAE6 /* pop */, + 713723DAE7A2D766F7D8E9BB88E5E4CA /* ParseUI.xcconfig */, + C213AD7370FD716E3010F4CCDE4BE681 /* ParseUI-Private.xcconfig */, + 91C2410DA547032FC3DC2AE3C259C844 /* ParseUI-dummy.m */, + EA5338250BCA80817AD4E8F779E085E1 /* ParseUI-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/ParseUI"; + sourceTree = ""; + }; + 789559A54696F4710DBD7111F2EE0FAA /* Support Files */ = { + isa = PBXGroup; + children = ( + C9DD09269903183CC67B8C5718D9BE7F /* AFNetworking.xcconfig */, + C157642B668892E40497C6E7E543A2FC /* AFNetworking-Private.xcconfig */, + 02410F25AB700FDE2DC3E940E8F641D3 /* AFNetworking-dummy.m */, + 212C53C992FAFCD6E80C8674CA34B074 /* AFNetworking-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/AFNetworking"; + sourceTree = ""; + }; + 7DB346D0F39D3F0E887471402A8071AB = { + isa = PBXGroup; + children = ( + BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */, + EB57DDB3388FBC701046A1E93218737F /* Frameworks */, + 4427CCC45CA8D857347960D5AA5A77C5 /* Pods */, + CCA510CFBEA2D207524CDA0D73C3B561 /* Products */, + D2411A5FE7F7A004607BED49990C37F4 /* Targets Support Files */, ); - name = Pods; sourceTree = ""; }; 952EEBFAF8F7E620423C9F156F25A506 /* Pods */ = { @@ -1247,16 +1441,511 @@ children = ( 15A529C27057E4A57D259CBC6E6CE49C /* Pods-acknowledgements.markdown */, BF59BC15D23E1E1912C8F334E7236813 /* Pods-acknowledgements.plist */, - A5849314580BC3F82E4A799104E87FE3 /* Pods-dummy.m */, + 4F7FEA8114B1934AF71EEAF5B655B908 /* Pods-dummy.m */, 641AE05DD55E5E6AC1590CD7B4A18F97 /* Pods-resources.sh */, - 46A44DBE60FFDA06D7726DD3091A0E47 /* Pods.debug.xcconfig */, - 554179C2DB1E42B74E86A13E79A45730 /* Pods.release.xcconfig */, + 88941524D385690CBCF300DD140DF00E /* Pods.debug.xcconfig */, + 2940BC6B2FD4089D74072136047C2FEE /* Pods.release.xcconfig */, ); name = Pods; path = "Target Support Files/Pods"; sourceTree = ""; }; - 97CCAC9C8256E53F277AEF405699EAE6 /* pop */ = { + 979EFB6D9DB1886486B07494CC621CA9 /* Parse */ = { + isa = PBXGroup; + children = ( + F2457C51DB8F154FDFD167B5690FC35C /* BFTask+Private.h */, + 348553BBE97419579F9F55AA50C5F99B /* BFTask+Private.m */, + 895CF8E6F7A84B12553BCA9E79EC79C3 /* PFACL.h */, + 891A2E0E0FA20C1648F5C841F3E564AD /* PFACL.m */, + AE63CC96E753C252BF25110D864F48EF /* PFACLPrivate.h */, + C61F7888A611C849888C8333EB005699 /* PFACLState.h */, + 024F688442FF537808B2B1F23FD1E740 /* PFACLState.m */, + 3C3D77BC909D77D1BFD9EB010608B1E4 /* PFACLState_Private.h */, + A543A68D1F635C787AFF440419B704A2 /* PFAlertView.h */, + 4F6C88082787B2C81249E9AC5C14B411 /* PFAlertView.m */, + 35F2BD9CCE69BA4DEBCD6F1FA72E072A /* PFAnalytics.h */, + 031E9E0D8D5FFE61CA69EBB13DFF940B /* PFAnalytics.m */, + A08F05F414FDAD6FE00523BCDB90BE7B /* PFAnalyticsController.h */, + 7DE095F15D0DA44B27DE6F3F40B748C5 /* PFAnalyticsController.m */, + D74E2E4235E9688B273C0714402DEADB /* PFAnalyticsUtilities.h */, + C1D8402E147FF6607379D3B631C593FB /* PFAnalyticsUtilities.m */, + 8B17307D8D5E9068BF81147ED3B8E9B3 /* PFAnalytics_Private.h */, + 8D391B4B9A0CB9FD3E2A0BF899903190 /* PFAnonymousAuthenticationProvider.h */, + 9EDD8E08548221489BFE965864FB3566 /* PFAnonymousAuthenticationProvider.m */, + A1C86812C1E16F9AE6E6995B0510FCF5 /* PFAnonymousUtils.h */, + 25C2F29D6B6FBDBAA33D8593E65EC348 /* PFAnonymousUtils.m */, + C2A808722282E883FC6468CC1082F40D /* PFAnonymousUtils_Private.h */, + B5076516C4CA52DBE232087A86EF876A /* PFApplication.h */, + CB6B147735D1F716FC2CE4332F65D798 /* PFApplication.m */, + A8C983DB75FAE0BEF68EC8FAD134A4A8 /* PFAssert.h */, + 17A3AD5BCF18F3E0478C884A2B764C4B /* PFAsyncTaskQueue.h */, + 511824AA2AD76251DC45B56662AA4DA7 /* PFAsyncTaskQueue.m */, + E6B87160188F7023D2B49F9B91DBAB94 /* PFBase64Encoder.h */, + CDB5EF0EC43B47E829CDC47DBC09A531 /* PFBase64Encoder.m */, + 6B7B6DB35230E2855BBD62DA92FC70BE /* PFBaseState.h */, + 8EE2B15BEF4BF5D9E73B0F8A28BFE3AF /* PFBaseState.m */, + D16A398DDB303A767A2CF933083655C3 /* PFCachedQueryController.h */, + 777C43E3AA95750283ADAA2717A0595D /* PFCachedQueryController.m */, + B1C6CB67201095492AA37DBE54C06E7D /* PFCategoryLoader.h */, + DD82088840AAB58D0F5243C0230D17B8 /* PFCategoryLoader.m */, + 84EE46E65A1FBB043B8876D673FADFCA /* PFCloud.h */, + CB295B33B0FC530FD77C52FEB400203E /* PFCloud.m */, + 22672E7A70EC530B20C26F2C140E29B2 /* PFCloudCodeController.h */, + 5F0070F7D9C1BBF95C7F9EDB863AD555 /* PFCloudCodeController.m */, + AAF064AE7675931E4027B1B48FAC0E0E /* PFCommandCache.h */, + 6EA17DCC97E135EB8F1461B291A14122 /* PFCommandCache.m */, + 66EBD08EBD02C88CCDFE2505E222DAD4 /* PFCommandCache_Private.h */, + D497EB0E3C5055E7FFF959587818764C /* PFCommandResult.h */, + D39AAA20779A11314DE3292353142A99 /* PFCommandResult.m */, + BCF178329E80A7C9788F12D35E84DE11 /* PFCommandRunning.h */, + 99C45BAC8E657D5D25B91CF13FDC4C8C /* PFCommandRunning.m */, + EB8DC8124CEE001FB0DCB7332A0E4F5F /* PFCommandRunningConstants.h */, + 05953FCDA42C0E7323C7F9B5AB886535 /* PFCommandRunningConstants.m */, + 70AE4459357403A9AA0B61959202F9A7 /* PFCommandURLRequestConstructor.h */, + 8261B575C444CC37A75DDD38033FCDD3 /* PFCommandURLRequestConstructor.m */, + 87D5C76598D7EF5558AB88A80F0ADCF6 /* PFConfig.h */, + A5170E55DE35501B4A713A17711AA0A0 /* PFConfig.m */, + 51E4264B938F3B426D4673C5853B2500 /* PFConfigController.h */, + A57B413BD6BA1EA23004CBF88974B886 /* PFConfigController.m */, + 860AA407C8EE7F2BE1FF80F5F2C2A67C /* PFConfig_Private.h */, + 8BABC47EC65B9265C3909474DE8574C9 /* PFConstants.h */, + 68500105927A08A48A3DA8C59A9B2E12 /* PFConstants.m */, + 2713B9DB4119C31C77089DFEF6EE5B0E /* PFCoreDataProvider.h */, + F9B9BF93B8FEFA346B7D92DBA659A391 /* PFCoreManager.h */, + 9780F90C830BDBFB169674AFE0921D8C /* PFCoreManager.m */, + C11D9DEA5457F8EBBADB980FD16BFF7B /* PFCurrentConfigController.h */, + 863525FC6AF9553E708425B9E1FBBBE3 /* PFCurrentConfigController.m */, + 752312E41E6828D9DFD974503E6DA356 /* PFCurrentInstallationController.h */, + B1D36F734A33A907E9958F6778F6D9B1 /* PFCurrentInstallationController.m */, + 035328EF0D2E9A7C6F011700B6486C4B /* PFCurrentObjectControlling.h */, + C5ADC6D84457794AAF2D20A45BAD22C5 /* PFCurrentUserController.h */, + 190972B3389C83F8279C6D8F35289902 /* PFCurrentUserController.m */, + 17A3A025CC5669EAB17537171EB530B4 /* PFDataProvider.h */, + 11C9D5CD5B0EBCA52D876E7FBB58F435 /* PFDateFormatter.h */, + EEF3C9636DEAF164594CC80C9C6F8A3F /* PFDateFormatter.m */, + 415E520ADA42019A24142D17486874BE /* PFDecoder.h */, + 1A2F0A20C55B0387272AD66520D13A5C /* PFDecoder.m */, + 5A5DE351A0BF7F1BFDD329A0BA815E81 /* PFDefaultACLController.h */, + 110EB87EF49E8CF2B18E11692AC1E903 /* PFDefaultACLController.m */, + 9BF42B9B3BCA6AC0E4C7A5C4A8D56C76 /* PFDevice.h */, + 8277E669C14D90814D85CAF0D08745D7 /* PFDevice.m */, + 1F447819CD0C3DF808D6946A6364F969 /* PFEncoder.h */, + 0A0A214D3D8D8170F77B8631024D14E1 /* PFEncoder.m */, + 1C55517F4B7361A3891B563478721DED /* PFErrorUtilities.h */, + B7F9DB4E614C6F9EFC52811652A1D27F /* PFErrorUtilities.m */, + 96B412F3169F62969DAC6A85BFBE68F4 /* PFEventuallyPin.h */, + C69C27BDBB8B1E63677A91477C52FDA5 /* PFEventuallyPin.m */, + BED41B8E7F85EE8E67A39865C037C805 /* PFEventuallyQueue.h */, + C0CF8725DD1DD49BE8D6A0907238EA04 /* PFEventuallyQueue.m */, + E873F760B193DFBEF81E19B36B33FCED /* PFEventuallyQueue_Private.h */, + 9377FA8A24B121D60FE9AA1745B38DC4 /* PFFieldOperation.h */, + EB19AF401F51648EFC25CAA336AF77DA /* PFFieldOperation.m */, + 314F14CB5AC1E3119F923E7D73FD2F55 /* PFFieldOperationDecoder.h */, + 877583FCE729451EBA709DD2F69EC026 /* PFFieldOperationDecoder.m */, + 9A85625E51C91983512393262199899C /* PFFile.h */, + 3AF83C8DCC1E7EFC3B79460BFA1DE1C9 /* PFFile.m */, + 8B8B01C970E96BD862FECF58F194D051 /* PFFileController.h */, + 2FD4E699963B718746F80595602968BA /* PFFileController.m */, + DFC41E4010D852E3977AF17A221CF0CA /* PFFileDataStream.h */, + AAC3249989EA908FBA78700563472204 /* PFFileDataStream.m */, + 89362786CE0111AEDE7DA9FACAB648E7 /* PFFileManager.h */, + 8844A67AC930593786AECB0231747628 /* PFFileManager.m */, + 466D8E751494438DECF05B755061844C /* PFFileStagingController.h */, + A1A2A66F3FC79A3E2778CF485801E64C /* PFFileStagingController.m */, + 1D505F6BC2E75E018CC37E152B154653 /* PFFileState.h */, + 563F4B9FC46A7DD720D8945683D2129D /* PFFileState.m */, + AD697B984E89B4847323B087964A48EA /* PFFileState_Private.h */, + 948A8D3F019700F19148AF5DEF0F0F49 /* PFFile_Private.h */, + 62A507869EFBA5A9140C70CE67650D5F /* PFGeoPoint.h */, + 39673E55062D1B61E621B82E444AE6CA /* PFGeoPoint.m */, + DAC1022DF912D32448DE24E2472BD2EB /* PFGeoPointPrivate.h */, + C2055953D9AE502AA512CC756C8E07B8 /* PFHTTPRequest.h */, + F3FC1F5573A43949438409A8D53778C3 /* PFHTTPURLRequestConstructor.h */, + EEDB7E1475A81EE2F12373656077D160 /* PFHTTPURLRequestConstructor.m */, + BADE09B4EF587C0DCFC3F014B3DD1767 /* PFHash.h */, + 0B440A60956319D37497AA73807B5A30 /* PFHash.m */, + 7F101824BC10648B2A569BDBA9C23BE5 /* PFInstallation.h */, + 2FF4FE0BB509523AA3AB48C24B04D2AD /* PFInstallation.m */, + F846ACF033FD69EF28381C488F0B8AA0 /* PFInstallationConstants.h */, + 16BA4C30B79BFCF3F4A3AE316FC70C8F /* PFInstallationConstants.m */, + E615EEC282CDCEE0D432D51BEA8F872B /* PFInstallationController.h */, + 6D4152BFBEE6D5EE6216460618A0BFAC /* PFInstallationController.m */, + 7055666DC363C604BD87260B48EA2D42 /* PFInstallationIdentifierStore.h */, + E74884D5A2FE748F09D5B9232A56C7CE /* PFInstallationIdentifierStore.m */, + 0691E15B84DC22B58B24454A662AF44F /* PFInstallationIdentifierStore_Private.h */, + EDBB5CF4F1A249E933B2469709D9F8DD /* PFInstallationPrivate.h */, + 83A7946D9B9D56684542F8D584D20370 /* PFInternalUtils.h */, + AA2D73F6B555F385C9E33E7F424BBFE5 /* PFInternalUtils.m */, + D96C8C02AE822A3F03B68FAA6D594497 /* PFJSONSerialization.h */, + 6CF33435C91D40E4A5913AAFD0EDE463 /* PFJSONSerialization.m */, + 00513F8B5C023D9B6A67A40068570F19 /* PFKeyValueCache.h */, + 57D6481216B3368FC95D692879E27822 /* PFKeyValueCache.m */, + 6744DE3000BEEB7DA4D7DAB0E9D6BB57 /* PFKeyValueCache_Private.h */, + F820E3F0707C3FCB027CE5B4848D8564 /* PFKeychainStore.h */, + AD6BEE4FF1F262959DD604F6DFDBAE3B /* PFKeychainStore.m */, + 59EE9ABCCF20271B1A4D97DE22AA8DA7 /* PFLocationManager.h */, + CC4DDA9182F4F5C704598B6E722CDC50 /* PFLocationManager.m */, + 86CE1FC6E16C4981CCAB4D92ECBFB7B4 /* PFLogger.h */, + 3191215D0811BF0108D28AC1F82B3739 /* PFLogger.m */, + 4E9B0790246604518A313DFB192E257C /* PFLogging.h */, + 08DF92C3B8A5DF531A37052EE2D36BA2 /* PFMacros.h */, + 732EEF0236374C25C56BB5C469D842CB /* PFMultiProcessFileLock.h */, + F0CC09558A010C10AAC9F4CD4C53AD04 /* PFMultiProcessFileLock.m */, + A8F222054463224431341AD45804A6AF /* PFMultiProcessFileLockController.h */, + 05E01E38D82A4797E14C9CE9355C3F23 /* PFMultiProcessFileLockController.m */, + 9D0C2EFD1475837A15B4834D37F70DCA /* PFMulticastDelegate.h */, + BF2B0A2A499B1873CEA684566E8B5487 /* PFMulticastDelegate.m */, + DAC0B4DB266A15A3A61A62142BDA7069 /* PFMutableACLState.h */, + F657AD9C72FE5B432F841B53493D1253 /* PFMutableACLState.m */, + 74B8114FC619CF23645359BCCE432DBC /* PFMutableFileState.h */, + 0BE6A6845F3586D10E5408C9FB591328 /* PFMutableFileState.m */, + CA749ACCAF73A8469072D11F78DA1FDA /* PFMutableObjectState.h */, + F25C9F58CFDC13B49DEA0CD5013B1F28 /* PFMutableObjectState.m */, + 8804B5C3B20BA33A62CE380BBCCC489C /* PFMutablePushState.h */, + B6CE6D85363B92C1CEFB2272C5148AFD /* PFMutablePushState.m */, + 053C8DC2F31DA21D6E7CC1C8B47B7E7D /* PFMutableQueryState.h */, + A544D2F0BE5B4B49B319A783BAC77F80 /* PFMutableQueryState.m */, + 70DB3EA0DDEFC1284BB14523B754EDA6 /* PFMutableRelationState.h */, + 8553BBD3BB32BA047968D8FCC0BB7A4A /* PFMutableRelationState.m */, + B84E7ADA66D7676BCB6F6E7FF2FD89EB /* PFMutableUserState.h */, + B1214E8947EB72FF3291E4600C97D58F /* PFMutableUserState.m */, + 0706E15293B087CF3BC18798F10E6F37 /* PFNetworkActivityIndicatorManager.h */, + E16AA8270CAF5EA08D00D8A1D14F2059 /* PFNetworkActivityIndicatorManager.m */, + 753E0E1AA4BBDE64D2AE0835F63D119F /* PFNetworkCommand.h */, + 4DC8B50782AEA44066CA5219CEC67A5F /* PFNullability.h */, + 2C343079DDD088139CD814C6470830F6 /* PFObject.h */, + 01AF5FDFA32CA58C779C40A40EA3D2AE /* PFObject.m */, + 585CC800D2685BF4E18ADBC41D9E73B1 /* PFObject+Subclass.h */, + A133BB30724BEF75ABB81AA509743A45 /* PFObjectBatchController.h */, + B63D2BB991AB59607701D89CDA8174A8 /* PFObjectBatchController.m */, + AF40A6B842E8FD9BC950FE00DC5B6F40 /* PFObjectConstants.h */, + 8015A60E5EC1992EE7F83FBCDBA181E4 /* PFObjectConstants.m */, + F03D0C596469A502C868EB32FEE7D020 /* PFObjectController.h */, + 062A3C8CA2C198CBC3F4184AE0DE01AB /* PFObjectController.m */, + C16B1F4CA93F9A1D3CD11DFF0FE20F8D /* PFObjectController_Private.h */, + 9DD7435FB2C6E16C60951E238B329F43 /* PFObjectControlling.h */, + F908ADAD5734EE4C1EA4466E7FE108C1 /* PFObjectEstimatedData.h */, + 6FAB614DE9EA103FF9C22D630ECA7C8A /* PFObjectEstimatedData.m */, + 2F9ABD34BEBC96F253CE102411DABDED /* PFObjectFileCoder.h */, + C8BC0FA6F2C382BF336FF4ECE47C192B /* PFObjectFileCoder.m */, + 4A3635CE479DD0FD03FB5589A75B62EC /* PFObjectFileCodingLogic.h */, + 63FEAF34522E76198D04B10565E8B1AB /* PFObjectFileCodingLogic.m */, + 92551145ADCBD6A18D43AA2DA73CB21B /* PFObjectFilePersistenceController.h */, + 9DA3372CAB38E88F7791F2DE96931153 /* PFObjectFilePersistenceController.m */, + C04DABE57BA79040087CCBBA081B3616 /* PFObjectLocalIdStore.h */, + 60ADD91AA56B1BFB00B61936E49D3CFD /* PFObjectLocalIdStore.m */, + 6423CE3A0CE5B59A5BF4B47922AB73A5 /* PFObjectPrivate.h */, + CBC8CC7D9B59534667A62E84BF1C8B31 /* PFObjectState.h */, + E2B8566040F468B4AED32A8BCB27E12A /* PFObjectState.m */, + 8FF0B9CB696808B8C85640C9F7180BB8 /* PFObjectState_Private.h */, + 6D701A317BF6E49246153A00794CCB57 /* PFObjectSubclassInfo.h */, + 50FDC487ACDFDD8DDE2E916C1BC455FB /* PFObjectSubclassInfo.m */, + 573E7709FAFC9CAAA3DF68F8C7ECC087 /* PFObjectSubclassingController.h */, + 838239C2DC01EAB9AEE7B5553878AB6A /* PFObjectSubclassingController.m */, + 45637DE63711406B9BE1BECBB23B8EE0 /* PFObjectUtilities.h */, + 590E38452847AE815D9FF8AD36B38F82 /* PFObjectUtilities.m */, + A51A35330B4AB677C74A6579FC025B7C /* PFOfflineObjectController.h */, + 9825AD54796F54B9AE10955E1AFEDD77 /* PFOfflineObjectController.m */, + 99AC0E4FACC6E2558227DD51210B84EA /* PFOfflineQueryController.h */, + 63D62EED87FA9B033C640237039C5D71 /* PFOfflineQueryController.m */, + 29883E2F7FA2CA83E9313FBE44CEE849 /* PFOfflineQueryLogic.h */, + 06A372A2F9877D7182971EB1783DA977 /* PFOfflineQueryLogic.m */, + E31FED7E103689AA50C7795F772BDA23 /* PFOfflineStore.h */, + A421A4107F66CC195D55371620880A47 /* PFOfflineStore.m */, + CCE6D23A84D4E85A3CD15B802A7AE4CE /* PFOperationSet.h */, + 29704F78778234595067B1E9C61399BE /* PFOperationSet.m */, + 043843700614E5CF0208EF9E180A96B5 /* PFPaymentTransactionObserver.h */, + 4B0FB893863BB0FE866F5AA02F5D0360 /* PFPaymentTransactionObserver.m */, + 48D4D5780017286C543013DEDE63D651 /* PFPaymentTransactionObserver_Private.h */, + DBC82AC944CB7F585939AB9589D4F9B4 /* PFPin.h */, + 3585F7A481D939D1D1C3294775ACDBE7 /* PFPin.m */, + 6D3B7834060709F0758DAC799C640461 /* PFPinningEventuallyQueue.h */, + AD21854D02782DB6A5EB737BB86B1861 /* PFPinningEventuallyQueue.m */, + 3FC9896164A2A05D8D267241CD2C2615 /* PFPinningObjectStore.h */, + 5359BA092EAD4FA522BBB80FC27C145E /* PFPinningObjectStore.m */, + 8E40D034FA34D8F3FB9563D4D5DE2705 /* PFProduct.h */, + 53FB4903C13CD4B728E653A624D36228 /* PFProduct.m */, + 35D8F9A9CC00721366C770FD9E85A417 /* PFProduct+Private.h */, + F82C8E9DF011E7453EA40431821FB283 /* PFProductsRequestHandler.h */, + 75302811ECF5EDC235B0DB8B86291C2B /* PFProductsRequestHandler.m */, + 2248EAD3CAEF6EBEDAA0AC7AC52C51DF /* PFPropertyInfo.h */, + A631F9A0F687BDDBC873BA5813B8D674 /* PFPropertyInfo.m */, + E495F30B2C591E5AD9A1CC249901ACD2 /* PFPropertyInfo_Private.h */, + FF73455163A4B9C060A3B73C44658BB4 /* PFPropertyInfo_Runtime.h */, + AC7C43830B8D324B7BDFBFD2376A6F01 /* PFPropertyInfo_Runtime.m */, + 7126CE5A9A9393978939ABBD58F26EA9 /* PFPurchase.h */, + DC073136FD3869B2BB9A9D30587BE1DD /* PFPurchase.m */, + CF1F38521C14DBB0BD9845FBEBA5D9CC /* PFPurchaseController.h */, + 0A0D3F66C0F548DA826E162FB412704A /* PFPurchaseController.m */, + 775ECD6B6F3AADB8D98379981C1AD2A4 /* PFPush.h */, + B8FB92BD0F40B979678430FF43192D73 /* PFPush.m */, + C5603815F5CC7760F94208FF90B5488C /* PFPushChannelsController.h */, + 5E49C46EB05E82BE8654545920C832EB /* PFPushChannelsController.m */, + 0133FEB4B03FB6F08C08C7B83AE52ED3 /* PFPushController.h */, + DF6863C55207FC14F127AB7F8E41415A /* PFPushController.m */, + E8F241847217017ADBC4283C2F8F469A /* PFPushManager.h */, + F44B7D42437E31FF67AF695E26480E07 /* PFPushManager.m */, + 7B3E595A5E46C08CB6EDD2AECFC436E7 /* PFPushPrivate.h */, + EBA5F64F36074059AACC0B7DACE6B378 /* PFPushState.h */, + AECDAF19F1A734986EF3B6CEE0E5C285 /* PFPushState.m */, + D70110CA542D79C645FCD20E2C9674AB /* PFPushState_Private.h */, + 17DC80DA8AA3988FB60EAEFDA4C6CAC5 /* PFPushUtilities.h */, + EA487C07C0F804790F5993CF5E3C6D3F /* PFPushUtilities.m */, + B9680BBDD9701CD4FEFECC8FBFF038F0 /* PFQuery.h */, + 6CBECE1F342D08DEA6C849D4CA23FF5C /* PFQuery.m */, + 3DBC85FB02CFE6EE23007AB1EE43B774 /* PFQueryController.h */, + 843B775414C85A6B739A68A808587E0B /* PFQueryController.m */, + 3C6EC3EAC5F58685494656DAB9912EA7 /* PFQueryPrivate.h */, + 9F8925C71640AC9E18B09C2F32530257 /* PFQueryState.h */, + 506FFF3B464AAC43A21AD8404EDB0408 /* PFQueryState.m */, + 9E1183E2718E99F11B4E9C9C8A80C1AF /* PFQueryState_Private.h */, + 89E660FBA2FA907C548F83F17BA9CF56 /* PFQueryUtilities.h */, + 39FFEDFCBEA2D381B7572D62222BF55D /* PFQueryUtilities.m */, + C41C99E60696D54F31E9D4B990F0B0B3 /* PFRESTAnalyticsCommand.h */, + 1C41DBC222643AB47C9976935B1047D3 /* PFRESTAnalyticsCommand.m */, + 5F1B395CC49D380489BB0BFDABAC35D9 /* PFRESTCloudCommand.h */, + 19A96C3911D00F07330D94949348F1EE /* PFRESTCloudCommand.m */, + A81137DE4CAF25A53FED9F979106F428 /* PFRESTCommand.h */, + FAAB83BF02473BC0A2415881560312DB /* PFRESTCommand.m */, + B72B60C944C86664F4D05675D934FC68 /* PFRESTCommand_Private.h */, + C29500E205220EB8DB49F1C825FADA89 /* PFRESTConfigCommand.h */, + 6EA0F7203418529BD442E51DEA289F3E /* PFRESTConfigCommand.m */, + 86B7508FF3B989FEF4B30FE544B32B91 /* PFRESTFileCommand.h */, + F996BE0C38219298C5E7E92AF1A4B595 /* PFRESTFileCommand.m */, + A5E89E9F5A5618CE7965C7807CC99B95 /* PFRESTObjectBatchCommand.h */, + 27C2859683043CE13C206444451CA55D /* PFRESTObjectBatchCommand.m */, + AEEB033EF7B91BE4441AF7756D696170 /* PFRESTObjectCommand.h */, + D7CBDA2EC1FB8FB11CC6A2C5C9808D47 /* PFRESTObjectCommand.m */, + 7E80BE5758F379DA9001B14AF95B3C8B /* PFRESTPushCommand.h */, + 159D21FB91947A9EBAD9A6D923A0E579 /* PFRESTPushCommand.m */, + 35F8D658E839BECDFF6BB8B4BC6CCE2D /* PFRESTQueryCommand.h */, + 5B131657B4AE8F0B2C6E0A0C5EA11C6E /* PFRESTQueryCommand.m */, + A026613DFF149D8BD7D37DDB26152A35 /* PFRESTSessionCommand.h */, + 6BF00A7674A2E0DCC20BFA18BCD89098 /* PFRESTSessionCommand.m */, + 3BB229E81638C48D768ACFA74D97E7E4 /* PFRESTUserCommand.h */, + 331270F5C910E5D29DEFABA0DA889E54 /* PFRESTUserCommand.m */, + 42416DC02ED2707B15870496281BE361 /* PFReachability.h */, + 3B19DBC177333992D2D0D2D98EB6BA58 /* PFReachability.m */, + 218C17FDFAF32433D839F97FF17B2F62 /* PFRelation.h */, + 5D0D627CB39CA6EDBC298591F7FB9D15 /* PFRelation.m */, + 5501D5BA77001B3A319125F589DE4774 /* PFRelationPrivate.h */, + DD64D76CC193A68DABCF84C619EFCFC8 /* PFRelationState.h */, + 0E987F26F4B8054102531C64F176F982 /* PFRelationState.m */, + 57C18DD90130326F25EB38A9F343D5B5 /* PFRelationState_Private.h */, + BFA480ECE7F710752C7409F5C380B0F8 /* PFRole.h */, + 9761E4B9A3217B85F0615BE7D41F1CB0 /* PFRole.m */, + 1A40A4CAE6145F41C05AA25BD5CA9BD9 /* PFSQLiteDatabase.h */, + EED19F37D13868499C43F13264741ADA /* PFSQLiteDatabase.m */, + 6131294FCF882C880A8DAC44B48846EF /* PFSQLiteDatabaseController.h */, + 4A7EEF110C12FC52BD3E497ADDEF6E48 /* PFSQLiteDatabaseController.m */, + B99C240F89A7BC2E76B71472745234BA /* PFSQLiteDatabaseResult.h */, + C235A6B7A110CC5F4093F80159287E17 /* PFSQLiteDatabaseResult.m */, + C9F6E5345A39FC5550216E4F65A976B0 /* PFSQLiteDatabase_Private.h */, + 060DB4FD225A0238252576BE01EEF381 /* PFSQLiteStatement.h */, + 36204B280B4F34FB73981677EC64B941 /* PFSQLiteStatement.m */, + 5D78EE0601B6C0565B9C30B04EF23630 /* PFSession.h */, + EEC0387E8F35C7BADBD1B4D6A482702D /* PFSession.m */, + 50A3A1846FA5A0CC07A927EBC49B5BF2 /* PFSessionController.h */, + 470D6445B0D70D789438D349CC071D71 /* PFSessionController.m */, + 505C7EAE502AC992E9273C10AEFCC86D /* PFSessionUtilities.h */, + 747ED87BDA0CFC263BA40D355C825B04 /* PFSessionUtilities.m */, + CB50B697271E10AC0A2FFC3D43C3AD6D /* PFSession_Private.h */, + AF2FAD7A53F3AACF9B492617ABD3B62F /* PFSubclassing.h */, + 024EDBAD6DEA89979FB7FA48DF6FD2E1 /* PFTaskQueue.h */, + 8896894278B01270F7BDA51E345AEE3A /* PFTaskQueue.m */, + 34E2D0613E3152D0F6D3B2C1F125895C /* PFThreadsafety.h */, + D31C147B6E9BBE54DE19804E1F7CC396 /* PFThreadsafety.m */, + FE3AA7D1FB50A9011DE1F2F4F8986498 /* PFURLConstructor.h */, + CC980D88098DADD0C68CCE0CC413730A /* PFURLConstructor.m */, + 7017E1904439F48F0CC39653841838D9 /* PFURLSession.h */, + 31EF40A5583C282323AF183A3C383CBE /* PFURLSession.m */, + 875608FCABF08485CA5E0DB7D13A53FE /* PFURLSessionCommandRunner.h */, + 8258E5C6287CE05ECE4DBE3A83508112 /* PFURLSessionCommandRunner.m */, + D292B318B83D8D026CD2FAAAB59A62D9 /* PFURLSessionCommandRunner_Private.h */, + 9E645516AFC0CAD5C08101D5F844874F /* PFURLSessionDataTaskDelegate.h */, + 3841F19677B4987758E47C8053644CD1 /* PFURLSessionDataTaskDelegate.m */, + 2FEDA810326DCCCBD587DEF33586F24C /* PFURLSessionDataTaskDelegate_Private.h */, + 270B41DE1EE1C3B5391246CDAED4C8BE /* PFURLSessionFileDownloadTaskDelegate.h */, + 4B5B237502D9B0D2DDFB52EE72716703 /* PFURLSessionFileDownloadTaskDelegate.m */, + 96D3C7353F23912FD706CABC336D4D2E /* PFURLSessionJSONDataTaskDelegate.h */, + EF879D6FEC35876A57F1E379EA8F1BEA /* PFURLSessionJSONDataTaskDelegate.m */, + F3C4D6B4BF5063C2EC4B6F8862998D93 /* PFURLSessionUploadTaskDelegate.h */, + D52EE0139EA03EDDE83AA9D9685536FB /* PFURLSessionUploadTaskDelegate.m */, + AD362A7EBE3D2E2936C281C50AC04997 /* PFURLSession_Private.h */, + DC8B8475B2B05D335E837929C3ABB2AD /* PFUser.h */, + 6DB47428B78601AEE33C5C5D52E2D994 /* PFUser.m */, + 7C5FC55392104FEA040D1DDC37429A8C /* PFUserAuthenticationController.h */, + 187E6237B057376167C9530E9E3D2597 /* PFUserAuthenticationController.m */, + 4D9FF040FF41C3E677D9AE345094667B /* PFUserAuthenticationDelegate.h */, + A8D02A717544E8E472DDB654462BA93B /* PFUserConstants.h */, + 0835AF0C620B80377CFA5F0070B6F2A8 /* PFUserConstants.m */, + A72EE5253DC8D7B55D95796E6F4F6DD3 /* PFUserController.h */, + 973D3E8805C0C339DAA7877098A99A7E /* PFUserController.m */, + 5FA9B2ECC9A26394B543D0F42751F2B3 /* PFUserFileCodingLogic.h */, + E04C49F5564B931B972E6F826A732529 /* PFUserFileCodingLogic.m */, + 6B50558B71D8208975C6283BE61E816D /* PFUserPrivate.h */, + 0D9C3B80FDA98CB3B3C80A70441B019C /* PFUserState.h */, + 28F300166004C87461905D9822D4C136 /* PFUserState.m */, + 5C8045DBF84B4C9FAE5F9493DEF7990E /* PFUserState_Private.h */, + 9AEFA60D137098ACED4615C88DBA7D17 /* PFWeakValue.h */, + 2ECBBFC9244A3F50EA402F166DEB6DCA /* PFWeakValue.m */, + E557ABF7F7687DC7DFF115D7F62AEDA5 /* Parse.h */, + 7C385EA5C279B003F8C215ED4163B769 /* Parse.m */, + 4D23A382F14DB50C5CF89F62A1401FFD /* ParseInternal.h */, + 58D592B48830284011209E1663E7D733 /* ParseManager.h */, + 09293FA9DE2829C01FD1BC90B6481E0C /* ParseManager.m */, + 005D86B592A4BA2B3547363ECF47A177 /* ParseModule.h */, + 28D60E52FD4E440EA2F1B080932410DE /* ParseModule.m */, + 01D98518A65B6A9D496DAB55A24824E7 /* Parse_Private.h */, + 23AE72B6B473935D6C17CA1B5CE6EBD0 /* Resources */, + 400B87487B883E2FBF3BA1A84CBD5001 /* Support Files */, + ); + path = Parse; + sourceTree = ""; + }; + 982E1CE8B0E4B7E0E0791F1618606C43 /* Serialization */ = { + isa = PBXGroup; + children = ( + DBD6939AC0C49B37416ADF296729C43E /* AFURLRequestSerialization.h */, + F1CD895FE6B420EB0729480BD79BE4E3 /* AFURLRequestSerialization.m */, + 041725EB6A05B1CEEF10F1C68D2B4E1C /* AFURLResponseSerialization.h */, + 26F7C6740719BEC436C7CD3912C491A4 /* AFURLResponseSerialization.m */, + ); + name = Serialization; + sourceTree = ""; + }; + AE1FCC8648F4384498D2CF5B7F32DAAA /* AFNetworking */ = { + isa = PBXGroup; + children = ( + 0AED3FD61E1EF7915955E1D7600608EB /* AFNetworking.h */, + 560364AB93E50BBEF4B33AC759A5F066 /* NSURLConnection */, + 0D702677028DE77B5F98109E6E9A03F7 /* NSURLSession */, + 02DC75DFC7A4F83A34208DF25798A845 /* Reachability */, + BA60ADEBAE4F73CFB407D5F2B66F2BE4 /* Security */, + 982E1CE8B0E4B7E0E0791F1618606C43 /* Serialization */, + 789559A54696F4710DBD7111F2EE0FAA /* Support Files */, + 27C4DE13C26F320CD386E4DA6D6716B8 /* UIKit */, + ); + path = AFNetworking; + sourceTree = ""; + }; + B6564B7B05E0D234CDEE562117C5EBF9 /* ContextMenu.iOS */ = { + isa = PBXGroup; + children = ( + EFF1793AB041ED2DA9362386ECE91641 /* UIView+YALConstraints.h */, + C398F4947CB112102A0ADF8368272495 /* UIView+YALConstraints.m */, + 526FB5D06EEAEC04BB51ADED7679CF69 /* YALContextMenuCell.h */, + 37763F17F64B25496F9259C6C59F7CB8 /* YALContextMenuTableView.h */, + 3827F868B3F08C9E6CA5CFEEE3C83EED /* YALContextMenuTableView.m */, + 0A35C5F1675B9377306ECAC57658FE06 /* Support Files */, + ); + path = ContextMenu.iOS; + sourceTree = ""; + }; + BA60ADEBAE4F73CFB407D5F2B66F2BE4 /* Security */ = { + isa = PBXGroup; + children = ( + 6B54B045A5C8DC9D0510BE5BE3FE0A1C /* AFSecurityPolicy.h */, + F363289FFEDBECB17FBC94ED2AE8C0EF /* AFSecurityPolicy.m */, + ); + name = Security; + sourceTree = ""; + }; + CCA510CFBEA2D207524CDA0D73C3B561 /* Products */ = { + isa = PBXGroup; + children = ( + 7A52DF7C69FED7E78E844893F5F58808 /* libAFNetworking.a */, + A88B9D7B7216A9C1E1312C4CBC71128F /* libBolts.a */, + 7C5E7538EF5118E38934B9886BC17B43 /* libContextMenu.iOS.a */, + 3845B32677B589F5F7443E7D6E469D4A /* libParse.a */, + 6F2AB6103ACF8E3202AE317027CA808B /* libParseUI.a */, + 1A782DEC3085443686EE99BF46207C32 /* libPods.a */, + A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */, + ); + name = Products; + sourceTree = ""; + }; + D2411A5FE7F7A004607BED49990C37F4 /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 952EEBFAF8F7E620423C9F156F25A506 /* Pods */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + DB950EF338A1419E0F336CF98E3D2AC9 /* ParseUI */ = { + isa = PBXGroup; + children = ( + 5C5F86DEE2CDAB301DCBD052E170C3DF /* PFActionButton.h */, + B2688E675D28E976EDC6B6AA84C41C84 /* PFActionButton.m */, + FF535EE9855D265BB146986E399302C9 /* PFActivityIndicatorCollectionReusableView.h */, + 5E63A2D69F78652A010BB377EBB449C6 /* PFActivityIndicatorCollectionReusableView.m */, + EF790182566A5099C39C1B289E8BB3B8 /* PFActivityIndicatorTableViewCell.h */, + 161C522EE324169DC559AED510116C63 /* PFActivityIndicatorTableViewCell.m */, + F1B7F591E729212EB6BF33EF88BA1981 /* PFCollectionViewCell.h */, + F0E3349A60D7826DA93B7B2959FCEB2D /* PFCollectionViewCell.m */, + F42BAF2FFD8FD598E5C736149EA031F8 /* PFColor.h */, + 3F8F0DF089A8D938A0A83B044D743001 /* PFColor.m */, + 99C80D21838865183077DD44395D6C3A /* PFDismissButton.h */, + 9151DC926D00004E1604381F7985BB36 /* PFDismissButton.m */, + B6715EFDF271A27FBC8980E595A56F18 /* PFImage.h */, + 4A595D297E140ECE32592BFEFC293B9A /* PFImage.m */, + 6EDB22FC9E38F0BCE867A085A703C3C0 /* PFImageCache.h */, + FEF70A7046A494A88828C2736E5DB5BC /* PFImageCache.m */, + A5BBD08523DDF7DFF2711114FC722A5E /* PFImageView.h */, + 6F1F7C24D363A023B057B4B020BED379 /* PFImageView.m */, + F1DD91DA807740D7FAB3167719838902 /* PFLoadingView.h */, + 9981AF787E3013B9030751CAD2D7A086 /* PFLoadingView.m */, + DFB79D7DC036E7A8C84740F1E542074B /* PFLocalization.h */, + 2F4C5429E2494ED58C557A5F11CCC6AC /* PFLogInView.h */, + 1045C6BD9178A7E123E2001F4061D8EF /* PFLogInView.m */, + 5A11AAB2D71A25709B7A73C3D4626B66 /* PFLogInViewController.h */, + 2F22D85829359CAC7406869D232CB96B /* PFLogInViewController.m */, + 5BF05C278FCCB54E2356A81F4362E3FB /* PFLogInView_Private.h */, + 3F8A7EECD6F3077A3B0FC86D271300A6 /* PFPrimaryButton.h */, + F8C27D2D58E1E3AF1C21FB7330AF1B98 /* PFPrimaryButton.m */, + BDF771A5145C765EE70F40CEBF7C3075 /* PFProductTableViewController.h */, + 3662B43E3AABF39CEFE44FA79A74BB70 /* PFProductTableViewController.m */, + 9BECD483F69DE182010F84F44CFAB40C /* PFPurchaseTableViewCell.h */, + DA89BE341EEC7242A78FEDA064807901 /* PFPurchaseTableViewCell.m */, + 0C0458126D7C16A449337164DDC84D21 /* PFQueryCollectionViewController.h */, + 66C32C6E7A5D7E52B33E0268964CE9D7 /* PFQueryCollectionViewController.m */, + B539C1B5ED1A98FE70171B60D8186E32 /* PFQueryTableViewController.h */, + 31F9E89C104ACA3B7C08B33DB94FFED2 /* PFQueryTableViewController.m */, + 15B3921F710AB762D4B6DCFC53018A70 /* PFRect.h */, + 9A835C10155FEF5DCB5D5E43843849B7 /* PFRect.m */, + DFC690133F99B68E1F8CE7784769EF36 /* PFResources.h */, + 6F8D3DC3F913BF4E10E3FDEBC2B57B62 /* PFResources.m */, + 63491A7EC224003EF49DC8F88BC3EB18 /* PFSignUpView.h */, + 33BB29F39122EC7F976E5232ED519B46 /* PFSignUpView.m */, + 1C97247E12ADC1F7516B907DB1083863 /* PFSignUpViewController.h */, + C9EF79160C35E4B837E7EBBF7C95D158 /* PFSignUpViewController.m */, + D6974501F00D5E601A051C644A12DD71 /* PFTableViewCell.h */, + A8718EC782F1DDBEAC83251BEA9043B4 /* PFTableViewCell.m */, + B2726742F4F01872C36F74F3A273125E /* PFTextButton.h */, + 4415F3C02D8407018883CAFD17661FD9 /* PFTextButton.m */, + 4CAA43C472F7F6152B3507ABDDE9AD44 /* PFTextField.h */, + CDF42DAF3471B27B84DD07F1A7E3391C /* PFTextField.m */, + 10926AEF9594A323E624C27E8F4B643A /* PFUIAlertView.h */, + 8D0D83D976316A1E4675C57A59FD08D7 /* PFUIAlertView.m */, + 51B91EABBB44E7CF6E6B3CD95D857313 /* ParseUI.h */, + A1297C03656FAE86C50B3C5179093556 /* ParseUIConstants.h */, + E31C214E20318A87C53DB448EB27C886 /* Resources */, + 5D2BF76AAFCF51667EA94C561B87B388 /* Support Files */, + ); + path = ParseUI; + sourceTree = ""; + }; + DDE689B6B09170B803B77F9EB078E1CC /* Bolts */ = { + isa = PBXGroup; + children = ( + 200225903789300BB00A2889A4437CE8 /* Support Files */, + 2F8332C2B83A463D42D1B98C775DFC06 /* Tasks */, + ); + path = Bolts; + sourceTree = ""; + }; + E057C2EB9A740CE736968F80830BAC47 /* pop */ = { isa = PBXGroup; children = ( C091E831068E3E504A40AC6932B39C87 /* FloatConversion.h */, @@ -1310,701 +1999,91 @@ 35574BADA6CDEA944F089CBC021F01AA /* TransformationMatrix.cpp */, 2E056FF5C4EC38A55B45FB52F395D72E /* TransformationMatrix.h */, 96015F1C746803D9318614B277F71BCB /* UnitBezier.h */, - A2CC793318ED7670850E5733FFF43C72 /* Support Files */, + 1088A147F4A4DB5B1AB0A3782F770EF4 /* Support Files */, ); path = pop; sourceTree = ""; }; - 99B74290A3DB42BACD4580083D40BFCA /* AFNetworking */ = { - isa = PBXGroup; - children = ( - 1FE2EB61A95016598E72642BFBCBADBE /* AFNetworking.h */, - 343CC481EBFBA9EC3DCCBF88496BCB7E /* NSURLConnection */, - 70D08BD050FBEDBEF01649A778D854ED /* NSURLSession */, - 44B2BD7E350527D031DAEA225965006A /* Reachability */, - 7BD6D8170D87526BD20EC14D6EF61666 /* Security */, - CF98E27314C6E37BA444B6EAEAC629AE /* Serialization */, - C2714C2E5FA708AC2BFA8D6C15D7BDE2 /* Support Files */, - 1871510231A7BF05CD4E00BA2C29A9C6 /* UIKit */, - ); - path = AFNetworking; - sourceTree = ""; - }; - A2B93CF04B449D80B12ACC4F1E8164D9 /* Support Files */ = { - isa = PBXGroup; - children = ( - 6FE7C428DAE4B23EBBF3039F8397D53E /* ContextMenu.iOS.xcconfig */, - 92EFA64DEEA2D7C788D39BE4B87668B0 /* ContextMenu.iOS-Private.xcconfig */, - C3E92FDA0225F57156353438BB9F934B /* ContextMenu.iOS-dummy.m */, - DAC577DC0CB800AB728273F16E83046D /* ContextMenu.iOS-prefix.pch */, - ); - name = "Support Files"; - path = "../Target Support Files/ContextMenu.iOS"; - sourceTree = ""; - }; - A2CC793318ED7670850E5733FFF43C72 /* Support Files */ = { - isa = PBXGroup; - children = ( - B86F68BE12DD9BF16FA4EA2B8D7C6F99 /* pop.xcconfig */, - 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */, - 59B3FD41DEC22C5891C9B83C27BC25E0 /* pop-dummy.m */, - EDB35C20F0111B6D8B6548B3DA6BA7CD /* pop-prefix.pch */, - ); - name = "Support Files"; - path = "../Target Support Files/pop"; - sourceTree = ""; - }; - B9C0326EEBE4AB593BEB84C616215B18 /* Parse */ = { - isa = PBXGroup; - children = ( - 6B26ED3E1774D8AF7C7968032E48D8AD /* BFTask+Private.h */, - F08E0A9E75FBD4FAACDB3C8A68081A32 /* BFTask+Private.m */, - B332CC51A8213F3EF1C7A3FE399A5C2B /* PFACL.h */, - B94497EF1A56D3F72FD2BA76060DF1EE /* PFACL.m */, - B627B86FB20866D18CE3E2A40FF283B7 /* PFACLPrivate.h */, - 53683441896998F6CE0216D4310DD24D /* PFACLState.h */, - 06BDEA785CD1CCF3EC5F7D97641DB94B /* PFACLState.m */, - FE27C4E5599C93B42BFE6AFD312AC39A /* PFACLState_Private.h */, - 6E2A46AA281CDF574C18A7B9311A6C93 /* PFAlertView.h */, - 37DCE2246C320FA0B8BF9CAD3758AE71 /* PFAlertView.m */, - EE8606221826FA5909EFFA2016DEE26C /* PFAnalytics.h */, - CAB37E3012ED80BEB1BCF0077E7E38F4 /* PFAnalytics.m */, - BF99C2FE0ABD09A876B4FDC3B73D693D /* PFAnalyticsController.h */, - 5B55313727430781904B26ED39BC5BD6 /* PFAnalyticsController.m */, - 857A8C29F0006E02894A63C09D31CB85 /* PFAnalyticsUtilities.h */, - 4D237A86108BD1DB8A37BCC3FCA0DC90 /* PFAnalyticsUtilities.m */, - A3A9D34733E3E1E62E950164A6B84C80 /* PFAnalytics_Private.h */, - 898ECE478F3C854611287289F4977E11 /* PFAnonymousAuthenticationProvider.h */, - 1A5BCF29FD1B3CBCBD8B387388746B55 /* PFAnonymousAuthenticationProvider.m */, - 36B65B247D65EE46D2A8F3ACDC87870F /* PFAnonymousUtils.h */, - 8675E8B47522DD1649EAE7CE1299B776 /* PFAnonymousUtils.m */, - 671A1745311D8EA359B1DB95D621711E /* PFAnonymousUtils_Private.h */, - 2B2B77FA62BB014F37CDD536B7F39AD5 /* PFApplication.h */, - 4DC525DF3A9AB295F68FFA79C1865B4D /* PFApplication.m */, - 38E00AD6C99A24C72256073EDD208D3F /* PFAssert.h */, - 453A45902215CAB1B07AEEBCAEC35958 /* PFAsyncTaskQueue.h */, - 663C1A74DA7B1A684C31157464DF2CC6 /* PFAsyncTaskQueue.m */, - 507ED5364F8D323521133232F9E26134 /* PFBase64Encoder.h */, - 568A6DDB145B9BE497001F309F81C25D /* PFBase64Encoder.m */, - 2B7693C271516E5E5D162BA7DC113F4E /* PFBaseState.h */, - 245BC03B9F6AB7B69A163206AF3C2C32 /* PFBaseState.m */, - 893348B36B23CFF515B649DF3EA05962 /* PFCachedQueryController.h */, - F9A596AB40BA679CB6E7CAFF9C12420F /* PFCachedQueryController.m */, - BB51AB9AA27CE8D0A85E5690F23CF6EA /* PFCategoryLoader.h */, - 96403B2BFDB3FEACA24969CF6378D7B3 /* PFCategoryLoader.m */, - EA79AC3D10A54A6115A06F836846E4EB /* PFCloud.h */, - 70864853E727E60E7B86865739D2ECED /* PFCloud.m */, - C1555BCE0D8C4B718BB72214683D3907 /* PFCloudCodeController.h */, - FEC012E8559514CD5FDA778785F7234B /* PFCloudCodeController.m */, - E424F4FC00D39BFE64948677EB2D53A7 /* PFCommandCache.h */, - 24E60B787A9F785262AC44B47108D70D /* PFCommandCache.m */, - A28218952E226A9395672AAF9BB98065 /* PFCommandCache_Private.h */, - 7F06EEE3B8D8FE8CE602F2D363FEE64C /* PFCommandResult.h */, - 653B4653F0D1C20696A6E65E888E8D15 /* PFCommandResult.m */, - 0F1D200E550A12E3F43CD3F31E131DBE /* PFCommandRunning.h */, - 0B072562DD642F896CD3C3B7CEF2911B /* PFCommandRunning.m */, - 0EDD645EA043AC01BD2D294C8E25D7C9 /* PFCommandRunningConstants.h */, - 48DF685D40431A00C7B7572D23340086 /* PFCommandRunningConstants.m */, - 669BF4D4C83FA3E0ABEF32501AC4C5EE /* PFCommandURLRequestConstructor.h */, - D0D0DD7229B595E60BA7D6C2A41C4B6B /* PFCommandURLRequestConstructor.m */, - 72C04520515C92C01E90D8D58C97BA21 /* PFConfig.h */, - 73F5CAD466111E720F4983773D164AED /* PFConfig.m */, - D4186E5938E4D869A1267A20AC002113 /* PFConfigController.h */, - 3501C65AE5330DD19D3236E70095C9D8 /* PFConfigController.m */, - 18D7C9B8DD8A89571437499374A39984 /* PFConfig_Private.h */, - E8FCE3D950703287AE285D63EEA38289 /* PFConstants.h */, - 6D45F61B78D4419060D26A7EBAF70EC2 /* PFConstants.m */, - 7725DA2CCC4B05B3E8613121DAB013CB /* PFCoreDataProvider.h */, - 0FE1708AB969B7C864FA6A717B2332A5 /* PFCoreManager.h */, - 033DE2F20554C4483F70BB66112A660D /* PFCoreManager.m */, - 8D19EBD75979B9CD23ABA38BA45D0DCB /* PFCurrentConfigController.h */, - 2966362D026D5B9C80E247EEDC0F4E9B /* PFCurrentConfigController.m */, - 009D766A60F44D81650E505380CF6EE5 /* PFCurrentInstallationController.h */, - E2F89C1AC67968BA35BD1123BE34D894 /* PFCurrentInstallationController.m */, - ED172D7F5B84203E7C6617EC01D187F2 /* PFCurrentObjectControlling.h */, - 0D2C0E09440F10C2834146B969AD0950 /* PFCurrentUserController.h */, - 8C6B8C7E82B804AB1382E38F8E99158C /* PFCurrentUserController.m */, - 721E34BBC2F5BFD148652BD36955365C /* PFDataProvider.h */, - 965FBA9FA425FE1BA4E41B4FFEE42FA8 /* PFDateFormatter.h */, - CF46F6E5A7E52A35C89851DED33A2176 /* PFDateFormatter.m */, - 65F6F140EE00AE08D92C70E19B66F5A4 /* PFDecoder.h */, - 7C4ACAFFC579192F80AE309D38F4CE0D /* PFDecoder.m */, - B65D4C06593414E001B75B30C7A68F64 /* PFDefaultACLController.h */, - 1896BB3AD97D1E8CB9D17C6A982672DB /* PFDefaultACLController.m */, - 14BFF77A40EB6D31D0D53D242A01BED0 /* PFDevice.h */, - 0823AECF540B112CC0DD23CA1EB33F1E /* PFDevice.m */, - E12E9AD26CFEFE56F770EBC8224F9542 /* PFEncoder.h */, - B0D0D5C8FF6EA31C0E29554F03FFAE35 /* PFEncoder.m */, - AC7F1FE520C94B33E628A5BF7D802073 /* PFErrorUtilities.h */, - E97A297341B3E569BD3DEA54A611D6DF /* PFErrorUtilities.m */, - 2348B7338D870B151D50A511AC6711D0 /* PFEventuallyPin.h */, - C9BD34A121ED46D7A11BF5ED82E5B876 /* PFEventuallyPin.m */, - 63F5E36EFB9403CA32B8B5C3A3F78855 /* PFEventuallyQueue.h */, - 1C0E7BEE92130638A860786486BF4398 /* PFEventuallyQueue.m */, - CA572C4AE94CB9AC2FF8EE80A7E1179F /* PFEventuallyQueue_Private.h */, - A250843CDACF4CC56A8C27C4FDF9C270 /* PFFieldOperation.h */, - 4B4E5220C651194225EB11D393463146 /* PFFieldOperation.m */, - D93333F49B10A154028722630A69414C /* PFFieldOperationDecoder.h */, - BFBC36D6FED37ED769BA66522F1A639F /* PFFieldOperationDecoder.m */, - 82BCDD60CE06A0870E0ED0D853E05739 /* PFFile.h */, - 59143BC1CCA767489CC63EC79299C132 /* PFFile.m */, - 489E3B9351E8F3F82DAFE89EEEC84804 /* PFFileController.h */, - 676C7A56F303C34B831F1F015F05812E /* PFFileController.m */, - 26DE5D007AAFB71206252AE40BAE833B /* PFFileDataStream.h */, - 206BAB6E51C3AC0ACA2E1320A911DA36 /* PFFileDataStream.m */, - 5F3726655401860B18DB85328C091228 /* PFFileManager.h */, - E745CDD44F448B0BB657E770CFDCF27C /* PFFileManager.m */, - AD274DB5984402947E47F0A1B92E9CA4 /* PFFileStagingController.h */, - 461917BD0B571A033CB9E74AD334A12C /* PFFileStagingController.m */, - FF3530F7B69DD859647B6416F1A85C73 /* PFFileState.h */, - 283151768413CC359CA4D2B1E9BA275A /* PFFileState.m */, - D3E8D0F342FFF167540A96E017CCF674 /* PFFileState_Private.h */, - 0854CFF4AC229E21A7EC471BB9EAC43F /* PFFile_Private.h */, - AE96E6223940CD70D6F01EA288192D93 /* PFGeoPoint.h */, - 57F2605E98764A7779B3213480606C71 /* PFGeoPoint.m */, - A09F4FD4303453124FB9D4870DDE2F0C /* PFGeoPointPrivate.h */, - 869C2B98A84E7A66ED53252EEBD534C7 /* PFHTTPRequest.h */, - 022CFAB7CC0CBD47E0AC47A4EC57B983 /* PFHTTPURLRequestConstructor.h */, - 62078C4D93D4BF5CF7430EF680857264 /* PFHTTPURLRequestConstructor.m */, - 6A3138F383603A594BF1120840E69F93 /* PFHash.h */, - 5F6D07CF3F5445D97AACFB330CF98F66 /* PFHash.m */, - 57B1DA40C85BD720B286FFF8C7EA6F91 /* PFInstallation.h */, - 4A0A7E7C948EBD45C167B8D1A339D98A /* PFInstallation.m */, - C01AC5406A1FE996C23D44F2D1E54AE2 /* PFInstallationConstants.h */, - 7F214F1BB9B408A25954535EFA736CA6 /* PFInstallationConstants.m */, - FF3D2A57C25C1CECF52F0872DBB55F05 /* PFInstallationController.h */, - 81EA6C27FFDF760CFB4767BB48E66220 /* PFInstallationController.m */, - AC3758631123BBA424D0C687A75ED31C /* PFInstallationIdentifierStore.h */, - C609AF7E1C4CAC8BDE38A1E28E64414A /* PFInstallationIdentifierStore.m */, - 92C8318F0774CE0DB5B5FA3C7961C69F /* PFInstallationIdentifierStore_Private.h */, - A8AD04541066E8C429FCD51E8A604FF1 /* PFInstallationPrivate.h */, - C452DCF65E6EEC6AD15BD77F01EDF779 /* PFInternalUtils.h */, - DAD2B1AEAEEE3B6167AA69B21E00DE2E /* PFInternalUtils.m */, - 58898FE04784C24EDFF6D77428F6BB91 /* PFJSONSerialization.h */, - F6357CB5A05AA7E18DC9505CDB7B5CE8 /* PFJSONSerialization.m */, - 245FF007BEF549EF81D7E0222214C303 /* PFKeyValueCache.h */, - 3E2E03FFA5C12908D09BC583858570B6 /* PFKeyValueCache.m */, - A63FC1750D756C077EBF6610F23A216B /* PFKeyValueCache_Private.h */, - BA733732E0D2D37C0A92D946DE2A9EEE /* PFKeychainStore.h */, - D4EBEE47CEE4A7801385DB1D8C88383E /* PFKeychainStore.m */, - ECBD824DA95D72A1DD329C331E1D9D09 /* PFLocationManager.h */, - F0F3A2FA993D77CC93EA7FCA0571B6E3 /* PFLocationManager.m */, - 80678CF83F7E4592403D479266CD73C6 /* PFLogger.h */, - C124801645AB37C7712D483A5C87D83D /* PFLogger.m */, - 0931322359A8E70F6F16FED5F97879E5 /* PFLogging.h */, - E4A624B26435247F139B091B03F95E5A /* PFMacros.h */, - 372923DCA1E5BFDF1DBD57E93002E783 /* PFMultiProcessFileLock.h */, - 7388AF1F66A03C223B0DA9338F552A19 /* PFMultiProcessFileLock.m */, - CA70C152E8EBE75160C47A587C7EC00D /* PFMultiProcessFileLockController.h */, - 5C3B64369BE6A9ACF09E4E03E3747FA0 /* PFMultiProcessFileLockController.m */, - 016F2569F5E0DA62E089B095D3A04E84 /* PFMulticastDelegate.h */, - 475310436BBAD84F7095E6DB0BB83F78 /* PFMulticastDelegate.m */, - 8E69E884C61DBE3CA50B5B88897651DB /* PFMutableACLState.h */, - 82B2F774B2C3F6B000F7B323A1E51571 /* PFMutableACLState.m */, - 61DE303474ACF3AAEB6BEF7CF3151683 /* PFMutableFileState.h */, - 61308EBC3E3CCE6EB380B4761543AD72 /* PFMutableFileState.m */, - B58A5A84AAAEBE1A391E99E9CAED0FF2 /* PFMutableObjectState.h */, - D5CF558DFE9FECD0D4DAD9727F9E7447 /* PFMutableObjectState.m */, - B2586CEB4DB20E7AED5EBFD3FB96B973 /* PFMutablePushState.h */, - 0DBB0CAB75C437C618EEBFAF8F62A947 /* PFMutablePushState.m */, - 345A7737A02453DD9D85EE95F928690B /* PFMutableQueryState.h */, - E50C20130F417DFB11F5B3BD1EE46846 /* PFMutableQueryState.m */, - ECE13A0CEBDF1FFEEF6A3A9D07298478 /* PFMutableRelationState.h */, - 372FE1327079A6911530ABFAF7BF2E68 /* PFMutableRelationState.m */, - 1A28796B1724F0F5B766249296CA182A /* PFMutableUserState.h */, - ECA0CA78D651CA48D080363398697627 /* PFMutableUserState.m */, - C7C65DD82B3A08F62D43E9DAC3B23880 /* PFNetworkActivityIndicatorManager.h */, - E2534618753A8E575CA58125DE04D03D /* PFNetworkActivityIndicatorManager.m */, - 7B131E3C12FA20F7C590D94EF645128F /* PFNetworkCommand.h */, - 32AEDEB7E9CE1E1D2795C43EFD540009 /* PFNullability.h */, - A52CE45BD75B2826314A3BCDCB813398 /* PFObject.h */, - ADEFE34C92FF818B135715C323E4963C /* PFObject.m */, - F0FF6176EC466320C2C4D25100A1B61E /* PFObject+Subclass.h */, - 38C5CB3B26D08AF88F501A05B91F10B4 /* PFObjectBatchController.h */, - 530ED4C4F72784908C56CECFABD0231C /* PFObjectBatchController.m */, - 5710C75607065D22ED2DB5CCCFB27A3D /* PFObjectConstants.h */, - 923EF0E8FAAA93BA1AF9399DE58923FF /* PFObjectConstants.m */, - CCFA76D1938B2CCED5785C13FA4FC5B8 /* PFObjectController.h */, - 656B8A19AFF797C4926D6E2E8D102049 /* PFObjectController.m */, - 6D97138DECF19BAFB63881A6D4EF92BF /* PFObjectController_Private.h */, - 2792004D5441520275B8E22F94BD8E5C /* PFObjectControlling.h */, - 237D0CDD69C7B78A1BDB8DDF87F9EC2A /* PFObjectEstimatedData.h */, - 734124A4F7A87553483F895904EE19A9 /* PFObjectEstimatedData.m */, - 6D14E98ACAAB4CCD1367FDFBC9088D27 /* PFObjectFileCoder.h */, - 196698284757A108BD18D4EFC0D470B2 /* PFObjectFileCoder.m */, - 28676FBC1D97921BD11D7A12C922CD0A /* PFObjectFileCodingLogic.h */, - 71E77E05CC2CDD5B79D7552C17004EFB /* PFObjectFileCodingLogic.m */, - 3D7123F7FE1F84DEDBE2ED35D8844839 /* PFObjectFilePersistenceController.h */, - 8AA0E5427E9EFCC96AC0F8CED0FBEEF4 /* PFObjectFilePersistenceController.m */, - 62C1941BE9E36B0C41BF43BFCF7681CB /* PFObjectLocalIdStore.h */, - 9102F91F4F8FC737DF8F8B04EB6B1183 /* PFObjectLocalIdStore.m */, - B7E18330D5E87E2825CE1B429D6F6693 /* PFObjectPrivate.h */, - E0041782152C1ABC1F18B164311EAF2E /* PFObjectState.h */, - 6DC7D6BF37746831732BEE64A78E2E64 /* PFObjectState.m */, - 86D677D0061394762DEF101FECA5E262 /* PFObjectState_Private.h */, - BF9B1FD5D1E2441D018DF7EDDDC4A3FC /* PFObjectSubclassInfo.h */, - 3DFA1FB737DEBE392F5582656ED1040B /* PFObjectSubclassInfo.m */, - CDE463E6B9D1AF8E6AE850CD5E68849F /* PFObjectSubclassingController.h */, - DA4157CE1B57DF0CDF63B24888DCEA61 /* PFObjectSubclassingController.m */, - E90014A2B5A64CF0A01CA41D71769C7B /* PFObjectUtilities.h */, - A988AADA8AE3AFF34F68D1673691E59A /* PFObjectUtilities.m */, - B024D2C96D819E81E5D194B562CA7CCF /* PFOfflineObjectController.h */, - D8AA77C187E180A556AF4ADA309BC0B6 /* PFOfflineObjectController.m */, - BBFE8A0106C591064C969ED096275D29 /* PFOfflineQueryController.h */, - 2DC00CBF82C85912449AE191DBEC053D /* PFOfflineQueryController.m */, - EAFA435D26900861E36F1BAF155390C7 /* PFOfflineQueryLogic.h */, - 0862542F3708CEA8901318AE4F5FE02B /* PFOfflineQueryLogic.m */, - FF6B3C0F9FB537B2DB4C17A15E8F06D2 /* PFOfflineStore.h */, - B0E75CCDD1A5217E3601BF092D5385C1 /* PFOfflineStore.m */, - B1483642455FE93A36C64B730F27BCD1 /* PFOperationSet.h */, - 92A56E592AF27DDA726FCE1F4C398C8E /* PFOperationSet.m */, - 8510965E6696177882F8683FF279CA62 /* PFPaymentTransactionObserver.h */, - 76B1F1A7DACF8124FD67EEFFB88526F1 /* PFPaymentTransactionObserver.m */, - 7203E516FF95A460652ADF5DFDEB3FB7 /* PFPaymentTransactionObserver_Private.h */, - 189B90A77BD5596205FB77D8F7DBBC66 /* PFPin.h */, - 4FA3D2B13C2E276A13164FD9D412F89D /* PFPin.m */, - AA0EFB7BECF9EB8E71FD258F0F60D3E5 /* PFPinningEventuallyQueue.h */, - 0BC40E8FF522D488100477128A373255 /* PFPinningEventuallyQueue.m */, - 37D8598915FD79DCA21C88192869017A /* PFPinningObjectStore.h */, - 315895D529B1136E61253E4EEE127FAC /* PFPinningObjectStore.m */, - C4F300D4AA623B3DFFDF7971E2B5A614 /* PFProduct.h */, - 893F517620D76C4DD97407C35B30C8DC /* PFProduct.m */, - CBCE01FE706B02A990236BCCFB09B153 /* PFProduct+Private.h */, - 529C0DC5511102F293AAA76310789551 /* PFProductsRequestHandler.h */, - 62FA41489E9F671A6D2AC37AA15E70FC /* PFProductsRequestHandler.m */, - FD826E93D8E3CA261C02B951A6F9751D /* PFPropertyInfo.h */, - B1D6FB68F1851036506A1E965B20FBD5 /* PFPropertyInfo.m */, - 3070F8AC10357FBF3BA3FE9A093D8A9B /* PFPropertyInfo_Private.h */, - 1DD825DA40E92E93FAC2EA00807BF7D1 /* PFPropertyInfo_Runtime.h */, - 97ADB30A5976DC7FE832E68A415B22F8 /* PFPropertyInfo_Runtime.m */, - DD2F94AB2074545E677D5F66F9D63121 /* PFPurchase.h */, - DD428B827A37AD34DF77CC5C561BCE0C /* PFPurchase.m */, - F48EC1FB45579CEBC6000F723C5E081B /* PFPurchaseController.h */, - 94DF16E2294CA8FEC9FD2ACF36D38638 /* PFPurchaseController.m */, - E6235BD1313049794F1B1DA7AB8B72BF /* PFPush.h */, - 62FAE8C508439F783E07B639E62E5388 /* PFPush.m */, - 1B2FDDD8F730AFFD1DFF805E250C3654 /* PFPushChannelsController.h */, - 89A3DB76DA1562634E50BB32E31C34F7 /* PFPushChannelsController.m */, - 0F7453E990BF208758602D5B39CB7388 /* PFPushController.h */, - B1E9EC0D78FBC6373DBD668B202BBA25 /* PFPushController.m */, - BBEDFD1C6F661507D70B9C73268193B3 /* PFPushManager.h */, - 8CCBDC7EA64ECE9974D334AA69A02EEA /* PFPushManager.m */, - A60CF5CEA93C2F6926C54CA3679A1556 /* PFPushPrivate.h */, - 97D5C73BC159E5CEFA38B5345BB3B77E /* PFPushState.h */, - 9B3991EEAD0B989CE24DC09DA3F6F84B /* PFPushState.m */, - 56CE00CA829DE03D96192E0DB1B3B4B5 /* PFPushState_Private.h */, - 39451587CFA3D7024575C72DA66A271B /* PFPushUtilities.h */, - DAF8AFF71E17239BC9D066B413214C0F /* PFPushUtilities.m */, - 0D7ADA7673FDA922B924DB960BC45FEE /* PFQuery.h */, - 291630B6FE4315F0B5B789D1ED22A66C /* PFQuery.m */, - 860D58AD9C905EA188BEF7C2C8B3B2E4 /* PFQueryController.h */, - F3FCAEE7ACA390A41ACE7637EA5338AE /* PFQueryController.m */, - 6E19C92B6E4B8413D0F549918EC73FD0 /* PFQueryPrivate.h */, - 58EC2DED4BCC481232C4E104FEB2F9ED /* PFQueryState.h */, - B7C407A664499E7354D9C1CCDB113A59 /* PFQueryState.m */, - 5AA108C575CCC3045CF6EBEB7C2D35B5 /* PFQueryState_Private.h */, - E1129C74BCA89B5DEF89974B3EADEAF6 /* PFQueryUtilities.h */, - BE9F74FE3902C79E0394988E24194855 /* PFQueryUtilities.m */, - 82175545FE728571466A9FD6E8D8A7DE /* PFRESTAnalyticsCommand.h */, - 946D9742CB5DB1C57ED0E3BBA63E66BD /* PFRESTAnalyticsCommand.m */, - 63CF9DFF309CFA031748CEB31E227BB9 /* PFRESTCloudCommand.h */, - 105DFF60164FDC71E3359B156DAE0937 /* PFRESTCloudCommand.m */, - 595A306B6C145E017C4B885F8ABB9F94 /* PFRESTCommand.h */, - 36E7ABF06376C0698BE4B369C1255EAD /* PFRESTCommand.m */, - EAEF6A0ABE272D5803680B4298EB62D2 /* PFRESTCommand_Private.h */, - 07A16D1432732F853E3D7B39B1DB383E /* PFRESTConfigCommand.h */, - 9F519C682C4E52952D376F5423040E5B /* PFRESTConfigCommand.m */, - E20D9CF29C188B71F5C9BA5C972A8960 /* PFRESTFileCommand.h */, - 5367E0C94AEC8755F6974A3C97264428 /* PFRESTFileCommand.m */, - D973AF50D37829E5A629A80ED88FF2E9 /* PFRESTObjectBatchCommand.h */, - 32D54A528AA2134A544108B4E124A617 /* PFRESTObjectBatchCommand.m */, - CB4444A178F9CEC2E097C90C7D351E7F /* PFRESTObjectCommand.h */, - 5775915FCBF7CB8AB7E50C1474A500B5 /* PFRESTObjectCommand.m */, - D244FD9C2061C46A05C67E3557A6D7A9 /* PFRESTPushCommand.h */, - A89E8441EF384E751C66846D8C7DA140 /* PFRESTPushCommand.m */, - 91B168BFBEBBF3272A49E4240325DAC3 /* PFRESTQueryCommand.h */, - 4A747E0C0BA89EAF9D9C9B35EA62B097 /* PFRESTQueryCommand.m */, - C5FE3CDD5FB245BC2913E868E9DE3995 /* PFRESTSessionCommand.h */, - 9507DB69A2FE53769B24313F98BCFB5B /* PFRESTSessionCommand.m */, - 60F954C2BD5989BD4626F5C1F5BCC48A /* PFRESTUserCommand.h */, - 876ECCCFCF0B3F87EC5560A2FF6B5059 /* PFRESTUserCommand.m */, - 1EBBF4F6FA934C6BCACE0C5744A3BF58 /* PFReachability.h */, - CBE1F1F92C05B5ADE677C606485BB75F /* PFReachability.m */, - D26D8AB91D60CAC4AF163A949239DE49 /* PFRelation.h */, - 1FCA6291D3A1D8E40FC410D0747380DC /* PFRelation.m */, - D15D922CCB9D2F0B65F44C7FBFE53EBC /* PFRelationPrivate.h */, - B3F7FC9A375F4CC184EF1CB84FFF2E2F /* PFRelationState.h */, - 3801D32A117D840B4286437B7A779361 /* PFRelationState.m */, - EF64AAF633AE4BDB30247D6A4090B89C /* PFRelationState_Private.h */, - 33CAFF9933F161C320331CCA71D23A5F /* PFRole.h */, - 2DA3428B35116EA19374F593BE42F3BD /* PFRole.m */, - DE2DE7B62241FC17A59B0C930D7837B4 /* PFSQLiteDatabase.h */, - 9EAF2A823E92A730EC588801D943C514 /* PFSQLiteDatabase.m */, - A60A05A0392E32822607D587C5380E61 /* PFSQLiteDatabaseController.h */, - A78F4615CC1292D0FA53088C626957D8 /* PFSQLiteDatabaseController.m */, - FFD183F4D915B996DC61B082E5317000 /* PFSQLiteDatabaseResult.h */, - 13D7A1D1A9F6D9020B6E721D5D4D5730 /* PFSQLiteDatabaseResult.m */, - 846998BF4B29751792079F5759BBA274 /* PFSQLiteDatabase_Private.h */, - 007D017430CAD14C507E4E16894E1ED8 /* PFSQLiteStatement.h */, - A1B4C9A06FB08BC3FE354D588CD09AF7 /* PFSQLiteStatement.m */, - 752500BB2A0459E3CB234F46BFDE1EED /* PFSession.h */, - 7C6969F6DC20ED490487711A80935900 /* PFSession.m */, - 2B493332AF25497985B3420336C8E310 /* PFSessionController.h */, - CF35E714DE566F845ECEDF6AE894C5F0 /* PFSessionController.m */, - 15DCE6DD786D364DDA4BCAD1F24895FD /* PFSessionUtilities.h */, - 810E80DCE80B90D80B5F21BF7212FEFB /* PFSessionUtilities.m */, - 96A60F95EF69292F16C085789B646687 /* PFSession_Private.h */, - BCC77513019B8BF9A882928F74C52424 /* PFSubclassing.h */, - 8F5D0107B7A3A38D5B48854CDBEA6CD3 /* PFTaskQueue.h */, - 0E374390CBBC0449CF5CC0A1C32EE8C5 /* PFTaskQueue.m */, - D963AA70AF8A60F226D09FBC6225E686 /* PFThreadsafety.h */, - 436A81D9B2A9E41E99BF86F1C6871A0A /* PFThreadsafety.m */, - 6BAB10EAFDE7E6E60F85AB4A4C3AD67E /* PFURLConstructor.h */, - 6D3ED73DF6D62367D4288EA69377B589 /* PFURLConstructor.m */, - 9CB47EA89DC2B49C7B2B12127098FB33 /* PFURLSession.h */, - AE0BE1F355DE44ECCAEA5BF8D4526C5A /* PFURLSession.m */, - CDAC0B9AE144C31E2DE5AF0A4DB1EDC4 /* PFURLSessionCommandRunner.h */, - 075D17B28FD88D19723BDD0F7C7ACF85 /* PFURLSessionCommandRunner.m */, - 47DED761A5B41071D4A460714CF9A610 /* PFURLSessionCommandRunner_Private.h */, - DFE6FDE4C6292695F3EBEFE040B0685E /* PFURLSessionDataTaskDelegate.h */, - A3DF42FD99A813DEBC5C62B3491B1AC0 /* PFURLSessionDataTaskDelegate.m */, - 780EF3BE11B2381FB28EB629FB8CBC29 /* PFURLSessionDataTaskDelegate_Private.h */, - CFC48C77C63A582B14A5B098E6FCF482 /* PFURLSessionFileDownloadTaskDelegate.h */, - BA8D893893775B109603AF7A33CD563B /* PFURLSessionFileDownloadTaskDelegate.m */, - C40DDFB915A319DD1CC8CD9340920EFF /* PFURLSessionJSONDataTaskDelegate.h */, - 9357693A996038C30E8C787613239775 /* PFURLSessionJSONDataTaskDelegate.m */, - 347D5D631A6A12B0298E13B5415AEAAF /* PFURLSessionUploadTaskDelegate.h */, - AA5D3771AE76625915E333CFABB45A05 /* PFURLSessionUploadTaskDelegate.m */, - 450938391ACE611C45583A2F6117FD6D /* PFURLSession_Private.h */, - 0E8BFD8BC695971FCCBA291EDD68F350 /* PFUser.h */, - A3A5889AC5CCB95EF1C4DD6B7C5C930D /* PFUser.m */, - BB019CE2BDFE6EC36FCD9993DB744EFA /* PFUserAuthenticationController.h */, - AD9250D9FE4979DF37C24BE1CDB4FF8B /* PFUserAuthenticationController.m */, - DD1568F7E2ED50F1C629DDF3D9F3020C /* PFUserAuthenticationDelegate.h */, - 9645D0E8258AB75B2C992E0915EA9BC2 /* PFUserConstants.h */, - F0662D5C0759804552360A67D1BDFBA0 /* PFUserConstants.m */, - 08DB18CB20934926437D11F21D1D9B8E /* PFUserController.h */, - 358BFE48BAAE8F3F03CD0C0904BC4C08 /* PFUserController.m */, - A2BD31107881F3881ADCD378256D4B02 /* PFUserFileCodingLogic.h */, - 5DA5FA1FA814DC209F9EABCD6B9119F6 /* PFUserFileCodingLogic.m */, - 457B2F0DFF5B74AEFF8A1D9A714104EA /* PFUserPrivate.h */, - 562875D8611745AF8CD45A6CDA6DC927 /* PFUserState.h */, - 8072BEAB5E3DFBED370817399B610731 /* PFUserState.m */, - 5E5F89585BF738F0A58C77BC3BE1A932 /* PFUserState_Private.h */, - BA10EEFBDA4AD314FB6D71B9DBD76FB7 /* PFWeakValue.h */, - FFE3BF2FE5A767CB3A9F0B32672156AB /* PFWeakValue.m */, - 12BB94C26636A7E690216E2AEEFAF264 /* Parse.h */, - 7A880B37F4F90E6B3CCA1B3FAD582B81 /* Parse.m */, - FC0150E534DA14510CC9BC5D0C1AFFB3 /* ParseInternal.h */, - 4CD3D62A5F9D0B310DCF7C520D812B6F /* ParseManager.h */, - 1DB83418592CB04C28FA16D53A2F50BB /* ParseManager.m */, - BEAFE0D908EC855629B1121D957A354A /* ParseModule.h */, - A011CA3F808702224552F151CBB37A51 /* ParseModule.m */, - FFEA133F46FCCEC9897A623F3336EC38 /* Parse_Private.h */, - 58A31A01D078FCF8E66D5353FA341FA2 /* Resources */, - 4A3B2BF0C2CE1DB37AB68EDF92FD44AB /* Support Files */, - ); - path = Parse; - sourceTree = ""; - }; - C2714C2E5FA708AC2BFA8D6C15D7BDE2 /* Support Files */ = { - isa = PBXGroup; - children = ( - E73B966684C4350307ED9BFDFA142DF1 /* AFNetworking.xcconfig */, - 69C89E4E56C77B03B486A9C81B595B44 /* AFNetworking-Private.xcconfig */, - 0B19A6DDEB20A310104A97E0953192B8 /* AFNetworking-dummy.m */, - 86A60F0A962861AF2DAA6A87C133F7E8 /* AFNetworking-prefix.pch */, - ); - name = "Support Files"; - path = "../Target Support Files/AFNetworking"; - sourceTree = ""; - }; - CCA510CFBEA2D207524CDA0D73C3B561 /* Products */ = { - isa = PBXGroup; - children = ( - DE3508684073BF9ED1EE176A805EE3FC /* libAFNetworking.a */, - CF774A16F869C80126A81687EB1E85D6 /* libBolts.a */, - 3161EE94B4EAC7208319195F1483596D /* libContextMenu.iOS.a */, - BD2D7F17F9C540FBFE58E4DB0EEBDC9A /* libParse.a */, - 5CE1AE8BFDFAA049F0F73E15ED7ACE9E /* libPods.a */, - A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */, - ); - name = Products; - sourceTree = ""; - }; - CF98E27314C6E37BA444B6EAEAC629AE /* Serialization */ = { - isa = PBXGroup; - children = ( - 93F14E13D1AAFFA4C781869593E6A6FF /* AFURLRequestSerialization.h */, - D0E74CB04A2E39384A95EDA3500A04D2 /* AFURLRequestSerialization.m */, - 7A69D20AEBC89B67DD33CA2CC54E309B /* AFURLResponseSerialization.h */, - 80B7FAB2B889140EDF2DC60D3C4A5969 /* AFURLResponseSerialization.m */, - ); - name = Serialization; - sourceTree = ""; - }; - D2411A5FE7F7A004607BED49990C37F4 /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - 952EEBFAF8F7E620423C9F156F25A506 /* Pods */, - ); - name = "Targets Support Files"; - sourceTree = ""; - }; E2B9394A418EE71C1E22343458733EF0 /* iOS */ = { isa = PBXGroup; children = ( - FB0347B267799D3314B6438A04D898BF /* AudioToolbox.framework */, - 48514E935FE3E435F151EFEB4D829A65 /* CFNetwork.framework */, - 6408EC1F7E48296B333659567543173D /* CoreGraphics.framework */, - 0E1148A11007AFF78ABDECD376185D39 /* CoreLocation.framework */, + 3E49F373A0C99D0BDC90B707820423BE /* AudioToolbox.framework */, + BC83DB2D364DF47142AB2F90071DA9F5 /* CFNetwork.framework */, + A97DD8424AA6D29A671297332ADC6CA1 /* CoreGraphics.framework */, + 94CA59055B37DA8DC1D9377D2231CF47 /* CoreLocation.framework */, 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */, - 2BD22E7A59F4BEFF52D4F43A0AA7EB30 /* MobileCoreServices.framework */, - 8BABE1F9D15A2416835BA1EC9EB7E043 /* QuartzCore.framework */, - AE87F34D52CD28E7113F03F7CEA01F06 /* Security.framework */, - 35568ABE019B8ED099EFF07CE242DD67 /* StoreKit.framework */, - 74BAE971C6A2FC6F319D21B31E77EAE8 /* SystemConfiguration.framework */, - 8F270D2F5F74F0965904AC60E014742A /* UIKit.framework */, + 62B4F6275559C45BDBB446ABDB11EB0A /* MobileCoreServices.framework */, + ED8D97DDDCF9842413073AA979D81CD2 /* QuartzCore.framework */, + 9CF2B2B9DD2ED593C69A3425ABF50CEA /* Security.framework */, + B3C592B1563BAD172B026388C571DBE5 /* StoreKit.framework */, + 4D1BA2737792A257200ECAE76708D233 /* SystemConfiguration.framework */, + 9FB80727EBDBCBDEEBCAB45A1785BAF1 /* UIKit.framework */, ); name = iOS; sourceTree = ""; }; - EB57DDB3388FBC701046A1E93218737F /* Frameworks */ = { - isa = PBXGroup; - children = ( - E2B9394A418EE71C1E22343458733EF0 /* iOS */, - ); - name = Frameworks; - sourceTree = ""; - }; - EE85D36C044E4BB468AE05B65485762A /* ContextMenu.iOS */ = { + E31C214E20318A87C53DB448EB27C886 /* Resources */ = { isa = PBXGroup; children = ( - 1E4D88B0EC5CA12C799F9F3C05C0B31E /* UIView+YALConstraints.h */, - C5560C46514764C06929B264B533F518 /* UIView+YALConstraints.m */, - 01D2ED1DF56FF3AE05B1515043302F71 /* YALContextMenuCell.h */, - 7977EE0242992DA9A68D3DCB922B66CB /* YALContextMenuTableView.h */, - 385A446A8250571BBD7FF461E05E1382 /* YALContextMenuTableView.m */, - A2B93CF04B449D80B12ACC4F1E8164D9 /* Support Files */, + 900D054E76F1D5D03B53DBFF276C5C0D /* en.lproj */, ); - path = ContextMenu.iOS; + name = Resources; sourceTree = ""; }; - FA527DA126D49BE2A84BEFE3B6068EF2 /* Support Files */ = { + EB57DDB3388FBC701046A1E93218737F /* Frameworks */ = { isa = PBXGroup; children = ( - 036A8C9E0C46D47ECECB6E33E53B2BEF /* Bolts.xcconfig */, - F0959918976A05003B1E7FB37A8F8749 /* Bolts-Private.xcconfig */, - DBD87B92425DF4F2F580DDE78C400947 /* Bolts-dummy.m */, - 1C4613FF21CF534DDDB393C04D6279F3 /* Bolts-prefix.pch */, + E2B9394A418EE71C1E22343458733EF0 /* iOS */, ); - name = "Support Files"; - path = "../Target Support Files/Bolts"; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 6F684E437947AECF10AF1B392C27FE0A /* Headers */ = { + 26FAD1D8029AE388ABD0140C46C4C37A /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D7AB6CC905033BE9701B6BE2D8B10474 /* PFActionButton.h in Headers */, + 80C528865C8895DB3426F02DBF3C0D9D /* PFActivityIndicatorCollectionReusableView.h in Headers */, + 352D02CEC844BC2D22026A777FA39ACB /* PFActivityIndicatorTableViewCell.h in Headers */, + C6D7800441271BE5C55F573916AA3EF5 /* PFCollectionViewCell.h in Headers */, + 80B7075F5055261F04B4029C1406EB76 /* PFColor.h in Headers */, + 49DD3F7AD1B9FDEFF123B570668F7154 /* PFDismissButton.h in Headers */, + ABC087DE99A9A9EB06CA4FC2E6D5D09E /* PFImage.h in Headers */, + AD170D2AB15EA449A8AFCBED2A2564DC /* PFImageCache.h in Headers */, + E9C8E5867435024A65D9E929D85D2371 /* PFImageView.h in Headers */, + 8FE6DD5A880949235DF71570CD9AF86C /* PFLoadingView.h in Headers */, + 16E5664C03179ABE5E7339A5D8536E5B /* PFLocalization.h in Headers */, + 015C2EFB4BDA114E874289A8BC01B844 /* PFLogInView.h in Headers */, + 85AECDB66088F01AB3230A50CF38F9EE /* PFLogInViewController.h in Headers */, + 3A3EE6FBA4054D41BB3BE24552D0555B /* PFLogInView_Private.h in Headers */, + C9C11463ADF18ACBC73F8B748202928D /* PFPrimaryButton.h in Headers */, + BE4F6803EAFE5A8C677FC5FE6FA8C4EF /* PFProductTableViewController.h in Headers */, + DD05DB01536F7157D9362BE8E8083066 /* PFPurchaseTableViewCell.h in Headers */, + 7924C2A8992A0D316DB1E9A299F60BA2 /* PFQueryCollectionViewController.h in Headers */, + 59BA7CCA0E9AF6D155A512DF3A8BED25 /* PFQueryTableViewController.h in Headers */, + 5D1D8DB17C40891783970781D35AAADB /* PFRect.h in Headers */, + 183010BEEB58B8B3CC8C1509BD15346B /* PFResources.h in Headers */, + FCE81758F981E89A3B88ED7485A67EA2 /* PFSignUpView.h in Headers */, + 4A9C3367259B56358D28505ACB440384 /* PFSignUpViewController.h in Headers */, + C9D17B038AAFEAC1050C417F57B02FF6 /* PFTableViewCell.h in Headers */, + B1C7B0AA9E3B2A03A251EE453FA0DD35 /* PFTextButton.h in Headers */, + 45E33698BC39D7FF3123216BFE1C1368 /* PFTextField.h in Headers */, + 4BE7FDB3D3FD6EB4DBDBF4A8D6251C93 /* PFUIAlertView.h in Headers */, + 02E5D6EBF54BD9D4CF221E7D76081855 /* ParseUI.h in Headers */, + 67F4EDD1978EF86C5280CB051D92B690 /* ParseUIConstants.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 35789C083B98EF480FFA83CB6247B6B2 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - FF06683CECBB72CC198613D50C833E94 /* BFTask+Private.h in Headers */, - E0377CE7F7C2101F3D5BE001EFCABE4D /* PFACL.h in Headers */, - 6378CF7EDB22FBB77D96DEBAA2552517 /* PFACLPrivate.h in Headers */, - 1DA04B4E7477A3C6ED4E64EB100997C3 /* PFACLState.h in Headers */, - 3535E9FC786DCF87B160127BE2ECB0BD /* PFACLState_Private.h in Headers */, - CF9126AE266CD109325E9779E8989D52 /* PFAlertView.h in Headers */, - 055D430D3080E69525A1CB4E226AE6AD /* PFAnalytics.h in Headers */, - E4A9466EF1DE5966768709FD1DEBC244 /* PFAnalyticsController.h in Headers */, - 4D7202CCD20BEE8BD04BB17D3D304AF2 /* PFAnalyticsUtilities.h in Headers */, - 78D9A4A9E2EB39C92A78BBA7A7C2892F /* PFAnalytics_Private.h in Headers */, - E387EBB7F209061962244F91C82014E1 /* PFAnonymousAuthenticationProvider.h in Headers */, - EEB02FC19C729B08DC6E52A58694A62E /* PFAnonymousUtils.h in Headers */, - 0567E8CB52A88D784048A608C7DFA3AD /* PFAnonymousUtils_Private.h in Headers */, - 5DC9D0A553754F872A6C6EDF5B8D51C3 /* PFApplication.h in Headers */, - 9E5744C6E239498952CB6C2AB7AB8573 /* PFAssert.h in Headers */, - 947A48148E5A557DFCFE1524486F0748 /* PFAsyncTaskQueue.h in Headers */, - 36EC255A02DFAD503AE5742DB66EAFBC /* PFBase64Encoder.h in Headers */, - 27EAB5CE83D76D32110761949B978720 /* PFBaseState.h in Headers */, - D801E515C96AD14143FED389A6D20831 /* PFCachedQueryController.h in Headers */, - C44757A96D797254C3E4471D7DBC7A12 /* PFCategoryLoader.h in Headers */, - DF153F159E0E2D991A092293D9A30CC1 /* PFCloud.h in Headers */, - C7DF7CFB90482868050B69FEF4373317 /* PFCloudCodeController.h in Headers */, - 5935304BB5A45EE7BF047CD984EBFB73 /* PFCommandCache.h in Headers */, - C0CD48B4F4A7ADE0E8F3763065D58B67 /* PFCommandCache_Private.h in Headers */, - 75E51F885183754FEFE576DB32781B13 /* PFCommandResult.h in Headers */, - 8A30DA243ACAA1A89F305D1AB23B2428 /* PFCommandRunning.h in Headers */, - 6C39436633D2F7986ED9FAE8CF87F494 /* PFCommandRunningConstants.h in Headers */, - 18B67D18CD4B27B89C1FB0B4C6E33EDE /* PFCommandURLRequestConstructor.h in Headers */, - DF6048F6B377ED247B79AFCC8B69621E /* PFConfig.h in Headers */, - 4EFB6054A4319D663B1AB4BA681A03B9 /* PFConfigController.h in Headers */, - 5555C4B8729021B6051BD58E96BEA0BD /* PFConfig_Private.h in Headers */, - 186FCA5BEF75F30B6A368BD3819F22E7 /* PFConstants.h in Headers */, - E743F3901CB2167FBBC28F2054A34421 /* PFCoreDataProvider.h in Headers */, - 83B4223F07E9DB236E15C2F3242CF2E0 /* PFCoreManager.h in Headers */, - 0F0B220351D06ECFB17DFF2EC338D0CD /* PFCurrentConfigController.h in Headers */, - B642AE3024EF50F194A5BC047EECEB71 /* PFCurrentInstallationController.h in Headers */, - 5615E187912379539C73AEBDCBB69AB4 /* PFCurrentObjectControlling.h in Headers */, - 7FA3F9143281C5C42D3CB8AD7442887A /* PFCurrentUserController.h in Headers */, - 3BEDAF0982149FC43350CD19D854DB44 /* PFDataProvider.h in Headers */, - 40E084818025A5B88AA7BDBFCA7F3D3D /* PFDateFormatter.h in Headers */, - 901C26F961EF48B307C4F82285380A0F /* PFDecoder.h in Headers */, - E518D12AF66FE6BF2AA57FCECF4C5C09 /* PFDefaultACLController.h in Headers */, - A1EF906190CCCF5E5F778921BB29D04D /* PFDevice.h in Headers */, - 4B9E5C8C8330A9073755CD7BA0DE94E1 /* PFEncoder.h in Headers */, - 9AEAE527EF5775E4554D7E8A48D2431B /* PFErrorUtilities.h in Headers */, - 7CB69E68D976DE206E09BC7743792BA3 /* PFEventuallyPin.h in Headers */, - E19D243F4ACB365A65A5BA008694E4B6 /* PFEventuallyQueue.h in Headers */, - AD2E8FF8584E338AC854AD47224895B0 /* PFEventuallyQueue_Private.h in Headers */, - 57F507F10A1BB85EA45DA90E31045D4C /* PFFieldOperation.h in Headers */, - F5D54F9BEFE298257F9134EA893B5C8D /* PFFieldOperationDecoder.h in Headers */, - 8DC7C47A7CC5950EC009B5618371C48E /* PFFile.h in Headers */, - 31E55D99949F54193700F33C7FD34DA6 /* PFFileController.h in Headers */, - 4FC6DEBE5ABA5E9CBABDD1DBC3BBFB04 /* PFFileDataStream.h in Headers */, - 638A30D79CD262C8C3291933357B2135 /* PFFileManager.h in Headers */, - 1EEB8D22B9718EDB6CB1C314B3EB38F4 /* PFFileStagingController.h in Headers */, - F085F0D853691CCA544D3D2152B34018 /* PFFileState.h in Headers */, - 99136C89548B177E60DD34A91B5ED192 /* PFFileState_Private.h in Headers */, - 6C073E3CAB26DE3EC33FE490DF02FC8C /* PFFile_Private.h in Headers */, - D8077B11B5F174C1072201BB8D597B08 /* PFGeoPoint.h in Headers */, - DE1227CB453C1C67BEDF44DC54EF1BAA /* PFGeoPointPrivate.h in Headers */, - B038216F0632C36A1370F7C881A09001 /* PFHTTPRequest.h in Headers */, - 72A2AA035FA76AFDB9F2081C1E6E9617 /* PFHTTPURLRequestConstructor.h in Headers */, - C22396DE37E095718482FAC4D8D796D1 /* PFHash.h in Headers */, - A6128B349568C6B56EF5FD2C22D0D98F /* PFInstallation.h in Headers */, - 629633A8DDB4D329242214C1C6EA85A5 /* PFInstallationConstants.h in Headers */, - B4C1CDF486FF24005182DE7A7BD1DF95 /* PFInstallationController.h in Headers */, - 761655FD6EAFDF34F4BB6B5024A9950C /* PFInstallationIdentifierStore.h in Headers */, - C91D09FFB740401B045D4AECAC5C997E /* PFInstallationIdentifierStore_Private.h in Headers */, - 10812A750A13684F4C638D481A7B5234 /* PFInstallationPrivate.h in Headers */, - 85F948A79ED6DA01A4AD4F8C2BFF690D /* PFInternalUtils.h in Headers */, - 65C3A46AFEC65C14F9A669B9E2171ABA /* PFJSONSerialization.h in Headers */, - FBB9982DF9350395B60873C7EBC35687 /* PFKeyValueCache.h in Headers */, - 3E422E5F9B8E3F76E4C900039E54EE29 /* PFKeyValueCache_Private.h in Headers */, - B69E68EBE8B2C725353EEB0041CBDBF0 /* PFKeychainStore.h in Headers */, - 6A5F690E541D3B2BFCDFB9EC94F1AA73 /* PFLocationManager.h in Headers */, - 1B15C523B8D5B8B3661CEA14DA2BE238 /* PFLogger.h in Headers */, - 7196C7AF34A6CEA821271AD022AB457C /* PFLogging.h in Headers */, - 1BCB49287D526538FE27C92495A7C7C9 /* PFMacros.h in Headers */, - A2C9CDC9EF3AFD417433B15BD6F3ED5C /* PFMultiProcessFileLock.h in Headers */, - 2CF3E58396AB85B06C5F11298F43FE91 /* PFMultiProcessFileLockController.h in Headers */, - 2499A62D47B33872BF0DADA0BAC4BD47 /* PFMulticastDelegate.h in Headers */, - 24B5B7B9820114759F93C6FD6A713CD4 /* PFMutableACLState.h in Headers */, - 058502343AC3618129AC9439EA85335A /* PFMutableFileState.h in Headers */, - BA36862D7FCDDEF2FF3F44E4FCF1FEC7 /* PFMutableObjectState.h in Headers */, - D7EC19C57A7BE418E80D9B4321310DD0 /* PFMutablePushState.h in Headers */, - 5489C4B47D41585D9CD38481265528D7 /* PFMutableQueryState.h in Headers */, - B7EAF0146BF7255844B4382778C1DCC3 /* PFMutableRelationState.h in Headers */, - ADD444672255653A7B0DE3C76FE9DA9B /* PFMutableUserState.h in Headers */, - 244417641E77C9E95C92078E54777D85 /* PFNetworkActivityIndicatorManager.h in Headers */, - 9EED9C8A845D06EE53C1403FBFB196BF /* PFNetworkCommand.h in Headers */, - E23601D8BB9D0538FAD5F3DAF6251F76 /* PFNullability.h in Headers */, - C2E44B209546E7866532737094B259F1 /* PFObject+Subclass.h in Headers */, - 8214C48967620CE6A0CDE08A672A35E1 /* PFObject.h in Headers */, - B62A1615577F1DF5C0987D382AFD154B /* PFObjectBatchController.h in Headers */, - 118BAA009D3D59B3EAE79710C991E16F /* PFObjectConstants.h in Headers */, - 20CE99207001FC9C10E242287C253996 /* PFObjectController.h in Headers */, - 9AA96E4A9687620F8C196ED2FABBA5DC /* PFObjectController_Private.h in Headers */, - 8A8C8E47DA7D2D2F3EB55930A84F9DE5 /* PFObjectControlling.h in Headers */, - 7C4A3111F3BA07CC804F53B11B85F91A /* PFObjectEstimatedData.h in Headers */, - 18B651969BB7CBCC4E2B38F1631FF6E2 /* PFObjectFileCoder.h in Headers */, - 8019DF40B2B2165FC5EB24BD6BB5C320 /* PFObjectFileCodingLogic.h in Headers */, - 298E48D1F7EE66DBD2CE7B1081DAAAB3 /* PFObjectFilePersistenceController.h in Headers */, - 7A19D5E1912F1F0AC4DB6BAB2E818B19 /* PFObjectLocalIdStore.h in Headers */, - 416DEEABAAEF3F52A524963C6185F128 /* PFObjectPrivate.h in Headers */, - A341920891C64694F15002A14274DBD0 /* PFObjectState.h in Headers */, - 8E4E90FFCA09F9F8CBB4B3B02624C46A /* PFObjectState_Private.h in Headers */, - 8503FD13A1BF53A7A91C6FC7FAFA90F9 /* PFObjectSubclassInfo.h in Headers */, - EE2A8C0E8B415EC8E006AC7B1F243C65 /* PFObjectSubclassingController.h in Headers */, - 3C401E23A540BDCC225B5C87F2069A02 /* PFObjectUtilities.h in Headers */, - DC765E1CE8C9208AB476C0138BEA41BA /* PFOfflineObjectController.h in Headers */, - 40B66FB31F7627FB33B911C4E2AAA916 /* PFOfflineQueryController.h in Headers */, - 28A7C073D31DDF6C59967A931BD5766C /* PFOfflineQueryLogic.h in Headers */, - C8E94A5768C9FEEDEEBE2D9513D7BD36 /* PFOfflineStore.h in Headers */, - 991B10CE642953BD125D956E15532841 /* PFOperationSet.h in Headers */, - C35492542D744906958BA9387A6DEC2C /* PFPaymentTransactionObserver.h in Headers */, - 36DA904B38775E96B9F00B1F60A4EAB8 /* PFPaymentTransactionObserver_Private.h in Headers */, - 149FA64D0DB7931320E1337D5DF51D95 /* PFPin.h in Headers */, - 63C69E993C498EA39DD1E26BC8919A39 /* PFPinningEventuallyQueue.h in Headers */, - 279E99356D07335E887C39DB5C0E5370 /* PFPinningObjectStore.h in Headers */, - 55D282FE0C9269BA1E05D31AF560DB2D /* PFProduct+Private.h in Headers */, - 1B3D2F66E11EACBEC93D5138DDA5991E /* PFProduct.h in Headers */, - FA534A151F3B55AB2E7EA80B4C522BB0 /* PFProductsRequestHandler.h in Headers */, - 7E15C7398334F43931603A970C332DB9 /* PFPropertyInfo.h in Headers */, - 766CF09C4050A89F6FF611B19D3AEA11 /* PFPropertyInfo_Private.h in Headers */, - E531951BF8A2CDC0A1865EF2CA115D46 /* PFPropertyInfo_Runtime.h in Headers */, - 7469D8A552A998387B59B30A9AD71F68 /* PFPurchase.h in Headers */, - 449AC60A131638EEEA3F97F931C03891 /* PFPurchaseController.h in Headers */, - 1421591EB34905B0745B67D11682989B /* PFPush.h in Headers */, - 543DE88D4CFC0102FF1D16C6718032A6 /* PFPushChannelsController.h in Headers */, - 8DFE18ED9D0679395D555A5D2E1D6A61 /* PFPushController.h in Headers */, - 9AFC0F0B06328DD11F5A269FC9D061D4 /* PFPushManager.h in Headers */, - A04091E4AE50036E9788A73F231A5E7E /* PFPushPrivate.h in Headers */, - 41521CD3844A812C3397D6564CA06416 /* PFPushState.h in Headers */, - 6DC9DCD2E199EE08136DFB9D8BBE17BF /* PFPushState_Private.h in Headers */, - 9603828D1EE5DFF8E2FCC43A612C2F6E /* PFPushUtilities.h in Headers */, - C68996C6D2A15E462A0B94666E1B17E3 /* PFQuery.h in Headers */, - F5189CA8C80BB857AE36C733A89A5DC8 /* PFQueryController.h in Headers */, - 14AFCA315D7308DDC8D506B3F74FADF7 /* PFQueryPrivate.h in Headers */, - 434E79FDEC38451A64203A9A367D52A7 /* PFQueryState.h in Headers */, - 91F2E7E0881F466BDF8CDDC26C780CFA /* PFQueryState_Private.h in Headers */, - 3BC9D144F933784273CB48ED48DEEDE1 /* PFQueryUtilities.h in Headers */, - 16CF2BCA2E368236EF475D6362A13491 /* PFRESTAnalyticsCommand.h in Headers */, - 27B935CBBBBEFD1F68871D79F7631F58 /* PFRESTCloudCommand.h in Headers */, - 36A0EDEF8443BF059C5DB307F7965A1F /* PFRESTCommand.h in Headers */, - 60E2A7A43AE9D6EACF4B5E3AD4FBFA04 /* PFRESTCommand_Private.h in Headers */, - C6C48576B6391837714FCEF3440243AE /* PFRESTConfigCommand.h in Headers */, - 405FB9DDBD091D87674AF85C7B194D5A /* PFRESTFileCommand.h in Headers */, - D56CAFD0B02331EB90CE5F19010B827A /* PFRESTObjectBatchCommand.h in Headers */, - A7A4C7B12C8EBCD1DD511612DF60BC62 /* PFRESTObjectCommand.h in Headers */, - 0A963324CC60CAA719E82B65A42F8F92 /* PFRESTPushCommand.h in Headers */, - 30FFBDB396C82253175D828DA2BEA835 /* PFRESTQueryCommand.h in Headers */, - F5A533001D5694222A42A7E5733F70D7 /* PFRESTSessionCommand.h in Headers */, - FBE5198936C677351A1994966CFB0E0E /* PFRESTUserCommand.h in Headers */, - 1E924C4848F63BBFC1FCF597FC9D5FD2 /* PFReachability.h in Headers */, - 10B6EC5F1F87C64ECBB431E75CBFD609 /* PFRelation.h in Headers */, - A588DBAF2FF022F204CD18AA9E6FB568 /* PFRelationPrivate.h in Headers */, - 9736106D305E2FACC163BE070DC6B12E /* PFRelationState.h in Headers */, - EFAE8EEDB4F6537B805A0D3FC7F794E5 /* PFRelationState_Private.h in Headers */, - E5EB368969123151E92F49962A1A3FCB /* PFRole.h in Headers */, - EEC3CE2CB2428CE7EEAF37BF2E0187AF /* PFSQLiteDatabase.h in Headers */, - 69067BE779C91E991C908BA33C234ACB /* PFSQLiteDatabaseController.h in Headers */, - 26BC591287F171CDC227D4C715DE0BFD /* PFSQLiteDatabaseResult.h in Headers */, - 144AF01BA8F6AC27B465052C4C1F4A63 /* PFSQLiteDatabase_Private.h in Headers */, - 4C554340F9C8D98F3D3DF059FF829952 /* PFSQLiteStatement.h in Headers */, - 22028A0623B440907DBA76FE0F64B6E0 /* PFSession.h in Headers */, - EFCAC58E3F3A4442F400FFC8626AD9B9 /* PFSessionController.h in Headers */, - FDE3635ACA000137F91099FB8A77B904 /* PFSessionUtilities.h in Headers */, - 8C29699238F02B904FACC35199216780 /* PFSession_Private.h in Headers */, - B5CFC6CC0CF004E986EEC23557FA0701 /* PFSubclassing.h in Headers */, - B255A029FDCAB0B2E6F6B106AC5BBF91 /* PFTaskQueue.h in Headers */, - 842DB9C51BA822F734AA6A66EBFD61C8 /* PFThreadsafety.h in Headers */, - 469AFCA6DF69037CC22B9353A5840D2E /* PFURLConstructor.h in Headers */, - E880F7F33114312DF66A4E88E617C825 /* PFURLSession.h in Headers */, - E28D3D6AE3281331EFE0B93FB91853F6 /* PFURLSessionCommandRunner.h in Headers */, - 606DAFEA41DB4A57A32229A007CAE7F4 /* PFURLSessionCommandRunner_Private.h in Headers */, - 650C59C74ED1EB13FF81B3AD92EB75A5 /* PFURLSessionDataTaskDelegate.h in Headers */, - 9F2809547901C1650E2A6E3F1F11982C /* PFURLSessionDataTaskDelegate_Private.h in Headers */, - EC1B42BDF93A2565BCCDE2A014286022 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, - 77C37F47F9E54490AB397A6C560DF60C /* PFURLSessionJSONDataTaskDelegate.h in Headers */, - E8608D5E7A38E5A61282E3CF64502D18 /* PFURLSessionUploadTaskDelegate.h in Headers */, - FB4C49FBC327F28CB47026B0E290BE1A /* PFURLSession_Private.h in Headers */, - BA1F5D0A6C8651ECC8F39A20205C2782 /* PFUser.h in Headers */, - F394B0E3DFFC7734AB5051D1A5F4D68F /* PFUserAuthenticationController.h in Headers */, - 7E150D7DB4B83C1DBCCFEFE86C047020 /* PFUserAuthenticationDelegate.h in Headers */, - 1D5C062D011FA396D6BD0652197BC3D9 /* PFUserConstants.h in Headers */, - 562F0029981DB78EAF4891EFE5DD13A6 /* PFUserController.h in Headers */, - F120A50FD7FCA9658BBBDBA65EA9B1E2 /* PFUserFileCodingLogic.h in Headers */, - 74036443FB7468F873D7086A1E47B948 /* PFUserPrivate.h in Headers */, - 85320661106B07533362C37B029054F3 /* PFUserState.h in Headers */, - D4F7F5F0D98F002042E4891CD1DBFD5C /* PFUserState_Private.h in Headers */, - 9BE55D00A42730AF0221D2294926610C /* PFWeakValue.h in Headers */, - A235BB018AD7FAAE25C4A295FCC5A8BD /* Parse.h in Headers */, - B54F3FF3E7274202D9C8F1E4AAC09873 /* ParseInternal.h in Headers */, - DD0CF6B6282013FA4E3830D6EC0F409A /* ParseManager.h in Headers */, - BFA8D7680070FE36E35FDA31CD18B68A /* ParseModule.h in Headers */, - 4954EF0625F842D1C956DA967DE52064 /* Parse_Private.h in Headers */, + AECED6B3110DF267738AECF5E1F6A7F0 /* UIView+YALConstraints.h in Headers */, + 1280D553590D730A67E0F99C1B65F136 /* YALContextMenuCell.h in Headers */, + 9BAE39B1C12DF4038483AD24F4AEE5E1 /* YALContextMenuTableView.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2048,77 +2127,294 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - A321610E40E1146C0D88FBC300593C46 /* Headers */ = { + 859986280FBF72A1529643EABE37EEEC /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 96397AB59008EA7392019A2EB9BCFE53 /* AFHTTPRequestOperation.h in Headers */, - 44EB9612F4CAF48C8B63696822A2A3BF /* AFHTTPRequestOperationManager.h in Headers */, - D3D1A0ACF80E0131F85BDE9E7D7E6303 /* AFHTTPSessionManager.h in Headers */, - 65BBE10D6AD162A261BD96636B2810CA /* AFNetworkActivityIndicatorManager.h in Headers */, - 013AE4595BF56A559DD3CA81669B0D67 /* AFNetworkReachabilityManager.h in Headers */, - FB0A5366764317E476526B1CCA42EB4C /* AFNetworking.h in Headers */, - 33D4081B410C93515F3AE2B05B1E6FEB /* AFSecurityPolicy.h in Headers */, - F412A6DC753D4FF45CA2663718823E3C /* AFURLConnectionOperation.h in Headers */, - 93DF5CCBA43C09201E435ED14A2A0961 /* AFURLRequestSerialization.h in Headers */, - EA2FD9A751EBAF09C8947C9BE65B8195 /* AFURLResponseSerialization.h in Headers */, - 2AE2ADB09903F3B39869810739754118 /* AFURLSessionManager.h in Headers */, - 2E135CA6B413C0D9809F7BC1D11822E1 /* UIActivityIndicatorView+AFNetworking.h in Headers */, - CA9B7B7B520E355A2E23B0D0EB8302A9 /* UIAlertView+AFNetworking.h in Headers */, - 928177B9981A0BEC3E7CDCDA26DABE9C /* UIButton+AFNetworking.h in Headers */, - CBE51D66F657DC502B81442C46F7220B /* UIImage+AFNetworking.h in Headers */, - E32C0C8E76B2398A462F2F44466C88C1 /* UIImageView+AFNetworking.h in Headers */, - AA14B649447F0CCDEE28838153CB8ED7 /* UIKit+AFNetworking.h in Headers */, - A0C4E0AE86CBEEDB70512630A54C1A74 /* UIProgressView+AFNetworking.h in Headers */, - 524D6BEE8260BC395116B1055A619C4B /* UIRefreshControl+AFNetworking.h in Headers */, - E4AEC74A16A03117C42C961DF1C65848 /* UIWebView+AFNetworking.h in Headers */, + D99ED871F816595C6F2283257F5C95D5 /* AFHTTPRequestOperation.h in Headers */, + 24DE67F780C71ADDD3ECD6654317FE72 /* AFHTTPRequestOperationManager.h in Headers */, + 6F082EA1396F168DFB2C6F030293EB84 /* AFHTTPSessionManager.h in Headers */, + 5C586D9F95CFEDF896F447BFC98AF4C3 /* AFNetworkActivityIndicatorManager.h in Headers */, + 5CE8743FE0F90E511A4C84E0995D1397 /* AFNetworkReachabilityManager.h in Headers */, + EC352BDDF7551229C44577334C79BF3D /* AFNetworking.h in Headers */, + F2C4F6DEE6564743D319F05B2AD6AF6D /* AFSecurityPolicy.h in Headers */, + AD28999B0D50D3B103822C3AA659D6D9 /* AFURLConnectionOperation.h in Headers */, + 8B1BD5642BA0A15B690E677651F808D3 /* AFURLRequestSerialization.h in Headers */, + 69E78077EDD72A6AA494222FD75922C7 /* AFURLResponseSerialization.h in Headers */, + 65DC1218144FBCE4EF1FD774A527E3C8 /* AFURLSessionManager.h in Headers */, + C6BF85B2D68FF8596833EF3EF1BD50FD /* UIActivityIndicatorView+AFNetworking.h in Headers */, + D6B2773184F80196F49DF87870AD4FB5 /* UIAlertView+AFNetworking.h in Headers */, + 0C25D8A64EB9575F6EE8297DDB7E28D6 /* UIButton+AFNetworking.h in Headers */, + 443BCE5C454E56FCA662D4F1F149CBB7 /* UIImage+AFNetworking.h in Headers */, + 8C611929D69DA8FDDD0C2D98B9E2FC02 /* UIImageView+AFNetworking.h in Headers */, + CA324992089BB916C0BEC4C99E3FF138 /* UIKit+AFNetworking.h in Headers */, + E8BC741F9C816AB82DA07FF26AABEFE6 /* UIProgressView+AFNetworking.h in Headers */, + 69240AA871D54B8545057A3076CE4093 /* UIRefreshControl+AFNetworking.h in Headers */, + 9BB97D7622FDB67B314F93646C6A21A6 /* UIWebView+AFNetworking.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - EEA47D4D68E6A315D022E0558B2446D2 /* Headers */ = { + AE190F9D831F064F4EF61868C80F1E60 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - E22F49523078CB46DB077CBF54C73202 /* UIView+YALConstraints.h in Headers */, - B8B9F34E2BBC7F8F7715F6851457261E /* YALContextMenuCell.h in Headers */, - 9596BB57B15E0F32ADC0E88D588DB70C /* YALContextMenuTableView.h in Headers */, + 229C97335867E932CB618AFF2AD68FA1 /* BFTask+Private.h in Headers */, + 2BA4EE91EE2A2D2392A549A5D0265E02 /* PFACL.h in Headers */, + D1EF657035114EEF42F10196C800AAB0 /* PFACLPrivate.h in Headers */, + ED04F6FB01031FD159F530193AE75C79 /* PFACLState.h in Headers */, + 9903DE555B85044677A815ACC47B5685 /* PFACLState_Private.h in Headers */, + CE8ED072C6640F4DC793DE5F3CE674A1 /* PFAlertView.h in Headers */, + CD005BD069DE3A3806BBE81F6B4A4F20 /* PFAnalytics.h in Headers */, + 7D12660030E37B329BD37158B4BF8245 /* PFAnalyticsController.h in Headers */, + 819642514BB29D64B2FF0C38CC0B797C /* PFAnalyticsUtilities.h in Headers */, + C48FB5CC8A114D5BBFA5B5C6D2C6B7CD /* PFAnalytics_Private.h in Headers */, + FC7AD9CD6427562338E316F7D22C6CF5 /* PFAnonymousAuthenticationProvider.h in Headers */, + 03A6F38CA14AD317B341884170C3BB7D /* PFAnonymousUtils.h in Headers */, + CB8894ACF0D1C6DF4BFDC392C293F25E /* PFAnonymousUtils_Private.h in Headers */, + BB111D0ED255D3DC41C59A5EBFAA3660 /* PFApplication.h in Headers */, + DF8191415D0D1255212AE2013F862152 /* PFAssert.h in Headers */, + 1AB31BD52213E4929644D1AA98D1448D /* PFAsyncTaskQueue.h in Headers */, + BD9F08D593AA75F289F00EE82458F3F9 /* PFBase64Encoder.h in Headers */, + 59DBB816A81FD1511D1E38EC0CEEEBB6 /* PFBaseState.h in Headers */, + 1083B349581427A54BEBDAAF8F3F79CC /* PFCachedQueryController.h in Headers */, + 12F7F6FF549BFF3F9E125CC05FFDE06A /* PFCategoryLoader.h in Headers */, + 2BA85187131ECA5CF5B3C9339913E5FC /* PFCloud.h in Headers */, + FBB54F353706B4761D4C2BBCDE0D3DEC /* PFCloudCodeController.h in Headers */, + EB003F3813D731CCCC4EDE62A21258ED /* PFCommandCache.h in Headers */, + F29600110489E45471884162604FD700 /* PFCommandCache_Private.h in Headers */, + D24AD1C1A16875A09867EFDB66DD7A5C /* PFCommandResult.h in Headers */, + C5FA827AFA2784D7FB156DBAFD92012E /* PFCommandRunning.h in Headers */, + 44CBCCBCF7F96491E4FB42CED4E75332 /* PFCommandRunningConstants.h in Headers */, + 1A199A539421FD9EF267C20C58B80BFD /* PFCommandURLRequestConstructor.h in Headers */, + 0D13A6CE3055797D395FB3B1432F8F0E /* PFConfig.h in Headers */, + 878A11C8556D40E0F2D786C85E334456 /* PFConfigController.h in Headers */, + E99A53E0D4AD3D044F2A724C8906C655 /* PFConfig_Private.h in Headers */, + 1BD80BCC808E7E9643CC37C4AA3ADDFC /* PFConstants.h in Headers */, + BE22EB1A8780D81AABB9D2CD0CEA8E18 /* PFCoreDataProvider.h in Headers */, + 40D2ADCF0128DEB096B46905667E4E9F /* PFCoreManager.h in Headers */, + 36ACEFEC11A81EF47DE0C0BFFC6CB97C /* PFCurrentConfigController.h in Headers */, + 9BFE33D3520D009C6EB9E8AB56FE2752 /* PFCurrentInstallationController.h in Headers */, + 2B805B0D9C82263BED05712F6F61F508 /* PFCurrentObjectControlling.h in Headers */, + 0C49F0B3FD4736F8E75C2B6BF4CBB182 /* PFCurrentUserController.h in Headers */, + 3B6B89143DF62DF0EC2889D8E22D7E12 /* PFDataProvider.h in Headers */, + FB00925A23D5B4AE5B41E33B5FBD055E /* PFDateFormatter.h in Headers */, + 28EF03109A91A0399E7ED7DD0DCEC43A /* PFDecoder.h in Headers */, + ED75CE5EE2F7C992A5186614070AEC5D /* PFDefaultACLController.h in Headers */, + 97A58492910A00B0B6A1149CB7B81FF7 /* PFDevice.h in Headers */, + B93D433EE1E23B2A4114703E47EE6F7A /* PFEncoder.h in Headers */, + 18A8BC9861EDA4C6869FC91964FA284A /* PFErrorUtilities.h in Headers */, + AE613AD929239B7E4D5009D4AE5D3944 /* PFEventuallyPin.h in Headers */, + 3824CB594AD78B77B5FB2FC04D839958 /* PFEventuallyQueue.h in Headers */, + 2585D2B973EDD9644622A4C685DC746A /* PFEventuallyQueue_Private.h in Headers */, + 81E1A28345F03D19813EF682006BC6C7 /* PFFieldOperation.h in Headers */, + 19A8A885F0AD8ABBE6397819787BA1A8 /* PFFieldOperationDecoder.h in Headers */, + 84272DB1EB4ACEB4D0BB01CBBF3B9978 /* PFFile.h in Headers */, + 02D90891E401812590EFB1B7FD947312 /* PFFileController.h in Headers */, + 37CEB19E87B3AC3323BBD2E66B42C190 /* PFFileDataStream.h in Headers */, + 9D84517F42EDA4E47A670724BEE974C3 /* PFFileManager.h in Headers */, + E23EAA43A1BBCD8353958BAF80880F44 /* PFFileStagingController.h in Headers */, + 728A2994B680379A6073F0EAF3197B09 /* PFFileState.h in Headers */, + 097B901143156E3D41E99BE3AAF835EC /* PFFileState_Private.h in Headers */, + F68AF78D542CBBAB1379651762D77220 /* PFFile_Private.h in Headers */, + 09B6D79E22DEA5ADF5509786C8710E80 /* PFGeoPoint.h in Headers */, + F5F8F81CDA532191D7DCCB020E9CDCD0 /* PFGeoPointPrivate.h in Headers */, + D08B147823BE4AD36715360307952DEA /* PFHTTPRequest.h in Headers */, + B43AAF16FE9A853D23B3997FED1D67C3 /* PFHTTPURLRequestConstructor.h in Headers */, + 648E7747FB62EEEFE96BD5622128F170 /* PFHash.h in Headers */, + 5FC02173813B41B3D99A1856EC7B340B /* PFInstallation.h in Headers */, + F1EB5D28E0347730C01E1C9F101A167C /* PFInstallationConstants.h in Headers */, + AE61BE4F170E46BCA8557D4BA4CD06A4 /* PFInstallationController.h in Headers */, + EF01EE384D79A1068581524113443FFF /* PFInstallationIdentifierStore.h in Headers */, + 9FC0A759B553E4C1DA3D0F5B50ACEE0E /* PFInstallationIdentifierStore_Private.h in Headers */, + 87C2F80153CA8A6BD8526B7DB9F4C1B8 /* PFInstallationPrivate.h in Headers */, + 7CB520A7F93480BCCE6ED3EAE4D53EAF /* PFInternalUtils.h in Headers */, + D9E62EB34600F4CA51ACE19BE7C65AF7 /* PFJSONSerialization.h in Headers */, + C6DAC0A70B2D4465FE543E1030E497E5 /* PFKeyValueCache.h in Headers */, + B01375E6D33FF39CFC3AE8CB7D70AE2F /* PFKeyValueCache_Private.h in Headers */, + B09E3CFB154075BCFE6AEA5F5D9EE8F5 /* PFKeychainStore.h in Headers */, + 676C6E38537C4802051691D8056EBE41 /* PFLocationManager.h in Headers */, + DA46F604268312CA6BC6BA3CCB990411 /* PFLogger.h in Headers */, + 66271ACDD8C7FC27215842A9656C1088 /* PFLogging.h in Headers */, + 33DF104A201E932802169E493F3AEC0A /* PFMacros.h in Headers */, + ECCDF1B41916BF0EAAA0A8CEB0F54B5B /* PFMultiProcessFileLock.h in Headers */, + 48885F40AD8BD0D697CE625FBD2E2E21 /* PFMultiProcessFileLockController.h in Headers */, + 42B46BB8EB49882AEE36BB5575578EC4 /* PFMulticastDelegate.h in Headers */, + 497D21FDF4A360CB97A439754143062F /* PFMutableACLState.h in Headers */, + 49C0D0A6E99F8649034F787477573B57 /* PFMutableFileState.h in Headers */, + 19EC4D553FB816F1000C41CF1051066B /* PFMutableObjectState.h in Headers */, + 4D925619B81D08AC5E84925C79BE5A59 /* PFMutablePushState.h in Headers */, + 92D43075C24E2442F4E3AD7C4DADBDC5 /* PFMutableQueryState.h in Headers */, + D33372B006CA340C5A4A54110B69427B /* PFMutableRelationState.h in Headers */, + EBDA959314C42ACA8FF53848015B383D /* PFMutableUserState.h in Headers */, + 67469D5ADC9D1553949D7916A288E8EA /* PFNetworkActivityIndicatorManager.h in Headers */, + 36CCBAA76E5ED042EBDC5DB0D33BE8A4 /* PFNetworkCommand.h in Headers */, + E4F18F0BD37AC65F868864D1E55B7B60 /* PFNullability.h in Headers */, + 12905F13464787C5271CC5D9FA18C667 /* PFObject+Subclass.h in Headers */, + 5C25A0B2AE2D5A04ED1AA575D9D517F2 /* PFObject.h in Headers */, + 46649DBE5BC69B649093125569635AC6 /* PFObjectBatchController.h in Headers */, + 42F4541D75A4F6BA407EB7096B1092F2 /* PFObjectConstants.h in Headers */, + E243E0679F630A2E3F9F4B7B24191D8D /* PFObjectController.h in Headers */, + E70727B793EBD607F1BE486B664CE33D /* PFObjectController_Private.h in Headers */, + D4F8D5854AD4E10694B8543B01904E4A /* PFObjectControlling.h in Headers */, + 4F95459B59771365653E226A2D9EBF89 /* PFObjectEstimatedData.h in Headers */, + 9C967AB082218D0703E71E7522D2DC20 /* PFObjectFileCoder.h in Headers */, + 892089BB4371D4B36ADC6A000613CB17 /* PFObjectFileCodingLogic.h in Headers */, + 2C7C264D41F9220DEB49C3A1B180B546 /* PFObjectFilePersistenceController.h in Headers */, + 2A6D34424562F80CD74C3B2BAC7172D5 /* PFObjectLocalIdStore.h in Headers */, + 8901469CC5AB2228CA972762BC61D3B7 /* PFObjectPrivate.h in Headers */, + 5EA2BCB87865A7A04C48507EFBBC12DF /* PFObjectState.h in Headers */, + 9DFB0B43F8AD5124869FA8B0C49518E6 /* PFObjectState_Private.h in Headers */, + 67D2F6E5A3216E43D97B63E771F06DD6 /* PFObjectSubclassInfo.h in Headers */, + DECE9EC538AEE7DBFA4F88A31DC92AC8 /* PFObjectSubclassingController.h in Headers */, + 3E9FFD7FDD05C6B3A8181F997D776BBA /* PFObjectUtilities.h in Headers */, + 253E5BAE428DD70BB381435C235FE16E /* PFOfflineObjectController.h in Headers */, + E5E316F403D65FF52D02A0665082C101 /* PFOfflineQueryController.h in Headers */, + A2473BDD6B4DF7982A694061166A7FD9 /* PFOfflineQueryLogic.h in Headers */, + 2FA63B393DD60EC8FD23E587F04E482D /* PFOfflineStore.h in Headers */, + 88D9933BE4B375EB4C69530BC369E350 /* PFOperationSet.h in Headers */, + FF7441F3F46A777068C3E1ED9DB6988C /* PFPaymentTransactionObserver.h in Headers */, + 5E45AE079AC451D88127C79FEB659466 /* PFPaymentTransactionObserver_Private.h in Headers */, + 31996DCA29D4E878B0583CFF567CA0CA /* PFPin.h in Headers */, + CB41F2C692487CE5EA9C680B4C3CF354 /* PFPinningEventuallyQueue.h in Headers */, + 46D0E3242C28B43577C2AA06E6FBE718 /* PFPinningObjectStore.h in Headers */, + F9D22128094FED62CC689A0DF077D742 /* PFProduct+Private.h in Headers */, + C244270D3D5EA67A2B254B493FC1E918 /* PFProduct.h in Headers */, + 841DB4F4869F2D4E6F6F53CC10CE3B3A /* PFProductsRequestHandler.h in Headers */, + DF24C56A224FE7ECAB1EDB1657EE6FB9 /* PFPropertyInfo.h in Headers */, + A352DD166FE10E5DB1BFA5A59C2766FB /* PFPropertyInfo_Private.h in Headers */, + A6348F02CCC5CBD996733B7A6BC7B8F8 /* PFPropertyInfo_Runtime.h in Headers */, + 20917DF017F324A8D15F0D9C4D141FA4 /* PFPurchase.h in Headers */, + 65DC0149C069D90ECFEBF56941250C67 /* PFPurchaseController.h in Headers */, + 6760D65BFEF0A2FEE179CF031B5B5E07 /* PFPush.h in Headers */, + DE961F754007F9A7471D4CF344ABCE82 /* PFPushChannelsController.h in Headers */, + 744CE28FEC63BC838F17C749DD7302A9 /* PFPushController.h in Headers */, + 59C5C4F84FE226A4542348E92177F952 /* PFPushManager.h in Headers */, + 7D40734CC14F03B41F0E88B139689F00 /* PFPushPrivate.h in Headers */, + F4D38EE812AF575E7C62AAC6A8E52540 /* PFPushState.h in Headers */, + 05834B536D3A455ED3798FD75FC72F8E /* PFPushState_Private.h in Headers */, + D414CFD05FE420603C064C7307D13611 /* PFPushUtilities.h in Headers */, + B975E56752236DD4E997D0291C621AC0 /* PFQuery.h in Headers */, + EDEEAA33E39E017A4C68ED263C84AE22 /* PFQueryController.h in Headers */, + 52FDC5383B9B5D2EEEF373E403D77417 /* PFQueryPrivate.h in Headers */, + 5B03265249AD905F4FB6E3DB631658AD /* PFQueryState.h in Headers */, + 35953B553BD925643165F1ACB35878BB /* PFQueryState_Private.h in Headers */, + BAB4F191AD2790A60EF82E7261BEA3D9 /* PFQueryUtilities.h in Headers */, + D9AA4A4142F44327165EBD0F2434C842 /* PFRESTAnalyticsCommand.h in Headers */, + 9B60A3C0A1E286E8398F7595B38C5FA8 /* PFRESTCloudCommand.h in Headers */, + 29E64CEA35638C93186B498049B7E98C /* PFRESTCommand.h in Headers */, + 1640F9FA2671E79FC0BA756063D41D8A /* PFRESTCommand_Private.h in Headers */, + 1138646361F9E460DD21884B0F6DFF9C /* PFRESTConfigCommand.h in Headers */, + F22042889D8469B686198BE4C3C967DE /* PFRESTFileCommand.h in Headers */, + 2621A0600ABC3EB86C65B713B86601BD /* PFRESTObjectBatchCommand.h in Headers */, + E7E9BAE2DCA65E7ABC83BE790E92E20E /* PFRESTObjectCommand.h in Headers */, + 6655468950083AF61524A6275FF9A2F3 /* PFRESTPushCommand.h in Headers */, + 80DCEB3A08253B03FC7474C3CAC072A7 /* PFRESTQueryCommand.h in Headers */, + 0B0292923091FED205120BD5097527E9 /* PFRESTSessionCommand.h in Headers */, + FFACAEE5617305A95FDB73B9E3765B25 /* PFRESTUserCommand.h in Headers */, + 6B0EBE7A376D36F9EFA1331E7F8B63CC /* PFReachability.h in Headers */, + 7EF1C86FE832452F519F51E44434854B /* PFRelation.h in Headers */, + 3B22B3CA89C62E0452385CE2796AF1F3 /* PFRelationPrivate.h in Headers */, + 4638D38DCDF526A476CE05B3F81CCAD9 /* PFRelationState.h in Headers */, + 9A50C636573A1162D6620C5414D09BD7 /* PFRelationState_Private.h in Headers */, + 6A4FB15F0506670406DB87B03ED01510 /* PFRole.h in Headers */, + 1E6A6D284A6252C645194A7DD669B76E /* PFSQLiteDatabase.h in Headers */, + 6D43310BFA5F6AFAB4BE717DE7E9949D /* PFSQLiteDatabaseController.h in Headers */, + 809B4FC22A06B6B83E0282C7672432D3 /* PFSQLiteDatabaseResult.h in Headers */, + B613283A3EA71849002D5B8A87D39CD8 /* PFSQLiteDatabase_Private.h in Headers */, + 46C4231E5E04D67139F9F975246E5DF7 /* PFSQLiteStatement.h in Headers */, + 93986334C9BBABFA5A3090FE9494BE81 /* PFSession.h in Headers */, + 0DB56799333E9A43236FF8CD130F07E7 /* PFSessionController.h in Headers */, + 15D39B2C1708F2F2D00CBC4C37D7D242 /* PFSessionUtilities.h in Headers */, + 412B08BFF6DAFBF18BBBB68A4E1729C2 /* PFSession_Private.h in Headers */, + 49CDC02250754AB9B406C89687DF3417 /* PFSubclassing.h in Headers */, + 55785784D679DD24B00E9A95DF6CCBE2 /* PFTaskQueue.h in Headers */, + 0E6063551D612BD83F5BDE564BB459B0 /* PFThreadsafety.h in Headers */, + 2A47EF83A3F0B843959DC8DA3ABDC4EA /* PFURLConstructor.h in Headers */, + 7ABC7D13EC7F10833D72B1B5ED75102B /* PFURLSession.h in Headers */, + 7FF604BCF508916C20FC96386B466D47 /* PFURLSessionCommandRunner.h in Headers */, + 8EA3C689EDCDEBB6094FAB91A8FF8165 /* PFURLSessionCommandRunner_Private.h in Headers */, + 02A1E68F7CA023CBC64E581A3325EF6F /* PFURLSessionDataTaskDelegate.h in Headers */, + 3CE532D0EA44055EEC7FD1B5A7C27BF1 /* PFURLSessionDataTaskDelegate_Private.h in Headers */, + 7CEA2506323C78806464A4ADCD1A9FE6 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, + 7489C719E388B356406569AE3746E191 /* PFURLSessionJSONDataTaskDelegate.h in Headers */, + 360B21E0EB75AA4B2A34C129E7CF78C1 /* PFURLSessionUploadTaskDelegate.h in Headers */, + 6F022DB58BA290D7E1F34A13D16D19E2 /* PFURLSession_Private.h in Headers */, + 344EFC366CB3853905AAC01462A21557 /* PFUser.h in Headers */, + 6B16EAB0D7C1CA39B78A840EEA86A15D /* PFUserAuthenticationController.h in Headers */, + E87B6C4AD10233A8EF5093E215BE7A4C /* PFUserAuthenticationDelegate.h in Headers */, + E333B27781269607DD5B6237EDF09A12 /* PFUserConstants.h in Headers */, + B88C872B4DC8DBF56B6C9AF592D0A1CE /* PFUserController.h in Headers */, + 3FD03AE3ADAAC712667DE736AE685541 /* PFUserFileCodingLogic.h in Headers */, + 10A29DA15D651C10348F412CAF7756A6 /* PFUserPrivate.h in Headers */, + 1EBD269DC4FE87225B78B3ED0FDA1D0F /* PFUserState.h in Headers */, + E37EEE527BAAFF772206A72DEF75F60B /* PFUserState_Private.h in Headers */, + 38E0B7A70C54C146D6E7800490D59C20 /* PFWeakValue.h in Headers */, + 4E6EC4EE31AFB4E83A925AD0CA54E128 /* Parse.h in Headers */, + 5C0AF4E1346CE2C73EEEE2F76444DBE8 /* ParseInternal.h in Headers */, + 3A4A4FB0FEE8E11FD14800D236F62CE4 /* ParseManager.h in Headers */, + 24D81C37FF895F44D6D4D8C1108EE0AD /* ParseModule.h in Headers */, + 96AD11F17A800AF7904D96EAE89192E6 /* Parse_Private.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - FD580B49C886D584DD55A06F83D112A1 /* Headers */ = { + F73CFFAD226FA8B968BE5BF2EAD51F06 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 3039F75251A2A754A7525EEDBF3907D1 /* BFCancellationToken.h in Headers */, - 9FF02193886279AC96AFB7BB7D21DDE1 /* BFCancellationTokenRegistration.h in Headers */, - EF0657162B6D12AB703D83918C3B36F9 /* BFCancellationTokenSource.h in Headers */, - FC1C0CA9220FCDE5447A43920AB3960F /* BFDefines.h in Headers */, - 0ECD46F443DEFF63C3BCBDC3A75363AA /* BFExecutor.h in Headers */, - E4322DEF695907DD78455D334243FC86 /* BFTask.h in Headers */, - DDC4E7634F0E7C723FF2EF86872FA1DA /* BFTaskCompletionSource.h in Headers */, - C4CF94A0BBEAE79C88C879094C1FF6BB /* Bolts.h in Headers */, - 6D67873D2EDAAB5DDBC501CA69E630C6 /* BoltsVersion.h in Headers */, + DD49064B9FD7B01B1F3E9EDD681A391C /* BFCancellationToken.h in Headers */, + FC81649F3508121AFDC3B469E14C4BE7 /* BFCancellationTokenRegistration.h in Headers */, + DDE7A25B6FDDE44FC58C17F5BF85C2D6 /* BFCancellationTokenSource.h in Headers */, + E03055FBB48E6B94D8AD1FF653005CA5 /* BFDefines.h in Headers */, + 288F78B90BDDF8D2354804F3326D6A9C /* BFExecutor.h in Headers */, + D18540CCAD8048FDB4C2A9918DB92A9F /* BFTask.h in Headers */, + F50F059F7518D8F68B09F674C1D81F1B /* BFTaskCompletionSource.h in Headers */, + 75746B518C7E0EC504D1548C9CC4FC22 /* Bolts.h in Headers */, + 5BB3EFBBD58F469D64FE05C97A816968 /* BoltsVersion.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 39991CD032545E130997094168EF96E2 /* AFNetworking */ = { + 1DDE7D1F8C6E863F202337492C269E6B /* Pods */ = { isa = PBXNativeTarget; - buildConfigurationList = 431EFC273B3FC2034AFD6C4C92E174CD /* Build configuration list for PBXNativeTarget "AFNetworking" */; + buildConfigurationList = 5C34FB991FA427DC58BDC724C9A71282 /* Build configuration list for PBXNativeTarget "Pods" */; buildPhases = ( - 63A52441CABAEA2A034C298787B71B23 /* Sources */, - 79D6AFC8C82330655C0BAB54399B5D2C /* Frameworks */, - A321610E40E1146C0D88FBC300593C46 /* Headers */, + 56C7B27B1B482492D26CBE5E9ADE324A /* Sources */, + 56A844AA177010E838BCF58676D0E939 /* Frameworks */, ); buildRules = ( ); dependencies = ( + 19923423C703BBEB90AC3A3C857E89F4 /* PBXTargetDependency */, + 952FB994AE0621B42EB3D4A8C5901B4C /* PBXTargetDependency */, + E625AC18748C0B8FF6BB0F892F91679E /* PBXTargetDependency */, + 8EF4E4FF05990F09CF590B3C32C05754 /* PBXTargetDependency */, + 4E4F6F1D81F1078BEF297F869D35B281 /* PBXTargetDependency */, + 0899E8BA2384C2FED5E501B223E3CEFD /* PBXTargetDependency */, ); - name = AFNetworking; - productName = AFNetworking; - productReference = DE3508684073BF9ED1EE176A805EE3FC /* libAFNetworking.a */; + name = Pods; + productName = Pods; + productReference = 1A782DEC3085443686EE99BF46207C32 /* libPods.a */; + productType = "com.apple.product-type.library.static"; + }; + 30B6C683408FE258B28EE47F87D10FD5 /* ParseUI */ = { + isa = PBXNativeTarget; + buildConfigurationList = 37ECA32CD2B76A684E26A17FAE254686 /* Build configuration list for PBXNativeTarget "ParseUI" */; + buildPhases = ( + A4287A5FFA8C78F698E417A9B2E94CD0 /* Sources */, + 2BB7104FAE246FFAFA4A6159E11F80B3 /* Frameworks */, + 26FAD1D8029AE388ABD0140C46C4C37A /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + BDCD5DD6A24A428E11E10A934BE669D2 /* PBXTargetDependency */, + 7582E4FBF9E23D885F047845D9BAF1AD /* PBXTargetDependency */, + ); + name = ParseUI; + productName = ParseUI; + productReference = 6F2AB6103ACF8E3202AE317027CA808B /* libParseUI.a */; productType = "com.apple.product-type.library.static"; }; 47C800E42623009B7192B025B3DD25A1 /* pop */ = { @@ -2138,77 +2434,73 @@ productReference = A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */; productType = "com.apple.product-type.library.static"; }; - 538138A83A89C41D6A179BAAAA7A87CB /* Pods */ = { + 5E7ECA46011128F44607D2526FF28BBF /* Bolts */ = { isa = PBXNativeTarget; - buildConfigurationList = 9B6492829B8D73AD10769E85FCA9F27E /* Build configuration list for PBXNativeTarget "Pods" */; + buildConfigurationList = 2CAF95F65DE5E0DF3943B5CB1FDFDFB1 /* Build configuration list for PBXNativeTarget "Bolts" */; buildPhases = ( - 40BBC341D8D7A72368D8E6B132E1D6AB /* Sources */, - 4A3A889F28618A29FB5570CB0D7FF3F5 /* Frameworks */, + 227331EC1A7CC0DE3F32A2D28DBD3564 /* Sources */, + 9BE8C57594B15EEAA567F911A1293696 /* Frameworks */, + F73CFFAD226FA8B968BE5BF2EAD51F06 /* Headers */, ); buildRules = ( ); dependencies = ( - 9A649419F2A6E8DA31A1B71517CF82EB /* PBXTargetDependency */, - 4ECE2DEC9CA88EA95B0CAA98A75B9211 /* PBXTargetDependency */, - 6FB474EE146C7D054B64F0529723BBD5 /* PBXTargetDependency */, - 090DA03D4C071EB1C946E6266644F1D9 /* PBXTargetDependency */, - 4B7038BA1BDC2249906D6018B5F6C3AB /* PBXTargetDependency */, ); - name = Pods; - productName = Pods; - productReference = 5CE1AE8BFDFAA049F0F73E15ED7ACE9E /* libPods.a */; + name = Bolts; + productName = Bolts; + productReference = A88B9D7B7216A9C1E1312C4CBC71128F /* libBolts.a */; productType = "com.apple.product-type.library.static"; }; - 7D5B41A236FF14B6B02D4BAF6C4A690A /* ContextMenu.iOS */ = { + 9CEF3252DBE731B89BE08B2C8D33D157 /* AFNetworking */ = { isa = PBXNativeTarget; - buildConfigurationList = D8C66A8CA86F8BA4F03E908B331BECA5 /* Build configuration list for PBXNativeTarget "ContextMenu.iOS" */; + buildConfigurationList = 64D11131D2BE8C02E0D80E3F89019E1B /* Build configuration list for PBXNativeTarget "AFNetworking" */; buildPhases = ( - E716450A5FA3787141F895F94CEB9A8B /* Sources */, - E7338E47FCC5A3CEF6E7565747FBD02C /* Frameworks */, - EEA47D4D68E6A315D022E0558B2446D2 /* Headers */, + 448AD5E6BEF77FB18F80C6C52594AA4A /* Sources */, + 85674903FD27FE13717922FF4357F9B5 /* Frameworks */, + 859986280FBF72A1529643EABE37EEEC /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = ContextMenu.iOS; - productName = ContextMenu.iOS; - productReference = 3161EE94B4EAC7208319195F1483596D /* libContextMenu.iOS.a */; + name = AFNetworking; + productName = AFNetworking; + productReference = 7A52DF7C69FED7E78E844893F5F58808 /* libAFNetworking.a */; productType = "com.apple.product-type.library.static"; }; - 9D8311DD3E0DA85313EF9710C8614AD8 /* Bolts */ = { + C8E26D4496BE6E05436ED5442A4A35C6 /* Parse */ = { isa = PBXNativeTarget; - buildConfigurationList = 67A13180ACA2EC97B329D12BBF330556 /* Build configuration list for PBXNativeTarget "Bolts" */; + buildConfigurationList = 6F682CC992535202A5D2CF278126BF33 /* Build configuration list for PBXNativeTarget "Parse" */; buildPhases = ( - C404306DBE18890298706A71A7863ED7 /* Sources */, - 23364613FB0830F19B97359477AA117C /* Frameworks */, - FD580B49C886D584DD55A06F83D112A1 /* Headers */, + 62E531351317F4060B9D4A6608E1E5A7 /* Sources */, + FBED2FAC8FC38B52BADDF50DED237051 /* Frameworks */, + AE190F9D831F064F4EF61868C80F1E60 /* Headers */, ); buildRules = ( ); dependencies = ( + C1407E01BF7B9C202F3E485071EFB470 /* PBXTargetDependency */, ); - name = Bolts; - productName = Bolts; - productReference = CF774A16F869C80126A81687EB1E85D6 /* libBolts.a */; + name = Parse; + productName = Parse; + productReference = 3845B32677B589F5F7443E7D6E469D4A /* libParse.a */; productType = "com.apple.product-type.library.static"; }; - F7D0346E5B3C07CA2678B48D1D1BD750 /* Parse */ = { + FF04CF73CFE56992B404E8BC19C3A4FE /* ContextMenu.iOS */ = { isa = PBXNativeTarget; - buildConfigurationList = 05D30B977C164867CBB28678E172C5BA /* Build configuration list for PBXNativeTarget "Parse" */; + buildConfigurationList = E56AF3B044D4C205DC9CB1D9B3AA30B9 /* Build configuration list for PBXNativeTarget "ContextMenu.iOS" */; buildPhases = ( - 1A03F498BE17FF37BB8283717DD19577 /* Sources */, - 81EBEBB48DB0F24CCEE22EC96C01C619 /* Frameworks */, - 6F684E437947AECF10AF1B392C27FE0A /* Headers */, + C31B9478081DD08C7A80D629C9280D29 /* Sources */, + 965ABA69AF689352C7AFAA4D831B30F1 /* Frameworks */, + 35789C083B98EF480FFA83CB6247B6B2 /* Headers */, ); buildRules = ( ); dependencies = ( - 3530AC604629113E40B76CB90F73E195 /* PBXTargetDependency */, ); - name = Parse; - productName = Parse; - productReference = BD2D7F17F9C540FBFE58E4DB0EEBDC9A /* libParse.a */; + name = ContextMenu.iOS; + productName = ContextMenu.iOS; + productReference = 7C5E7538EF5118E38934B9886BC17B43 /* libContextMenu.iOS.a */; productType = "com.apple.product-type.library.static"; }; /* End PBXNativeTarget section */ @@ -2232,11 +2524,12 @@ projectDirPath = ""; projectRoot = ""; targets = ( - 39991CD032545E130997094168EF96E2 /* AFNetworking */, - 9D8311DD3E0DA85313EF9710C8614AD8 /* Bolts */, - 7D5B41A236FF14B6B02D4BAF6C4A690A /* ContextMenu.iOS */, - F7D0346E5B3C07CA2678B48D1D1BD750 /* Parse */, - 538138A83A89C41D6A179BAAAA7A87CB /* Pods */, + 9CEF3252DBE731B89BE08B2C8D33D157 /* AFNetworking */, + 5E7ECA46011128F44607D2526FF28BBF /* Bolts */, + FF04CF73CFE56992B404E8BC19C3A4FE /* ContextMenu.iOS */, + C8E26D4496BE6E05436ED5442A4A35C6 /* Parse */, + 30B6C683408FE258B28EE47F87D10FD5 /* ParseUI */, + 1DDE7D1F8C6E863F202337492C269E6B /* Pods */, 47C800E42623009B7192B025B3DD25A1 /* pop */, ); }; @@ -2269,269 +2562,384 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 1A03F498BE17FF37BB8283717DD19577 /* Sources */ = { + 227331EC1A7CC0DE3F32A2D28DBD3564 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9A90E8F4BF92C990DE4167054E85D654 /* BFCancellationToken.m in Sources */, + 639AA00D5A683FEF99EED79AA5886679 /* BFCancellationTokenRegistration.m in Sources */, + A13C4BB86354DFB46C4C5481307883E5 /* BFCancellationTokenSource.m in Sources */, + 11A4692CEBB8730B94ACA3DE9386A360 /* BFExecutor.m in Sources */, + 4987776369E562F38585FC37361D3CBF /* BFTask.m in Sources */, + 2F2C8AD562611FDC0AF5CDCD530D5A0D /* BFTaskCompletionSource.m in Sources */, + B0C4C32BA8DE1D5FE312176AC637848D /* Bolts-dummy.m in Sources */, + E85D137DF70E4DCCFE461CCA6C3FA618 /* Bolts.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 448AD5E6BEF77FB18F80C6C52594AA4A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 16076CA62CD1EEB4CFA1957E9F923B40 /* BFTask+Private.m in Sources */, - 76BE46560E2489F20B07ADE2A8383AB0 /* PFACL.m in Sources */, - 6ECC50446D8CE723BFA8398E30E0B34B /* PFACLState.m in Sources */, - A57A790BA267D5575D66FBA7194C9C9C /* PFAlertView.m in Sources */, - 896910FF549C79158B14DBA4B82DD337 /* PFAnalytics.m in Sources */, - 025BE970FE1936D8AE73A5BD6FCF5A4D /* PFAnalyticsController.m in Sources */, - 410C3023E9AAE2B3E429CDCDA5B48391 /* PFAnalyticsUtilities.m in Sources */, - 69134BFEE551E2C9B6F3DACC87775C7C /* PFAnonymousAuthenticationProvider.m in Sources */, - 86563FC6CF9DA9365C823E7285BFE1FF /* PFAnonymousUtils.m in Sources */, - 2CD85B954E0A03C2FC81163F60CFC4D8 /* PFApplication.m in Sources */, - F0B1181F18792D478147E3051A915EB6 /* PFAsyncTaskQueue.m in Sources */, - 9C526742FC642C90CD9887187FD9478E /* PFBase64Encoder.m in Sources */, - EBD7FD53C5DEA72FEB27FF599E88BC80 /* PFBaseState.m in Sources */, - 26E8BB7BF9D5A57648508C4E19560B77 /* PFCachedQueryController.m in Sources */, - 375E59B3F0F22CB28FA382DDB3790F5D /* PFCategoryLoader.m in Sources */, - CFDDEDCA97A5F84CDDD5A6F1BFFA2243 /* PFCloud.m in Sources */, - D9B88BBFFE6342E41F3A86220B3B9410 /* PFCloudCodeController.m in Sources */, - B4EBD2930890E190BA160A6B52C9029E /* PFCommandCache.m in Sources */, - 2322FAF5379B9BC9FBEFF748570BECCA /* PFCommandResult.m in Sources */, - 8B3ECF63B2E1B777FC04BECEC1F7C0EB /* PFCommandRunning.m in Sources */, - BA645FA6D6E0D66E9CF92B04F93777DD /* PFCommandRunningConstants.m in Sources */, - E5831BEBB501CAE9B5B49F7C5BE1433C /* PFCommandURLRequestConstructor.m in Sources */, - 851D4FF3A335CF48002CAFE2E4F2E376 /* PFConfig.m in Sources */, - 2C043C346C73A86BCA7BAF2D9B4A6D42 /* PFConfigController.m in Sources */, - AC42EC854B284673B3E2CA42FD46285A /* PFConstants.m in Sources */, - 7070EE01AEB4E7454E9C81B2A421900C /* PFCoreManager.m in Sources */, - 4059140EA33C2322618F795A388B41D5 /* PFCurrentConfigController.m in Sources */, - F8A080400150D1AC42F6C531CAB577D2 /* PFCurrentInstallationController.m in Sources */, - 65EAB2BF94627BD112EE4724B065D38E /* PFCurrentUserController.m in Sources */, - 9195D181434FFDA880E3FFCCB38FE33C /* PFDateFormatter.m in Sources */, - 12641D479C071B60EF715865ABFCE798 /* PFDecoder.m in Sources */, - DD3558902E5E8D951999253854B2A573 /* PFDefaultACLController.m in Sources */, - A91F60D12B823B21A59FA96BC5AF0825 /* PFDevice.m in Sources */, - 6A96EFBD2ECDE315AA0FCC4BAD67A9F8 /* PFEncoder.m in Sources */, - 4F8D2DF83D8B2D41170ED4D1C05D6B55 /* PFErrorUtilities.m in Sources */, - 77A778BD6F968FCB02BD567C7B5A6D79 /* PFEventuallyPin.m in Sources */, - 0D2DC39580098F73627DE62060F0E256 /* PFEventuallyQueue.m in Sources */, - 97048C05413C62808681EA864F2667C4 /* PFFieldOperation.m in Sources */, - CB4CF87BD5935737F20BDF0C99B80495 /* PFFieldOperationDecoder.m in Sources */, - F39244CD95764B7D0C035FE193512606 /* PFFile.m in Sources */, - C2B622D57413084005AD4FF3FE3B4CBE /* PFFileController.m in Sources */, - 0CADB282A28A344B568CD36701CD99A0 /* PFFileDataStream.m in Sources */, - EB8809FA99543F795F70FD6A9F457547 /* PFFileManager.m in Sources */, - 5EB711D9E225DDEED6606BBF5E4D400E /* PFFileStagingController.m in Sources */, - 7140367343A5DBE5AEABEE022C385B6B /* PFFileState.m in Sources */, - D5859A1400F3FE968B0AFCC64C078904 /* PFGeoPoint.m in Sources */, - FC49E18E4DE9E4CEA0E8144D55F407A7 /* PFHTTPURLRequestConstructor.m in Sources */, - 507D5F0F50CC15E879DD054990D1693E /* PFHash.m in Sources */, - 359312B1BB35A2C98A870CFE8FB33B67 /* PFInstallation.m in Sources */, - 5B2E3974FFB3B52E1377C6959B742F56 /* PFInstallationConstants.m in Sources */, - 2060BB5093B7CC2D7AB326AD3FE0CEDC /* PFInstallationController.m in Sources */, - 7DC754D4F086EC145F14F6CDF360960B /* PFInstallationIdentifierStore.m in Sources */, - 91EDAEBEF03847E95272606E90B11838 /* PFInternalUtils.m in Sources */, - 4FBE8D3A5BB9B088B3D381A2A623FD4D /* PFJSONSerialization.m in Sources */, - C1570CA337867BEF23B4AC733E51D4B9 /* PFKeyValueCache.m in Sources */, - A1984ACB538B0EB2EC33303455FF996F /* PFKeychainStore.m in Sources */, - 24BA59BBC3BD72DAB4E18A3549C1C70C /* PFLocationManager.m in Sources */, - F947354D06D4DB18853AD81F00869ED3 /* PFLogger.m in Sources */, - F965B0BA7C7E070E515C1ED0343E68A3 /* PFMultiProcessFileLock.m in Sources */, - 77FFDD6A37B8A941ACF4ABEF102EE786 /* PFMultiProcessFileLockController.m in Sources */, - 3EEF37314E80E89B4E7A8176F07348A2 /* PFMulticastDelegate.m in Sources */, - EDCC71FC92D40B3862592FF1F64D9F22 /* PFMutableACLState.m in Sources */, - E08EE32C93126D92DC9E6961789914E7 /* PFMutableFileState.m in Sources */, - B87F4316CA745157952D0E957CEF8D0F /* PFMutableObjectState.m in Sources */, - 6628D87D3C8481FD02EC5908FE0842F4 /* PFMutablePushState.m in Sources */, - 738F9BE2CEAA34CA252698CB2D3724B3 /* PFMutableQueryState.m in Sources */, - B3E990CB8A89D42E7E9F7ED33D39721F /* PFMutableRelationState.m in Sources */, - 76CCB91B392B898460B3E17FAE24BC80 /* PFMutableUserState.m in Sources */, - 4071546C204958FA56B126598AA21012 /* PFNetworkActivityIndicatorManager.m in Sources */, - 2C7EC42E5437F4F927B80CF65D5CEA3B /* PFObject.m in Sources */, - E12A39C3E3423DE57BA268CB553E74DD /* PFObjectBatchController.m in Sources */, - 2F3A21F75992E245B70D2FAB4213679F /* PFObjectConstants.m in Sources */, - 192C2017BBCDB1177A5F77494B10ADEF /* PFObjectController.m in Sources */, - 54CC3108BC26BBB273A857924B6173BF /* PFObjectEstimatedData.m in Sources */, - 7A4647A24ED50F8CB942285D95285B10 /* PFObjectFileCoder.m in Sources */, - F2CCD104B91461CC1548C32C003353FD /* PFObjectFileCodingLogic.m in Sources */, - D149C0E66489B8A63BF8ED2BA213DF12 /* PFObjectFilePersistenceController.m in Sources */, - 2627401700D6CCD2EF48DDF1FE042FFE /* PFObjectLocalIdStore.m in Sources */, - D9B2F24603C0F48EC73090BC6DC94FCE /* PFObjectState.m in Sources */, - B07458C275E7B87DEAF687642BB4EDA2 /* PFObjectSubclassInfo.m in Sources */, - 1CAD0670AB203262F90F62BC3BADEB14 /* PFObjectSubclassingController.m in Sources */, - 37A5F32AC77016F849D167378E9675A3 /* PFObjectUtilities.m in Sources */, - 628EC2E2FC6B26D0F6C7ED0DAB935A84 /* PFOfflineObjectController.m in Sources */, - A9D0D78B1F9703C282B64100E9E8926C /* PFOfflineQueryController.m in Sources */, - 9CC680543CB311240352F92FB2493BB2 /* PFOfflineQueryLogic.m in Sources */, - C7344A2F05279C90561EED1D8EA489CD /* PFOfflineStore.m in Sources */, - 40FA82215DAF72DD25F30AE4D6AC2F5D /* PFOperationSet.m in Sources */, - F2D9EF32073176AC4B9F935577A44456 /* PFPaymentTransactionObserver.m in Sources */, - B1905D70D1237C127EBBFCC391721F35 /* PFPin.m in Sources */, - 10989B990683FCA58C99BB82050E5077 /* PFPinningEventuallyQueue.m in Sources */, - 157A5FFCF49C427C049F82A6C6E7EF9C /* PFPinningObjectStore.m in Sources */, - 82A1CF90239B1B2448900BC02195737D /* PFProduct.m in Sources */, - 7B4FF17B0F855D9EBD572C18D1EE839B /* PFProductsRequestHandler.m in Sources */, - 3D264439507D686CBF9E7040B2B181EE /* PFPropertyInfo.m in Sources */, - C050B90E44F1D7D1B242336E9ED81E08 /* PFPropertyInfo_Runtime.m in Sources */, - A20B7AB30DBD8368549A2ADD1834EE47 /* PFPurchase.m in Sources */, - DBA301B469C007350C52449ADB7E4236 /* PFPurchaseController.m in Sources */, - 9AEB47308349EFDFA683BF4A62CF195D /* PFPush.m in Sources */, - DF425C7C6CA426D5CBB0ADB6A96871C7 /* PFPushChannelsController.m in Sources */, - C5B8E5BD9C4C8E0AF430CD461992ACC0 /* PFPushController.m in Sources */, - 025598DFFF793FB641F506825074F34A /* PFPushManager.m in Sources */, - 5E344479C1E3FE458D0D732D5EFD8C8B /* PFPushState.m in Sources */, - 9E7CF062169C9A81B37510D0AD9162C2 /* PFPushUtilities.m in Sources */, - E0C01AA7CFB002785436D33521E5328D /* PFQuery.m in Sources */, - 3E1E0EBBE4CD3857AF753AA1AB9DF965 /* PFQueryController.m in Sources */, - B0CBDEF8AB0A74F25C79B87615C2A832 /* PFQueryState.m in Sources */, - 3C0D480E2EB6981485CFFA27131FACCC /* PFQueryUtilities.m in Sources */, - 191D1C449C141C961A7F6B7D6982B73E /* PFRESTAnalyticsCommand.m in Sources */, - 9FD4177987850C6E6E37BA911CDD3C1A /* PFRESTCloudCommand.m in Sources */, - D79E5121E2F988A64AE071076264C201 /* PFRESTCommand.m in Sources */, - F3C1136C8D88E18B962C1C4AF612B3B3 /* PFRESTConfigCommand.m in Sources */, - 3B3D6A60DE4D34A1163B63BAB228AD0E /* PFRESTFileCommand.m in Sources */, - E4D2116E355F2C101B6DE6296544C3BC /* PFRESTObjectBatchCommand.m in Sources */, - C910FDABF6D86FF242B7CD5A85FE7B94 /* PFRESTObjectCommand.m in Sources */, - FFDEE01AE0207886F8D70AA02F184FB3 /* PFRESTPushCommand.m in Sources */, - A0BA6E93BF48588EBC097ACE78DA328D /* PFRESTQueryCommand.m in Sources */, - 4A9B74E229EB5509659505EE1DE1692E /* PFRESTSessionCommand.m in Sources */, - 3D6CCE33D20C53A3D9E7C977ADFD6072 /* PFRESTUserCommand.m in Sources */, - E2D8E1BB40962D1F2A8E7C8B179CBB3A /* PFReachability.m in Sources */, - 060F06CDB2C21C334A0082FD9EA5D079 /* PFRelation.m in Sources */, - 865A7864DFFA64506A9F6C30E05ECEE3 /* PFRelationState.m in Sources */, - 76266C2FA1D348D717AC228690DC36EA /* PFRole.m in Sources */, - FB2E5E78E63B5474E21182AC6AB7AE38 /* PFSQLiteDatabase.m in Sources */, - 64CF2D655AAA7C7FBED2449AEC710E4A /* PFSQLiteDatabaseController.m in Sources */, - 75050C536E96095BD980D5A9F3593D53 /* PFSQLiteDatabaseResult.m in Sources */, - 8C37D4BE18B21A9CD00B953782624248 /* PFSQLiteStatement.m in Sources */, - BD7119081B9A134A53DCAD9949D575C4 /* PFSession.m in Sources */, - D4B06A600FA1DBCBB68ACFDE2E554753 /* PFSessionController.m in Sources */, - 3576593700E45C9EBD7D41E2565B1DF9 /* PFSessionUtilities.m in Sources */, - 84C42678DE4460E60A66876CDAC64149 /* PFTaskQueue.m in Sources */, - 82756AE351CEDAA36F92E191804E5C29 /* PFThreadsafety.m in Sources */, - 532D3DF59CE8F5865F4E86368EB6462A /* PFURLConstructor.m in Sources */, - 892C9CADE551523C8EDF800C648306EC /* PFURLSession.m in Sources */, - 2B0B2B3095BEFC0D0520B92D5354F428 /* PFURLSessionCommandRunner.m in Sources */, - 6D2F9FB21ADBAC74D397280A5832D308 /* PFURLSessionDataTaskDelegate.m in Sources */, - 4D74C041164EA0F477B58E5AC7FE23E5 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */, - 6848B68295C1A953461430BFAB2A5D46 /* PFURLSessionJSONDataTaskDelegate.m in Sources */, - 9CDAF8961B1E25C066FAC4D7D44433EA /* PFURLSessionUploadTaskDelegate.m in Sources */, - DE7E8446AB52346D9156DC34976D7342 /* PFUser.m in Sources */, - 1067E9F5F6F4D70E1111D34A159980FB /* PFUserAuthenticationController.m in Sources */, - 897527170E376AFAE5654193F3308633 /* PFUserConstants.m in Sources */, - 3114529BA3CA84D2274E6E9220D1B1EE /* PFUserController.m in Sources */, - 99CC3B1A726965F2F7E569FD3A7EA623 /* PFUserFileCodingLogic.m in Sources */, - AE56E1589FBE716D4F7C22543A5A4C71 /* PFUserState.m in Sources */, - CDCB55B6E5A8A71A543987CB14B2045E /* PFWeakValue.m in Sources */, - 882F9183523311ED2A32898E978C05F0 /* Parse-dummy.m in Sources */, - F3DDD9A3039C1313F12C2A248576DD56 /* Parse.m in Sources */, - 6A7DBAA42BF1E9104329ED6DD2FD0E91 /* ParseManager.m in Sources */, - BAB47A67F4485EE6E586A25B834A2801 /* ParseModule.m in Sources */, + 76E92D32C24B20A93B6AE0969D585F4B /* AFHTTPRequestOperation.m in Sources */, + 41FA752847E7911579CB5994CACFB55A /* AFHTTPRequestOperationManager.m in Sources */, + 4618DA1F5A356DD83541A37748F954DF /* AFHTTPSessionManager.m in Sources */, + EB8DB296BB4DA32D527234A3DEE5F061 /* AFNetworkActivityIndicatorManager.m in Sources */, + 7F06975A49D877D950872BE36CA60960 /* AFNetworkReachabilityManager.m in Sources */, + 1F881486E8CB860C4E24913A8F5D5F40 /* AFNetworking-dummy.m in Sources */, + 8634E397DB95B4A205CA46F9464A75F9 /* AFSecurityPolicy.m in Sources */, + A06391D968AFE47F156783742F646922 /* AFURLConnectionOperation.m in Sources */, + C26DFE0E4BEAE15D72A60EEF9AB2119F /* AFURLRequestSerialization.m in Sources */, + A1B79A413EF7DAA8A4EB9CA5A8BD08A4 /* AFURLResponseSerialization.m in Sources */, + C2807FECCEA754DD6E77EAF01CD585C9 /* AFURLSessionManager.m in Sources */, + ACDDCAAF4C46330AD2D2AB16BFF02C4A /* UIActivityIndicatorView+AFNetworking.m in Sources */, + 0C2B045D7E5509E8F7EFA57AC39B6629 /* UIAlertView+AFNetworking.m in Sources */, + C1D1A848BEBCD76FE7DEAC09CD97E421 /* UIButton+AFNetworking.m in Sources */, + 173ED34A0356542BC4AABA232A87BEDC /* UIImageView+AFNetworking.m in Sources */, + EBF38A4299D038884C58103080EAA89A /* UIProgressView+AFNetworking.m in Sources */, + F327003FE3AD1D094C218F976BE1F431 /* UIRefreshControl+AFNetworking.m in Sources */, + 91B64709D6B292496C4A6A225D4BB7CF /* UIWebView+AFNetworking.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 40BBC341D8D7A72368D8E6B132E1D6AB /* Sources */ = { + 56C7B27B1B482492D26CBE5E9ADE324A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BE032518FE863AF44351DDE1D6844470 /* Pods-dummy.m in Sources */, + 058C33FB5C2A3719FE4ADF9A72690954 /* Pods-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 63A52441CABAEA2A034C298787B71B23 /* Sources */ = { + 62E531351317F4060B9D4A6608E1E5A7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - EED1C92E54E432794307DC75AF87EE82 /* AFHTTPRequestOperation.m in Sources */, - C521D37D942FE201D29B17ED2BACAFE1 /* AFHTTPRequestOperationManager.m in Sources */, - 1502050CA80F5B97E273857066C10540 /* AFHTTPSessionManager.m in Sources */, - 1249B7E8D033D0D59D0D8F097A745AB3 /* AFNetworkActivityIndicatorManager.m in Sources */, - F6C4B0AB4C5CC75A89E9E082659B1181 /* AFNetworkReachabilityManager.m in Sources */, - 786D083E69FEC7BBDAD2112F88692F61 /* AFNetworking-dummy.m in Sources */, - 7944A48A8FCFDF523DD67A11DA48E2D3 /* AFSecurityPolicy.m in Sources */, - FA8549933F4A9D5FC6E695B2C00C484E /* AFURLConnectionOperation.m in Sources */, - D1ED7907552DF919137E30AEDBAC4AD3 /* AFURLRequestSerialization.m in Sources */, - 1380A386F92D641C726FA9687404B11E /* AFURLResponseSerialization.m in Sources */, - 6F827A5588B3DF26C10C2E566D2D41E1 /* AFURLSessionManager.m in Sources */, - 354DC5158891E616616904856C60FA22 /* UIActivityIndicatorView+AFNetworking.m in Sources */, - 3E36642B632C36FD496D0345C6B12E15 /* UIAlertView+AFNetworking.m in Sources */, - 00275592A13B5D46B08409D995DB6ADB /* UIButton+AFNetworking.m in Sources */, - DEBBD76F7A9E5B75BF2732334FA25155 /* UIImageView+AFNetworking.m in Sources */, - BEDAE19BB304069C127DED5676C08866 /* UIProgressView+AFNetworking.m in Sources */, - 6FDF337377416BE9C6958B05AC1C571E /* UIRefreshControl+AFNetworking.m in Sources */, - 626E3E94132CE3E2B174CCB5C2E61241 /* UIWebView+AFNetworking.m in Sources */, + 26BF7F88592AF38813101555097DD55C /* BFTask+Private.m in Sources */, + A9F58BD8E15E32FE2F46C820F1E48E66 /* PFACL.m in Sources */, + 82F37565E385A7E818C024A26D83F6FA /* PFACLState.m in Sources */, + F42F528AAFB4431133A3D12ECF1D97D6 /* PFAlertView.m in Sources */, + 5DF1B5387A1DD9CAB5E13CEA1DEBE334 /* PFAnalytics.m in Sources */, + 9DA42084513E9EDEC1FD2877C7358DA4 /* PFAnalyticsController.m in Sources */, + E5866C6A6D58A011CCA749AA3EE87861 /* PFAnalyticsUtilities.m in Sources */, + C3538059D8FE0662CEE3DE41F3732317 /* PFAnonymousAuthenticationProvider.m in Sources */, + 5E5D8BCA6AA7723270741D3B30129E95 /* PFAnonymousUtils.m in Sources */, + DA87B0B1CA41E9765DD17F295386E93C /* PFApplication.m in Sources */, + 5231BCCB308A3F31F6177D3DE45B4B2A /* PFAsyncTaskQueue.m in Sources */, + CDC08305C998377AA557005E01DA48F2 /* PFBase64Encoder.m in Sources */, + 5BEA0703B949E403FCF00B1C99CE5312 /* PFBaseState.m in Sources */, + 739FCF97DC8962B9DFE12B6887C002F7 /* PFCachedQueryController.m in Sources */, + DD069B29E4B7FB44E2756BA625DB5B9F /* PFCategoryLoader.m in Sources */, + 1618761B80BC0810912C0E5A6FA8AED2 /* PFCloud.m in Sources */, + 57F9FD71CB5753B5943820CB971EABAC /* PFCloudCodeController.m in Sources */, + 50A0B5735FC58289849B81903379466F /* PFCommandCache.m in Sources */, + 7DDC420AD15D8E33ACCC0CBA24140E1A /* PFCommandResult.m in Sources */, + 2D7FC9420988E8825835F617C085C8F0 /* PFCommandRunning.m in Sources */, + BC32FB211EB444652B6799002CA68C02 /* PFCommandRunningConstants.m in Sources */, + 132AFB274CF349B143A6CE62178DCE73 /* PFCommandURLRequestConstructor.m in Sources */, + 11C30B6D836D34D9B469D3EB466BC3C6 /* PFConfig.m in Sources */, + E2C60F3460600725D4C2C17EDC0ECF18 /* PFConfigController.m in Sources */, + C9F67D469F5419E62C593ABA7DEB7197 /* PFConstants.m in Sources */, + 69A5F0FA9789A4C66CB54381A98D4A66 /* PFCoreManager.m in Sources */, + 2BA5C7017464A16F4C706785FA19D75B /* PFCurrentConfigController.m in Sources */, + 5AC93CEB9283C651882F05B1273DD103 /* PFCurrentInstallationController.m in Sources */, + 74852E4264FB23300164F52A30200E5F /* PFCurrentUserController.m in Sources */, + DB2B7514E2C7903E4C564F9B4FB83D7C /* PFDateFormatter.m in Sources */, + 421F18C338A1D96267A6D56CC4A606DF /* PFDecoder.m in Sources */, + A2A4F23CEEDDE6AC6AB5E12823B090FD /* PFDefaultACLController.m in Sources */, + 8CDB3264ED94C27CAA178E20CBEE8F8B /* PFDevice.m in Sources */, + 64E5E6820D9816C209547D94F2BB6562 /* PFEncoder.m in Sources */, + 531A2D3B4A600ED6ADC40EA5A46DE3EB /* PFErrorUtilities.m in Sources */, + 18379233D2D2B1502FC76DD4C5C692DC /* PFEventuallyPin.m in Sources */, + 13407B834F3178398FB483A7A5E16B1F /* PFEventuallyQueue.m in Sources */, + FB2C988761B71F5EC05ABAA20A10DD3E /* PFFieldOperation.m in Sources */, + 9475ADC7AEF8EB8886BA1A3EB222581B /* PFFieldOperationDecoder.m in Sources */, + DDEAAA61B6C55BA10412B3B27110F0D7 /* PFFile.m in Sources */, + C6F4896A69483CD338E2C278DB82D2BD /* PFFileController.m in Sources */, + EE9ABF7DB56F4A6D9F4969A3CAA035DC /* PFFileDataStream.m in Sources */, + 3F1414F449E14D51686282DE08C99213 /* PFFileManager.m in Sources */, + AC49A05B1513ABEC3365D1474436C6D1 /* PFFileStagingController.m in Sources */, + 058D0D5CE02E50025C29F3C920C0342C /* PFFileState.m in Sources */, + A3CDFB8B5F9558B4914FDAAA3DEF0954 /* PFGeoPoint.m in Sources */, + 2ED1F725C7A2D9C3B088755133185E3E /* PFHTTPURLRequestConstructor.m in Sources */, + CC2AA775E69BED51AA50FA0982F06DB7 /* PFHash.m in Sources */, + 4A8C9FF00E3384BC4C3CD3FB2F55E990 /* PFInstallation.m in Sources */, + 5FAFA9B41F2A03D77C11EB75A4494750 /* PFInstallationConstants.m in Sources */, + 7201F0F99D6B13F35856DD253A5C0E07 /* PFInstallationController.m in Sources */, + E0FDA3418BDC08A45B8E4F8F6DE1A20C /* PFInstallationIdentifierStore.m in Sources */, + 4A80DF5A34C30001E5ED3BAF54228FA7 /* PFInternalUtils.m in Sources */, + D8B21AB2A572F89802E2CAE754E11C1C /* PFJSONSerialization.m in Sources */, + 57BDB360A71C5C40769FEBCF4EEA9286 /* PFKeyValueCache.m in Sources */, + 5A77D55F5B0750BBEB517B644365A500 /* PFKeychainStore.m in Sources */, + 36D8D65FF0AB068BF9906A86619644F7 /* PFLocationManager.m in Sources */, + D96A915CB19A7ACFC1FF38481113C4E5 /* PFLogger.m in Sources */, + 4824B7BE52BA2402CED14500E2932601 /* PFMultiProcessFileLock.m in Sources */, + 3F0E3DF64315302D29713F842A484DBB /* PFMultiProcessFileLockController.m in Sources */, + EA8A963881602AE0082051485B05AC32 /* PFMulticastDelegate.m in Sources */, + 4AF062F4FC2B5263DEB1CF994FAAB679 /* PFMutableACLState.m in Sources */, + A1FBBD9D4DB3E0B403F55E475200D922 /* PFMutableFileState.m in Sources */, + 0C3E40A1E1F5C062336954953535A147 /* PFMutableObjectState.m in Sources */, + 68C107E42DDAB28C80D321FA102CF4A8 /* PFMutablePushState.m in Sources */, + 7DF684A676D0C6D6C9E217E70FBA4E4A /* PFMutableQueryState.m in Sources */, + 1C7F42CA15296DA4A6644553F81E234A /* PFMutableRelationState.m in Sources */, + FA062724256AD7BD74E749525E96F593 /* PFMutableUserState.m in Sources */, + D4D98689D09FD3C38EA7A6092736446C /* PFNetworkActivityIndicatorManager.m in Sources */, + A1E6CFAC51C967076FB1942859BCCCA2 /* PFObject.m in Sources */, + 2F8806F964E2757E0AE4C18A63D549F7 /* PFObjectBatchController.m in Sources */, + 7526478D2E78774A038474BCBD3F1C32 /* PFObjectConstants.m in Sources */, + 260117E289FF83C3E56161D34507AC08 /* PFObjectController.m in Sources */, + B35B52D2F3848F1D23A4734E8BA8CD25 /* PFObjectEstimatedData.m in Sources */, + 25A85CEAA3DA9477C9380336E9223EFA /* PFObjectFileCoder.m in Sources */, + 66DCFF3A85030DB15D244781AC3FD8BD /* PFObjectFileCodingLogic.m in Sources */, + 1D0B465250743982AC6B53A0826FBBD0 /* PFObjectFilePersistenceController.m in Sources */, + 878FFB2B0C1CEBB717761B9969A4A64F /* PFObjectLocalIdStore.m in Sources */, + DDFA6862FB1CE0BA4A61CFE7EF8E083C /* PFObjectState.m in Sources */, + E5DAB0E03E10762C86ECD9FCC472761F /* PFObjectSubclassInfo.m in Sources */, + 0BDA91D5869CA4191D33157C3F626421 /* PFObjectSubclassingController.m in Sources */, + C2AA7D8CD8800BA5C772B03344DCDC37 /* PFObjectUtilities.m in Sources */, + 04C59EDFE151A61EBE17E21743FCD39C /* PFOfflineObjectController.m in Sources */, + 2F95E9BCF26DD34957769CFD6E7B08F7 /* PFOfflineQueryController.m in Sources */, + D9060FE6FF4B3F9BA85000AA5AB8B52F /* PFOfflineQueryLogic.m in Sources */, + FA4008023586470174D049C68D7BCA84 /* PFOfflineStore.m in Sources */, + 8853CBA2C0D6980916593B7808BC29BD /* PFOperationSet.m in Sources */, + 7785B27C7EBF0BD5696DC493EE247B6D /* PFPaymentTransactionObserver.m in Sources */, + 9710BA2A332B179BA2827D289D2453F1 /* PFPin.m in Sources */, + C8C216A6FB717E67F1D6A90342AA8F77 /* PFPinningEventuallyQueue.m in Sources */, + 9B3D878BE422C022F78E6F3B8126F7EC /* PFPinningObjectStore.m in Sources */, + 8035B29DD0D2E6CDE192CFB413021BB3 /* PFProduct.m in Sources */, + CD1A2408C77C3419D1D374BDD5A858B0 /* PFProductsRequestHandler.m in Sources */, + F23C5CA36BBCCEDC450C59ABD9167FF1 /* PFPropertyInfo.m in Sources */, + B68778AB3A22AE8EEC182188399F709F /* PFPropertyInfo_Runtime.m in Sources */, + D61130DAF8E0E1ECE22A93E52E1AF17D /* PFPurchase.m in Sources */, + 254832160B15699E7724F95DE8DD5752 /* PFPurchaseController.m in Sources */, + 21B089C37641C0DD264CE5D3A4F6561A /* PFPush.m in Sources */, + 8E9C6364F65C04540B01F5F7864679FE /* PFPushChannelsController.m in Sources */, + 51CB85FCD806DF8447C6FA52391C1E04 /* PFPushController.m in Sources */, + 359921E987152F2E32ED5A7E95D3D7ED /* PFPushManager.m in Sources */, + 3B664B6E61C833CD4BEA0C3FA5F6A204 /* PFPushState.m in Sources */, + 909CFE7FFE6FBF340F2838D4002C01ED /* PFPushUtilities.m in Sources */, + F4CB32331A652F9BEC5790C7BD83488F /* PFQuery.m in Sources */, + D971E396F056FBA17C6CE0CF194FBE3E /* PFQueryController.m in Sources */, + D404E2D7015A2B76AABE42C287FAD36F /* PFQueryState.m in Sources */, + 0A9D4D20C55270EF697A3961B39D3FE0 /* PFQueryUtilities.m in Sources */, + F5271A92421103FAA7B66901BDADE562 /* PFRESTAnalyticsCommand.m in Sources */, + 5BD0448FB27F6926E8AC4C43AD94F214 /* PFRESTCloudCommand.m in Sources */, + 8C09B8DEC14AE6744582DD2257C52CD5 /* PFRESTCommand.m in Sources */, + 246B3249C33500DE5CA8091842FD161E /* PFRESTConfigCommand.m in Sources */, + A996E3E947C6267CC2641F8BCF6D3A0F /* PFRESTFileCommand.m in Sources */, + 9600DCCC69D0F088EB727C5B1769B4B3 /* PFRESTObjectBatchCommand.m in Sources */, + 4559F2C1310C63FC0393148479027450 /* PFRESTObjectCommand.m in Sources */, + 435DA30E314A631C5CB9C52A61140AC7 /* PFRESTPushCommand.m in Sources */, + 4CF686EDA5878E2B7DE2627B409B34CC /* PFRESTQueryCommand.m in Sources */, + E72770739EA867C89DE740B977BE5C70 /* PFRESTSessionCommand.m in Sources */, + 5C20B36FFE00F5AC30E5338C5F4E1C95 /* PFRESTUserCommand.m in Sources */, + 20F38429DB788EC0750BAE41035D38BD /* PFReachability.m in Sources */, + 16C58D5E53A49592C8CBE347C2A8902D /* PFRelation.m in Sources */, + 38253CE84769ED15D8C99ED4B898847F /* PFRelationState.m in Sources */, + E651303757F3195255E0DEC635795BC2 /* PFRole.m in Sources */, + B92A4315EE32C56D189C572C94666714 /* PFSQLiteDatabase.m in Sources */, + DA0EC40E69DE3685E53603D2D6CD17A7 /* PFSQLiteDatabaseController.m in Sources */, + 1BD3A897099353079B220469631AC62B /* PFSQLiteDatabaseResult.m in Sources */, + 2CAD92B1CD9E623C21762FDD9970ED0A /* PFSQLiteStatement.m in Sources */, + BF2D3113EF4F55028D7C0B93420D341F /* PFSession.m in Sources */, + E84B6B0C1564161E1DE83392CD28082A /* PFSessionController.m in Sources */, + EBC4E1A2A578C68150812DF664F3CD2C /* PFSessionUtilities.m in Sources */, + F0BF7C159497C345EFC2279414A9602B /* PFTaskQueue.m in Sources */, + 7710B4CBEACBB6050BF74F5B5C08E484 /* PFThreadsafety.m in Sources */, + 37A15CF58C488A0BE71C9DF43F028E8D /* PFURLConstructor.m in Sources */, + 878393E04A1E6DF9BE7442BD2D45971D /* PFURLSession.m in Sources */, + F666FF748D959A512841D717829362CD /* PFURLSessionCommandRunner.m in Sources */, + C6FAED6F757456167037A450C730376C /* PFURLSessionDataTaskDelegate.m in Sources */, + 3FA97E218C8EC403B801CDBEED9D7981 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */, + EE649D37D119E85D26C3A56AF9481AC9 /* PFURLSessionJSONDataTaskDelegate.m in Sources */, + 16D57AA10CE0A2E5D61FD7DF78139724 /* PFURLSessionUploadTaskDelegate.m in Sources */, + C7FC18B8A3E8B3CB9F135C9A31A5453F /* PFUser.m in Sources */, + 8E02FAA01BA3DCD0CA25C003FEC9C40B /* PFUserAuthenticationController.m in Sources */, + 22A0E63EE43ED826D8DFAB3444112A06 /* PFUserConstants.m in Sources */, + 880A556877BBB523DEE7001E1945C648 /* PFUserController.m in Sources */, + 98C36B42CA7EF2A5C43647355E1590AA /* PFUserFileCodingLogic.m in Sources */, + 8B58E16D2F44D517D4CD0B5AFA479B54 /* PFUserState.m in Sources */, + CB7DC9EDB7454CF34FB6251AB98972B6 /* PFWeakValue.m in Sources */, + E865E91B85761327812436CFD0EE21FE /* Parse-dummy.m in Sources */, + F8CE939475DB06A79F0B42858F50A175 /* Parse.m in Sources */, + 278028677CDB8067FFF832B90AE73116 /* ParseManager.m in Sources */, + 0548214136FCCAE0412E4688B4F8CDCB /* ParseModule.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - C404306DBE18890298706A71A7863ED7 /* Sources */ = { + A4287A5FFA8C78F698E417A9B2E94CD0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8F23210C8BC4F5C9280066640C17C69B /* BFCancellationToken.m in Sources */, - 21D65B5E8DF938F32091BDBD66B1E5D1 /* BFCancellationTokenRegistration.m in Sources */, - AB0423F50C0C64EEE86C2680EC9F02B5 /* BFCancellationTokenSource.m in Sources */, - E219C58B408FA57BF94D5A4113C59B87 /* BFExecutor.m in Sources */, - 90F6AC61C0D614F4F3DD46C81171C8ED /* BFTask.m in Sources */, - C6E0B8D8F68167D1CEA74DEAAE59F09A /* BFTaskCompletionSource.m in Sources */, - D22255492F43BE2B59EDB2478E8C5818 /* Bolts-dummy.m in Sources */, - 842EC859A33C10671D3500B99F24C6C5 /* Bolts.m in Sources */, + E1D1C143E6692407376FB991936085DC /* PFActionButton.m in Sources */, + E4F65D360A870AE93E4A2CCD3D3491E3 /* PFActivityIndicatorCollectionReusableView.m in Sources */, + D0C0E6DF830E9771B4A9ACA48BD1C2FA /* PFActivityIndicatorTableViewCell.m in Sources */, + DB25C2F1A23AE3183921A8D3DF4FE24D /* PFCollectionViewCell.m in Sources */, + 6AD3C772F3FF85F3497088F60C7963F5 /* PFColor.m in Sources */, + 5E8A9993BF21FC6A83FD93B1805E7E08 /* PFDismissButton.m in Sources */, + CCDBD66664BB0CA36EBE89388868E078 /* PFImage.m in Sources */, + 8C19440562BFF499AC480DE8E608FF46 /* PFImageCache.m in Sources */, + 4F3FF316B9AC1B085B0BED76753BBF9A /* PFImageView.m in Sources */, + 32A2CE35418BD5633F9217B88B539CC3 /* PFLoadingView.m in Sources */, + C4FA14E2FF9F8A9254BFFCDF71E56DCD /* PFLogInView.m in Sources */, + F8797AD57E1C9E3248CEE5F1BC867DB7 /* PFLogInViewController.m in Sources */, + 85B0C6E345CC679BACD3B8EC8BC903BF /* PFPrimaryButton.m in Sources */, + C03EBBEAFE95FD7E24990703FD68B77F /* PFProductTableViewController.m in Sources */, + C7E834F143C71B5C4194641E056B1BDC /* PFPurchaseTableViewCell.m in Sources */, + 417817B29B272C3A7E76522DCED4641B /* PFQueryCollectionViewController.m in Sources */, + 7A7BE0B71906AC4EEF741D34ACD5571B /* PFQueryTableViewController.m in Sources */, + 9BBBA20A0D257B239AC0CDBEA6F29BC7 /* PFRect.m in Sources */, + C5EFDF7F763E623AFD30780B1982869A /* PFResources.m in Sources */, + 3859BC5571F7217642873574773EADB1 /* PFSignUpView.m in Sources */, + 6680EDA225DDBD24AAA8AD3D9373828C /* PFSignUpViewController.m in Sources */, + 817B500E5ED177D38A3EC98115632595 /* PFTableViewCell.m in Sources */, + D9D1261CE4BA4764455EBE65EE2047B4 /* PFTextButton.m in Sources */, + E27F8532DB90E0766FA777C88379FA68 /* PFTextField.m in Sources */, + AF63656DC5C09D391A445E07384ABD71 /* PFUIAlertView.m in Sources */, + ABBBC278EBDDA40702E0436212E86E9F /* ParseUI-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - E716450A5FA3787141F895F94CEB9A8B /* Sources */ = { + C31B9478081DD08C7A80D629C9280D29 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 46DCE2CC317AC30889B0B674F4C86173 /* ContextMenu.iOS-dummy.m in Sources */, - 6ACF579F7F083EF03A3DBB128D76B4C3 /* UIView+YALConstraints.m in Sources */, - 27C6F9BEE80BC03933C78785106C81FE /* YALContextMenuTableView.m in Sources */, + D18CC3FCF71873622CF5F327A568B8BE /* ContextMenu.iOS-dummy.m in Sources */, + 99FAD7969112EB91391E4535089F7A27 /* UIView+YALConstraints.m in Sources */, + 256B22C8EF9B5B23E67AD183CF08A370 /* YALContextMenuTableView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 090DA03D4C071EB1C946E6266644F1D9 /* PBXTargetDependency */ = { + 0899E8BA2384C2FED5E501B223E3CEFD /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = pop; + target = 47C800E42623009B7192B025B3DD25A1 /* pop */; + targetProxy = EE12126F62BD1EEFAD3A114F7165C35B /* PBXContainerItemProxy */; + }; + 19923423C703BBEB90AC3A3C857E89F4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AFNetworking; + target = 9CEF3252DBE731B89BE08B2C8D33D157 /* AFNetworking */; + targetProxy = 99961E400193CE18389BE0F5180AB7F3 /* PBXContainerItemProxy */; + }; + 4E4F6F1D81F1078BEF297F869D35B281 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ParseUI; + target = 30B6C683408FE258B28EE47F87D10FD5 /* ParseUI */; + targetProxy = FABF293F3CD2F3C97F0EA10E96BAC2A6 /* PBXContainerItemProxy */; + }; + 7582E4FBF9E23D885F047845D9BAF1AD /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Parse; - target = F7D0346E5B3C07CA2678B48D1D1BD750 /* Parse */; - targetProxy = 58FD68CA85B5E72697502824B988F051 /* PBXContainerItemProxy */; + target = C8E26D4496BE6E05436ED5442A4A35C6 /* Parse */; + targetProxy = 4A62D857EC92BBBC0306F5AFC1E44540 /* PBXContainerItemProxy */; }; - 3530AC604629113E40B76CB90F73E195 /* PBXTargetDependency */ = { + 8EF4E4FF05990F09CF590B3C32C05754 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Bolts; - target = 9D8311DD3E0DA85313EF9710C8614AD8 /* Bolts */; - targetProxy = A350E8606E02ACFA8AA6C838EE4FDE3D /* PBXContainerItemProxy */; + name = Parse; + target = C8E26D4496BE6E05436ED5442A4A35C6 /* Parse */; + targetProxy = 52518CE5417A0014201101497C436F9B /* PBXContainerItemProxy */; }; - 4B7038BA1BDC2249906D6018B5F6C3AB /* PBXTargetDependency */ = { + 952FB994AE0621B42EB3D4A8C5901B4C /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = pop; - target = 47C800E42623009B7192B025B3DD25A1 /* pop */; - targetProxy = 103117E18087B3EEC84D8F67EA532CD6 /* PBXContainerItemProxy */; + name = Bolts; + target = 5E7ECA46011128F44607D2526FF28BBF /* Bolts */; + targetProxy = B2E5C7781C3E2087AEA03EF41C4EE7C0 /* PBXContainerItemProxy */; }; - 4ECE2DEC9CA88EA95B0CAA98A75B9211 /* PBXTargetDependency */ = { + BDCD5DD6A24A428E11E10A934BE669D2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Bolts; - target = 9D8311DD3E0DA85313EF9710C8614AD8 /* Bolts */; - targetProxy = 898759E58BADE0E9FBFA1E66E38F8039 /* PBXContainerItemProxy */; + target = 5E7ECA46011128F44607D2526FF28BBF /* Bolts */; + targetProxy = F35397A038CF6004F7D006C52C3042DF /* PBXContainerItemProxy */; }; - 6FB474EE146C7D054B64F0529723BBD5 /* PBXTargetDependency */ = { + C1407E01BF7B9C202F3E485071EFB470 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = ContextMenu.iOS; - target = 7D5B41A236FF14B6B02D4BAF6C4A690A /* ContextMenu.iOS */; - targetProxy = 11F61E646F82C7A3027EAFA6F2C283CA /* PBXContainerItemProxy */; + name = Bolts; + target = 5E7ECA46011128F44607D2526FF28BBF /* Bolts */; + targetProxy = 990436F1E7C13E75A6DA3B6C9195DA14 /* PBXContainerItemProxy */; }; - 9A649419F2A6E8DA31A1B71517CF82EB /* PBXTargetDependency */ = { + E625AC18748C0B8FF6BB0F892F91679E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = AFNetworking; - target = 39991CD032545E130997094168EF96E2 /* AFNetworking */; - targetProxy = 5990CF4195D3965C7E2B2A3208652783 /* PBXContainerItemProxy */; + name = ContextMenu.iOS; + target = FF04CF73CFE56992B404E8BC19C3A4FE /* ContextMenu.iOS */; + targetProxy = 14463E173C08B7B666D09C49F5839A75 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 000400B0D1E76EBBC48059E96D81D5FD /* Debug */ = { + 05AC3AE11084386BFC6EE8A3860A2632 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C213AD7370FD716E3010F4CCDE4BE681 /* ParseUI-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/ParseUI/ParseUI-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 184E4FDF5C66B50DD1AC02CB1B0236F7 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C157642B668892E40497C6E7E543A2FC /* AFNetworking-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 377D8F8B1424499BCE256365B12BE3AD /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2940BC6B2FD4089D74072136047C2FEE /* Pods.release.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 37D75D3EB886D10E43FD1EEE8A61E85B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F0959918976A05003B1E7FB37A8F8749 /* Bolts-Private.xcconfig */; + baseConfigurationReference = 5A12ABBF15A8F5506519823676F3C8DD /* Bolts-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 3FF43C79B2F8873DE38153E56DD8526B /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 976A55E7CE8D654A68FBED3175180C45 /* Parse-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; @@ -2596,9 +3004,9 @@ }; name = Release; }; - 63D806B24D2E2AF2D57832D4C21C42A8 /* Debug */ = { + 692AE31C3AC629E6A57E7C8EBC6A61AD /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 92EFA64DEEA2D7C788D39BE4B87668B0 /* ContextMenu.iOS-Private.xcconfig */; + baseConfigurationReference = DD2C8034413D050CB11771F958F248F1 /* ContextMenu.iOS-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_PREFIX_HEADER = "Target Support Files/ContextMenu.iOS/ContextMenu.iOS-prefix.pch"; @@ -2646,28 +3054,12 @@ }; name = Release; }; - 8978DF038D028E26D938D43B1A73098F /* Debug */ = { + 8E7E293A8DD23699E07E4BFC72036C3D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 69C89E4E56C77B03B486A9C81B595B44 /* AFNetworking-Private.xcconfig */; + baseConfigurationReference = 976A55E7CE8D654A68FBED3175180C45 /* Parse-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - 90C663DBECD470D47C0A32FB964DB72D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F0959918976A05003B1E7FB37A8F8749 /* Bolts-Private.xcconfig */; - buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; @@ -2678,41 +3070,41 @@ }; name = Release; }; - 92138A835212834AB25A49FEAAAF8DC4 /* Release */ = { + 8F81628251F65DE85CD539EB703940D9 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 69C89E4E56C77B03B486A9C81B595B44 /* AFNetworking-Private.xcconfig */; + baseConfigurationReference = 88941524D385690CBCF300DD140DF00E /* Pods.debug.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; + MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; - name = Release; + name = Debug; }; - B8FC56A1FDD3F521E15013C645A9236F /* Debug */ = { + A7CEFDABAC8A9F07912D89EF2401A803 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 46A44DBE60FFDA06D7726DD3091A0E47 /* Pods.debug.xcconfig */; + baseConfigurationReference = C157642B668892E40497C6E7E543A2FC /* AFNetworking-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; name = Debug; }; - C1DEE2986C7D0977543B7BADA2F3BB1B /* Release */ = { + BB6F9B900EDF05BE60DCDA92E4DAECB4 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 92EFA64DEEA2D7C788D39BE4B87668B0 /* ContextMenu.iOS-Private.xcconfig */; + baseConfigurationReference = DD2C8034413D050CB11771F958F248F1 /* ContextMenu.iOS-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_PREFIX_HEADER = "Target Support Files/ContextMenu.iOS/ContextMenu.iOS-prefix.pch"; @@ -2726,12 +3118,12 @@ }; name = Release; }; - C9530B48CBF28D013878B635CA786748 /* Debug */ = { + E69EFF8AAAC9CEFE6A33102476292CA8 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4743EB53C73E4B52C1EC84395BD476F5 /* Parse-Private.xcconfig */; + baseConfigurationReference = 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/pop/pop-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; @@ -2742,28 +3134,28 @@ }; name = Debug; }; - CBF78EF43B07DE62F513E7142428C170 /* Release */ = { + EC0AAD40C3BDADEBDDA84142EF4B2D4E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 554179C2DB1E42B74E86A13E79A45730 /* Pods.release.xcconfig */; + baseConfigurationReference = 5A12ABBF15A8F5506519823676F3C8DD /* Bolts-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; + MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; - name = Release; + name = Debug; }; - D7DC57C4D3F0140BD338639511AED72F /* Release */ = { + FB6D975729D6C0A0CBE0AF592D022A3F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4743EB53C73E4B52C1EC84395BD476F5 /* Parse-Private.xcconfig */; + baseConfigurationReference = C213AD7370FD716E3010F4CCDE4BE681 /* ParseUI-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/ParseUI/ParseUI-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; @@ -2774,30 +3166,14 @@ }; name = Release; }; - E69EFF8AAAC9CEFE6A33102476292CA8 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */; - buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/pop/pop-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 05D30B977C164867CBB28678E172C5BA /* Build configuration list for PBXNativeTarget "Parse" */ = { + 2CAF95F65DE5E0DF3943B5CB1FDFDFB1 /* Build configuration list for PBXNativeTarget "Bolts" */ = { isa = XCConfigurationList; buildConfigurations = ( - C9530B48CBF28D013878B635CA786748 /* Debug */, - D7DC57C4D3F0140BD338639511AED72F /* Release */, + EC0AAD40C3BDADEBDDA84142EF4B2D4E /* Debug */, + 37D75D3EB886D10E43FD1EEE8A61E85B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -2811,11 +3187,20 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 431EFC273B3FC2034AFD6C4C92E174CD /* Build configuration list for PBXNativeTarget "AFNetworking" */ = { + 37ECA32CD2B76A684E26A17FAE254686 /* Build configuration list for PBXNativeTarget "ParseUI" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 05AC3AE11084386BFC6EE8A3860A2632 /* Debug */, + FB6D975729D6C0A0CBE0AF592D022A3F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5C34FB991FA427DC58BDC724C9A71282 /* Build configuration list for PBXNativeTarget "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 8978DF038D028E26D938D43B1A73098F /* Debug */, - 92138A835212834AB25A49FEAAAF8DC4 /* Release */, + 8F81628251F65DE85CD539EB703940D9 /* Debug */, + 377D8F8B1424499BCE256365B12BE3AD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -2829,29 +3214,29 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 67A13180ACA2EC97B329D12BBF330556 /* Build configuration list for PBXNativeTarget "Bolts" */ = { + 64D11131D2BE8C02E0D80E3F89019E1B /* Build configuration list for PBXNativeTarget "AFNetworking" */ = { isa = XCConfigurationList; buildConfigurations = ( - 000400B0D1E76EBBC48059E96D81D5FD /* Debug */, - 90C663DBECD470D47C0A32FB964DB72D /* Release */, + A7CEFDABAC8A9F07912D89EF2401A803 /* Debug */, + 184E4FDF5C66B50DD1AC02CB1B0236F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9B6492829B8D73AD10769E85FCA9F27E /* Build configuration list for PBXNativeTarget "Pods" */ = { + 6F682CC992535202A5D2CF278126BF33 /* Build configuration list for PBXNativeTarget "Parse" */ = { isa = XCConfigurationList; buildConfigurations = ( - B8FC56A1FDD3F521E15013C645A9236F /* Debug */, - CBF78EF43B07DE62F513E7142428C170 /* Release */, + 3FF43C79B2F8873DE38153E56DD8526B /* Debug */, + 8E7E293A8DD23699E07E4BFC72036C3D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D8C66A8CA86F8BA4F03E908B331BECA5 /* Build configuration list for PBXNativeTarget "ContextMenu.iOS" */ = { + E56AF3B044D4C205DC9CB1D9B3AA30B9 /* Build configuration list for PBXNativeTarget "ContextMenu.iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 63D806B24D2E2AF2D57832D4C21C42A8 /* Debug */, - C1DEE2986C7D0977543B7BADA2F3BB1B /* Release */, + 692AE31C3AC629E6A57E7C8EBC6A61AD /* Debug */, + BB6F9B900EDF05BE60DCDA92E4DAECB4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-Private.xcconfig b/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-Private.xcconfig index 81e0c43..bfc8625 100644 --- a/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-Private.xcconfig +++ b/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-Private.xcconfig @@ -1,6 +1,6 @@ #include "AFNetworking.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/AFNetworking" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/AFNetworking" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" OTHER_LDFLAGS = ${AFNETWORKING_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig b/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig index 4f46a39..5b0d215 100644 --- a/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig +++ b/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig @@ -1,5 +1,5 @@ #include "Bolts.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Bolts" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Bolts" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-Private.xcconfig b/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-Private.xcconfig index cf9920d..d12ec85 100644 --- a/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-Private.xcconfig +++ b/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-Private.xcconfig @@ -1,6 +1,6 @@ #include "ContextMenu.iOS.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" OTHER_LDFLAGS = ${CONTEXTMENU_IOS_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig b/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig index 145418d..a4f468c 100644 --- a/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig +++ b/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig @@ -1,6 +1,6 @@ #include "Parse.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Parse" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Parse" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" OTHER_LDFLAGS = ${PARSE_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-Private.xcconfig b/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-Private.xcconfig new file mode 100644 index 0000000..cf5336c --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-Private.xcconfig @@ -0,0 +1,6 @@ +#include "ParseUI.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/ParseUI" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = ${PARSEUI_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} +SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-dummy.m b/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-dummy.m new file mode 100644 index 0000000..c204211 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_ParseUI : NSObject +@end +@implementation PodsDummy_ParseUI +@end diff --git a/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-prefix.pch b/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-prefix.pch new file mode 100644 index 0000000..aa992a4 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI.xcconfig b/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI.xcconfig new file mode 100644 index 0000000..d856d00 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI.xcconfig @@ -0,0 +1 @@ +PARSEUI_OTHER_LDFLAGS = -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown index fcec2d4..306898c 100644 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown @@ -267,6 +267,27 @@ Apache License See https://www.parse.com/about/terms +## ParseUI + +Copyright (c) 2014, Parse, LLC. All rights reserved. + +You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +copy, modify, and distribute this software in source code or binary form for use +in connection with the web services and APIs provided by Parse. + +As with any software that integrates with the Parse platform, your use of +this software is subject to the Parse Terms of Service +[https://www.parse.com/about/terms]. This copyright 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. + + ## pop BSD License diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist index 4272d8f..6211c13 100644 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist @@ -294,6 +294,31 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Type PSGroupSpecifier + + FooterText + Copyright (c) 2014, Parse, LLC. All rights reserved. + +You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +copy, modify, and distribute this software in source code or binary form for use +in connection with the web services and APIs provided by Parse. + +As with any software that integrates with the Parse platform, your use of +this software is subject to the Parse Terms of Service +[https://www.parse.com/about/terms]. This copyright 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. + + Title + ParseUI + Type + PSGroupSpecifier + FooterText BSD License diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods-resources.sh b/BreakingBad/Pods/Target Support Files/Pods/Pods-resources.sh index a0fbc2e..0c4eb4b 100755 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods-resources.sh +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods-resources.sh @@ -59,9 +59,11 @@ install_resource() } if [[ "$CONFIGURATION" == "Debug" ]]; then install_resource "Parse/Parse/Resources/en.lproj" + install_resource "ParseUI/ParseUI/Resources/Localization/en.lproj" fi if [[ "$CONFIGURATION" == "Release" ]]; then install_resource "Parse/Parse/Resources/en.lproj" + install_resource "ParseUI/ParseUI/Resources/Localization/en.lproj" fi mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig b/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig index 33ec719..041274f 100644 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig @@ -1,7 +1,7 @@ CLANG_CXX_LANGUAGE_STANDARD = c++11 CLANG_CXX_LIBRARY = libc++ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" -isystem "${PODS_ROOT}/Headers/Public/Parse" -isystem "${PODS_ROOT}/Headers/Public/pop" -OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"Bolts" -l"ContextMenu.iOS" -l"Parse" -l"c++" -l"pop" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "Accounts" -weak_framework "Social" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" -isystem "${PODS_ROOT}/Headers/Public/Parse" -isystem "${PODS_ROOT}/Headers/Public/ParseUI" -isystem "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"Bolts" -l"ContextMenu.iOS" -l"Parse" -l"ParseUI" -l"c++" -l"pop" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "Foundation" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "Accounts" -weak_framework "Social" PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig b/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig index 33ec719..041274f 100644 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig @@ -1,7 +1,7 @@ CLANG_CXX_LANGUAGE_STANDARD = c++11 CLANG_CXX_LIBRARY = libc++ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" -isystem "${PODS_ROOT}/Headers/Public/Parse" -isystem "${PODS_ROOT}/Headers/Public/pop" -OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"Bolts" -l"ContextMenu.iOS" -l"Parse" -l"c++" -l"pop" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "Accounts" -weak_framework "Social" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" -isystem "${PODS_ROOT}/Headers/Public/Parse" -isystem "${PODS_ROOT}/Headers/Public/ParseUI" -isystem "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"Bolts" -l"ContextMenu.iOS" -l"Parse" -l"ParseUI" -l"c++" -l"pop" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "Foundation" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "Accounts" -weak_framework "Social" PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/pop/pop-Private.xcconfig b/BreakingBad/Pods/Target Support Files/pop/pop-Private.xcconfig index e537f3e..627f46a 100644 --- a/BreakingBad/Pods/Target Support Files/pop/pop-Private.xcconfig +++ b/BreakingBad/Pods/Target Support Files/pop/pop-Private.xcconfig @@ -2,7 +2,7 @@ CLANG_CXX_LANGUAGE_STANDARD = ${POP_CLANG_CXX_LANGUAGE_STANDARD} CLANG_CXX_LIBRARY = ${POP_CLANG_CXX_LIBRARY} GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/pop" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/pop" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" OTHER_LDFLAGS = ${POP_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES \ No newline at end of file From 4a5eab5b9fdb143dd440eb95b685bc3ed88b100a Mon Sep 17 00:00:00 2001 From: Zoufishan Mehdi Date: Fri, 16 Oct 2015 08:38:54 -0400 Subject: [PATCH 23/44] Pods added --- .../BreakingBad/Base.lproj/Main.storyboard | 6 +- BreakingBad/BreakingBad/Habit.h | 1 - BreakingBad/BreakingBad/MainPageVC.m | 2 + BreakingBad/Podfile | 6 +- BreakingBad/Podfile.lock | 5 + BreakingBad/Pods/Manifest.lock | 5 + .../Pods/Pods.xcodeproj/project.pbxproj | 4423 +++++++++-------- .../AFNetworking-Private.xcconfig | 2 +- .../Bolts/Bolts-Private.xcconfig | 2 +- .../ContextMenu.iOS-Private.xcconfig | 2 +- .../Parse/Parse-Private.xcconfig | 2 +- .../Pods/Pods-acknowledgements.markdown | 21 + .../Pods/Pods-acknowledgements.plist | 25 + .../Pods/Pods-resources.sh | 2 + .../Pods/Pods.debug.xcconfig | 6 +- .../Pods/Pods.release.xcconfig | 6 +- .../pop/pop-Private.xcconfig | 2 +- 17 files changed, 2482 insertions(+), 2036 deletions(-) diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index 6fd1c30..e5b3304 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -1,7 +1,7 @@ - + - + @@ -1015,7 +1015,7 @@ - + diff --git a/BreakingBad/BreakingBad/Habit.h b/BreakingBad/BreakingBad/Habit.h index 041514a..4890727 100644 --- a/BreakingBad/BreakingBad/Habit.h +++ b/BreakingBad/BreakingBad/Habit.h @@ -6,7 +6,6 @@ // Copyright © 2015 Zoufishan Mehdi. All rights reserved. // -#import "PFObject.h" #import #import "Entry.h" #import "Goal.h" diff --git a/BreakingBad/BreakingBad/MainPageVC.m b/BreakingBad/BreakingBad/MainPageVC.m index d600804..903a26c 100644 --- a/BreakingBad/BreakingBad/MainPageVC.m +++ b/BreakingBad/BreakingBad/MainPageVC.m @@ -104,6 +104,7 @@ - (IBAction)doneButtonTapped:(UIButton *)sender { -(void)answersFromPreviousScreen{ for (int i=0; i 2.0" + pod ‘pop’, ‘~> 1.0’ pod 'Parse' -pod "AFNetworking", "~> 2.0" +pod 'ContextMenu.iOS', '~> 1.0.0' -pod 'ContextMenu.iOS', '~> 1.0.0' \ No newline at end of file +pod 'ParseUI' \ No newline at end of file diff --git a/BreakingBad/Podfile.lock b/BreakingBad/Podfile.lock index 1ef2cd3..25b486b 100644 --- a/BreakingBad/Podfile.lock +++ b/BreakingBad/Podfile.lock @@ -24,12 +24,16 @@ PODS: - ContextMenu.iOS (1.0.0) - Parse (1.9.0): - Bolts/Tasks (>= 1.3.0) + - ParseUI (1.1.6): + - Bolts/Tasks (~> 1.2) + - Parse (~> 1.8) - pop (1.0.8) DEPENDENCIES: - AFNetworking (~> 2.0) - ContextMenu.iOS (~> 1.0.0) - Parse + - ParseUI - pop (~> 1.0) SPEC CHECKSUMS: @@ -37,6 +41,7 @@ SPEC CHECKSUMS: Bolts: 805a4a87413e49d4a0c2b7d469084cbc46b09342 ContextMenu.iOS: 7da78b3f99e604669b75e55146c6c33147f64f99 Parse: 712efbc476d4f47b0f96b70db7e53101575753aa + ParseUI: 8a22e448c03f825203d8c379c80523517f68baa3 pop: bb773ae2c791ca2629de13b347e7a8b450fa6a57 COCOAPODS: 0.38.2 diff --git a/BreakingBad/Pods/Manifest.lock b/BreakingBad/Pods/Manifest.lock index 1ef2cd3..25b486b 100644 --- a/BreakingBad/Pods/Manifest.lock +++ b/BreakingBad/Pods/Manifest.lock @@ -24,12 +24,16 @@ PODS: - ContextMenu.iOS (1.0.0) - Parse (1.9.0): - Bolts/Tasks (>= 1.3.0) + - ParseUI (1.1.6): + - Bolts/Tasks (~> 1.2) + - Parse (~> 1.8) - pop (1.0.8) DEPENDENCIES: - AFNetworking (~> 2.0) - ContextMenu.iOS (~> 1.0.0) - Parse + - ParseUI - pop (~> 1.0) SPEC CHECKSUMS: @@ -37,6 +41,7 @@ SPEC CHECKSUMS: Bolts: 805a4a87413e49d4a0c2b7d469084cbc46b09342 ContextMenu.iOS: 7da78b3f99e604669b75e55146c6c33147f64f99 Parse: 712efbc476d4f47b0f96b70db7e53101575753aa + ParseUI: 8a22e448c03f825203d8c379c80523517f68baa3 pop: bb773ae2c791ca2629de13b347e7a8b450fa6a57 COCOAPODS: 0.38.2 diff --git a/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj b/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj index 4ce7cd5..031dae0 100644 --- a/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj +++ b/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj @@ -7,1239 +7,1433 @@ objects = { /* Begin PBXBuildFile section */ - 00275592A13B5D46B08409D995DB6ADB /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = FB46E4BC6BAC7355C701C95033BF325F /* UIButton+AFNetworking.m */; }; - 013AE4595BF56A559DD3CA81669B0D67 /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 411AD8B8B53F6CAF9198BBBBB07AC033 /* AFNetworkReachabilityManager.h */; }; - 0153E7B72CC1F58001A1FB4CA726D5C8 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BABE1F9D15A2416835BA1EC9EB7E043 /* QuartzCore.framework */; }; - 025598DFFF793FB641F506825074F34A /* PFPushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CCBDC7EA64ECE9974D334AA69A02EEA /* PFPushManager.m */; }; - 025BE970FE1936D8AE73A5BD6FCF5A4D /* PFAnalyticsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B55313727430781904B26ED39BC5BD6 /* PFAnalyticsController.m */; }; + 0024D7BC7A0639FFACCEF36498EC3DE9 /* PFFileState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 031595D3DC7EF8A1E64E65CF08D1E9CB /* PFFileState_Private.h */; }; + 0045ABA8D9F3A30ABB55603E69D6D2A8 /* PFTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = FDE35452BF4B80CB28ADE963A9F8CF1C /* PFTableViewCell.h */; }; + 0099E2B1CF4EC129452C3FB7F8C4BCF6 /* ParseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 394EF4EEC81814669228D349F9F144BE /* ParseManager.m */; }; + 00E2E8DA8CBB386AD54FD2755115FEF8 /* PFObjectSubclassingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 369554517F91CBCD67CC278B273276A3 /* PFObjectSubclassingController.h */; }; + 013D6D5652BD7C5D309F6C37C93DE74C /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = B8F7ABB411DE6940B531BD2B00F7330B /* PFDecoder.h */; }; + 01FEAEEB81E00A55AD412B5EC194D9F4 /* ParseUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 53DF9F80DE5B4C6F41704F060C983B26 /* ParseUI.h */; }; + 0324A587668B5642075BB00C08E967C7 /* PFHTTPURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EBC27DC0B4BA50C770DDFAE2B83B764 /* PFHTTPURLRequestConstructor.m */; }; + 03ADA7223CB65F47810CC8184A08DA6C /* PFRESTFileCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D050AD2BA4F07A170535D2D81FE262D /* PFRESTFileCommand.h */; }; 03FF532EB8C5304EFA2E77016458C281 /* POPPropertyAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2726A20CBCFFB77F9972C445E8972099 /* POPPropertyAnimation.mm */; }; - 055D430D3080E69525A1CB4E226AE6AD /* PFAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = EE8606221826FA5909EFFA2016DEE26C /* PFAnalytics.h */; }; - 0567E8CB52A88D784048A608C7DFA3AD /* PFAnonymousUtils_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 671A1745311D8EA359B1DB95D621711E /* PFAnonymousUtils_Private.h */; }; - 058502343AC3618129AC9439EA85335A /* PFMutableFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 61DE303474ACF3AAEB6BEF7CF3151683 /* PFMutableFileState.h */; }; - 060F06CDB2C21C334A0082FD9EA5D079 /* PFRelation.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FCA6291D3A1D8E40FC410D0747380DC /* PFRelation.m */; }; + 042646D0F438BF1C307783B49D4426C0 /* PFUIAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FD690C48213961E0F282ADD5C6D7648 /* PFUIAlertView.h */; }; + 04EEEAD9FEA496471400B5FCD3F39CE9 /* PFUserConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 497895A9634510E0B9DB68DF989C06DE /* PFUserConstants.m */; }; + 058C33FB5C2A3719FE4ADF9A72690954 /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F7FEA8114B1934AF71EEAF5B655B908 /* Pods-dummy.m */; }; + 06029A94B7299AA3DC1B3DD1B50BAC88 /* PFRect.h in Headers */ = {isa = PBXBuildFile; fileRef = 62B118BBE51E9202B7097AF728173D22 /* PFRect.h */; }; + 06234D8D97C5FE672D22D23B87092CA5 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80E5920EF0293041A672DF21CBD90614 /* CoreGraphics.framework */; }; + 0640C9058A1F6230E1FBB12FEAFAABFB /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 03175A1837930350DA8D3A3A6948BD08 /* AFURLRequestSerialization.h */; }; + 0656001E447ED526B97BE8CC8AB012B1 /* PFMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 994A66CEBCB74EC7AF6E43F12721CE79 /* PFMacros.h */; }; + 0689650490C5FA178FB55BF99FEFE32A /* PFSQLiteDatabaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 149F81D2C02EC8ADD0B70583B731419F /* PFSQLiteDatabaseController.m */; }; + 07689D7D557EEC2F26936CD3E8E12AAC /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = EBDAD0FE6DE1A120548B3CFB0AA691CB /* AFURLConnectionOperation.m */; }; + 076E3621ADABBBB648A49FFE19C7A692 /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA4A0414EB82636A5445DB1B24ECFE5B /* AFURLSessionManager.h */; }; + 0779F394E8BC13F56C39B0AD79D237AC /* PFInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = FD2FADA1376E997E564678D188467245 /* PFInstallation.m */; }; + 078302BF0370A1BE4085C8F9B22D2CBA /* PFObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 4819C1A3A8B14056B5A05DC9FFFF5712 /* PFObjectControlling.h */; }; + 07B9F4A97FC481BEFD13C6A7A876AE65 /* PFActivityIndicatorCollectionReusableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 851D6B30190D7C9B082DD326B4981335 /* PFActivityIndicatorCollectionReusableView.h */; }; + 080EF2C03F1BA90A754AB0F92AA0BCBB /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 59F9FF5E0E7F71609087AFEB003C5979 /* AFURLSessionManager.m */; }; + 08F14D425390F9F5229730E9364AC953 /* PFTextButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F405E5BADB8279B5FFECE2906428FDB /* PFTextButton.m */; }; + 09C02249811DB88C1AFD1CB77A28F194 /* PFErrorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 88A85349B94E9627FD8BFD487C72696F /* PFErrorUtilities.h */; }; + 09EBDBF272847A14AAB323F0059319D6 /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F403ED31C60BFC3D4DF66EECD5E4677 /* UIRefreshControl+AFNetworking.m */; }; 09F160052D6F4DF4F769F6A2A351071C /* POPAnimationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = EC10F21A5E230A911C2C2E5082CDAE4B /* POPAnimationPrivate.h */; }; - 0A963324CC60CAA719E82B65A42F8F92 /* PFRESTPushCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D244FD9C2061C46A05C67E3557A6D7A9 /* PFRESTPushCommand.h */; }; - 0BE6F472A9E14DECF3CC4B2AC719A807 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F270D2F5F74F0965904AC60E014742A /* UIKit.framework */; }; - 0CADB282A28A344B568CD36701CD99A0 /* PFFileDataStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 206BAB6E51C3AC0ACA2E1320A911DA36 /* PFFileDataStream.m */; }; - 0D2DC39580098F73627DE62060F0E256 /* PFEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C0E7BEE92130638A860786486BF4398 /* PFEventuallyQueue.m */; }; + 0A5C5780FD7F1B7733BB3782558AE5F2 /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 3743695C2114BF3EB5B9857261C0E101 /* BFTask+Private.m */; }; + 0AD7746E244AF27FA8348E42A6C58C75 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = F59ECC8674FE3D5A108F47F1651EFE1D /* AFURLRequestSerialization.m */; }; + 0B171376313276CA617C411FEEBBC0E9 /* PFFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = FBEAAECD3B1ABCA0ECC42C1F71EA1389 /* PFFileState.m */; }; + 0B5B3411B3BDF12421E451AA6E4FC091 /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = B58E5884403A0B1E1DCEB097E80C1CC5 /* AFURLResponseSerialization.h */; }; + 0B922D7B1F2BEE58B09201C396ED1E50 /* PFQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D06333C4BBE1FBE4CBCF7F86CB65BB6 /* PFQueryState.m */; }; + 0C0269A055BF9D65CECCEFF350E25230 /* PFSessionController.m in Sources */ = {isa = PBXBuildFile; fileRef = FEAD761469117CF410C9357452E0C1E8 /* PFSessionController.m */; }; + 0C3A9DF2C1A26FB65CE3062753635657 /* PFPushPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = F5F39F11949B1AF48CEC2977D2EB2C6C /* PFPushPrivate.h */; }; + 0C48B1C5C5ABD393181AC04C2CB5A023 /* PFRESTCloudCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = EC7948AA2D47B2FE0B1D838A6F03558D /* PFRESTCloudCommand.h */; }; + 0D12AE079131A22078CEA80F9B61BDE6 /* ParseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 0000CB1FCEE55041E8F58F0856C79A8A /* ParseInternal.h */; }; + 0DD5E8AC58D89FCDF4531A3854C753D3 /* PFAnalytics_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D06BD4ED28E55FEADFF8D4595B1BD6E /* PFAnalytics_Private.h */; }; + 0DF1F1C0EB06F34AD36329B2953E83A3 /* PFObjectEstimatedData.m in Sources */ = {isa = PBXBuildFile; fileRef = E745D4E9E1D24B93FFDC0898348695CD /* PFObjectEstimatedData.m */; }; 0E111996ED8AB07B504AD6200F460C6E /* POP.h in Headers */ = {isa = PBXBuildFile; fileRef = 38C1E5A4A6882760CB349FCABD22A9DC /* POP.h */; }; - 0ECD46F443DEFF63C3BCBDC3A75363AA /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DB8817B308E2B46E23993461AC18E54 /* BFExecutor.h */; }; - 0F0B220351D06ECFB17DFF2EC338D0CD /* PFCurrentConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D19EBD75979B9CD23ABA38BA45D0DCB /* PFCurrentConfigController.h */; }; - 1067E9F5F6F4D70E1111D34A159980FB /* PFUserAuthenticationController.m in Sources */ = {isa = PBXBuildFile; fileRef = AD9250D9FE4979DF37C24BE1CDB4FF8B /* PFUserAuthenticationController.m */; }; - 10812A750A13684F4C638D481A7B5234 /* PFInstallationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A8AD04541066E8C429FCD51E8A604FF1 /* PFInstallationPrivate.h */; }; - 10989B990683FCA58C99BB82050E5077 /* PFPinningEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BC40E8FF522D488100477128A373255 /* PFPinningEventuallyQueue.m */; }; - 10B6EC5F1F87C64ECBB431E75CBFD609 /* PFRelation.h in Headers */ = {isa = PBXBuildFile; fileRef = D26D8AB91D60CAC4AF163A949239DE49 /* PFRelation.h */; }; - 118BAA009D3D59B3EAE79710C991E16F /* PFObjectConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 5710C75607065D22ED2DB5CCCFB27A3D /* PFObjectConstants.h */; }; + 0E71F85430FA51746DA14C7A3931A329 /* PFUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 303C7A0846CA6E57C5D163C23AE209AE /* PFUser.h */; }; + 0E7C6F4A18B0C575C95C2B728F287226 /* PFBase64Encoder.m in Sources */ = {isa = PBXBuildFile; fileRef = E8BC86E8DE6DA9A9297FDF54AD60295D /* PFBase64Encoder.m */; }; + 0F1595A3835898594683BEBD06A0B51E /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 208E32CC6A5122BFD39121E55715F438 /* QuartzCore.framework */; }; + 0FFE217A2F5661D71D515960C6C127A3 /* PFACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = D8B6D0A282B1C743D20D46AA5A90FAA2 /* PFACLState.m */; }; + 1011795ABA59FD905EEAD903E4FD6B83 /* PFObjectEstimatedData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C674CCEDB9884C366D0C653803CBF33 /* PFObjectEstimatedData.h */; }; + 10192E8B68AB9EA006F3831B041D5B76 /* PFAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DBBE4DE5894FB4DC446A3E0D9F52244 /* PFAlertView.h */; }; + 10F5A5F62CE7A90BB74CAEB8E6D9F621 /* PFFieldOperationDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = C0DC2D6010A3FAE98396FB45988CE381 /* PFFieldOperationDecoder.m */; }; + 1132ABF6EE0847419FB61C4426DDED7D /* PFRESTAnalyticsCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 74026F3639040297727453102A9BBBFC /* PFRESTAnalyticsCommand.m */; }; + 1142F84DA854B1C4DC3AAE803BC1E0F7 /* PFCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = ADD3EA0352B2B88D39CE711BB75D1CF7 /* PFCategoryLoader.m */; }; + 1175BA0356280D99698F51554B61E080 /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E4EC0E5DE4BFEA3D3B7A89052CBB3ED /* PFCommandRunning.m */; }; 11924DA123F63743B409090BFC425AD2 /* POPCGUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CC05709207C91767940918CDD4779DC /* POPCGUtils.h */; }; - 1249B7E8D033D0D59D0D8F097A745AB3 /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 41A069B9AF3C8F611F76F20326AB035E /* AFNetworkActivityIndicatorManager.m */; }; - 12641D479C071B60EF715865ABFCE798 /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C4ACAFFC579192F80AE309D38F4CE0D /* PFDecoder.m */; }; - 1380A386F92D641C726FA9687404B11E /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 80B7FAB2B889140EDF2DC60D3C4A5969 /* AFURLResponseSerialization.m */; }; - 1421591EB34905B0745B67D11682989B /* PFPush.h in Headers */ = {isa = PBXBuildFile; fileRef = E6235BD1313049794F1B1DA7AB8B72BF /* PFPush.h */; }; - 144AF01BA8F6AC27B465052C4C1F4A63 /* PFSQLiteDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 846998BF4B29751792079F5759BBA274 /* PFSQLiteDatabase_Private.h */; }; - 149FA64D0DB7931320E1337D5DF51D95 /* PFPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 189B90A77BD5596205FB77D8F7DBBC66 /* PFPin.h */; }; - 14AFCA315D7308DDC8D506B3F74FADF7 /* PFQueryPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E19C92B6E4B8413D0F549918EC73FD0 /* PFQueryPrivate.h */; }; - 1502050CA80F5B97E273857066C10540 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 51740A0EDDF3B04E8A46D98B3807D440 /* AFHTTPSessionManager.m */; }; - 157A5FFCF49C427C049F82A6C6E7EF9C /* PFPinningObjectStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 315895D529B1136E61253E4EEE127FAC /* PFPinningObjectStore.m */; }; - 16076CA62CD1EEB4CFA1957E9F923B40 /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = F08E0A9E75FBD4FAACDB3C8A68081A32 /* BFTask+Private.m */; }; - 16CF2BCA2E368236EF475D6362A13491 /* PFRESTAnalyticsCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 82175545FE728571466A9FD6E8D8A7DE /* PFRESTAnalyticsCommand.h */; }; - 186FCA5BEF75F30B6A368BD3819F22E7 /* PFConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = E8FCE3D950703287AE285D63EEA38289 /* PFConstants.h */; }; - 18B651969BB7CBCC4E2B38F1631FF6E2 /* PFObjectFileCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D14E98ACAAB4CCD1367FDFBC9088D27 /* PFObjectFileCoder.h */; }; - 18B67D18CD4B27B89C1FB0B4C6E33EDE /* PFCommandURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 669BF4D4C83FA3E0ABEF32501AC4C5EE /* PFCommandURLRequestConstructor.h */; }; - 191D1C449C141C961A7F6B7D6982B73E /* PFRESTAnalyticsCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 946D9742CB5DB1C57ED0E3BBA63E66BD /* PFRESTAnalyticsCommand.m */; }; - 192C2017BBCDB1177A5F77494B10ADEF /* PFObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 656B8A19AFF797C4926D6E2E8D102049 /* PFObjectController.m */; }; + 11A5D0889172264A4464150FF2E5AFB4 /* PFDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3D59BA0C2C12C85BC9B604166741A5 /* PFDevice.h */; }; + 132B5AF281B12843272B902AF2E38323 /* PFPurchaseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9BC43D31ABEE63A34807EE8E39A020 /* PFPurchaseTableViewCell.m */; }; + 1339A63B8479A1FA37BF9497C8470502 /* PFUserFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 2573EC8B9CE397FC9159DD313B946DDD /* PFUserFileCodingLogic.h */; }; + 1365B699EB0CC083D9DF46B0159F1941 /* PFDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 351FD95748A1E93F1C6AF4531E3F4E36 /* PFDateFormatter.h */; }; + 140EFD94FBE7BB82D106292D04C1BE77 /* PFOfflineQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = B3502383881063B9745DA4E5FCDAD557 /* PFOfflineQueryController.h */; }; + 1438BD13EE86C427BFF89FB983E5C521 /* PFObjectFilePersistenceController.m in Sources */ = {isa = PBXBuildFile; fileRef = 917A576B44FACB8621EE8D58A98BB1AA /* PFObjectFilePersistenceController.m */; }; + 15BACF6F4392C06333ABB855D1C09D26 /* PFPushChannelsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FA74BE27642D3B7276E321358B7C527 /* PFPushChannelsController.m */; }; + 15C923711123142A187E54AF51DAD21F /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 296225BCAEC1922B0211398A744BC075 /* BFExecutor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 16B2C95404E46C2892CDE9A8326E2744 /* PFRESTObjectCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = BE3E9F01B6629C15BB1B2DCB06D9F593 /* PFRESTObjectCommand.h */; }; + 1726653C23DD9E9D779480508DDAF357 /* PFObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A0E583B09D603C1E642811EA63D1199 /* PFObjectState.m */; }; + 17A5133A7E56EE7FB1BF9EDA962CD339 /* PFPurchase.m in Sources */ = {isa = PBXBuildFile; fileRef = C1E4A4665A4D0598F98C904BA74D0023 /* PFPurchase.m */; }; + 1806FCD022ED494BFB481CC76AAE2B03 /* PFPrimaryButton.m in Sources */ = {isa = PBXBuildFile; fileRef = ED78E3031E30DEAD64E709DC1A22E2B9 /* PFPrimaryButton.m */; }; + 191DA66337D45246746ADE03C8FECDF6 /* PFResources.m in Sources */ = {isa = PBXBuildFile; fileRef = 12FE2FAAD83211D8CB07A040AD0CBA23 /* PFResources.m */; }; 1937EC6CD83AA2FAB3455591AB074459 /* POPPropertyAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 134BDC30251FB7A5465C17F603FCAC5F /* POPPropertyAnimationInternal.h */; }; - 1B15C523B8D5B8B3661CEA14DA2BE238 /* PFLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 80678CF83F7E4592403D479266CD73C6 /* PFLogger.h */; }; - 1B3D2F66E11EACBEC93D5138DDA5991E /* PFProduct.h in Headers */ = {isa = PBXBuildFile; fileRef = C4F300D4AA623B3DFFDF7971E2B5A614 /* PFProduct.h */; }; - 1BCB49287D526538FE27C92495A7C7C9 /* PFMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = E4A624B26435247F139B091B03F95E5A /* PFMacros.h */; }; + 195DCB567D8AFBBEA789010D114F3D67 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + 197B2980E982F1D819677364F960ED86 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CA86409327B8CA5A123744B01FF0033 /* SystemConfiguration.framework */; }; + 19B9A6736568C7B840E400D5456C3107 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = D04F197DB09C3BC16DC45B4A8D72FA58 /* UIProgressView+AFNetworking.m */; }; + 19C506AF29D0C277862D935FF2B6929A /* BFDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 66EEF19A1E2FD56ED08CB4BD7CC541D7 /* BFDefines.h */; }; + 19FB97F0B4D1078303BA9CC4B45321D2 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BEB99F4555012D9359140EE13E67A2EF /* CFNetwork.framework */; }; + 1A4FBF768112F503096A3FF377FE229B /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EEEA0671CACE4C69BF00921C419D1C8 /* BFTaskCompletionSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 1BAC1AF93D61F5F7840F42640655EC05 /* PFPropertyInfo_Runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = FF65DA49F2D090C5B8833FE5813520D3 /* PFPropertyInfo_Runtime.h */; }; 1BEBEDAB53B9DB3AD45E1F70637747F9 /* POPSpringSolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 6961E549FC85F85EB7560B887B11C928 /* POPSpringSolver.h */; }; - 1CAD0670AB203262F90F62BC3BADEB14 /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA4157CE1B57DF0CDF63B24888DCEA61 /* PFObjectSubclassingController.m */; }; - 1D5C062D011FA396D6BD0652197BC3D9 /* PFUserConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 9645D0E8258AB75B2C992E0915EA9BC2 /* PFUserConstants.h */; }; - 1DA04B4E7477A3C6ED4E64EB100997C3 /* PFACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 53683441896998F6CE0216D4310DD24D /* PFACLState.h */; }; - 1E924C4848F63BBFC1FCF597FC9D5FD2 /* PFReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EBBF4F6FA934C6BCACE0C5744A3BF58 /* PFReachability.h */; }; - 1EEB8D22B9718EDB6CB1C314B3EB38F4 /* PFFileStagingController.h in Headers */ = {isa = PBXBuildFile; fileRef = AD274DB5984402947E47F0A1B92E9CA4 /* PFFileStagingController.h */; }; - 2060BB5093B7CC2D7AB326AD3FE0CEDC /* PFInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81EA6C27FFDF760CFB4767BB48E66220 /* PFInstallationController.m */; }; - 20CE99207001FC9C10E242287C253996 /* PFObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = CCFA76D1938B2CCED5785C13FA4FC5B8 /* PFObjectController.h */; }; - 21D65B5E8DF938F32091BDBD66B1E5D1 /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = AAAE696C714BEA1FD2CB7F7E37484204 /* BFCancellationTokenRegistration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 22028A0623B440907DBA76FE0F64B6E0 /* PFSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 752500BB2A0459E3CB234F46BFDE1EED /* PFSession.h */; }; + 1D0BD1009819AAD1AB8F8F06ADEBC826 /* PFLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0085A955107B8FFE1924A08C14BC6FF8 /* PFLocationManager.m */; }; + 1D48242F40C98225F12C6A79D022CC58 /* PFCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 33748C4CAD0A1EE35189C936C5F58CB1 /* PFCollectionViewCell.m */; }; + 1E89BEBB3085CA72872A08470CC5E905 /* ParseModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BE3F7B0445F96510397621689B94DD6 /* ParseModule.m */; }; + 1F07EE074A930CACDE467A34B20A80AF /* PFUIAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 46179347059FF8F4103F56305447D022 /* PFUIAlertView.m */; }; + 1F08E0262BF7F1367AF419DA62CD4F86 /* PFRect.m in Sources */ = {isa = PBXBuildFile; fileRef = E5730E6F41E92311BA1BDA0005883220 /* PFRect.m */; }; + 204772803C990F2F4CE6C83C40143CC7 /* PFEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = AC064F00E5953DC4C9CE6D8AD0D51ED1 /* PFEventuallyQueue.m */; }; + 215DDEFDDA46EDCB2DB0422E1D786A48 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EEBDD515AD0E2563F96DA9C03BF533EC /* Security.framework */; }; 22030D04E39440FA02B75449A95BF767 /* POPAnimationEventInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5785AD09C2208501D5161E950E701889 /* POPAnimationEventInternal.h */; }; + 225C0CEF370FAAE240ED3B5232D8AA89 /* PFConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A235350977776A4ADAEAB1CAA67DF8F /* PFConfig_Private.h */; }; 226B9015C8E393975BCF1AFEA63C1D51 /* POPGeometry.mm in Sources */ = {isa = PBXBuildFile; fileRef = B330BCF969EF6189E02E10926FB95CED /* POPGeometry.mm */; }; - 2322FAF5379B9BC9FBEFF748570BECCA /* PFCommandResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 653B4653F0D1C20696A6E65E888E8D15 /* PFCommandResult.m */; }; + 23C8801C4FC1879BFD10C66519E8FBCE /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80E5920EF0293041A672DF21CBD90614 /* CoreGraphics.framework */; }; + 23F246EB09732B163DA235C17CCC832A /* PFAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F203F67E77F4F810024D9C3C07CDBF0 /* PFAnalytics.h */; }; 23FC5124B2FA2C879AFE378BBB12AC3A /* POPSpringAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C24554FAA71D841BC3C0759DA37874AE /* POPSpringAnimation.mm */; }; - 244417641E77C9E95C92078E54777D85 /* PFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C7C65DD82B3A08F62D43E9DAC3B23880 /* PFNetworkActivityIndicatorManager.h */; }; - 2499A62D47B33872BF0DADA0BAC4BD47 /* PFMulticastDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 016F2569F5E0DA62E089B095D3A04E84 /* PFMulticastDelegate.h */; }; - 24B5B7B9820114759F93C6FD6A713CD4 /* PFMutableACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E69E884C61DBE3CA50B5B88897651DB /* PFMutableACLState.h */; }; - 24BA59BBC3BD72DAB4E18A3549C1C70C /* PFLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F0F3A2FA993D77CC93EA7FCA0571B6E3 /* PFLocationManager.m */; }; - 2627401700D6CCD2EF48DDF1FE042FFE /* PFObjectLocalIdStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 9102F91F4F8FC737DF8F8B04EB6B1183 /* PFObjectLocalIdStore.m */; }; - 26BC591287F171CDC227D4C715DE0BFD /* PFSQLiteDatabaseResult.h in Headers */ = {isa = PBXBuildFile; fileRef = FFD183F4D915B996DC61B082E5317000 /* PFSQLiteDatabaseResult.h */; }; - 26E8BB7BF9D5A57648508C4E19560B77 /* PFCachedQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = F9A596AB40BA679CB6E7CAFF9C12420F /* PFCachedQueryController.m */; }; - 279E99356D07335E887C39DB5C0E5370 /* PFPinningObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 37D8598915FD79DCA21C88192869017A /* PFPinningObjectStore.h */; }; - 27B935CBBBBEFD1F68871D79F7631F58 /* PFRESTCloudCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 63CF9DFF309CFA031748CEB31E227BB9 /* PFRESTCloudCommand.h */; }; - 27C6F9BEE80BC03933C78785106C81FE /* YALContextMenuTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 385A446A8250571BBD7FF461E05E1382 /* YALContextMenuTableView.m */; }; - 27EAB5CE83D76D32110761949B978720 /* PFBaseState.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7693C271516E5E5D162BA7DC113F4E /* PFBaseState.h */; }; - 2802861D952EDBB98D3D81BAFDEBC041 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BABE1F9D15A2416835BA1EC9EB7E043 /* QuartzCore.framework */; }; - 28A7C073D31DDF6C59967A931BD5766C /* PFOfflineQueryLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = EAFA435D26900861E36F1BAF155390C7 /* PFOfflineQueryLogic.h */; }; - 298E48D1F7EE66DBD2CE7B1081DAAAB3 /* PFObjectFilePersistenceController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7123F7FE1F84DEDBE2ED35D8844839 /* PFObjectFilePersistenceController.h */; }; + 243BC984DF0446C5D09D04FAB0021DA6 /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 24C4B6C6CA8AB54346686D3EFFC5B320 /* AFNetworking-dummy.m */; }; + 246A6C38925155A6D2BE0A0F60CB3F80 /* PFConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = F8F57FE2C22B99C8E801465770A4BDEB /* PFConfig.h */; }; + 2502AC0DFD698E989E6EF9016784D050 /* PFPurchaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CAEE54F40D12424118C16A4A6A66E4 /* PFPurchaseController.h */; }; + 2544CBE3CF2F43C81E1F241DDAE2694C /* PFPrimaryButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AB19709851545DCCBA4D0FF7CC4DC37 /* PFPrimaryButton.h */; }; + 263A5E1A0F6C79D8689218B8D4FB01E9 /* PFQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 936B40D958EFF2CAD5842B3F198BD796 /* PFQueryState.h */; }; + 26B7EDDF6363F273CFB7F3DEED91CF80 /* PFLogInViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A00E3EBED97D7DA5FA9DA201848A51D0 /* PFLogInViewController.m */; }; + 278E40F6EE95CF00DB279DCC0011B8E3 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = C3071E3D22EE4605A9D1686C5BF5D5CC /* PFEncoder.m */; }; + 27E0A3BCBFFECAB4AED61DF691863C7F /* PFObject.m in Sources */ = {isa = PBXBuildFile; fileRef = F12EF319251CA509AE6922D4497B8F33 /* PFObject.m */; }; + 2845AA659BE5007C74F91E8D1FCE10A3 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F0B32275A18A39752E1C36A626FA5755 /* AFHTTPSessionManager.m */; }; + 28975C6BA06E7BD134892493BFD42534 /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 88DD76E6AD2481B16B2BBF010ED8C5C5 /* PFGeoPointPrivate.h */; }; + 2981ECF4D915465E57AB031FBE516899 /* PFObjectFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 97944F65FC485382F36D6DC38FAD26A0 /* PFObjectFileCodingLogic.m */; }; + 2A3C8A5AC16E376D66797A34A10F87AB /* PFSessionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E24DE585AD9B9268FFE89EBC23F41F8 /* PFSessionController.h */; }; + 2A509789A28CF0671A95CC8087CE970F /* PFRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B4AF5367CECBE37C9C156CE5642F10C /* PFRelationState.h */; }; 2AD822A4C6DD9CA6D499CF6955198F4A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - 2AE2ADB09903F3B39869810739754118 /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B6673C9F7E97CEA6C3B3B57C906C095 /* AFURLSessionManager.h */; }; - 2B08C89BCB6F8CDE246F90E71C343694 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 74BAE971C6A2FC6F319D21B31E77EAE8 /* SystemConfiguration.framework */; }; - 2B0B2B3095BEFC0D0520B92D5354F428 /* PFURLSessionCommandRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = 075D17B28FD88D19723BDD0F7C7ACF85 /* PFURLSessionCommandRunner.m */; }; - 2C043C346C73A86BCA7BAF2D9B4A6D42 /* PFConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3501C65AE5330DD19D3236E70095C9D8 /* PFConfigController.m */; }; - 2C7EC42E5437F4F927B80CF65D5CEA3B /* PFObject.m in Sources */ = {isa = PBXBuildFile; fileRef = ADEFE34C92FF818B135715C323E4963C /* PFObject.m */; }; - 2CD85B954E0A03C2FC81163F60CFC4D8 /* PFApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DC525DF3A9AB295F68FFA79C1865B4D /* PFApplication.m */; }; - 2CF3E58396AB85B06C5F11298F43FE91 /* PFMultiProcessFileLockController.h in Headers */ = {isa = PBXBuildFile; fileRef = CA70C152E8EBE75160C47A587C7EC00D /* PFMultiProcessFileLockController.h */; }; - 2E135CA6B413C0D9809F7BC1D11822E1 /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = C61F3C1B791FFC9E7C5ADE180684470E /* UIActivityIndicatorView+AFNetworking.h */; }; - 2F3A21F75992E245B70D2FAB4213679F /* PFObjectConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 923EF0E8FAAA93BA1AF9399DE58923FF /* PFObjectConstants.m */; }; - 3039F75251A2A754A7525EEDBF3907D1 /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 754C6873E010FF768376E458C1EA6449 /* BFCancellationToken.h */; }; - 307DC92332AA8387F0ED533660A7A2DF /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E1148A11007AFF78ABDECD376185D39 /* CoreLocation.framework */; }; - 30FFBDB396C82253175D828DA2BEA835 /* PFRESTQueryCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 91B168BFBEBBF3272A49E4240325DAC3 /* PFRESTQueryCommand.h */; }; - 3114529BA3CA84D2274E6E9220D1B1EE /* PFUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = 358BFE48BAAE8F3F03CD0C0904BC4C08 /* PFUserController.m */; }; - 31E55D99949F54193700F33C7FD34DA6 /* PFFileController.h in Headers */ = {isa = PBXBuildFile; fileRef = 489E3B9351E8F3F82DAFE89EEEC84804 /* PFFileController.h */; }; + 2B434ABB60199E6CDC44BAFFBBDE0BBA /* AFURLConnectionOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = AD49C218C28CC03A2219320D99CD8AAA /* AFURLConnectionOperation.h */; }; + 2CE1FD6550579515D80B980891301A7D /* PFURLSessionUploadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 388FD96F0258A11A9BDACFB28722339B /* PFURLSessionUploadTaskDelegate.m */; }; + 2D23F414111C13F47EC26E5EBCB71E51 /* PFRESTQueryCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F1C27BA471E9E9B97D6C406B2BB3AE4 /* PFRESTQueryCommand.m */; }; + 2D3A262547C2D9C8B23FE8DA47DCB111 /* PFHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 428C2550960F31AF80B66DC6FF7060E7 /* PFHTTPRequest.h */; }; + 2D7E71CDA01B26FFF74EFE1FED16DAE0 /* PFFileDataStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 4556777EF2137403EE0B15CFF94E9196 /* PFFileDataStream.h */; }; + 2DB0FB0905ADA61AB79326363C306443 /* PFFile.h in Headers */ = {isa = PBXBuildFile; fileRef = FD3002E7639123E521B9A5AA0109D177 /* PFFile.h */; }; + 30203B6D2A84FE50A147AE8DEA9C1E4D /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BA2492A8BA6613479FC6DE8F318E716 /* PFAssert.h */; }; + 3070A4B3C4F07A6E5E7CD16972DF2A37 /* PFQueryCollectionViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 881AE511AFA0A6623BF4D450BD61D412 /* PFQueryCollectionViewController.h */; }; + 31317B2C0B9E11C4B55199B46B0638EF /* PFImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 34157638C4F04431240CDE5218BF7BD2 /* PFImage.m */; }; + 31682DC64FFA355D76C31FD0C985F228 /* PFQueryUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = CB9940C112FA6D7EA7892248876ABDAB /* PFQueryUtilities.h */; }; + 31DBF0CF1281280BF8BC1C97ABF7E70F /* PFOfflineStore.m in Sources */ = {isa = PBXBuildFile; fileRef = BFC6FF836ED9A9F86CB846FAFE7E1591 /* PFOfflineStore.m */; }; + 3206732A13F9226B6400CEC58E355FAF /* PFObjectSubclassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = AFB8E8C021C6059DABB2D4B924F1B625 /* PFObjectSubclassInfo.h */; }; + 3237EECD82318F5B0FB8E6F9CAED0D1E /* PFRole.m in Sources */ = {isa = PBXBuildFile; fileRef = 58BEAE37763D507BA321A10F607AA996 /* PFRole.m */; }; + 3276E444942D4FC14870DBA0F0D08116 /* PFQueryTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 12B522608FEB7B9689C2FABF1CC3D755 /* PFQueryTableViewController.m */; }; 32A7371F19FC366D8DF77A2FA2166918 /* POPCustomAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8EC4FC6A3A06D9292C296C691005546B /* POPCustomAnimation.mm */; }; - 33D4081B410C93515F3AE2B05B1E6FEB /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 52808B026D92DB8F0DCCBCA2EE24FEEF /* AFSecurityPolicy.h */; }; - 3535E9FC786DCF87B160127BE2ECB0BD /* PFACLState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FE27C4E5599C93B42BFE6AFD312AC39A /* PFACLState_Private.h */; }; - 354DC5158891E616616904856C60FA22 /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A207317F4EF6A614BE7034DE5F3A9E9 /* UIActivityIndicatorView+AFNetworking.m */; }; - 3576593700E45C9EBD7D41E2565B1DF9 /* PFSessionUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 810E80DCE80B90D80B5F21BF7212FEFB /* PFSessionUtilities.m */; }; - 359312B1BB35A2C98A870CFE8FB33B67 /* PFInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A0A7E7C948EBD45C167B8D1A339D98A /* PFInstallation.m */; }; - 364E56F74AFA751A33C35FFD3FCA4EC8 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2BD22E7A59F4BEFF52D4F43A0AA7EB30 /* MobileCoreServices.framework */; }; - 36A0EDEF8443BF059C5DB307F7965A1F /* PFRESTCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 595A306B6C145E017C4B885F8ABB9F94 /* PFRESTCommand.h */; }; - 36DA904B38775E96B9F00B1F60A4EAB8 /* PFPaymentTransactionObserver_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7203E516FF95A460652ADF5DFDEB3FB7 /* PFPaymentTransactionObserver_Private.h */; }; - 36EC255A02DFAD503AE5742DB66EAFBC /* PFBase64Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 507ED5364F8D323521133232F9E26134 /* PFBase64Encoder.h */; }; - 375E59B3F0F22CB28FA382DDB3790F5D /* PFCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 96403B2BFDB3FEACA24969CF6378D7B3 /* PFCategoryLoader.m */; }; - 37A5F32AC77016F849D167378E9675A3 /* PFObjectUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A988AADA8AE3AFF34F68D1673691E59A /* PFObjectUtilities.m */; }; - 39508B096050C3D476E0601B62A67570 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - 3B3D6A60DE4D34A1163B63BAB228AD0E /* PFRESTFileCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 5367E0C94AEC8755F6974A3C97264428 /* PFRESTFileCommand.m */; }; - 3BC9D144F933784273CB48ED48DEEDE1 /* PFQueryUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = E1129C74BCA89B5DEF89974B3EADEAF6 /* PFQueryUtilities.h */; }; - 3BEDAF0982149FC43350CD19D854DB44 /* PFDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 721E34BBC2F5BFD148652BD36955365C /* PFDataProvider.h */; }; - 3C0D480E2EB6981485CFFA27131FACCC /* PFQueryUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = BE9F74FE3902C79E0394988E24194855 /* PFQueryUtilities.m */; }; - 3C401E23A540BDCC225B5C87F2069A02 /* PFObjectUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = E90014A2B5A64CF0A01CA41D71769C7B /* PFObjectUtilities.h */; }; - 3C76079F931B8D254646B65609456C1C /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 48514E935FE3E435F151EFEB4D829A65 /* CFNetwork.framework */; }; - 3D264439507D686CBF9E7040B2B181EE /* PFPropertyInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = B1D6FB68F1851036506A1E965B20FBD5 /* PFPropertyInfo.m */; }; - 3D6CCE33D20C53A3D9E7C977ADFD6072 /* PFRESTUserCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 876ECCCFCF0B3F87EC5560A2FF6B5059 /* PFRESTUserCommand.m */; }; - 3E1E0EBBE4CD3857AF753AA1AB9DF965 /* PFQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = F3FCAEE7ACA390A41ACE7637EA5338AE /* PFQueryController.m */; }; - 3E36642B632C36FD496D0345C6B12E15 /* UIAlertView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 512576519C7D60E088B9946D68C2893B /* UIAlertView+AFNetworking.m */; }; - 3E422E5F9B8E3F76E4C900039E54EE29 /* PFKeyValueCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A63FC1750D756C077EBF6610F23A216B /* PFKeyValueCache_Private.h */; }; - 3EEF37314E80E89B4E7A8176F07348A2 /* PFMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 475310436BBAD84F7095E6DB0BB83F78 /* PFMulticastDelegate.m */; }; - 4059140EA33C2322618F795A388B41D5 /* PFCurrentConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2966362D026D5B9C80E247EEDC0F4E9B /* PFCurrentConfigController.m */; }; - 405FB9DDBD091D87674AF85C7B194D5A /* PFRESTFileCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = E20D9CF29C188B71F5C9BA5C972A8960 /* PFRESTFileCommand.h */; }; - 4071546C204958FA56B126598AA21012 /* PFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E2534618753A8E575CA58125DE04D03D /* PFNetworkActivityIndicatorManager.m */; }; - 40B66FB31F7627FB33B911C4E2AAA916 /* PFOfflineQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = BBFE8A0106C591064C969ED096275D29 /* PFOfflineQueryController.h */; }; - 40E084818025A5B88AA7BDBFCA7F3D3D /* PFDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 965FBA9FA425FE1BA4E41B4FFEE42FA8 /* PFDateFormatter.h */; }; - 40FA82215DAF72DD25F30AE4D6AC2F5D /* PFOperationSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 92A56E592AF27DDA726FCE1F4C398C8E /* PFOperationSet.m */; }; - 410C3023E9AAE2B3E429CDCDA5B48391 /* PFAnalyticsUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D237A86108BD1DB8A37BCC3FCA0DC90 /* PFAnalyticsUtilities.m */; }; - 41521CD3844A812C3397D6564CA06416 /* PFPushState.h in Headers */ = {isa = PBXBuildFile; fileRef = 97D5C73BC159E5CEFA38B5345BB3B77E /* PFPushState.h */; }; - 416DEEABAAEF3F52A524963C6185F128 /* PFObjectPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = B7E18330D5E87E2825CE1B429D6F6693 /* PFObjectPrivate.h */; }; - 434E79FDEC38451A64203A9A367D52A7 /* PFQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 58EC2DED4BCC481232C4E104FEB2F9ED /* PFQueryState.h */; }; - 449AC60A131638EEEA3F97F931C03891 /* PFPurchaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = F48EC1FB45579CEBC6000F723C5E081B /* PFPurchaseController.h */; }; - 44EB9612F4CAF48C8B63696822A2A3BF /* AFHTTPRequestOperationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 202A2922E63631CD23C09430889F7248 /* AFHTTPRequestOperationManager.h */; }; + 32DFD993548CFCEB5718D6E55014913D /* PFRESTObjectBatchCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 7178100892AF9F0FD529CB1C1D19CC83 /* PFRESTObjectBatchCommand.m */; }; + 33B5C09BD69AD22A59BB240D68EDA13E /* PFMultiProcessFileLockController.h in Headers */ = {isa = PBXBuildFile; fileRef = 67AFACBF4ED6B0884B574DE70D9B6039 /* PFMultiProcessFileLockController.h */; }; + 33BF5665A14D96E92BC1279F9966246E /* PFUserAuthenticationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = FFFF7D1C162E52CA7DC9306CA29F0542 /* PFUserAuthenticationDelegate.h */; }; + 34DA07B0700F3722B759F670EB634321 /* PFAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F1830FB371D282612719A83DBF606E2 /* PFAnalytics.m */; }; + 3535C673DE202C41CC12B5FF2AB1A21A /* PFFieldOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 973B4A3060B04CDC56604B7E195515C2 /* PFFieldOperation.m */; }; + 35B90BAA0104047AF2B3883AF5FADC68 /* PFPurchase.h in Headers */ = {isa = PBXBuildFile; fileRef = D87C3AF7D4265ED5B963562D05FC59A3 /* PFPurchase.h */; }; + 3742C186F9760CECD54271C12A0C0F46 /* PFProductTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = B663A4685CA2D02F8C82889CE250EC3E /* PFProductTableViewController.h */; }; + 3775493CB62206BFC75E928CAFB8F431 /* PFSignUpViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 92D5F344DD144AC33D3477DFE0636DA8 /* PFSignUpViewController.h */; }; + 37EF67F6802BDF9A04356F59658A85DB /* PFAsyncTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = D2B7A1E4C1493C2A06A2D1E03C983348 /* PFAsyncTaskQueue.h */; }; + 3802D74DA245015E0BC4CCBBBE5DBC9D /* PFApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A5608B6308F2F4967494F135B0105D4 /* PFApplication.h */; }; + 3811029805E268A2454BC0EA9246BBF8 /* PFQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 902691554546D2DCD720159559359ED0 /* PFQueryController.m */; }; + 3820EBC1F6A8B84CF94E8BD96ADA28B3 /* PFSessionUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BF4FFC8C19BB816A5D326D9220F1FF8 /* PFSessionUtilities.m */; }; + 38DE0AB21944981CDD2A823746B8D042 /* PFRESTCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 03BF6230EA6748C577C8C5637D9242B3 /* PFRESTCommand.m */; }; + 39395992EEF2BBD07B4072712B9B6BC9 /* PFPushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C153BA547DADCD957E58E3F674A38B65 /* PFPushManager.m */; }; + 3AEFF503AA3E5E34413F8EBD0CAC7560 /* PFSQLiteDatabaseResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A37E5AA3FD212D97AEF6B46AF205D7 /* PFSQLiteDatabaseResult.h */; }; + 3B32D30DDAB5F616552953A89CAD5B4B /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E8BC26F535860ADEF8FB368E68DF289 /* BFCancellationToken.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 3C61396AA2618D932E1D997910CA6B4E /* PFSignUpView.h in Headers */ = {isa = PBXBuildFile; fileRef = A6E4973175ADE7E1CBDAB4A5071E7621 /* PFSignUpView.h */; }; + 3CDD14AD6299D861BD4A75E51C955FB0 /* PFACL.m in Sources */ = {isa = PBXBuildFile; fileRef = 846E0B7C90FFC4325F3D9DC1F334D2B1 /* PFACL.m */; }; + 3D7170F9D73EBC7B68982708116F86DA /* PFPin.h in Headers */ = {isa = PBXBuildFile; fileRef = EFA961715877278EBB371380F09E1ED9 /* PFPin.h */; }; + 3F3269C47676A13E44D1DAD963922C5E /* PFCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = A597F94956AB66B22F3E3E1F4507AE56 /* PFCollectionViewCell.h */; }; + 3FE2CD905A0D90E675C92E2800E03D9E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + 41D2984BBCB035BBAFE7FF0A7665C571 /* PFQueryUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = DFA86D2E23707A09D2F93F678490834F /* PFQueryUtilities.m */; }; + 4226E3C0709B4913BE2BBCA537718F8D /* PFTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = AB771162A46246297D872F262698474F /* PFTaskQueue.h */; }; + 42D65A52447035F8EE55B5CB58812055 /* Parse.m in Sources */ = {isa = PBXBuildFile; fileRef = BD91587414DE8AF4BDBCC85B1445B580 /* Parse.m */; }; + 434ADAB275DCF8F1F73F1BE7B22C1093 /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DB595F2F6890CAE924ABCEE56E4AFB35 /* PFURLSessionDataTaskDelegate_Private.h */; }; + 439D6739EB8D8942E83677AE6C6CAE78 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B467FE4C5B79A587871D62821CD26 /* AFURLResponseSerialization.m */; }; + 43A367C70488737FD43DC897F0999DA8 /* PFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = D14EDFE8F7C3B1DA488AFF3322330189 /* PFObject.h */; }; + 441D655945C3AF781C9A00BEF8115E5C /* PFImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A4CE0524492ABA0B3CA3C2DC0F2FD8 /* PFImageCache.h */; }; + 449FD42DA83CA92A8E0F3F22B0187364 /* PFUserFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 10254E67C606DCA88382570E2B8B358A /* PFUserFileCodingLogic.m */; }; + 4537620269E7D26207A9DFAFD880B28A /* PFGeoPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 309FEECD7C015C28BA15623CCA7076B9 /* PFGeoPoint.m */; }; + 453AF7886CF3F3956C6969E6BC9831EC /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = B6D0112010753770C75E336FCAE568F9 /* PFRESTConfigCommand.h */; }; 461ADD1403E940D9DB7BBB5B7323376F /* POPMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C3FE18EB564AF4087573DE6F3F2D3D3 /* POPMath.h */; }; - 469AFCA6DF69037CC22B9353A5840D2E /* PFURLConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BAB10EAFDE7E6E60F85AB4A4C3AD67E /* PFURLConstructor.h */; }; - 46DCE2CC317AC30889B0B674F4C86173 /* ContextMenu.iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C3E92FDA0225F57156353438BB9F934B /* ContextMenu.iOS-dummy.m */; }; - 4954EF0625F842D1C956DA967DE52064 /* Parse_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FFEA133F46FCCEC9897A623F3336EC38 /* Parse_Private.h */; }; - 4A9B74E229EB5509659505EE1DE1692E /* PFRESTSessionCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 9507DB69A2FE53769B24313F98BCFB5B /* PFRESTSessionCommand.m */; }; + 47B1FC21787CF9E31A9367D43BD231E2 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E6F1EDB836DC6604BE100E89A63E970 /* BFCancellationTokenRegistration.h */; }; + 47EE48D9A54190E608D0EEB8EE712B2B /* PFJSONSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A2537130546223A4F9BD2F2CC8C9932 /* PFJSONSerialization.h */; }; + 4804980741C45D9A093408BC9C2A1109 /* PFCommandURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A27AA8076D73B600E05AFD9DE86A776 /* PFCommandURLRequestConstructor.m */; }; + 488F34069FDD6FA1CCC313E1BA4224A8 /* PFReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B35DDE4E59586621C39D96AA5CFEA8A /* PFReachability.h */; }; + 49B176E9AAF9D480484BE109CBFF6145 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80E5920EF0293041A672DF21CBD90614 /* CoreGraphics.framework */; }; + 49DCEBBB292BC919C0F2F0650F42A379 /* PFLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3463D5F370E5607282D729CC1466A4EA /* PFLoadingView.h */; }; + 4A392C6CFBC94113466B20D7DD17A87A /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 92D3CB661DEB61F5FF0B840AB6BD7FDD /* AFNetworkReachabilityManager.m */; }; + 4A43A9BB2D9C6F6B02AE7D378EFE11E0 /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4267B2ADB9B6E5C92FBBD2BE57B1F0B9 /* AFHTTPRequestOperationManager.m */; }; + 4A4757C75E3BF0A7B11F52575953063A /* PFURLSessionDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1824F1E39E61183B0EC8B1EF5B485157 /* PFURLSessionDataTaskDelegate.m */; }; + 4A59411383BFA6BB68350E089CFBDC5A /* PFKeyValueCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 31CE9392410262C7EFA3F2FF2CB7498F /* PFKeyValueCache.m */; }; 4ACF656AFA1302DCF387C7A2D0F238F2 /* POPVector.mm in Sources */ = {isa = PBXBuildFile; fileRef = F0B4105C7EE2DA010EA4746E79138C7C /* POPVector.mm */; }; - 4B9E5C8C8330A9073755CD7BA0DE94E1 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = E12E9AD26CFEFE56F770EBC8224F9542 /* PFEncoder.h */; }; + 4AD4840ACC7A16367F5324135834E874 /* PFObjectController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C8142B63079F5C9D23D801BDAEF7E750 /* PFObjectController_Private.h */; }; 4BA566241FA98C1D5E4A5284D84EAB71 /* POPSpringAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = EB56BE02F1B0412A41C9D9834B04BC30 /* POPSpringAnimationInternal.h */; }; - 4C554340F9C8D98F3D3DF059FF829952 /* PFSQLiteStatement.h in Headers */ = {isa = PBXBuildFile; fileRef = 007D017430CAD14C507E4E16894E1ED8 /* PFSQLiteStatement.h */; }; - 4D7202CCD20BEE8BD04BB17D3D304AF2 /* PFAnalyticsUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 857A8C29F0006E02894A63C09D31CB85 /* PFAnalyticsUtilities.h */; }; - 4D74C041164EA0F477B58E5AC7FE23E5 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = BA8D893893775B109603AF7A33CD563B /* PFURLSessionFileDownloadTaskDelegate.m */; }; - 4EFB6054A4319D663B1AB4BA681A03B9 /* PFConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = D4186E5938E4D869A1267A20AC002113 /* PFConfigController.h */; }; - 4F4F44F87B9F2B6059549A42131F2930 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 74BAE971C6A2FC6F319D21B31E77EAE8 /* SystemConfiguration.framework */; }; - 4F8D2DF83D8B2D41170ED4D1C05D6B55 /* PFErrorUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = E97A297341B3E569BD3DEA54A611D6DF /* PFErrorUtilities.m */; }; - 4FBE8D3A5BB9B088B3D381A2A623FD4D /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = F6357CB5A05AA7E18DC9505CDB7B5CE8 /* PFJSONSerialization.m */; }; - 4FC6DEBE5ABA5E9CBABDD1DBC3BBFB04 /* PFFileDataStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 26DE5D007AAFB71206252AE40BAE833B /* PFFileDataStream.h */; }; - 507D5F0F50CC15E879DD054990D1693E /* PFHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F6D07CF3F5445D97AACFB330CF98F66 /* PFHash.m */; }; - 524D6BEE8260BC395116B1055A619C4B /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = A6EBD847848C1C85F961433CE4F102A3 /* UIRefreshControl+AFNetworking.h */; }; - 532D3DF59CE8F5865F4E86368EB6462A /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D3ED73DF6D62367D4288EA69377B589 /* PFURLConstructor.m */; }; - 543DE88D4CFC0102FF1D16C6718032A6 /* PFPushChannelsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B2FDDD8F730AFFD1DFF805E250C3654 /* PFPushChannelsController.h */; }; - 5489C4B47D41585D9CD38481265528D7 /* PFMutableQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 345A7737A02453DD9D85EE95F928690B /* PFMutableQueryState.h */; }; - 54CC3108BC26BBB273A857924B6173BF /* PFObjectEstimatedData.m in Sources */ = {isa = PBXBuildFile; fileRef = 734124A4F7A87553483F895904EE19A9 /* PFObjectEstimatedData.m */; }; + 4BA6D9BEAB905AF7A0998C1EE8C99196 /* PFProductsRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = B48FF50559AC780326EB5A9D270CFC96 /* PFProductsRequestHandler.h */; }; + 4C3272DD361CCB4D062A5EB1B53D0EB3 /* PFColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 7081E098CA4CB6A0681076A21412276A /* PFColor.h */; }; + 4D261C59967A55D67AFCA703F83241B2 /* PFFileController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF6E8F23F7803ABA113C33B9104A62BB /* PFFileController.m */; }; + 4D787A75B05A49DAD6AF077665141080 /* PFPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E65C6B1C92B01C21154747ACFD56113 /* PFPin.m */; }; + 4DDB3968C8A8A39F557F0F98E3FBC084 /* PFMutableACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = B710F0B0D3B79B4BF2C0738F2D105DCB /* PFMutableACLState.m */; }; + 4E9EB42049A0F361CDDEBC3FC5DF2E80 /* PFQueryState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DB24BF0D72B82C099497AB0C90978809 /* PFQueryState_Private.h */; }; + 4F50CF4C6F3AFD7065370250055019A6 /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = C4F17209020621B18FBD52AD4DBDE0ED /* PFQueryController.h */; }; + 4F522D24BFD226AD5839ACC4682DEBB5 /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = E326422DC27C985EE24D2C93B8E77654 /* AFSecurityPolicy.h */; }; + 4FA6C6D39F058D7EA20D7EF637A8A57A /* PFFileDataStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 566E096C4168AF39742D4E5C84DD3816 /* PFFileDataStream.m */; }; + 4FA87030F7953B6584FCF20B8BC23114 /* PFObjectConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = C4983034E61F27920F696B557867C7ED /* PFObjectConstants.h */; }; + 4FC34E6FE9DD6F151A4D7CB99AAC6AAF /* PFDismissButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 552F0DEAE5F69539D7D65D9DB91ABFF3 /* PFDismissButton.h */; }; + 51422B93B5FFA3C268FC6C7E396B67CE /* PFTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A3F02110C3D27D3278E6DF129D2C91F7 /* PFTableViewCell.m */; }; + 51A41F9A9288C1DFBA155B422B925547 /* PFMutablePushState.h in Headers */ = {isa = PBXBuildFile; fileRef = 730A5142BAB6C4ACFC08E68568EBF8D7 /* PFMutablePushState.h */; }; + 51DBA9585A0386A3AA68B0F9E6003C65 /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D5CFD22B6B783B1749ECB9CF5E7B3F48 /* AFNetworkReachabilityManager.h */; }; + 523BF7C602D2C334D249699DF15F03EC /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 2004B571F2910F12AB05F62B7FA36080 /* PFEventuallyPin.m */; }; + 53982A8B0F7866426474D0EDDC6DA509 /* PFCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 39C3C8FCB8514A583548A65C5CF4C00C /* PFCategoryLoader.h */; }; + 53D741970EB5CAD1C6F501A3E2D939F8 /* PFSQLiteDatabaseResult.m in Sources */ = {isa = PBXBuildFile; fileRef = BF23DA16C72B53A3FEA46DF36D46D7E5 /* PFSQLiteDatabaseResult.m */; }; + 550E02B1289336EED5B66F8EA2629C7F /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = EB033CDD923230B1E43F21C7996F6649 /* AFSecurityPolicy.m */; }; 5520088E66FB2528F595AA617FFC5D9A /* POPAnimationRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A5F7AF86D19E519B94AD6D8CB98CC34 /* POPAnimationRuntime.h */; }; - 5555C4B8729021B6051BD58E96BEA0BD /* PFConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 18D7C9B8DD8A89571437499374A39984 /* PFConfig_Private.h */; }; - 55D282FE0C9269BA1E05D31AF560DB2D /* PFProduct+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CBCE01FE706B02A990236BCCFB09B153 /* PFProduct+Private.h */; }; - 5615E187912379539C73AEBDCBB69AB4 /* PFCurrentObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = ED172D7F5B84203E7C6617EC01D187F2 /* PFCurrentObjectControlling.h */; }; - 562F0029981DB78EAF4891EFE5DD13A6 /* PFUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 08DB18CB20934926437D11F21D1D9B8E /* PFUserController.h */; }; - 57F507F10A1BB85EA45DA90E31045D4C /* PFFieldOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A250843CDACF4CC56A8C27C4FDF9C270 /* PFFieldOperation.h */; }; - 5935304BB5A45EE7BF047CD984EBFB73 /* PFCommandCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E424F4FC00D39BFE64948677EB2D53A7 /* PFCommandCache.h */; }; + 5523ED5A36EECB048654E2C3DCFE64CD /* PFMulticastDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CAEB2B1FF16CDE2D193E1AC45AA6B22 /* PFMulticastDelegate.h */; }; + 554E6A8CEC2C3E83687692C8860CAC23 /* PFUserConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 06BA61065D8E2B152E9171EE2F44AC4B /* PFUserConstants.h */; }; + 562F3C8F34DAC878385C985A0FB75934 /* UIAlertView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = DFAA12BE0272D8841BC6603590316A5F /* UIAlertView+AFNetworking.h */; }; + 5690DD3B08D87092DFD98E2F2FE1CC3A /* PFObjectLocalIdStore.m in Sources */ = {isa = PBXBuildFile; fileRef = E92E033FF1B999DD90642F33822254A0 /* PFObjectLocalIdStore.m */; }; + 56E91AB371FC2BB10D67DAF7649F7C0C /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 676BF07A1D05D277E516187A352A834C /* PFInternalUtils.m */; }; + 56ED64B8BEC4F985F6408EF44F4EB844 /* PFFile_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 29908DE2D1F086906ADDD8F12F3820F6 /* PFFile_Private.h */; }; + 57758ADABA99804AF082BC3B688A3C34 /* PFMutableUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = C44F75C85A9A302C874E89656C8698D9 /* PFMutableUserState.h */; }; + 58B61E80C154F55B7F7D8123D18C8DC7 /* PFCurrentUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = FEC20F084AA6BBE872B8010536D7FA8F /* PFCurrentUserController.h */; }; + 594009BB54452FD1DD303B39079CCCAF /* Parse.h in Headers */ = {isa = PBXBuildFile; fileRef = BC298249F77EBA7D15710FCCE11A79E4 /* Parse.h */; }; 59CB94574F710422B4C9CD6D388CCA03 /* POPCustomAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 928EC8B9105DA581C7896C2102E87BE2 /* POPCustomAnimation.h */; }; - 5B2E3974FFB3B52E1377C6959B742F56 /* PFInstallationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F214F1BB9B408A25954535EFA736CA6 /* PFInstallationConstants.m */; }; + 59D9FB33E5F0C38CA2E687471A6F8644 /* PFMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E59AC106E3B217744D3C1E246D60A0B5 /* PFMulticastDelegate.m */; }; + 59F57BDBB95A339BE6B08B8C98533825 /* PFDefaultACLController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2239BC817E28D29D4159D2A4291463CC /* PFDefaultACLController.h */; }; + 5AD4B793E83B8E054CAE6B89855D8D9C /* PFCachedQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 694F62DF16C3FCEEF60E6744A3B916C5 /* PFCachedQueryController.m */; }; + 5B78DF4D5909AD46E1F0CAB5072F86E2 /* PFPinningEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = E7B363ADE0A6BB4421A31FC39C18726E /* PFPinningEventuallyQueue.m */; }; 5BFDF4E4848A83D2225D948A6D0B79B5 /* POPAnimationRuntime.mm in Sources */ = {isa = PBXBuildFile; fileRef = E85E0983DBE882A8009D0F7EAB591B91 /* POPAnimationRuntime.mm */; }; - 5DC9D0A553754F872A6C6EDF5B8D51C3 /* PFApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B2B77FA62BB014F37CDD536B7F39AD5 /* PFApplication.h */; }; - 5E344479C1E3FE458D0D732D5EFD8C8B /* PFPushState.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B3991EEAD0B989CE24DC09DA3F6F84B /* PFPushState.m */; }; - 5EB711D9E225DDEED6606BBF5E4D400E /* PFFileStagingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 461917BD0B571A033CB9E74AD334A12C /* PFFileStagingController.m */; }; - 606DAFEA41DB4A57A32229A007CAE7F4 /* PFURLSessionCommandRunner_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 47DED761A5B41071D4A460714CF9A610 /* PFURLSessionCommandRunner_Private.h */; }; - 60E2A7A43AE9D6EACF4B5E3AD4FBFA04 /* PFRESTCommand_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EAEF6A0ABE272D5803680B4298EB62D2 /* PFRESTCommand_Private.h */; }; + 5C0DFF66ED42C974BAF8EE8108BA4201 /* PFConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1751A18AF08E87C661781BCDD6A61049 /* PFConfigController.h */; }; + 5C3C95B94390673EE792DEAE3DBE1092 /* PFHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 295C81022EC4A4419AEE51593C991EA9 /* PFHash.m */; }; + 5C57468DCECC07BC543040A08B37D595 /* PFObjectConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = DF5EBF3C8EC520B02503E0619DA6ED4F /* PFObjectConstants.m */; }; + 5D1D7B8A1EBB2541939160A3BA0DFFBA /* PFCurrentUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = C8AD607EE674B88ECA00DD66963675E0 /* PFCurrentUserController.m */; }; + 5DACBE11472468730AC51CFE8DF52D48 /* PFAnalyticsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 69E0B048ABC0D2AC04E5685C0919F100 /* PFAnalyticsController.h */; }; + 5DC64089C30C0511F3625CD1D962E3B4 /* PFFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 27CDD8FD19471CF12869E8B996CB614D /* PFFileManager.m */; }; + 5DCDB8305170FC64F64C9F8CBAD4763F /* PFLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A5413A2F66872719851389ACDE4D879 /* PFLogger.h */; }; + 5F406E659F421557FBAB0878E792BC72 /* PFImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = F5AF10611B8227D5F09B59D1B5009CBD /* PFImageView.h */; }; + 5FAE6C1841A6733A738018284D2158BE /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DF1625F3E851C7EB8E2C8E0423F22E8 /* AFHTTPSessionManager.h */; }; + 60654A0E9A715FDFAC23B51CD9F99CA9 /* PFInstallationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 001AD9B5406D718F93878E7802295E4E /* PFInstallationPrivate.h */; }; + 60B545496AC56C5A387CAC1E0010A560 /* PFRelation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED2893DF06D68060771C808F407E78B /* PFRelation.h */; }; + 613113461A3DBFB916B43C0094B4440B /* PFRESTAnalyticsCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 2286ECFD3E4E57FAB21AD58AE7FA5DE6 /* PFRESTAnalyticsCommand.h */; }; + 61A3FD15B2531C1A521A1112D5CCE5B1 /* PFMutableUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = 60256F6A4DBAA982F812489F3CCD2EF7 /* PFMutableUserState.m */; }; + 61D4996EE6591C850ED3739F3B8A500D /* PFDismissButton.m in Sources */ = {isa = PBXBuildFile; fileRef = A445FAA3DECFDF34F02F85692C7EA1CB /* PFDismissButton.m */; }; 620920967F6C1FB5C501AD33EFDA1639 /* POPAnimationEvent.mm in Sources */ = {isa = PBXBuildFile; fileRef = C0DF3C83EBC5F7BF6DAAACEBD7D72791 /* POPAnimationEvent.mm */; }; - 626E3E94132CE3E2B174CCB5C2E61241 /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = FA74881F0C5E486DA753412D3B49338C /* UIWebView+AFNetworking.m */; }; - 628EC2E2FC6B26D0F6C7ED0DAB935A84 /* PFOfflineObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = D8AA77C187E180A556AF4ADA309BC0B6 /* PFOfflineObjectController.m */; }; - 629633A8DDB4D329242214C1C6EA85A5 /* PFInstallationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = C01AC5406A1FE996C23D44F2D1E54AE2 /* PFInstallationConstants.h */; }; - 6378CF7EDB22FBB77D96DEBAA2552517 /* PFACLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = B627B86FB20866D18CE3E2A40FF283B7 /* PFACLPrivate.h */; }; - 638A30D79CD262C8C3291933357B2135 /* PFFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F3726655401860B18DB85328C091228 /* PFFileManager.h */; }; - 63C69E993C498EA39DD1E26BC8919A39 /* PFPinningEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0EFB7BECF9EB8E71FD258F0F60D3E5 /* PFPinningEventuallyQueue.h */; }; - 64CF2D655AAA7C7FBED2449AEC710E4A /* PFSQLiteDatabaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = A78F4615CC1292D0FA53088C626957D8 /* PFSQLiteDatabaseController.m */; }; - 650C59C74ED1EB13FF81B3AD92EB75A5 /* PFURLSessionDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DFE6FDE4C6292695F3EBEFE040B0685E /* PFURLSessionDataTaskDelegate.h */; }; - 65BBE10D6AD162A261BD96636B2810CA /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = FF7D93CF68584FFA70133B196EFB59F0 /* AFNetworkActivityIndicatorManager.h */; }; - 65C3A46AFEC65C14F9A669B9E2171ABA /* PFJSONSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 58898FE04784C24EDFF6D77428F6BB91 /* PFJSONSerialization.h */; }; - 65EAB2BF94627BD112EE4724B065D38E /* PFCurrentUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C6B8C7E82B804AB1382E38F8E99158C /* PFCurrentUserController.m */; }; - 6628D87D3C8481FD02EC5908FE0842F4 /* PFMutablePushState.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DBB0CAB75C437C618EEBFAF8F62A947 /* PFMutablePushState.m */; }; - 67674A2B768D1BFF618FE2F7DAF24321 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB0347B267799D3314B6438A04D898BF /* AudioToolbox.framework */; }; - 6848B68295C1A953461430BFAB2A5D46 /* PFURLSessionJSONDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9357693A996038C30E8C787613239775 /* PFURLSessionJSONDataTaskDelegate.m */; }; - 69067BE779C91E991C908BA33C234ACB /* PFSQLiteDatabaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = A60A05A0392E32822607D587C5380E61 /* PFSQLiteDatabaseController.h */; }; - 69134BFEE551E2C9B6F3DACC87775C7C /* PFAnonymousAuthenticationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A5BCF29FD1B3CBCBD8B387388746B55 /* PFAnonymousAuthenticationProvider.m */; }; - 6A5F690E541D3B2BFCDFB9EC94F1AA73 /* PFLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = ECBD824DA95D72A1DD329C331E1D9D09 /* PFLocationManager.h */; }; - 6A7DBAA42BF1E9104329ED6DD2FD0E91 /* ParseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DB83418592CB04C28FA16D53A2F50BB /* ParseManager.m */; }; - 6A96EFBD2ECDE315AA0FCC4BAD67A9F8 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = B0D0D5C8FF6EA31C0E29554F03FFAE35 /* PFEncoder.m */; }; - 6ACF579F7F083EF03A3DBB128D76B4C3 /* UIView+YALConstraints.m in Sources */ = {isa = PBXBuildFile; fileRef = C5560C46514764C06929B264B533F518 /* UIView+YALConstraints.m */; }; - 6C073E3CAB26DE3EC33FE490DF02FC8C /* PFFile_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0854CFF4AC229E21A7EC471BB9EAC43F /* PFFile_Private.h */; }; - 6C39436633D2F7986ED9FAE8CF87F494 /* PFCommandRunningConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EDD645EA043AC01BD2D294C8E25D7C9 /* PFCommandRunningConstants.h */; }; - 6D2F9FB21ADBAC74D397280A5832D308 /* PFURLSessionDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A3DF42FD99A813DEBC5C62B3491B1AC0 /* PFURLSessionDataTaskDelegate.m */; }; - 6D67873D2EDAAB5DDBC501CA69E630C6 /* BoltsVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AF96B14E5200CC44AFA17F564FAFCE9 /* BoltsVersion.h */; }; - 6DC9DCD2E199EE08136DFB9D8BBE17BF /* PFPushState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 56CE00CA829DE03D96192E0DB1B3B4B5 /* PFPushState_Private.h */; }; - 6ECC50446D8CE723BFA8398E30E0B34B /* PFACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = 06BDEA785CD1CCF3EC5F7D97641DB94B /* PFACLState.m */; }; - 6F3AA29F68F856746B4055983C6BF793 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6408EC1F7E48296B333659567543173D /* CoreGraphics.framework */; }; - 6F827A5588B3DF26C10C2E566D2D41E1 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5583C012407DD3D86BE591291FD5B40E /* AFURLSessionManager.m */; }; - 6FDF337377416BE9C6958B05AC1C571E /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F189D28F4E7A0D39192B35D412642BA /* UIRefreshControl+AFNetworking.m */; }; - 7070EE01AEB4E7454E9C81B2A421900C /* PFCoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 033DE2F20554C4483F70BB66112A660D /* PFCoreManager.m */; }; - 7140367343A5DBE5AEABEE022C385B6B /* PFFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 283151768413CC359CA4D2B1E9BA275A /* PFFileState.m */; }; - 7196C7AF34A6CEA821271AD022AB457C /* PFLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 0931322359A8E70F6F16FED5F97879E5 /* PFLogging.h */; }; - 72A2AA035FA76AFDB9F2081C1E6E9617 /* PFHTTPURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 022CFAB7CC0CBD47E0AC47A4EC57B983 /* PFHTTPURLRequestConstructor.h */; }; - 738F9BE2CEAA34CA252698CB2D3724B3 /* PFMutableQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = E50C20130F417DFB11F5B3BD1EE46846 /* PFMutableQueryState.m */; }; - 74036443FB7468F873D7086A1E47B948 /* PFUserPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 457B2F0DFF5B74AEFF8A1D9A714104EA /* PFUserPrivate.h */; }; - 7469D8A552A998387B59B30A9AD71F68 /* PFPurchase.h in Headers */ = {isa = PBXBuildFile; fileRef = DD2F94AB2074545E677D5F66F9D63121 /* PFPurchase.h */; }; - 75050C536E96095BD980D5A9F3593D53 /* PFSQLiteDatabaseResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 13D7A1D1A9F6D9020B6E721D5D4D5730 /* PFSQLiteDatabaseResult.m */; }; - 75E51F885183754FEFE576DB32781B13 /* PFCommandResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F06EEE3B8D8FE8CE602F2D363FEE64C /* PFCommandResult.h */; }; - 761655FD6EAFDF34F4BB6B5024A9950C /* PFInstallationIdentifierStore.h in Headers */ = {isa = PBXBuildFile; fileRef = AC3758631123BBA424D0C687A75ED31C /* PFInstallationIdentifierStore.h */; }; - 76266C2FA1D348D717AC228690DC36EA /* PFRole.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DA3428B35116EA19374F593BE42F3BD /* PFRole.m */; }; - 766CF09C4050A89F6FF611B19D3AEA11 /* PFPropertyInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3070F8AC10357FBF3BA3FE9A093D8A9B /* PFPropertyInfo_Private.h */; }; - 76BE46560E2489F20B07ADE2A8383AB0 /* PFACL.m in Sources */ = {isa = PBXBuildFile; fileRef = B94497EF1A56D3F72FD2BA76060DF1EE /* PFACL.m */; }; - 76CCB91B392B898460B3E17FAE24BC80 /* PFMutableUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = ECA0CA78D651CA48D080363398697627 /* PFMutableUserState.m */; }; - 77A778BD6F968FCB02BD567C7B5A6D79 /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = C9BD34A121ED46D7A11BF5ED82E5B876 /* PFEventuallyPin.m */; }; - 77C37F47F9E54490AB397A6C560DF60C /* PFURLSessionJSONDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = C40DDFB915A319DD1CC8CD9340920EFF /* PFURLSessionJSONDataTaskDelegate.h */; }; - 77FFDD6A37B8A941ACF4ABEF102EE786 /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C3B64369BE6A9ACF09E4E03E3747FA0 /* PFMultiProcessFileLockController.m */; }; - 786D083E69FEC7BBDAD2112F88692F61 /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B19A6DDEB20A310104A97E0953192B8 /* AFNetworking-dummy.m */; }; - 78D9A4A9E2EB39C92A78BBA7A7C2892F /* PFAnalytics_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A3A9D34733E3E1E62E950164A6B84C80 /* PFAnalytics_Private.h */; }; - 7944A48A8FCFDF523DD67A11DA48E2D3 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = D8CEAB9CDED9C3CA1445D6F3DAF05029 /* AFSecurityPolicy.m */; }; + 62254E2BAF384DE7CEDDD8E9D244BFDA /* PFObjectBatchController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A10A6965544C458AC5F2B678A0B47F7 /* PFObjectBatchController.m */; }; + 622BFAE8EDF5282342F6D9643E06E81A /* PFACLState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9598FF72766A2C803899340FE5A02F1D /* PFACLState_Private.h */; }; + 6246EEA145637AB8C43D53D9A0CD8084 /* PFSession.m in Sources */ = {isa = PBXBuildFile; fileRef = E059D288CF1F6EDC84FFF84CE3357D3D /* PFSession.m */; }; + 62BEBA84B986742098783D153C8D99B0 /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = A2321BBEB7A3CF093F1CD973DD968164 /* UIKit+AFNetworking.h */; }; + 631A38314C1CB0D525DBFE1B3979FFC6 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D55D963B6D76107B2F021969BDEE76B /* UIKit.framework */; }; + 632CEFF588E7171112D856112688FCDE /* PFColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 89F3C71E2765B3C28B473D71DF5A5D58 /* PFColor.m */; }; + 6397E8A743D712A580B76B8E5E05F3F4 /* PFSQLiteDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = D5666540285B20C577F0B2B80E9F8FF3 /* PFSQLiteDatabase.m */; }; + 646EBA4C236F8278776EE3D386435502 /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E2E5C54A183DC94106012E520E5E8234 /* AFHTTPRequestOperation.m */; }; + 65C48A4A436B6838174FF2BE9BB9307A /* PFRESTSessionCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 673B41C4A9C953340D42FB9375E98F48 /* PFRESTSessionCommand.h */; }; + 65F50C4FDE00BFD21521C2C77D1EE5F8 /* PFOfflineQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = D9B406B9DEB4C367381A5F2CFFB79C50 /* PFOfflineQueryController.m */; }; + 6684791F8C4E7B96BFC5AF4A07B349D6 /* PFOfflineQueryLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = B0617A0075488852BF4B46D4CDE39658 /* PFOfflineQueryLogic.h */; }; + 675CB0E80BA7C831ABA071314F1B268E /* PFRelationState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F267020507CB007123E41D8CC71685A4 /* PFRelationState_Private.h */; }; + 67A58B493C36AF8642D848031D0984D0 /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 668B269657719A728AC245C01A2C2A70 /* UIImageView+AFNetworking.h */; }; + 68E08FBBC11C74B5F60108D2252E69C3 /* PFPaymentTransactionObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = B98633046A5BC4D1F2317D116A1D909F /* PFPaymentTransactionObserver.h */; }; + 696D67F6704649B1FE333B9CA396AEE9 /* PFRESTObjectBatchCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = B0EA4C607715F96A847858C64CCE55BA /* PFRESTObjectBatchCommand.h */; }; + 69D72CEB73BF6E057D0530E64B93966E /* PFPushUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 4328D8F9C7AE7B0CD8FA7EBA00D7338F /* PFPushUtilities.h */; }; + 6A806EBC56C2289C4D484E08DFBDF44B /* PFFileStagingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 65BCE23D522D91151189266A3FC84D6C /* PFFileStagingController.h */; }; + 6A82FFB9C6777D6F7FE528562A59B813 /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = B0A6262F542FEEB9CE1C80E8A789BA92 /* PFURLConstructor.m */; }; + 6A8661944E8E3381F73FED767A314089 /* PFPush.h in Headers */ = {isa = PBXBuildFile; fileRef = 29B54E1236A7C8E0EC38F658B5BF0F4D /* PFPush.h */; }; + 6AB852126E29E70F4878CED684D50235 /* BoltsVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = E9B523A267D0A750521AA26A8D80BC2E /* BoltsVersion.h */; }; + 6B0810EEE6CED5F2B5C846EC9E3D9652 /* PFActivityIndicatorTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E8E430A9D1E6AF764043FC4133BA6076 /* PFActivityIndicatorTableViewCell.h */; }; + 6B794AE04CA2C3E334F3BBF9AF7D8F32 /* PFInstallationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = F88BA5C9F0C3B3EC0FF6EC134DFC39FC /* PFInstallationConstants.h */; }; + 6D17D3EC1622C878400E43C76C6B4521 /* AFHTTPRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C6138626D3006D96CDB19611C6DCC8C0 /* AFHTTPRequestOperation.h */; }; + 6D1E15CB50AF31C5F1FC48C9307396CE /* PFPushState.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EBC0CC820CC94B4DBB58FE3139C2EA8 /* PFPushState.m */; }; + 6D8C0006B0ACC5A0317DE61D0CD400E0 /* PFCoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = BC13F53A2D2D30BA403C7008DC9A67D8 /* PFCoreManager.h */; }; + 6D9D0C26999CCBB70AF8D2684115C77B /* PFCurrentInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = C929C5721E9C70B9CE81D9F6828EA6B0 /* PFCurrentInstallationController.m */; }; + 6DAF4E646FEB268AB9E205463257721F /* PFObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = 704906A954132660EE53716959D2EFD0 /* PFObjectState.h */; }; + 6DD5CE6DA657DA83DAD8D51453FF4E57 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D55D963B6D76107B2F021969BDEE76B /* UIKit.framework */; }; + 6ED4740339FA6CDBEF3E3910C568AF98 /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 91A04A2D587B5AA298D99CA8707ACD0C /* PFUserState.h */; }; + 6FF2DA6A16FE7B3EE527F4D8B5D4954D /* PFCloud.h in Headers */ = {isa = PBXBuildFile; fileRef = 78006899D5F4068A8325BF93DB99FBC4 /* PFCloud.h */; }; + 7035ACE99C35096525A036BC7CEA5CA3 /* PFSQLiteStatement.h in Headers */ = {isa = PBXBuildFile; fileRef = 93457F77204719F4C16214A7413841BC /* PFSQLiteStatement.h */; }; + 704810C8E070CB7385AE3A703E040A0C /* PFQueryCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4375CF3355F1F50599EC991B4021CF8F /* PFQueryCollectionViewController.m */; }; + 70CAD307A522EDD432E2E142E8FB2AC3 /* PFErrorUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = AB1E20059106E03E6594A48AF6661438 /* PFErrorUtilities.m */; }; + 70CEECB71D93085CAA2F82DBFA9CD6A7 /* PFWeakValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 79D7AFFDA509FB3FC481BDA87BF51A9D /* PFWeakValue.h */; }; + 726B14EA0541A276FF4C99A72D1666FF /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = AC2CC0B73F6911C366AFAF2747021916 /* PFUser.m */; }; + 7321D80D3B0B0CD8683BDF3DBEE8726D /* PFMutableFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = E342A391C1DE18E3949C69CDFB08EDD8 /* PFMutableFileState.m */; }; + 73249C3AEC5F6FBCC42816D82B75E8CB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + 73ECB448F2BBB7E069BF88F55C7DA87D /* PFRESTPushCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 76FDE35600319F36529FD99758E63E5C /* PFRESTPushCommand.h */; }; + 7546300864313C92648D4059DFECCDB6 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 236FA8BD2AC4E953D395067FD0720495 /* MobileCoreServices.framework */; }; + 755581EED26A565E146BBCEF97615961 /* PFConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 31E038C9749B665615F4B5FFA9469D6D /* PFConfigController.m */; }; + 7562F1D265E91DA087B354FEE0726744 /* PFCurrentConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 035FAB552BE267FDD1892F43E6315CF3 /* PFCurrentConfigController.h */; }; + 77115982F49982BDC610FD0AAF0437E1 /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = FB33D15C14AB12162121261B2BA67FCC /* BFTask.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 77418FF216133AFC144219F1E91FC6B0 /* ContextMenu.iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E7E875CE34251F7D08C0A56A3B8DF0D /* ContextMenu.iOS-dummy.m */; }; + 7815964872C2B51CB4A6E3DDFB259F9E /* PFCommandCache.m in Sources */ = {isa = PBXBuildFile; fileRef = A7BC2EFA845DB186821FF808FDC5DADE /* PFCommandCache.m */; }; + 7852E0160CD9C638D5B97764D46247B2 /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = C784B5A416372B680471AE16B2C5091C /* UIActivityIndicatorView+AFNetworking.m */; }; + 79041408B71D74E510232EDFCF232A6E /* PFUserAuthenticationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 18827249CABAEC4B332D8914DAD7D2E2 /* PFUserAuthenticationController.h */; }; 795E704A17919AB70FF6F5738289A44D /* POPAnimationExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = 22DC4C87D619EF0F28631B5560E82333 /* POPAnimationExtras.mm */; }; - 7A19D5E1912F1F0AC4DB6BAB2E818B19 /* PFObjectLocalIdStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 62C1941BE9E36B0C41BF43BFCF7681CB /* PFObjectLocalIdStore.h */; }; - 7A4647A24ED50F8CB942285D95285B10 /* PFObjectFileCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 196698284757A108BD18D4EFC0D470B2 /* PFObjectFileCoder.m */; }; - 7AA7CBCE858B7750EDE2B738DBC844E0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - 7B4FF17B0F855D9EBD572C18D1EE839B /* PFProductsRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 62FA41489E9F671A6D2AC37AA15E70FC /* PFProductsRequestHandler.m */; }; + 79F9430EFD4450425D73257CE49E0915 /* PFFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 30BB3F94FC46C796DC0449BBC52A4A1A /* PFFileState.h */; }; + 7A22BCAA48DAA8941E900F3BBA2AEAF9 /* PFTextField.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C8738DC15AF37426077016E1A61F42B /* PFTextField.h */; }; + 7A99B23BF2F12FD39E70FA4D2070D029 /* PFCommandRunningConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 5989C4E0E6F614302CFDC1EF53184C28 /* PFCommandRunningConstants.m */; }; + 7ADA1B50F379A2F4138E1D9AB87725B3 /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = 89AB91AE1EA155F70C6048F5E3BC2CEB /* BFCancellationTokenRegistration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 7B86B871D42C0312EDE0555E906A9741 /* PFConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FBF8804D54E1C19776FE5BA208F68B3 /* PFConstants.h */; }; 7B99231436CB0981EC5113A681AF7C8E /* POPAnimationTracerInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DA58C3428E2A0E2F88C2A0522297274 /* POPAnimationTracerInternal.h */; }; - 7C4A3111F3BA07CC804F53B11B85F91A /* PFObjectEstimatedData.h in Headers */ = {isa = PBXBuildFile; fileRef = 237D0CDD69C7B78A1BDB8DDF87F9EC2A /* PFObjectEstimatedData.h */; }; - 7CB69E68D976DE206E09BC7743792BA3 /* PFEventuallyPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 2348B7338D870B151D50A511AC6711D0 /* PFEventuallyPin.h */; }; 7D2E1DA076E379421DF5A9E74C0FD4DB /* POPBasicAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = F54B1AE39CAF0CA846C1C729B033E047 /* POPBasicAnimation.mm */; }; + 7DAB8A9EEBF8F97B4CAD251A3F07C368 /* PFRole.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A1C42F3F207E19A35B5546628710724 /* PFRole.h */; }; 7DC645E712D9190C15F71B1B92844D2C /* pop-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 59B3FD41DEC22C5891C9B83C27BC25E0 /* pop-dummy.m */; }; - 7DC754D4F086EC145F14F6CDF360960B /* PFInstallationIdentifierStore.m in Sources */ = {isa = PBXBuildFile; fileRef = C609AF7E1C4CAC8BDE38A1E28E64414A /* PFInstallationIdentifierStore.m */; }; - 7E150D7DB4B83C1DBCCFEFE86C047020 /* PFUserAuthenticationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DD1568F7E2ED50F1C629DDF3D9F3020C /* PFUserAuthenticationDelegate.h */; }; - 7E15C7398334F43931603A970C332DB9 /* PFPropertyInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = FD826E93D8E3CA261C02B951A6F9751D /* PFPropertyInfo.h */; }; + 7E6F7BAD97538A169ADEF9FE96AD142D /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = DC8A2B438554DF6B068739EE717A22FE /* UIActivityIndicatorView+AFNetworking.h */; }; 7EE77B776CF54D5794EB5D9DB5FCF8D4 /* POPPropertyAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = F81E8633F1E784423FE8B9BE16D38981 /* POPPropertyAnimation.h */; }; - 7FA3F9143281C5C42D3CB8AD7442887A /* PFCurrentUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D2C0E09440F10C2834146B969AD0950 /* PFCurrentUserController.h */; }; - 8019DF40B2B2165FC5EB24BD6BB5C320 /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 28676FBC1D97921BD11D7A12C922CD0A /* PFObjectFileCodingLogic.h */; }; + 7F4F12FF6F0A3C6D1845F078F0004F6F /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A0570AA7DC6F83403680412011FDC05 /* PFJSONSerialization.m */; }; + 7F5B2AD9E14336605FD26DE43E27441F /* PFCoreDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B4A505C53309A2CA9DD89F8D0CCC03D /* PFCoreDataProvider.h */; }; 804C70F77F75F0E75ACC3E3E4B47B727 /* POPLayerExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 9663A817A809169745F3F8E987FFE076 /* POPLayerExtras.h */; }; - 809B3785EA647CC67C699D8FEBB7461F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - 8214C48967620CE6A0CDE08A672A35E1 /* PFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = A52CE45BD75B2826314A3BCDCB813398 /* PFObject.h */; }; - 82756AE351CEDAA36F92E191804E5C29 /* PFThreadsafety.m in Sources */ = {isa = PBXBuildFile; fileRef = 436A81D9B2A9E41E99BF86F1C6871A0A /* PFThreadsafety.m */; }; - 82A1CF90239B1B2448900BC02195737D /* PFProduct.m in Sources */ = {isa = PBXBuildFile; fileRef = 893F517620D76C4DD97407C35B30C8DC /* PFProduct.m */; }; - 83B4223F07E9DB236E15C2F3242CF2E0 /* PFCoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FE1708AB969B7C864FA6A717B2332A5 /* PFCoreManager.h */; }; - 842DB9C51BA822F734AA6A66EBFD61C8 /* PFThreadsafety.h in Headers */ = {isa = PBXBuildFile; fileRef = D963AA70AF8A60F226D09FBC6225E686 /* PFThreadsafety.h */; }; - 842EC859A33C10671D3500B99F24C6C5 /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = 94E051272A8A44AC3C51C58EABF97D9F /* Bolts.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 84C42678DE4460E60A66876CDAC64149 /* PFTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E374390CBBC0449CF5CC0A1C32EE8C5 /* PFTaskQueue.m */; }; - 8503FD13A1BF53A7A91C6FC7FAFA90F9 /* PFObjectSubclassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = BF9B1FD5D1E2441D018DF7EDDDC4A3FC /* PFObjectSubclassInfo.h */; }; - 851D4FF3A335CF48002CAFE2E4F2E376 /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 73F5CAD466111E720F4983773D164AED /* PFConfig.m */; }; - 85320661106B07533362C37B029054F3 /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 562875D8611745AF8CD45A6CDA6DC927 /* PFUserState.h */; }; - 85F948A79ED6DA01A4AD4F8C2BFF690D /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = C452DCF65E6EEC6AD15BD77F01EDF779 /* PFInternalUtils.h */; }; - 86563FC6CF9DA9365C823E7285BFE1FF /* PFAnonymousUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 8675E8B47522DD1649EAE7CE1299B776 /* PFAnonymousUtils.m */; }; - 865A7864DFFA64506A9F6C30E05ECEE3 /* PFRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 3801D32A117D840B4286437B7A779361 /* PFRelationState.m */; }; + 80A03D9C38836FCA35E6C7A0E96B2C68 /* PFMutableRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CC595FC678893325F98C5378B186753 /* PFMutableRelationState.m */; }; + 81932ECC1B13317B0CEEDEAE8DE5B4F2 /* PFProduct.h in Headers */ = {isa = PBXBuildFile; fileRef = B63488E932EFD54B40EC5CEE1DF35B2A /* PFProduct.h */; }; + 81B0225BD8D77E21B3473A7FBD07379C /* PFFileController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DFA44004029BD393D1F2B117CE9F7F8 /* PFFileController.h */; }; + 81F6B96731525921005CCFBBA013EDB1 /* PFLocalization.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EB9BC7FDF8DC81CC6C1D63BECCE7E14 /* PFLocalization.h */; }; + 82D09FFFD776A9F4CFBB39AFA24A94DD /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = C5B7DABE7188B760C1B68296FEDD6C36 /* PFConfig.m */; }; + 82E87F445CB1C550249120A598046FBC /* PFCommandCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 18E77AA1F74F26E7C7E5B4FFB440DB72 /* PFCommandCache.h */; }; + 82EC3599D5C399A277C618637E8E3F7C /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = 46F4505013A1E899E93E215319374975 /* PFBaseState.m */; }; + 82F34C3FB188DCBE527118D8DC13C390 /* PFSessionUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 014AF5DB4D6A8BF17F7BE152F8CE4838 /* PFSessionUtilities.h */; }; + 82FB8BBC0533D97198C5B932014C55A6 /* PFCommandCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E79A9B8178C0F64C99A91FD39A755F3 /* PFCommandCache_Private.h */; }; + 8369ED4247F129F5330C0E0084DC5AF1 /* PFObjectState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B0D66F584D237E4338D3E19C4265A4A /* PFObjectState_Private.h */; }; + 843AF53DCBDF66C48D5D1AFD39978896 /* PFACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D6DBFEBCB22D95F322ED40E7E0F2662 /* PFACLState.h */; }; + 84FE535E6E603F6AFF0739BCDB2C7E8E /* PFURLSessionCommandRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DE5961F550EA26C9E5B1FFD818E59DA0 /* PFURLSessionCommandRunner.m */; }; + 859ED907A159E53ACAE5EF1301034908 /* PFPinningObjectStore.m in Sources */ = {isa = PBXBuildFile; fileRef = B8AD011F3E16AB12739F99A789EF372D /* PFPinningObjectStore.m */; }; + 85DF6A9EC2F1AF2F728E01D985425789 /* PFProductTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 680A9F6B03DC467E45FC8F01D6ADDFC1 /* PFProductTableViewController.m */; }; + 85EBFB73ABE0D5B3C28180EE3F28B04F /* PFPropertyInfo_Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = DC12AC65C36202BAEC57DD2A910517F4 /* PFPropertyInfo_Runtime.m */; }; + 8689D876F786C4BC98494F21A88AFCE5 /* PFRESTUserCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AFC505855C4C5871A01FEB4AD88CE78 /* PFRESTUserCommand.m */; }; 868BFBCD8263F71F8A14CBBDDAF5B748 /* POPLayerExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = 197635F0BFB93E63E82503F09B7AABBF /* POPLayerExtras.mm */; }; - 882F9183523311ED2A32898E978C05F0 /* Parse-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 73DEF6839984D1F48ACE568B6EC2E5EF /* Parse-dummy.m */; }; - 892C9CADE551523C8EDF800C648306EC /* PFURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = AE0BE1F355DE44ECCAEA5BF8D4526C5A /* PFURLSession.m */; }; - 896910FF549C79158B14DBA4B82DD337 /* PFAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = CAB37E3012ED80BEB1BCF0077E7E38F4 /* PFAnalytics.m */; }; - 897527170E376AFAE5654193F3308633 /* PFUserConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = F0662D5C0759804552360A67D1BDFBA0 /* PFUserConstants.m */; }; - 8A30DA243ACAA1A89F305D1AB23B2428 /* PFCommandRunning.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F1D200E550A12E3F43CD3F31E131DBE /* PFCommandRunning.h */; }; - 8A8C8E47DA7D2D2F3EB55930A84F9DE5 /* PFObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 2792004D5441520275B8E22F94BD8E5C /* PFObjectControlling.h */; }; - 8B3ECF63B2E1B777FC04BECEC1F7C0EB /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B072562DD642F896CD3C3B7CEF2911B /* PFCommandRunning.m */; }; - 8C29699238F02B904FACC35199216780 /* PFSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 96A60F95EF69292F16C085789B646687 /* PFSession_Private.h */; }; - 8C37D4BE18B21A9CD00B953782624248 /* PFSQLiteStatement.m in Sources */ = {isa = PBXBuildFile; fileRef = A1B4C9A06FB08BC3FE354D588CD09AF7 /* PFSQLiteStatement.m */; }; - 8DC7C47A7CC5950EC009B5618371C48E /* PFFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 82BCDD60CE06A0870E0ED0D853E05739 /* PFFile.h */; }; + 88A493D5108AB8DE462BD0E5FF2641D7 /* PFPush.m in Sources */ = {isa = PBXBuildFile; fileRef = 918F011200230C7E00D0CDBE0413D604 /* PFPush.m */; }; + 89CA963233E90B768E2F97F71480F36A /* PFObjectPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = E29764F05A36CE457AAA261D1C743831 /* PFObjectPrivate.h */; }; + 8A26B6A728510CA76E3A66379A985CF9 /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0769DF4654091947ABDD725BB8D5A8EB /* Bolts-dummy.m */; }; + 8AE9974F18F4211C4FC4E079A3F918C3 /* PFDefaultACLController.m in Sources */ = {isa = PBXBuildFile; fileRef = 69AA9DF625F8419954BB0BBBE9C107EB /* PFDefaultACLController.m */; }; + 8B40CCA253A29ADF257D736A1C512B67 /* PFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DCD942102BE4EB49DCAE5E51AD4B15A5 /* PFNetworkActivityIndicatorManager.h */; }; + 8D13FD85FCA77ED175C8BDAA800C3C96 /* PFURLSessionUploadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 28663AB25A1E167D689246B14934DE4E /* PFURLSessionUploadTaskDelegate.h */; }; + 8D85B553AB44873F6C90954084FD9721 /* PFReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CB4FE2CCDD340DB9E7D6942BC3B6970 /* PFReachability.m */; }; 8DF9960DD96F9AC25E32BFDD4A3B53B7 /* POPDecayAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C560616DDF5273CF7C53EF72EA6ED45A /* POPDecayAnimation.mm */; }; - 8DFE18ED9D0679395D555A5D2E1D6A61 /* PFPushController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7453E990BF208758602D5B39CB7388 /* PFPushController.h */; }; - 8E4E90FFCA09F9F8CBB4B3B02624C46A /* PFObjectState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 86D677D0061394762DEF101FECA5E262 /* PFObjectState_Private.h */; }; - 8F23210C8BC4F5C9280066640C17C69B /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 400935A9AE97EE38E7C59CBBD474FA32 /* BFCancellationToken.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 901C26F961EF48B307C4F82285380A0F /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 65F6F140EE00AE08D92C70E19B66F5A4 /* PFDecoder.h */; }; + 8EE9177604889F84ED7E162F79219460 /* PFApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = CB79D9D2D0E90F473712185133F4D212 /* PFApplication.m */; }; + 905FB90F0543BAFD27E2B60A4159C6CA /* PFObjectFilePersistenceController.h in Headers */ = {isa = PBXBuildFile; fileRef = A19FD78A9B72692A4B71312CF239FD40 /* PFObjectFilePersistenceController.h */; }; + 907D70C1FCE8B26CFEF78E0CF9CE2558 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BFAF32F5BA704D364CF1127267C7D079 /* StoreKit.framework */; }; 9088AFD3E6C678A42A8E0189F65F73B6 /* POPDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 90DA3C63E9AD758336342BC51C0BB859 /* POPDefines.h */; }; - 90F6AC61C0D614F4F3DD46C81171C8ED /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = CF335AC7E0E6EE3DD820467124C2102D /* BFTask.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 9195D181434FFDA880E3FFCCB38FE33C /* PFDateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = CF46F6E5A7E52A35C89851DED33A2176 /* PFDateFormatter.m */; }; - 91EDAEBEF03847E95272606E90B11838 /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = DAD2B1AEAEEE3B6167AA69B21E00DE2E /* PFInternalUtils.m */; }; - 91F2E7E0881F466BDF8CDDC26C780CFA /* PFQueryState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AA108C575CCC3045CF6EBEB7C2D35B5 /* PFQueryState_Private.h */; }; - 928177B9981A0BEC3E7CDCDA26DABE9C /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 39A27D94EB41AD237B4F4E722852F9B6 /* UIButton+AFNetworking.h */; }; - 93DF5CCBA43C09201E435ED14A2A0961 /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 93F14E13D1AAFFA4C781869593E6A6FF /* AFURLRequestSerialization.h */; }; - 947A48148E5A557DFCFE1524486F0748 /* PFAsyncTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 453A45902215CAB1B07AEEBCAEC35958 /* PFAsyncTaskQueue.h */; }; + 91522E030F33150DBBEBB1DBC3D3E4F1 /* PFPushManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F07D611830E80BB5B0864D91BA277C6F /* PFPushManager.h */; }; + 917F98FAF29BF36D7401EA29E17F52AE /* PFOperationSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 593AAE45575AE33845AB3E2DAEA2A800 /* PFOperationSet.h */; }; + 929E2CEA03D293C716892915C930989D /* PFCommandResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 99FDD1E37DD120D520EE6C3BACAD38E1 /* PFCommandResult.h */; }; + 93367CC8629CF40CA872D9C8CDB17609 /* PFPropertyInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A210BD82E20817973E99C3A2B14ECDDE /* PFPropertyInfo_Private.h */; }; + 936CA5E7B0FA8C8196642F8B2029453C /* PFObjectUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 68899547991B9F78A6C594C5C0F479F5 /* PFObjectUtilities.h */; }; + 94BBFFB9DC923664ADF8B769B95E0EFA /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F574FA2B21A697A3966DB97D2487756D /* PFURLSession_Private.h */; }; 94BFE73B7E00A0FED987F553B0DCE94E /* POPAnimatableProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 313669CF0D1BF49C96C85FC593F4BC1D /* POPAnimatableProperty.h */; }; 94FACE1C5E4B42AB129DA7326E4E04F9 /* POPAnimationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F210DEEA777E0BF1995DC3570CC616E /* POPAnimationEvent.h */; }; - 9596BB57B15E0F32ADC0E88D588DB70C /* YALContextMenuTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7977EE0242992DA9A68D3DCB922B66CB /* YALContextMenuTableView.h */; }; - 9603828D1EE5DFF8E2FCC43A612C2F6E /* PFPushUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 39451587CFA3D7024575C72DA66A271B /* PFPushUtilities.h */; }; - 96397AB59008EA7392019A2EB9BCFE53 /* AFHTTPRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A6F04B61FAF09E9538B3AF6FD9536DC4 /* AFHTTPRequestOperation.h */; }; + 95010AFE744F89E7C11BE8237CF593AB /* PFAnonymousAuthenticationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 6514ED145DC7F188D2C4F431286C40B7 /* PFAnonymousAuthenticationProvider.h */; }; + 959985EE2DDB61C72EF152E7DEAA1505 /* PFDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = D8A2AD1BBFF1D2E49DA33635F7DA0CED /* PFDevice.m */; }; + 9634FED443E53F097D2B0CF9032C4BB2 /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = EFE0EDA51288CA64BD5BA18BDA07C4F3 /* UIButton+AFNetworking.h */; }; 966900CAD39E8B592A35F8401549A86D /* TransformationMatrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E056FF5C4EC38A55B45FB52F395D72E /* TransformationMatrix.h */; }; - 97048C05413C62808681EA864F2667C4 /* PFFieldOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B4E5220C651194225EB11D393463146 /* PFFieldOperation.m */; }; - 9736106D305E2FACC163BE070DC6B12E /* PFRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = B3F7FC9A375F4CC184EF1CB84FFF2E2F /* PFRelationState.h */; }; - 99136C89548B177E60DD34A91B5ED192 /* PFFileState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D3E8D0F342FFF167540A96E017CCF674 /* PFFileState_Private.h */; }; - 991B10CE642953BD125D956E15532841 /* PFOperationSet.h in Headers */ = {isa = PBXBuildFile; fileRef = B1483642455FE93A36C64B730F27BCD1 /* PFOperationSet.h */; }; - 99B1982B53FDC71250D05FB8D0AC2C41 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6408EC1F7E48296B333659567543173D /* CoreGraphics.framework */; }; - 99CC3B1A726965F2F7E569FD3A7EA623 /* PFUserFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DA5FA1FA814DC209F9EABCD6B9119F6 /* PFUserFileCodingLogic.m */; }; - 9AA96E4A9687620F8C196ED2FABBA5DC /* PFObjectController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D97138DECF19BAFB63881A6D4EF92BF /* PFObjectController_Private.h */; }; - 9AEAE527EF5775E4554D7E8A48D2431B /* PFErrorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = AC7F1FE520C94B33E628A5BF7D802073 /* PFErrorUtilities.h */; }; - 9AEB47308349EFDFA683BF4A62CF195D /* PFPush.m in Sources */ = {isa = PBXBuildFile; fileRef = 62FAE8C508439F783E07B639E62E5388 /* PFPush.m */; }; - 9AFC0F0B06328DD11F5A269FC9D061D4 /* PFPushManager.h in Headers */ = {isa = PBXBuildFile; fileRef = BBEDFD1C6F661507D70B9C73268193B3 /* PFPushManager.h */; }; - 9BE55D00A42730AF0221D2294926610C /* PFWeakValue.h in Headers */ = {isa = PBXBuildFile; fileRef = BA10EEFBDA4AD314FB6D71B9DBD76FB7 /* PFWeakValue.h */; }; - 9C526742FC642C90CD9887187FD9478E /* PFBase64Encoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 568A6DDB145B9BE497001F309F81C25D /* PFBase64Encoder.m */; }; - 9CC680543CB311240352F92FB2493BB2 /* PFOfflineQueryLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 0862542F3708CEA8901318AE4F5FE02B /* PFOfflineQueryLogic.m */; }; - 9CDAF8961B1E25C066FAC4D7D44433EA /* PFURLSessionUploadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = AA5D3771AE76625915E333CFABB45A05 /* PFURLSessionUploadTaskDelegate.m */; }; - 9E5744C6E239498952CB6C2AB7AB8573 /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 38E00AD6C99A24C72256073EDD208D3F /* PFAssert.h */; }; - 9E7CF062169C9A81B37510D0AD9162C2 /* PFPushUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = DAF8AFF71E17239BC9D066B413214C0F /* PFPushUtilities.m */; }; - 9EED9C8A845D06EE53C1403FBFB196BF /* PFNetworkCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B131E3C12FA20F7C590D94EF645128F /* PFNetworkCommand.h */; }; - 9F2809547901C1650E2A6E3F1F11982C /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 780EF3BE11B2381FB28EB629FB8CBC29 /* PFURLSessionDataTaskDelegate_Private.h */; }; - 9FD4177987850C6E6E37BA911CDD3C1A /* PFRESTCloudCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 105DFF60164FDC71E3359B156DAE0937 /* PFRESTCloudCommand.m */; }; - 9FF02193886279AC96AFB7BB7D21DDE1 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D7C31A8D9DC68245949CD79BD5AD586 /* BFCancellationTokenRegistration.h */; }; - A04091E4AE50036E9788A73F231A5E7E /* PFPushPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A60CF5CEA93C2F6926C54CA3679A1556 /* PFPushPrivate.h */; }; - A0BA6E93BF48588EBC097ACE78DA328D /* PFRESTQueryCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A747E0C0BA89EAF9D9C9B35EA62B097 /* PFRESTQueryCommand.m */; }; - A0C4E0AE86CBEEDB70512630A54C1A74 /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 814B6E4C1E3AEC20607C2A43AADF132B /* UIProgressView+AFNetworking.h */; }; - A1984ACB538B0EB2EC33303455FF996F /* PFKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D4EBEE47CEE4A7801385DB1D8C88383E /* PFKeychainStore.m */; }; - A1EF906190CCCF5E5F778921BB29D04D /* PFDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 14BFF77A40EB6D31D0D53D242A01BED0 /* PFDevice.h */; }; - A20B7AB30DBD8368549A2ADD1834EE47 /* PFPurchase.m in Sources */ = {isa = PBXBuildFile; fileRef = DD428B827A37AD34DF77CC5C561BCE0C /* PFPurchase.m */; }; - A235BB018AD7FAAE25C4A295FCC5A8BD /* Parse.h in Headers */ = {isa = PBXBuildFile; fileRef = 12BB94C26636A7E690216E2AEEFAF264 /* Parse.h */; }; - A2C9CDC9EF3AFD417433B15BD6F3ED5C /* PFMultiProcessFileLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 372923DCA1E5BFDF1DBD57E93002E783 /* PFMultiProcessFileLock.h */; }; - A341920891C64694F15002A14274DBD0 /* PFObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = E0041782152C1ABC1F18B164311EAF2E /* PFObjectState.h */; }; - A57A790BA267D5575D66FBA7194C9C9C /* PFAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 37DCE2246C320FA0B8BF9CAD3758AE71 /* PFAlertView.m */; }; - A588DBAF2FF022F204CD18AA9E6FB568 /* PFRelationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = D15D922CCB9D2F0B65F44C7FBFE53EBC /* PFRelationPrivate.h */; }; - A6128B349568C6B56EF5FD2C22D0D98F /* PFInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = 57B1DA40C85BD720B286FFF8C7EA6F91 /* PFInstallation.h */; }; - A7A4C7B12C8EBCD1DD511612DF60BC62 /* PFRESTObjectCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = CB4444A178F9CEC2E097C90C7D351E7F /* PFRESTObjectCommand.h */; }; - A91F60D12B823B21A59FA96BC5AF0825 /* PFDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 0823AECF540B112CC0DD23CA1EB33F1E /* PFDevice.m */; }; + 96B644D0DF149C29487C1FADCA5C4DE4 /* PFAnonymousUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 39A964688EEFC3D0CC24D3A54E38FBD3 /* PFAnonymousUtils.h */; }; + 97517BF46554876A6E119F95D2EFFEDC /* PFQueryPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = D4EC2CF0CF3EC72C93972AF1037CEE94 /* PFQueryPrivate.h */; }; + 980722E68E1A6EBE5B0BDCC12FFF24DB /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F71593AE89CAD970579B80D110C1984 /* UIButton+AFNetworking.m */; }; + 98E57F0238DFA229DCE4C9362B1F3247 /* PFCloudCodeController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F89E25FCE0DAA79042743C2B566E1A6 /* PFCloudCodeController.m */; }; + 991D8071D96F389C7B3A3D0AB4F086FE /* PFPurchaseTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B362321AC17972F76BC3058B0244342 /* PFPurchaseTableViewCell.h */; }; + 995D07FBF9742F73283ADDEF0F4943AB /* Parse_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 52DB6A54B1838689849D373A8B862089 /* Parse_Private.h */; }; + 99DA7F75C6D253B49F283769CFC8BD8E /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 58F6CBB7D71F74651AC7F84ABC410E0C /* BFCancellationTokenSource.h */; }; + 9A38DE9FDB3E7D427118F17716DCB0D3 /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB871978A493CF76B6EF86A10503D0B /* PFObjectSubclassingController.m */; }; + 9AB12335C4C90E038AB8C2EEA46A1E20 /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = 46CD3BC9266CF5D1475B6AF46C8B7E7C /* Bolts.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 9B41546D5BF367123CECD1C41C61CDBF /* PFAnonymousAuthenticationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = B1199EF39F8DBC2DE35587039E61FA8F /* PFAnonymousAuthenticationProvider.m */; }; + 9BBC8BFDFD6E1FEE5B9E4580BD75DA32 /* PFProductsRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = C8FF08518676F8E3A8870145DE231062 /* PFProductsRequestHandler.m */; }; + 9D37632001F7DD8990242244C9AD09CD /* PFActionButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 1421939F359176F8B823F5EB7FD8294B /* PFActionButton.m */; }; + 9E03585B3015EE3103C5F73C92A933C2 /* PFKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 6349D7F8E69290506003AB29AD989010 /* PFKeychainStore.m */; }; + 9E64148594AE7E6460D267B8B07B776D /* PFLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A605DD02CF52F80E3B1D4E3BB6443CF /* PFLogging.h */; }; + 9FE54FF0687B60AAE4D75F85B3EFE342 /* PFWeakValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 465823BD11BF09F5C90595ABAFD8A779 /* PFWeakValue.m */; }; + A02813FC90D641B10CCE8C8BF935168D /* PFDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C40DEB41CE4EC8B2FA1499B49789F37 /* PFDataProvider.h */; }; + A0D9F1FB8B1745CB2D983D1BB9901E03 /* PFOfflineStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 23B2648B19EFEB314EB1B67338FE4052 /* PFOfflineStore.h */; }; + A1890747C28B950DFAB1471D0D8C7AD2 /* PFACLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D857686CEEFAE3F76B34023D8F49C09 /* PFACLPrivate.h */; }; + A1975EC315733961CBFC84A335CEEE3B /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AC474A01014BDC025F0266CE0B033B8 /* UIWebView+AFNetworking.h */; }; + A1B73D9D97FEB465BD7A9185D16E22CC /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = 622EE1BBB499496DBDDE988CE4D0F947 /* Bolts.h */; }; + A22C89F54AA1F72BE66DD7A74FA58513 /* PFSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C97E4E064AFD1F93914BCB16FE59C63 /* PFSession.h */; }; + A22E17287ED356500FCC812E827ECD26 /* AFHTTPRequestOperationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 72B3231E34DD38A30692794DF2F8DFB1 /* AFHTTPRequestOperationManager.h */; }; + A35CC042438994CCC95CA00358911CBC /* PFOfflineObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FA6E6CE69ACD000C52CEF0A45171FEA /* PFOfflineObjectController.m */; }; + A3A1A29866D41399FDA07906812C5923 /* PFCommandRunningConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 44CC844604B6B8F4651D9967A6020478 /* PFCommandRunningConstants.h */; }; + A3D271E1A53809D4E23C9C05AC27E489 /* PFLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D84A796DFAFE7A65F2CC3FC4135965FA /* PFLocationManager.h */; }; + A3E7B1E86BE98472869110645588761E /* UIView+YALConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = D5C5B899FFF0B9AA572D06803767D21A /* UIView+YALConstraints.h */; }; + A402A5079EC4EF4608D6B48C42F41568 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 208E32CC6A5122BFD39121E55715F438 /* QuartzCore.framework */; }; + A46388F75BA6703B8A55625F6F3700AD /* PFCloudCodeController.h in Headers */ = {isa = PBXBuildFile; fileRef = D539673F1E79B36CCCABA2EF45E20C61 /* PFCloudCodeController.h */; }; + A49B2F46E36029D724B2983CDCA6A60E /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D83E57423431A9A7980CB0394BFFF2D /* ParseModule.h */; }; + A862EC88C384FA53351F004CE6FBE964 /* PFPushController.m in Sources */ = {isa = PBXBuildFile; fileRef = C0FEB0FFE36A30B2C767E64706ADC708 /* PFPushController.m */; }; + A8EF9E05F4E56B803F1953B15F23EE17 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = ED6A84A6701F1DE42F2C5E48FECA156A /* PFEncoder.h */; }; + A957B2947D9905E95240B0700B020436 /* ParseUIConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = B3F156062F2234AE09635E3C21571CF9 /* ParseUIConstants.h */; }; A9B701428585304B432F6FD45D7EB707 /* POPAnimatableProperty.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9565C73D5D4BE79747E60DCF1557E71 /* POPAnimatableProperty.mm */; }; - A9D0D78B1F9703C282B64100E9E8926C /* PFOfflineQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DC00CBF82C85912449AE191DBEC053D /* PFOfflineQueryController.m */; }; AA0189A6FB9572B5BF87E3B0DD1F872C /* FloatConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = C091E831068E3E504A40AC6932B39C87 /* FloatConversion.h */; }; - AA14B649447F0CCDEE28838153CB8ED7 /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DDA8143D2C09DF9986817461C4DD498 /* UIKit+AFNetworking.h */; }; - AB0423F50C0C64EEE86C2680EC9F02B5 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB9D45B957B79F1459ABF1E81F01530 /* BFCancellationTokenSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - AC42EC854B284673B3E2CA42FD46285A /* PFConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D45F61B78D4419060D26A7EBAF70EC2 /* PFConstants.m */; }; - AD2E8FF8584E338AC854AD47224895B0 /* PFEventuallyQueue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CA572C4AE94CB9AC2FF8EE80A7E1179F /* PFEventuallyQueue_Private.h */; }; - ADD444672255653A7B0DE3C76FE9DA9B /* PFMutableUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A28796B1724F0F5B766249296CA182A /* PFMutableUserState.h */; }; - AE56E1589FBE716D4F7C22543A5A4C71 /* PFUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = 8072BEAB5E3DFBED370817399B610731 /* PFUserState.m */; }; - AFC728CC114630A6E88C55D3423F5B35 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 35568ABE019B8ED099EFF07CE242DD67 /* StoreKit.framework */; }; + AA154E12AF2009C1A1E95021DA0960C7 /* PFRESTUserCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = EEB7662126C52466C21D904730876C37 /* PFRESTUserCommand.h */; }; + AAFAEDF937B05009965ACA3AA79497BE /* PFLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = CDB88E53629AEC61BD55872FDB9CE291 /* PFLogger.m */; }; + ABDD078EE52F5D96F65AD16A32A2AEB9 /* PFPushUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 30E22AE37E29C96863456166E0E1D8A4 /* PFPushUtilities.m */; }; + ABE5442021681A5A3DFF0E4E61221DB4 /* PFMutableQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = 024EFAECC7B95C1D6C429D5023A046ED /* PFMutableQueryState.m */; }; + ACC5C126131648E25E66D2FCB3C9C92C /* PFRelationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = FA171AFF7FEDD9A1B39B38C3FE2E05D0 /* PFRelationPrivate.h */; }; + AD06257CB510CCF42B5B68DA39971CB8 /* PFURLSessionCommandRunner_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DEE9D08357281B5F8C4E722920757E6E /* PFURLSessionCommandRunner_Private.h */; }; + AD391AD29A3B2458F1A4AEB266FEADEA /* PFSignUpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B0243E46B75FC63B525EFAFB733DB26 /* PFSignUpViewController.m */; }; + AD97A6603AC678AB9566480E98F13D60 /* PFFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A299EF96AF52EEF72B71FC41472E03C /* PFFile.m */; }; + ADE536C7AC8202A2FBC5DC1AEEA33DA0 /* PFGeoPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 89C6E76766F3F8CA998ED8A57C73E6E8 /* PFGeoPoint.h */; }; + AE34514DE3D92C66B08925706B91B269 /* PFMutableObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E837A384D488CAA3D160460C108410D /* PFMutableObjectState.h */; }; + AE3BAEB87401EDE9E3ECDC888F08D174 /* PFRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = F7178AAEC5FB77818382182E9CDDDB69 /* PFRelationState.m */; }; + AE84C9BF52A2F053DCF2818A058AF5D0 /* PFLogInViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A03B973912756B22A381AC58978C7CC /* PFLogInViewController.h */; }; + AE873583F57DC86B22E2B89796E73AC7 /* PFPushController.h in Headers */ = {isa = PBXBuildFile; fileRef = 65C8297BDEBA83D5501F45C12677C8EC /* PFPushController.h */; }; + AF100CD835C4B199221E14F3D78498DB /* UIImage+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A4C38992478C648D81E01A7031B5825 /* UIImage+AFNetworking.h */; }; + AF194E9D977F93A12B16F1BEC90A019E /* PFAnalyticsUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 536B415C0BBE342CFF56954EB43E327A /* PFAnalyticsUtilities.h */; }; + AF4416293C55E6F5EE37137366C205E9 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CA86409327B8CA5A123744B01FF0033 /* SystemConfiguration.framework */; }; + AFB647C03A230B99D3C2E8A875173236 /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F1BE91D0670897DB911C802F6BB70AA /* UIWebView+AFNetworking.m */; }; AFEBB8DD2F176DBEF3E1F0FFA6FE7AF8 /* POPCGUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0A9ED47A0EA56543BEB2F83DFD6122C8 /* POPCGUtils.mm */; }; - B038216F0632C36A1370F7C881A09001 /* PFHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 869C2B98A84E7A66ED53252EEBD534C7 /* PFHTTPRequest.h */; }; - B07458C275E7B87DEAF687642BB4EDA2 /* PFObjectSubclassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DFA1FB737DEBE392F5582656ED1040B /* PFObjectSubclassInfo.m */; }; - B0CBDEF8AB0A74F25C79B87615C2A832 /* PFQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = B7C407A664499E7354D9C1CCDB113A59 /* PFQueryState.m */; }; - B1905D70D1237C127EBBFCC391721F35 /* PFPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA3D2B13C2E276A13164FD9D412F89D /* PFPin.m */; }; - B255A029FDCAB0B2E6F6B106AC5BBF91 /* PFTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F5D0107B7A3A38D5B48854CDBEA6CD3 /* PFTaskQueue.h */; }; - B3E990CB8A89D42E7E9F7ED33D39721F /* PFMutableRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 372FE1327079A6911530ABFAF7BF2E68 /* PFMutableRelationState.m */; }; - B4C1CDF486FF24005182DE7A7BD1DF95 /* PFInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = FF3D2A57C25C1CECF52F0872DBB55F05 /* PFInstallationController.h */; }; - B4EBD2930890E190BA160A6B52C9029E /* PFCommandCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 24E60B787A9F785262AC44B47108D70D /* PFCommandCache.m */; }; - B54F3FF3E7274202D9C8F1E4AAC09873 /* ParseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = FC0150E534DA14510CC9BC5D0C1AFFB3 /* ParseInternal.h */; }; + AFFB6567710F5B2E19157904CB926A8E /* PFMultiProcessFileLock.h in Headers */ = {isa = PBXBuildFile; fileRef = B332057FAD3ECEC8A1DEEE7976DAEF4B /* PFMultiProcessFileLock.h */; }; + AFFF22D057B8F0FD40282009EEF55DD6 /* YALContextMenuCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E66F27EF0BB5326527E03C5A3CEEE84 /* YALContextMenuCell.h */; }; + B0C9C131B5444A59CB7B45103060981D /* PFURLSessionCommandRunner.h in Headers */ = {isa = PBXBuildFile; fileRef = 03A28063A2DF1FF0468E7E6363FE87F6 /* PFURLSessionCommandRunner.h */; }; + B0F0B301A563B1B00CA1E54D3DB6B00C /* PFURLSessionFileDownloadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 81BEED9DCE9C07680F81CC9034E38AED /* PFURLSessionFileDownloadTaskDelegate.m */; }; + B11A87D8C076D814AA04282226509CDD /* PFCachedQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4724259812FC4667976043F1B2F12B9A /* PFCachedQueryController.h */; }; + B162D6ADD7D48D114D60C7058AB6ADC7 /* PFCoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BA0A7EE195BFE6130879291F0291E4B8 /* PFCoreManager.m */; }; + B16FEE8B779E190095A1E3ABD9F7A634 /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = F0FD07B829A861446380687433E154A5 /* PFObjectFileCodingLogic.h */; }; + B1776A495CA3C01965AFAE04B5C1EB3C /* ParseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B9CD69BEEB6AE7123CC13AD292A988E6 /* ParseManager.h */; }; + B22514014C4FD728708247C36A4D2C06 /* PFConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = F485E3D70BC15CD0368944C76A7C8C94 /* PFConstants.m */; }; + B22D7A9317D066D2E1AFB3B577FA8E8B /* PFPushState.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EFA79C517CA44575258775AA6237117 /* PFPushState.h */; }; + B233E11E9B18531FA3846A13921B608E /* PFPurchaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EBB251ECCBF5E9375C2740D911B52AF /* PFPurchaseController.m */; }; + B2BEA9220E24B84E66D4C25D4191A4A6 /* PFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B3C01ABD047563B7C36F63413588D37D /* PFNetworkActivityIndicatorManager.m */; }; + B322E9C7946C1928ADD7BD54C251BE68 /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F5BE0E1F79B3E689886177D3048B7118 /* AFNetworkActivityIndicatorManager.m */; }; + B3E66011B6A6821058A9F81CC73F211F /* PFEventuallyPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E6B73184D192A7643EF111D17920315 /* PFEventuallyPin.h */; }; + B435CA5C07E3959AD573C9779AC84487 /* YALContextMenuTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 38FE94A275B17621E2E9B43752CE7567 /* YALContextMenuTableView.h */; }; + B43AE9F0A1BBFF35F9A86E10B180859E /* PFLogInView.h in Headers */ = {isa = PBXBuildFile; fileRef = 626EA58500BD7AFBCC37BB0A9E81C577 /* PFLogInView.h */; }; + B59BA13445B3371F9E88645BD03D36E5 /* PFRelation.m in Sources */ = {isa = PBXBuildFile; fileRef = 13FE506E3AD60D630A89BA5D57E1FB81 /* PFRelation.m */; }; B5B86F0561840C9F3408D9A3CE3BADD0 /* POPDecayAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = B0CE575CDDE0B1795BB8B88E0B49ACA0 /* POPDecayAnimationInternal.h */; }; - B5CFC6CC0CF004E986EEC23557FA0701 /* PFSubclassing.h in Headers */ = {isa = PBXBuildFile; fileRef = BCC77513019B8BF9A882928F74C52424 /* PFSubclassing.h */; }; - B62A1615577F1DF5C0987D382AFD154B /* PFObjectBatchController.h in Headers */ = {isa = PBXBuildFile; fileRef = 38C5CB3B26D08AF88F501A05B91F10B4 /* PFObjectBatchController.h */; }; - B642AE3024EF50F194A5BC047EECEB71 /* PFCurrentInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 009D766A60F44D81650E505380CF6EE5 /* PFCurrentInstallationController.h */; }; - B69E68EBE8B2C725353EEB0041CBDBF0 /* PFKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = BA733732E0D2D37C0A92D946DE2A9EEE /* PFKeychainStore.h */; }; + B68444D00C3BE5FF2CE8F08CA027ED38 /* PFMutablePushState.m in Sources */ = {isa = PBXBuildFile; fileRef = E200601043129FF78BD9AA263E6D6F92 /* PFMutablePushState.m */; }; + B6A29C69B85270D93675326CFE4FDF08 /* PFUserPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A9CF0F282093C60CC8BEA7B269DDEEE /* PFUserPrivate.h */; }; B6DA545595D3CE47BC8F81E673889B4B /* UnitBezier.h in Headers */ = {isa = PBXBuildFile; fileRef = 96015F1C746803D9318614B277F71BCB /* UnitBezier.h */; }; - B7EAF0146BF7255844B4382778C1DCC3 /* PFMutableRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = ECE13A0CEBDF1FFEEF6A3A9D07298478 /* PFMutableRelationState.h */; }; - B87F4316CA745157952D0E957CEF8D0F /* PFMutableObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = D5CF558DFE9FECD0D4DAD9727F9E7447 /* PFMutableObjectState.m */; }; - B8B9F34E2BBC7F8F7715F6851457261E /* YALContextMenuCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 01D2ED1DF56FF3AE05B1515043302F71 /* YALContextMenuCell.h */; }; - BA1F5D0A6C8651ECC8F39A20205C2782 /* PFUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E8BFD8BC695971FCCBA291EDD68F350 /* PFUser.h */; }; - BA36862D7FCDDEF2FF3F44E4FCF1FEC7 /* PFMutableObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = B58A5A84AAAEBE1A391E99E9CAED0FF2 /* PFMutableObjectState.h */; }; - BA645FA6D6E0D66E9CF92B04F93777DD /* PFCommandRunningConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 48DF685D40431A00C7B7572D23340086 /* PFCommandRunningConstants.m */; }; + B6F3BB847C3FE8C7885EF6699B267CEB /* PFInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = F13E8D0BBF19E5AA3F8AC5D420158C3B /* PFInstallationController.m */; }; + B708D81052FD3DCCACE0CC2A9820B106 /* PFTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = A3F32303C58658949292DAA3491E94DA /* PFTextField.m */; }; + B9D6397236C3B93431B38327C0F09EC7 /* PFProduct.m in Sources */ = {isa = PBXBuildFile; fileRef = C114B416CE301CC19DDA171508581D3D /* PFProduct.m */; }; + BA5C18269479C7F1871D1FCA3B061B26 /* PFPushState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 258D3EC39C7F9B9695D37D77B93E6D25 /* PFPushState_Private.h */; }; BA9989C7128E968BA7D20CFEB392AE9D /* POPBasicAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 212068113F29FA47D17730ED388F8706 /* POPBasicAnimation.h */; }; - BAB47A67F4485EE6E586A25B834A2801 /* ParseModule.m in Sources */ = {isa = PBXBuildFile; fileRef = A011CA3F808702224552F151CBB37A51 /* ParseModule.m */; }; + BACDC8A8B550B13CED0E2835E048A4BB /* PFRESTCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A1A25F8BE29707DDFE4EAD9454032E7 /* PFRESTCommand.h */; }; + BB23B75ACF0D158E30F1F433310BCAE9 /* PFImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC28E88C43C66CB821F869EA052FAE8 /* PFImage.h */; }; + BB56D58A2B84E11B4B5D600D1463C4B4 /* PFUserAuthenticationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 08778622B2D01D7E6D35F59E3A8D7504 /* PFUserAuthenticationController.m */; }; + BB94918ED5DE293AF4900C1525400B44 /* PFCommandResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 628243081CD6D87A75BA9909480D688B /* PFCommandResult.m */; }; + BC87FA7901701773F8F642EF2C825DC8 /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = B8ECBD88856AC04D71253C322B980822 /* AFNetworking.h */; }; + BCE493C2F92B613C69FA9B27A3D06B22 /* PFCurrentInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 01FE7E553947BB6A0FFAE1B9E6F894FE /* PFCurrentInstallationController.h */; }; + BD0E934130A4AF2DFCCC964A022D1001 /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = 440FFFF5E8AA2540E8D0104B9420D969 /* PFCloud.m */; }; BD6626643DD9C3A12AB86F9361EC89DB /* POPAnimatorPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0476012CEBFEB22B5F0926994E6AEEE3 /* POPAnimatorPrivate.h */; }; - BD7119081B9A134A53DCAD9949D575C4 /* PFSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C6969F6DC20ED490487711A80935900 /* PFSession.m */; }; - BE032518FE863AF44351DDE1D6844470 /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A5849314580BC3F82E4A799104E87FE3 /* Pods-dummy.m */; }; BE267A18590772AAA04953604BC7B310 /* POPAnimationExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = C1B6A53BFD919966B87CD6FBFD89CE1B /* POPAnimationExtras.h */; }; - BEDAE19BB304069C127DED5676C08866 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = A72A7753E28C0B037F3759A7CB7DC9CB /* UIProgressView+AFNetworking.m */; }; - BFA8D7680070FE36E35FDA31CD18B68A /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = BEAFE0D908EC855629B1121D957A354A /* ParseModule.h */; }; - C050B90E44F1D7D1B242336E9ED81E08 /* PFPropertyInfo_Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = 97ADB30A5976DC7FE832E68A415B22F8 /* PFPropertyInfo_Runtime.m */; }; - C0CD48B4F4A7ADE0E8F3763065D58B67 /* PFCommandCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A28218952E226A9395672AAF9BB98065 /* PFCommandCache_Private.h */; }; - C1570CA337867BEF23B4AC733E51D4B9 /* PFKeyValueCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E2E03FFA5C12908D09BC583858570B6 /* PFKeyValueCache.m */; }; - C22396DE37E095718482FAC4D8D796D1 /* PFHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A3138F383603A594BF1120840E69F93 /* PFHash.h */; }; - C2B622D57413084005AD4FF3FE3B4CBE /* PFFileController.m in Sources */ = {isa = PBXBuildFile; fileRef = 676C7A56F303C34B831F1F015F05812E /* PFFileController.m */; }; - C2E44B209546E7866532737094B259F1 /* PFObject+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = F0FF6176EC466320C2C4D25100A1B61E /* PFObject+Subclass.h */; }; - C35492542D744906958BA9387A6DEC2C /* PFPaymentTransactionObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 8510965E6696177882F8683FF279CA62 /* PFPaymentTransactionObserver.h */; }; - C44757A96D797254C3E4471D7DBC7A12 /* PFCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = BB51AB9AA27CE8D0A85E5690F23CF6EA /* PFCategoryLoader.h */; }; - C453240E137D151B7692C7F7F2061B9F /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AE87F34D52CD28E7113F03F7CEA01F06 /* Security.framework */; }; - C4CF94A0BBEAE79C88C879094C1FF6BB /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = 58143C3358B762BB4DC15795BD82B8B9 /* Bolts.h */; }; - C521D37D942FE201D29B17ED2BACAFE1 /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C8DC7559A9E804216A7455574ACC2FA /* AFHTTPRequestOperationManager.m */; }; - C5B8E5BD9C4C8E0AF430CD461992ACC0 /* PFPushController.m in Sources */ = {isa = PBXBuildFile; fileRef = B1E9EC0D78FBC6373DBD668B202BBA25 /* PFPushController.m */; }; - C68996C6D2A15E462A0B94666E1B17E3 /* PFQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D7ADA7673FDA922B924DB960BC45FEE /* PFQuery.h */; }; - C6C48576B6391837714FCEF3440243AE /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A16D1432732F853E3D7B39B1DB383E /* PFRESTConfigCommand.h */; }; - C6E0B8D8F68167D1CEA74DEAAE59F09A /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 5038524C4AA89B3EC607E5B47A706CCA /* BFTaskCompletionSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - C7344A2F05279C90561EED1D8EA489CD /* PFOfflineStore.m in Sources */ = {isa = PBXBuildFile; fileRef = B0E75CCDD1A5217E3601BF092D5385C1 /* PFOfflineStore.m */; }; - C7DF7CFB90482868050B69FEF4373317 /* PFCloudCodeController.h in Headers */ = {isa = PBXBuildFile; fileRef = C1555BCE0D8C4B718BB72214683D3907 /* PFCloudCodeController.h */; }; - C8E94A5768C9FEEDEEBE2D9513D7BD36 /* PFOfflineStore.h in Headers */ = {isa = PBXBuildFile; fileRef = FF6B3C0F9FB537B2DB4C17A15E8F06D2 /* PFOfflineStore.h */; }; - C910FDABF6D86FF242B7CD5A85FE7B94 /* PFRESTObjectCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 5775915FCBF7CB8AB7E50C1474A500B5 /* PFRESTObjectCommand.m */; }; - C91D09FFB740401B045D4AECAC5C997E /* PFInstallationIdentifierStore_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 92C8318F0774CE0DB5B5FA3C7961C69F /* PFInstallationIdentifierStore_Private.h */; }; - CA9B7B7B520E355A2E23B0D0EB8302A9 /* UIAlertView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 70A550454DC97E123E16BD631BDAD95C /* UIAlertView+AFNetworking.h */; }; - CB4CF87BD5935737F20BDF0C99B80495 /* PFFieldOperationDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = BFBC36D6FED37ED769BA66522F1A639F /* PFFieldOperationDecoder.m */; }; - CBE51D66F657DC502B81442C46F7220B /* UIImage+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = E58FC77B8AC9BB8CB123B072D0E7AD2F /* UIImage+AFNetworking.h */; }; - CDCB55B6E5A8A71A543987CB14B2045E /* PFWeakValue.m in Sources */ = {isa = PBXBuildFile; fileRef = FFE3BF2FE5A767CB3A9F0B32672156AB /* PFWeakValue.m */; }; - CF7A23F2E61E57A9F6E76E358E956306 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - CF9126AE266CD109325E9779E8989D52 /* PFAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2A46AA281CDF574C18A7B9311A6C93 /* PFAlertView.h */; }; - CFDDEDCA97A5F84CDDD5A6F1BFFA2243 /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = 70864853E727E60E7B86865739D2ECED /* PFCloud.m */; }; - D149C0E66489B8A63BF8ED2BA213DF12 /* PFObjectFilePersistenceController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AA0E5427E9EFCC96AC0F8CED0FBEEF4 /* PFObjectFilePersistenceController.m */; }; - D1ED7907552DF919137E30AEDBAC4AD3 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = D0E74CB04A2E39384A95EDA3500A04D2 /* AFURLRequestSerialization.m */; }; - D22255492F43BE2B59EDB2478E8C5818 /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DBD87B92425DF4F2F580DDE78C400947 /* Bolts-dummy.m */; }; - D3D1A0ACF80E0131F85BDE9E7D7E6303 /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F53F9E343FFBC0260E05A6277C25495 /* AFHTTPSessionManager.h */; }; + BEE638EF5F21CDB2F1E40F19982F80A7 /* PFObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 90022F3C8DE07574875FE6D257E4F527 /* PFObjectController.h */; }; + C031BF00625EA58B0E0F43664A6221F6 /* PFMutableObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = AB3B8D04CBC9A7E1794313D118715E06 /* PFMutableObjectState.m */; }; + C07AF40067C97AC8563FB89026FA30FB /* PFURLSessionDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EFD42501997FEBF509BD17AE211C265 /* PFURLSessionDataTaskDelegate.h */; }; + C08B5FB22435EC893FE16FE39EABD15A /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 579B61E551621BA10D78D5D7BB2E82D6 /* PFURLSessionFileDownloadTaskDelegate.h */; }; + C0980024CA8F0C844209387617B1626A /* PFMutableACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 23806737BB22CBDE6C5BFC062A416AF7 /* PFMutableACLState.h */; }; + C0A10DF1BB88502B700C9C29710A0CE7 /* UIAlertView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = D18BE6A197AA9130FCF14A206DF2BBF8 /* UIAlertView+AFNetworking.m */; }; + C12434AD31924C996D78C7809030C36A /* PFPinningObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = FA65C52649C85A7646474D735E22867B /* PFPinningObjectStore.h */; }; + C194EC6B62B80C078E18E5156DC77445 /* PFFieldOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4388A6A932A7756E9AD6FC752949159E /* PFFieldOperation.h */; }; + C1B61FD5829B0E8EF13788BDEAE71476 /* YALContextMenuTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = AD9AC4ABA3BB74252870F496326BBAD2 /* YALContextMenuTableView.m */; }; + C20F93FABE3A2481465C6F465B36FEDA /* PFObjectFileCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3736B5A263EAA9B1E1282D09BC223346 /* PFObjectFileCoder.h */; }; + C266A2B3C5352572234567C57A58113B /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BF9666E63A77CFD64FC53F88BEB02F8 /* UIProgressView+AFNetworking.h */; }; + C30943CD134EE759B7B5C2FEF59A80AA /* PFInstallationIdentifierStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E2C0EAC510FD8283F4149F0AEFD64DD /* PFInstallationIdentifierStore.h */; }; + C46F6697FFFCB4286F86CD263ADE1A77 /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D68E6EF3A4AFEB121B57A35E7EA3FBE /* PFInternalUtils.h */; }; + C48FF979B2E995EEB70A32C9AB716533 /* PFBase64Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = E13BB96D1F65A19C55EECC6F0A446A4A /* PFBase64Encoder.h */; }; + C6D1F6F317CC8C99C2231EAB932C8C85 /* PFNetworkCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = CA6036733998FEC7AF7360C87DB6738A /* PFNetworkCommand.h */; }; + C703EE7C157DFC6D852FA8DCD75EC0E3 /* PFQueryTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 63D19DFCBC3895E5748AC11A6100A32D /* PFQueryTableViewController.h */; }; + C732C19FE5AF8456089C53D44C9D5083 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52CE38F964085D76CF0D20DF4E04ED74 /* AudioToolbox.framework */; }; + C7B3A79CC6F994A3856811BB3E7650B2 /* PFPaymentTransactionObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = C49FFB322304F787EF6324233FD5FED6 /* PFPaymentTransactionObserver.m */; }; + C846C14639953DD89E0BA3255461A61F /* PFSQLiteDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = A1505BE85BBBF3833DAC5F2D8AEA1E44 /* PFSQLiteDatabase.h */; }; + C8A108971154EAE299CBF95D90E32A91 /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = D19D83358D33DE6033AEAFDDAC6E86F1 /* UIImageView+AFNetworking.m */; }; + C8A1372CC5C6B8FC9CF5EE205002ED1A /* PFUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = C4AD49FF201BDF487F9C08A8094C313D /* PFUserController.h */; }; + C98C89920977F57CECAB9E69158D6E6B /* PFCurrentObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 2063B9F38D8BF60908CCAA031D7CDEE1 /* PFCurrentObjectControlling.h */; }; + CA4B1DD1B4C3C9E84FE49AEC2FA665A1 /* PFUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = DEE628E2803E756C9760B307B5FBB72B /* PFUserController.m */; }; + CACA5EA783A127020BD6954AC0B733A9 /* PFProduct+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D62DD60CCADE4FE9E157BDFCA09E4AF9 /* PFProduct+Private.h */; }; + CB69BE84823DE0A4FE0329292C1497C0 /* PFKeyValueCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 854CBE59DE1E76CFC6D07D0062FFB68C /* PFKeyValueCache_Private.h */; }; + CB8A6911585DD2E85C4B59A6BF7F3F1A /* PFImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = C626A77F47DF6852A4FA93130E79A6B9 /* PFImageView.m */; }; + CC73D8C3C9899D9A64F580BFDA431730 /* PFQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 166CF998A95C71469855822102D41793 /* PFQuery.h */; }; + CC8ED05280D8A05226006D99770193E4 /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = A2F55850F1341E91769F563950DFBC38 /* UIRefreshControl+AFNetworking.h */; }; + CCDEBAF806FE044AC4E3ED59E2E2ECC1 /* PFAnonymousUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 10BC706826E8658ED21767087CA7E11B /* PFAnonymousUtils.m */; }; + CD194BB451204670AB0A694560D9263D /* PFRESTSessionCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D273720DDB1BA554B5D9ADA0FA44AC7 /* PFRESTSessionCommand.m */; }; + CD613FD1DB7B5DE11F8617B8F8499EAA /* PFPropertyInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 57E3E7A53BAA20CC092190C002268ADD /* PFPropertyInfo.m */; }; + CD91B87ED0BF7972FD3075256D3B5FC9 /* PFObjectUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = F15F2C338757D315D1E60DC9FE07FB63 /* PFObjectUtilities.m */; }; + CDC89406350CF0583592365D4527FC5D /* PFURLConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A0553B6F96FFCFB2659FBEC93186129 /* PFURLConstructor.h */; }; + CF405FDD9B6CC954679AD7757C0F6AF3 /* PFThreadsafety.m in Sources */ = {isa = PBXBuildFile; fileRef = 10723C36012E47BED44DC7D4B878791C /* PFThreadsafety.m */; }; + D15986F3B3AE53BE264DDF05650A2D1E /* PFEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 15D4EE1E4E8D6F31A989B917DB27C9BD /* PFEventuallyQueue.h */; }; + D30FD7247BF7B33D7AE8EECC2839822E /* PFLogInView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4147D89794931071D52A8BA0A96222F8 /* PFLogInView.m */; }; + D341E4408F03D685A16540601E7BAF21 /* PFKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 01C2FE9EEB63EB166CEF1AF8D6A7F5D4 /* PFKeychainStore.h */; }; + D352E823A4AC998C95EB68235606AC4B /* PFNullability.h in Headers */ = {isa = PBXBuildFile; fileRef = 975FA02383C4AF2B0D4C851DF8A9A0C2 /* PFNullability.h */; }; + D38EA02B47A89639B00070BD89CCA668 /* PFInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = 21EB3DF5E0378397B89D368BBFD08CDE /* PFInstallation.h */; }; + D3BA714EBA9CCEF754C2FF17053B7F6D /* PFMultiProcessFileLock.m in Sources */ = {isa = PBXBuildFile; fileRef = E636D9F080801F61C3A75CBF4036ED38 /* PFMultiProcessFileLock.m */; }; D4224969BAFBC6138FFC872CCC829FB9 /* POPDecayAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = B0F7BCEE9A871E1193D694931FA31E17 /* POPDecayAnimation.h */; }; - D4B06A600FA1DBCBB68ACFDE2E554753 /* PFSessionController.m in Sources */ = {isa = PBXBuildFile; fileRef = CF35E714DE566F845ECEDF6AE894C5F0 /* PFSessionController.m */; }; - D4F7F5F0D98F002042E4891CD1DBFD5C /* PFUserState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E5F89585BF738F0A58C77BC3BE1A932 /* PFUserState_Private.h */; }; - D56CAFD0B02331EB90CE5F19010B827A /* PFRESTObjectBatchCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D973AF50D37829E5A629A80ED88FF2E9 /* PFRESTObjectBatchCommand.h */; }; + D4C9FC064C9671F00AFE2BBB28B717C8 /* PFOfflineQueryLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BA7AA53D3CB697F471E37400395783D /* PFOfflineQueryLogic.m */; }; D5792E05DB34C9521294B06A622AE040 /* POPAnimationTracer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E88590D291A3C131FC32F9BC9A80038 /* POPAnimationTracer.h */; }; - D5859A1400F3FE968B0AFCC64C078904 /* PFGeoPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 57F2605E98764A7779B3213480606C71 /* PFGeoPoint.m */; }; - D79E5121E2F988A64AE071076264C201 /* PFRESTCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 36E7ABF06376C0698BE4B369C1255EAD /* PFRESTCommand.m */; }; - D7EC19C57A7BE418E80D9B4321310DD0 /* PFMutablePushState.h in Headers */ = {isa = PBXBuildFile; fileRef = B2586CEB4DB20E7AED5EBFD3FB96B973 /* PFMutablePushState.h */; }; - D801E515C96AD14143FED389A6D20831 /* PFCachedQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 893348B36B23CFF515B649DF3EA05962 /* PFCachedQueryController.h */; }; - D8077B11B5F174C1072201BB8D597B08 /* PFGeoPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = AE96E6223940CD70D6F01EA288192D93 /* PFGeoPoint.h */; }; + D6337DEC57E37290582ECA6573B320E8 /* PFURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 127A5C472A10A9E794C1EC858B8A4202 /* PFURLSession.m */; }; + D65614CEF258F3A4E8E6B5888D4B7CDF /* PFRESTConfigCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = AB3AB9370B71EA5499996D460DF047C5 /* PFRESTConfigCommand.m */; }; + D7640761AE1745BF2997189B5DB9AE5E /* PFInstallationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 4908E227F1BA636934AEBDAD07F4FFB9 /* PFInstallationConstants.m */; }; + D7D35AF9A402F329043D58BC49AE209B /* PFObjectFileCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 1192323044F90ADFAE943B828EF33A2F /* PFObjectFileCoder.m */; }; + D7DBC7638D93388B17062DD7F5997B9B /* PFUserState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E7DB34F9E5FDD05A6440D7DCD7C9C62A /* PFUserState_Private.h */; }; D83868EA3920350C53488A4C4F9A5565 /* POPGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = 3155A15C877F794FB064A4A0CEEB2F13 /* POPGeometry.h */; }; - D9B2F24603C0F48EC73090BC6DC94FCE /* PFObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DC7D6BF37746831732BEE64A78E2E64 /* PFObjectState.m */; }; - D9B88BBFFE6342E41F3A86220B3B9410 /* PFCloudCodeController.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC012E8559514CD5FDA778785F7234B /* PFCloudCodeController.m */; }; - DBA301B469C007350C52449ADB7E4236 /* PFPurchaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 94DF16E2294CA8FEC9FD2ACF36D38638 /* PFPurchaseController.m */; }; + D8A42135C627D3FA9AF0B3D0745F6016 /* PFInstallationIdentifierStore_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F489EFF4C232894528578CFD10B4CE9 /* PFInstallationIdentifierStore_Private.h */; }; + D8A9DE018D72A141E9CCF603B8B0A45D /* PFRESTPushCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 33A90143BAE0EA5E9192335705F6E326 /* PFRESTPushCommand.m */; }; + D9B4A22246C884827CD655A9156C472F /* PFUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = FED6BB0FA8302D839BF078961698B2F2 /* PFUserState.m */; }; + DA76EA5CEC28CF0388D24B683FDCB3F1 /* PFFieldOperationDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 33770436E2F99A5D4929AB57FDC21D97 /* PFFieldOperationDecoder.h */; }; + DAB688C1A5A2539C6A972C1D752DC734 /* PFRESTFileCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = F77C74B9A3B538B0EB997559E6CF16D8 /* PFRESTFileCommand.m */; }; + DB562E61FEB73207FC1CD7C146D2CD91 /* PFPaymentTransactionObserver_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EADEDEC26137844F1745D14A9238E700 /* PFPaymentTransactionObserver_Private.h */; }; + DBA63BC235D5E10D72CDB0AF89EF50EB /* PFObjectSubclassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 42FEE158A9A8CD9C91CB464AA689D222 /* PFObjectSubclassInfo.m */; }; + DBD1CDE68C85732BF3FAE91F5E90046A /* PFObjectBatchController.h in Headers */ = {isa = PBXBuildFile; fileRef = 11D03F3B0D034E50C77B83ECA26BA202 /* PFObjectBatchController.h */; }; DBEF60495B33D1BA4C7BA3C8E3A24968 /* POPSpringAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7371F16336283F2D8BB2A199CD4DDEF5 /* POPSpringAnimation.h */; }; - DC765E1CE8C9208AB476C0138BEA41BA /* PFOfflineObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = B024D2C96D819E81E5D194B562CA7CCF /* PFOfflineObjectController.h */; }; - DD0CF6B6282013FA4E3830D6EC0F409A /* ParseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CD3D62A5F9D0B310DCF7C520D812B6F /* ParseManager.h */; }; - DD3558902E5E8D951999253854B2A573 /* PFDefaultACLController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1896BB3AD97D1E8CB9D17C6A982672DB /* PFDefaultACLController.m */; }; - DDC4E7634F0E7C723FF2EF86872FA1DA /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EC8E900100484763798A1C6338E9061 /* BFTaskCompletionSource.h */; }; - DE1227CB453C1C67BEDF44DC54EF1BAA /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A09F4FD4303453124FB9D4870DDE2F0C /* PFGeoPointPrivate.h */; }; - DE7E8446AB52346D9156DC34976D7342 /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = A3A5889AC5CCB95EF1C4DD6B7C5C930D /* PFUser.m */; }; - DEBBD76F7A9E5B75BF2732334FA25155 /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = FC9971E4E70ED25A33B370FAEA88A589 /* UIImageView+AFNetworking.m */; }; - DF153F159E0E2D991A092293D9A30CC1 /* PFCloud.h in Headers */ = {isa = PBXBuildFile; fileRef = EA79AC3D10A54A6115A06F836846E4EB /* PFCloud.h */; }; - DF425C7C6CA426D5CBB0ADB6A96871C7 /* PFPushChannelsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 89A3DB76DA1562634E50BB32E31C34F7 /* PFPushChannelsController.m */; }; - DF6048F6B377ED247B79AFCC8B69621E /* PFConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 72C04520515C92C01E90D8D58C97BA21 /* PFConfig.h */; }; + DC1CF0ADB23CF7A4DE023F7F2E8EF79E /* PFOperationSet.m in Sources */ = {isa = PBXBuildFile; fileRef = BF50874E9091DBBE43D936A9592CC9FA /* PFOperationSet.m */; }; + DCE5DC8AC5E87246A7B78770C93B750B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + DDA23AB4D39B70F419FC601612BD85A1 /* PFInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 89B3B0322B04DCA7B4CC50F944791132 /* PFInstallationController.h */; }; + DDED7E74CC5FFEAE64833B4CBAE44D3D /* PFMutableRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 93A5300ED14457F5DD5D6D6C0EC2DEE0 /* PFMutableRelationState.h */; }; + DDFB0A99E07FD65ADF0B16C34EA2525A /* PFFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 700DB399BAE4612DE007DEC2B6736D04 /* PFFileManager.h */; }; + DF0ACB31003BE6C1F4819E254B45FE1B /* BFTask+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 52A0BDF6DC4FDD8CAF9A75E1C98C9FE1 /* BFTask+Private.h */; }; + DF10EECC8F4347BD60C03DB90E6CAA53 /* PFCurrentConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = DF33002FB4E1478B0C1EB61E8135377F /* PFCurrentConfigController.m */; }; + DF6F63AD654936433F0F5FB491062B51 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 14A057986B01966A11C6CB28EB5A4A94 /* BFCancellationTokenSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + DFD002783E9F4A6184311A658129574B /* PFKeyValueCache.h in Headers */ = {isa = PBXBuildFile; fileRef = C73A613165131696179D8F483D882AAD /* PFKeyValueCache.h */; }; + E01C78E556B1E73847C3783FCAA7D59F /* PFCommandURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 77845D529DEC33723562ECA6270BD8AB /* PFCommandURLRequestConstructor.h */; }; E03238690A5A21C9B8ADCC9737633061 /* POPAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8336CCF2280C58E6C367DF4EC0EBB7B3 /* POPAnimation.mm */; }; - E0377CE7F7C2101F3D5BE001EFCABE4D /* PFACL.h in Headers */ = {isa = PBXBuildFile; fileRef = B332CC51A8213F3EF1C7A3FE399A5C2B /* PFACL.h */; }; - E08EE32C93126D92DC9E6961789914E7 /* PFMutableFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 61308EBC3E3CCE6EB380B4761543AD72 /* PFMutableFileState.m */; }; - E0C01AA7CFB002785436D33521E5328D /* PFQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 291630B6FE4315F0B5B789D1ED22A66C /* PFQuery.m */; }; - E12A39C3E3423DE57BA268CB553E74DD /* PFObjectBatchController.m in Sources */ = {isa = PBXBuildFile; fileRef = 530ED4C4F72784908C56CECFABD0231C /* PFObjectBatchController.m */; }; - E19D243F4ACB365A65A5BA008694E4B6 /* PFEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 63F5E36EFB9403CA32B8B5C3A3F78855 /* PFEventuallyQueue.h */; }; - E219C58B408FA57BF94D5A4113C59B87 /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 98C44F60AA929307291A20DC790BFEB1 /* BFExecutor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - E22F49523078CB46DB077CBF54C73202 /* UIView+YALConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E4D88B0EC5CA12C799F9F3C05C0B31E /* UIView+YALConstraints.h */; }; - E23601D8BB9D0538FAD5F3DAF6251F76 /* PFNullability.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AEDEB7E9CE1E1D2795C43EFD540009 /* PFNullability.h */; }; - E28D3D6AE3281331EFE0B93FB91853F6 /* PFURLSessionCommandRunner.h in Headers */ = {isa = PBXBuildFile; fileRef = CDAC0B9AE144C31E2DE5AF0A4DB1EDC4 /* PFURLSessionCommandRunner.h */; }; - E2D8E1BB40962D1F2A8E7C8B179CBB3A /* PFReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE1F1F92C05B5ADE677C606485BB75F /* PFReachability.m */; }; - E32C0C8E76B2398A462F2F44466C88C1 /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 285AE108BCA0C7BACB4D927E8D1F8665 /* UIImageView+AFNetworking.h */; }; - E387EBB7F209061962244F91C82014E1 /* PFAnonymousAuthenticationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 898ECE478F3C854611287289F4977E11 /* PFAnonymousAuthenticationProvider.h */; }; - E4322DEF695907DD78455D334243FC86 /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 06588E20E049A2E98B815265D06086EE /* BFTask.h */; }; - E4A9466EF1DE5966768709FD1DEBC244 /* PFAnalyticsController.h in Headers */ = {isa = PBXBuildFile; fileRef = BF99C2FE0ABD09A876B4FDC3B73D693D /* PFAnalyticsController.h */; }; - E4AEC74A16A03117C42C961DF1C65848 /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E08E20DF9125F146349FA765648DCA3 /* UIWebView+AFNetworking.h */; }; - E4D2116E355F2C101B6DE6296544C3BC /* PFRESTObjectBatchCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 32D54A528AA2134A544108B4E124A617 /* PFRESTObjectBatchCommand.m */; }; - E518D12AF66FE6BF2AA57FCECF4C5C09 /* PFDefaultACLController.h in Headers */ = {isa = PBXBuildFile; fileRef = B65D4C06593414E001B75B30C7A68F64 /* PFDefaultACLController.h */; }; - E531951BF8A2CDC0A1865EF2CA115D46 /* PFPropertyInfo_Runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DD825DA40E92E93FAC2EA00807BF7D1 /* PFPropertyInfo_Runtime.h */; }; - E5831BEBB501CAE9B5B49F7C5BE1433C /* PFCommandURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D0DD7229B595E60BA7D6C2A41C4B6B /* PFCommandURLRequestConstructor.m */; }; - E5EB368969123151E92F49962A1A3FCB /* PFRole.h in Headers */ = {isa = PBXBuildFile; fileRef = 33CAFF9933F161C320331CCA71D23A5F /* PFRole.h */; }; + E10526A06C2B3B6438C8AFB3F640BD09 /* PFObjectLocalIdStore.h in Headers */ = {isa = PBXBuildFile; fileRef = FD68AE58291EBC6F2D37ECA9677D081F /* PFObjectLocalIdStore.h */; }; + E122B61176D0DEA685FDB0FA3FA478C4 /* PFOfflineObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7643F6942D7C77523A6EC6A87C80A76D /* PFOfflineObjectController.h */; }; + E5B7529003542564C3D82E93AAA217E8 /* PFURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D222FBAAC7CB0784308DEB998350A70 /* PFURLSession.h */; }; + E6481D33FA2411794419C7EE8CD34812 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C03BDCE6AA9F4C2CBA33DD19A323934 /* CoreLocation.framework */; }; E66A972C821119D091B99E54200F7FC0 /* POPAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 94815AA3EE3CBA04CEE85515701AD534 /* POPAnimator.h */; }; - E743F3901CB2167FBBC28F2054A34421 /* PFCoreDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 7725DA2CCC4B05B3E8613121DAB013CB /* PFCoreDataProvider.h */; }; - E7E1B3EC902FD50B6643939B83B1E678 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - E8608D5E7A38E5A61282E3CF64502D18 /* PFURLSessionUploadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 347D5D631A6A12B0298E13B5415AEAAF /* PFURLSessionUploadTaskDelegate.h */; }; - E880F7F33114312DF66A4E88E617C825 /* PFURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CB47EA89DC2B49C7B2B12127098FB33 /* PFURLSession.h */; }; - EA2FD9A751EBAF09C8947C9BE65B8195 /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A69D20AEBC89B67DD33CA2CC54E309B /* AFURLResponseSerialization.h */; }; - EB8809FA99543F795F70FD6A9F457547 /* PFFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E745CDD44F448B0BB657E770CFDCF27C /* PFFileManager.m */; }; + E70F8A07B3A11662FE00F21D78DD2EFC /* PFACL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D59E2F93C9A1BBC9FA927582057EC8A /* PFACL.h */; }; + E7337D549E5D626F94A134222202B50B /* PFRESTQueryCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 4396FAB720D2A9D7CC8BE495AB0901B7 /* PFRESTQueryCommand.h */; }; + E77F1FD60C4EF4F25338458E5436782A /* PFResources.h in Headers */ = {isa = PBXBuildFile; fileRef = C5B91B4ACC467BB7DD2693398E122C60 /* PFResources.h */; }; + E7A71CBCC35381012DF4754ECCFAE54B /* PFObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = F304EBA667E0521CC244EB0ED7942C62 /* PFObjectController.m */; }; + E853ED339962D9B59ECAB554E5FF378D /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = C953E884E530A27F2630052EB09388EA /* BFTaskCompletionSource.h */; }; + E9332502DD74CFB87761C2CE81EFA61B /* PFLogInView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A3A60F4A92389CAAF08FEB19CDC3BF4F /* PFLogInView_Private.h */; }; + E993028DC077D473F7EA1FC719481A06 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 208E32CC6A5122BFD39121E55715F438 /* QuartzCore.framework */; }; + E9C7067DD4D5DCDBFE5256A7D7B341D9 /* PFBaseState.h in Headers */ = {isa = PBXBuildFile; fileRef = C54E694252DA1DB712A3943ED8DD8E91 /* PFBaseState.h */; }; + EA1BF58C6AD803B2721DA1878CFCC713 /* PFActivityIndicatorCollectionReusableView.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1208FED19399BDA5AE927E35FFF9D1 /* PFActivityIndicatorCollectionReusableView.m */; }; + EA3F03EA5543BBAC23622F4231C4B2FA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + EA5D8F7D99B81A3F0B37F13594C6B09F /* PFURLSessionJSONDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8904F23F909FE6ABDCDCF6FB05F10B30 /* PFURLSessionJSONDataTaskDelegate.m */; }; + EA8EF5F11DEA83024A32A85701C9F3F2 /* Parse-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B20253C3CDBAF656A3F29BF038995DDC /* Parse-dummy.m */; }; + EAF873A25D5C0A245E42B1B4CBED1EC9 /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = EB040EEF861D06E95A5414091D83C130 /* BFCancellationToken.h */; }; + EB1C15BFFDA1BBE3B4FB2E5DBAD25829 /* PFTextButton.h in Headers */ = {isa = PBXBuildFile; fileRef = A772CFB5BFFB35B2E671E4851E00B741 /* PFTextButton.h */; }; + EB2B8E80042F57D2A30B291CA14480C8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + EB39803E763F8B8D482C26A2D6062693 /* PFAsyncTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = A61451E1B1612A7616445BE1C5CBA596 /* PFAsyncTaskQueue.m */; }; + EB59258B2DF066823D0304F785C50A93 /* PFActivityIndicatorTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2505A4FCC1D644BE68CE42C4152E5834 /* PFActivityIndicatorTableViewCell.m */; }; EB965B246F7206AE338A7DF882400A0E /* POPVector.h in Headers */ = {isa = PBXBuildFile; fileRef = D5CE48778301C24CD288B08DDA441605 /* POPVector.h */; }; - EBD7FD53C5DEA72FEB27FF599E88BC80 /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = 245BC03B9F6AB7B69A163206AF3C2C32 /* PFBaseState.m */; }; - EC1B42BDF93A2565BCCDE2A014286022 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = CFC48C77C63A582B14A5B098E6FCF482 /* PFURLSessionFileDownloadTaskDelegate.h */; }; + EBB4A7DE8B8EB48988E5A27219DB6BEE /* PFSQLiteDatabaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = E7F561763E1088F225F61FF89B52790B /* PFSQLiteDatabaseController.h */; }; + ECC7C4DF3B8E8BCF4A68C7936F8804EA /* PFLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = E34FBAF62EE3096BA751B8F644E4B4F5 /* PFLoadingView.m */; }; ED0BF4FE2052871A5C209B796BA9D91E /* POPAnimator.mm in Sources */ = {isa = PBXBuildFile; fileRef = ECC48BF18D3BD01C21B65648709A45D6 /* POPAnimator.mm */; }; + ED255D7B9F7F8ED67832D921061E8922 /* PFMutableFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C4B6DD741681BE627832D2F02A6A9B /* PFMutableFileState.h */; }; ED3821443DA3268139C3CE29A592C03C /* POPAction.h in Headers */ = {isa = PBXBuildFile; fileRef = F3A985A006B0CCD0116D8FC53C4D1834 /* POPAction.h */; }; - EDCC71FC92D40B3862592FF1F64D9F22 /* PFMutableACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = 82B2F774B2C3F6B000F7B323A1E51571 /* PFMutableACLState.m */; }; - EE2A8C0E8B415EC8E006AC7B1F243C65 /* PFObjectSubclassingController.h in Headers */ = {isa = PBXBuildFile; fileRef = CDE463E6B9D1AF8E6AE850CD5E68849F /* PFObjectSubclassingController.h */; }; - EEB02FC19C729B08DC6E52A58694A62E /* PFAnonymousUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 36B65B247D65EE46D2A8F3ACDC87870F /* PFAnonymousUtils.h */; }; - EEC3CE2CB2428CE7EEAF37BF2E0187AF /* PFSQLiteDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = DE2DE7B62241FC17A59B0C930D7837B4 /* PFSQLiteDatabase.h */; }; - EED1C92E54E432794307DC75AF87EE82 /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 994A5F73DF6BF6840DED92DDE2C12AC6 /* AFHTTPRequestOperation.m */; }; - EF0657162B6D12AB703D83918C3B36F9 /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 27E3589A502DA67E5F75BFDD5AB13E57 /* BFCancellationTokenSource.h */; }; - EFAE8EEDB4F6537B805A0D3FC7F794E5 /* PFRelationState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EF64AAF633AE4BDB30247D6A4090B89C /* PFRelationState_Private.h */; }; - EFCAC58E3F3A4442F400FFC8626AD9B9 /* PFSessionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B493332AF25497985B3420336C8E310 /* PFSessionController.h */; }; - F072D26ABA5162A0D5B098FC2773092E /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AE87F34D52CD28E7113F03F7CEA01F06 /* Security.framework */; }; - F085F0D853691CCA544D3D2152B34018 /* PFFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = FF3530F7B69DD859647B6416F1A85C73 /* PFFileState.h */; }; - F0B1181F18792D478147E3051A915EB6 /* PFAsyncTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 663C1A74DA7B1A684C31157464DF2CC6 /* PFAsyncTaskQueue.m */; }; - F120A50FD7FCA9658BBBDBA65EA9B1E2 /* PFUserFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = A2BD31107881F3881ADCD378256D4B02 /* PFUserFileCodingLogic.h */; }; + EDB338AC8EB3F78108F7D5E695AB70CB /* PFDateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = AB4619A4572B3C9040CFF51B704351E5 /* PFDateFormatter.m */; }; + EDB9D6D01DE172DB8ED0FC38F94FD498 /* PFFileStagingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F52D2D0D367EABC467BBF231B745F2D /* PFFileStagingController.m */; }; + EE1AF84FA5D7681CE43EB645A8198A93 /* PFSQLiteDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1918D47CAAE720F6F490932CADDC693C /* PFSQLiteDatabase_Private.h */; }; + EE947D38876C03BE7593C63DEC4E9E38 /* PFHTTPURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = DD434440BCFF8363B180A308A01134D1 /* PFHTTPURLRequestConstructor.h */; }; + EF5F09BAC78E09B518F7B457FE84E8E5 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EEBDD515AD0E2563F96DA9C03BF533EC /* Security.framework */; }; + F0135EF2ED53593734E149159B329C5F /* PFCommandRunning.h in Headers */ = {isa = PBXBuildFile; fileRef = F093D017EB5E2628C1BB5303359E94D4 /* PFCommandRunning.h */; }; + F05F2CE1FBC7D1473BA31AB448ADE50D /* PFURLSessionJSONDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CF8D1706E6BD228B2880BF74EA66654 /* PFURLSessionJSONDataTaskDelegate.h */; }; + F09BA7B4050C6875434D6236C99372BE /* PFPushChannelsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 32702F79E6E7FEE1E164D5A0029949B6 /* PFPushChannelsController.h */; }; + F0D96EAAA93A0079475AAD4E960D8F3B /* PFRESTObjectCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 756D73510B093B9B8FDF1F38117139CD /* PFRESTObjectCommand.m */; }; F1869B0A07F843009A3268A12F2F96CF /* POPBasicAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F59C51782AE555897A5B92D6B3CECD1 /* POPBasicAnimationInternal.h */; }; - F2CCD104B91461CC1548C32C003353FD /* PFObjectFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 71E77E05CC2CDD5B79D7552C17004EFB /* PFObjectFileCodingLogic.m */; }; - F2D9EF32073176AC4B9F935577A44456 /* PFPaymentTransactionObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 76B1F1A7DACF8124FD67EEFFB88526F1 /* PFPaymentTransactionObserver.m */; }; + F26FE961CCFAF46C92AA68661CB13B7B /* PFThreadsafety.h in Headers */ = {isa = PBXBuildFile; fileRef = 90383A205442FD08C8901103539A77AC /* PFThreadsafety.h */; }; + F2C2B60CE982DB296961EAF3689DEFFF /* PFSignUpView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BB60B0E616655E619A22D34CEB64076 /* PFSignUpView.m */; }; + F2F88046052A13EED40281048B936022 /* PFInstallationIdentifierStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 36E96F698A999832ADF3D7F5392E1641 /* PFInstallationIdentifierStore.m */; }; F353B70A061E08623279B54744E15DA7 /* POPAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = ED596D85957A49EC6092EC8EC38FCE49 /* POPAnimationInternal.h */; }; F388B7C3B4B0325048D4B5E4C1BAF904 /* POPAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 14938EB08280063D294781C3164C8332 /* POPAnimation.h */; }; - F39244CD95764B7D0C035FE193512606 /* PFFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 59143BC1CCA767489CC63EC79299C132 /* PFFile.m */; }; - F394B0E3DFFC7734AB5051D1A5F4D68F /* PFUserAuthenticationController.h in Headers */ = {isa = PBXBuildFile; fileRef = BB019CE2BDFE6EC36FCD9993DB744EFA /* PFUserAuthenticationController.h */; }; F3A5D609595883FAB0550B75A0237C58 /* POPMath.mm in Sources */ = {isa = PBXBuildFile; fileRef = A19FD133843D5FCF16B8AF3B4E165515 /* POPMath.mm */; }; - F3C1136C8D88E18B962C1C4AF612B3B3 /* PFRESTConfigCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F519C682C4E52952D376F5423040E5B /* PFRESTConfigCommand.m */; }; - F3DDD9A3039C1313F12C2A248576DD56 /* Parse.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A880B37F4F90E6B3CCA1B3FAD582B81 /* Parse.m */; }; - F412A6DC753D4FF45CA2663718823E3C /* AFURLConnectionOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A9EB6D7E4926B7E034816F709F1F518 /* AFURLConnectionOperation.h */; }; + F3EBD0819CE9E67DD61F06A6C6879435 /* PFRESTCloudCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = CD55CFADE2EA8A5AAEBD75427C3D61E6 /* PFRESTCloudCommand.m */; }; + F44272477D3F7D1C424C5E530A526F49 /* PFAnalyticsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 19D465A0F46E0A149BB3F56DFEAE8D3E /* PFAnalyticsController.m */; }; + F4DED7CC9036AB6E4F7815CFFC35F3C1 /* PFEventuallyQueue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 19950D124DD375E02FC7D56C3DDF1283 /* PFEventuallyQueue_Private.h */; }; F50CFC840B1B486D290EF5656C3AB5A4 /* TransformationMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 35574BADA6CDEA944F089CBC021F01AA /* TransformationMatrix.cpp */; }; - F5189CA8C80BB857AE36C733A89A5DC8 /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 860D58AD9C905EA188BEF7C2C8B3B2E4 /* PFQueryController.h */; }; - F5A533001D5694222A42A7E5733F70D7 /* PFRESTSessionCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = C5FE3CDD5FB245BC2913E868E9DE3995 /* PFRESTSessionCommand.h */; }; - F5D54F9BEFE298257F9134EA893B5C8D /* PFFieldOperationDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = D93333F49B10A154028722630A69414C /* PFFieldOperationDecoder.h */; }; - F6C4B0AB4C5CC75A89E9E082659B1181 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A2C302E4C6109CA0666CE25D782C9766 /* AFNetworkReachabilityManager.m */; }; - F8A080400150D1AC42F6C531CAB577D2 /* PFCurrentInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = E2F89C1AC67968BA35BD1123BE34D894 /* PFCurrentInstallationController.m */; }; - F947354D06D4DB18853AD81F00869ED3 /* PFLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = C124801645AB37C7712D483A5C87D83D /* PFLogger.m */; }; + F567393BEA32A4F7B95F931E8F460C20 /* PFMutableQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CF0DBA9D475D9DB9CD91FE782EDDF62 /* PFMutableQueryState.h */; }; + F5AF634EB66294F3ED139B82748BB907 /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 80A12591CE5C8F207400FC6781F1683E /* BFTask.h */; }; + F5BC81E3C264FFFE3C795AC06C5FC9F9 /* PFSubclassing.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BF885EC67F1AB3F06CAD0B479109ECE /* PFSubclassing.h */; }; + F622F21DF7350A5994CA9C501EDCF69C /* PFRESTCommand_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F5CC0F9C4567ABE6127227B5B27A8B8 /* PFRESTCommand_Private.h */; }; + F6F92BBA0307541F2BFFD08EA6EBA3EE /* PFImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = ED0D5194B5F3554C0BC8F95F23872AF5 /* PFImageCache.m */; }; + F746DD1FA02FFC12E938F04777C9529A /* PFSQLiteStatement.m in Sources */ = {isa = PBXBuildFile; fileRef = 217C03ECCDE9198144EAF9D0B2F8200D /* PFSQLiteStatement.m */; }; + F774C478E3A7F0F80415B7BC82C804EB /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = C3CC50926D384450223E1B6B979F37A2 /* BFExecutor.h */; }; + F77AAC38F065B6E370AAAC1C59906F73 /* PFTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 04C8BAE65AA02555DD915F8E8A7D09A2 /* PFTaskQueue.m */; }; + F7D3235095B167BCB2E2710768CFFDB5 /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F2BD4643944F164D81A1D842EF1D5D6D /* AFNetworkActivityIndicatorManager.h */; }; + F7E1547B925A529368F48054B83FB2BB /* PFAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F31BE5673D8EF4B5184B98AF62C2189 /* PFAlertView.m */; }; + F8B5F7BEA7C83DC314107B06E4DFF660 /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = E7CCE0D3CB7C0207B26A209D5ED7DABD /* PFMultiProcessFileLockController.m */; }; + F8FD839A0144D93C08E53765908D2E1B /* PFPinningEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AF8F3033077AAE4F66595F9CF150E5D /* PFPinningEventuallyQueue.h */; }; F9627C89FA11AC0378E77DF8EF1535FF /* POPAnimationTracer.mm in Sources */ = {isa = PBXBuildFile; fileRef = C1E27C3CBB149C1873F6CDC55D998CE2 /* POPAnimationTracer.mm */; }; - F965B0BA7C7E070E515C1ED0343E68A3 /* PFMultiProcessFileLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 7388AF1F66A03C223B0DA9338F552A19 /* PFMultiProcessFileLock.m */; }; - FA534A151F3B55AB2E7EA80B4C522BB0 /* PFProductsRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 529C0DC5511102F293AAA76310789551 /* PFProductsRequestHandler.h */; }; - FA8549933F4A9D5FC6E695B2C00C484E /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E6F16A936B103DF9237ED50EBF4D8631 /* AFURLConnectionOperation.m */; }; - FB0A5366764317E476526B1CCA42EB4C /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FE2EB61A95016598E72642BFBCBADBE /* AFNetworking.h */; }; - FB2E5E78E63B5474E21182AC6AB7AE38 /* PFSQLiteDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EAF2A823E92A730EC588801D943C514 /* PFSQLiteDatabase.m */; }; - FB4C49FBC327F28CB47026B0E290BE1A /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 450938391ACE611C45583A2F6117FD6D /* PFURLSession_Private.h */; }; - FBB9982DF9350395B60873C7EBC35687 /* PFKeyValueCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 245FF007BEF549EF81D7E0222214C303 /* PFKeyValueCache.h */; }; - FBE5198936C677351A1994966CFB0E0E /* PFRESTUserCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 60F954C2BD5989BD4626F5C1F5BCC48A /* PFRESTUserCommand.h */; }; - FC1C0CA9220FCDE5447A43920AB3960F /* BFDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 73E9B12D704E302D9DAC9FDE4C8D60AC /* BFDefines.h */; }; - FC49E18E4DE9E4CEA0E8144D55F407A7 /* PFHTTPURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 62078C4D93D4BF5CF7430EF680857264 /* PFHTTPURLRequestConstructor.m */; }; - FDE3635ACA000137F91099FB8A77B904 /* PFSessionUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 15DCE6DD786D364DDA4BCAD1F24895FD /* PFSessionUtilities.h */; }; - FF06683CECBB72CC198613D50C833E94 /* BFTask+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B26ED3E1774D8AF7C7968032E48D8AD /* BFTask+Private.h */; }; - FFDEE01AE0207886F8D70AA02F184FB3 /* PFRESTPushCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = A89E8441EF384E751C66846D8C7DA140 /* PFRESTPushCommand.m */; }; + FA0D00AAA9F78D68C20BBE42BE3E03B4 /* PFAnonymousUtils_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B663A2148474E7A773E5ED841039376B /* PFAnonymousUtils_Private.h */; }; + FA51E4A2D88C2F49851379F4944D3C0E /* PFAnalyticsUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F15A0C78AB604E937ECE01D61C14392 /* PFAnalyticsUtilities.m */; }; + FAF590CC3EFA1984D9572722478E40F8 /* ParseUI-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4979C3B55E2B17D537C9E478C5549DC0 /* ParseUI-dummy.m */; }; + FB78D672E994A15E6DFCA3C4D85ED228 /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 87BF1A2C6A35E36B2F3EC9220F3410B1 /* PFDecoder.m */; }; + FCFE88B120605ADD81D83D8709691A7B /* PFQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 56436A2903AD7B65AA25DC0213B0BB83 /* PFQuery.m */; }; + FD90BA8766D471D15019E68E4AB15252 /* PFPropertyInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E4940DAD7C43C250A06B228B6788D7A /* PFPropertyInfo.h */; }; + FEEEDF26AEE52A1598A0C1EF813D559A /* PFObject+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = 7633F658075479E6F351B199EB7126A3 /* PFObject+Subclass.h */; }; + FF5AC9C40CAF5C1CB093299D9645067B /* PFSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3529D435B4028C7C7FEDFB26F8FA4327 /* PFSession_Private.h */; }; + FF5CDF2194CB64CB138D22962F1BD236 /* UIView+YALConstraints.m in Sources */ = {isa = PBXBuildFile; fileRef = 99608B2EC51573A5DC72B1C1509BF733 /* UIView+YALConstraints.m */; }; + FF60ACF78377BE7F10CEF63BE3A7A019 /* PFActionButton.h in Headers */ = {isa = PBXBuildFile; fileRef = BA63322C80B2C171D02D6229D1144BCD /* PFActionButton.h */; }; + FFA71AAE66EB2710EFDCF8BCFF293BF6 /* PFHash.h in Headers */ = {isa = PBXBuildFile; fileRef = C143EA6A9A0468B76361AA3F15901DE7 /* PFHash.h */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 103117E18087B3EEC84D8F67EA532CD6 /* PBXContainerItemProxy */ = { + 04D0E410F8E96A5053B7A1F4ACD44739 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 37F6420F8EF0C3E689A20C749DE084A5; + remoteInfo = Parse; + }; + 19A35FDBB9C4F8BCD7206FDC9B4DD657 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = E525AC57810AC5DC4DD2F97ABD9EC4EE; + remoteInfo = AFNetworking; + }; + 2CAA5A07ADAA327622EDE24FE7AE8E09 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 63424AA4CF7BFFFC31A230BC68DB1283; + remoteInfo = Bolts; + }; + 3A56FD063F449BFD74325BC98E1D5C6F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; remoteGlobalIDString = 47C800E42623009B7192B025B3DD25A1; remoteInfo = pop; }; - 11F61E646F82C7A3027EAFA6F2C283CA /* PBXContainerItemProxy */ = { + 5400FD316CAF139612E0F98B1723D40D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 7D5B41A236FF14B6B02D4BAF6C4A690A; + remoteGlobalIDString = A457234CA8AE922542FEBB7E984D9B13; remoteInfo = ContextMenu.iOS; }; - 58FD68CA85B5E72697502824B988F051 /* PBXContainerItemProxy */ = { + 92283A8782B47574C074DE2A04824E63 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = F7D0346E5B3C07CA2678B48D1D1BD750; - remoteInfo = Parse; + remoteGlobalIDString = 63424AA4CF7BFFFC31A230BC68DB1283; + remoteInfo = Bolts; }; - 5990CF4195D3965C7E2B2A3208652783 /* PBXContainerItemProxy */ = { + 9DCA40E162180CBDE80220C90E4FEEC2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 39991CD032545E130997094168EF96E2; - remoteInfo = AFNetworking; + remoteGlobalIDString = 37F6420F8EF0C3E689A20C749DE084A5; + remoteInfo = Parse; }; - 898759E58BADE0E9FBFA1E66E38F8039 /* PBXContainerItemProxy */ = { + B757AECC09A246C51A0E03D6693EAEAD /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 9D8311DD3E0DA85313EF9710C8614AD8; - remoteInfo = Bolts; + remoteGlobalIDString = 9A7DAE4E6908C5BFF25ECBAA445E8A2F; + remoteInfo = ParseUI; }; - A350E8606E02ACFA8AA6C838EE4FDE3D /* PBXContainerItemProxy */ = { + B91E15B00D3A74876D9CA29693929CAA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 9D8311DD3E0DA85313EF9710C8614AD8; + remoteGlobalIDString = 63424AA4CF7BFFFC31A230BC68DB1283; remoteInfo = Bolts; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 007D017430CAD14C507E4E16894E1ED8 /* PFSQLiteStatement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteStatement.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h; sourceTree = ""; }; - 009D766A60F44D81650E505380CF6EE5 /* PFCurrentInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentInstallationController.h; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h; sourceTree = ""; }; - 016F2569F5E0DA62E089B095D3A04E84 /* PFMulticastDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMulticastDelegate.h; path = Parse/Internal/PFMulticastDelegate.h; sourceTree = ""; }; - 01D2ED1DF56FF3AE05B1515043302F71 /* YALContextMenuCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YALContextMenuCell.h; path = YALContextMenu/YALContextMenuCell.h; sourceTree = ""; }; - 022CFAB7CC0CBD47E0AC47A4EC57B983 /* PFHTTPURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPURLRequestConstructor.h; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h; sourceTree = ""; }; - 033DE2F20554C4483F70BB66112A660D /* PFCoreManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCoreManager.m; path = Parse/Internal/PFCoreManager.m; sourceTree = ""; }; - 036A8C9E0C46D47ECECB6E33E53B2BEF /* Bolts.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.xcconfig; sourceTree = ""; }; + 0000CB1FCEE55041E8F58F0856C79A8A /* ParseInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseInternal.h; path = Parse/Internal/ParseInternal.h; sourceTree = ""; }; + 001AD9B5406D718F93878E7802295E4E /* PFInstallationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationPrivate.h; path = Parse/Internal/Installation/PFInstallationPrivate.h; sourceTree = ""; }; + 0085A955107B8FFE1924A08C14BC6FF8 /* PFLocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLocationManager.m; path = Parse/Internal/PFLocationManager.m; sourceTree = ""; }; + 014AF5DB4D6A8BF17F7BE152F8CE4838 /* PFSessionUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionUtilities.h; path = Parse/Internal/Session/Utilities/PFSessionUtilities.h; sourceTree = ""; }; + 01C2FE9EEB63EB166CEF1AF8D6A7F5D4 /* PFKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeychainStore.h; path = Parse/Internal/PFKeychainStore.h; sourceTree = ""; }; + 01FE7E553947BB6A0FFAE1B9E6F894FE /* PFCurrentInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentInstallationController.h; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h; sourceTree = ""; }; + 024EFAECC7B95C1D6C429D5023A046ED /* PFMutableQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableQueryState.m; path = Parse/Internal/Query/State/PFMutableQueryState.m; sourceTree = ""; }; + 031595D3DC7EF8A1E64E65CF08D1E9CB /* PFFileState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState_Private.h; path = Parse/Internal/File/State/PFFileState_Private.h; sourceTree = ""; }; + 03175A1837930350DA8D3A3A6948BD08 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; + 035B567BBDDB9DF3B6541DFC52B519A0 /* Bolts-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Bolts-Private.xcconfig"; sourceTree = ""; }; + 035FAB552BE267FDD1892F43E6315CF3 /* PFCurrentConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentConfigController.h; path = Parse/Internal/Config/Controller/PFCurrentConfigController.h; sourceTree = ""; }; + 03A28063A2DF1FF0468E7E6363FE87F6 /* PFURLSessionCommandRunner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h; sourceTree = ""; }; + 03BF6230EA6748C577C8C5637D9242B3 /* PFRESTCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCommand.m; path = Parse/Internal/Commands/PFRESTCommand.m; sourceTree = ""; }; 0476012CEBFEB22B5F0926994E6AEEE3 /* POPAnimatorPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimatorPrivate.h; path = pop/POPAnimatorPrivate.h; sourceTree = ""; }; - 06588E20E049A2E98B815265D06086EE /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; - 06BDEA785CD1CCF3EC5F7D97641DB94B /* PFACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACLState.m; path = Parse/Internal/ACL/State/PFACLState.m; sourceTree = ""; }; - 075D17B28FD88D19723BDD0F7C7ACF85 /* PFURLSessionCommandRunner.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionCommandRunner.m; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m; sourceTree = ""; }; - 07A16D1432732F853E3D7B39B1DB383E /* PFRESTConfigCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTConfigCommand.h; path = Parse/Internal/Commands/PFRESTConfigCommand.h; sourceTree = ""; }; - 0823AECF540B112CC0DD23CA1EB33F1E /* PFDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDevice.m; path = Parse/Internal/PFDevice.m; sourceTree = ""; }; - 0854CFF4AC229E21A7EC471BB9EAC43F /* PFFile_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile_Private.h; path = Parse/Internal/File/PFFile_Private.h; sourceTree = ""; }; - 0862542F3708CEA8901318AE4F5FE02B /* PFOfflineQueryLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryLogic.m; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m; sourceTree = ""; }; - 08DB18CB20934926437D11F21D1D9B8E /* PFUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserController.h; path = Parse/Internal/User/Controller/PFUserController.h; sourceTree = ""; }; - 0931322359A8E70F6F16FED5F97879E5 /* PFLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogging.h; path = Parse/Internal/PFLogging.h; sourceTree = ""; }; + 04C8BAE65AA02555DD915F8E8A7D09A2 /* PFTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTaskQueue.m; path = Parse/Internal/PFTaskQueue.m; sourceTree = ""; }; + 05C4B6DD741681BE627832D2F02A6A9B /* PFMutableFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableFileState.h; path = Parse/Internal/File/State/PFMutableFileState.h; sourceTree = ""; }; + 06BA61065D8E2B152E9171EE2F44AC4B /* PFUserConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserConstants.h; path = Parse/Internal/User/Constants/PFUserConstants.h; sourceTree = ""; }; + 0769DF4654091947ABDD725BB8D5A8EB /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; + 07DD486CA0D467F3E4B0FA3AFB78B671 /* ContextMenu.iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ContextMenu.iOS.xcconfig; sourceTree = ""; }; + 08778622B2D01D7E6D35F59E3A8D7504 /* PFUserAuthenticationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserAuthenticationController.m; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m; sourceTree = ""; }; + 091BEB546F9E83DDA5A3AA12B9DEE1B4 /* AFNetworking-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AFNetworking-Private.xcconfig"; sourceTree = ""; }; 0A9ED47A0EA56543BEB2F83DFD6122C8 /* POPCGUtils.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPCGUtils.mm; path = pop/POPCGUtils.mm; sourceTree = ""; }; - 0B072562DD642F896CD3C3B7CEF2911B /* PFCommandRunning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunning.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.m; sourceTree = ""; }; - 0B19A6DDEB20A310104A97E0953192B8 /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; - 0BC40E8FF522D488100477128A373255 /* PFPinningEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningEventuallyQueue.m; path = Parse/Internal/PFPinningEventuallyQueue.m; sourceTree = ""; }; - 0D2C0E09440F10C2834146B969AD0950 /* PFCurrentUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentUserController.h; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.h; sourceTree = ""; }; - 0D7ADA7673FDA922B924DB960BC45FEE /* PFQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQuery.h; path = Parse/PFQuery.h; sourceTree = ""; }; - 0D7C31A8D9DC68245949CD79BD5AD586 /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; - 0DBB0CAB75C437C618EEBFAF8F62A947 /* PFMutablePushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutablePushState.m; path = Parse/Internal/Push/State/PFMutablePushState.m; sourceTree = ""; }; - 0E1148A11007AFF78ABDECD376185D39 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; }; - 0E374390CBBC0449CF5CC0A1C32EE8C5 /* PFTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTaskQueue.m; path = Parse/Internal/PFTaskQueue.m; sourceTree = ""; }; - 0E8BFD8BC695971FCCBA291EDD68F350 /* PFUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUser.h; path = Parse/PFUser.h; sourceTree = ""; }; - 0EDD645EA043AC01BD2D294C8E25D7C9 /* PFCommandRunningConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunningConstants.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h; sourceTree = ""; }; - 0F1D200E550A12E3F43CD3F31E131DBE /* PFCommandRunning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunning.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.h; sourceTree = ""; }; - 0F53F9E343FFBC0260E05A6277C25495 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; - 0F7453E990BF208758602D5B39CB7388 /* PFPushController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushController.h; path = Parse/Internal/Push/Controller/PFPushController.h; sourceTree = ""; }; - 0FE1708AB969B7C864FA6A717B2332A5 /* PFCoreManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreManager.h; path = Parse/Internal/PFCoreManager.h; sourceTree = ""; }; - 105DFF60164FDC71E3359B156DAE0937 /* PFRESTCloudCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCloudCommand.m; path = Parse/Internal/Commands/PFRESTCloudCommand.m; sourceTree = ""; }; - 10C1CF41ACFAC3F0E71569AE1A84C121 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = Parse/Resources/en.lproj; sourceTree = ""; }; - 12BB94C26636A7E690216E2AEEFAF264 /* Parse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse.h; path = Parse/Parse.h; sourceTree = ""; }; + 0AB19709851545DCCBA4D0FF7CC4DC37 /* PFPrimaryButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPrimaryButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h; sourceTree = ""; }; + 0BF885EC67F1AB3F06CAD0B479109ECE /* PFSubclassing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSubclassing.h; path = Parse/PFSubclassing.h; sourceTree = ""; }; + 0C97E4E064AFD1F93914BCB16FE59C63 /* PFSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession.h; path = Parse/PFSession.h; sourceTree = ""; }; + 0CAEB2B1FF16CDE2D193E1AC45AA6B22 /* PFMulticastDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMulticastDelegate.h; path = Parse/Internal/PFMulticastDelegate.h; sourceTree = ""; }; + 0CC595FC678893325F98C5378B186753 /* PFMutableRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableRelationState.m; path = Parse/Internal/Relation/State/PFMutableRelationState.m; sourceTree = ""; }; + 0D55D963B6D76107B2F021969BDEE76B /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 0EBC0CC820CC94B4DBB58FE3139C2EA8 /* PFPushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushState.m; path = Parse/Internal/Push/State/PFPushState.m; sourceTree = ""; }; + 0F1830FB371D282612719A83DBF606E2 /* PFAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalytics.m; path = Parse/PFAnalytics.m; sourceTree = ""; }; + 0F2B467FE4C5B79A587871D62821CD26 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; + 0F405E5BADB8279B5FFECE2906428FDB /* PFTextButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTextButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFTextButton.m; sourceTree = ""; }; + 0FA6E6CE69ACD000C52CEF0A45171FEA /* PFOfflineObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineObjectController.m; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m; sourceTree = ""; }; + 10254E67C606DCA88382570E2B8B358A /* PFUserFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserFileCodingLogic.m; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m; sourceTree = ""; }; + 10723C36012E47BED44DC7D4B878791C /* PFThreadsafety.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFThreadsafety.m; path = Parse/Internal/ThreadSafety/PFThreadsafety.m; sourceTree = ""; }; + 10BC706826E8658ED21767087CA7E11B /* PFAnonymousUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousUtils.m; path = Parse/PFAnonymousUtils.m; sourceTree = ""; }; + 1192323044F90ADFAE943B828EF33A2F /* PFObjectFileCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCoder.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.m; sourceTree = ""; }; + 11D03F3B0D034E50C77B83ECA26BA202 /* PFObjectBatchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectBatchController.h; path = Parse/Internal/Object/BatchController/PFObjectBatchController.h; sourceTree = ""; }; + 127A5C472A10A9E794C1EC858B8A4202 /* PFURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSession.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m; sourceTree = ""; }; + 12B522608FEB7B9689C2FABF1CC3D755 /* PFQueryTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryTableViewController.m; path = ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m; sourceTree = ""; }; + 12FE2FAAD83211D8CB07A040AD0CBA23 /* PFResources.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFResources.m; path = ParseUI/Generated/PFResources.m; sourceTree = ""; }; 134BDC30251FB7A5465C17F603FCAC5F /* POPPropertyAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPPropertyAnimationInternal.h; path = pop/POPPropertyAnimationInternal.h; sourceTree = ""; }; - 13D7A1D1A9F6D9020B6E721D5D4D5730 /* PFSQLiteDatabaseResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseResult.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m; sourceTree = ""; }; + 13FE506E3AD60D630A89BA5D57E1FB81 /* PFRelation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelation.m; path = Parse/PFRelation.m; sourceTree = ""; }; + 1421939F359176F8B823F5EB7FD8294B /* PFActionButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActionButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m; sourceTree = ""; }; 14938EB08280063D294781C3164C8332 /* POPAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimation.h; path = pop/POPAnimation.h; sourceTree = ""; }; - 14BFF77A40EB6D31D0D53D242A01BED0 /* PFDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDevice.h; path = Parse/Internal/PFDevice.h; sourceTree = ""; }; + 149F81D2C02EC8ADD0B70583B731419F /* PFSQLiteDatabaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseController.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m; sourceTree = ""; }; + 14A057986B01966A11C6CB28EB5A4A94 /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; 15A529C27057E4A57D259CBC6E6CE49C /* Pods-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-acknowledgements.markdown"; sourceTree = ""; }; - 15DCE6DD786D364DDA4BCAD1F24895FD /* PFSessionUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionUtilities.h; path = Parse/Internal/Session/Utilities/PFSessionUtilities.h; sourceTree = ""; }; - 1896BB3AD97D1E8CB9D17C6A982672DB /* PFDefaultACLController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDefaultACLController.m; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m; sourceTree = ""; }; - 189B90A77BD5596205FB77D8F7DBBC66 /* PFPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPin.h; path = Parse/Internal/LocalDataStore/Pin/PFPin.h; sourceTree = ""; }; - 18D7C9B8DD8A89571437499374A39984 /* PFConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig_Private.h; path = Parse/Internal/Config/PFConfig_Private.h; sourceTree = ""; }; - 196698284757A108BD18D4EFC0D470B2 /* PFObjectFileCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCoder.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.m; sourceTree = ""; }; + 15CAEE54F40D12424118C16A4A6A66E4 /* PFPurchaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseController.h; path = Parse/Internal/Purchase/Controller/PFPurchaseController.h; sourceTree = ""; }; + 15D4EE1E4E8D6F31A989B917DB27C9BD /* PFEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue.h; path = Parse/Internal/PFEventuallyQueue.h; sourceTree = ""; }; + 166CF998A95C71469855822102D41793 /* PFQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQuery.h; path = Parse/PFQuery.h; sourceTree = ""; }; + 1751A18AF08E87C661781BCDD6A61049 /* PFConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfigController.h; path = Parse/Internal/Config/Controller/PFConfigController.h; sourceTree = ""; }; + 1824F1E39E61183B0EC8B1EF5B485157 /* PFURLSessionDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m; sourceTree = ""; }; + 18827249CABAEC4B332D8914DAD7D2E2 /* PFUserAuthenticationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationController.h; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h; sourceTree = ""; }; + 18E77AA1F74F26E7C7E5B4FFB440DB72 /* PFCommandCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache.h; path = Parse/Internal/PFCommandCache.h; sourceTree = ""; }; + 1912D51690BFB2430D2FC6F89935CD27 /* Parse-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-prefix.pch"; sourceTree = ""; }; + 1918D47CAAE720F6F490932CADDC693C /* PFSQLiteDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase_Private.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h; sourceTree = ""; }; 197635F0BFB93E63E82503F09B7AABBF /* POPLayerExtras.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPLayerExtras.mm; path = pop/POPLayerExtras.mm; sourceTree = ""; }; - 1A207317F4EF6A614BE7034DE5F3A9E9 /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; - 1A28796B1724F0F5B766249296CA182A /* PFMutableUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableUserState.h; path = Parse/Internal/User/State/PFMutableUserState.h; sourceTree = ""; }; - 1A5BCF29FD1B3CBCBD8B387388746B55 /* PFAnonymousAuthenticationProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousAuthenticationProvider.m; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m; sourceTree = ""; }; - 1B2FDDD8F730AFFD1DFF805E250C3654 /* PFPushChannelsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushChannelsController.h; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.h; sourceTree = ""; }; - 1C0E7BEE92130638A860786486BF4398 /* PFEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyQueue.m; path = Parse/Internal/PFEventuallyQueue.m; sourceTree = ""; }; - 1C4613FF21CF534DDDB393C04D6279F3 /* Bolts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-prefix.pch"; sourceTree = ""; }; - 1DB83418592CB04C28FA16D53A2F50BB /* ParseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseManager.m; path = Parse/Internal/ParseManager.m; sourceTree = ""; }; - 1DD825DA40E92E93FAC2EA00807BF7D1 /* PFPropertyInfo_Runtime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Runtime.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h; sourceTree = ""; }; - 1E08E20DF9125F146349FA765648DCA3 /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+AFNetworking.h"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.h"; sourceTree = ""; }; - 1E4D88B0EC5CA12C799F9F3C05C0B31E /* UIView+YALConstraints.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+YALConstraints.h"; path = "YALContextMenu/UIView+YALConstraints.h"; sourceTree = ""; }; - 1EBBF4F6FA934C6BCACE0C5744A3BF58 /* PFReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFReachability.h; path = Parse/Internal/PFReachability.h; sourceTree = ""; }; - 1FCA6291D3A1D8E40FC410D0747380DC /* PFRelation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelation.m; path = Parse/PFRelation.m; sourceTree = ""; }; - 1FE2EB61A95016598E72642BFBCBADBE /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; - 202A2922E63631CD23C09430889F7248 /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperationManager.h; path = AFNetworking/AFHTTPRequestOperationManager.h; sourceTree = ""; }; - 206BAB6E51C3AC0ACA2E1320A911DA36 /* PFFileDataStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileDataStream.m; path = Parse/Internal/File/FileDataStream/PFFileDataStream.m; sourceTree = ""; }; + 19950D124DD375E02FC7D56C3DDF1283 /* PFEventuallyQueue_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue_Private.h; path = Parse/Internal/PFEventuallyQueue_Private.h; sourceTree = ""; }; + 19D465A0F46E0A149BB3F56DFEAE8D3E /* PFAnalyticsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsController.m; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.m; sourceTree = ""; }; + 1A782DEC3085443686EE99BF46207C32 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 1AF8F3033077AAE4F66595F9CF150E5D /* PFPinningEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningEventuallyQueue.h; path = Parse/Internal/PFPinningEventuallyQueue.h; sourceTree = ""; }; + 1BA7AA53D3CB697F471E37400395783D /* PFOfflineQueryLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryLogic.m; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m; sourceTree = ""; }; + 1CA86409327B8CA5A123744B01FF0033 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; + 1D050AD2BA4F07A170535D2D81FE262D /* PFRESTFileCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTFileCommand.h; path = Parse/Internal/Commands/PFRESTFileCommand.h; sourceTree = ""; }; + 1D59E2F93C9A1BBC9FA927582057EC8A /* PFACL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACL.h; path = Parse/PFACL.h; sourceTree = ""; }; + 1D857686CEEFAE3F76B34023D8F49C09 /* PFACLPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLPrivate.h; path = Parse/Internal/ACL/PFACLPrivate.h; sourceTree = ""; }; + 1DBBE4DE5894FB4DC446A3E0D9F52244 /* PFAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAlertView.h; path = Parse/Internal/PFAlertView.h; sourceTree = ""; }; + 1F31BE5673D8EF4B5184B98AF62C2189 /* PFAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAlertView.m; path = Parse/Internal/PFAlertView.m; sourceTree = ""; }; + 2004B571F2910F12AB05F62B7FA36080 /* PFEventuallyPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyPin.m; path = Parse/Internal/PFEventuallyPin.m; sourceTree = ""; }; + 2063B9F38D8BF60908CCAA031D7CDEE1 /* PFCurrentObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentObjectControlling.h; path = Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h; sourceTree = ""; }; + 208E32CC6A5122BFD39121E55715F438 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; 212068113F29FA47D17730ED388F8706 /* POPBasicAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPBasicAnimation.h; path = pop/POPBasicAnimation.h; sourceTree = ""; }; + 212C53C992FAFCD6E80C8674CA34B074 /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; + 21565D1D07AD78BD3FD76735ADC39994 /* ContextMenu.iOS-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ContextMenu.iOS-Private.xcconfig"; sourceTree = ""; }; + 217C03ECCDE9198144EAF9D0B2F8200D /* PFSQLiteStatement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteStatement.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m; sourceTree = ""; }; + 21EB3DF5E0378397B89D368BBFD08CDE /* PFInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallation.h; path = Parse/PFInstallation.h; sourceTree = ""; }; + 2239BC817E28D29D4159D2A4291463CC /* PFDefaultACLController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDefaultACLController.h; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h; sourceTree = ""; }; + 2286ECFD3E4E57FAB21AD58AE7FA5DE6 /* PFRESTAnalyticsCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTAnalyticsCommand.h; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.h; sourceTree = ""; }; 22DC4C87D619EF0F28631B5560E82333 /* POPAnimationExtras.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationExtras.mm; path = pop/POPAnimationExtras.mm; sourceTree = ""; }; - 2348B7338D870B151D50A511AC6711D0 /* PFEventuallyPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyPin.h; path = Parse/Internal/PFEventuallyPin.h; sourceTree = ""; }; - 237D0CDD69C7B78A1BDB8DDF87F9EC2A /* PFObjectEstimatedData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectEstimatedData.h; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h; sourceTree = ""; }; - 245BC03B9F6AB7B69A163206AF3C2C32 /* PFBaseState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBaseState.m; path = Parse/Internal/PFBaseState.m; sourceTree = ""; }; - 245FF007BEF549EF81D7E0222214C303 /* PFKeyValueCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache.h; sourceTree = ""; }; - 24E60B787A9F785262AC44B47108D70D /* PFCommandCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandCache.m; path = Parse/Internal/PFCommandCache.m; sourceTree = ""; }; - 26DE5D007AAFB71206252AE40BAE833B /* PFFileDataStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileDataStream.h; path = Parse/Internal/File/FileDataStream/PFFileDataStream.h; sourceTree = ""; }; + 236FA8BD2AC4E953D395067FD0720495 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; + 23806737BB22CBDE6C5BFC062A416AF7 /* PFMutableACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableACLState.h; path = Parse/Internal/ACL/State/PFMutableACLState.h; sourceTree = ""; }; + 23B2648B19EFEB314EB1B67338FE4052 /* PFOfflineStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineStore.h; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h; sourceTree = ""; }; + 24C4B6C6CA8AB54346686D3EFFC5B320 /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; + 2505A4FCC1D644BE68CE42C4152E5834 /* PFActivityIndicatorTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActivityIndicatorTableViewCell.m; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.m; sourceTree = ""; }; + 2573EC8B9CE397FC9159DD313B946DDD /* PFUserFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserFileCodingLogic.h; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h; sourceTree = ""; }; + 258D3EC39C7F9B9695D37D77B93E6D25 /* PFPushState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState_Private.h; path = Parse/Internal/Push/State/PFPushState_Private.h; sourceTree = ""; }; 2726A20CBCFFB77F9972C445E8972099 /* POPPropertyAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPPropertyAnimation.mm; path = pop/POPPropertyAnimation.mm; sourceTree = ""; }; - 2792004D5441520275B8E22F94BD8E5C /* PFObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectControlling.h; path = Parse/Internal/Object/Controller/PFObjectControlling.h; sourceTree = ""; }; - 27E3589A502DA67E5F75BFDD5AB13E57 /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; - 283151768413CC359CA4D2B1E9BA275A /* PFFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileState.m; path = Parse/Internal/File/State/PFFileState.m; sourceTree = ""; }; - 285AE108BCA0C7BACB4D927E8D1F8665 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; - 28676FBC1D97921BD11D7A12C922CD0A /* PFObjectFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCodingLogic.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h; sourceTree = ""; }; - 291630B6FE4315F0B5B789D1ED22A66C /* PFQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQuery.m; path = Parse/PFQuery.m; sourceTree = ""; }; - 2966362D026D5B9C80E247EEDC0F4E9B /* PFCurrentConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentConfigController.m; path = Parse/Internal/Config/Controller/PFCurrentConfigController.m; sourceTree = ""; }; - 2B2B77FA62BB014F37CDD536B7F39AD5 /* PFApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFApplication.h; path = Parse/Internal/PFApplication.h; sourceTree = ""; }; - 2B493332AF25497985B3420336C8E310 /* PFSessionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionController.h; path = Parse/Internal/Session/Controller/PFSessionController.h; sourceTree = ""; }; - 2B6673C9F7E97CEA6C3B3B57C906C095 /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; - 2B7693C271516E5E5D162BA7DC113F4E /* PFBaseState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBaseState.h; path = Parse/Internal/PFBaseState.h; sourceTree = ""; }; - 2BD22E7A59F4BEFF52D4F43A0AA7EB30 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; - 2DA3428B35116EA19374F593BE42F3BD /* PFRole.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRole.m; path = Parse/PFRole.m; sourceTree = ""; }; - 2DC00CBF82C85912449AE191DBEC053D /* PFOfflineQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryController.m; path = Parse/Internal/Query/Controller/PFOfflineQueryController.m; sourceTree = ""; }; + 272CEEC74EFC7A7517B430014A16635C /* libBolts.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBolts.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 27CDD8FD19471CF12869E8B996CB614D /* PFFileManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileManager.m; path = Parse/Internal/PFFileManager.m; sourceTree = ""; }; + 28663AB25A1E167D689246B14934DE4E /* PFURLSessionUploadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionUploadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h; sourceTree = ""; }; + 2940BC6B2FD4089D74072136047C2FEE /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; + 295C81022EC4A4419AEE51593C991EA9 /* PFHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHash.m; path = Parse/Internal/PFHash.m; sourceTree = ""; }; + 296225BCAEC1922B0211398A744BC075 /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; + 29908DE2D1F086906ADDD8F12F3820F6 /* PFFile_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile_Private.h; path = Parse/Internal/File/PFFile_Private.h; sourceTree = ""; }; + 29B54E1236A7C8E0EC38F658B5BF0F4D /* PFPush.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPush.h; path = Parse/PFPush.h; sourceTree = ""; }; + 29F9DECE0CF6610E69C7A3675035677A /* ParseUI-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ParseUI-Private.xcconfig"; sourceTree = ""; }; + 2A235350977776A4ADAEAB1CAA67DF8F /* PFConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig_Private.h; path = Parse/Internal/Config/PFConfig_Private.h; sourceTree = ""; }; + 2A299EF96AF52EEF72B71FC41472E03C /* PFFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFile.m; path = Parse/PFFile.m; sourceTree = ""; }; + 2A5413A2F66872719851389ACDE4D879 /* PFLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogger.h; path = Parse/Internal/PFLogger.h; sourceTree = ""; }; + 2AFC505855C4C5871A01FEB4AD88CE78 /* PFRESTUserCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTUserCommand.m; path = Parse/Internal/Commands/PFRESTUserCommand.m; sourceTree = ""; }; + 2B0243E46B75FC63B525EFAFB733DB26 /* PFSignUpViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSignUpViewController.m; path = ParseUI/Classes/SignUpViewController/PFSignUpViewController.m; sourceTree = ""; }; + 2BA1448D29C364710AC0CCAC65063979 /* pop-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "pop-prefix.pch"; sourceTree = ""; }; + 2BE3F7B0445F96510397621689B94DD6 /* ParseModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseModule.m; path = Parse/Internal/ParseModule.m; sourceTree = ""; }; + 2C8738DC15AF37426077016E1A61F42B /* PFTextField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTextField.h; path = ParseUI/Classes/Views/PFTextField.h; sourceTree = ""; }; + 2D83E57423431A9A7980CB0394BFFF2D /* ParseModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseModule.h; path = Parse/Internal/ParseModule.h; sourceTree = ""; }; + 2DF1625F3E851C7EB8E2C8E0423F22E8 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; 2E056FF5C4EC38A55B45FB52F395D72E /* TransformationMatrix.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TransformationMatrix.h; path = pop/WebCore/TransformationMatrix.h; sourceTree = ""; }; + 2E4940DAD7C43C250A06B228B6788D7A /* PFPropertyInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo.h; sourceTree = ""; }; + 2E4EC0E5DE4BFEA3D3B7A89052CBB3ED /* PFCommandRunning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunning.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.m; sourceTree = ""; }; + 2E65C6B1C92B01C21154747ACFD56113 /* PFPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPin.m; path = Parse/Internal/LocalDataStore/Pin/PFPin.m; sourceTree = ""; }; 2E88590D291A3C131FC32F9BC9A80038 /* POPAnimationTracer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationTracer.h; path = pop/POPAnimationTracer.h; sourceTree = ""; }; - 3070F8AC10357FBF3BA3FE9A093D8A9B /* PFPropertyInfo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Private.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h; sourceTree = ""; }; + 303C7A0846CA6E57C5D163C23AE209AE /* PFUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUser.h; path = Parse/PFUser.h; sourceTree = ""; }; + 309FEECD7C015C28BA15623CCA7076B9 /* PFGeoPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFGeoPoint.m; path = Parse/PFGeoPoint.m; sourceTree = ""; }; + 30BB3F94FC46C796DC0449BBC52A4A1A /* PFFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState.h; path = Parse/Internal/File/State/PFFileState.h; sourceTree = ""; }; + 30E22AE37E29C96863456166E0E1D8A4 /* PFPushUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushUtilities.m; path = Parse/Internal/Push/Utilites/PFPushUtilities.m; sourceTree = ""; }; 313669CF0D1BF49C96C85FC593F4BC1D /* POPAnimatableProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimatableProperty.h; path = pop/POPAnimatableProperty.h; sourceTree = ""; }; 3155A15C877F794FB064A4A0CEEB2F13 /* POPGeometry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPGeometry.h; path = pop/POPGeometry.h; sourceTree = ""; }; - 315895D529B1136E61253E4EEE127FAC /* PFPinningObjectStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningObjectStore.m; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.m; sourceTree = ""; }; - 3161EE94B4EAC7208319195F1483596D /* libContextMenu.iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libContextMenu.iOS.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 32AEDEB7E9CE1E1D2795C43EFD540009 /* PFNullability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNullability.h; path = Parse/PFNullability.h; sourceTree = ""; }; - 32D54A528AA2134A544108B4E124A617 /* PFRESTObjectBatchCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectBatchCommand.m; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.m; sourceTree = ""; }; - 33CAFF9933F161C320331CCA71D23A5F /* PFRole.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRole.h; path = Parse/PFRole.h; sourceTree = ""; }; - 345A7737A02453DD9D85EE95F928690B /* PFMutableQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableQueryState.h; path = Parse/Internal/Query/State/PFMutableQueryState.h; sourceTree = ""; }; - 347D5D631A6A12B0298E13B5415AEAAF /* PFURLSessionUploadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionUploadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h; sourceTree = ""; }; - 3501C65AE5330DD19D3236E70095C9D8 /* PFConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfigController.m; path = Parse/Internal/Config/Controller/PFConfigController.m; sourceTree = ""; }; - 35568ABE019B8ED099EFF07CE242DD67 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; + 31CE9392410262C7EFA3F2FF2CB7498F /* PFKeyValueCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeyValueCache.m; path = Parse/Internal/KeyValueCache/PFKeyValueCache.m; sourceTree = ""; }; + 31E038C9749B665615F4B5FFA9469D6D /* PFConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfigController.m; path = Parse/Internal/Config/Controller/PFConfigController.m; sourceTree = ""; }; + 31F93A9FA8BA9A2E0A7B707CCB9668F4 /* libAFNetworking.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAFNetworking.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 32702F79E6E7FEE1E164D5A0029949B6 /* PFPushChannelsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushChannelsController.h; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.h; sourceTree = ""; }; + 32A9AA3F96EDB1D74DF05E160873CFB1 /* libContextMenu.iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libContextMenu.iOS.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 33748C4CAD0A1EE35189C936C5F58CB1 /* PFCollectionViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCollectionViewCell.m; path = ParseUI/Classes/Cells/PFCollectionViewCell.m; sourceTree = ""; }; + 33770436E2F99A5D4929AB57FDC21D97 /* PFFieldOperationDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperationDecoder.h; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.h; sourceTree = ""; }; + 33A90143BAE0EA5E9192335705F6E326 /* PFRESTPushCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTPushCommand.m; path = Parse/Internal/Commands/PFRESTPushCommand.m; sourceTree = ""; }; + 34157638C4F04431240CDE5218BF7BD2 /* PFImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImage.m; path = ParseUI/Classes/Internal/Extensions/PFImage.m; sourceTree = ""; }; + 3463D5F370E5607282D729CC1466A4EA /* PFLoadingView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLoadingView.h; path = ParseUI/Classes/Internal/Views/PFLoadingView.h; sourceTree = ""; }; + 351FD95748A1E93F1C6AF4531E3F4E36 /* PFDateFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDateFormatter.h; path = Parse/Internal/PFDateFormatter.h; sourceTree = ""; }; + 3529D435B4028C7C7FEDFB26F8FA4327 /* PFSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession_Private.h; path = Parse/Internal/Session/PFSession_Private.h; sourceTree = ""; }; 35574BADA6CDEA944F089CBC021F01AA /* TransformationMatrix.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TransformationMatrix.cpp; path = pop/WebCore/TransformationMatrix.cpp; sourceTree = ""; }; - 358BFE48BAAE8F3F03CD0C0904BC4C08 /* PFUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserController.m; path = Parse/Internal/User/Controller/PFUserController.m; sourceTree = ""; }; - 36B65B247D65EE46D2A8F3ACDC87870F /* PFAnonymousUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils.h; path = Parse/PFAnonymousUtils.h; sourceTree = ""; }; - 36E7ABF06376C0698BE4B369C1255EAD /* PFRESTCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCommand.m; path = Parse/Internal/Commands/PFRESTCommand.m; sourceTree = ""; }; - 372923DCA1E5BFDF1DBD57E93002E783 /* PFMultiProcessFileLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLock.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h; sourceTree = ""; }; - 372FE1327079A6911530ABFAF7BF2E68 /* PFMutableRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableRelationState.m; path = Parse/Internal/Relation/State/PFMutableRelationState.m; sourceTree = ""; }; - 37D8598915FD79DCA21C88192869017A /* PFPinningObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningObjectStore.h; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.h; sourceTree = ""; }; - 37DCE2246C320FA0B8BF9CAD3758AE71 /* PFAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAlertView.m; path = Parse/Internal/PFAlertView.m; sourceTree = ""; }; - 3801D32A117D840B4286437B7A779361 /* PFRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelationState.m; path = Parse/Internal/Relation/State/PFRelationState.m; sourceTree = ""; }; - 385A446A8250571BBD7FF461E05E1382 /* YALContextMenuTableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YALContextMenuTableView.m; path = YALContextMenu/YALContextMenuTableView.m; sourceTree = ""; }; + 369554517F91CBCD67CC278B273276A3 /* PFObjectSubclassingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassingController.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h; sourceTree = ""; }; + 36E96F698A999832ADF3D7F5392E1641 /* PFInstallationIdentifierStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationIdentifierStore.m; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m; sourceTree = ""; }; + 3736B5A263EAA9B1E1282D09BC223346 /* PFObjectFileCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCoder.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.h; sourceTree = ""; }; + 3743695C2114BF3EB5B9857261C0E101 /* BFTask+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Private.m"; path = "Parse/Internal/BFTask+Private.m"; sourceTree = ""; }; + 388FD96F0258A11A9BDACFB28722339B /* PFURLSessionUploadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionUploadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m; sourceTree = ""; }; 38C1E5A4A6882760CB349FCABD22A9DC /* POP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POP.h; path = pop/POP.h; sourceTree = ""; }; - 38C5CB3B26D08AF88F501A05B91F10B4 /* PFObjectBatchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectBatchController.h; path = Parse/Internal/Object/BatchController/PFObjectBatchController.h; sourceTree = ""; }; - 38E00AD6C99A24C72256073EDD208D3F /* PFAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAssert.h; path = Parse/Internal/PFAssert.h; sourceTree = ""; }; - 39451587CFA3D7024575C72DA66A271B /* PFPushUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushUtilities.h; path = Parse/Internal/Push/Utilites/PFPushUtilities.h; sourceTree = ""; }; - 39A27D94EB41AD237B4F4E722852F9B6 /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; + 38FE94A275B17621E2E9B43752CE7567 /* YALContextMenuTableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YALContextMenuTableView.h; path = YALContextMenu/YALContextMenuTableView.h; sourceTree = ""; }; + 394EF4EEC81814669228D349F9F144BE /* ParseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseManager.m; path = Parse/Internal/ParseManager.m; sourceTree = ""; }; + 39A964688EEFC3D0CC24D3A54E38FBD3 /* PFAnonymousUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils.h; path = Parse/PFAnonymousUtils.h; sourceTree = ""; }; + 39C3C8FCB8514A583548A65C5CF4C00C /* PFCategoryLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCategoryLoader.h; path = Parse/Internal/PFCategoryLoader.h; sourceTree = ""; }; + 3A10A6965544C458AC5F2B678A0B47F7 /* PFObjectBatchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectBatchController.m; path = Parse/Internal/Object/BatchController/PFObjectBatchController.m; sourceTree = ""; }; 3A5F7AF86D19E519B94AD6D8CB98CC34 /* POPAnimationRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationRuntime.h; path = pop/POPAnimationRuntime.h; sourceTree = ""; }; - 3D7123F7FE1F84DEDBE2ED35D8844839 /* PFObjectFilePersistenceController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFilePersistenceController.h; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h; sourceTree = ""; }; - 3DB8817B308E2B46E23993461AC18E54 /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; - 3DFA1FB737DEBE392F5582656ED1040B /* PFObjectSubclassInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassInfo.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m; sourceTree = ""; }; - 3E2E03FFA5C12908D09BC583858570B6 /* PFKeyValueCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeyValueCache.m; path = Parse/Internal/KeyValueCache/PFKeyValueCache.m; sourceTree = ""; }; - 400935A9AE97EE38E7C59CBBD474FA32 /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; - 411AD8B8B53F6CAF9198BBBBB07AC033 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; - 41A069B9AF3C8F611F76F20326AB035E /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; - 436A81D9B2A9E41E99BF86F1C6871A0A /* PFThreadsafety.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFThreadsafety.m; path = Parse/Internal/ThreadSafety/PFThreadsafety.m; sourceTree = ""; }; - 450938391ACE611C45583A2F6117FD6D /* PFURLSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h; sourceTree = ""; }; - 453A45902215CAB1B07AEEBCAEC35958 /* PFAsyncTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAsyncTaskQueue.h; path = Parse/Internal/PFAsyncTaskQueue.h; sourceTree = ""; }; - 457B2F0DFF5B74AEFF8A1D9A714104EA /* PFUserPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserPrivate.h; path = Parse/Internal/User/PFUserPrivate.h; sourceTree = ""; }; - 461917BD0B571A033CB9E74AD334A12C /* PFFileStagingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileStagingController.m; path = Parse/Internal/File/Controller/PFFileStagingController.m; sourceTree = ""; }; - 46A44DBE60FFDA06D7726DD3091A0E47 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; - 4743EB53C73E4B52C1EC84395BD476F5 /* Parse-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Parse-Private.xcconfig"; sourceTree = ""; }; - 475310436BBAD84F7095E6DB0BB83F78 /* PFMulticastDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMulticastDelegate.m; path = Parse/Internal/PFMulticastDelegate.m; sourceTree = ""; }; - 47DED761A5B41071D4A460714CF9A610 /* PFURLSessionCommandRunner_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h; sourceTree = ""; }; - 48514E935FE3E435F151EFEB4D829A65 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; - 489E3B9351E8F3F82DAFE89EEEC84804 /* PFFileController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileController.h; path = Parse/Internal/File/Controller/PFFileController.h; sourceTree = ""; }; - 48DF685D40431A00C7B7572D23340086 /* PFCommandRunningConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunningConstants.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m; sourceTree = ""; }; - 4A0A7E7C948EBD45C167B8D1A339D98A /* PFInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallation.m; path = Parse/PFInstallation.m; sourceTree = ""; }; - 4A747E0C0BA89EAF9D9C9B35EA62B097 /* PFRESTQueryCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTQueryCommand.m; path = Parse/Internal/Commands/PFRESTQueryCommand.m; sourceTree = ""; }; - 4B4E5220C651194225EB11D393463146 /* PFFieldOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperation.m; path = Parse/Internal/FieldOperation/PFFieldOperation.m; sourceTree = ""; }; + 3A605DD02CF52F80E3B1D4E3BB6443CF /* PFLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogging.h; path = Parse/Internal/PFLogging.h; sourceTree = ""; }; + 3A9CF0F282093C60CC8BEA7B269DDEEE /* PFUserPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserPrivate.h; path = Parse/Internal/User/PFUserPrivate.h; sourceTree = ""; }; + 3BA2492A8BA6613479FC6DE8F318E716 /* PFAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAssert.h; path = Parse/Internal/PFAssert.h; sourceTree = ""; }; + 3C40DEB41CE4EC8B2FA1499B49789F37 /* PFDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDataProvider.h; path = Parse/Internal/PFDataProvider.h; sourceTree = ""; }; + 3C674CCEDB9884C366D0C653803CBF33 /* PFObjectEstimatedData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectEstimatedData.h; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h; sourceTree = ""; }; + 3D06333C4BBE1FBE4CBCF7F86CB65BB6 /* PFQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryState.m; path = Parse/Internal/Query/State/PFQueryState.m; sourceTree = ""; }; + 3DC28E88C43C66CB821F869EA052FAE8 /* PFImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImage.h; path = ParseUI/Classes/Internal/Extensions/PFImage.h; sourceTree = ""; }; + 3E2C0EAC510FD8283F4149F0AEFD64DD /* PFInstallationIdentifierStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h; sourceTree = ""; }; + 3E79A9B8178C0F64C99A91FD39A755F3 /* PFCommandCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache_Private.h; path = Parse/Internal/PFCommandCache_Private.h; sourceTree = ""; }; + 3E8BC26F535860ADEF8FB368E68DF289 /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; + 3EBC27DC0B4BA50C770DDFAE2B83B764 /* PFHTTPURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHTTPURLRequestConstructor.m; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m; sourceTree = ""; }; + 3F52D2D0D367EABC467BBF231B745F2D /* PFFileStagingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileStagingController.m; path = Parse/Internal/File/Controller/PFFileStagingController.m; sourceTree = ""; }; + 3FD690C48213961E0F282ADD5C6D7648 /* PFUIAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUIAlertView.h; path = ParseUI/Classes/Internal/Extensions/PFUIAlertView.h; sourceTree = ""; }; + 4147D89794931071D52A8BA0A96222F8 /* PFLogInView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogInView.m; path = ParseUI/Classes/LogInViewController/PFLogInView.m; sourceTree = ""; }; + 41A37E5AA3FD212D97AEF6B46AF205D7 /* PFSQLiteDatabaseResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseResult.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h; sourceTree = ""; }; + 41E4EF38F3F42973C09F8820315F75C3 /* Bolts.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.xcconfig; sourceTree = ""; }; + 4267B2ADB9B6E5C92FBBD2BE57B1F0B9 /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperationManager.m; path = AFNetworking/AFHTTPRequestOperationManager.m; sourceTree = ""; }; + 428C2550960F31AF80B66DC6FF7060E7 /* PFHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPRequest.h; path = Parse/Internal/HTTPRequest/PFHTTPRequest.h; sourceTree = ""; }; + 42FEE158A9A8CD9C91CB464AA689D222 /* PFObjectSubclassInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassInfo.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m; sourceTree = ""; }; + 4328D8F9C7AE7B0CD8FA7EBA00D7338F /* PFPushUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushUtilities.h; path = Parse/Internal/Push/Utilites/PFPushUtilities.h; sourceTree = ""; }; + 4375CF3355F1F50599EC991B4021CF8F /* PFQueryCollectionViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryCollectionViewController.m; path = ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m; sourceTree = ""; }; + 4388A6A932A7756E9AD6FC752949159E /* PFFieldOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperation.h; path = Parse/Internal/FieldOperation/PFFieldOperation.h; sourceTree = ""; }; + 4396FAB720D2A9D7CC8BE495AB0901B7 /* PFRESTQueryCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTQueryCommand.h; path = Parse/Internal/Commands/PFRESTQueryCommand.h; sourceTree = ""; }; + 440FFFF5E8AA2540E8D0104B9420D969 /* PFCloud.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloud.m; path = Parse/PFCloud.m; sourceTree = ""; }; + 44CC844604B6B8F4651D9967A6020478 /* PFCommandRunningConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunningConstants.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h; sourceTree = ""; }; + 4556777EF2137403EE0B15CFF94E9196 /* PFFileDataStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileDataStream.h; path = Parse/Internal/File/FileDataStream/PFFileDataStream.h; sourceTree = ""; }; + 46179347059FF8F4103F56305447D022 /* PFUIAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUIAlertView.m; path = ParseUI/Classes/Internal/Extensions/PFUIAlertView.m; sourceTree = ""; }; + 465823BD11BF09F5C90595ABAFD8A779 /* PFWeakValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFWeakValue.m; path = Parse/Internal/PFWeakValue.m; sourceTree = ""; }; + 46CD3BC9266CF5D1475B6AF46C8B7E7C /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; + 46F4505013A1E899E93E215319374975 /* PFBaseState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBaseState.m; path = Parse/Internal/PFBaseState.m; sourceTree = ""; }; + 4724259812FC4667976043F1B2F12B9A /* PFCachedQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCachedQueryController.h; path = Parse/Internal/Query/Controller/PFCachedQueryController.h; sourceTree = ""; }; + 4819C1A3A8B14056B5A05DC9FFFF5712 /* PFObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectControlling.h; path = Parse/Internal/Object/Controller/PFObjectControlling.h; sourceTree = ""; }; + 4908E227F1BA636934AEBDAD07F4FFB9 /* PFInstallationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationConstants.m; path = Parse/Internal/Installation/Constants/PFInstallationConstants.m; sourceTree = ""; }; + 497895A9634510E0B9DB68DF989C06DE /* PFUserConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserConstants.m; path = Parse/Internal/User/Constants/PFUserConstants.m; sourceTree = ""; }; + 4979C3B55E2B17D537C9E478C5549DC0 /* ParseUI-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ParseUI-dummy.m"; sourceTree = ""; }; + 4A27AA8076D73B600E05AFD9DE86A776 /* PFCommandURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandURLRequestConstructor.m; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m; sourceTree = ""; }; + 4A5608B6308F2F4967494F135B0105D4 /* PFApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFApplication.h; path = Parse/Internal/PFApplication.h; sourceTree = ""; }; + 4B4AF5367CECBE37C9C156CE5642F10C /* PFRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState.h; path = Parse/Internal/Relation/State/PFRelationState.h; sourceTree = ""; }; + 4CB4FE2CCDD340DB9E7D6942BC3B6970 /* PFReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFReachability.m; path = Parse/Internal/PFReachability.m; sourceTree = ""; }; 4CC05709207C91767940918CDD4779DC /* POPCGUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPCGUtils.h; path = pop/POPCGUtils.h; sourceTree = ""; }; - 4CD3D62A5F9D0B310DCF7C520D812B6F /* ParseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseManager.h; path = Parse/Internal/ParseManager.h; sourceTree = ""; }; - 4D237A86108BD1DB8A37BCC3FCA0DC90 /* PFAnalyticsUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsUtilities.m; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m; sourceTree = ""; }; - 4DC525DF3A9AB295F68FFA79C1865B4D /* PFApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFApplication.m; path = Parse/Internal/PFApplication.m; sourceTree = ""; }; - 4DDA8143D2C09DF9986817461C4DD498 /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; - 4FA3D2B13C2E276A13164FD9D412F89D /* PFPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPin.m; path = Parse/Internal/LocalDataStore/Pin/PFPin.m; sourceTree = ""; }; - 5038524C4AA89B3EC607E5B47A706CCA /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; - 507ED5364F8D323521133232F9E26134 /* PFBase64Encoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBase64Encoder.h; path = Parse/Internal/PFBase64Encoder.h; sourceTree = ""; }; - 512576519C7D60E088B9946D68C2893B /* UIAlertView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAlertView+AFNetworking.m"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.m"; sourceTree = ""; }; - 51740A0EDDF3B04E8A46D98B3807D440 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; - 52808B026D92DB8F0DCCBCA2EE24FEEF /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; - 529C0DC5511102F293AAA76310789551 /* PFProductsRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductsRequestHandler.h; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h; sourceTree = ""; }; - 530ED4C4F72784908C56CECFABD0231C /* PFObjectBatchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectBatchController.m; path = Parse/Internal/Object/BatchController/PFObjectBatchController.m; sourceTree = ""; }; - 5367E0C94AEC8755F6974A3C97264428 /* PFRESTFileCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTFileCommand.m; path = Parse/Internal/Commands/PFRESTFileCommand.m; sourceTree = ""; }; - 53683441896998F6CE0216D4310DD24D /* PFACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState.h; path = Parse/Internal/ACL/State/PFACLState.h; sourceTree = ""; }; - 554179C2DB1E42B74E86A13E79A45730 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; - 5583C012407DD3D86BE591291FD5B40E /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; - 562875D8611745AF8CD45A6CDA6DC927 /* PFUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState.h; path = Parse/Internal/User/State/PFUserState.h; sourceTree = ""; }; - 568A6DDB145B9BE497001F309F81C25D /* PFBase64Encoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBase64Encoder.m; path = Parse/Internal/PFBase64Encoder.m; sourceTree = ""; }; - 56CE00CA829DE03D96192E0DB1B3B4B5 /* PFPushState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState_Private.h; path = Parse/Internal/Push/State/PFPushState_Private.h; sourceTree = ""; }; - 5710C75607065D22ED2DB5CCCFB27A3D /* PFObjectConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectConstants.h; path = Parse/Internal/Object/Constants/PFObjectConstants.h; sourceTree = ""; }; - 5775915FCBF7CB8AB7E50C1474A500B5 /* PFRESTObjectCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectCommand.m; path = Parse/Internal/Commands/PFRESTObjectCommand.m; sourceTree = ""; }; + 4D273720DDB1BA554B5D9ADA0FA44AC7 /* PFRESTSessionCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTSessionCommand.m; path = Parse/Internal/Commands/PFRESTSessionCommand.m; sourceTree = ""; }; + 4E6F1EDB836DC6604BE100E89A63E970 /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; + 4E837A384D488CAA3D160460C108410D /* PFMutableObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableObjectState.h; path = Parse/Internal/Object/State/PFMutableObjectState.h; sourceTree = ""; }; + 4EBB251ECCBF5E9375C2740D911B52AF /* PFPurchaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseController.m; path = Parse/Internal/Purchase/Controller/PFPurchaseController.m; sourceTree = ""; }; + 4EFD42501997FEBF509BD17AE211C265 /* PFURLSessionDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h; sourceTree = ""; }; + 4F1BE91D0670897DB911C802F6BB70AA /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+AFNetworking.m"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.m"; sourceTree = ""; }; + 4F1C27BA471E9E9B97D6C406B2BB3AE4 /* PFRESTQueryCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTQueryCommand.m; path = Parse/Internal/Commands/PFRESTQueryCommand.m; sourceTree = ""; }; + 4F7FEA8114B1934AF71EEAF5B655B908 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; + 52A0BDF6DC4FDD8CAF9A75E1C98C9FE1 /* BFTask+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Private.h"; path = "Parse/Internal/BFTask+Private.h"; sourceTree = ""; }; + 52CE38F964085D76CF0D20DF4E04ED74 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; + 52DB6A54B1838689849D373A8B862089 /* Parse_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse_Private.h; path = Parse/Internal/Parse_Private.h; sourceTree = ""; }; + 536B415C0BBE342CFF56954EB43E327A /* PFAnalyticsUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsUtilities.h; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h; sourceTree = ""; }; + 53DF9F80DE5B4C6F41704F060C983B26 /* ParseUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseUI.h; path = ParseUI/Other/ParseUI.h; sourceTree = ""; }; + 552F0DEAE5F69539D7D65D9DB91ABFF3 /* PFDismissButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDismissButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h; sourceTree = ""; }; + 56436A2903AD7B65AA25DC0213B0BB83 /* PFQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQuery.m; path = Parse/PFQuery.m; sourceTree = ""; }; + 566E096C4168AF39742D4E5C84DD3816 /* PFFileDataStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileDataStream.m; path = Parse/Internal/File/FileDataStream/PFFileDataStream.m; sourceTree = ""; }; 5785AD09C2208501D5161E950E701889 /* POPAnimationEventInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationEventInternal.h; path = pop/POPAnimationEventInternal.h; sourceTree = ""; }; - 57B1DA40C85BD720B286FFF8C7EA6F91 /* PFInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallation.h; path = Parse/PFInstallation.h; sourceTree = ""; }; - 57F2605E98764A7779B3213480606C71 /* PFGeoPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFGeoPoint.m; path = Parse/PFGeoPoint.m; sourceTree = ""; }; - 58143C3358B762BB4DC15795BD82B8B9 /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; - 58898FE04784C24EDFF6D77428F6BB91 /* PFJSONSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFJSONSerialization.h; path = Parse/Internal/PFJSONSerialization.h; sourceTree = ""; }; - 58EC2DED4BCC481232C4E104FEB2F9ED /* PFQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState.h; path = Parse/Internal/Query/State/PFQueryState.h; sourceTree = ""; }; - 59143BC1CCA767489CC63EC79299C132 /* PFFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFile.m; path = Parse/PFFile.m; sourceTree = ""; }; - 595A306B6C145E017C4B885F8ABB9F94 /* PFRESTCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand.h; path = Parse/Internal/Commands/PFRESTCommand.h; sourceTree = ""; }; + 579B61E551621BA10D78D5D7BB2E82D6 /* PFURLSessionFileDownloadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionFileDownloadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h; sourceTree = ""; }; + 57E3E7A53BAA20CC092190C002268ADD /* PFPropertyInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo.m; sourceTree = ""; }; + 58BEAE37763D507BA321A10F607AA996 /* PFRole.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRole.m; path = Parse/PFRole.m; sourceTree = ""; }; + 58F6CBB7D71F74651AC7F84ABC410E0C /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; + 593AAE45575AE33845AB3E2DAEA2A800 /* PFOperationSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOperationSet.h; path = Parse/Internal/Object/OperationSet/PFOperationSet.h; sourceTree = ""; }; + 5989C4E0E6F614302CFDC1EF53184C28 /* PFCommandRunningConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunningConstants.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m; sourceTree = ""; }; 59B3FD41DEC22C5891C9B83C27BC25E0 /* pop-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "pop-dummy.m"; sourceTree = ""; }; - 5AA108C575CCC3045CF6EBEB7C2D35B5 /* PFQueryState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState_Private.h; path = Parse/Internal/Query/State/PFQueryState_Private.h; sourceTree = ""; }; + 59F9FF5E0E7F71609087AFEB003C5979 /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; + 5A1A25F8BE29707DDFE4EAD9454032E7 /* PFRESTCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand.h; path = Parse/Internal/Commands/PFRESTCommand.h; sourceTree = ""; }; + 5A4C38992478C648D81E01A7031B5825 /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "pop-Private.xcconfig"; sourceTree = ""; }; - 5B55313727430781904B26ED39BC5BD6 /* PFAnalyticsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsController.m; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.m; sourceTree = ""; }; - 5C3B64369BE6A9ACF09E4E03E3747FA0 /* PFMultiProcessFileLockController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLockController.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m; sourceTree = ""; }; - 5CE1AE8BFDFAA049F0F73E15ED7ACE9E /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 5DA5FA1FA814DC209F9EABCD6B9119F6 /* PFUserFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserFileCodingLogic.m; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m; sourceTree = ""; }; - 5E5F89585BF738F0A58C77BC3BE1A932 /* PFUserState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState_Private.h; path = Parse/Internal/User/State/PFUserState_Private.h; sourceTree = ""; }; - 5F3726655401860B18DB85328C091228 /* PFFileManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileManager.h; path = Parse/Internal/PFFileManager.h; sourceTree = ""; }; - 5F6D07CF3F5445D97AACFB330CF98F66 /* PFHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHash.m; path = Parse/Internal/PFHash.m; sourceTree = ""; }; - 60F954C2BD5989BD4626F5C1F5BCC48A /* PFRESTUserCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTUserCommand.h; path = Parse/Internal/Commands/PFRESTUserCommand.h; sourceTree = ""; }; - 61308EBC3E3CCE6EB380B4761543AD72 /* PFMutableFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableFileState.m; path = Parse/Internal/File/State/PFMutableFileState.m; sourceTree = ""; }; - 61DE303474ACF3AAEB6BEF7CF3151683 /* PFMutableFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableFileState.h; path = Parse/Internal/File/State/PFMutableFileState.h; sourceTree = ""; }; - 62078C4D93D4BF5CF7430EF680857264 /* PFHTTPURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHTTPURLRequestConstructor.m; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m; sourceTree = ""; }; - 62C1941BE9E36B0C41BF43BFCF7681CB /* PFObjectLocalIdStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectLocalIdStore.h; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h; sourceTree = ""; }; - 62FA41489E9F671A6D2AC37AA15E70FC /* PFProductsRequestHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductsRequestHandler.m; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m; sourceTree = ""; }; - 62FAE8C508439F783E07B639E62E5388 /* PFPush.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPush.m; path = Parse/PFPush.m; sourceTree = ""; }; - 63CF9DFF309CFA031748CEB31E227BB9 /* PFRESTCloudCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCloudCommand.h; path = Parse/Internal/Commands/PFRESTCloudCommand.h; sourceTree = ""; }; - 63F5E36EFB9403CA32B8B5C3A3F78855 /* PFEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue.h; path = Parse/Internal/PFEventuallyQueue.h; sourceTree = ""; }; - 6408EC1F7E48296B333659567543173D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + 5AC474A01014BDC025F0266CE0B033B8 /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+AFNetworking.h"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.h"; sourceTree = ""; }; + 5CF50CFEBB22494CCF939234C39DE670 /* libParseUI.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libParseUI.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5D06BD4ED28E55FEADFF8D4595B1BD6E /* PFAnalytics_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics_Private.h; path = Parse/Internal/Analytics/PFAnalytics_Private.h; sourceTree = ""; }; + 5D222FBAAC7CB0784308DEB998350A70 /* PFURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h; sourceTree = ""; }; + 5E6B73184D192A7643EF111D17920315 /* PFEventuallyPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyPin.h; path = Parse/Internal/PFEventuallyPin.h; sourceTree = ""; }; + 5ECDB4A3D81CD22761B3E657A9193AE7 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = Parse/Resources/en.lproj; sourceTree = ""; }; + 60256F6A4DBAA982F812489F3CCD2EF7 /* PFMutableUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableUserState.m; path = Parse/Internal/User/State/PFMutableUserState.m; sourceTree = ""; }; + 622EE1BBB499496DBDDE988CE4D0F947 /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; + 626EA58500BD7AFBCC37BB0A9E81C577 /* PFLogInView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInView.h; path = ParseUI/Classes/LogInViewController/PFLogInView.h; sourceTree = ""; }; + 628243081CD6D87A75BA9909480D688B /* PFCommandResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandResult.m; path = Parse/Internal/PFCommandResult.m; sourceTree = ""; }; + 62B118BBE51E9202B7097AF728173D22 /* PFRect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRect.h; path = ParseUI/Classes/Internal/Extensions/PFRect.h; sourceTree = ""; }; + 62BE8CADD4670ADEDF5FD8EF8072C87F /* pop.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = pop.xcconfig; sourceTree = ""; }; + 6349D7F8E69290506003AB29AD989010 /* PFKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeychainStore.m; path = Parse/Internal/PFKeychainStore.m; sourceTree = ""; }; + 63D19DFCBC3895E5748AC11A6100A32D /* PFQueryTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryTableViewController.h; path = ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h; sourceTree = ""; }; 641AE05DD55E5E6AC1590CD7B4A18F97 /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = ""; }; - 653B4653F0D1C20696A6E65E888E8D15 /* PFCommandResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandResult.m; path = Parse/Internal/PFCommandResult.m; sourceTree = ""; }; - 656B8A19AFF797C4926D6E2E8D102049 /* PFObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectController.m; path = Parse/Internal/Object/Controller/PFObjectController.m; sourceTree = ""; }; - 65F6F140EE00AE08D92C70E19B66F5A4 /* PFDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDecoder.h; path = Parse/Internal/PFDecoder.h; sourceTree = ""; }; - 663C1A74DA7B1A684C31157464DF2CC6 /* PFAsyncTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAsyncTaskQueue.m; path = Parse/Internal/PFAsyncTaskQueue.m; sourceTree = ""; }; - 669BF4D4C83FA3E0ABEF32501AC4C5EE /* PFCommandURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandURLRequestConstructor.h; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h; sourceTree = ""; }; - 671A1745311D8EA359B1DB95D621711E /* PFAnonymousUtils_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils_Private.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h; sourceTree = ""; }; - 676C7A56F303C34B831F1F015F05812E /* PFFileController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileController.m; path = Parse/Internal/File/Controller/PFFileController.m; sourceTree = ""; }; + 6514ED145DC7F188D2C4F431286C40B7 /* PFAnonymousAuthenticationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousAuthenticationProvider.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h; sourceTree = ""; }; + 65BCE23D522D91151189266A3FC84D6C /* PFFileStagingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileStagingController.h; path = Parse/Internal/File/Controller/PFFileStagingController.h; sourceTree = ""; }; + 65C8297BDEBA83D5501F45C12677C8EC /* PFPushController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushController.h; path = Parse/Internal/Push/Controller/PFPushController.h; sourceTree = ""; }; + 668B269657719A728AC245C01A2C2A70 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; + 66EEF19A1E2FD56ED08CB4BD7CC541D7 /* BFDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFDefines.h; path = Bolts/Common/BFDefines.h; sourceTree = ""; }; + 673B41C4A9C953340D42FB9375E98F48 /* PFRESTSessionCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTSessionCommand.h; path = Parse/Internal/Commands/PFRESTSessionCommand.h; sourceTree = ""; }; + 676BF07A1D05D277E516187A352A834C /* PFInternalUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInternalUtils.m; path = Parse/Internal/PFInternalUtils.m; sourceTree = ""; }; + 67AFACBF4ED6B0884B574DE70D9B6039 /* PFMultiProcessFileLockController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLockController.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h; sourceTree = ""; }; + 680A9F6B03DC467E45FC8F01D6ADDFC1 /* PFProductTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductTableViewController.m; path = ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m; sourceTree = ""; }; + 68899547991B9F78A6C594C5C0F479F5 /* PFObjectUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectUtilities.h; path = Parse/Internal/Object/Utilities/PFObjectUtilities.h; sourceTree = ""; }; + 694F62DF16C3FCEEF60E6744A3B916C5 /* PFCachedQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCachedQueryController.m; path = Parse/Internal/Query/Controller/PFCachedQueryController.m; sourceTree = ""; }; 6961E549FC85F85EB7560B887B11C928 /* POPSpringSolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringSolver.h; path = pop/POPSpringSolver.h; sourceTree = ""; }; - 69C89E4E56C77B03B486A9C81B595B44 /* AFNetworking-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AFNetworking-Private.xcconfig"; sourceTree = ""; }; - 6A3138F383603A594BF1120840E69F93 /* PFHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHash.h; path = Parse/Internal/PFHash.h; sourceTree = ""; }; - 6B26ED3E1774D8AF7C7968032E48D8AD /* BFTask+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Private.h"; path = "Parse/Internal/BFTask+Private.h"; sourceTree = ""; }; - 6BAB10EAFDE7E6E60F85AB4A4C3AD67E /* PFURLConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLConstructor.h; path = Parse/Internal/HTTPRequest/PFURLConstructor.h; sourceTree = ""; }; - 6D14E98ACAAB4CCD1367FDFBC9088D27 /* PFObjectFileCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCoder.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.h; sourceTree = ""; }; - 6D3ED73DF6D62367D4288EA69377B589 /* PFURLConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLConstructor.m; path = Parse/Internal/HTTPRequest/PFURLConstructor.m; sourceTree = ""; }; - 6D45F61B78D4419060D26A7EBAF70EC2 /* PFConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConstants.m; path = Parse/PFConstants.m; sourceTree = ""; }; - 6D97138DECF19BAFB63881A6D4EF92BF /* PFObjectController_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController_Private.h; path = Parse/Internal/Object/Controller/PFObjectController_Private.h; sourceTree = ""; }; - 6DC7D6BF37746831732BEE64A78E2E64 /* PFObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectState.m; path = Parse/Internal/Object/State/PFObjectState.m; sourceTree = ""; }; - 6E19C92B6E4B8413D0F549918EC73FD0 /* PFQueryPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryPrivate.h; path = Parse/Internal/Query/PFQueryPrivate.h; sourceTree = ""; }; - 6E2A46AA281CDF574C18A7B9311A6C93 /* PFAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAlertView.h; path = Parse/Internal/PFAlertView.h; sourceTree = ""; }; - 6FE7C428DAE4B23EBBF3039F8397D53E /* ContextMenu.iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ContextMenu.iOS.xcconfig; sourceTree = ""; }; - 70864853E727E60E7B86865739D2ECED /* PFCloud.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloud.m; path = Parse/PFCloud.m; sourceTree = ""; }; - 70A550454DC97E123E16BD631BDAD95C /* UIAlertView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAlertView+AFNetworking.h"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.h"; sourceTree = ""; }; - 71E77E05CC2CDD5B79D7552C17004EFB /* PFObjectFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCodingLogic.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m; sourceTree = ""; }; - 7203E516FF95A460652ADF5DFDEB3FB7 /* PFPaymentTransactionObserver_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver_Private.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h; sourceTree = ""; }; - 721E34BBC2F5BFD148652BD36955365C /* PFDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDataProvider.h; path = Parse/Internal/PFDataProvider.h; sourceTree = ""; }; - 72C04520515C92C01E90D8D58C97BA21 /* PFConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig.h; path = Parse/PFConfig.h; sourceTree = ""; }; - 734124A4F7A87553483F895904EE19A9 /* PFObjectEstimatedData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectEstimatedData.m; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m; sourceTree = ""; }; + 69AA9DF625F8419954BB0BBBE9C107EB /* PFDefaultACLController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDefaultACLController.m; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m; sourceTree = ""; }; + 69E0B048ABC0D2AC04E5685C0919F100 /* PFAnalyticsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsController.h; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.h; sourceTree = ""; }; + 6A0553B6F96FFCFB2659FBEC93186129 /* PFURLConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLConstructor.h; path = Parse/Internal/HTTPRequest/PFURLConstructor.h; sourceTree = ""; }; + 6A2537130546223A4F9BD2F2CC8C9932 /* PFJSONSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFJSONSerialization.h; path = Parse/Internal/PFJSONSerialization.h; sourceTree = ""; }; + 6B0D66F584D237E4338D3E19C4265A4A /* PFObjectState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState_Private.h; path = Parse/Internal/Object/State/PFObjectState_Private.h; sourceTree = ""; }; + 6B362321AC17972F76BC3058B0244342 /* PFPurchaseTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseTableViewCell.h; path = ParseUI/Classes/Cells/PFPurchaseTableViewCell.h; sourceTree = ""; }; + 6BB60B0E616655E619A22D34CEB64076 /* PFSignUpView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSignUpView.m; path = ParseUI/Classes/SignUpViewController/PFSignUpView.m; sourceTree = ""; }; + 6BF9666E63A77CFD64FC53F88BEB02F8 /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; + 6E66F27EF0BB5326527E03C5A3CEEE84 /* YALContextMenuCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YALContextMenuCell.h; path = YALContextMenu/YALContextMenuCell.h; sourceTree = ""; }; + 6EFA79C517CA44575258775AA6237117 /* PFPushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState.h; path = Parse/Internal/Push/State/PFPushState.h; sourceTree = ""; }; + 6F5CC0F9C4567ABE6127227B5B27A8B8 /* PFRESTCommand_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand_Private.h; path = Parse/Internal/Commands/PFRESTCommand_Private.h; sourceTree = ""; }; + 6F89E25FCE0DAA79042743C2B566E1A6 /* PFCloudCodeController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloudCodeController.m; path = Parse/Internal/CloudCode/PFCloudCodeController.m; sourceTree = ""; }; + 700DB399BAE4612DE007DEC2B6736D04 /* PFFileManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileManager.h; path = Parse/Internal/PFFileManager.h; sourceTree = ""; }; + 704906A954132660EE53716959D2EFD0 /* PFObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState.h; path = Parse/Internal/Object/State/PFObjectState.h; sourceTree = ""; }; + 7081E098CA4CB6A0681076A21412276A /* PFColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFColor.h; path = ParseUI/Classes/Internal/Extensions/PFColor.h; sourceTree = ""; }; + 713723DAE7A2D766F7D8E9BB88E5E4CA /* ParseUI.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ParseUI.xcconfig; sourceTree = ""; }; + 7178100892AF9F0FD529CB1C1D19CC83 /* PFRESTObjectBatchCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectBatchCommand.m; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.m; sourceTree = ""; }; + 72B3231E34DD38A30692794DF2F8DFB1 /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperationManager.h; path = AFNetworking/AFHTTPRequestOperationManager.h; sourceTree = ""; }; + 730A5142BAB6C4ACFC08E68568EBF8D7 /* PFMutablePushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutablePushState.h; path = Parse/Internal/Push/State/PFMutablePushState.h; sourceTree = ""; }; 7371F16336283F2D8BB2A199CD4DDEF5 /* POPSpringAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringAnimation.h; path = pop/POPSpringAnimation.h; sourceTree = ""; }; - 7388AF1F66A03C223B0DA9338F552A19 /* PFMultiProcessFileLock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLock.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m; sourceTree = ""; }; - 73DEF6839984D1F48ACE568B6EC2E5EF /* Parse-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Parse-dummy.m"; sourceTree = ""; }; - 73E9B12D704E302D9DAC9FDE4C8D60AC /* BFDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFDefines.h; path = Bolts/Common/BFDefines.h; sourceTree = ""; }; - 73F5CAD466111E720F4983773D164AED /* PFConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfig.m; path = Parse/PFConfig.m; sourceTree = ""; }; - 74BAE971C6A2FC6F319D21B31E77EAE8 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - 752500BB2A0459E3CB234F46BFDE1EED /* PFSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession.h; path = Parse/PFSession.h; sourceTree = ""; }; - 754C6873E010FF768376E458C1EA6449 /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; - 76B1F1A7DACF8124FD67EEFFB88526F1 /* PFPaymentTransactionObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPaymentTransactionObserver.m; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m; sourceTree = ""; }; - 7725DA2CCC4B05B3E8613121DAB013CB /* PFCoreDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreDataProvider.h; path = Parse/Internal/PFCoreDataProvider.h; sourceTree = ""; }; - 780EF3BE11B2381FB28EB629FB8CBC29 /* PFURLSessionDataTaskDelegate_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h; sourceTree = ""; }; - 7977EE0242992DA9A68D3DCB922B66CB /* YALContextMenuTableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YALContextMenuTableView.h; path = YALContextMenu/YALContextMenuTableView.h; sourceTree = ""; }; - 7A69D20AEBC89B67DD33CA2CC54E309B /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; - 7A880B37F4F90E6B3CCA1B3FAD582B81 /* Parse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Parse.m; path = Parse/Parse.m; sourceTree = ""; }; - 7B131E3C12FA20F7C590D94EF645128F /* PFNetworkCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkCommand.h; path = Parse/Internal/PFNetworkCommand.h; sourceTree = ""; }; - 7C4ACAFFC579192F80AE309D38F4CE0D /* PFDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDecoder.m; path = Parse/Internal/PFDecoder.m; sourceTree = ""; }; - 7C6969F6DC20ED490487711A80935900 /* PFSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSession.m; path = Parse/PFSession.m; sourceTree = ""; }; - 7C8DC7559A9E804216A7455574ACC2FA /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperationManager.m; path = AFNetworking/AFHTTPRequestOperationManager.m; sourceTree = ""; }; - 7F06EEE3B8D8FE8CE602F2D363FEE64C /* PFCommandResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandResult.h; path = Parse/Internal/PFCommandResult.h; sourceTree = ""; }; - 7F214F1BB9B408A25954535EFA736CA6 /* PFInstallationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationConstants.m; path = Parse/Internal/Installation/Constants/PFInstallationConstants.m; sourceTree = ""; }; + 74026F3639040297727453102A9BBBFC /* PFRESTAnalyticsCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTAnalyticsCommand.m; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.m; sourceTree = ""; }; + 756D73510B093B9B8FDF1F38117139CD /* PFRESTObjectCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectCommand.m; path = Parse/Internal/Commands/PFRESTObjectCommand.m; sourceTree = ""; }; + 7633F658075479E6F351B199EB7126A3 /* PFObject+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFObject+Subclass.h"; path = "Parse/PFObject+Subclass.h"; sourceTree = ""; }; + 7643F6942D7C77523A6EC6A87C80A76D /* PFOfflineObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineObjectController.h; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h; sourceTree = ""; }; + 76FDE35600319F36529FD99758E63E5C /* PFRESTPushCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTPushCommand.h; path = Parse/Internal/Commands/PFRESTPushCommand.h; sourceTree = ""; }; + 77845D529DEC33723562ECA6270BD8AB /* PFCommandURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandURLRequestConstructor.h; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h; sourceTree = ""; }; + 78006899D5F4068A8325BF93DB99FBC4 /* PFCloud.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloud.h; path = Parse/PFCloud.h; sourceTree = ""; }; + 79D7AFFDA509FB3FC481BDA87BF51A9D /* PFWeakValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFWeakValue.h; path = Parse/Internal/PFWeakValue.h; sourceTree = ""; }; + 7A0570AA7DC6F83403680412011FDC05 /* PFJSONSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFJSONSerialization.m; path = Parse/Internal/PFJSONSerialization.m; sourceTree = ""; }; + 7CF0DBA9D475D9DB9CD91FE782EDDF62 /* PFMutableQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableQueryState.h; path = Parse/Internal/Query/State/PFMutableQueryState.h; sourceTree = ""; }; + 7CF8D1706E6BD228B2880BF74EA66654 /* PFURLSessionJSONDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionJSONDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h; sourceTree = ""; }; + 7D68E6EF3A4AFEB121B57A35E7EA3FBE /* PFInternalUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInternalUtils.h; path = Parse/Internal/PFInternalUtils.h; sourceTree = ""; }; + 7DFA44004029BD393D1F2B117CE9F7F8 /* PFFileController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileController.h; path = Parse/Internal/File/Controller/PFFileController.h; sourceTree = ""; }; + 7EB9BC7FDF8DC81CC6C1D63BECCE7E14 /* PFLocalization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocalization.h; path = ParseUI/Classes/Internal/PFLocalization.h; sourceTree = ""; }; + 7ED2893DF06D68060771C808F407E78B /* PFRelation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelation.h; path = Parse/PFRelation.h; sourceTree = ""; }; + 7EEEA0671CACE4C69BF00921C419D1C8 /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; 7F59C51782AE555897A5B92D6B3CECD1 /* POPBasicAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPBasicAnimationInternal.h; path = pop/POPBasicAnimationInternal.h; sourceTree = ""; }; - 80678CF83F7E4592403D479266CD73C6 /* PFLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogger.h; path = Parse/Internal/PFLogger.h; sourceTree = ""; }; - 8072BEAB5E3DFBED370817399B610731 /* PFUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserState.m; path = Parse/Internal/User/State/PFUserState.m; sourceTree = ""; }; - 80B7FAB2B889140EDF2DC60D3C4A5969 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; - 810E80DCE80B90D80B5F21BF7212FEFB /* PFSessionUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionUtilities.m; path = Parse/Internal/Session/Utilities/PFSessionUtilities.m; sourceTree = ""; }; - 814B6E4C1E3AEC20607C2A43AADF132B /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; - 81EA6C27FFDF760CFB4767BB48E66220 /* PFInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationController.m; path = Parse/Internal/Installation/Controller/PFInstallationController.m; sourceTree = ""; }; - 82175545FE728571466A9FD6E8D8A7DE /* PFRESTAnalyticsCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTAnalyticsCommand.h; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.h; sourceTree = ""; }; - 82B2F774B2C3F6B000F7B323A1E51571 /* PFMutableACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableACLState.m; path = Parse/Internal/ACL/State/PFMutableACLState.m; sourceTree = ""; }; - 82BCDD60CE06A0870E0ED0D853E05739 /* PFFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile.h; path = Parse/PFFile.h; sourceTree = ""; }; + 7F71593AE89CAD970579B80D110C1984 /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; + 7FBF8804D54E1C19776FE5BA208F68B3 /* PFConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConstants.h; path = Parse/PFConstants.h; sourceTree = ""; }; + 80A12591CE5C8F207400FC6781F1683E /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; + 80E5920EF0293041A672DF21CBD90614 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + 81BEED9DCE9C07680F81CC9034E38AED /* PFURLSessionFileDownloadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionFileDownloadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m; sourceTree = ""; }; + 81E5DF449A484A01D0D5D2D79856C74B /* ContextMenu.iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ContextMenu.iOS-prefix.pch"; sourceTree = ""; }; 8336CCF2280C58E6C367DF4EC0EBB7B3 /* POPAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimation.mm; path = pop/POPAnimation.mm; sourceTree = ""; }; - 846998BF4B29751792079F5759BBA274 /* PFSQLiteDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase_Private.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h; sourceTree = ""; }; - 8510965E6696177882F8683FF279CA62 /* PFPaymentTransactionObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h; sourceTree = ""; }; - 857A8C29F0006E02894A63C09D31CB85 /* PFAnalyticsUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsUtilities.h; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h; sourceTree = ""; }; - 860D58AD9C905EA188BEF7C2C8B3B2E4 /* PFQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryController.h; path = Parse/Internal/Query/Controller/PFQueryController.h; sourceTree = ""; }; - 8675E8B47522DD1649EAE7CE1299B776 /* PFAnonymousUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousUtils.m; path = Parse/PFAnonymousUtils.m; sourceTree = ""; }; - 869C2B98A84E7A66ED53252EEBD534C7 /* PFHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPRequest.h; path = Parse/Internal/HTTPRequest/PFHTTPRequest.h; sourceTree = ""; }; - 86A60F0A962861AF2DAA6A87C133F7E8 /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; - 86D677D0061394762DEF101FECA5E262 /* PFObjectState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState_Private.h; path = Parse/Internal/Object/State/PFObjectState_Private.h; sourceTree = ""; }; - 876ECCCFCF0B3F87EC5560A2FF6B5059 /* PFRESTUserCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTUserCommand.m; path = Parse/Internal/Commands/PFRESTUserCommand.m; sourceTree = ""; }; + 846E0B7C90FFC4325F3D9DC1F334D2B1 /* PFACL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACL.m; path = Parse/PFACL.m; sourceTree = ""; }; + 851D6B30190D7C9B082DD326B4981335 /* PFActivityIndicatorCollectionReusableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActivityIndicatorCollectionReusableView.h; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h; sourceTree = ""; }; + 854CBE59DE1E76CFC6D07D0062FFB68C /* PFKeyValueCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache_Private.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h; sourceTree = ""; }; + 87BF1A2C6A35E36B2F3EC9220F3410B1 /* PFDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDecoder.m; path = Parse/Internal/PFDecoder.m; sourceTree = ""; }; + 881AE511AFA0A6623BF4D450BD61D412 /* PFQueryCollectionViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryCollectionViewController.h; path = ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h; sourceTree = ""; }; 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 893348B36B23CFF515B649DF3EA05962 /* PFCachedQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCachedQueryController.h; path = Parse/Internal/Query/Controller/PFCachedQueryController.h; sourceTree = ""; }; - 893F517620D76C4DD97407C35B30C8DC /* PFProduct.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProduct.m; path = Parse/PFProduct.m; sourceTree = ""; }; - 898ECE478F3C854611287289F4977E11 /* PFAnonymousAuthenticationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousAuthenticationProvider.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h; sourceTree = ""; }; - 89A3DB76DA1562634E50BB32E31C34F7 /* PFPushChannelsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushChannelsController.m; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.m; sourceTree = ""; }; - 8A9EB6D7E4926B7E034816F709F1F518 /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLConnectionOperation.h; path = AFNetworking/AFURLConnectionOperation.h; sourceTree = ""; }; - 8AA0E5427E9EFCC96AC0F8CED0FBEEF4 /* PFObjectFilePersistenceController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFilePersistenceController.m; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m; sourceTree = ""; }; - 8BABE1F9D15A2416835BA1EC9EB7E043 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - 8C6B8C7E82B804AB1382E38F8E99158C /* PFCurrentUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentUserController.m; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.m; sourceTree = ""; }; - 8CCBDC7EA64ECE9974D334AA69A02EEA /* PFPushManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushManager.m; path = Parse/Internal/Push/Manager/PFPushManager.m; sourceTree = ""; }; - 8D19EBD75979B9CD23ABA38BA45D0DCB /* PFCurrentConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentConfigController.h; path = Parse/Internal/Config/Controller/PFCurrentConfigController.h; sourceTree = ""; }; - 8E69E884C61DBE3CA50B5B88897651DB /* PFMutableACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableACLState.h; path = Parse/Internal/ACL/State/PFMutableACLState.h; sourceTree = ""; }; + 88941524D385690CBCF300DD140DF00E /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; + 88A85349B94E9627FD8BFD487C72696F /* PFErrorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFErrorUtilities.h; path = Parse/Internal/PFErrorUtilities.h; sourceTree = ""; }; + 88DD76E6AD2481B16B2BBF010ED8C5C5 /* PFGeoPointPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPointPrivate.h; path = Parse/Internal/PFGeoPointPrivate.h; sourceTree = ""; }; + 8904F23F909FE6ABDCDCF6FB05F10B30 /* PFURLSessionJSONDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionJSONDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m; sourceTree = ""; }; + 89AB91AE1EA155F70C6048F5E3BC2CEB /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; + 89B3B0322B04DCA7B4CC50F944791132 /* PFInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationController.h; path = Parse/Internal/Installation/Controller/PFInstallationController.h; sourceTree = ""; }; + 89C6E76766F3F8CA998ED8A57C73E6E8 /* PFGeoPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPoint.h; path = Parse/PFGeoPoint.h; sourceTree = ""; }; + 89F3C71E2765B3C28B473D71DF5A5D58 /* PFColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFColor.m; path = ParseUI/Classes/Internal/Extensions/PFColor.m; sourceTree = ""; }; + 8A03B973912756B22A381AC58978C7CC /* PFLogInViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInViewController.h; path = ParseUI/Classes/LogInViewController/PFLogInViewController.h; sourceTree = ""; }; + 8A1C42F3F207E19A35B5546628710724 /* PFRole.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRole.h; path = Parse/PFRole.h; sourceTree = ""; }; + 8BF4FFC8C19BB816A5D326D9220F1FF8 /* PFSessionUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionUtilities.m; path = Parse/Internal/Session/Utilities/PFSessionUtilities.m; sourceTree = ""; }; + 8D6DBFEBCB22D95F322ED40E7E0F2662 /* PFACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState.h; path = Parse/Internal/ACL/State/PFACLState.h; sourceTree = ""; }; + 8D8B63E424FEEB2D6A4B63DC923F3455 /* libParse.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libParse.a; sourceTree = BUILT_PRODUCTS_DIR; }; 8EC4FC6A3A06D9292C296C691005546B /* POPCustomAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPCustomAnimation.mm; path = pop/POPCustomAnimation.mm; sourceTree = ""; }; - 8EC8E900100484763798A1C6338E9061 /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; - 8F189D28F4E7A0D39192B35D412642BA /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; - 8F270D2F5F74F0965904AC60E014742A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - 8F5D0107B7A3A38D5B48854CDBEA6CD3 /* PFTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTaskQueue.h; path = Parse/Internal/PFTaskQueue.h; sourceTree = ""; }; + 8F15A0C78AB604E937ECE01D61C14392 /* PFAnalyticsUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsUtilities.m; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m; sourceTree = ""; }; + 8F203F67E77F4F810024D9C3C07CDBF0 /* PFAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics.h; path = Parse/PFAnalytics.h; sourceTree = ""; }; + 8F403ED31C60BFC3D4DF66EECD5E4677 /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; + 8F489EFF4C232894528578CFD10B4CE9 /* PFInstallationIdentifierStore_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore_Private.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h; sourceTree = ""; }; + 8FB871978A493CF76B6EF86A10503D0B /* PFObjectSubclassingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassingController.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m; sourceTree = ""; }; + 90022F3C8DE07574875FE6D257E4F527 /* PFObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController.h; path = Parse/Internal/Object/Controller/PFObjectController.h; sourceTree = ""; }; + 900D054E76F1D5D03B53DBFF276C5C0D /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = ParseUI/Resources/Localization/en.lproj; sourceTree = ""; }; + 902691554546D2DCD720159559359ED0 /* PFQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryController.m; path = Parse/Internal/Query/Controller/PFQueryController.m; sourceTree = ""; }; + 90383A205442FD08C8901103539A77AC /* PFThreadsafety.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFThreadsafety.h; path = Parse/Internal/ThreadSafety/PFThreadsafety.h; sourceTree = ""; }; 90DA3C63E9AD758336342BC51C0BB859 /* POPDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDefines.h; path = pop/POPDefines.h; sourceTree = ""; }; - 9102F91F4F8FC737DF8F8B04EB6B1183 /* PFObjectLocalIdStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectLocalIdStore.m; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m; sourceTree = ""; }; - 91B168BFBEBBF3272A49E4240325DAC3 /* PFRESTQueryCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTQueryCommand.h; path = Parse/Internal/Commands/PFRESTQueryCommand.h; sourceTree = ""; }; - 923EF0E8FAAA93BA1AF9399DE58923FF /* PFObjectConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectConstants.m; path = Parse/Internal/Object/Constants/PFObjectConstants.m; sourceTree = ""; }; + 917A576B44FACB8621EE8D58A98BB1AA /* PFObjectFilePersistenceController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFilePersistenceController.m; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m; sourceTree = ""; }; + 918F011200230C7E00D0CDBE0413D604 /* PFPush.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPush.m; path = Parse/PFPush.m; sourceTree = ""; }; + 91A04A2D587B5AA298D99CA8707ACD0C /* PFUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState.h; path = Parse/Internal/User/State/PFUserState.h; sourceTree = ""; }; 928EC8B9105DA581C7896C2102E87BE2 /* POPCustomAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPCustomAnimation.h; path = pop/POPCustomAnimation.h; sourceTree = ""; }; - 92A56E592AF27DDA726FCE1F4C398C8E /* PFOperationSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOperationSet.m; path = Parse/Internal/Object/OperationSet/PFOperationSet.m; sourceTree = ""; }; - 92C8318F0774CE0DB5B5FA3C7961C69F /* PFInstallationIdentifierStore_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore_Private.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h; sourceTree = ""; }; - 92EFA64DEEA2D7C788D39BE4B87668B0 /* ContextMenu.iOS-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ContextMenu.iOS-Private.xcconfig"; sourceTree = ""; }; - 9357693A996038C30E8C787613239775 /* PFURLSessionJSONDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionJSONDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m; sourceTree = ""; }; - 93F14E13D1AAFFA4C781869593E6A6FF /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; - 946D9742CB5DB1C57ED0E3BBA63E66BD /* PFRESTAnalyticsCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTAnalyticsCommand.m; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.m; sourceTree = ""; }; + 92D3CB661DEB61F5FF0B840AB6BD7FDD /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; + 92D5F344DD144AC33D3477DFE0636DA8 /* PFSignUpViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSignUpViewController.h; path = ParseUI/Classes/SignUpViewController/PFSignUpViewController.h; sourceTree = ""; }; + 93457F77204719F4C16214A7413841BC /* PFSQLiteStatement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteStatement.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h; sourceTree = ""; }; + 936B40D958EFF2CAD5842B3F198BD796 /* PFQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState.h; path = Parse/Internal/Query/State/PFQueryState.h; sourceTree = ""; }; + 93A5300ED14457F5DD5D6D6C0EC2DEE0 /* PFMutableRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableRelationState.h; path = Parse/Internal/Relation/State/PFMutableRelationState.h; sourceTree = ""; }; 94815AA3EE3CBA04CEE85515701AD534 /* POPAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimator.h; path = pop/POPAnimator.h; sourceTree = ""; }; - 94DF16E2294CA8FEC9FD2ACF36D38638 /* PFPurchaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseController.m; path = Parse/Internal/Purchase/Controller/PFPurchaseController.m; sourceTree = ""; }; - 94E051272A8A44AC3C51C58EABF97D9F /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; - 9507DB69A2FE53769B24313F98BCFB5B /* PFRESTSessionCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTSessionCommand.m; path = Parse/Internal/Commands/PFRESTSessionCommand.m; sourceTree = ""; }; + 9598FF72766A2C803899340FE5A02F1D /* PFACLState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState_Private.h; path = Parse/Internal/ACL/State/PFACLState_Private.h; sourceTree = ""; }; 96015F1C746803D9318614B277F71BCB /* UnitBezier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UnitBezier.h; path = pop/WebCore/UnitBezier.h; sourceTree = ""; }; - 96403B2BFDB3FEACA24969CF6378D7B3 /* PFCategoryLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCategoryLoader.m; path = Parse/Internal/PFCategoryLoader.m; sourceTree = ""; }; - 9645D0E8258AB75B2C992E0915EA9BC2 /* PFUserConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserConstants.h; path = Parse/Internal/User/Constants/PFUserConstants.h; sourceTree = ""; }; - 965FBA9FA425FE1BA4E41B4FFEE42FA8 /* PFDateFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDateFormatter.h; path = Parse/Internal/PFDateFormatter.h; sourceTree = ""; }; 9663A817A809169745F3F8E987FFE076 /* POPLayerExtras.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPLayerExtras.h; path = pop/POPLayerExtras.h; sourceTree = ""; }; - 96A60F95EF69292F16C085789B646687 /* PFSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession_Private.h; path = Parse/Internal/Session/PFSession_Private.h; sourceTree = ""; }; - 97ADB30A5976DC7FE832E68A415B22F8 /* PFPropertyInfo_Runtime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo_Runtime.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m; sourceTree = ""; }; - 97D5C73BC159E5CEFA38B5345BB3B77E /* PFPushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState.h; path = Parse/Internal/Push/State/PFPushState.h; sourceTree = ""; }; - 98C44F60AA929307291A20DC790BFEB1 /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; - 994A5F73DF6BF6840DED92DDE2C12AC6 /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperation.m; path = AFNetworking/AFHTTPRequestOperation.m; sourceTree = ""; }; - 9AF96B14E5200CC44AFA17F564FAFCE9 /* BoltsVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BoltsVersion.h; path = Bolts/Common/BoltsVersion.h; sourceTree = ""; }; - 9B3991EEAD0B989CE24DC09DA3F6F84B /* PFPushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushState.m; path = Parse/Internal/Push/State/PFPushState.m; sourceTree = ""; }; + 973B4A3060B04CDC56604B7E195515C2 /* PFFieldOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperation.m; path = Parse/Internal/FieldOperation/PFFieldOperation.m; sourceTree = ""; }; + 975FA02383C4AF2B0D4C851DF8A9A0C2 /* PFNullability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNullability.h; path = Parse/PFNullability.h; sourceTree = ""; }; + 97944F65FC485382F36D6DC38FAD26A0 /* PFObjectFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCodingLogic.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m; sourceTree = ""; }; + 994A66CEBCB74EC7AF6E43F12721CE79 /* PFMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMacros.h; path = Parse/Internal/PFMacros.h; sourceTree = ""; }; + 99608B2EC51573A5DC72B1C1509BF733 /* UIView+YALConstraints.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+YALConstraints.m"; path = "YALContextMenu/UIView+YALConstraints.m"; sourceTree = ""; }; + 99FDD1E37DD120D520EE6C3BACAD38E1 /* PFCommandResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandResult.h; path = Parse/Internal/PFCommandResult.h; sourceTree = ""; }; + 9A0E583B09D603C1E642811EA63D1199 /* PFObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectState.m; path = Parse/Internal/Object/State/PFObjectState.m; sourceTree = ""; }; + 9B35DDE4E59586621C39D96AA5CFEA8A /* PFReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFReachability.h; path = Parse/Internal/PFReachability.h; sourceTree = ""; }; + 9B4A505C53309A2CA9DD89F8D0CCC03D /* PFCoreDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreDataProvider.h; path = Parse/Internal/PFCoreDataProvider.h; sourceTree = ""; }; + 9C03BDCE6AA9F4C2CBA33DD19A323934 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; }; 9C3FE18EB564AF4087573DE6F3F2D3D3 /* POPMath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPMath.h; path = pop/POPMath.h; sourceTree = ""; }; - 9CB47EA89DC2B49C7B2B12127098FB33 /* PFURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h; sourceTree = ""; }; 9DA58C3428E2A0E2F88C2A0522297274 /* POPAnimationTracerInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationTracerInternal.h; path = pop/POPAnimationTracerInternal.h; sourceTree = ""; }; - 9EAF2A823E92A730EC588801D943C514 /* PFSQLiteDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabase.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m; sourceTree = ""; }; + 9E24DE585AD9B9268FFE89EBC23F41F8 /* PFSessionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionController.h; path = Parse/Internal/Session/Controller/PFSessionController.h; sourceTree = ""; }; + 9E7E875CE34251F7D08C0A56A3B8DF0D /* ContextMenu.iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ContextMenu.iOS-dummy.m"; sourceTree = ""; }; 9F210DEEA777E0BF1995DC3570CC616E /* POPAnimationEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationEvent.h; path = pop/POPAnimationEvent.h; sourceTree = ""; }; - 9F519C682C4E52952D376F5423040E5B /* PFRESTConfigCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTConfigCommand.m; path = Parse/Internal/Commands/PFRESTConfigCommand.m; sourceTree = ""; }; - A011CA3F808702224552F151CBB37A51 /* ParseModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseModule.m; path = Parse/Internal/ParseModule.m; sourceTree = ""; }; - A09F4FD4303453124FB9D4870DDE2F0C /* PFGeoPointPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPointPrivate.h; path = Parse/Internal/PFGeoPointPrivate.h; sourceTree = ""; }; + 9FA74BE27642D3B7276E321358B7C527 /* PFPushChannelsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushChannelsController.m; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.m; sourceTree = ""; }; + A00E3EBED97D7DA5FA9DA201848A51D0 /* PFLogInViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogInViewController.m; path = ParseUI/Classes/LogInViewController/PFLogInViewController.m; sourceTree = ""; }; + A1505BE85BBBF3833DAC5F2D8AEA1E44 /* PFSQLiteDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h; sourceTree = ""; }; A19FD133843D5FCF16B8AF3B4E165515 /* POPMath.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPMath.mm; path = pop/POPMath.mm; sourceTree = ""; }; - A1B4C9A06FB08BC3FE354D588CD09AF7 /* PFSQLiteStatement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteStatement.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m; sourceTree = ""; }; - A250843CDACF4CC56A8C27C4FDF9C270 /* PFFieldOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperation.h; path = Parse/Internal/FieldOperation/PFFieldOperation.h; sourceTree = ""; }; - A28218952E226A9395672AAF9BB98065 /* PFCommandCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache_Private.h; path = Parse/Internal/PFCommandCache_Private.h; sourceTree = ""; }; - A2BD31107881F3881ADCD378256D4B02 /* PFUserFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserFileCodingLogic.h; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h; sourceTree = ""; }; - A2C302E4C6109CA0666CE25D782C9766 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; - A3A5889AC5CCB95EF1C4DD6B7C5C930D /* PFUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUser.m; path = Parse/PFUser.m; sourceTree = ""; }; - A3A9D34733E3E1E62E950164A6B84C80 /* PFAnalytics_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics_Private.h; path = Parse/Internal/Analytics/PFAnalytics_Private.h; sourceTree = ""; }; - A3DF42FD99A813DEBC5C62B3491B1AC0 /* PFURLSessionDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m; sourceTree = ""; }; + A19FD78A9B72692A4B71312CF239FD40 /* PFObjectFilePersistenceController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFilePersistenceController.h; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h; sourceTree = ""; }; + A210BD82E20817973E99C3A2B14ECDDE /* PFPropertyInfo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Private.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h; sourceTree = ""; }; + A2321BBEB7A3CF093F1CD973DD968164 /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; + A2F55850F1341E91769F563950DFBC38 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; + A3A60F4A92389CAAF08FEB19CDC3BF4F /* PFLogInView_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInView_Private.h; path = ParseUI/Classes/LogInViewController/PFLogInView_Private.h; sourceTree = ""; }; + A3F02110C3D27D3278E6DF129D2C91F7 /* PFTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTableViewCell.m; path = ParseUI/Classes/Cells/PFTableViewCell.m; sourceTree = ""; }; + A3F32303C58658949292DAA3491E94DA /* PFTextField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTextField.m; path = ParseUI/Classes/Views/PFTextField.m; sourceTree = ""; }; A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libpop.a; sourceTree = BUILT_PRODUCTS_DIR; }; - A52CE45BD75B2826314A3BCDCB813398 /* PFObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObject.h; path = Parse/PFObject.h; sourceTree = ""; }; - A5849314580BC3F82E4A799104E87FE3 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; - A60A05A0392E32822607D587C5380E61 /* PFSQLiteDatabaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseController.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h; sourceTree = ""; }; - A60CF5CEA93C2F6926C54CA3679A1556 /* PFPushPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushPrivate.h; path = Parse/Internal/Push/PFPushPrivate.h; sourceTree = ""; }; - A63FC1750D756C077EBF6610F23A216B /* PFKeyValueCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache_Private.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h; sourceTree = ""; }; - A6EBD847848C1C85F961433CE4F102A3 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; - A6F04B61FAF09E9538B3AF6FD9536DC4 /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperation.h; path = AFNetworking/AFHTTPRequestOperation.h; sourceTree = ""; }; - A72A7753E28C0B037F3759A7CB7DC9CB /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; - A78F4615CC1292D0FA53088C626957D8 /* PFSQLiteDatabaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseController.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m; sourceTree = ""; }; - A89E8441EF384E751C66846D8C7DA140 /* PFRESTPushCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTPushCommand.m; path = Parse/Internal/Commands/PFRESTPushCommand.m; sourceTree = ""; }; - A8AD04541066E8C429FCD51E8A604FF1 /* PFInstallationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationPrivate.h; path = Parse/Internal/Installation/PFInstallationPrivate.h; sourceTree = ""; }; - A988AADA8AE3AFF34F68D1673691E59A /* PFObjectUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectUtilities.m; path = Parse/Internal/Object/Utilities/PFObjectUtilities.m; sourceTree = ""; }; - AA0EFB7BECF9EB8E71FD258F0F60D3E5 /* PFPinningEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningEventuallyQueue.h; path = Parse/Internal/PFPinningEventuallyQueue.h; sourceTree = ""; }; - AA5D3771AE76625915E333CFABB45A05 /* PFURLSessionUploadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionUploadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m; sourceTree = ""; }; - AAAE696C714BEA1FD2CB7F7E37484204 /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; - AC3758631123BBA424D0C687A75ED31C /* PFInstallationIdentifierStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h; sourceTree = ""; }; - AC7F1FE520C94B33E628A5BF7D802073 /* PFErrorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFErrorUtilities.h; path = Parse/Internal/PFErrorUtilities.h; sourceTree = ""; }; - AD274DB5984402947E47F0A1B92E9CA4 /* PFFileStagingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileStagingController.h; path = Parse/Internal/File/Controller/PFFileStagingController.h; sourceTree = ""; }; - AD9250D9FE4979DF37C24BE1CDB4FF8B /* PFUserAuthenticationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserAuthenticationController.m; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m; sourceTree = ""; }; - ADEFE34C92FF818B135715C323E4963C /* PFObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObject.m; path = Parse/PFObject.m; sourceTree = ""; }; - AE0BE1F355DE44ECCAEA5BF8D4526C5A /* PFURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSession.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m; sourceTree = ""; }; - AE87F34D52CD28E7113F03F7CEA01F06 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - AE96E6223940CD70D6F01EA288192D93 /* PFGeoPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPoint.h; path = Parse/PFGeoPoint.h; sourceTree = ""; }; - B024D2C96D819E81E5D194B562CA7CCF /* PFOfflineObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineObjectController.h; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h; sourceTree = ""; }; + A445FAA3DECFDF34F02F85692C7EA1CB /* PFDismissButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDismissButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.m; sourceTree = ""; }; + A597F94956AB66B22F3E3E1F4507AE56 /* PFCollectionViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCollectionViewCell.h; path = ParseUI/Classes/Cells/PFCollectionViewCell.h; sourceTree = ""; }; + A61451E1B1612A7616445BE1C5CBA596 /* PFAsyncTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAsyncTaskQueue.m; path = Parse/Internal/PFAsyncTaskQueue.m; sourceTree = ""; }; + A6E4973175ADE7E1CBDAB4A5071E7621 /* PFSignUpView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSignUpView.h; path = ParseUI/Classes/SignUpViewController/PFSignUpView.h; sourceTree = ""; }; + A772CFB5BFFB35B2E671E4851E00B741 /* PFTextButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTextButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h; sourceTree = ""; }; + A7BC2EFA845DB186821FF808FDC5DADE /* PFCommandCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandCache.m; path = Parse/Internal/PFCommandCache.m; sourceTree = ""; }; + A89DC1C62077920038FC9E70EC43406F /* Parse-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Parse-Private.xcconfig"; sourceTree = ""; }; + AA3D59BA0C2C12C85BC9B604166741A5 /* PFDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDevice.h; path = Parse/Internal/PFDevice.h; sourceTree = ""; }; + AA4A0414EB82636A5445DB1B24ECFE5B /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; + AB1E20059106E03E6594A48AF6661438 /* PFErrorUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFErrorUtilities.m; path = Parse/Internal/PFErrorUtilities.m; sourceTree = ""; }; + AB3AB9370B71EA5499996D460DF047C5 /* PFRESTConfigCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTConfigCommand.m; path = Parse/Internal/Commands/PFRESTConfigCommand.m; sourceTree = ""; }; + AB3B8D04CBC9A7E1794313D118715E06 /* PFMutableObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableObjectState.m; path = Parse/Internal/Object/State/PFMutableObjectState.m; sourceTree = ""; }; + AB4619A4572B3C9040CFF51B704351E5 /* PFDateFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDateFormatter.m; path = Parse/Internal/PFDateFormatter.m; sourceTree = ""; }; + AB771162A46246297D872F262698474F /* PFTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTaskQueue.h; path = Parse/Internal/PFTaskQueue.h; sourceTree = ""; }; + AC064F00E5953DC4C9CE6D8AD0D51ED1 /* PFEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyQueue.m; path = Parse/Internal/PFEventuallyQueue.m; sourceTree = ""; }; + AC2CC0B73F6911C366AFAF2747021916 /* PFUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUser.m; path = Parse/PFUser.m; sourceTree = ""; }; + AD1208FED19399BDA5AE927E35FFF9D1 /* PFActivityIndicatorCollectionReusableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActivityIndicatorCollectionReusableView.m; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.m; sourceTree = ""; }; + AD49C218C28CC03A2219320D99CD8AAA /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLConnectionOperation.h; path = AFNetworking/AFURLConnectionOperation.h; sourceTree = ""; }; + AD9AC4ABA3BB74252870F496326BBAD2 /* YALContextMenuTableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YALContextMenuTableView.m; path = YALContextMenu/YALContextMenuTableView.m; sourceTree = ""; }; + ADD3EA0352B2B88D39CE711BB75D1CF7 /* PFCategoryLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCategoryLoader.m; path = Parse/Internal/PFCategoryLoader.m; sourceTree = ""; }; + AF6E8F23F7803ABA113C33B9104A62BB /* PFFileController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileController.m; path = Parse/Internal/File/Controller/PFFileController.m; sourceTree = ""; }; + AF9BC43D31ABEE63A34807EE8E39A020 /* PFPurchaseTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseTableViewCell.m; path = ParseUI/Classes/Cells/PFPurchaseTableViewCell.m; sourceTree = ""; }; + AFB8E8C021C6059DABB2D4B924F1B625 /* PFObjectSubclassInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassInfo.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h; sourceTree = ""; }; + B0617A0075488852BF4B46D4CDE39658 /* PFOfflineQueryLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryLogic.h; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h; sourceTree = ""; }; + B0A6262F542FEEB9CE1C80E8A789BA92 /* PFURLConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLConstructor.m; path = Parse/Internal/HTTPRequest/PFURLConstructor.m; sourceTree = ""; }; B0CE575CDDE0B1795BB8B88E0B49ACA0 /* POPDecayAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDecayAnimationInternal.h; path = pop/POPDecayAnimationInternal.h; sourceTree = ""; }; - B0D0D5C8FF6EA31C0E29554F03FFAE35 /* PFEncoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEncoder.m; path = Parse/Internal/PFEncoder.m; sourceTree = ""; }; - B0E75CCDD1A5217E3601BF092D5385C1 /* PFOfflineStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineStore.m; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m; sourceTree = ""; }; + B0EA4C607715F96A847858C64CCE55BA /* PFRESTObjectBatchCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectBatchCommand.h; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.h; sourceTree = ""; }; B0F7BCEE9A871E1193D694931FA31E17 /* POPDecayAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDecayAnimation.h; path = pop/POPDecayAnimation.h; sourceTree = ""; }; - B1483642455FE93A36C64B730F27BCD1 /* PFOperationSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOperationSet.h; path = Parse/Internal/Object/OperationSet/PFOperationSet.h; sourceTree = ""; }; - B1D6FB68F1851036506A1E965B20FBD5 /* PFPropertyInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo.m; sourceTree = ""; }; - B1E9EC0D78FBC6373DBD668B202BBA25 /* PFPushController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushController.m; path = Parse/Internal/Push/Controller/PFPushController.m; sourceTree = ""; }; - B2586CEB4DB20E7AED5EBFD3FB96B973 /* PFMutablePushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutablePushState.h; path = Parse/Internal/Push/State/PFMutablePushState.h; sourceTree = ""; }; + B1199EF39F8DBC2DE35587039E61FA8F /* PFAnonymousAuthenticationProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousAuthenticationProvider.m; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m; sourceTree = ""; }; + B20253C3CDBAF656A3F29BF038995DDC /* Parse-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Parse-dummy.m"; sourceTree = ""; }; + B2954F531D3634410AB8A04C01539733 /* Bolts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-prefix.pch"; sourceTree = ""; }; B330BCF969EF6189E02E10926FB95CED /* POPGeometry.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPGeometry.mm; path = pop/POPGeometry.mm; sourceTree = ""; }; - B332CC51A8213F3EF1C7A3FE399A5C2B /* PFACL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACL.h; path = Parse/PFACL.h; sourceTree = ""; }; - B3F7FC9A375F4CC184EF1CB84FFF2E2F /* PFRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState.h; path = Parse/Internal/Relation/State/PFRelationState.h; sourceTree = ""; }; - B58A5A84AAAEBE1A391E99E9CAED0FF2 /* PFMutableObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableObjectState.h; path = Parse/Internal/Object/State/PFMutableObjectState.h; sourceTree = ""; }; - B627B86FB20866D18CE3E2A40FF283B7 /* PFACLPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLPrivate.h; path = Parse/Internal/ACL/PFACLPrivate.h; sourceTree = ""; }; - B65D4C06593414E001B75B30C7A68F64 /* PFDefaultACLController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDefaultACLController.h; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h; sourceTree = ""; }; - B7C407A664499E7354D9C1CCDB113A59 /* PFQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryState.m; path = Parse/Internal/Query/State/PFQueryState.m; sourceTree = ""; }; - B7E18330D5E87E2825CE1B429D6F6693 /* PFObjectPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectPrivate.h; path = Parse/Internal/Object/PFObjectPrivate.h; sourceTree = ""; }; - B86F68BE12DD9BF16FA4EA2B8D7C6F99 /* pop.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = pop.xcconfig; sourceTree = ""; }; - B94497EF1A56D3F72FD2BA76060DF1EE /* PFACL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACL.m; path = Parse/PFACL.m; sourceTree = ""; }; - BA10EEFBDA4AD314FB6D71B9DBD76FB7 /* PFWeakValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFWeakValue.h; path = Parse/Internal/PFWeakValue.h; sourceTree = ""; }; + B332057FAD3ECEC8A1DEEE7976DAEF4B /* PFMultiProcessFileLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLock.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h; sourceTree = ""; }; + B3502383881063B9745DA4E5FCDAD557 /* PFOfflineQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryController.h; path = Parse/Internal/Query/Controller/PFOfflineQueryController.h; sourceTree = ""; }; + B3C01ABD047563B7C36F63413588D37D /* PFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFNetworkActivityIndicatorManager.m; path = Parse/PFNetworkActivityIndicatorManager.m; sourceTree = ""; }; + B3F156062F2234AE09635E3C21571CF9 /* ParseUIConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseUIConstants.h; path = ParseUI/Other/ParseUIConstants.h; sourceTree = ""; }; + B48FF50559AC780326EB5A9D270CFC96 /* PFProductsRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductsRequestHandler.h; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h; sourceTree = ""; }; + B58E5884403A0B1E1DCEB097E80C1CC5 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; + B63488E932EFD54B40EC5CEE1DF35B2A /* PFProduct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProduct.h; path = Parse/PFProduct.h; sourceTree = ""; }; + B663A2148474E7A773E5ED841039376B /* PFAnonymousUtils_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils_Private.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h; sourceTree = ""; }; + B663A4685CA2D02F8C82889CE250EC3E /* PFProductTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductTableViewController.h; path = ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h; sourceTree = ""; }; + B6D0112010753770C75E336FCAE568F9 /* PFRESTConfigCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTConfigCommand.h; path = Parse/Internal/Commands/PFRESTConfigCommand.h; sourceTree = ""; }; + B710F0B0D3B79B4BF2C0738F2D105DCB /* PFMutableACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableACLState.m; path = Parse/Internal/ACL/State/PFMutableACLState.m; sourceTree = ""; }; + B8AD011F3E16AB12739F99A789EF372D /* PFPinningObjectStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningObjectStore.m; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.m; sourceTree = ""; }; + B8ECBD88856AC04D71253C322B980822 /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; + B8F7ABB411DE6940B531BD2B00F7330B /* PFDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDecoder.h; path = Parse/Internal/PFDecoder.h; sourceTree = ""; }; + B98633046A5BC4D1F2317D116A1D909F /* PFPaymentTransactionObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h; sourceTree = ""; }; + B9CD69BEEB6AE7123CC13AD292A988E6 /* ParseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseManager.h; path = Parse/Internal/ParseManager.h; sourceTree = ""; }; + BA0A7EE195BFE6130879291F0291E4B8 /* PFCoreManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCoreManager.m; path = Parse/Internal/PFCoreManager.m; sourceTree = ""; }; + BA63322C80B2C171D02D6229D1144BCD /* PFActionButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActionButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h; sourceTree = ""; }; BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - BA733732E0D2D37C0A92D946DE2A9EEE /* PFKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeychainStore.h; path = Parse/Internal/PFKeychainStore.h; sourceTree = ""; }; - BA8D893893775B109603AF7A33CD563B /* PFURLSessionFileDownloadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionFileDownloadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m; sourceTree = ""; }; - BB019CE2BDFE6EC36FCD9993DB744EFA /* PFUserAuthenticationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationController.h; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h; sourceTree = ""; }; - BB51AB9AA27CE8D0A85E5690F23CF6EA /* PFCategoryLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCategoryLoader.h; path = Parse/Internal/PFCategoryLoader.h; sourceTree = ""; }; - BBEDFD1C6F661507D70B9C73268193B3 /* PFPushManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushManager.h; path = Parse/Internal/Push/Manager/PFPushManager.h; sourceTree = ""; }; - BBFE8A0106C591064C969ED096275D29 /* PFOfflineQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryController.h; path = Parse/Internal/Query/Controller/PFOfflineQueryController.h; sourceTree = ""; }; - BCC77513019B8BF9A882928F74C52424 /* PFSubclassing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSubclassing.h; path = Parse/PFSubclassing.h; sourceTree = ""; }; - BD2D7F17F9C540FBFE58E4DB0EEBDC9A /* libParse.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libParse.a; sourceTree = BUILT_PRODUCTS_DIR; }; - BE9F74FE3902C79E0394988E24194855 /* PFQueryUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryUtilities.m; path = Parse/Internal/Query/Utilities/PFQueryUtilities.m; sourceTree = ""; }; - BEAFE0D908EC855629B1121D957A354A /* ParseModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseModule.h; path = Parse/Internal/ParseModule.h; sourceTree = ""; }; + BC13F53A2D2D30BA403C7008DC9A67D8 /* PFCoreManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreManager.h; path = Parse/Internal/PFCoreManager.h; sourceTree = ""; }; + BC298249F77EBA7D15710FCCE11A79E4 /* Parse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse.h; path = Parse/Parse.h; sourceTree = ""; }; + BD91587414DE8AF4BDBCC85B1445B580 /* Parse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Parse.m; path = Parse/Parse.m; sourceTree = ""; }; + BE3E9F01B6629C15BB1B2DCB06D9F593 /* PFRESTObjectCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectCommand.h; path = Parse/Internal/Commands/PFRESTObjectCommand.h; sourceTree = ""; }; + BEB99F4555012D9359140EE13E67A2EF /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + BF23DA16C72B53A3FEA46DF36D46D7E5 /* PFSQLiteDatabaseResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseResult.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m; sourceTree = ""; }; + BF50874E9091DBBE43D936A9592CC9FA /* PFOperationSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOperationSet.m; path = Parse/Internal/Object/OperationSet/PFOperationSet.m; sourceTree = ""; }; BF59BC15D23E1E1912C8F334E7236813 /* Pods-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-acknowledgements.plist"; sourceTree = ""; }; - BF99C2FE0ABD09A876B4FDC3B73D693D /* PFAnalyticsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsController.h; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.h; sourceTree = ""; }; - BF9B1FD5D1E2441D018DF7EDDDC4A3FC /* PFObjectSubclassInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassInfo.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h; sourceTree = ""; }; - BFBC36D6FED37ED769BA66522F1A639F /* PFFieldOperationDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperationDecoder.m; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.m; sourceTree = ""; }; - C01AC5406A1FE996C23D44F2D1E54AE2 /* PFInstallationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationConstants.h; path = Parse/Internal/Installation/Constants/PFInstallationConstants.h; sourceTree = ""; }; + BFAF32F5BA704D364CF1127267C7D079 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; + BFC6FF836ED9A9F86CB846FAFE7E1591 /* PFOfflineStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineStore.m; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m; sourceTree = ""; }; C091E831068E3E504A40AC6932B39C87 /* FloatConversion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FloatConversion.h; path = pop/WebCore/FloatConversion.h; sourceTree = ""; }; + C0DC2D6010A3FAE98396FB45988CE381 /* PFFieldOperationDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperationDecoder.m; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.m; sourceTree = ""; }; C0DF3C83EBC5F7BF6DAAACEBD7D72791 /* POPAnimationEvent.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationEvent.mm; path = pop/POPAnimationEvent.mm; sourceTree = ""; }; - C124801645AB37C7712D483A5C87D83D /* PFLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogger.m; path = Parse/Internal/PFLogger.m; sourceTree = ""; }; - C1555BCE0D8C4B718BB72214683D3907 /* PFCloudCodeController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloudCodeController.h; path = Parse/Internal/CloudCode/PFCloudCodeController.h; sourceTree = ""; }; + C0FEB0FFE36A30B2C767E64706ADC708 /* PFPushController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushController.m; path = Parse/Internal/Push/Controller/PFPushController.m; sourceTree = ""; }; + C114B416CE301CC19DDA171508581D3D /* PFProduct.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProduct.m; path = Parse/PFProduct.m; sourceTree = ""; }; + C143EA6A9A0468B76361AA3F15901DE7 /* PFHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHash.h; path = Parse/Internal/PFHash.h; sourceTree = ""; }; + C153BA547DADCD957E58E3F674A38B65 /* PFPushManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushManager.m; path = Parse/Internal/Push/Manager/PFPushManager.m; sourceTree = ""; }; C1B6A53BFD919966B87CD6FBFD89CE1B /* POPAnimationExtras.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationExtras.h; path = pop/POPAnimationExtras.h; sourceTree = ""; }; C1E27C3CBB149C1873F6CDC55D998CE2 /* POPAnimationTracer.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationTracer.mm; path = pop/POPAnimationTracer.mm; sourceTree = ""; }; + C1E4A4665A4D0598F98C904BA74D0023 /* PFPurchase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchase.m; path = Parse/PFPurchase.m; sourceTree = ""; }; C24554FAA71D841BC3C0759DA37874AE /* POPSpringAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPSpringAnimation.mm; path = pop/POPSpringAnimation.mm; sourceTree = ""; }; - C3E92FDA0225F57156353438BB9F934B /* ContextMenu.iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ContextMenu.iOS-dummy.m"; sourceTree = ""; }; - C40DDFB915A319DD1CC8CD9340920EFF /* PFURLSessionJSONDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionJSONDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h; sourceTree = ""; }; - C452DCF65E6EEC6AD15BD77F01EDF779 /* PFInternalUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInternalUtils.h; path = Parse/Internal/PFInternalUtils.h; sourceTree = ""; }; - C4F300D4AA623B3DFFDF7971E2B5A614 /* PFProduct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProduct.h; path = Parse/PFProduct.h; sourceTree = ""; }; - C5560C46514764C06929B264B533F518 /* UIView+YALConstraints.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+YALConstraints.m"; path = "YALContextMenu/UIView+YALConstraints.m"; sourceTree = ""; }; + C3071E3D22EE4605A9D1686C5BF5D5CC /* PFEncoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEncoder.m; path = Parse/Internal/PFEncoder.m; sourceTree = ""; }; + C3CC50926D384450223E1B6B979F37A2 /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; + C44F75C85A9A302C874E89656C8698D9 /* PFMutableUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableUserState.h; path = Parse/Internal/User/State/PFMutableUserState.h; sourceTree = ""; }; + C4983034E61F27920F696B557867C7ED /* PFObjectConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectConstants.h; path = Parse/Internal/Object/Constants/PFObjectConstants.h; sourceTree = ""; }; + C49FFB322304F787EF6324233FD5FED6 /* PFPaymentTransactionObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPaymentTransactionObserver.m; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m; sourceTree = ""; }; + C4AD49FF201BDF487F9C08A8094C313D /* PFUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserController.h; path = Parse/Internal/User/Controller/PFUserController.h; sourceTree = ""; }; + C4F17209020621B18FBD52AD4DBDE0ED /* PFQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryController.h; path = Parse/Internal/Query/Controller/PFQueryController.h; sourceTree = ""; }; + C54E694252DA1DB712A3943ED8DD8E91 /* PFBaseState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBaseState.h; path = Parse/Internal/PFBaseState.h; sourceTree = ""; }; C560616DDF5273CF7C53EF72EA6ED45A /* POPDecayAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPDecayAnimation.mm; path = pop/POPDecayAnimation.mm; sourceTree = ""; }; - C5FE3CDD5FB245BC2913E868E9DE3995 /* PFRESTSessionCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTSessionCommand.h; path = Parse/Internal/Commands/PFRESTSessionCommand.h; sourceTree = ""; }; - C609AF7E1C4CAC8BDE38A1E28E64414A /* PFInstallationIdentifierStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationIdentifierStore.m; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m; sourceTree = ""; }; - C61F3C1B791FFC9E7C5ADE180684470E /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; - C7C65DD82B3A08F62D43E9DAC3B23880 /* PFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkActivityIndicatorManager.h; path = Parse/PFNetworkActivityIndicatorManager.h; sourceTree = ""; }; + C5B7DABE7188B760C1B68296FEDD6C36 /* PFConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfig.m; path = Parse/PFConfig.m; sourceTree = ""; }; + C5B91B4ACC467BB7DD2693398E122C60 /* PFResources.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFResources.h; path = ParseUI/Generated/PFResources.h; sourceTree = ""; }; + C6138626D3006D96CDB19611C6DCC8C0 /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperation.h; path = AFNetworking/AFHTTPRequestOperation.h; sourceTree = ""; }; + C626A77F47DF6852A4FA93130E79A6B9 /* PFImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImageView.m; path = ParseUI/Classes/Views/PFImageView.m; sourceTree = ""; }; + C6A4CE0524492ABA0B3CA3C2DC0F2FD8 /* PFImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImageCache.h; path = ParseUI/Classes/Internal/PFImageCache.h; sourceTree = ""; }; + C73A613165131696179D8F483D882AAD /* PFKeyValueCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache.h; sourceTree = ""; }; + C784B5A416372B680471AE16B2C5091C /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; + C8142B63079F5C9D23D801BDAEF7E750 /* PFObjectController_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController_Private.h; path = Parse/Internal/Object/Controller/PFObjectController_Private.h; sourceTree = ""; }; + C8AD607EE674B88ECA00DD66963675E0 /* PFCurrentUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentUserController.m; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.m; sourceTree = ""; }; + C8FF08518676F8E3A8870145DE231062 /* PFProductsRequestHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductsRequestHandler.m; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m; sourceTree = ""; }; + C929C5721E9C70B9CE81D9F6828EA6B0 /* PFCurrentInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentInstallationController.m; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m; sourceTree = ""; }; + C953E884E530A27F2630052EB09388EA /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; C9565C73D5D4BE79747E60DCF1557E71 /* POPAnimatableProperty.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimatableProperty.mm; path = pop/POPAnimatableProperty.mm; sourceTree = ""; }; - C9BD34A121ED46D7A11BF5ED82E5B876 /* PFEventuallyPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyPin.m; path = Parse/Internal/PFEventuallyPin.m; sourceTree = ""; }; - CA572C4AE94CB9AC2FF8EE80A7E1179F /* PFEventuallyQueue_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue_Private.h; path = Parse/Internal/PFEventuallyQueue_Private.h; sourceTree = ""; }; - CA70C152E8EBE75160C47A587C7EC00D /* PFMultiProcessFileLockController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLockController.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h; sourceTree = ""; }; - CAB37E3012ED80BEB1BCF0077E7E38F4 /* PFAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalytics.m; path = Parse/PFAnalytics.m; sourceTree = ""; }; - CB4444A178F9CEC2E097C90C7D351E7F /* PFRESTObjectCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectCommand.h; path = Parse/Internal/Commands/PFRESTObjectCommand.h; sourceTree = ""; }; - CBCE01FE706B02A990236BCCFB09B153 /* PFProduct+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFProduct+Private.h"; path = "Parse/Internal/Product/PFProduct+Private.h"; sourceTree = ""; }; - CBE1F1F92C05B5ADE677C606485BB75F /* PFReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFReachability.m; path = Parse/Internal/PFReachability.m; sourceTree = ""; }; - CC332C397ADA56AB76FB706A0ABF83E5 /* Parse-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-prefix.pch"; sourceTree = ""; }; - CCFA76D1938B2CCED5785C13FA4FC5B8 /* PFObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController.h; path = Parse/Internal/Object/Controller/PFObjectController.h; sourceTree = ""; }; - CDAC0B9AE144C31E2DE5AF0A4DB1EDC4 /* PFURLSessionCommandRunner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h; sourceTree = ""; }; - CDE463E6B9D1AF8E6AE850CD5E68849F /* PFObjectSubclassingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassingController.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h; sourceTree = ""; }; - CEB9D45B957B79F1459ABF1E81F01530 /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; - CF335AC7E0E6EE3DD820467124C2102D /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; - CF35E714DE566F845ECEDF6AE894C5F0 /* PFSessionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionController.m; path = Parse/Internal/Session/Controller/PFSessionController.m; sourceTree = ""; }; - CF46F6E5A7E52A35C89851DED33A2176 /* PFDateFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDateFormatter.m; path = Parse/Internal/PFDateFormatter.m; sourceTree = ""; }; - CF774A16F869C80126A81687EB1E85D6 /* libBolts.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBolts.a; sourceTree = BUILT_PRODUCTS_DIR; }; - CFC48C77C63A582B14A5B098E6FCF482 /* PFURLSessionFileDownloadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionFileDownloadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h; sourceTree = ""; }; - D0D0DD7229B595E60BA7D6C2A41C4B6B /* PFCommandURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandURLRequestConstructor.m; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m; sourceTree = ""; }; - D0E74CB04A2E39384A95EDA3500A04D2 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; - D15D922CCB9D2F0B65F44C7FBFE53EBC /* PFRelationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationPrivate.h; path = Parse/Internal/Relation/PFRelationPrivate.h; sourceTree = ""; }; - D244FD9C2061C46A05C67E3557A6D7A9 /* PFRESTPushCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTPushCommand.h; path = Parse/Internal/Commands/PFRESTPushCommand.h; sourceTree = ""; }; - D26D8AB91D60CAC4AF163A949239DE49 /* PFRelation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelation.h; path = Parse/PFRelation.h; sourceTree = ""; }; - D3E8D0F342FFF167540A96E017CCF674 /* PFFileState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState_Private.h; path = Parse/Internal/File/State/PFFileState_Private.h; sourceTree = ""; }; - D4186E5938E4D869A1267A20AC002113 /* PFConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfigController.h; path = Parse/Internal/Config/Controller/PFConfigController.h; sourceTree = ""; }; - D4EBEE47CEE4A7801385DB1D8C88383E /* PFKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeychainStore.m; path = Parse/Internal/PFKeychainStore.m; sourceTree = ""; }; + C9DD09269903183CC67B8C5718D9BE7F /* AFNetworking.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.xcconfig; sourceTree = ""; }; + CA6036733998FEC7AF7360C87DB6738A /* PFNetworkCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkCommand.h; path = Parse/Internal/PFNetworkCommand.h; sourceTree = ""; }; + CB79D9D2D0E90F473712185133F4D212 /* PFApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFApplication.m; path = Parse/Internal/PFApplication.m; sourceTree = ""; }; + CB9940C112FA6D7EA7892248876ABDAB /* PFQueryUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryUtilities.h; path = Parse/Internal/Query/Utilities/PFQueryUtilities.h; sourceTree = ""; }; + CD55CFADE2EA8A5AAEBD75427C3D61E6 /* PFRESTCloudCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCloudCommand.m; path = Parse/Internal/Commands/PFRESTCloudCommand.m; sourceTree = ""; }; + CDB88E53629AEC61BD55872FDB9CE291 /* PFLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogger.m; path = Parse/Internal/PFLogger.m; sourceTree = ""; }; + D04F197DB09C3BC16DC45B4A8D72FA58 /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; + D14EDFE8F7C3B1DA488AFF3322330189 /* PFObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObject.h; path = Parse/PFObject.h; sourceTree = ""; }; + D18BE6A197AA9130FCF14A206DF2BBF8 /* UIAlertView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAlertView+AFNetworking.m"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.m"; sourceTree = ""; }; + D19D83358D33DE6033AEAFDDAC6E86F1 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; + D2B7A1E4C1493C2A06A2D1E03C983348 /* PFAsyncTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAsyncTaskQueue.h; path = Parse/Internal/PFAsyncTaskQueue.h; sourceTree = ""; }; + D4EC2CF0CF3EC72C93972AF1037CEE94 /* PFQueryPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryPrivate.h; path = Parse/Internal/Query/PFQueryPrivate.h; sourceTree = ""; }; + D539673F1E79B36CCCABA2EF45E20C61 /* PFCloudCodeController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloudCodeController.h; path = Parse/Internal/CloudCode/PFCloudCodeController.h; sourceTree = ""; }; + D5666540285B20C577F0B2B80E9F8FF3 /* PFSQLiteDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabase.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m; sourceTree = ""; }; + D5C5B899FFF0B9AA572D06803767D21A /* UIView+YALConstraints.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+YALConstraints.h"; path = "YALContextMenu/UIView+YALConstraints.h"; sourceTree = ""; }; D5CE48778301C24CD288B08DDA441605 /* POPVector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPVector.h; path = pop/POPVector.h; sourceTree = ""; }; - D5CF558DFE9FECD0D4DAD9727F9E7447 /* PFMutableObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableObjectState.m; path = Parse/Internal/Object/State/PFMutableObjectState.m; sourceTree = ""; }; - D8AA77C187E180A556AF4ADA309BC0B6 /* PFOfflineObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineObjectController.m; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m; sourceTree = ""; }; - D8CEAB9CDED9C3CA1445D6F3DAF05029 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; - D93333F49B10A154028722630A69414C /* PFFieldOperationDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperationDecoder.h; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.h; sourceTree = ""; }; - D963AA70AF8A60F226D09FBC6225E686 /* PFThreadsafety.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFThreadsafety.h; path = Parse/Internal/ThreadSafety/PFThreadsafety.h; sourceTree = ""; }; - D973AF50D37829E5A629A80ED88FF2E9 /* PFRESTObjectBatchCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectBatchCommand.h; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.h; sourceTree = ""; }; - DA4157CE1B57DF0CDF63B24888DCEA61 /* PFObjectSubclassingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassingController.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m; sourceTree = ""; }; - DAC577DC0CB800AB728273F16E83046D /* ContextMenu.iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ContextMenu.iOS-prefix.pch"; sourceTree = ""; }; - DAD2B1AEAEEE3B6167AA69B21E00DE2E /* PFInternalUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInternalUtils.m; path = Parse/Internal/PFInternalUtils.m; sourceTree = ""; }; - DAF8AFF71E17239BC9D066B413214C0F /* PFPushUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushUtilities.m; path = Parse/Internal/Push/Utilites/PFPushUtilities.m; sourceTree = ""; }; - DBD87B92425DF4F2F580DDE78C400947 /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; - DD1568F7E2ED50F1C629DDF3D9F3020C /* PFUserAuthenticationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationDelegate.h; path = Parse/PFUserAuthenticationDelegate.h; sourceTree = ""; }; - DD2F94AB2074545E677D5F66F9D63121 /* PFPurchase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchase.h; path = Parse/PFPurchase.h; sourceTree = ""; }; - DD428B827A37AD34DF77CC5C561BCE0C /* PFPurchase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchase.m; path = Parse/PFPurchase.m; sourceTree = ""; }; - DE2DE7B62241FC17A59B0C930D7837B4 /* PFSQLiteDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h; sourceTree = ""; }; - DE3508684073BF9ED1EE176A805EE3FC /* libAFNetworking.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAFNetworking.a; sourceTree = BUILT_PRODUCTS_DIR; }; - DFE6FDE4C6292695F3EBEFE040B0685E /* PFURLSessionDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h; sourceTree = ""; }; - E0041782152C1ABC1F18B164311EAF2E /* PFObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState.h; path = Parse/Internal/Object/State/PFObjectState.h; sourceTree = ""; }; - E1129C74BCA89B5DEF89974B3EADEAF6 /* PFQueryUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryUtilities.h; path = Parse/Internal/Query/Utilities/PFQueryUtilities.h; sourceTree = ""; }; - E12E9AD26CFEFE56F770EBC8224F9542 /* PFEncoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEncoder.h; path = Parse/Internal/PFEncoder.h; sourceTree = ""; }; - E20D9CF29C188B71F5C9BA5C972A8960 /* PFRESTFileCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTFileCommand.h; path = Parse/Internal/Commands/PFRESTFileCommand.h; sourceTree = ""; }; - E2534618753A8E575CA58125DE04D03D /* PFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFNetworkActivityIndicatorManager.m; path = Parse/PFNetworkActivityIndicatorManager.m; sourceTree = ""; }; - E2F89C1AC67968BA35BD1123BE34D894 /* PFCurrentInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentInstallationController.m; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m; sourceTree = ""; }; - E424F4FC00D39BFE64948677EB2D53A7 /* PFCommandCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache.h; path = Parse/Internal/PFCommandCache.h; sourceTree = ""; }; - E4A624B26435247F139B091B03F95E5A /* PFMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMacros.h; path = Parse/Internal/PFMacros.h; sourceTree = ""; }; - E50C20130F417DFB11F5B3BD1EE46846 /* PFMutableQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableQueryState.m; path = Parse/Internal/Query/State/PFMutableQueryState.m; sourceTree = ""; }; - E58FC77B8AC9BB8CB123B072D0E7AD2F /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; - E6235BD1313049794F1B1DA7AB8B72BF /* PFPush.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPush.h; path = Parse/PFPush.h; sourceTree = ""; }; - E6F16A936B103DF9237ED50EBF4D8631 /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLConnectionOperation.m; path = AFNetworking/AFURLConnectionOperation.m; sourceTree = ""; }; - E73B966684C4350307ED9BFDFA142DF1 /* AFNetworking.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.xcconfig; sourceTree = ""; }; - E745CDD44F448B0BB657E770CFDCF27C /* PFFileManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileManager.m; path = Parse/Internal/PFFileManager.m; sourceTree = ""; }; + D5CFD22B6B783B1749ECB9CF5E7B3F48 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; + D62DD60CCADE4FE9E157BDFCA09E4AF9 /* PFProduct+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFProduct+Private.h"; path = "Parse/Internal/Product/PFProduct+Private.h"; sourceTree = ""; }; + D84A796DFAFE7A65F2CC3FC4135965FA /* PFLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocationManager.h; path = Parse/Internal/PFLocationManager.h; sourceTree = ""; }; + D87C3AF7D4265ED5B963562D05FC59A3 /* PFPurchase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchase.h; path = Parse/PFPurchase.h; sourceTree = ""; }; + D8A2AD1BBFF1D2E49DA33635F7DA0CED /* PFDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDevice.m; path = Parse/Internal/PFDevice.m; sourceTree = ""; }; + D8B6D0A282B1C743D20D46AA5A90FAA2 /* PFACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACLState.m; path = Parse/Internal/ACL/State/PFACLState.m; sourceTree = ""; }; + D979F925569BC22D42FF30FE4C67B4E3 /* Parse.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Parse.xcconfig; sourceTree = ""; }; + D9B406B9DEB4C367381A5F2CFFB79C50 /* PFOfflineQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryController.m; path = Parse/Internal/Query/Controller/PFOfflineQueryController.m; sourceTree = ""; }; + DB24BF0D72B82C099497AB0C90978809 /* PFQueryState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState_Private.h; path = Parse/Internal/Query/State/PFQueryState_Private.h; sourceTree = ""; }; + DB595F2F6890CAE924ABCEE56E4AFB35 /* PFURLSessionDataTaskDelegate_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h; sourceTree = ""; }; + DC12AC65C36202BAEC57DD2A910517F4 /* PFPropertyInfo_Runtime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo_Runtime.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m; sourceTree = ""; }; + DC8A2B438554DF6B068739EE717A22FE /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; + DCD942102BE4EB49DCAE5E51AD4B15A5 /* PFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkActivityIndicatorManager.h; path = Parse/PFNetworkActivityIndicatorManager.h; sourceTree = ""; }; + DD434440BCFF8363B180A308A01134D1 /* PFHTTPURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPURLRequestConstructor.h; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h; sourceTree = ""; }; + DE5961F550EA26C9E5B1FFD818E59DA0 /* PFURLSessionCommandRunner.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionCommandRunner.m; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m; sourceTree = ""; }; + DEE628E2803E756C9760B307B5FBB72B /* PFUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserController.m; path = Parse/Internal/User/Controller/PFUserController.m; sourceTree = ""; }; + DEE9D08357281B5F8C4E722920757E6E /* PFURLSessionCommandRunner_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h; sourceTree = ""; }; + DF33002FB4E1478B0C1EB61E8135377F /* PFCurrentConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentConfigController.m; path = Parse/Internal/Config/Controller/PFCurrentConfigController.m; sourceTree = ""; }; + DF5EBF3C8EC520B02503E0619DA6ED4F /* PFObjectConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectConstants.m; path = Parse/Internal/Object/Constants/PFObjectConstants.m; sourceTree = ""; }; + DFA86D2E23707A09D2F93F678490834F /* PFQueryUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryUtilities.m; path = Parse/Internal/Query/Utilities/PFQueryUtilities.m; sourceTree = ""; }; + DFAA12BE0272D8841BC6603590316A5F /* UIAlertView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAlertView+AFNetworking.h"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.h"; sourceTree = ""; }; + E059D288CF1F6EDC84FFF84CE3357D3D /* PFSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSession.m; path = Parse/PFSession.m; sourceTree = ""; }; + E13BB96D1F65A19C55EECC6F0A446A4A /* PFBase64Encoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBase64Encoder.h; path = Parse/Internal/PFBase64Encoder.h; sourceTree = ""; }; + E200601043129FF78BD9AA263E6D6F92 /* PFMutablePushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutablePushState.m; path = Parse/Internal/Push/State/PFMutablePushState.m; sourceTree = ""; }; + E29764F05A36CE457AAA261D1C743831 /* PFObjectPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectPrivate.h; path = Parse/Internal/Object/PFObjectPrivate.h; sourceTree = ""; }; + E2E5C54A183DC94106012E520E5E8234 /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperation.m; path = AFNetworking/AFHTTPRequestOperation.m; sourceTree = ""; }; + E326422DC27C985EE24D2C93B8E77654 /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; + E342A391C1DE18E3949C69CDFB08EDD8 /* PFMutableFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableFileState.m; path = Parse/Internal/File/State/PFMutableFileState.m; sourceTree = ""; }; + E34FBAF62EE3096BA751B8F644E4B4F5 /* PFLoadingView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLoadingView.m; path = ParseUI/Classes/Internal/Views/PFLoadingView.m; sourceTree = ""; }; + E5730E6F41E92311BA1BDA0005883220 /* PFRect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRect.m; path = ParseUI/Classes/Internal/Extensions/PFRect.m; sourceTree = ""; }; + E59AC106E3B217744D3C1E246D60A0B5 /* PFMulticastDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMulticastDelegate.m; path = Parse/Internal/PFMulticastDelegate.m; sourceTree = ""; }; + E636D9F080801F61C3A75CBF4036ED38 /* PFMultiProcessFileLock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLock.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m; sourceTree = ""; }; + E745D4E9E1D24B93FFDC0898348695CD /* PFObjectEstimatedData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectEstimatedData.m; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m; sourceTree = ""; }; + E7B363ADE0A6BB4421A31FC39C18726E /* PFPinningEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningEventuallyQueue.m; path = Parse/Internal/PFPinningEventuallyQueue.m; sourceTree = ""; }; + E7CCE0D3CB7C0207B26A209D5ED7DABD /* PFMultiProcessFileLockController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLockController.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m; sourceTree = ""; }; + E7DB34F9E5FDD05A6440D7DCD7C9C62A /* PFUserState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState_Private.h; path = Parse/Internal/User/State/PFUserState_Private.h; sourceTree = ""; }; + E7F561763E1088F225F61FF89B52790B /* PFSQLiteDatabaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseController.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h; sourceTree = ""; }; E85E0983DBE882A8009D0F7EAB591B91 /* POPAnimationRuntime.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationRuntime.mm; path = pop/POPAnimationRuntime.mm; sourceTree = ""; }; - E8FCE3D950703287AE285D63EEA38289 /* PFConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConstants.h; path = Parse/PFConstants.h; sourceTree = ""; }; - E90014A2B5A64CF0A01CA41D71769C7B /* PFObjectUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectUtilities.h; path = Parse/Internal/Object/Utilities/PFObjectUtilities.h; sourceTree = ""; }; - E97A297341B3E569BD3DEA54A611D6DF /* PFErrorUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFErrorUtilities.m; path = Parse/Internal/PFErrorUtilities.m; sourceTree = ""; }; - EA79AC3D10A54A6115A06F836846E4EB /* PFCloud.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloud.h; path = Parse/PFCloud.h; sourceTree = ""; }; - EAEF6A0ABE272D5803680B4298EB62D2 /* PFRESTCommand_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand_Private.h; path = Parse/Internal/Commands/PFRESTCommand_Private.h; sourceTree = ""; }; - EAFA435D26900861E36F1BAF155390C7 /* PFOfflineQueryLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryLogic.h; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h; sourceTree = ""; }; + E8BC86E8DE6DA9A9297FDF54AD60295D /* PFBase64Encoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBase64Encoder.m; path = Parse/Internal/PFBase64Encoder.m; sourceTree = ""; }; + E8E430A9D1E6AF764043FC4133BA6076 /* PFActivityIndicatorTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActivityIndicatorTableViewCell.h; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h; sourceTree = ""; }; + E92E033FF1B999DD90642F33822254A0 /* PFObjectLocalIdStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectLocalIdStore.m; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m; sourceTree = ""; }; + E9B523A267D0A750521AA26A8D80BC2E /* BoltsVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BoltsVersion.h; path = Bolts/Common/BoltsVersion.h; sourceTree = ""; }; + EA5338250BCA80817AD4E8F779E085E1 /* ParseUI-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ParseUI-prefix.pch"; sourceTree = ""; }; + EADEDEC26137844F1745D14A9238E700 /* PFPaymentTransactionObserver_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver_Private.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h; sourceTree = ""; }; + EB033CDD923230B1E43F21C7996F6649 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; + EB040EEF861D06E95A5414091D83C130 /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; EB56BE02F1B0412A41C9D9834B04BC30 /* POPSpringAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringAnimationInternal.h; path = pop/POPSpringAnimationInternal.h; sourceTree = ""; }; + EBDAD0FE6DE1A120548B3CFB0AA691CB /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLConnectionOperation.m; path = AFNetworking/AFURLConnectionOperation.m; sourceTree = ""; }; EC10F21A5E230A911C2C2E5082CDAE4B /* POPAnimationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationPrivate.h; path = pop/POPAnimationPrivate.h; sourceTree = ""; }; - ECA0CA78D651CA48D080363398697627 /* PFMutableUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableUserState.m; path = Parse/Internal/User/State/PFMutableUserState.m; sourceTree = ""; }; - ECBD824DA95D72A1DD329C331E1D9D09 /* PFLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocationManager.h; path = Parse/Internal/PFLocationManager.h; sourceTree = ""; }; + EC7948AA2D47B2FE0B1D838A6F03558D /* PFRESTCloudCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCloudCommand.h; path = Parse/Internal/Commands/PFRESTCloudCommand.h; sourceTree = ""; }; ECC48BF18D3BD01C21B65648709A45D6 /* POPAnimator.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimator.mm; path = pop/POPAnimator.mm; sourceTree = ""; }; - ECE13A0CEBDF1FFEEF6A3A9D07298478 /* PFMutableRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableRelationState.h; path = Parse/Internal/Relation/State/PFMutableRelationState.h; sourceTree = ""; }; - ED172D7F5B84203E7C6617EC01D187F2 /* PFCurrentObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentObjectControlling.h; path = Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h; sourceTree = ""; }; + ED0D5194B5F3554C0BC8F95F23872AF5 /* PFImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImageCache.m; path = ParseUI/Classes/Internal/PFImageCache.m; sourceTree = ""; }; ED596D85957A49EC6092EC8EC38FCE49 /* POPAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationInternal.h; path = pop/POPAnimationInternal.h; sourceTree = ""; }; - EDB35C20F0111B6D8B6548B3DA6BA7CD /* pop-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "pop-prefix.pch"; sourceTree = ""; }; - EE8606221826FA5909EFFA2016DEE26C /* PFAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics.h; path = Parse/PFAnalytics.h; sourceTree = ""; }; - EF64AAF633AE4BDB30247D6A4090B89C /* PFRelationState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState_Private.h; path = Parse/Internal/Relation/State/PFRelationState_Private.h; sourceTree = ""; }; - F0662D5C0759804552360A67D1BDFBA0 /* PFUserConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserConstants.m; path = Parse/Internal/User/Constants/PFUserConstants.m; sourceTree = ""; }; - F08E0A9E75FBD4FAACDB3C8A68081A32 /* BFTask+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Private.m"; path = "Parse/Internal/BFTask+Private.m"; sourceTree = ""; }; - F0959918976A05003B1E7FB37A8F8749 /* Bolts-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Bolts-Private.xcconfig"; sourceTree = ""; }; + ED6A84A6701F1DE42F2C5E48FECA156A /* PFEncoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEncoder.h; path = Parse/Internal/PFEncoder.h; sourceTree = ""; }; + ED78E3031E30DEAD64E709DC1A22E2B9 /* PFPrimaryButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPrimaryButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.m; sourceTree = ""; }; + EEB7662126C52466C21D904730876C37 /* PFRESTUserCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTUserCommand.h; path = Parse/Internal/Commands/PFRESTUserCommand.h; sourceTree = ""; }; + EEBDD515AD0E2563F96DA9C03BF533EC /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + EFA961715877278EBB371380F09E1ED9 /* PFPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPin.h; path = Parse/Internal/LocalDataStore/Pin/PFPin.h; sourceTree = ""; }; + EFE0EDA51288CA64BD5BA18BDA07C4F3 /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; + F07D611830E80BB5B0864D91BA277C6F /* PFPushManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushManager.h; path = Parse/Internal/Push/Manager/PFPushManager.h; sourceTree = ""; }; + F093D017EB5E2628C1BB5303359E94D4 /* PFCommandRunning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunning.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.h; sourceTree = ""; }; + F0B32275A18A39752E1C36A626FA5755 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; F0B4105C7EE2DA010EA4746E79138C7C /* POPVector.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPVector.mm; path = pop/POPVector.mm; sourceTree = ""; }; - F0F3A2FA993D77CC93EA7FCA0571B6E3 /* PFLocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLocationManager.m; path = Parse/Internal/PFLocationManager.m; sourceTree = ""; }; - F0FF6176EC466320C2C4D25100A1B61E /* PFObject+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFObject+Subclass.h"; path = "Parse/PFObject+Subclass.h"; sourceTree = ""; }; + F0FD07B829A861446380687433E154A5 /* PFObjectFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCodingLogic.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h; sourceTree = ""; }; + F12EF319251CA509AE6922D4497B8F33 /* PFObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObject.m; path = Parse/PFObject.m; sourceTree = ""; }; + F13E8D0BBF19E5AA3F8AC5D420158C3B /* PFInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationController.m; path = Parse/Internal/Installation/Controller/PFInstallationController.m; sourceTree = ""; }; + F15F2C338757D315D1E60DC9FE07FB63 /* PFObjectUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectUtilities.m; path = Parse/Internal/Object/Utilities/PFObjectUtilities.m; sourceTree = ""; }; + F267020507CB007123E41D8CC71685A4 /* PFRelationState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState_Private.h; path = Parse/Internal/Relation/State/PFRelationState_Private.h; sourceTree = ""; }; + F2BD4643944F164D81A1D842EF1D5D6D /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; + F304EBA667E0521CC244EB0ED7942C62 /* PFObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectController.m; path = Parse/Internal/Object/Controller/PFObjectController.m; sourceTree = ""; }; F3A985A006B0CCD0116D8FC53C4D1834 /* POPAction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAction.h; path = pop/POPAction.h; sourceTree = ""; }; - F3FCAEE7ACA390A41ACE7637EA5338AE /* PFQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryController.m; path = Parse/Internal/Query/Controller/PFQueryController.m; sourceTree = ""; }; - F48EC1FB45579CEBC6000F723C5E081B /* PFPurchaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseController.h; path = Parse/Internal/Purchase/Controller/PFPurchaseController.h; sourceTree = ""; }; + F485E3D70BC15CD0368944C76A7C8C94 /* PFConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConstants.m; path = Parse/PFConstants.m; sourceTree = ""; }; F54B1AE39CAF0CA846C1C729B033E047 /* POPBasicAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPBasicAnimation.mm; path = pop/POPBasicAnimation.mm; sourceTree = ""; }; - F6357CB5A05AA7E18DC9505CDB7B5CE8 /* PFJSONSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFJSONSerialization.m; path = Parse/Internal/PFJSONSerialization.m; sourceTree = ""; }; + F574FA2B21A697A3966DB97D2487756D /* PFURLSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h; sourceTree = ""; }; + F59ECC8674FE3D5A108F47F1651EFE1D /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; + F5AF10611B8227D5F09B59D1B5009CBD /* PFImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImageView.h; path = ParseUI/Classes/Views/PFImageView.h; sourceTree = ""; }; + F5BE0E1F79B3E689886177D3048B7118 /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; + F5F39F11949B1AF48CEC2977D2EB2C6C /* PFPushPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushPrivate.h; path = Parse/Internal/Push/PFPushPrivate.h; sourceTree = ""; }; + F7178AAEC5FB77818382182E9CDDDB69 /* PFRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelationState.m; path = Parse/Internal/Relation/State/PFRelationState.m; sourceTree = ""; }; + F77C74B9A3B538B0EB997559E6CF16D8 /* PFRESTFileCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTFileCommand.m; path = Parse/Internal/Commands/PFRESTFileCommand.m; sourceTree = ""; }; F81E8633F1E784423FE8B9BE16D38981 /* POPPropertyAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPPropertyAnimation.h; path = pop/POPPropertyAnimation.h; sourceTree = ""; }; - F9A596AB40BA679CB6E7CAFF9C12420F /* PFCachedQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCachedQueryController.m; path = Parse/Internal/Query/Controller/PFCachedQueryController.m; sourceTree = ""; }; - FA74881F0C5E486DA753412D3B49338C /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+AFNetworking.m"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.m"; sourceTree = ""; }; - FB0347B267799D3314B6438A04D898BF /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; - FB46E4BC6BAC7355C701C95033BF325F /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; - FC0150E534DA14510CC9BC5D0C1AFFB3 /* ParseInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseInternal.h; path = Parse/Internal/ParseInternal.h; sourceTree = ""; }; - FC9971E4E70ED25A33B370FAEA88A589 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; - FCA0B925A9AF72339A9B4292607E97C8 /* Parse.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Parse.xcconfig; sourceTree = ""; }; - FD826E93D8E3CA261C02B951A6F9751D /* PFPropertyInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo.h; sourceTree = ""; }; - FE27C4E5599C93B42BFE6AFD312AC39A /* PFACLState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState_Private.h; path = Parse/Internal/ACL/State/PFACLState_Private.h; sourceTree = ""; }; - FEC012E8559514CD5FDA778785F7234B /* PFCloudCodeController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloudCodeController.m; path = Parse/Internal/CloudCode/PFCloudCodeController.m; sourceTree = ""; }; - FF3530F7B69DD859647B6416F1A85C73 /* PFFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState.h; path = Parse/Internal/File/State/PFFileState.h; sourceTree = ""; }; - FF3D2A57C25C1CECF52F0872DBB55F05 /* PFInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationController.h; path = Parse/Internal/Installation/Controller/PFInstallationController.h; sourceTree = ""; }; - FF6B3C0F9FB537B2DB4C17A15E8F06D2 /* PFOfflineStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineStore.h; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h; sourceTree = ""; }; - FF7D93CF68584FFA70133B196EFB59F0 /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; - FFD183F4D915B996DC61B082E5317000 /* PFSQLiteDatabaseResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseResult.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h; sourceTree = ""; }; - FFE3BF2FE5A767CB3A9F0B32672156AB /* PFWeakValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFWeakValue.m; path = Parse/Internal/PFWeakValue.m; sourceTree = ""; }; - FFEA133F46FCCEC9897A623F3336EC38 /* Parse_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse_Private.h; path = Parse/Internal/Parse_Private.h; sourceTree = ""; }; + F88BA5C9F0C3B3EC0FF6EC134DFC39FC /* PFInstallationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationConstants.h; path = Parse/Internal/Installation/Constants/PFInstallationConstants.h; sourceTree = ""; }; + F8F57FE2C22B99C8E801465770A4BDEB /* PFConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig.h; path = Parse/PFConfig.h; sourceTree = ""; }; + FA171AFF7FEDD9A1B39B38C3FE2E05D0 /* PFRelationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationPrivate.h; path = Parse/Internal/Relation/PFRelationPrivate.h; sourceTree = ""; }; + FA65C52649C85A7646474D735E22867B /* PFPinningObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningObjectStore.h; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.h; sourceTree = ""; }; + FB33D15C14AB12162121261B2BA67FCC /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; + FBEAAECD3B1ABCA0ECC42C1F71EA1389 /* PFFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileState.m; path = Parse/Internal/File/State/PFFileState.m; sourceTree = ""; }; + FD2FADA1376E997E564678D188467245 /* PFInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallation.m; path = Parse/PFInstallation.m; sourceTree = ""; }; + FD3002E7639123E521B9A5AA0109D177 /* PFFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile.h; path = Parse/PFFile.h; sourceTree = ""; }; + FD68AE58291EBC6F2D37ECA9677D081F /* PFObjectLocalIdStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectLocalIdStore.h; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h; sourceTree = ""; }; + FDE35452BF4B80CB28ADE963A9F8CF1C /* PFTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTableViewCell.h; path = ParseUI/Classes/Cells/PFTableViewCell.h; sourceTree = ""; }; + FEAD761469117CF410C9357452E0C1E8 /* PFSessionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionController.m; path = Parse/Internal/Session/Controller/PFSessionController.m; sourceTree = ""; }; + FEC20F084AA6BBE872B8010536D7FA8F /* PFCurrentUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentUserController.h; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.h; sourceTree = ""; }; + FED6BB0FA8302D839BF078961698B2F2 /* PFUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserState.m; path = Parse/Internal/User/State/PFUserState.m; sourceTree = ""; }; + FF65DA49F2D090C5B8833FE5813520D3 /* PFPropertyInfo_Runtime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Runtime.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h; sourceTree = ""; }; + FFFF7D1C162E52CA7DC9306CA29F0542 /* PFUserAuthenticationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationDelegate.h; path = Parse/PFUserAuthenticationDelegate.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 23364613FB0830F19B97359477AA117C /* Frameworks */ = { + 56A844AA177010E838BCF58676D0E939 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 39508B096050C3D476E0601B62A67570 /* Foundation.framework in Frameworks */, + 3FE2CD905A0D90E675C92E2800E03D9E /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4A3A889F28618A29FB5570CB0D7FF3F5 /* Frameworks */ = { + 7830DB58A33F865C6300AC70A81DADEB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7AA7CBCE858B7750EDE2B738DBC844E0 /* Foundation.framework in Frameworks */, + 73249C3AEC5F6FBCC42816D82B75E8CB /* Foundation.framework in Frameworks */, + E993028DC077D473F7EA1FC719481A06 /* QuartzCore.framework in Frameworks */, + 631A38314C1CB0D525DBFE1B3979FFC6 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 79D6AFC8C82330655C0BAB54399B5D2C /* Frameworks */ = { + 8C45497CBD83A66C8FBF1289DF39CE3D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 99B1982B53FDC71250D05FB8D0AC2C41 /* CoreGraphics.framework in Frameworks */, - E7E1B3EC902FD50B6643939B83B1E678 /* Foundation.framework in Frameworks */, - 364E56F74AFA751A33C35FFD3FCA4EC8 /* MobileCoreServices.framework in Frameworks */, - C453240E137D151B7692C7F7F2061B9F /* Security.framework in Frameworks */, - 4F4F44F87B9F2B6059549A42131F2930 /* SystemConfiguration.framework in Frameworks */, + 2AD822A4C6DD9CA6D499CF6955198F4A /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 81EBEBB48DB0F24CCEE22EC96C01C619 /* Frameworks */ = { + BE4E00E494DAADAB32FC91947A9C4C34 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 67674A2B768D1BFF618FE2F7DAF24321 /* AudioToolbox.framework in Frameworks */, - 3C76079F931B8D254646B65609456C1C /* CFNetwork.framework in Frameworks */, - 6F3AA29F68F856746B4055983C6BF793 /* CoreGraphics.framework in Frameworks */, - 307DC92332AA8387F0ED533660A7A2DF /* CoreLocation.framework in Frameworks */, - CF7A23F2E61E57A9F6E76E358E956306 /* Foundation.framework in Frameworks */, - 0153E7B72CC1F58001A1FB4CA726D5C8 /* QuartzCore.framework in Frameworks */, - F072D26ABA5162A0D5B098FC2773092E /* Security.framework in Frameworks */, - AFC728CC114630A6E88C55D3423F5B35 /* StoreKit.framework in Frameworks */, - 2B08C89BCB6F8CDE246F90E71C343694 /* SystemConfiguration.framework in Frameworks */, + 23C8801C4FC1879BFD10C66519E8FBCE /* CoreGraphics.framework in Frameworks */, + EA3F03EA5543BBAC23622F4231C4B2FA /* Foundation.framework in Frameworks */, + 7546300864313C92648D4059DFECCDB6 /* MobileCoreServices.framework in Frameworks */, + 215DDEFDDA46EDCB2DB0422E1D786A48 /* Security.framework in Frameworks */, + AF4416293C55E6F5EE37137366C205E9 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8C45497CBD83A66C8FBF1289DF39CE3D /* Frameworks */ = { + BE56713A4BA312E0B550D7362BFCD017 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2AD822A4C6DD9CA6D499CF6955198F4A /* Foundation.framework in Frameworks */, + C732C19FE5AF8456089C53D44C9D5083 /* AudioToolbox.framework in Frameworks */, + 19FB97F0B4D1078303BA9CC4B45321D2 /* CFNetwork.framework in Frameworks */, + 49B176E9AAF9D480484BE109CBFF6145 /* CoreGraphics.framework in Frameworks */, + E6481D33FA2411794419C7EE8CD34812 /* CoreLocation.framework in Frameworks */, + 195DCB567D8AFBBEA789010D114F3D67 /* Foundation.framework in Frameworks */, + 0F1595A3835898594683BEBD06A0B51E /* QuartzCore.framework in Frameworks */, + EF5F09BAC78E09B518F7B457FE84E8E5 /* Security.framework in Frameworks */, + 907D70C1FCE8B26CFEF78E0CF9CE2558 /* StoreKit.framework in Frameworks */, + 197B2980E982F1D819677364F960ED86 /* SystemConfiguration.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C40C02E318305E3DC56157DBE2F7A464 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 06234D8D97C5FE672D22D23B87092CA5 /* CoreGraphics.framework in Frameworks */, + DCE5DC8AC5E87246A7B78770C93B750B /* Foundation.framework in Frameworks */, + A402A5079EC4EF4608D6B48C42F41568 /* QuartzCore.framework in Frameworks */, + 6DD5CE6DA657DA83DAD8D51453FF4E57 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - E7338E47FCC5A3CEF6E7565747FBD02C /* Frameworks */ = { + F807D6D84FA47F43900E9D5428BFA19B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 809B3785EA647CC67C699D8FEBB7461F /* Foundation.framework in Frameworks */, - 2802861D952EDBB98D3D81BAFDEBC041 /* QuartzCore.framework in Frameworks */, - 0BE6F472A9E14DECF3CC4B2AC719A807 /* UIKit.framework in Frameworks */, + EB2B8E80042F57D2A30B291CA14480C8 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1871510231A7BF05CD4E00BA2C29A9C6 /* UIKit */ = { + 02DC75DFC7A4F83A34208DF25798A845 /* Reachability */ = { isa = PBXGroup; children = ( - FF7D93CF68584FFA70133B196EFB59F0 /* AFNetworkActivityIndicatorManager.h */, - 41A069B9AF3C8F611F76F20326AB035E /* AFNetworkActivityIndicatorManager.m */, - C61F3C1B791FFC9E7C5ADE180684470E /* UIActivityIndicatorView+AFNetworking.h */, - 1A207317F4EF6A614BE7034DE5F3A9E9 /* UIActivityIndicatorView+AFNetworking.m */, - 70A550454DC97E123E16BD631BDAD95C /* UIAlertView+AFNetworking.h */, - 512576519C7D60E088B9946D68C2893B /* UIAlertView+AFNetworking.m */, - 39A27D94EB41AD237B4F4E722852F9B6 /* UIButton+AFNetworking.h */, - FB46E4BC6BAC7355C701C95033BF325F /* UIButton+AFNetworking.m */, - E58FC77B8AC9BB8CB123B072D0E7AD2F /* UIImage+AFNetworking.h */, - 285AE108BCA0C7BACB4D927E8D1F8665 /* UIImageView+AFNetworking.h */, - FC9971E4E70ED25A33B370FAEA88A589 /* UIImageView+AFNetworking.m */, - 4DDA8143D2C09DF9986817461C4DD498 /* UIKit+AFNetworking.h */, - 814B6E4C1E3AEC20607C2A43AADF132B /* UIProgressView+AFNetworking.h */, - A72A7753E28C0B037F3759A7CB7DC9CB /* UIProgressView+AFNetworking.m */, - A6EBD847848C1C85F961433CE4F102A3 /* UIRefreshControl+AFNetworking.h */, - 8F189D28F4E7A0D39192B35D412642BA /* UIRefreshControl+AFNetworking.m */, - 1E08E20DF9125F146349FA765648DCA3 /* UIWebView+AFNetworking.h */, - FA74881F0C5E486DA753412D3B49338C /* UIWebView+AFNetworking.m */, + D5CFD22B6B783B1749ECB9CF5E7B3F48 /* AFNetworkReachabilityManager.h */, + 92D3CB661DEB61F5FF0B840AB6BD7FDD /* AFNetworkReachabilityManager.m */, ); - name = UIKit; + name = Reachability; sourceTree = ""; }; - 343CC481EBFBA9EC3DCCBF88496BCB7E /* NSURLConnection */ = { + 0A35C5F1675B9377306ECAC57658FE06 /* Support Files */ = { isa = PBXGroup; children = ( - A6F04B61FAF09E9538B3AF6FD9536DC4 /* AFHTTPRequestOperation.h */, - 994A5F73DF6BF6840DED92DDE2C12AC6 /* AFHTTPRequestOperation.m */, - 202A2922E63631CD23C09430889F7248 /* AFHTTPRequestOperationManager.h */, - 7C8DC7559A9E804216A7455574ACC2FA /* AFHTTPRequestOperationManager.m */, - 8A9EB6D7E4926B7E034816F709F1F518 /* AFURLConnectionOperation.h */, - E6F16A936B103DF9237ED50EBF4D8631 /* AFURLConnectionOperation.m */, + 07DD486CA0D467F3E4B0FA3AFB78B671 /* ContextMenu.iOS.xcconfig */, + 21565D1D07AD78BD3FD76735ADC39994 /* ContextMenu.iOS-Private.xcconfig */, + 9E7E875CE34251F7D08C0A56A3B8DF0D /* ContextMenu.iOS-dummy.m */, + 81E5DF449A484A01D0D5D2D79856C74B /* ContextMenu.iOS-prefix.pch */, ); - name = NSURLConnection; + name = "Support Files"; + path = "../Target Support Files/ContextMenu.iOS"; sourceTree = ""; }; - 44B2BD7E350527D031DAEA225965006A /* Reachability */ = { + 0D702677028DE77B5F98109E6E9A03F7 /* NSURLSession */ = { isa = PBXGroup; children = ( - 411AD8B8B53F6CAF9198BBBBB07AC033 /* AFNetworkReachabilityManager.h */, - A2C302E4C6109CA0666CE25D782C9766 /* AFNetworkReachabilityManager.m */, + 2DF1625F3E851C7EB8E2C8E0423F22E8 /* AFHTTPSessionManager.h */, + F0B32275A18A39752E1C36A626FA5755 /* AFHTTPSessionManager.m */, + AA4A0414EB82636A5445DB1B24ECFE5B /* AFURLSessionManager.h */, + 59F9FF5E0E7F71609087AFEB003C5979 /* AFURLSessionManager.m */, ); - name = Reachability; + name = NSURLSession; sourceTree = ""; }; - 4A3B2BF0C2CE1DB37AB68EDF92FD44AB /* Support Files */ = { + 1088A147F4A4DB5B1AB0A3782F770EF4 /* Support Files */ = { isa = PBXGroup; children = ( - FCA0B925A9AF72339A9B4292607E97C8 /* Parse.xcconfig */, - 4743EB53C73E4B52C1EC84395BD476F5 /* Parse-Private.xcconfig */, - 73DEF6839984D1F48ACE568B6EC2E5EF /* Parse-dummy.m */, - CC332C397ADA56AB76FB706A0ABF83E5 /* Parse-prefix.pch */, + 62BE8CADD4670ADEDF5FD8EF8072C87F /* pop.xcconfig */, + 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */, + 59B3FD41DEC22C5891C9B83C27BC25E0 /* pop-dummy.m */, + 2BA1448D29C364710AC0CCAC65063979 /* pop-prefix.pch */, ); name = "Support Files"; - path = "../Target Support Files/Parse"; + path = "../Target Support Files/pop"; + sourceTree = ""; + }; + 200225903789300BB00A2889A4437CE8 /* Support Files */ = { + isa = PBXGroup; + children = ( + 41E4EF38F3F42973C09F8820315F75C3 /* Bolts.xcconfig */, + 035B567BBDDB9DF3B6541DFC52B519A0 /* Bolts-Private.xcconfig */, + 0769DF4654091947ABDD725BB8D5A8EB /* Bolts-dummy.m */, + B2954F531D3634410AB8A04C01539733 /* Bolts-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/Bolts"; sourceTree = ""; }; - 58A31A01D078FCF8E66D5353FA341FA2 /* Resources */ = { + 23AE72B6B473935D6C17CA1B5CE6EBD0 /* Resources */ = { isa = PBXGroup; children = ( - 10C1CF41ACFAC3F0E71569AE1A84C121 /* en.lproj */, + 5ECDB4A3D81CD22761B3E657A9193AE7 /* en.lproj */, ); name = Resources; sourceTree = ""; }; - 70D08BD050FBEDBEF01649A778D854ED /* NSURLSession */ = { + 27C4DE13C26F320CD386E4DA6D6716B8 /* UIKit */ = { isa = PBXGroup; children = ( - 0F53F9E343FFBC0260E05A6277C25495 /* AFHTTPSessionManager.h */, - 51740A0EDDF3B04E8A46D98B3807D440 /* AFHTTPSessionManager.m */, - 2B6673C9F7E97CEA6C3B3B57C906C095 /* AFURLSessionManager.h */, - 5583C012407DD3D86BE591291FD5B40E /* AFURLSessionManager.m */, + F2BD4643944F164D81A1D842EF1D5D6D /* AFNetworkActivityIndicatorManager.h */, + F5BE0E1F79B3E689886177D3048B7118 /* AFNetworkActivityIndicatorManager.m */, + DC8A2B438554DF6B068739EE717A22FE /* UIActivityIndicatorView+AFNetworking.h */, + C784B5A416372B680471AE16B2C5091C /* UIActivityIndicatorView+AFNetworking.m */, + DFAA12BE0272D8841BC6603590316A5F /* UIAlertView+AFNetworking.h */, + D18BE6A197AA9130FCF14A206DF2BBF8 /* UIAlertView+AFNetworking.m */, + EFE0EDA51288CA64BD5BA18BDA07C4F3 /* UIButton+AFNetworking.h */, + 7F71593AE89CAD970579B80D110C1984 /* UIButton+AFNetworking.m */, + 5A4C38992478C648D81E01A7031B5825 /* UIImage+AFNetworking.h */, + 668B269657719A728AC245C01A2C2A70 /* UIImageView+AFNetworking.h */, + D19D83358D33DE6033AEAFDDAC6E86F1 /* UIImageView+AFNetworking.m */, + A2321BBEB7A3CF093F1CD973DD968164 /* UIKit+AFNetworking.h */, + 6BF9666E63A77CFD64FC53F88BEB02F8 /* UIProgressView+AFNetworking.h */, + D04F197DB09C3BC16DC45B4A8D72FA58 /* UIProgressView+AFNetworking.m */, + A2F55850F1341E91769F563950DFBC38 /* UIRefreshControl+AFNetworking.h */, + 8F403ED31C60BFC3D4DF66EECD5E4677 /* UIRefreshControl+AFNetworking.m */, + 5AC474A01014BDC025F0266CE0B033B8 /* UIWebView+AFNetworking.h */, + 4F1BE91D0670897DB911C802F6BB70AA /* UIWebView+AFNetworking.m */, ); - name = NSURLSession; + name = UIKit; sourceTree = ""; }; - 748691C91C2E3A5C306BD96057F66CC9 /* Bolts */ = { + 2F8332C2B83A463D42D1B98C775DFC06 /* Tasks */ = { isa = PBXGroup; children = ( - FA527DA126D49BE2A84BEFE3B6068EF2 /* Support Files */, - 845B3317FB451DB091F4A240F9C6D658 /* Tasks */, + EB040EEF861D06E95A5414091D83C130 /* BFCancellationToken.h */, + 3E8BC26F535860ADEF8FB368E68DF289 /* BFCancellationToken.m */, + 4E6F1EDB836DC6604BE100E89A63E970 /* BFCancellationTokenRegistration.h */, + 89AB91AE1EA155F70C6048F5E3BC2CEB /* BFCancellationTokenRegistration.m */, + 58F6CBB7D71F74651AC7F84ABC410E0C /* BFCancellationTokenSource.h */, + 14A057986B01966A11C6CB28EB5A4A94 /* BFCancellationTokenSource.m */, + 66EEF19A1E2FD56ED08CB4BD7CC541D7 /* BFDefines.h */, + C3CC50926D384450223E1B6B979F37A2 /* BFExecutor.h */, + 296225BCAEC1922B0211398A744BC075 /* BFExecutor.m */, + 80A12591CE5C8F207400FC6781F1683E /* BFTask.h */, + FB33D15C14AB12162121261B2BA67FCC /* BFTask.m */, + C953E884E530A27F2630052EB09388EA /* BFTaskCompletionSource.h */, + 7EEEA0671CACE4C69BF00921C419D1C8 /* BFTaskCompletionSource.m */, + 622EE1BBB499496DBDDE988CE4D0F947 /* Bolts.h */, + 46CD3BC9266CF5D1475B6AF46C8B7E7C /* Bolts.m */, + E9B523A267D0A750521AA26A8D80BC2E /* BoltsVersion.h */, ); - path = Bolts; + name = Tasks; sourceTree = ""; }; - 7BD6D8170D87526BD20EC14D6EF61666 /* Security */ = { + 400B87487B883E2FBF3BA1A84CBD5001 /* Support Files */ = { isa = PBXGroup; children = ( - 52808B026D92DB8F0DCCBCA2EE24FEEF /* AFSecurityPolicy.h */, - D8CEAB9CDED9C3CA1445D6F3DAF05029 /* AFSecurityPolicy.m */, + D979F925569BC22D42FF30FE4C67B4E3 /* Parse.xcconfig */, + A89DC1C62077920038FC9E70EC43406F /* Parse-Private.xcconfig */, + B20253C3CDBAF656A3F29BF038995DDC /* Parse-dummy.m */, + 1912D51690BFB2430D2FC6F89935CD27 /* Parse-prefix.pch */, ); - name = Security; + name = "Support Files"; + path = "../Target Support Files/Parse"; sourceTree = ""; }; - 7DB346D0F39D3F0E887471402A8071AB = { + 4427CCC45CA8D857347960D5AA5A77C5 /* Pods */ = { isa = PBXGroup; children = ( - BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */, - EB57DDB3388FBC701046A1E93218737F /* Frameworks */, - 925A7ADD720C420997500F47DF7BAB59 /* Pods */, - CCA510CFBEA2D207524CDA0D73C3B561 /* Products */, - D2411A5FE7F7A004607BED49990C37F4 /* Targets Support Files */, + AE1FCC8648F4384498D2CF5B7F32DAAA /* AFNetworking */, + DDE689B6B09170B803B77F9EB078E1CC /* Bolts */, + B6564B7B05E0D234CDEE562117C5EBF9 /* ContextMenu.iOS */, + 979EFB6D9DB1886486B07494CC621CA9 /* Parse */, + DB950EF338A1419E0F336CF98E3D2AC9 /* ParseUI */, + E057C2EB9A740CE736968F80830BAC47 /* pop */, ); + name = Pods; sourceTree = ""; }; - 845B3317FB451DB091F4A240F9C6D658 /* Tasks */ = { + 560364AB93E50BBEF4B33AC759A5F066 /* NSURLConnection */ = { isa = PBXGroup; children = ( - 754C6873E010FF768376E458C1EA6449 /* BFCancellationToken.h */, - 400935A9AE97EE38E7C59CBBD474FA32 /* BFCancellationToken.m */, - 0D7C31A8D9DC68245949CD79BD5AD586 /* BFCancellationTokenRegistration.h */, - AAAE696C714BEA1FD2CB7F7E37484204 /* BFCancellationTokenRegistration.m */, - 27E3589A502DA67E5F75BFDD5AB13E57 /* BFCancellationTokenSource.h */, - CEB9D45B957B79F1459ABF1E81F01530 /* BFCancellationTokenSource.m */, - 73E9B12D704E302D9DAC9FDE4C8D60AC /* BFDefines.h */, - 3DB8817B308E2B46E23993461AC18E54 /* BFExecutor.h */, - 98C44F60AA929307291A20DC790BFEB1 /* BFExecutor.m */, - 06588E20E049A2E98B815265D06086EE /* BFTask.h */, - CF335AC7E0E6EE3DD820467124C2102D /* BFTask.m */, - 8EC8E900100484763798A1C6338E9061 /* BFTaskCompletionSource.h */, - 5038524C4AA89B3EC607E5B47A706CCA /* BFTaskCompletionSource.m */, - 58143C3358B762BB4DC15795BD82B8B9 /* Bolts.h */, - 94E051272A8A44AC3C51C58EABF97D9F /* Bolts.m */, - 9AF96B14E5200CC44AFA17F564FAFCE9 /* BoltsVersion.h */, + C6138626D3006D96CDB19611C6DCC8C0 /* AFHTTPRequestOperation.h */, + E2E5C54A183DC94106012E520E5E8234 /* AFHTTPRequestOperation.m */, + 72B3231E34DD38A30692794DF2F8DFB1 /* AFHTTPRequestOperationManager.h */, + 4267B2ADB9B6E5C92FBBD2BE57B1F0B9 /* AFHTTPRequestOperationManager.m */, + AD49C218C28CC03A2219320D99CD8AAA /* AFURLConnectionOperation.h */, + EBDAD0FE6DE1A120548B3CFB0AA691CB /* AFURLConnectionOperation.m */, ); - name = Tasks; + name = NSURLConnection; sourceTree = ""; }; - 925A7ADD720C420997500F47DF7BAB59 /* Pods */ = { + 5D2BF76AAFCF51667EA94C561B87B388 /* Support Files */ = { isa = PBXGroup; children = ( - 99B74290A3DB42BACD4580083D40BFCA /* AFNetworking */, - 748691C91C2E3A5C306BD96057F66CC9 /* Bolts */, - EE85D36C044E4BB468AE05B65485762A /* ContextMenu.iOS */, - B9C0326EEBE4AB593BEB84C616215B18 /* Parse */, - 97CCAC9C8256E53F277AEF405699EAE6 /* pop */, + 713723DAE7A2D766F7D8E9BB88E5E4CA /* ParseUI.xcconfig */, + 29F9DECE0CF6610E69C7A3675035677A /* ParseUI-Private.xcconfig */, + 4979C3B55E2B17D537C9E478C5549DC0 /* ParseUI-dummy.m */, + EA5338250BCA80817AD4E8F779E085E1 /* ParseUI-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/ParseUI"; + sourceTree = ""; + }; + 789559A54696F4710DBD7111F2EE0FAA /* Support Files */ = { + isa = PBXGroup; + children = ( + C9DD09269903183CC67B8C5718D9BE7F /* AFNetworking.xcconfig */, + 091BEB546F9E83DDA5A3AA12B9DEE1B4 /* AFNetworking-Private.xcconfig */, + 24C4B6C6CA8AB54346686D3EFFC5B320 /* AFNetworking-dummy.m */, + 212C53C992FAFCD6E80C8674CA34B074 /* AFNetworking-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/AFNetworking"; + sourceTree = ""; + }; + 7DB346D0F39D3F0E887471402A8071AB = { + isa = PBXGroup; + children = ( + BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */, + EB57DDB3388FBC701046A1E93218737F /* Frameworks */, + 4427CCC45CA8D857347960D5AA5A77C5 /* Pods */, + CCA510CFBEA2D207524CDA0D73C3B561 /* Products */, + D2411A5FE7F7A004607BED49990C37F4 /* Targets Support Files */, ); - name = Pods; sourceTree = ""; }; 952EEBFAF8F7E620423C9F156F25A506 /* Pods */ = { @@ -1247,16 +1441,511 @@ children = ( 15A529C27057E4A57D259CBC6E6CE49C /* Pods-acknowledgements.markdown */, BF59BC15D23E1E1912C8F334E7236813 /* Pods-acknowledgements.plist */, - A5849314580BC3F82E4A799104E87FE3 /* Pods-dummy.m */, + 4F7FEA8114B1934AF71EEAF5B655B908 /* Pods-dummy.m */, 641AE05DD55E5E6AC1590CD7B4A18F97 /* Pods-resources.sh */, - 46A44DBE60FFDA06D7726DD3091A0E47 /* Pods.debug.xcconfig */, - 554179C2DB1E42B74E86A13E79A45730 /* Pods.release.xcconfig */, + 88941524D385690CBCF300DD140DF00E /* Pods.debug.xcconfig */, + 2940BC6B2FD4089D74072136047C2FEE /* Pods.release.xcconfig */, ); name = Pods; path = "Target Support Files/Pods"; sourceTree = ""; }; - 97CCAC9C8256E53F277AEF405699EAE6 /* pop */ = { + 979EFB6D9DB1886486B07494CC621CA9 /* Parse */ = { + isa = PBXGroup; + children = ( + 52A0BDF6DC4FDD8CAF9A75E1C98C9FE1 /* BFTask+Private.h */, + 3743695C2114BF3EB5B9857261C0E101 /* BFTask+Private.m */, + 1D59E2F93C9A1BBC9FA927582057EC8A /* PFACL.h */, + 846E0B7C90FFC4325F3D9DC1F334D2B1 /* PFACL.m */, + 1D857686CEEFAE3F76B34023D8F49C09 /* PFACLPrivate.h */, + 8D6DBFEBCB22D95F322ED40E7E0F2662 /* PFACLState.h */, + D8B6D0A282B1C743D20D46AA5A90FAA2 /* PFACLState.m */, + 9598FF72766A2C803899340FE5A02F1D /* PFACLState_Private.h */, + 1DBBE4DE5894FB4DC446A3E0D9F52244 /* PFAlertView.h */, + 1F31BE5673D8EF4B5184B98AF62C2189 /* PFAlertView.m */, + 8F203F67E77F4F810024D9C3C07CDBF0 /* PFAnalytics.h */, + 0F1830FB371D282612719A83DBF606E2 /* PFAnalytics.m */, + 69E0B048ABC0D2AC04E5685C0919F100 /* PFAnalyticsController.h */, + 19D465A0F46E0A149BB3F56DFEAE8D3E /* PFAnalyticsController.m */, + 536B415C0BBE342CFF56954EB43E327A /* PFAnalyticsUtilities.h */, + 8F15A0C78AB604E937ECE01D61C14392 /* PFAnalyticsUtilities.m */, + 5D06BD4ED28E55FEADFF8D4595B1BD6E /* PFAnalytics_Private.h */, + 6514ED145DC7F188D2C4F431286C40B7 /* PFAnonymousAuthenticationProvider.h */, + B1199EF39F8DBC2DE35587039E61FA8F /* PFAnonymousAuthenticationProvider.m */, + 39A964688EEFC3D0CC24D3A54E38FBD3 /* PFAnonymousUtils.h */, + 10BC706826E8658ED21767087CA7E11B /* PFAnonymousUtils.m */, + B663A2148474E7A773E5ED841039376B /* PFAnonymousUtils_Private.h */, + 4A5608B6308F2F4967494F135B0105D4 /* PFApplication.h */, + CB79D9D2D0E90F473712185133F4D212 /* PFApplication.m */, + 3BA2492A8BA6613479FC6DE8F318E716 /* PFAssert.h */, + D2B7A1E4C1493C2A06A2D1E03C983348 /* PFAsyncTaskQueue.h */, + A61451E1B1612A7616445BE1C5CBA596 /* PFAsyncTaskQueue.m */, + E13BB96D1F65A19C55EECC6F0A446A4A /* PFBase64Encoder.h */, + E8BC86E8DE6DA9A9297FDF54AD60295D /* PFBase64Encoder.m */, + C54E694252DA1DB712A3943ED8DD8E91 /* PFBaseState.h */, + 46F4505013A1E899E93E215319374975 /* PFBaseState.m */, + 4724259812FC4667976043F1B2F12B9A /* PFCachedQueryController.h */, + 694F62DF16C3FCEEF60E6744A3B916C5 /* PFCachedQueryController.m */, + 39C3C8FCB8514A583548A65C5CF4C00C /* PFCategoryLoader.h */, + ADD3EA0352B2B88D39CE711BB75D1CF7 /* PFCategoryLoader.m */, + 78006899D5F4068A8325BF93DB99FBC4 /* PFCloud.h */, + 440FFFF5E8AA2540E8D0104B9420D969 /* PFCloud.m */, + D539673F1E79B36CCCABA2EF45E20C61 /* PFCloudCodeController.h */, + 6F89E25FCE0DAA79042743C2B566E1A6 /* PFCloudCodeController.m */, + 18E77AA1F74F26E7C7E5B4FFB440DB72 /* PFCommandCache.h */, + A7BC2EFA845DB186821FF808FDC5DADE /* PFCommandCache.m */, + 3E79A9B8178C0F64C99A91FD39A755F3 /* PFCommandCache_Private.h */, + 99FDD1E37DD120D520EE6C3BACAD38E1 /* PFCommandResult.h */, + 628243081CD6D87A75BA9909480D688B /* PFCommandResult.m */, + F093D017EB5E2628C1BB5303359E94D4 /* PFCommandRunning.h */, + 2E4EC0E5DE4BFEA3D3B7A89052CBB3ED /* PFCommandRunning.m */, + 44CC844604B6B8F4651D9967A6020478 /* PFCommandRunningConstants.h */, + 5989C4E0E6F614302CFDC1EF53184C28 /* PFCommandRunningConstants.m */, + 77845D529DEC33723562ECA6270BD8AB /* PFCommandURLRequestConstructor.h */, + 4A27AA8076D73B600E05AFD9DE86A776 /* PFCommandURLRequestConstructor.m */, + F8F57FE2C22B99C8E801465770A4BDEB /* PFConfig.h */, + C5B7DABE7188B760C1B68296FEDD6C36 /* PFConfig.m */, + 1751A18AF08E87C661781BCDD6A61049 /* PFConfigController.h */, + 31E038C9749B665615F4B5FFA9469D6D /* PFConfigController.m */, + 2A235350977776A4ADAEAB1CAA67DF8F /* PFConfig_Private.h */, + 7FBF8804D54E1C19776FE5BA208F68B3 /* PFConstants.h */, + F485E3D70BC15CD0368944C76A7C8C94 /* PFConstants.m */, + 9B4A505C53309A2CA9DD89F8D0CCC03D /* PFCoreDataProvider.h */, + BC13F53A2D2D30BA403C7008DC9A67D8 /* PFCoreManager.h */, + BA0A7EE195BFE6130879291F0291E4B8 /* PFCoreManager.m */, + 035FAB552BE267FDD1892F43E6315CF3 /* PFCurrentConfigController.h */, + DF33002FB4E1478B0C1EB61E8135377F /* PFCurrentConfigController.m */, + 01FE7E553947BB6A0FFAE1B9E6F894FE /* PFCurrentInstallationController.h */, + C929C5721E9C70B9CE81D9F6828EA6B0 /* PFCurrentInstallationController.m */, + 2063B9F38D8BF60908CCAA031D7CDEE1 /* PFCurrentObjectControlling.h */, + FEC20F084AA6BBE872B8010536D7FA8F /* PFCurrentUserController.h */, + C8AD607EE674B88ECA00DD66963675E0 /* PFCurrentUserController.m */, + 3C40DEB41CE4EC8B2FA1499B49789F37 /* PFDataProvider.h */, + 351FD95748A1E93F1C6AF4531E3F4E36 /* PFDateFormatter.h */, + AB4619A4572B3C9040CFF51B704351E5 /* PFDateFormatter.m */, + B8F7ABB411DE6940B531BD2B00F7330B /* PFDecoder.h */, + 87BF1A2C6A35E36B2F3EC9220F3410B1 /* PFDecoder.m */, + 2239BC817E28D29D4159D2A4291463CC /* PFDefaultACLController.h */, + 69AA9DF625F8419954BB0BBBE9C107EB /* PFDefaultACLController.m */, + AA3D59BA0C2C12C85BC9B604166741A5 /* PFDevice.h */, + D8A2AD1BBFF1D2E49DA33635F7DA0CED /* PFDevice.m */, + ED6A84A6701F1DE42F2C5E48FECA156A /* PFEncoder.h */, + C3071E3D22EE4605A9D1686C5BF5D5CC /* PFEncoder.m */, + 88A85349B94E9627FD8BFD487C72696F /* PFErrorUtilities.h */, + AB1E20059106E03E6594A48AF6661438 /* PFErrorUtilities.m */, + 5E6B73184D192A7643EF111D17920315 /* PFEventuallyPin.h */, + 2004B571F2910F12AB05F62B7FA36080 /* PFEventuallyPin.m */, + 15D4EE1E4E8D6F31A989B917DB27C9BD /* PFEventuallyQueue.h */, + AC064F00E5953DC4C9CE6D8AD0D51ED1 /* PFEventuallyQueue.m */, + 19950D124DD375E02FC7D56C3DDF1283 /* PFEventuallyQueue_Private.h */, + 4388A6A932A7756E9AD6FC752949159E /* PFFieldOperation.h */, + 973B4A3060B04CDC56604B7E195515C2 /* PFFieldOperation.m */, + 33770436E2F99A5D4929AB57FDC21D97 /* PFFieldOperationDecoder.h */, + C0DC2D6010A3FAE98396FB45988CE381 /* PFFieldOperationDecoder.m */, + FD3002E7639123E521B9A5AA0109D177 /* PFFile.h */, + 2A299EF96AF52EEF72B71FC41472E03C /* PFFile.m */, + 7DFA44004029BD393D1F2B117CE9F7F8 /* PFFileController.h */, + AF6E8F23F7803ABA113C33B9104A62BB /* PFFileController.m */, + 4556777EF2137403EE0B15CFF94E9196 /* PFFileDataStream.h */, + 566E096C4168AF39742D4E5C84DD3816 /* PFFileDataStream.m */, + 700DB399BAE4612DE007DEC2B6736D04 /* PFFileManager.h */, + 27CDD8FD19471CF12869E8B996CB614D /* PFFileManager.m */, + 65BCE23D522D91151189266A3FC84D6C /* PFFileStagingController.h */, + 3F52D2D0D367EABC467BBF231B745F2D /* PFFileStagingController.m */, + 30BB3F94FC46C796DC0449BBC52A4A1A /* PFFileState.h */, + FBEAAECD3B1ABCA0ECC42C1F71EA1389 /* PFFileState.m */, + 031595D3DC7EF8A1E64E65CF08D1E9CB /* PFFileState_Private.h */, + 29908DE2D1F086906ADDD8F12F3820F6 /* PFFile_Private.h */, + 89C6E76766F3F8CA998ED8A57C73E6E8 /* PFGeoPoint.h */, + 309FEECD7C015C28BA15623CCA7076B9 /* PFGeoPoint.m */, + 88DD76E6AD2481B16B2BBF010ED8C5C5 /* PFGeoPointPrivate.h */, + 428C2550960F31AF80B66DC6FF7060E7 /* PFHTTPRequest.h */, + DD434440BCFF8363B180A308A01134D1 /* PFHTTPURLRequestConstructor.h */, + 3EBC27DC0B4BA50C770DDFAE2B83B764 /* PFHTTPURLRequestConstructor.m */, + C143EA6A9A0468B76361AA3F15901DE7 /* PFHash.h */, + 295C81022EC4A4419AEE51593C991EA9 /* PFHash.m */, + 21EB3DF5E0378397B89D368BBFD08CDE /* PFInstallation.h */, + FD2FADA1376E997E564678D188467245 /* PFInstallation.m */, + F88BA5C9F0C3B3EC0FF6EC134DFC39FC /* PFInstallationConstants.h */, + 4908E227F1BA636934AEBDAD07F4FFB9 /* PFInstallationConstants.m */, + 89B3B0322B04DCA7B4CC50F944791132 /* PFInstallationController.h */, + F13E8D0BBF19E5AA3F8AC5D420158C3B /* PFInstallationController.m */, + 3E2C0EAC510FD8283F4149F0AEFD64DD /* PFInstallationIdentifierStore.h */, + 36E96F698A999832ADF3D7F5392E1641 /* PFInstallationIdentifierStore.m */, + 8F489EFF4C232894528578CFD10B4CE9 /* PFInstallationIdentifierStore_Private.h */, + 001AD9B5406D718F93878E7802295E4E /* PFInstallationPrivate.h */, + 7D68E6EF3A4AFEB121B57A35E7EA3FBE /* PFInternalUtils.h */, + 676BF07A1D05D277E516187A352A834C /* PFInternalUtils.m */, + 6A2537130546223A4F9BD2F2CC8C9932 /* PFJSONSerialization.h */, + 7A0570AA7DC6F83403680412011FDC05 /* PFJSONSerialization.m */, + C73A613165131696179D8F483D882AAD /* PFKeyValueCache.h */, + 31CE9392410262C7EFA3F2FF2CB7498F /* PFKeyValueCache.m */, + 854CBE59DE1E76CFC6D07D0062FFB68C /* PFKeyValueCache_Private.h */, + 01C2FE9EEB63EB166CEF1AF8D6A7F5D4 /* PFKeychainStore.h */, + 6349D7F8E69290506003AB29AD989010 /* PFKeychainStore.m */, + D84A796DFAFE7A65F2CC3FC4135965FA /* PFLocationManager.h */, + 0085A955107B8FFE1924A08C14BC6FF8 /* PFLocationManager.m */, + 2A5413A2F66872719851389ACDE4D879 /* PFLogger.h */, + CDB88E53629AEC61BD55872FDB9CE291 /* PFLogger.m */, + 3A605DD02CF52F80E3B1D4E3BB6443CF /* PFLogging.h */, + 994A66CEBCB74EC7AF6E43F12721CE79 /* PFMacros.h */, + B332057FAD3ECEC8A1DEEE7976DAEF4B /* PFMultiProcessFileLock.h */, + E636D9F080801F61C3A75CBF4036ED38 /* PFMultiProcessFileLock.m */, + 67AFACBF4ED6B0884B574DE70D9B6039 /* PFMultiProcessFileLockController.h */, + E7CCE0D3CB7C0207B26A209D5ED7DABD /* PFMultiProcessFileLockController.m */, + 0CAEB2B1FF16CDE2D193E1AC45AA6B22 /* PFMulticastDelegate.h */, + E59AC106E3B217744D3C1E246D60A0B5 /* PFMulticastDelegate.m */, + 23806737BB22CBDE6C5BFC062A416AF7 /* PFMutableACLState.h */, + B710F0B0D3B79B4BF2C0738F2D105DCB /* PFMutableACLState.m */, + 05C4B6DD741681BE627832D2F02A6A9B /* PFMutableFileState.h */, + E342A391C1DE18E3949C69CDFB08EDD8 /* PFMutableFileState.m */, + 4E837A384D488CAA3D160460C108410D /* PFMutableObjectState.h */, + AB3B8D04CBC9A7E1794313D118715E06 /* PFMutableObjectState.m */, + 730A5142BAB6C4ACFC08E68568EBF8D7 /* PFMutablePushState.h */, + E200601043129FF78BD9AA263E6D6F92 /* PFMutablePushState.m */, + 7CF0DBA9D475D9DB9CD91FE782EDDF62 /* PFMutableQueryState.h */, + 024EFAECC7B95C1D6C429D5023A046ED /* PFMutableQueryState.m */, + 93A5300ED14457F5DD5D6D6C0EC2DEE0 /* PFMutableRelationState.h */, + 0CC595FC678893325F98C5378B186753 /* PFMutableRelationState.m */, + C44F75C85A9A302C874E89656C8698D9 /* PFMutableUserState.h */, + 60256F6A4DBAA982F812489F3CCD2EF7 /* PFMutableUserState.m */, + DCD942102BE4EB49DCAE5E51AD4B15A5 /* PFNetworkActivityIndicatorManager.h */, + B3C01ABD047563B7C36F63413588D37D /* PFNetworkActivityIndicatorManager.m */, + CA6036733998FEC7AF7360C87DB6738A /* PFNetworkCommand.h */, + 975FA02383C4AF2B0D4C851DF8A9A0C2 /* PFNullability.h */, + D14EDFE8F7C3B1DA488AFF3322330189 /* PFObject.h */, + F12EF319251CA509AE6922D4497B8F33 /* PFObject.m */, + 7633F658075479E6F351B199EB7126A3 /* PFObject+Subclass.h */, + 11D03F3B0D034E50C77B83ECA26BA202 /* PFObjectBatchController.h */, + 3A10A6965544C458AC5F2B678A0B47F7 /* PFObjectBatchController.m */, + C4983034E61F27920F696B557867C7ED /* PFObjectConstants.h */, + DF5EBF3C8EC520B02503E0619DA6ED4F /* PFObjectConstants.m */, + 90022F3C8DE07574875FE6D257E4F527 /* PFObjectController.h */, + F304EBA667E0521CC244EB0ED7942C62 /* PFObjectController.m */, + C8142B63079F5C9D23D801BDAEF7E750 /* PFObjectController_Private.h */, + 4819C1A3A8B14056B5A05DC9FFFF5712 /* PFObjectControlling.h */, + 3C674CCEDB9884C366D0C653803CBF33 /* PFObjectEstimatedData.h */, + E745D4E9E1D24B93FFDC0898348695CD /* PFObjectEstimatedData.m */, + 3736B5A263EAA9B1E1282D09BC223346 /* PFObjectFileCoder.h */, + 1192323044F90ADFAE943B828EF33A2F /* PFObjectFileCoder.m */, + F0FD07B829A861446380687433E154A5 /* PFObjectFileCodingLogic.h */, + 97944F65FC485382F36D6DC38FAD26A0 /* PFObjectFileCodingLogic.m */, + A19FD78A9B72692A4B71312CF239FD40 /* PFObjectFilePersistenceController.h */, + 917A576B44FACB8621EE8D58A98BB1AA /* PFObjectFilePersistenceController.m */, + FD68AE58291EBC6F2D37ECA9677D081F /* PFObjectLocalIdStore.h */, + E92E033FF1B999DD90642F33822254A0 /* PFObjectLocalIdStore.m */, + E29764F05A36CE457AAA261D1C743831 /* PFObjectPrivate.h */, + 704906A954132660EE53716959D2EFD0 /* PFObjectState.h */, + 9A0E583B09D603C1E642811EA63D1199 /* PFObjectState.m */, + 6B0D66F584D237E4338D3E19C4265A4A /* PFObjectState_Private.h */, + AFB8E8C021C6059DABB2D4B924F1B625 /* PFObjectSubclassInfo.h */, + 42FEE158A9A8CD9C91CB464AA689D222 /* PFObjectSubclassInfo.m */, + 369554517F91CBCD67CC278B273276A3 /* PFObjectSubclassingController.h */, + 8FB871978A493CF76B6EF86A10503D0B /* PFObjectSubclassingController.m */, + 68899547991B9F78A6C594C5C0F479F5 /* PFObjectUtilities.h */, + F15F2C338757D315D1E60DC9FE07FB63 /* PFObjectUtilities.m */, + 7643F6942D7C77523A6EC6A87C80A76D /* PFOfflineObjectController.h */, + 0FA6E6CE69ACD000C52CEF0A45171FEA /* PFOfflineObjectController.m */, + B3502383881063B9745DA4E5FCDAD557 /* PFOfflineQueryController.h */, + D9B406B9DEB4C367381A5F2CFFB79C50 /* PFOfflineQueryController.m */, + B0617A0075488852BF4B46D4CDE39658 /* PFOfflineQueryLogic.h */, + 1BA7AA53D3CB697F471E37400395783D /* PFOfflineQueryLogic.m */, + 23B2648B19EFEB314EB1B67338FE4052 /* PFOfflineStore.h */, + BFC6FF836ED9A9F86CB846FAFE7E1591 /* PFOfflineStore.m */, + 593AAE45575AE33845AB3E2DAEA2A800 /* PFOperationSet.h */, + BF50874E9091DBBE43D936A9592CC9FA /* PFOperationSet.m */, + B98633046A5BC4D1F2317D116A1D909F /* PFPaymentTransactionObserver.h */, + C49FFB322304F787EF6324233FD5FED6 /* PFPaymentTransactionObserver.m */, + EADEDEC26137844F1745D14A9238E700 /* PFPaymentTransactionObserver_Private.h */, + EFA961715877278EBB371380F09E1ED9 /* PFPin.h */, + 2E65C6B1C92B01C21154747ACFD56113 /* PFPin.m */, + 1AF8F3033077AAE4F66595F9CF150E5D /* PFPinningEventuallyQueue.h */, + E7B363ADE0A6BB4421A31FC39C18726E /* PFPinningEventuallyQueue.m */, + FA65C52649C85A7646474D735E22867B /* PFPinningObjectStore.h */, + B8AD011F3E16AB12739F99A789EF372D /* PFPinningObjectStore.m */, + B63488E932EFD54B40EC5CEE1DF35B2A /* PFProduct.h */, + C114B416CE301CC19DDA171508581D3D /* PFProduct.m */, + D62DD60CCADE4FE9E157BDFCA09E4AF9 /* PFProduct+Private.h */, + B48FF50559AC780326EB5A9D270CFC96 /* PFProductsRequestHandler.h */, + C8FF08518676F8E3A8870145DE231062 /* PFProductsRequestHandler.m */, + 2E4940DAD7C43C250A06B228B6788D7A /* PFPropertyInfo.h */, + 57E3E7A53BAA20CC092190C002268ADD /* PFPropertyInfo.m */, + A210BD82E20817973E99C3A2B14ECDDE /* PFPropertyInfo_Private.h */, + FF65DA49F2D090C5B8833FE5813520D3 /* PFPropertyInfo_Runtime.h */, + DC12AC65C36202BAEC57DD2A910517F4 /* PFPropertyInfo_Runtime.m */, + D87C3AF7D4265ED5B963562D05FC59A3 /* PFPurchase.h */, + C1E4A4665A4D0598F98C904BA74D0023 /* PFPurchase.m */, + 15CAEE54F40D12424118C16A4A6A66E4 /* PFPurchaseController.h */, + 4EBB251ECCBF5E9375C2740D911B52AF /* PFPurchaseController.m */, + 29B54E1236A7C8E0EC38F658B5BF0F4D /* PFPush.h */, + 918F011200230C7E00D0CDBE0413D604 /* PFPush.m */, + 32702F79E6E7FEE1E164D5A0029949B6 /* PFPushChannelsController.h */, + 9FA74BE27642D3B7276E321358B7C527 /* PFPushChannelsController.m */, + 65C8297BDEBA83D5501F45C12677C8EC /* PFPushController.h */, + C0FEB0FFE36A30B2C767E64706ADC708 /* PFPushController.m */, + F07D611830E80BB5B0864D91BA277C6F /* PFPushManager.h */, + C153BA547DADCD957E58E3F674A38B65 /* PFPushManager.m */, + F5F39F11949B1AF48CEC2977D2EB2C6C /* PFPushPrivate.h */, + 6EFA79C517CA44575258775AA6237117 /* PFPushState.h */, + 0EBC0CC820CC94B4DBB58FE3139C2EA8 /* PFPushState.m */, + 258D3EC39C7F9B9695D37D77B93E6D25 /* PFPushState_Private.h */, + 4328D8F9C7AE7B0CD8FA7EBA00D7338F /* PFPushUtilities.h */, + 30E22AE37E29C96863456166E0E1D8A4 /* PFPushUtilities.m */, + 166CF998A95C71469855822102D41793 /* PFQuery.h */, + 56436A2903AD7B65AA25DC0213B0BB83 /* PFQuery.m */, + C4F17209020621B18FBD52AD4DBDE0ED /* PFQueryController.h */, + 902691554546D2DCD720159559359ED0 /* PFQueryController.m */, + D4EC2CF0CF3EC72C93972AF1037CEE94 /* PFQueryPrivate.h */, + 936B40D958EFF2CAD5842B3F198BD796 /* PFQueryState.h */, + 3D06333C4BBE1FBE4CBCF7F86CB65BB6 /* PFQueryState.m */, + DB24BF0D72B82C099497AB0C90978809 /* PFQueryState_Private.h */, + CB9940C112FA6D7EA7892248876ABDAB /* PFQueryUtilities.h */, + DFA86D2E23707A09D2F93F678490834F /* PFQueryUtilities.m */, + 2286ECFD3E4E57FAB21AD58AE7FA5DE6 /* PFRESTAnalyticsCommand.h */, + 74026F3639040297727453102A9BBBFC /* PFRESTAnalyticsCommand.m */, + EC7948AA2D47B2FE0B1D838A6F03558D /* PFRESTCloudCommand.h */, + CD55CFADE2EA8A5AAEBD75427C3D61E6 /* PFRESTCloudCommand.m */, + 5A1A25F8BE29707DDFE4EAD9454032E7 /* PFRESTCommand.h */, + 03BF6230EA6748C577C8C5637D9242B3 /* PFRESTCommand.m */, + 6F5CC0F9C4567ABE6127227B5B27A8B8 /* PFRESTCommand_Private.h */, + B6D0112010753770C75E336FCAE568F9 /* PFRESTConfigCommand.h */, + AB3AB9370B71EA5499996D460DF047C5 /* PFRESTConfigCommand.m */, + 1D050AD2BA4F07A170535D2D81FE262D /* PFRESTFileCommand.h */, + F77C74B9A3B538B0EB997559E6CF16D8 /* PFRESTFileCommand.m */, + B0EA4C607715F96A847858C64CCE55BA /* PFRESTObjectBatchCommand.h */, + 7178100892AF9F0FD529CB1C1D19CC83 /* PFRESTObjectBatchCommand.m */, + BE3E9F01B6629C15BB1B2DCB06D9F593 /* PFRESTObjectCommand.h */, + 756D73510B093B9B8FDF1F38117139CD /* PFRESTObjectCommand.m */, + 76FDE35600319F36529FD99758E63E5C /* PFRESTPushCommand.h */, + 33A90143BAE0EA5E9192335705F6E326 /* PFRESTPushCommand.m */, + 4396FAB720D2A9D7CC8BE495AB0901B7 /* PFRESTQueryCommand.h */, + 4F1C27BA471E9E9B97D6C406B2BB3AE4 /* PFRESTQueryCommand.m */, + 673B41C4A9C953340D42FB9375E98F48 /* PFRESTSessionCommand.h */, + 4D273720DDB1BA554B5D9ADA0FA44AC7 /* PFRESTSessionCommand.m */, + EEB7662126C52466C21D904730876C37 /* PFRESTUserCommand.h */, + 2AFC505855C4C5871A01FEB4AD88CE78 /* PFRESTUserCommand.m */, + 9B35DDE4E59586621C39D96AA5CFEA8A /* PFReachability.h */, + 4CB4FE2CCDD340DB9E7D6942BC3B6970 /* PFReachability.m */, + 7ED2893DF06D68060771C808F407E78B /* PFRelation.h */, + 13FE506E3AD60D630A89BA5D57E1FB81 /* PFRelation.m */, + FA171AFF7FEDD9A1B39B38C3FE2E05D0 /* PFRelationPrivate.h */, + 4B4AF5367CECBE37C9C156CE5642F10C /* PFRelationState.h */, + F7178AAEC5FB77818382182E9CDDDB69 /* PFRelationState.m */, + F267020507CB007123E41D8CC71685A4 /* PFRelationState_Private.h */, + 8A1C42F3F207E19A35B5546628710724 /* PFRole.h */, + 58BEAE37763D507BA321A10F607AA996 /* PFRole.m */, + A1505BE85BBBF3833DAC5F2D8AEA1E44 /* PFSQLiteDatabase.h */, + D5666540285B20C577F0B2B80E9F8FF3 /* PFSQLiteDatabase.m */, + E7F561763E1088F225F61FF89B52790B /* PFSQLiteDatabaseController.h */, + 149F81D2C02EC8ADD0B70583B731419F /* PFSQLiteDatabaseController.m */, + 41A37E5AA3FD212D97AEF6B46AF205D7 /* PFSQLiteDatabaseResult.h */, + BF23DA16C72B53A3FEA46DF36D46D7E5 /* PFSQLiteDatabaseResult.m */, + 1918D47CAAE720F6F490932CADDC693C /* PFSQLiteDatabase_Private.h */, + 93457F77204719F4C16214A7413841BC /* PFSQLiteStatement.h */, + 217C03ECCDE9198144EAF9D0B2F8200D /* PFSQLiteStatement.m */, + 0C97E4E064AFD1F93914BCB16FE59C63 /* PFSession.h */, + E059D288CF1F6EDC84FFF84CE3357D3D /* PFSession.m */, + 9E24DE585AD9B9268FFE89EBC23F41F8 /* PFSessionController.h */, + FEAD761469117CF410C9357452E0C1E8 /* PFSessionController.m */, + 014AF5DB4D6A8BF17F7BE152F8CE4838 /* PFSessionUtilities.h */, + 8BF4FFC8C19BB816A5D326D9220F1FF8 /* PFSessionUtilities.m */, + 3529D435B4028C7C7FEDFB26F8FA4327 /* PFSession_Private.h */, + 0BF885EC67F1AB3F06CAD0B479109ECE /* PFSubclassing.h */, + AB771162A46246297D872F262698474F /* PFTaskQueue.h */, + 04C8BAE65AA02555DD915F8E8A7D09A2 /* PFTaskQueue.m */, + 90383A205442FD08C8901103539A77AC /* PFThreadsafety.h */, + 10723C36012E47BED44DC7D4B878791C /* PFThreadsafety.m */, + 6A0553B6F96FFCFB2659FBEC93186129 /* PFURLConstructor.h */, + B0A6262F542FEEB9CE1C80E8A789BA92 /* PFURLConstructor.m */, + 5D222FBAAC7CB0784308DEB998350A70 /* PFURLSession.h */, + 127A5C472A10A9E794C1EC858B8A4202 /* PFURLSession.m */, + 03A28063A2DF1FF0468E7E6363FE87F6 /* PFURLSessionCommandRunner.h */, + DE5961F550EA26C9E5B1FFD818E59DA0 /* PFURLSessionCommandRunner.m */, + DEE9D08357281B5F8C4E722920757E6E /* PFURLSessionCommandRunner_Private.h */, + 4EFD42501997FEBF509BD17AE211C265 /* PFURLSessionDataTaskDelegate.h */, + 1824F1E39E61183B0EC8B1EF5B485157 /* PFURLSessionDataTaskDelegate.m */, + DB595F2F6890CAE924ABCEE56E4AFB35 /* PFURLSessionDataTaskDelegate_Private.h */, + 579B61E551621BA10D78D5D7BB2E82D6 /* PFURLSessionFileDownloadTaskDelegate.h */, + 81BEED9DCE9C07680F81CC9034E38AED /* PFURLSessionFileDownloadTaskDelegate.m */, + 7CF8D1706E6BD228B2880BF74EA66654 /* PFURLSessionJSONDataTaskDelegate.h */, + 8904F23F909FE6ABDCDCF6FB05F10B30 /* PFURLSessionJSONDataTaskDelegate.m */, + 28663AB25A1E167D689246B14934DE4E /* PFURLSessionUploadTaskDelegate.h */, + 388FD96F0258A11A9BDACFB28722339B /* PFURLSessionUploadTaskDelegate.m */, + F574FA2B21A697A3966DB97D2487756D /* PFURLSession_Private.h */, + 303C7A0846CA6E57C5D163C23AE209AE /* PFUser.h */, + AC2CC0B73F6911C366AFAF2747021916 /* PFUser.m */, + 18827249CABAEC4B332D8914DAD7D2E2 /* PFUserAuthenticationController.h */, + 08778622B2D01D7E6D35F59E3A8D7504 /* PFUserAuthenticationController.m */, + FFFF7D1C162E52CA7DC9306CA29F0542 /* PFUserAuthenticationDelegate.h */, + 06BA61065D8E2B152E9171EE2F44AC4B /* PFUserConstants.h */, + 497895A9634510E0B9DB68DF989C06DE /* PFUserConstants.m */, + C4AD49FF201BDF487F9C08A8094C313D /* PFUserController.h */, + DEE628E2803E756C9760B307B5FBB72B /* PFUserController.m */, + 2573EC8B9CE397FC9159DD313B946DDD /* PFUserFileCodingLogic.h */, + 10254E67C606DCA88382570E2B8B358A /* PFUserFileCodingLogic.m */, + 3A9CF0F282093C60CC8BEA7B269DDEEE /* PFUserPrivate.h */, + 91A04A2D587B5AA298D99CA8707ACD0C /* PFUserState.h */, + FED6BB0FA8302D839BF078961698B2F2 /* PFUserState.m */, + E7DB34F9E5FDD05A6440D7DCD7C9C62A /* PFUserState_Private.h */, + 79D7AFFDA509FB3FC481BDA87BF51A9D /* PFWeakValue.h */, + 465823BD11BF09F5C90595ABAFD8A779 /* PFWeakValue.m */, + BC298249F77EBA7D15710FCCE11A79E4 /* Parse.h */, + BD91587414DE8AF4BDBCC85B1445B580 /* Parse.m */, + 0000CB1FCEE55041E8F58F0856C79A8A /* ParseInternal.h */, + B9CD69BEEB6AE7123CC13AD292A988E6 /* ParseManager.h */, + 394EF4EEC81814669228D349F9F144BE /* ParseManager.m */, + 2D83E57423431A9A7980CB0394BFFF2D /* ParseModule.h */, + 2BE3F7B0445F96510397621689B94DD6 /* ParseModule.m */, + 52DB6A54B1838689849D373A8B862089 /* Parse_Private.h */, + 23AE72B6B473935D6C17CA1B5CE6EBD0 /* Resources */, + 400B87487B883E2FBF3BA1A84CBD5001 /* Support Files */, + ); + path = Parse; + sourceTree = ""; + }; + 982E1CE8B0E4B7E0E0791F1618606C43 /* Serialization */ = { + isa = PBXGroup; + children = ( + 03175A1837930350DA8D3A3A6948BD08 /* AFURLRequestSerialization.h */, + F59ECC8674FE3D5A108F47F1651EFE1D /* AFURLRequestSerialization.m */, + B58E5884403A0B1E1DCEB097E80C1CC5 /* AFURLResponseSerialization.h */, + 0F2B467FE4C5B79A587871D62821CD26 /* AFURLResponseSerialization.m */, + ); + name = Serialization; + sourceTree = ""; + }; + AE1FCC8648F4384498D2CF5B7F32DAAA /* AFNetworking */ = { + isa = PBXGroup; + children = ( + B8ECBD88856AC04D71253C322B980822 /* AFNetworking.h */, + 560364AB93E50BBEF4B33AC759A5F066 /* NSURLConnection */, + 0D702677028DE77B5F98109E6E9A03F7 /* NSURLSession */, + 02DC75DFC7A4F83A34208DF25798A845 /* Reachability */, + BA60ADEBAE4F73CFB407D5F2B66F2BE4 /* Security */, + 982E1CE8B0E4B7E0E0791F1618606C43 /* Serialization */, + 789559A54696F4710DBD7111F2EE0FAA /* Support Files */, + 27C4DE13C26F320CD386E4DA6D6716B8 /* UIKit */, + ); + path = AFNetworking; + sourceTree = ""; + }; + B6564B7B05E0D234CDEE562117C5EBF9 /* ContextMenu.iOS */ = { + isa = PBXGroup; + children = ( + D5C5B899FFF0B9AA572D06803767D21A /* UIView+YALConstraints.h */, + 99608B2EC51573A5DC72B1C1509BF733 /* UIView+YALConstraints.m */, + 6E66F27EF0BB5326527E03C5A3CEEE84 /* YALContextMenuCell.h */, + 38FE94A275B17621E2E9B43752CE7567 /* YALContextMenuTableView.h */, + AD9AC4ABA3BB74252870F496326BBAD2 /* YALContextMenuTableView.m */, + 0A35C5F1675B9377306ECAC57658FE06 /* Support Files */, + ); + path = ContextMenu.iOS; + sourceTree = ""; + }; + BA60ADEBAE4F73CFB407D5F2B66F2BE4 /* Security */ = { + isa = PBXGroup; + children = ( + E326422DC27C985EE24D2C93B8E77654 /* AFSecurityPolicy.h */, + EB033CDD923230B1E43F21C7996F6649 /* AFSecurityPolicy.m */, + ); + name = Security; + sourceTree = ""; + }; + CCA510CFBEA2D207524CDA0D73C3B561 /* Products */ = { + isa = PBXGroup; + children = ( + 31F93A9FA8BA9A2E0A7B707CCB9668F4 /* libAFNetworking.a */, + 272CEEC74EFC7A7517B430014A16635C /* libBolts.a */, + 32A9AA3F96EDB1D74DF05E160873CFB1 /* libContextMenu.iOS.a */, + 8D8B63E424FEEB2D6A4B63DC923F3455 /* libParse.a */, + 5CF50CFEBB22494CCF939234C39DE670 /* libParseUI.a */, + 1A782DEC3085443686EE99BF46207C32 /* libPods.a */, + A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */, + ); + name = Products; + sourceTree = ""; + }; + D2411A5FE7F7A004607BED49990C37F4 /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 952EEBFAF8F7E620423C9F156F25A506 /* Pods */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + DB950EF338A1419E0F336CF98E3D2AC9 /* ParseUI */ = { + isa = PBXGroup; + children = ( + BA63322C80B2C171D02D6229D1144BCD /* PFActionButton.h */, + 1421939F359176F8B823F5EB7FD8294B /* PFActionButton.m */, + 851D6B30190D7C9B082DD326B4981335 /* PFActivityIndicatorCollectionReusableView.h */, + AD1208FED19399BDA5AE927E35FFF9D1 /* PFActivityIndicatorCollectionReusableView.m */, + E8E430A9D1E6AF764043FC4133BA6076 /* PFActivityIndicatorTableViewCell.h */, + 2505A4FCC1D644BE68CE42C4152E5834 /* PFActivityIndicatorTableViewCell.m */, + A597F94956AB66B22F3E3E1F4507AE56 /* PFCollectionViewCell.h */, + 33748C4CAD0A1EE35189C936C5F58CB1 /* PFCollectionViewCell.m */, + 7081E098CA4CB6A0681076A21412276A /* PFColor.h */, + 89F3C71E2765B3C28B473D71DF5A5D58 /* PFColor.m */, + 552F0DEAE5F69539D7D65D9DB91ABFF3 /* PFDismissButton.h */, + A445FAA3DECFDF34F02F85692C7EA1CB /* PFDismissButton.m */, + 3DC28E88C43C66CB821F869EA052FAE8 /* PFImage.h */, + 34157638C4F04431240CDE5218BF7BD2 /* PFImage.m */, + C6A4CE0524492ABA0B3CA3C2DC0F2FD8 /* PFImageCache.h */, + ED0D5194B5F3554C0BC8F95F23872AF5 /* PFImageCache.m */, + F5AF10611B8227D5F09B59D1B5009CBD /* PFImageView.h */, + C626A77F47DF6852A4FA93130E79A6B9 /* PFImageView.m */, + 3463D5F370E5607282D729CC1466A4EA /* PFLoadingView.h */, + E34FBAF62EE3096BA751B8F644E4B4F5 /* PFLoadingView.m */, + 7EB9BC7FDF8DC81CC6C1D63BECCE7E14 /* PFLocalization.h */, + 626EA58500BD7AFBCC37BB0A9E81C577 /* PFLogInView.h */, + 4147D89794931071D52A8BA0A96222F8 /* PFLogInView.m */, + 8A03B973912756B22A381AC58978C7CC /* PFLogInViewController.h */, + A00E3EBED97D7DA5FA9DA201848A51D0 /* PFLogInViewController.m */, + A3A60F4A92389CAAF08FEB19CDC3BF4F /* PFLogInView_Private.h */, + 0AB19709851545DCCBA4D0FF7CC4DC37 /* PFPrimaryButton.h */, + ED78E3031E30DEAD64E709DC1A22E2B9 /* PFPrimaryButton.m */, + B663A4685CA2D02F8C82889CE250EC3E /* PFProductTableViewController.h */, + 680A9F6B03DC467E45FC8F01D6ADDFC1 /* PFProductTableViewController.m */, + 6B362321AC17972F76BC3058B0244342 /* PFPurchaseTableViewCell.h */, + AF9BC43D31ABEE63A34807EE8E39A020 /* PFPurchaseTableViewCell.m */, + 881AE511AFA0A6623BF4D450BD61D412 /* PFQueryCollectionViewController.h */, + 4375CF3355F1F50599EC991B4021CF8F /* PFQueryCollectionViewController.m */, + 63D19DFCBC3895E5748AC11A6100A32D /* PFQueryTableViewController.h */, + 12B522608FEB7B9689C2FABF1CC3D755 /* PFQueryTableViewController.m */, + 62B118BBE51E9202B7097AF728173D22 /* PFRect.h */, + E5730E6F41E92311BA1BDA0005883220 /* PFRect.m */, + C5B91B4ACC467BB7DD2693398E122C60 /* PFResources.h */, + 12FE2FAAD83211D8CB07A040AD0CBA23 /* PFResources.m */, + A6E4973175ADE7E1CBDAB4A5071E7621 /* PFSignUpView.h */, + 6BB60B0E616655E619A22D34CEB64076 /* PFSignUpView.m */, + 92D5F344DD144AC33D3477DFE0636DA8 /* PFSignUpViewController.h */, + 2B0243E46B75FC63B525EFAFB733DB26 /* PFSignUpViewController.m */, + FDE35452BF4B80CB28ADE963A9F8CF1C /* PFTableViewCell.h */, + A3F02110C3D27D3278E6DF129D2C91F7 /* PFTableViewCell.m */, + A772CFB5BFFB35B2E671E4851E00B741 /* PFTextButton.h */, + 0F405E5BADB8279B5FFECE2906428FDB /* PFTextButton.m */, + 2C8738DC15AF37426077016E1A61F42B /* PFTextField.h */, + A3F32303C58658949292DAA3491E94DA /* PFTextField.m */, + 3FD690C48213961E0F282ADD5C6D7648 /* PFUIAlertView.h */, + 46179347059FF8F4103F56305447D022 /* PFUIAlertView.m */, + 53DF9F80DE5B4C6F41704F060C983B26 /* ParseUI.h */, + B3F156062F2234AE09635E3C21571CF9 /* ParseUIConstants.h */, + E31C214E20318A87C53DB448EB27C886 /* Resources */, + 5D2BF76AAFCF51667EA94C561B87B388 /* Support Files */, + ); + path = ParseUI; + sourceTree = ""; + }; + DDE689B6B09170B803B77F9EB078E1CC /* Bolts */ = { + isa = PBXGroup; + children = ( + 200225903789300BB00A2889A4437CE8 /* Support Files */, + 2F8332C2B83A463D42D1B98C775DFC06 /* Tasks */, + ); + path = Bolts; + sourceTree = ""; + }; + E057C2EB9A740CE736968F80830BAC47 /* pop */ = { isa = PBXGroup; children = ( C091E831068E3E504A40AC6932B39C87 /* FloatConversion.h */, @@ -1310,701 +1999,248 @@ 35574BADA6CDEA944F089CBC021F01AA /* TransformationMatrix.cpp */, 2E056FF5C4EC38A55B45FB52F395D72E /* TransformationMatrix.h */, 96015F1C746803D9318614B277F71BCB /* UnitBezier.h */, - A2CC793318ED7670850E5733FFF43C72 /* Support Files */, + 1088A147F4A4DB5B1AB0A3782F770EF4 /* Support Files */, ); path = pop; sourceTree = ""; }; - 99B74290A3DB42BACD4580083D40BFCA /* AFNetworking */ = { - isa = PBXGroup; - children = ( - 1FE2EB61A95016598E72642BFBCBADBE /* AFNetworking.h */, - 343CC481EBFBA9EC3DCCBF88496BCB7E /* NSURLConnection */, - 70D08BD050FBEDBEF01649A778D854ED /* NSURLSession */, - 44B2BD7E350527D031DAEA225965006A /* Reachability */, - 7BD6D8170D87526BD20EC14D6EF61666 /* Security */, - CF98E27314C6E37BA444B6EAEAC629AE /* Serialization */, - C2714C2E5FA708AC2BFA8D6C15D7BDE2 /* Support Files */, - 1871510231A7BF05CD4E00BA2C29A9C6 /* UIKit */, - ); - path = AFNetworking; - sourceTree = ""; - }; - A2B93CF04B449D80B12ACC4F1E8164D9 /* Support Files */ = { - isa = PBXGroup; - children = ( - 6FE7C428DAE4B23EBBF3039F8397D53E /* ContextMenu.iOS.xcconfig */, - 92EFA64DEEA2D7C788D39BE4B87668B0 /* ContextMenu.iOS-Private.xcconfig */, - C3E92FDA0225F57156353438BB9F934B /* ContextMenu.iOS-dummy.m */, - DAC577DC0CB800AB728273F16E83046D /* ContextMenu.iOS-prefix.pch */, - ); - name = "Support Files"; - path = "../Target Support Files/ContextMenu.iOS"; - sourceTree = ""; - }; - A2CC793318ED7670850E5733FFF43C72 /* Support Files */ = { - isa = PBXGroup; - children = ( - B86F68BE12DD9BF16FA4EA2B8D7C6F99 /* pop.xcconfig */, - 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */, - 59B3FD41DEC22C5891C9B83C27BC25E0 /* pop-dummy.m */, - EDB35C20F0111B6D8B6548B3DA6BA7CD /* pop-prefix.pch */, - ); - name = "Support Files"; - path = "../Target Support Files/pop"; - sourceTree = ""; - }; - B9C0326EEBE4AB593BEB84C616215B18 /* Parse */ = { - isa = PBXGroup; - children = ( - 6B26ED3E1774D8AF7C7968032E48D8AD /* BFTask+Private.h */, - F08E0A9E75FBD4FAACDB3C8A68081A32 /* BFTask+Private.m */, - B332CC51A8213F3EF1C7A3FE399A5C2B /* PFACL.h */, - B94497EF1A56D3F72FD2BA76060DF1EE /* PFACL.m */, - B627B86FB20866D18CE3E2A40FF283B7 /* PFACLPrivate.h */, - 53683441896998F6CE0216D4310DD24D /* PFACLState.h */, - 06BDEA785CD1CCF3EC5F7D97641DB94B /* PFACLState.m */, - FE27C4E5599C93B42BFE6AFD312AC39A /* PFACLState_Private.h */, - 6E2A46AA281CDF574C18A7B9311A6C93 /* PFAlertView.h */, - 37DCE2246C320FA0B8BF9CAD3758AE71 /* PFAlertView.m */, - EE8606221826FA5909EFFA2016DEE26C /* PFAnalytics.h */, - CAB37E3012ED80BEB1BCF0077E7E38F4 /* PFAnalytics.m */, - BF99C2FE0ABD09A876B4FDC3B73D693D /* PFAnalyticsController.h */, - 5B55313727430781904B26ED39BC5BD6 /* PFAnalyticsController.m */, - 857A8C29F0006E02894A63C09D31CB85 /* PFAnalyticsUtilities.h */, - 4D237A86108BD1DB8A37BCC3FCA0DC90 /* PFAnalyticsUtilities.m */, - A3A9D34733E3E1E62E950164A6B84C80 /* PFAnalytics_Private.h */, - 898ECE478F3C854611287289F4977E11 /* PFAnonymousAuthenticationProvider.h */, - 1A5BCF29FD1B3CBCBD8B387388746B55 /* PFAnonymousAuthenticationProvider.m */, - 36B65B247D65EE46D2A8F3ACDC87870F /* PFAnonymousUtils.h */, - 8675E8B47522DD1649EAE7CE1299B776 /* PFAnonymousUtils.m */, - 671A1745311D8EA359B1DB95D621711E /* PFAnonymousUtils_Private.h */, - 2B2B77FA62BB014F37CDD536B7F39AD5 /* PFApplication.h */, - 4DC525DF3A9AB295F68FFA79C1865B4D /* PFApplication.m */, - 38E00AD6C99A24C72256073EDD208D3F /* PFAssert.h */, - 453A45902215CAB1B07AEEBCAEC35958 /* PFAsyncTaskQueue.h */, - 663C1A74DA7B1A684C31157464DF2CC6 /* PFAsyncTaskQueue.m */, - 507ED5364F8D323521133232F9E26134 /* PFBase64Encoder.h */, - 568A6DDB145B9BE497001F309F81C25D /* PFBase64Encoder.m */, - 2B7693C271516E5E5D162BA7DC113F4E /* PFBaseState.h */, - 245BC03B9F6AB7B69A163206AF3C2C32 /* PFBaseState.m */, - 893348B36B23CFF515B649DF3EA05962 /* PFCachedQueryController.h */, - F9A596AB40BA679CB6E7CAFF9C12420F /* PFCachedQueryController.m */, - BB51AB9AA27CE8D0A85E5690F23CF6EA /* PFCategoryLoader.h */, - 96403B2BFDB3FEACA24969CF6378D7B3 /* PFCategoryLoader.m */, - EA79AC3D10A54A6115A06F836846E4EB /* PFCloud.h */, - 70864853E727E60E7B86865739D2ECED /* PFCloud.m */, - C1555BCE0D8C4B718BB72214683D3907 /* PFCloudCodeController.h */, - FEC012E8559514CD5FDA778785F7234B /* PFCloudCodeController.m */, - E424F4FC00D39BFE64948677EB2D53A7 /* PFCommandCache.h */, - 24E60B787A9F785262AC44B47108D70D /* PFCommandCache.m */, - A28218952E226A9395672AAF9BB98065 /* PFCommandCache_Private.h */, - 7F06EEE3B8D8FE8CE602F2D363FEE64C /* PFCommandResult.h */, - 653B4653F0D1C20696A6E65E888E8D15 /* PFCommandResult.m */, - 0F1D200E550A12E3F43CD3F31E131DBE /* PFCommandRunning.h */, - 0B072562DD642F896CD3C3B7CEF2911B /* PFCommandRunning.m */, - 0EDD645EA043AC01BD2D294C8E25D7C9 /* PFCommandRunningConstants.h */, - 48DF685D40431A00C7B7572D23340086 /* PFCommandRunningConstants.m */, - 669BF4D4C83FA3E0ABEF32501AC4C5EE /* PFCommandURLRequestConstructor.h */, - D0D0DD7229B595E60BA7D6C2A41C4B6B /* PFCommandURLRequestConstructor.m */, - 72C04520515C92C01E90D8D58C97BA21 /* PFConfig.h */, - 73F5CAD466111E720F4983773D164AED /* PFConfig.m */, - D4186E5938E4D869A1267A20AC002113 /* PFConfigController.h */, - 3501C65AE5330DD19D3236E70095C9D8 /* PFConfigController.m */, - 18D7C9B8DD8A89571437499374A39984 /* PFConfig_Private.h */, - E8FCE3D950703287AE285D63EEA38289 /* PFConstants.h */, - 6D45F61B78D4419060D26A7EBAF70EC2 /* PFConstants.m */, - 7725DA2CCC4B05B3E8613121DAB013CB /* PFCoreDataProvider.h */, - 0FE1708AB969B7C864FA6A717B2332A5 /* PFCoreManager.h */, - 033DE2F20554C4483F70BB66112A660D /* PFCoreManager.m */, - 8D19EBD75979B9CD23ABA38BA45D0DCB /* PFCurrentConfigController.h */, - 2966362D026D5B9C80E247EEDC0F4E9B /* PFCurrentConfigController.m */, - 009D766A60F44D81650E505380CF6EE5 /* PFCurrentInstallationController.h */, - E2F89C1AC67968BA35BD1123BE34D894 /* PFCurrentInstallationController.m */, - ED172D7F5B84203E7C6617EC01D187F2 /* PFCurrentObjectControlling.h */, - 0D2C0E09440F10C2834146B969AD0950 /* PFCurrentUserController.h */, - 8C6B8C7E82B804AB1382E38F8E99158C /* PFCurrentUserController.m */, - 721E34BBC2F5BFD148652BD36955365C /* PFDataProvider.h */, - 965FBA9FA425FE1BA4E41B4FFEE42FA8 /* PFDateFormatter.h */, - CF46F6E5A7E52A35C89851DED33A2176 /* PFDateFormatter.m */, - 65F6F140EE00AE08D92C70E19B66F5A4 /* PFDecoder.h */, - 7C4ACAFFC579192F80AE309D38F4CE0D /* PFDecoder.m */, - B65D4C06593414E001B75B30C7A68F64 /* PFDefaultACLController.h */, - 1896BB3AD97D1E8CB9D17C6A982672DB /* PFDefaultACLController.m */, - 14BFF77A40EB6D31D0D53D242A01BED0 /* PFDevice.h */, - 0823AECF540B112CC0DD23CA1EB33F1E /* PFDevice.m */, - E12E9AD26CFEFE56F770EBC8224F9542 /* PFEncoder.h */, - B0D0D5C8FF6EA31C0E29554F03FFAE35 /* PFEncoder.m */, - AC7F1FE520C94B33E628A5BF7D802073 /* PFErrorUtilities.h */, - E97A297341B3E569BD3DEA54A611D6DF /* PFErrorUtilities.m */, - 2348B7338D870B151D50A511AC6711D0 /* PFEventuallyPin.h */, - C9BD34A121ED46D7A11BF5ED82E5B876 /* PFEventuallyPin.m */, - 63F5E36EFB9403CA32B8B5C3A3F78855 /* PFEventuallyQueue.h */, - 1C0E7BEE92130638A860786486BF4398 /* PFEventuallyQueue.m */, - CA572C4AE94CB9AC2FF8EE80A7E1179F /* PFEventuallyQueue_Private.h */, - A250843CDACF4CC56A8C27C4FDF9C270 /* PFFieldOperation.h */, - 4B4E5220C651194225EB11D393463146 /* PFFieldOperation.m */, - D93333F49B10A154028722630A69414C /* PFFieldOperationDecoder.h */, - BFBC36D6FED37ED769BA66522F1A639F /* PFFieldOperationDecoder.m */, - 82BCDD60CE06A0870E0ED0D853E05739 /* PFFile.h */, - 59143BC1CCA767489CC63EC79299C132 /* PFFile.m */, - 489E3B9351E8F3F82DAFE89EEEC84804 /* PFFileController.h */, - 676C7A56F303C34B831F1F015F05812E /* PFFileController.m */, - 26DE5D007AAFB71206252AE40BAE833B /* PFFileDataStream.h */, - 206BAB6E51C3AC0ACA2E1320A911DA36 /* PFFileDataStream.m */, - 5F3726655401860B18DB85328C091228 /* PFFileManager.h */, - E745CDD44F448B0BB657E770CFDCF27C /* PFFileManager.m */, - AD274DB5984402947E47F0A1B92E9CA4 /* PFFileStagingController.h */, - 461917BD0B571A033CB9E74AD334A12C /* PFFileStagingController.m */, - FF3530F7B69DD859647B6416F1A85C73 /* PFFileState.h */, - 283151768413CC359CA4D2B1E9BA275A /* PFFileState.m */, - D3E8D0F342FFF167540A96E017CCF674 /* PFFileState_Private.h */, - 0854CFF4AC229E21A7EC471BB9EAC43F /* PFFile_Private.h */, - AE96E6223940CD70D6F01EA288192D93 /* PFGeoPoint.h */, - 57F2605E98764A7779B3213480606C71 /* PFGeoPoint.m */, - A09F4FD4303453124FB9D4870DDE2F0C /* PFGeoPointPrivate.h */, - 869C2B98A84E7A66ED53252EEBD534C7 /* PFHTTPRequest.h */, - 022CFAB7CC0CBD47E0AC47A4EC57B983 /* PFHTTPURLRequestConstructor.h */, - 62078C4D93D4BF5CF7430EF680857264 /* PFHTTPURLRequestConstructor.m */, - 6A3138F383603A594BF1120840E69F93 /* PFHash.h */, - 5F6D07CF3F5445D97AACFB330CF98F66 /* PFHash.m */, - 57B1DA40C85BD720B286FFF8C7EA6F91 /* PFInstallation.h */, - 4A0A7E7C948EBD45C167B8D1A339D98A /* PFInstallation.m */, - C01AC5406A1FE996C23D44F2D1E54AE2 /* PFInstallationConstants.h */, - 7F214F1BB9B408A25954535EFA736CA6 /* PFInstallationConstants.m */, - FF3D2A57C25C1CECF52F0872DBB55F05 /* PFInstallationController.h */, - 81EA6C27FFDF760CFB4767BB48E66220 /* PFInstallationController.m */, - AC3758631123BBA424D0C687A75ED31C /* PFInstallationIdentifierStore.h */, - C609AF7E1C4CAC8BDE38A1E28E64414A /* PFInstallationIdentifierStore.m */, - 92C8318F0774CE0DB5B5FA3C7961C69F /* PFInstallationIdentifierStore_Private.h */, - A8AD04541066E8C429FCD51E8A604FF1 /* PFInstallationPrivate.h */, - C452DCF65E6EEC6AD15BD77F01EDF779 /* PFInternalUtils.h */, - DAD2B1AEAEEE3B6167AA69B21E00DE2E /* PFInternalUtils.m */, - 58898FE04784C24EDFF6D77428F6BB91 /* PFJSONSerialization.h */, - F6357CB5A05AA7E18DC9505CDB7B5CE8 /* PFJSONSerialization.m */, - 245FF007BEF549EF81D7E0222214C303 /* PFKeyValueCache.h */, - 3E2E03FFA5C12908D09BC583858570B6 /* PFKeyValueCache.m */, - A63FC1750D756C077EBF6610F23A216B /* PFKeyValueCache_Private.h */, - BA733732E0D2D37C0A92D946DE2A9EEE /* PFKeychainStore.h */, - D4EBEE47CEE4A7801385DB1D8C88383E /* PFKeychainStore.m */, - ECBD824DA95D72A1DD329C331E1D9D09 /* PFLocationManager.h */, - F0F3A2FA993D77CC93EA7FCA0571B6E3 /* PFLocationManager.m */, - 80678CF83F7E4592403D479266CD73C6 /* PFLogger.h */, - C124801645AB37C7712D483A5C87D83D /* PFLogger.m */, - 0931322359A8E70F6F16FED5F97879E5 /* PFLogging.h */, - E4A624B26435247F139B091B03F95E5A /* PFMacros.h */, - 372923DCA1E5BFDF1DBD57E93002E783 /* PFMultiProcessFileLock.h */, - 7388AF1F66A03C223B0DA9338F552A19 /* PFMultiProcessFileLock.m */, - CA70C152E8EBE75160C47A587C7EC00D /* PFMultiProcessFileLockController.h */, - 5C3B64369BE6A9ACF09E4E03E3747FA0 /* PFMultiProcessFileLockController.m */, - 016F2569F5E0DA62E089B095D3A04E84 /* PFMulticastDelegate.h */, - 475310436BBAD84F7095E6DB0BB83F78 /* PFMulticastDelegate.m */, - 8E69E884C61DBE3CA50B5B88897651DB /* PFMutableACLState.h */, - 82B2F774B2C3F6B000F7B323A1E51571 /* PFMutableACLState.m */, - 61DE303474ACF3AAEB6BEF7CF3151683 /* PFMutableFileState.h */, - 61308EBC3E3CCE6EB380B4761543AD72 /* PFMutableFileState.m */, - B58A5A84AAAEBE1A391E99E9CAED0FF2 /* PFMutableObjectState.h */, - D5CF558DFE9FECD0D4DAD9727F9E7447 /* PFMutableObjectState.m */, - B2586CEB4DB20E7AED5EBFD3FB96B973 /* PFMutablePushState.h */, - 0DBB0CAB75C437C618EEBFAF8F62A947 /* PFMutablePushState.m */, - 345A7737A02453DD9D85EE95F928690B /* PFMutableQueryState.h */, - E50C20130F417DFB11F5B3BD1EE46846 /* PFMutableQueryState.m */, - ECE13A0CEBDF1FFEEF6A3A9D07298478 /* PFMutableRelationState.h */, - 372FE1327079A6911530ABFAF7BF2E68 /* PFMutableRelationState.m */, - 1A28796B1724F0F5B766249296CA182A /* PFMutableUserState.h */, - ECA0CA78D651CA48D080363398697627 /* PFMutableUserState.m */, - C7C65DD82B3A08F62D43E9DAC3B23880 /* PFNetworkActivityIndicatorManager.h */, - E2534618753A8E575CA58125DE04D03D /* PFNetworkActivityIndicatorManager.m */, - 7B131E3C12FA20F7C590D94EF645128F /* PFNetworkCommand.h */, - 32AEDEB7E9CE1E1D2795C43EFD540009 /* PFNullability.h */, - A52CE45BD75B2826314A3BCDCB813398 /* PFObject.h */, - ADEFE34C92FF818B135715C323E4963C /* PFObject.m */, - F0FF6176EC466320C2C4D25100A1B61E /* PFObject+Subclass.h */, - 38C5CB3B26D08AF88F501A05B91F10B4 /* PFObjectBatchController.h */, - 530ED4C4F72784908C56CECFABD0231C /* PFObjectBatchController.m */, - 5710C75607065D22ED2DB5CCCFB27A3D /* PFObjectConstants.h */, - 923EF0E8FAAA93BA1AF9399DE58923FF /* PFObjectConstants.m */, - CCFA76D1938B2CCED5785C13FA4FC5B8 /* PFObjectController.h */, - 656B8A19AFF797C4926D6E2E8D102049 /* PFObjectController.m */, - 6D97138DECF19BAFB63881A6D4EF92BF /* PFObjectController_Private.h */, - 2792004D5441520275B8E22F94BD8E5C /* PFObjectControlling.h */, - 237D0CDD69C7B78A1BDB8DDF87F9EC2A /* PFObjectEstimatedData.h */, - 734124A4F7A87553483F895904EE19A9 /* PFObjectEstimatedData.m */, - 6D14E98ACAAB4CCD1367FDFBC9088D27 /* PFObjectFileCoder.h */, - 196698284757A108BD18D4EFC0D470B2 /* PFObjectFileCoder.m */, - 28676FBC1D97921BD11D7A12C922CD0A /* PFObjectFileCodingLogic.h */, - 71E77E05CC2CDD5B79D7552C17004EFB /* PFObjectFileCodingLogic.m */, - 3D7123F7FE1F84DEDBE2ED35D8844839 /* PFObjectFilePersistenceController.h */, - 8AA0E5427E9EFCC96AC0F8CED0FBEEF4 /* PFObjectFilePersistenceController.m */, - 62C1941BE9E36B0C41BF43BFCF7681CB /* PFObjectLocalIdStore.h */, - 9102F91F4F8FC737DF8F8B04EB6B1183 /* PFObjectLocalIdStore.m */, - B7E18330D5E87E2825CE1B429D6F6693 /* PFObjectPrivate.h */, - E0041782152C1ABC1F18B164311EAF2E /* PFObjectState.h */, - 6DC7D6BF37746831732BEE64A78E2E64 /* PFObjectState.m */, - 86D677D0061394762DEF101FECA5E262 /* PFObjectState_Private.h */, - BF9B1FD5D1E2441D018DF7EDDDC4A3FC /* PFObjectSubclassInfo.h */, - 3DFA1FB737DEBE392F5582656ED1040B /* PFObjectSubclassInfo.m */, - CDE463E6B9D1AF8E6AE850CD5E68849F /* PFObjectSubclassingController.h */, - DA4157CE1B57DF0CDF63B24888DCEA61 /* PFObjectSubclassingController.m */, - E90014A2B5A64CF0A01CA41D71769C7B /* PFObjectUtilities.h */, - A988AADA8AE3AFF34F68D1673691E59A /* PFObjectUtilities.m */, - B024D2C96D819E81E5D194B562CA7CCF /* PFOfflineObjectController.h */, - D8AA77C187E180A556AF4ADA309BC0B6 /* PFOfflineObjectController.m */, - BBFE8A0106C591064C969ED096275D29 /* PFOfflineQueryController.h */, - 2DC00CBF82C85912449AE191DBEC053D /* PFOfflineQueryController.m */, - EAFA435D26900861E36F1BAF155390C7 /* PFOfflineQueryLogic.h */, - 0862542F3708CEA8901318AE4F5FE02B /* PFOfflineQueryLogic.m */, - FF6B3C0F9FB537B2DB4C17A15E8F06D2 /* PFOfflineStore.h */, - B0E75CCDD1A5217E3601BF092D5385C1 /* PFOfflineStore.m */, - B1483642455FE93A36C64B730F27BCD1 /* PFOperationSet.h */, - 92A56E592AF27DDA726FCE1F4C398C8E /* PFOperationSet.m */, - 8510965E6696177882F8683FF279CA62 /* PFPaymentTransactionObserver.h */, - 76B1F1A7DACF8124FD67EEFFB88526F1 /* PFPaymentTransactionObserver.m */, - 7203E516FF95A460652ADF5DFDEB3FB7 /* PFPaymentTransactionObserver_Private.h */, - 189B90A77BD5596205FB77D8F7DBBC66 /* PFPin.h */, - 4FA3D2B13C2E276A13164FD9D412F89D /* PFPin.m */, - AA0EFB7BECF9EB8E71FD258F0F60D3E5 /* PFPinningEventuallyQueue.h */, - 0BC40E8FF522D488100477128A373255 /* PFPinningEventuallyQueue.m */, - 37D8598915FD79DCA21C88192869017A /* PFPinningObjectStore.h */, - 315895D529B1136E61253E4EEE127FAC /* PFPinningObjectStore.m */, - C4F300D4AA623B3DFFDF7971E2B5A614 /* PFProduct.h */, - 893F517620D76C4DD97407C35B30C8DC /* PFProduct.m */, - CBCE01FE706B02A990236BCCFB09B153 /* PFProduct+Private.h */, - 529C0DC5511102F293AAA76310789551 /* PFProductsRequestHandler.h */, - 62FA41489E9F671A6D2AC37AA15E70FC /* PFProductsRequestHandler.m */, - FD826E93D8E3CA261C02B951A6F9751D /* PFPropertyInfo.h */, - B1D6FB68F1851036506A1E965B20FBD5 /* PFPropertyInfo.m */, - 3070F8AC10357FBF3BA3FE9A093D8A9B /* PFPropertyInfo_Private.h */, - 1DD825DA40E92E93FAC2EA00807BF7D1 /* PFPropertyInfo_Runtime.h */, - 97ADB30A5976DC7FE832E68A415B22F8 /* PFPropertyInfo_Runtime.m */, - DD2F94AB2074545E677D5F66F9D63121 /* PFPurchase.h */, - DD428B827A37AD34DF77CC5C561BCE0C /* PFPurchase.m */, - F48EC1FB45579CEBC6000F723C5E081B /* PFPurchaseController.h */, - 94DF16E2294CA8FEC9FD2ACF36D38638 /* PFPurchaseController.m */, - E6235BD1313049794F1B1DA7AB8B72BF /* PFPush.h */, - 62FAE8C508439F783E07B639E62E5388 /* PFPush.m */, - 1B2FDDD8F730AFFD1DFF805E250C3654 /* PFPushChannelsController.h */, - 89A3DB76DA1562634E50BB32E31C34F7 /* PFPushChannelsController.m */, - 0F7453E990BF208758602D5B39CB7388 /* PFPushController.h */, - B1E9EC0D78FBC6373DBD668B202BBA25 /* PFPushController.m */, - BBEDFD1C6F661507D70B9C73268193B3 /* PFPushManager.h */, - 8CCBDC7EA64ECE9974D334AA69A02EEA /* PFPushManager.m */, - A60CF5CEA93C2F6926C54CA3679A1556 /* PFPushPrivate.h */, - 97D5C73BC159E5CEFA38B5345BB3B77E /* PFPushState.h */, - 9B3991EEAD0B989CE24DC09DA3F6F84B /* PFPushState.m */, - 56CE00CA829DE03D96192E0DB1B3B4B5 /* PFPushState_Private.h */, - 39451587CFA3D7024575C72DA66A271B /* PFPushUtilities.h */, - DAF8AFF71E17239BC9D066B413214C0F /* PFPushUtilities.m */, - 0D7ADA7673FDA922B924DB960BC45FEE /* PFQuery.h */, - 291630B6FE4315F0B5B789D1ED22A66C /* PFQuery.m */, - 860D58AD9C905EA188BEF7C2C8B3B2E4 /* PFQueryController.h */, - F3FCAEE7ACA390A41ACE7637EA5338AE /* PFQueryController.m */, - 6E19C92B6E4B8413D0F549918EC73FD0 /* PFQueryPrivate.h */, - 58EC2DED4BCC481232C4E104FEB2F9ED /* PFQueryState.h */, - B7C407A664499E7354D9C1CCDB113A59 /* PFQueryState.m */, - 5AA108C575CCC3045CF6EBEB7C2D35B5 /* PFQueryState_Private.h */, - E1129C74BCA89B5DEF89974B3EADEAF6 /* PFQueryUtilities.h */, - BE9F74FE3902C79E0394988E24194855 /* PFQueryUtilities.m */, - 82175545FE728571466A9FD6E8D8A7DE /* PFRESTAnalyticsCommand.h */, - 946D9742CB5DB1C57ED0E3BBA63E66BD /* PFRESTAnalyticsCommand.m */, - 63CF9DFF309CFA031748CEB31E227BB9 /* PFRESTCloudCommand.h */, - 105DFF60164FDC71E3359B156DAE0937 /* PFRESTCloudCommand.m */, - 595A306B6C145E017C4B885F8ABB9F94 /* PFRESTCommand.h */, - 36E7ABF06376C0698BE4B369C1255EAD /* PFRESTCommand.m */, - EAEF6A0ABE272D5803680B4298EB62D2 /* PFRESTCommand_Private.h */, - 07A16D1432732F853E3D7B39B1DB383E /* PFRESTConfigCommand.h */, - 9F519C682C4E52952D376F5423040E5B /* PFRESTConfigCommand.m */, - E20D9CF29C188B71F5C9BA5C972A8960 /* PFRESTFileCommand.h */, - 5367E0C94AEC8755F6974A3C97264428 /* PFRESTFileCommand.m */, - D973AF50D37829E5A629A80ED88FF2E9 /* PFRESTObjectBatchCommand.h */, - 32D54A528AA2134A544108B4E124A617 /* PFRESTObjectBatchCommand.m */, - CB4444A178F9CEC2E097C90C7D351E7F /* PFRESTObjectCommand.h */, - 5775915FCBF7CB8AB7E50C1474A500B5 /* PFRESTObjectCommand.m */, - D244FD9C2061C46A05C67E3557A6D7A9 /* PFRESTPushCommand.h */, - A89E8441EF384E751C66846D8C7DA140 /* PFRESTPushCommand.m */, - 91B168BFBEBBF3272A49E4240325DAC3 /* PFRESTQueryCommand.h */, - 4A747E0C0BA89EAF9D9C9B35EA62B097 /* PFRESTQueryCommand.m */, - C5FE3CDD5FB245BC2913E868E9DE3995 /* PFRESTSessionCommand.h */, - 9507DB69A2FE53769B24313F98BCFB5B /* PFRESTSessionCommand.m */, - 60F954C2BD5989BD4626F5C1F5BCC48A /* PFRESTUserCommand.h */, - 876ECCCFCF0B3F87EC5560A2FF6B5059 /* PFRESTUserCommand.m */, - 1EBBF4F6FA934C6BCACE0C5744A3BF58 /* PFReachability.h */, - CBE1F1F92C05B5ADE677C606485BB75F /* PFReachability.m */, - D26D8AB91D60CAC4AF163A949239DE49 /* PFRelation.h */, - 1FCA6291D3A1D8E40FC410D0747380DC /* PFRelation.m */, - D15D922CCB9D2F0B65F44C7FBFE53EBC /* PFRelationPrivate.h */, - B3F7FC9A375F4CC184EF1CB84FFF2E2F /* PFRelationState.h */, - 3801D32A117D840B4286437B7A779361 /* PFRelationState.m */, - EF64AAF633AE4BDB30247D6A4090B89C /* PFRelationState_Private.h */, - 33CAFF9933F161C320331CCA71D23A5F /* PFRole.h */, - 2DA3428B35116EA19374F593BE42F3BD /* PFRole.m */, - DE2DE7B62241FC17A59B0C930D7837B4 /* PFSQLiteDatabase.h */, - 9EAF2A823E92A730EC588801D943C514 /* PFSQLiteDatabase.m */, - A60A05A0392E32822607D587C5380E61 /* PFSQLiteDatabaseController.h */, - A78F4615CC1292D0FA53088C626957D8 /* PFSQLiteDatabaseController.m */, - FFD183F4D915B996DC61B082E5317000 /* PFSQLiteDatabaseResult.h */, - 13D7A1D1A9F6D9020B6E721D5D4D5730 /* PFSQLiteDatabaseResult.m */, - 846998BF4B29751792079F5759BBA274 /* PFSQLiteDatabase_Private.h */, - 007D017430CAD14C507E4E16894E1ED8 /* PFSQLiteStatement.h */, - A1B4C9A06FB08BC3FE354D588CD09AF7 /* PFSQLiteStatement.m */, - 752500BB2A0459E3CB234F46BFDE1EED /* PFSession.h */, - 7C6969F6DC20ED490487711A80935900 /* PFSession.m */, - 2B493332AF25497985B3420336C8E310 /* PFSessionController.h */, - CF35E714DE566F845ECEDF6AE894C5F0 /* PFSessionController.m */, - 15DCE6DD786D364DDA4BCAD1F24895FD /* PFSessionUtilities.h */, - 810E80DCE80B90D80B5F21BF7212FEFB /* PFSessionUtilities.m */, - 96A60F95EF69292F16C085789B646687 /* PFSession_Private.h */, - BCC77513019B8BF9A882928F74C52424 /* PFSubclassing.h */, - 8F5D0107B7A3A38D5B48854CDBEA6CD3 /* PFTaskQueue.h */, - 0E374390CBBC0449CF5CC0A1C32EE8C5 /* PFTaskQueue.m */, - D963AA70AF8A60F226D09FBC6225E686 /* PFThreadsafety.h */, - 436A81D9B2A9E41E99BF86F1C6871A0A /* PFThreadsafety.m */, - 6BAB10EAFDE7E6E60F85AB4A4C3AD67E /* PFURLConstructor.h */, - 6D3ED73DF6D62367D4288EA69377B589 /* PFURLConstructor.m */, - 9CB47EA89DC2B49C7B2B12127098FB33 /* PFURLSession.h */, - AE0BE1F355DE44ECCAEA5BF8D4526C5A /* PFURLSession.m */, - CDAC0B9AE144C31E2DE5AF0A4DB1EDC4 /* PFURLSessionCommandRunner.h */, - 075D17B28FD88D19723BDD0F7C7ACF85 /* PFURLSessionCommandRunner.m */, - 47DED761A5B41071D4A460714CF9A610 /* PFURLSessionCommandRunner_Private.h */, - DFE6FDE4C6292695F3EBEFE040B0685E /* PFURLSessionDataTaskDelegate.h */, - A3DF42FD99A813DEBC5C62B3491B1AC0 /* PFURLSessionDataTaskDelegate.m */, - 780EF3BE11B2381FB28EB629FB8CBC29 /* PFURLSessionDataTaskDelegate_Private.h */, - CFC48C77C63A582B14A5B098E6FCF482 /* PFURLSessionFileDownloadTaskDelegate.h */, - BA8D893893775B109603AF7A33CD563B /* PFURLSessionFileDownloadTaskDelegate.m */, - C40DDFB915A319DD1CC8CD9340920EFF /* PFURLSessionJSONDataTaskDelegate.h */, - 9357693A996038C30E8C787613239775 /* PFURLSessionJSONDataTaskDelegate.m */, - 347D5D631A6A12B0298E13B5415AEAAF /* PFURLSessionUploadTaskDelegate.h */, - AA5D3771AE76625915E333CFABB45A05 /* PFURLSessionUploadTaskDelegate.m */, - 450938391ACE611C45583A2F6117FD6D /* PFURLSession_Private.h */, - 0E8BFD8BC695971FCCBA291EDD68F350 /* PFUser.h */, - A3A5889AC5CCB95EF1C4DD6B7C5C930D /* PFUser.m */, - BB019CE2BDFE6EC36FCD9993DB744EFA /* PFUserAuthenticationController.h */, - AD9250D9FE4979DF37C24BE1CDB4FF8B /* PFUserAuthenticationController.m */, - DD1568F7E2ED50F1C629DDF3D9F3020C /* PFUserAuthenticationDelegate.h */, - 9645D0E8258AB75B2C992E0915EA9BC2 /* PFUserConstants.h */, - F0662D5C0759804552360A67D1BDFBA0 /* PFUserConstants.m */, - 08DB18CB20934926437D11F21D1D9B8E /* PFUserController.h */, - 358BFE48BAAE8F3F03CD0C0904BC4C08 /* PFUserController.m */, - A2BD31107881F3881ADCD378256D4B02 /* PFUserFileCodingLogic.h */, - 5DA5FA1FA814DC209F9EABCD6B9119F6 /* PFUserFileCodingLogic.m */, - 457B2F0DFF5B74AEFF8A1D9A714104EA /* PFUserPrivate.h */, - 562875D8611745AF8CD45A6CDA6DC927 /* PFUserState.h */, - 8072BEAB5E3DFBED370817399B610731 /* PFUserState.m */, - 5E5F89585BF738F0A58C77BC3BE1A932 /* PFUserState_Private.h */, - BA10EEFBDA4AD314FB6D71B9DBD76FB7 /* PFWeakValue.h */, - FFE3BF2FE5A767CB3A9F0B32672156AB /* PFWeakValue.m */, - 12BB94C26636A7E690216E2AEEFAF264 /* Parse.h */, - 7A880B37F4F90E6B3CCA1B3FAD582B81 /* Parse.m */, - FC0150E534DA14510CC9BC5D0C1AFFB3 /* ParseInternal.h */, - 4CD3D62A5F9D0B310DCF7C520D812B6F /* ParseManager.h */, - 1DB83418592CB04C28FA16D53A2F50BB /* ParseManager.m */, - BEAFE0D908EC855629B1121D957A354A /* ParseModule.h */, - A011CA3F808702224552F151CBB37A51 /* ParseModule.m */, - FFEA133F46FCCEC9897A623F3336EC38 /* Parse_Private.h */, - 58A31A01D078FCF8E66D5353FA341FA2 /* Resources */, - 4A3B2BF0C2CE1DB37AB68EDF92FD44AB /* Support Files */, - ); - path = Parse; - sourceTree = ""; - }; - C2714C2E5FA708AC2BFA8D6C15D7BDE2 /* Support Files */ = { - isa = PBXGroup; - children = ( - E73B966684C4350307ED9BFDFA142DF1 /* AFNetworking.xcconfig */, - 69C89E4E56C77B03B486A9C81B595B44 /* AFNetworking-Private.xcconfig */, - 0B19A6DDEB20A310104A97E0953192B8 /* AFNetworking-dummy.m */, - 86A60F0A962861AF2DAA6A87C133F7E8 /* AFNetworking-prefix.pch */, - ); - name = "Support Files"; - path = "../Target Support Files/AFNetworking"; - sourceTree = ""; - }; - CCA510CFBEA2D207524CDA0D73C3B561 /* Products */ = { - isa = PBXGroup; - children = ( - DE3508684073BF9ED1EE176A805EE3FC /* libAFNetworking.a */, - CF774A16F869C80126A81687EB1E85D6 /* libBolts.a */, - 3161EE94B4EAC7208319195F1483596D /* libContextMenu.iOS.a */, - BD2D7F17F9C540FBFE58E4DB0EEBDC9A /* libParse.a */, - 5CE1AE8BFDFAA049F0F73E15ED7ACE9E /* libPods.a */, - A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */, - ); - name = Products; - sourceTree = ""; - }; - CF98E27314C6E37BA444B6EAEAC629AE /* Serialization */ = { - isa = PBXGroup; - children = ( - 93F14E13D1AAFFA4C781869593E6A6FF /* AFURLRequestSerialization.h */, - D0E74CB04A2E39384A95EDA3500A04D2 /* AFURLRequestSerialization.m */, - 7A69D20AEBC89B67DD33CA2CC54E309B /* AFURLResponseSerialization.h */, - 80B7FAB2B889140EDF2DC60D3C4A5969 /* AFURLResponseSerialization.m */, - ); - name = Serialization; - sourceTree = ""; - }; - D2411A5FE7F7A004607BED49990C37F4 /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - 952EEBFAF8F7E620423C9F156F25A506 /* Pods */, - ); - name = "Targets Support Files"; - sourceTree = ""; - }; E2B9394A418EE71C1E22343458733EF0 /* iOS */ = { isa = PBXGroup; children = ( - FB0347B267799D3314B6438A04D898BF /* AudioToolbox.framework */, - 48514E935FE3E435F151EFEB4D829A65 /* CFNetwork.framework */, - 6408EC1F7E48296B333659567543173D /* CoreGraphics.framework */, - 0E1148A11007AFF78ABDECD376185D39 /* CoreLocation.framework */, + 52CE38F964085D76CF0D20DF4E04ED74 /* AudioToolbox.framework */, + BEB99F4555012D9359140EE13E67A2EF /* CFNetwork.framework */, + 80E5920EF0293041A672DF21CBD90614 /* CoreGraphics.framework */, + 9C03BDCE6AA9F4C2CBA33DD19A323934 /* CoreLocation.framework */, 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */, - 2BD22E7A59F4BEFF52D4F43A0AA7EB30 /* MobileCoreServices.framework */, - 8BABE1F9D15A2416835BA1EC9EB7E043 /* QuartzCore.framework */, - AE87F34D52CD28E7113F03F7CEA01F06 /* Security.framework */, - 35568ABE019B8ED099EFF07CE242DD67 /* StoreKit.framework */, - 74BAE971C6A2FC6F319D21B31E77EAE8 /* SystemConfiguration.framework */, - 8F270D2F5F74F0965904AC60E014742A /* UIKit.framework */, + 236FA8BD2AC4E953D395067FD0720495 /* MobileCoreServices.framework */, + 208E32CC6A5122BFD39121E55715F438 /* QuartzCore.framework */, + EEBDD515AD0E2563F96DA9C03BF533EC /* Security.framework */, + BFAF32F5BA704D364CF1127267C7D079 /* StoreKit.framework */, + 1CA86409327B8CA5A123744B01FF0033 /* SystemConfiguration.framework */, + 0D55D963B6D76107B2F021969BDEE76B /* UIKit.framework */, ); name = iOS; sourceTree = ""; }; - EB57DDB3388FBC701046A1E93218737F /* Frameworks */ = { + E31C214E20318A87C53DB448EB27C886 /* Resources */ = { isa = PBXGroup; children = ( - E2B9394A418EE71C1E22343458733EF0 /* iOS */, + 900D054E76F1D5D03B53DBFF276C5C0D /* en.lproj */, ); - name = Frameworks; - sourceTree = ""; - }; - EE85D36C044E4BB468AE05B65485762A /* ContextMenu.iOS */ = { - isa = PBXGroup; - children = ( - 1E4D88B0EC5CA12C799F9F3C05C0B31E /* UIView+YALConstraints.h */, - C5560C46514764C06929B264B533F518 /* UIView+YALConstraints.m */, - 01D2ED1DF56FF3AE05B1515043302F71 /* YALContextMenuCell.h */, - 7977EE0242992DA9A68D3DCB922B66CB /* YALContextMenuTableView.h */, - 385A446A8250571BBD7FF461E05E1382 /* YALContextMenuTableView.m */, - A2B93CF04B449D80B12ACC4F1E8164D9 /* Support Files */, - ); - path = ContextMenu.iOS; + name = Resources; sourceTree = ""; }; - FA527DA126D49BE2A84BEFE3B6068EF2 /* Support Files */ = { + EB57DDB3388FBC701046A1E93218737F /* Frameworks */ = { isa = PBXGroup; children = ( - 036A8C9E0C46D47ECECB6E33E53B2BEF /* Bolts.xcconfig */, - F0959918976A05003B1E7FB37A8F8749 /* Bolts-Private.xcconfig */, - DBD87B92425DF4F2F580DDE78C400947 /* Bolts-dummy.m */, - 1C4613FF21CF534DDDB393C04D6279F3 /* Bolts-prefix.pch */, + E2B9394A418EE71C1E22343458733EF0 /* iOS */, ); - name = "Support Files"; - path = "../Target Support Files/Bolts"; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 6F684E437947AECF10AF1B392C27FE0A /* Headers */ = { + 62B822944ADB8D12EE4F3DAA774EA1DD /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - FF06683CECBB72CC198613D50C833E94 /* BFTask+Private.h in Headers */, - E0377CE7F7C2101F3D5BE001EFCABE4D /* PFACL.h in Headers */, - 6378CF7EDB22FBB77D96DEBAA2552517 /* PFACLPrivate.h in Headers */, - 1DA04B4E7477A3C6ED4E64EB100997C3 /* PFACLState.h in Headers */, - 3535E9FC786DCF87B160127BE2ECB0BD /* PFACLState_Private.h in Headers */, - CF9126AE266CD109325E9779E8989D52 /* PFAlertView.h in Headers */, - 055D430D3080E69525A1CB4E226AE6AD /* PFAnalytics.h in Headers */, - E4A9466EF1DE5966768709FD1DEBC244 /* PFAnalyticsController.h in Headers */, - 4D7202CCD20BEE8BD04BB17D3D304AF2 /* PFAnalyticsUtilities.h in Headers */, - 78D9A4A9E2EB39C92A78BBA7A7C2892F /* PFAnalytics_Private.h in Headers */, - E387EBB7F209061962244F91C82014E1 /* PFAnonymousAuthenticationProvider.h in Headers */, - EEB02FC19C729B08DC6E52A58694A62E /* PFAnonymousUtils.h in Headers */, - 0567E8CB52A88D784048A608C7DFA3AD /* PFAnonymousUtils_Private.h in Headers */, - 5DC9D0A553754F872A6C6EDF5B8D51C3 /* PFApplication.h in Headers */, - 9E5744C6E239498952CB6C2AB7AB8573 /* PFAssert.h in Headers */, - 947A48148E5A557DFCFE1524486F0748 /* PFAsyncTaskQueue.h in Headers */, - 36EC255A02DFAD503AE5742DB66EAFBC /* PFBase64Encoder.h in Headers */, - 27EAB5CE83D76D32110761949B978720 /* PFBaseState.h in Headers */, - D801E515C96AD14143FED389A6D20831 /* PFCachedQueryController.h in Headers */, - C44757A96D797254C3E4471D7DBC7A12 /* PFCategoryLoader.h in Headers */, - DF153F159E0E2D991A092293D9A30CC1 /* PFCloud.h in Headers */, - C7DF7CFB90482868050B69FEF4373317 /* PFCloudCodeController.h in Headers */, - 5935304BB5A45EE7BF047CD984EBFB73 /* PFCommandCache.h in Headers */, - C0CD48B4F4A7ADE0E8F3763065D58B67 /* PFCommandCache_Private.h in Headers */, - 75E51F885183754FEFE576DB32781B13 /* PFCommandResult.h in Headers */, - 8A30DA243ACAA1A89F305D1AB23B2428 /* PFCommandRunning.h in Headers */, - 6C39436633D2F7986ED9FAE8CF87F494 /* PFCommandRunningConstants.h in Headers */, - 18B67D18CD4B27B89C1FB0B4C6E33EDE /* PFCommandURLRequestConstructor.h in Headers */, - DF6048F6B377ED247B79AFCC8B69621E /* PFConfig.h in Headers */, - 4EFB6054A4319D663B1AB4BA681A03B9 /* PFConfigController.h in Headers */, - 5555C4B8729021B6051BD58E96BEA0BD /* PFConfig_Private.h in Headers */, - 186FCA5BEF75F30B6A368BD3819F22E7 /* PFConstants.h in Headers */, - E743F3901CB2167FBBC28F2054A34421 /* PFCoreDataProvider.h in Headers */, - 83B4223F07E9DB236E15C2F3242CF2E0 /* PFCoreManager.h in Headers */, - 0F0B220351D06ECFB17DFF2EC338D0CD /* PFCurrentConfigController.h in Headers */, - B642AE3024EF50F194A5BC047EECEB71 /* PFCurrentInstallationController.h in Headers */, - 5615E187912379539C73AEBDCBB69AB4 /* PFCurrentObjectControlling.h in Headers */, - 7FA3F9143281C5C42D3CB8AD7442887A /* PFCurrentUserController.h in Headers */, - 3BEDAF0982149FC43350CD19D854DB44 /* PFDataProvider.h in Headers */, - 40E084818025A5B88AA7BDBFCA7F3D3D /* PFDateFormatter.h in Headers */, - 901C26F961EF48B307C4F82285380A0F /* PFDecoder.h in Headers */, - E518D12AF66FE6BF2AA57FCECF4C5C09 /* PFDefaultACLController.h in Headers */, - A1EF906190CCCF5E5F778921BB29D04D /* PFDevice.h in Headers */, - 4B9E5C8C8330A9073755CD7BA0DE94E1 /* PFEncoder.h in Headers */, - 9AEAE527EF5775E4554D7E8A48D2431B /* PFErrorUtilities.h in Headers */, - 7CB69E68D976DE206E09BC7743792BA3 /* PFEventuallyPin.h in Headers */, - E19D243F4ACB365A65A5BA008694E4B6 /* PFEventuallyQueue.h in Headers */, - AD2E8FF8584E338AC854AD47224895B0 /* PFEventuallyQueue_Private.h in Headers */, - 57F507F10A1BB85EA45DA90E31045D4C /* PFFieldOperation.h in Headers */, - F5D54F9BEFE298257F9134EA893B5C8D /* PFFieldOperationDecoder.h in Headers */, - 8DC7C47A7CC5950EC009B5618371C48E /* PFFile.h in Headers */, - 31E55D99949F54193700F33C7FD34DA6 /* PFFileController.h in Headers */, - 4FC6DEBE5ABA5E9CBABDD1DBC3BBFB04 /* PFFileDataStream.h in Headers */, - 638A30D79CD262C8C3291933357B2135 /* PFFileManager.h in Headers */, - 1EEB8D22B9718EDB6CB1C314B3EB38F4 /* PFFileStagingController.h in Headers */, - F085F0D853691CCA544D3D2152B34018 /* PFFileState.h in Headers */, - 99136C89548B177E60DD34A91B5ED192 /* PFFileState_Private.h in Headers */, - 6C073E3CAB26DE3EC33FE490DF02FC8C /* PFFile_Private.h in Headers */, - D8077B11B5F174C1072201BB8D597B08 /* PFGeoPoint.h in Headers */, - DE1227CB453C1C67BEDF44DC54EF1BAA /* PFGeoPointPrivate.h in Headers */, - B038216F0632C36A1370F7C881A09001 /* PFHTTPRequest.h in Headers */, - 72A2AA035FA76AFDB9F2081C1E6E9617 /* PFHTTPURLRequestConstructor.h in Headers */, - C22396DE37E095718482FAC4D8D796D1 /* PFHash.h in Headers */, - A6128B349568C6B56EF5FD2C22D0D98F /* PFInstallation.h in Headers */, - 629633A8DDB4D329242214C1C6EA85A5 /* PFInstallationConstants.h in Headers */, - B4C1CDF486FF24005182DE7A7BD1DF95 /* PFInstallationController.h in Headers */, - 761655FD6EAFDF34F4BB6B5024A9950C /* PFInstallationIdentifierStore.h in Headers */, - C91D09FFB740401B045D4AECAC5C997E /* PFInstallationIdentifierStore_Private.h in Headers */, - 10812A750A13684F4C638D481A7B5234 /* PFInstallationPrivate.h in Headers */, - 85F948A79ED6DA01A4AD4F8C2BFF690D /* PFInternalUtils.h in Headers */, - 65C3A46AFEC65C14F9A669B9E2171ABA /* PFJSONSerialization.h in Headers */, - FBB9982DF9350395B60873C7EBC35687 /* PFKeyValueCache.h in Headers */, - 3E422E5F9B8E3F76E4C900039E54EE29 /* PFKeyValueCache_Private.h in Headers */, - B69E68EBE8B2C725353EEB0041CBDBF0 /* PFKeychainStore.h in Headers */, - 6A5F690E541D3B2BFCDFB9EC94F1AA73 /* PFLocationManager.h in Headers */, - 1B15C523B8D5B8B3661CEA14DA2BE238 /* PFLogger.h in Headers */, - 7196C7AF34A6CEA821271AD022AB457C /* PFLogging.h in Headers */, - 1BCB49287D526538FE27C92495A7C7C9 /* PFMacros.h in Headers */, - A2C9CDC9EF3AFD417433B15BD6F3ED5C /* PFMultiProcessFileLock.h in Headers */, - 2CF3E58396AB85B06C5F11298F43FE91 /* PFMultiProcessFileLockController.h in Headers */, - 2499A62D47B33872BF0DADA0BAC4BD47 /* PFMulticastDelegate.h in Headers */, - 24B5B7B9820114759F93C6FD6A713CD4 /* PFMutableACLState.h in Headers */, - 058502343AC3618129AC9439EA85335A /* PFMutableFileState.h in Headers */, - BA36862D7FCDDEF2FF3F44E4FCF1FEC7 /* PFMutableObjectState.h in Headers */, - D7EC19C57A7BE418E80D9B4321310DD0 /* PFMutablePushState.h in Headers */, - 5489C4B47D41585D9CD38481265528D7 /* PFMutableQueryState.h in Headers */, - B7EAF0146BF7255844B4382778C1DCC3 /* PFMutableRelationState.h in Headers */, - ADD444672255653A7B0DE3C76FE9DA9B /* PFMutableUserState.h in Headers */, - 244417641E77C9E95C92078E54777D85 /* PFNetworkActivityIndicatorManager.h in Headers */, - 9EED9C8A845D06EE53C1403FBFB196BF /* PFNetworkCommand.h in Headers */, - E23601D8BB9D0538FAD5F3DAF6251F76 /* PFNullability.h in Headers */, - C2E44B209546E7866532737094B259F1 /* PFObject+Subclass.h in Headers */, - 8214C48967620CE6A0CDE08A672A35E1 /* PFObject.h in Headers */, - B62A1615577F1DF5C0987D382AFD154B /* PFObjectBatchController.h in Headers */, - 118BAA009D3D59B3EAE79710C991E16F /* PFObjectConstants.h in Headers */, - 20CE99207001FC9C10E242287C253996 /* PFObjectController.h in Headers */, - 9AA96E4A9687620F8C196ED2FABBA5DC /* PFObjectController_Private.h in Headers */, - 8A8C8E47DA7D2D2F3EB55930A84F9DE5 /* PFObjectControlling.h in Headers */, - 7C4A3111F3BA07CC804F53B11B85F91A /* PFObjectEstimatedData.h in Headers */, - 18B651969BB7CBCC4E2B38F1631FF6E2 /* PFObjectFileCoder.h in Headers */, - 8019DF40B2B2165FC5EB24BD6BB5C320 /* PFObjectFileCodingLogic.h in Headers */, - 298E48D1F7EE66DBD2CE7B1081DAAAB3 /* PFObjectFilePersistenceController.h in Headers */, - 7A19D5E1912F1F0AC4DB6BAB2E818B19 /* PFObjectLocalIdStore.h in Headers */, - 416DEEABAAEF3F52A524963C6185F128 /* PFObjectPrivate.h in Headers */, - A341920891C64694F15002A14274DBD0 /* PFObjectState.h in Headers */, - 8E4E90FFCA09F9F8CBB4B3B02624C46A /* PFObjectState_Private.h in Headers */, - 8503FD13A1BF53A7A91C6FC7FAFA90F9 /* PFObjectSubclassInfo.h in Headers */, - EE2A8C0E8B415EC8E006AC7B1F243C65 /* PFObjectSubclassingController.h in Headers */, - 3C401E23A540BDCC225B5C87F2069A02 /* PFObjectUtilities.h in Headers */, - DC765E1CE8C9208AB476C0138BEA41BA /* PFOfflineObjectController.h in Headers */, - 40B66FB31F7627FB33B911C4E2AAA916 /* PFOfflineQueryController.h in Headers */, - 28A7C073D31DDF6C59967A931BD5766C /* PFOfflineQueryLogic.h in Headers */, - C8E94A5768C9FEEDEEBE2D9513D7BD36 /* PFOfflineStore.h in Headers */, - 991B10CE642953BD125D956E15532841 /* PFOperationSet.h in Headers */, - C35492542D744906958BA9387A6DEC2C /* PFPaymentTransactionObserver.h in Headers */, - 36DA904B38775E96B9F00B1F60A4EAB8 /* PFPaymentTransactionObserver_Private.h in Headers */, - 149FA64D0DB7931320E1337D5DF51D95 /* PFPin.h in Headers */, - 63C69E993C498EA39DD1E26BC8919A39 /* PFPinningEventuallyQueue.h in Headers */, - 279E99356D07335E887C39DB5C0E5370 /* PFPinningObjectStore.h in Headers */, - 55D282FE0C9269BA1E05D31AF560DB2D /* PFProduct+Private.h in Headers */, - 1B3D2F66E11EACBEC93D5138DDA5991E /* PFProduct.h in Headers */, - FA534A151F3B55AB2E7EA80B4C522BB0 /* PFProductsRequestHandler.h in Headers */, - 7E15C7398334F43931603A970C332DB9 /* PFPropertyInfo.h in Headers */, - 766CF09C4050A89F6FF611B19D3AEA11 /* PFPropertyInfo_Private.h in Headers */, - E531951BF8A2CDC0A1865EF2CA115D46 /* PFPropertyInfo_Runtime.h in Headers */, - 7469D8A552A998387B59B30A9AD71F68 /* PFPurchase.h in Headers */, - 449AC60A131638EEEA3F97F931C03891 /* PFPurchaseController.h in Headers */, - 1421591EB34905B0745B67D11682989B /* PFPush.h in Headers */, - 543DE88D4CFC0102FF1D16C6718032A6 /* PFPushChannelsController.h in Headers */, - 8DFE18ED9D0679395D555A5D2E1D6A61 /* PFPushController.h in Headers */, - 9AFC0F0B06328DD11F5A269FC9D061D4 /* PFPushManager.h in Headers */, - A04091E4AE50036E9788A73F231A5E7E /* PFPushPrivate.h in Headers */, - 41521CD3844A812C3397D6564CA06416 /* PFPushState.h in Headers */, - 6DC9DCD2E199EE08136DFB9D8BBE17BF /* PFPushState_Private.h in Headers */, - 9603828D1EE5DFF8E2FCC43A612C2F6E /* PFPushUtilities.h in Headers */, - C68996C6D2A15E462A0B94666E1B17E3 /* PFQuery.h in Headers */, - F5189CA8C80BB857AE36C733A89A5DC8 /* PFQueryController.h in Headers */, - 14AFCA315D7308DDC8D506B3F74FADF7 /* PFQueryPrivate.h in Headers */, - 434E79FDEC38451A64203A9A367D52A7 /* PFQueryState.h in Headers */, - 91F2E7E0881F466BDF8CDDC26C780CFA /* PFQueryState_Private.h in Headers */, - 3BC9D144F933784273CB48ED48DEEDE1 /* PFQueryUtilities.h in Headers */, - 16CF2BCA2E368236EF475D6362A13491 /* PFRESTAnalyticsCommand.h in Headers */, - 27B935CBBBBEFD1F68871D79F7631F58 /* PFRESTCloudCommand.h in Headers */, - 36A0EDEF8443BF059C5DB307F7965A1F /* PFRESTCommand.h in Headers */, - 60E2A7A43AE9D6EACF4B5E3AD4FBFA04 /* PFRESTCommand_Private.h in Headers */, - C6C48576B6391837714FCEF3440243AE /* PFRESTConfigCommand.h in Headers */, - 405FB9DDBD091D87674AF85C7B194D5A /* PFRESTFileCommand.h in Headers */, - D56CAFD0B02331EB90CE5F19010B827A /* PFRESTObjectBatchCommand.h in Headers */, - A7A4C7B12C8EBCD1DD511612DF60BC62 /* PFRESTObjectCommand.h in Headers */, - 0A963324CC60CAA719E82B65A42F8F92 /* PFRESTPushCommand.h in Headers */, - 30FFBDB396C82253175D828DA2BEA835 /* PFRESTQueryCommand.h in Headers */, - F5A533001D5694222A42A7E5733F70D7 /* PFRESTSessionCommand.h in Headers */, - FBE5198936C677351A1994966CFB0E0E /* PFRESTUserCommand.h in Headers */, - 1E924C4848F63BBFC1FCF597FC9D5FD2 /* PFReachability.h in Headers */, - 10B6EC5F1F87C64ECBB431E75CBFD609 /* PFRelation.h in Headers */, - A588DBAF2FF022F204CD18AA9E6FB568 /* PFRelationPrivate.h in Headers */, - 9736106D305E2FACC163BE070DC6B12E /* PFRelationState.h in Headers */, - EFAE8EEDB4F6537B805A0D3FC7F794E5 /* PFRelationState_Private.h in Headers */, - E5EB368969123151E92F49962A1A3FCB /* PFRole.h in Headers */, - EEC3CE2CB2428CE7EEAF37BF2E0187AF /* PFSQLiteDatabase.h in Headers */, - 69067BE779C91E991C908BA33C234ACB /* PFSQLiteDatabaseController.h in Headers */, - 26BC591287F171CDC227D4C715DE0BFD /* PFSQLiteDatabaseResult.h in Headers */, - 144AF01BA8F6AC27B465052C4C1F4A63 /* PFSQLiteDatabase_Private.h in Headers */, - 4C554340F9C8D98F3D3DF059FF829952 /* PFSQLiteStatement.h in Headers */, - 22028A0623B440907DBA76FE0F64B6E0 /* PFSession.h in Headers */, - EFCAC58E3F3A4442F400FFC8626AD9B9 /* PFSessionController.h in Headers */, - FDE3635ACA000137F91099FB8A77B904 /* PFSessionUtilities.h in Headers */, - 8C29699238F02B904FACC35199216780 /* PFSession_Private.h in Headers */, - B5CFC6CC0CF004E986EEC23557FA0701 /* PFSubclassing.h in Headers */, - B255A029FDCAB0B2E6F6B106AC5BBF91 /* PFTaskQueue.h in Headers */, - 842DB9C51BA822F734AA6A66EBFD61C8 /* PFThreadsafety.h in Headers */, - 469AFCA6DF69037CC22B9353A5840D2E /* PFURLConstructor.h in Headers */, - E880F7F33114312DF66A4E88E617C825 /* PFURLSession.h in Headers */, - E28D3D6AE3281331EFE0B93FB91853F6 /* PFURLSessionCommandRunner.h in Headers */, - 606DAFEA41DB4A57A32229A007CAE7F4 /* PFURLSessionCommandRunner_Private.h in Headers */, - 650C59C74ED1EB13FF81B3AD92EB75A5 /* PFURLSessionDataTaskDelegate.h in Headers */, - 9F2809547901C1650E2A6E3F1F11982C /* PFURLSessionDataTaskDelegate_Private.h in Headers */, - EC1B42BDF93A2565BCCDE2A014286022 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, - 77C37F47F9E54490AB397A6C560DF60C /* PFURLSessionJSONDataTaskDelegate.h in Headers */, - E8608D5E7A38E5A61282E3CF64502D18 /* PFURLSessionUploadTaskDelegate.h in Headers */, - FB4C49FBC327F28CB47026B0E290BE1A /* PFURLSession_Private.h in Headers */, - BA1F5D0A6C8651ECC8F39A20205C2782 /* PFUser.h in Headers */, - F394B0E3DFFC7734AB5051D1A5F4D68F /* PFUserAuthenticationController.h in Headers */, - 7E150D7DB4B83C1DBCCFEFE86C047020 /* PFUserAuthenticationDelegate.h in Headers */, - 1D5C062D011FA396D6BD0652197BC3D9 /* PFUserConstants.h in Headers */, - 562F0029981DB78EAF4891EFE5DD13A6 /* PFUserController.h in Headers */, - F120A50FD7FCA9658BBBDBA65EA9B1E2 /* PFUserFileCodingLogic.h in Headers */, - 74036443FB7468F873D7086A1E47B948 /* PFUserPrivate.h in Headers */, - 85320661106B07533362C37B029054F3 /* PFUserState.h in Headers */, - D4F7F5F0D98F002042E4891CD1DBFD5C /* PFUserState_Private.h in Headers */, - 9BE55D00A42730AF0221D2294926610C /* PFWeakValue.h in Headers */, - A235BB018AD7FAAE25C4A295FCC5A8BD /* Parse.h in Headers */, - B54F3FF3E7274202D9C8F1E4AAC09873 /* ParseInternal.h in Headers */, - DD0CF6B6282013FA4E3830D6EC0F409A /* ParseManager.h in Headers */, - BFA8D7680070FE36E35FDA31CD18B68A /* ParseModule.h in Headers */, - 4954EF0625F842D1C956DA967DE52064 /* Parse_Private.h in Headers */, + DF0ACB31003BE6C1F4819E254B45FE1B /* BFTask+Private.h in Headers */, + E70F8A07B3A11662FE00F21D78DD2EFC /* PFACL.h in Headers */, + A1890747C28B950DFAB1471D0D8C7AD2 /* PFACLPrivate.h in Headers */, + 843AF53DCBDF66C48D5D1AFD39978896 /* PFACLState.h in Headers */, + 622BFAE8EDF5282342F6D9643E06E81A /* PFACLState_Private.h in Headers */, + 10192E8B68AB9EA006F3831B041D5B76 /* PFAlertView.h in Headers */, + 23F246EB09732B163DA235C17CCC832A /* PFAnalytics.h in Headers */, + 5DACBE11472468730AC51CFE8DF52D48 /* PFAnalyticsController.h in Headers */, + AF194E9D977F93A12B16F1BEC90A019E /* PFAnalyticsUtilities.h in Headers */, + 0DD5E8AC58D89FCDF4531A3854C753D3 /* PFAnalytics_Private.h in Headers */, + 95010AFE744F89E7C11BE8237CF593AB /* PFAnonymousAuthenticationProvider.h in Headers */, + 96B644D0DF149C29487C1FADCA5C4DE4 /* PFAnonymousUtils.h in Headers */, + FA0D00AAA9F78D68C20BBE42BE3E03B4 /* PFAnonymousUtils_Private.h in Headers */, + 3802D74DA245015E0BC4CCBBBE5DBC9D /* PFApplication.h in Headers */, + 30203B6D2A84FE50A147AE8DEA9C1E4D /* PFAssert.h in Headers */, + 37EF67F6802BDF9A04356F59658A85DB /* PFAsyncTaskQueue.h in Headers */, + C48FF979B2E995EEB70A32C9AB716533 /* PFBase64Encoder.h in Headers */, + E9C7067DD4D5DCDBFE5256A7D7B341D9 /* PFBaseState.h in Headers */, + B11A87D8C076D814AA04282226509CDD /* PFCachedQueryController.h in Headers */, + 53982A8B0F7866426474D0EDDC6DA509 /* PFCategoryLoader.h in Headers */, + 6FF2DA6A16FE7B3EE527F4D8B5D4954D /* PFCloud.h in Headers */, + A46388F75BA6703B8A55625F6F3700AD /* PFCloudCodeController.h in Headers */, + 82E87F445CB1C550249120A598046FBC /* PFCommandCache.h in Headers */, + 82FB8BBC0533D97198C5B932014C55A6 /* PFCommandCache_Private.h in Headers */, + 929E2CEA03D293C716892915C930989D /* PFCommandResult.h in Headers */, + F0135EF2ED53593734E149159B329C5F /* PFCommandRunning.h in Headers */, + A3A1A29866D41399FDA07906812C5923 /* PFCommandRunningConstants.h in Headers */, + E01C78E556B1E73847C3783FCAA7D59F /* PFCommandURLRequestConstructor.h in Headers */, + 246A6C38925155A6D2BE0A0F60CB3F80 /* PFConfig.h in Headers */, + 5C0DFF66ED42C974BAF8EE8108BA4201 /* PFConfigController.h in Headers */, + 225C0CEF370FAAE240ED3B5232D8AA89 /* PFConfig_Private.h in Headers */, + 7B86B871D42C0312EDE0555E906A9741 /* PFConstants.h in Headers */, + 7F5B2AD9E14336605FD26DE43E27441F /* PFCoreDataProvider.h in Headers */, + 6D8C0006B0ACC5A0317DE61D0CD400E0 /* PFCoreManager.h in Headers */, + 7562F1D265E91DA087B354FEE0726744 /* PFCurrentConfigController.h in Headers */, + BCE493C2F92B613C69FA9B27A3D06B22 /* PFCurrentInstallationController.h in Headers */, + C98C89920977F57CECAB9E69158D6E6B /* PFCurrentObjectControlling.h in Headers */, + 58B61E80C154F55B7F7D8123D18C8DC7 /* PFCurrentUserController.h in Headers */, + A02813FC90D641B10CCE8C8BF935168D /* PFDataProvider.h in Headers */, + 1365B699EB0CC083D9DF46B0159F1941 /* PFDateFormatter.h in Headers */, + 013D6D5652BD7C5D309F6C37C93DE74C /* PFDecoder.h in Headers */, + 59F57BDBB95A339BE6B08B8C98533825 /* PFDefaultACLController.h in Headers */, + 11A5D0889172264A4464150FF2E5AFB4 /* PFDevice.h in Headers */, + A8EF9E05F4E56B803F1953B15F23EE17 /* PFEncoder.h in Headers */, + 09C02249811DB88C1AFD1CB77A28F194 /* PFErrorUtilities.h in Headers */, + B3E66011B6A6821058A9F81CC73F211F /* PFEventuallyPin.h in Headers */, + D15986F3B3AE53BE264DDF05650A2D1E /* PFEventuallyQueue.h in Headers */, + F4DED7CC9036AB6E4F7815CFFC35F3C1 /* PFEventuallyQueue_Private.h in Headers */, + C194EC6B62B80C078E18E5156DC77445 /* PFFieldOperation.h in Headers */, + DA76EA5CEC28CF0388D24B683FDCB3F1 /* PFFieldOperationDecoder.h in Headers */, + 2DB0FB0905ADA61AB79326363C306443 /* PFFile.h in Headers */, + 81B0225BD8D77E21B3473A7FBD07379C /* PFFileController.h in Headers */, + 2D7E71CDA01B26FFF74EFE1FED16DAE0 /* PFFileDataStream.h in Headers */, + DDFB0A99E07FD65ADF0B16C34EA2525A /* PFFileManager.h in Headers */, + 6A806EBC56C2289C4D484E08DFBDF44B /* PFFileStagingController.h in Headers */, + 79F9430EFD4450425D73257CE49E0915 /* PFFileState.h in Headers */, + 0024D7BC7A0639FFACCEF36498EC3DE9 /* PFFileState_Private.h in Headers */, + 56ED64B8BEC4F985F6408EF44F4EB844 /* PFFile_Private.h in Headers */, + ADE536C7AC8202A2FBC5DC1AEEA33DA0 /* PFGeoPoint.h in Headers */, + 28975C6BA06E7BD134892493BFD42534 /* PFGeoPointPrivate.h in Headers */, + 2D3A262547C2D9C8B23FE8DA47DCB111 /* PFHTTPRequest.h in Headers */, + EE947D38876C03BE7593C63DEC4E9E38 /* PFHTTPURLRequestConstructor.h in Headers */, + FFA71AAE66EB2710EFDCF8BCFF293BF6 /* PFHash.h in Headers */, + D38EA02B47A89639B00070BD89CCA668 /* PFInstallation.h in Headers */, + 6B794AE04CA2C3E334F3BBF9AF7D8F32 /* PFInstallationConstants.h in Headers */, + DDA23AB4D39B70F419FC601612BD85A1 /* PFInstallationController.h in Headers */, + C30943CD134EE759B7B5C2FEF59A80AA /* PFInstallationIdentifierStore.h in Headers */, + D8A42135C627D3FA9AF0B3D0745F6016 /* PFInstallationIdentifierStore_Private.h in Headers */, + 60654A0E9A715FDFAC23B51CD9F99CA9 /* PFInstallationPrivate.h in Headers */, + C46F6697FFFCB4286F86CD263ADE1A77 /* PFInternalUtils.h in Headers */, + 47EE48D9A54190E608D0EEB8EE712B2B /* PFJSONSerialization.h in Headers */, + DFD002783E9F4A6184311A658129574B /* PFKeyValueCache.h in Headers */, + CB69BE84823DE0A4FE0329292C1497C0 /* PFKeyValueCache_Private.h in Headers */, + D341E4408F03D685A16540601E7BAF21 /* PFKeychainStore.h in Headers */, + A3D271E1A53809D4E23C9C05AC27E489 /* PFLocationManager.h in Headers */, + 5DCDB8305170FC64F64C9F8CBAD4763F /* PFLogger.h in Headers */, + 9E64148594AE7E6460D267B8B07B776D /* PFLogging.h in Headers */, + 0656001E447ED526B97BE8CC8AB012B1 /* PFMacros.h in Headers */, + AFFB6567710F5B2E19157904CB926A8E /* PFMultiProcessFileLock.h in Headers */, + 33B5C09BD69AD22A59BB240D68EDA13E /* PFMultiProcessFileLockController.h in Headers */, + 5523ED5A36EECB048654E2C3DCFE64CD /* PFMulticastDelegate.h in Headers */, + C0980024CA8F0C844209387617B1626A /* PFMutableACLState.h in Headers */, + ED255D7B9F7F8ED67832D921061E8922 /* PFMutableFileState.h in Headers */, + AE34514DE3D92C66B08925706B91B269 /* PFMutableObjectState.h in Headers */, + 51A41F9A9288C1DFBA155B422B925547 /* PFMutablePushState.h in Headers */, + F567393BEA32A4F7B95F931E8F460C20 /* PFMutableQueryState.h in Headers */, + DDED7E74CC5FFEAE64833B4CBAE44D3D /* PFMutableRelationState.h in Headers */, + 57758ADABA99804AF082BC3B688A3C34 /* PFMutableUserState.h in Headers */, + 8B40CCA253A29ADF257D736A1C512B67 /* PFNetworkActivityIndicatorManager.h in Headers */, + C6D1F6F317CC8C99C2231EAB932C8C85 /* PFNetworkCommand.h in Headers */, + D352E823A4AC998C95EB68235606AC4B /* PFNullability.h in Headers */, + FEEEDF26AEE52A1598A0C1EF813D559A /* PFObject+Subclass.h in Headers */, + 43A367C70488737FD43DC897F0999DA8 /* PFObject.h in Headers */, + DBD1CDE68C85732BF3FAE91F5E90046A /* PFObjectBatchController.h in Headers */, + 4FA87030F7953B6584FCF20B8BC23114 /* PFObjectConstants.h in Headers */, + BEE638EF5F21CDB2F1E40F19982F80A7 /* PFObjectController.h in Headers */, + 4AD4840ACC7A16367F5324135834E874 /* PFObjectController_Private.h in Headers */, + 078302BF0370A1BE4085C8F9B22D2CBA /* PFObjectControlling.h in Headers */, + 1011795ABA59FD905EEAD903E4FD6B83 /* PFObjectEstimatedData.h in Headers */, + C20F93FABE3A2481465C6F465B36FEDA /* PFObjectFileCoder.h in Headers */, + B16FEE8B779E190095A1E3ABD9F7A634 /* PFObjectFileCodingLogic.h in Headers */, + 905FB90F0543BAFD27E2B60A4159C6CA /* PFObjectFilePersistenceController.h in Headers */, + E10526A06C2B3B6438C8AFB3F640BD09 /* PFObjectLocalIdStore.h in Headers */, + 89CA963233E90B768E2F97F71480F36A /* PFObjectPrivate.h in Headers */, + 6DAF4E646FEB268AB9E205463257721F /* PFObjectState.h in Headers */, + 8369ED4247F129F5330C0E0084DC5AF1 /* PFObjectState_Private.h in Headers */, + 3206732A13F9226B6400CEC58E355FAF /* PFObjectSubclassInfo.h in Headers */, + 00E2E8DA8CBB386AD54FD2755115FEF8 /* PFObjectSubclassingController.h in Headers */, + 936CA5E7B0FA8C8196642F8B2029453C /* PFObjectUtilities.h in Headers */, + E122B61176D0DEA685FDB0FA3FA478C4 /* PFOfflineObjectController.h in Headers */, + 140EFD94FBE7BB82D106292D04C1BE77 /* PFOfflineQueryController.h in Headers */, + 6684791F8C4E7B96BFC5AF4A07B349D6 /* PFOfflineQueryLogic.h in Headers */, + A0D9F1FB8B1745CB2D983D1BB9901E03 /* PFOfflineStore.h in Headers */, + 917F98FAF29BF36D7401EA29E17F52AE /* PFOperationSet.h in Headers */, + 68E08FBBC11C74B5F60108D2252E69C3 /* PFPaymentTransactionObserver.h in Headers */, + DB562E61FEB73207FC1CD7C146D2CD91 /* PFPaymentTransactionObserver_Private.h in Headers */, + 3D7170F9D73EBC7B68982708116F86DA /* PFPin.h in Headers */, + F8FD839A0144D93C08E53765908D2E1B /* PFPinningEventuallyQueue.h in Headers */, + C12434AD31924C996D78C7809030C36A /* PFPinningObjectStore.h in Headers */, + CACA5EA783A127020BD6954AC0B733A9 /* PFProduct+Private.h in Headers */, + 81932ECC1B13317B0CEEDEAE8DE5B4F2 /* PFProduct.h in Headers */, + 4BA6D9BEAB905AF7A0998C1EE8C99196 /* PFProductsRequestHandler.h in Headers */, + FD90BA8766D471D15019E68E4AB15252 /* PFPropertyInfo.h in Headers */, + 93367CC8629CF40CA872D9C8CDB17609 /* PFPropertyInfo_Private.h in Headers */, + 1BAC1AF93D61F5F7840F42640655EC05 /* PFPropertyInfo_Runtime.h in Headers */, + 35B90BAA0104047AF2B3883AF5FADC68 /* PFPurchase.h in Headers */, + 2502AC0DFD698E989E6EF9016784D050 /* PFPurchaseController.h in Headers */, + 6A8661944E8E3381F73FED767A314089 /* PFPush.h in Headers */, + F09BA7B4050C6875434D6236C99372BE /* PFPushChannelsController.h in Headers */, + AE873583F57DC86B22E2B89796E73AC7 /* PFPushController.h in Headers */, + 91522E030F33150DBBEBB1DBC3D3E4F1 /* PFPushManager.h in Headers */, + 0C3A9DF2C1A26FB65CE3062753635657 /* PFPushPrivate.h in Headers */, + B22D7A9317D066D2E1AFB3B577FA8E8B /* PFPushState.h in Headers */, + BA5C18269479C7F1871D1FCA3B061B26 /* PFPushState_Private.h in Headers */, + 69D72CEB73BF6E057D0530E64B93966E /* PFPushUtilities.h in Headers */, + CC73D8C3C9899D9A64F580BFDA431730 /* PFQuery.h in Headers */, + 4F50CF4C6F3AFD7065370250055019A6 /* PFQueryController.h in Headers */, + 97517BF46554876A6E119F95D2EFFEDC /* PFQueryPrivate.h in Headers */, + 263A5E1A0F6C79D8689218B8D4FB01E9 /* PFQueryState.h in Headers */, + 4E9EB42049A0F361CDDEBC3FC5DF2E80 /* PFQueryState_Private.h in Headers */, + 31682DC64FFA355D76C31FD0C985F228 /* PFQueryUtilities.h in Headers */, + 613113461A3DBFB916B43C0094B4440B /* PFRESTAnalyticsCommand.h in Headers */, + 0C48B1C5C5ABD393181AC04C2CB5A023 /* PFRESTCloudCommand.h in Headers */, + BACDC8A8B550B13CED0E2835E048A4BB /* PFRESTCommand.h in Headers */, + F622F21DF7350A5994CA9C501EDCF69C /* PFRESTCommand_Private.h in Headers */, + 453AF7886CF3F3956C6969E6BC9831EC /* PFRESTConfigCommand.h in Headers */, + 03ADA7223CB65F47810CC8184A08DA6C /* PFRESTFileCommand.h in Headers */, + 696D67F6704649B1FE333B9CA396AEE9 /* PFRESTObjectBatchCommand.h in Headers */, + 16B2C95404E46C2892CDE9A8326E2744 /* PFRESTObjectCommand.h in Headers */, + 73ECB448F2BBB7E069BF88F55C7DA87D /* PFRESTPushCommand.h in Headers */, + E7337D549E5D626F94A134222202B50B /* PFRESTQueryCommand.h in Headers */, + 65C48A4A436B6838174FF2BE9BB9307A /* PFRESTSessionCommand.h in Headers */, + AA154E12AF2009C1A1E95021DA0960C7 /* PFRESTUserCommand.h in Headers */, + 488F34069FDD6FA1CCC313E1BA4224A8 /* PFReachability.h in Headers */, + 60B545496AC56C5A387CAC1E0010A560 /* PFRelation.h in Headers */, + ACC5C126131648E25E66D2FCB3C9C92C /* PFRelationPrivate.h in Headers */, + 2A509789A28CF0671A95CC8087CE970F /* PFRelationState.h in Headers */, + 675CB0E80BA7C831ABA071314F1B268E /* PFRelationState_Private.h in Headers */, + 7DAB8A9EEBF8F97B4CAD251A3F07C368 /* PFRole.h in Headers */, + C846C14639953DD89E0BA3255461A61F /* PFSQLiteDatabase.h in Headers */, + EBB4A7DE8B8EB48988E5A27219DB6BEE /* PFSQLiteDatabaseController.h in Headers */, + 3AEFF503AA3E5E34413F8EBD0CAC7560 /* PFSQLiteDatabaseResult.h in Headers */, + EE1AF84FA5D7681CE43EB645A8198A93 /* PFSQLiteDatabase_Private.h in Headers */, + 7035ACE99C35096525A036BC7CEA5CA3 /* PFSQLiteStatement.h in Headers */, + A22C89F54AA1F72BE66DD7A74FA58513 /* PFSession.h in Headers */, + 2A3C8A5AC16E376D66797A34A10F87AB /* PFSessionController.h in Headers */, + 82F34C3FB188DCBE527118D8DC13C390 /* PFSessionUtilities.h in Headers */, + FF5AC9C40CAF5C1CB093299D9645067B /* PFSession_Private.h in Headers */, + F5BC81E3C264FFFE3C795AC06C5FC9F9 /* PFSubclassing.h in Headers */, + 4226E3C0709B4913BE2BBCA537718F8D /* PFTaskQueue.h in Headers */, + F26FE961CCFAF46C92AA68661CB13B7B /* PFThreadsafety.h in Headers */, + CDC89406350CF0583592365D4527FC5D /* PFURLConstructor.h in Headers */, + E5B7529003542564C3D82E93AAA217E8 /* PFURLSession.h in Headers */, + B0C9C131B5444A59CB7B45103060981D /* PFURLSessionCommandRunner.h in Headers */, + AD06257CB510CCF42B5B68DA39971CB8 /* PFURLSessionCommandRunner_Private.h in Headers */, + C07AF40067C97AC8563FB89026FA30FB /* PFURLSessionDataTaskDelegate.h in Headers */, + 434ADAB275DCF8F1F73F1BE7B22C1093 /* PFURLSessionDataTaskDelegate_Private.h in Headers */, + C08B5FB22435EC893FE16FE39EABD15A /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, + F05F2CE1FBC7D1473BA31AB448ADE50D /* PFURLSessionJSONDataTaskDelegate.h in Headers */, + 8D13FD85FCA77ED175C8BDAA800C3C96 /* PFURLSessionUploadTaskDelegate.h in Headers */, + 94BBFFB9DC923664ADF8B769B95E0EFA /* PFURLSession_Private.h in Headers */, + 0E71F85430FA51746DA14C7A3931A329 /* PFUser.h in Headers */, + 79041408B71D74E510232EDFCF232A6E /* PFUserAuthenticationController.h in Headers */, + 33BF5665A14D96E92BC1279F9966246E /* PFUserAuthenticationDelegate.h in Headers */, + 554E6A8CEC2C3E83687692C8860CAC23 /* PFUserConstants.h in Headers */, + C8A1372CC5C6B8FC9CF5EE205002ED1A /* PFUserController.h in Headers */, + 1339A63B8479A1FA37BF9497C8470502 /* PFUserFileCodingLogic.h in Headers */, + B6A29C69B85270D93675326CFE4FDF08 /* PFUserPrivate.h in Headers */, + 6ED4740339FA6CDBEF3E3910C568AF98 /* PFUserState.h in Headers */, + D7DBC7638D93388B17062DD7F5997B9B /* PFUserState_Private.h in Headers */, + 70CEECB71D93085CAA2F82DBFA9CD6A7 /* PFWeakValue.h in Headers */, + 594009BB54452FD1DD303B39079CCCAF /* Parse.h in Headers */, + 0D12AE079131A22078CEA80F9B61BDE6 /* ParseInternal.h in Headers */, + B1776A495CA3C01965AFAE04B5C1EB3C /* ParseManager.h in Headers */, + A49B2F46E36029D724B2983CDCA6A60E /* ParseModule.h in Headers */, + 995D07FBF9742F73283ADDEF0F4943AB /* Parse_Private.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2048,77 +2284,136 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - A321610E40E1146C0D88FBC300593C46 /* Headers */ = { + 9F949F3705AA15ACF1CF3311D42D7EC7 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 6D17D3EC1622C878400E43C76C6B4521 /* AFHTTPRequestOperation.h in Headers */, + A22E17287ED356500FCC812E827ECD26 /* AFHTTPRequestOperationManager.h in Headers */, + 5FAE6C1841A6733A738018284D2158BE /* AFHTTPSessionManager.h in Headers */, + F7D3235095B167BCB2E2710768CFFDB5 /* AFNetworkActivityIndicatorManager.h in Headers */, + 51DBA9585A0386A3AA68B0F9E6003C65 /* AFNetworkReachabilityManager.h in Headers */, + BC87FA7901701773F8F642EF2C825DC8 /* AFNetworking.h in Headers */, + 4F522D24BFD226AD5839ACC4682DEBB5 /* AFSecurityPolicy.h in Headers */, + 2B434ABB60199E6CDC44BAFFBBDE0BBA /* AFURLConnectionOperation.h in Headers */, + 0640C9058A1F6230E1FBB12FEAFAABFB /* AFURLRequestSerialization.h in Headers */, + 0B5B3411B3BDF12421E451AA6E4FC091 /* AFURLResponseSerialization.h in Headers */, + 076E3621ADABBBB648A49FFE19C7A692 /* AFURLSessionManager.h in Headers */, + 7E6F7BAD97538A169ADEF9FE96AD142D /* UIActivityIndicatorView+AFNetworking.h in Headers */, + 562F3C8F34DAC878385C985A0FB75934 /* UIAlertView+AFNetworking.h in Headers */, + 9634FED443E53F097D2B0CF9032C4BB2 /* UIButton+AFNetworking.h in Headers */, + AF100CD835C4B199221E14F3D78498DB /* UIImage+AFNetworking.h in Headers */, + 67A58B493C36AF8642D848031D0984D0 /* UIImageView+AFNetworking.h in Headers */, + 62BEBA84B986742098783D153C8D99B0 /* UIKit+AFNetworking.h in Headers */, + C266A2B3C5352572234567C57A58113B /* UIProgressView+AFNetworking.h in Headers */, + CC8ED05280D8A05226006D99770193E4 /* UIRefreshControl+AFNetworking.h in Headers */, + A1975EC315733961CBFC84A335CEEE3B /* UIWebView+AFNetworking.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BF5235909A8DA876D0176630B5C5F55D /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 96397AB59008EA7392019A2EB9BCFE53 /* AFHTTPRequestOperation.h in Headers */, - 44EB9612F4CAF48C8B63696822A2A3BF /* AFHTTPRequestOperationManager.h in Headers */, - D3D1A0ACF80E0131F85BDE9E7D7E6303 /* AFHTTPSessionManager.h in Headers */, - 65BBE10D6AD162A261BD96636B2810CA /* AFNetworkActivityIndicatorManager.h in Headers */, - 013AE4595BF56A559DD3CA81669B0D67 /* AFNetworkReachabilityManager.h in Headers */, - FB0A5366764317E476526B1CCA42EB4C /* AFNetworking.h in Headers */, - 33D4081B410C93515F3AE2B05B1E6FEB /* AFSecurityPolicy.h in Headers */, - F412A6DC753D4FF45CA2663718823E3C /* AFURLConnectionOperation.h in Headers */, - 93DF5CCBA43C09201E435ED14A2A0961 /* AFURLRequestSerialization.h in Headers */, - EA2FD9A751EBAF09C8947C9BE65B8195 /* AFURLResponseSerialization.h in Headers */, - 2AE2ADB09903F3B39869810739754118 /* AFURLSessionManager.h in Headers */, - 2E135CA6B413C0D9809F7BC1D11822E1 /* UIActivityIndicatorView+AFNetworking.h in Headers */, - CA9B7B7B520E355A2E23B0D0EB8302A9 /* UIAlertView+AFNetworking.h in Headers */, - 928177B9981A0BEC3E7CDCDA26DABE9C /* UIButton+AFNetworking.h in Headers */, - CBE51D66F657DC502B81442C46F7220B /* UIImage+AFNetworking.h in Headers */, - E32C0C8E76B2398A462F2F44466C88C1 /* UIImageView+AFNetworking.h in Headers */, - AA14B649447F0CCDEE28838153CB8ED7 /* UIKit+AFNetworking.h in Headers */, - A0C4E0AE86CBEEDB70512630A54C1A74 /* UIProgressView+AFNetworking.h in Headers */, - 524D6BEE8260BC395116B1055A619C4B /* UIRefreshControl+AFNetworking.h in Headers */, - E4AEC74A16A03117C42C961DF1C65848 /* UIWebView+AFNetworking.h in Headers */, + A3E7B1E86BE98472869110645588761E /* UIView+YALConstraints.h in Headers */, + AFFF22D057B8F0FD40282009EEF55DD6 /* YALContextMenuCell.h in Headers */, + B435CA5C07E3959AD573C9779AC84487 /* YALContextMenuTableView.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - EEA47D4D68E6A315D022E0558B2446D2 /* Headers */ = { + E0E405F04027B059BF5F720BC49F61CC /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - E22F49523078CB46DB077CBF54C73202 /* UIView+YALConstraints.h in Headers */, - B8B9F34E2BBC7F8F7715F6851457261E /* YALContextMenuCell.h in Headers */, - 9596BB57B15E0F32ADC0E88D588DB70C /* YALContextMenuTableView.h in Headers */, + EAF873A25D5C0A245E42B1B4CBED1EC9 /* BFCancellationToken.h in Headers */, + 47B1FC21787CF9E31A9367D43BD231E2 /* BFCancellationTokenRegistration.h in Headers */, + 99DA7F75C6D253B49F283769CFC8BD8E /* BFCancellationTokenSource.h in Headers */, + 19C506AF29D0C277862D935FF2B6929A /* BFDefines.h in Headers */, + F774C478E3A7F0F80415B7BC82C804EB /* BFExecutor.h in Headers */, + F5AF634EB66294F3ED139B82748BB907 /* BFTask.h in Headers */, + E853ED339962D9B59ECAB554E5FF378D /* BFTaskCompletionSource.h in Headers */, + A1B73D9D97FEB465BD7A9185D16E22CC /* Bolts.h in Headers */, + 6AB852126E29E70F4878CED684D50235 /* BoltsVersion.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - FD580B49C886D584DD55A06F83D112A1 /* Headers */ = { + E389DA279C420AF0CF7157D1CB7777EF /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 3039F75251A2A754A7525EEDBF3907D1 /* BFCancellationToken.h in Headers */, - 9FF02193886279AC96AFB7BB7D21DDE1 /* BFCancellationTokenRegistration.h in Headers */, - EF0657162B6D12AB703D83918C3B36F9 /* BFCancellationTokenSource.h in Headers */, - FC1C0CA9220FCDE5447A43920AB3960F /* BFDefines.h in Headers */, - 0ECD46F443DEFF63C3BCBDC3A75363AA /* BFExecutor.h in Headers */, - E4322DEF695907DD78455D334243FC86 /* BFTask.h in Headers */, - DDC4E7634F0E7C723FF2EF86872FA1DA /* BFTaskCompletionSource.h in Headers */, - C4CF94A0BBEAE79C88C879094C1FF6BB /* Bolts.h in Headers */, - 6D67873D2EDAAB5DDBC501CA69E630C6 /* BoltsVersion.h in Headers */, + FF60ACF78377BE7F10CEF63BE3A7A019 /* PFActionButton.h in Headers */, + 07B9F4A97FC481BEFD13C6A7A876AE65 /* PFActivityIndicatorCollectionReusableView.h in Headers */, + 6B0810EEE6CED5F2B5C846EC9E3D9652 /* PFActivityIndicatorTableViewCell.h in Headers */, + 3F3269C47676A13E44D1DAD963922C5E /* PFCollectionViewCell.h in Headers */, + 4C3272DD361CCB4D062A5EB1B53D0EB3 /* PFColor.h in Headers */, + 4FC34E6FE9DD6F151A4D7CB99AAC6AAF /* PFDismissButton.h in Headers */, + BB23B75ACF0D158E30F1F433310BCAE9 /* PFImage.h in Headers */, + 441D655945C3AF781C9A00BEF8115E5C /* PFImageCache.h in Headers */, + 5F406E659F421557FBAB0878E792BC72 /* PFImageView.h in Headers */, + 49DCEBBB292BC919C0F2F0650F42A379 /* PFLoadingView.h in Headers */, + 81F6B96731525921005CCFBBA013EDB1 /* PFLocalization.h in Headers */, + B43AE9F0A1BBFF35F9A86E10B180859E /* PFLogInView.h in Headers */, + AE84C9BF52A2F053DCF2818A058AF5D0 /* PFLogInViewController.h in Headers */, + E9332502DD74CFB87761C2CE81EFA61B /* PFLogInView_Private.h in Headers */, + 2544CBE3CF2F43C81E1F241DDAE2694C /* PFPrimaryButton.h in Headers */, + 3742C186F9760CECD54271C12A0C0F46 /* PFProductTableViewController.h in Headers */, + 991D8071D96F389C7B3A3D0AB4F086FE /* PFPurchaseTableViewCell.h in Headers */, + 3070A4B3C4F07A6E5E7CD16972DF2A37 /* PFQueryCollectionViewController.h in Headers */, + C703EE7C157DFC6D852FA8DCD75EC0E3 /* PFQueryTableViewController.h in Headers */, + 06029A94B7299AA3DC1B3DD1B50BAC88 /* PFRect.h in Headers */, + E77F1FD60C4EF4F25338458E5436782A /* PFResources.h in Headers */, + 3C61396AA2618D932E1D997910CA6B4E /* PFSignUpView.h in Headers */, + 3775493CB62206BFC75E928CAFB8F431 /* PFSignUpViewController.h in Headers */, + 0045ABA8D9F3A30ABB55603E69D6D2A8 /* PFTableViewCell.h in Headers */, + EB1C15BFFDA1BBE3B4FB2E5DBAD25829 /* PFTextButton.h in Headers */, + 7A22BCAA48DAA8941E900F3BBA2AEAF9 /* PFTextField.h in Headers */, + 042646D0F438BF1C307783B49D4426C0 /* PFUIAlertView.h in Headers */, + 01FEAEEB81E00A55AD412B5EC194D9F4 /* ParseUI.h in Headers */, + A957B2947D9905E95240B0700B020436 /* ParseUIConstants.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 39991CD032545E130997094168EF96E2 /* AFNetworking */ = { + 1DDE7D1F8C6E863F202337492C269E6B /* Pods */ = { isa = PBXNativeTarget; - buildConfigurationList = 431EFC273B3FC2034AFD6C4C92E174CD /* Build configuration list for PBXNativeTarget "AFNetworking" */; + buildConfigurationList = 5C34FB991FA427DC58BDC724C9A71282 /* Build configuration list for PBXNativeTarget "Pods" */; buildPhases = ( - 63A52441CABAEA2A034C298787B71B23 /* Sources */, - 79D6AFC8C82330655C0BAB54399B5D2C /* Frameworks */, - A321610E40E1146C0D88FBC300593C46 /* Headers */, + 56C7B27B1B482492D26CBE5E9ADE324A /* Sources */, + 56A844AA177010E838BCF58676D0E939 /* Frameworks */, ); buildRules = ( ); dependencies = ( + 5A138C7A80144A98D2B68DE8AE24F61A /* PBXTargetDependency */, + 47F3F7858F1BDE7DEEAF189804B13EFD /* PBXTargetDependency */, + E83DE192F7A1C225ECB73063022DE127 /* PBXTargetDependency */, + F28EADBF6BAC7E42FB116D1D6C02EA7C /* PBXTargetDependency */, + 700A50753C15DBDBEF5F14DE1A49436B /* PBXTargetDependency */, + 8360F037D03D9464D957D8ECFB259783 /* PBXTargetDependency */, ); - name = AFNetworking; - productName = AFNetworking; - productReference = DE3508684073BF9ED1EE176A805EE3FC /* libAFNetworking.a */; + name = Pods; + productName = Pods; + productReference = 1A782DEC3085443686EE99BF46207C32 /* libPods.a */; + productType = "com.apple.product-type.library.static"; + }; + 37F6420F8EF0C3E689A20C749DE084A5 /* Parse */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6DA8E9181C234AE78BCB2835BFCE55A0 /* Build configuration list for PBXNativeTarget "Parse" */; + buildPhases = ( + 64842CE7F10AB438289053D54DD58814 /* Sources */, + BE56713A4BA312E0B550D7362BFCD017 /* Frameworks */, + 62B822944ADB8D12EE4F3DAA774EA1DD /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + EDF164D7A95656B0D39126451EBC0B6B /* PBXTargetDependency */, + ); + name = Parse; + productName = Parse; + productReference = 8D8B63E424FEEB2D6A4B63DC923F3455 /* libParse.a */; productType = "com.apple.product-type.library.static"; }; 47C800E42623009B7192B025B3DD25A1 /* pop */ = { @@ -2138,77 +2433,74 @@ productReference = A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */; productType = "com.apple.product-type.library.static"; }; - 538138A83A89C41D6A179BAAAA7A87CB /* Pods */ = { + 63424AA4CF7BFFFC31A230BC68DB1283 /* Bolts */ = { isa = PBXNativeTarget; - buildConfigurationList = 9B6492829B8D73AD10769E85FCA9F27E /* Build configuration list for PBXNativeTarget "Pods" */; + buildConfigurationList = 6906A264C799B105138FB80C08E37FD9 /* Build configuration list for PBXNativeTarget "Bolts" */; buildPhases = ( - 40BBC341D8D7A72368D8E6B132E1D6AB /* Sources */, - 4A3A889F28618A29FB5570CB0D7FF3F5 /* Frameworks */, + 298311C4D8303A7A55563C3B8D8DA217 /* Sources */, + F807D6D84FA47F43900E9D5428BFA19B /* Frameworks */, + E0E405F04027B059BF5F720BC49F61CC /* Headers */, ); buildRules = ( ); dependencies = ( - 9A649419F2A6E8DA31A1B71517CF82EB /* PBXTargetDependency */, - 4ECE2DEC9CA88EA95B0CAA98A75B9211 /* PBXTargetDependency */, - 6FB474EE146C7D054B64F0529723BBD5 /* PBXTargetDependency */, - 090DA03D4C071EB1C946E6266644F1D9 /* PBXTargetDependency */, - 4B7038BA1BDC2249906D6018B5F6C3AB /* PBXTargetDependency */, ); - name = Pods; - productName = Pods; - productReference = 5CE1AE8BFDFAA049F0F73E15ED7ACE9E /* libPods.a */; + name = Bolts; + productName = Bolts; + productReference = 272CEEC74EFC7A7517B430014A16635C /* libBolts.a */; productType = "com.apple.product-type.library.static"; }; - 7D5B41A236FF14B6B02D4BAF6C4A690A /* ContextMenu.iOS */ = { + 9A7DAE4E6908C5BFF25ECBAA445E8A2F /* ParseUI */ = { isa = PBXNativeTarget; - buildConfigurationList = D8C66A8CA86F8BA4F03E908B331BECA5 /* Build configuration list for PBXNativeTarget "ContextMenu.iOS" */; + buildConfigurationList = 6F93D3A1C5446CCEE5035B09CD0A6588 /* Build configuration list for PBXNativeTarget "ParseUI" */; buildPhases = ( - E716450A5FA3787141F895F94CEB9A8B /* Sources */, - E7338E47FCC5A3CEF6E7565747FBD02C /* Frameworks */, - EEA47D4D68E6A315D022E0558B2446D2 /* Headers */, + B7D41FF8C3988070869C18E377BB5881 /* Sources */, + C40C02E318305E3DC56157DBE2F7A464 /* Frameworks */, + E389DA279C420AF0CF7157D1CB7777EF /* Headers */, ); buildRules = ( ); dependencies = ( + 13E56317D4C79E315D0018B424AF8D8E /* PBXTargetDependency */, + 4D353D1FEAEF9BEBC251744328DD1E88 /* PBXTargetDependency */, ); - name = ContextMenu.iOS; - productName = ContextMenu.iOS; - productReference = 3161EE94B4EAC7208319195F1483596D /* libContextMenu.iOS.a */; + name = ParseUI; + productName = ParseUI; + productReference = 5CF50CFEBB22494CCF939234C39DE670 /* libParseUI.a */; productType = "com.apple.product-type.library.static"; }; - 9D8311DD3E0DA85313EF9710C8614AD8 /* Bolts */ = { + A457234CA8AE922542FEBB7E984D9B13 /* ContextMenu.iOS */ = { isa = PBXNativeTarget; - buildConfigurationList = 67A13180ACA2EC97B329D12BBF330556 /* Build configuration list for PBXNativeTarget "Bolts" */; + buildConfigurationList = 232C8EB3BB4BBD4011E481EF5D518590 /* Build configuration list for PBXNativeTarget "ContextMenu.iOS" */; buildPhases = ( - C404306DBE18890298706A71A7863ED7 /* Sources */, - 23364613FB0830F19B97359477AA117C /* Frameworks */, - FD580B49C886D584DD55A06F83D112A1 /* Headers */, + AEF278FCD18D7EDC0486BA674562B5E6 /* Sources */, + 7830DB58A33F865C6300AC70A81DADEB /* Frameworks */, + BF5235909A8DA876D0176630B5C5F55D /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = Bolts; - productName = Bolts; - productReference = CF774A16F869C80126A81687EB1E85D6 /* libBolts.a */; + name = ContextMenu.iOS; + productName = ContextMenu.iOS; + productReference = 32A9AA3F96EDB1D74DF05E160873CFB1 /* libContextMenu.iOS.a */; productType = "com.apple.product-type.library.static"; }; - F7D0346E5B3C07CA2678B48D1D1BD750 /* Parse */ = { + E525AC57810AC5DC4DD2F97ABD9EC4EE /* AFNetworking */ = { isa = PBXNativeTarget; - buildConfigurationList = 05D30B977C164867CBB28678E172C5BA /* Build configuration list for PBXNativeTarget "Parse" */; + buildConfigurationList = 05D41F997AFFD8575A32C481902633BE /* Build configuration list for PBXNativeTarget "AFNetworking" */; buildPhases = ( - 1A03F498BE17FF37BB8283717DD19577 /* Sources */, - 81EBEBB48DB0F24CCEE22EC96C01C619 /* Frameworks */, - 6F684E437947AECF10AF1B392C27FE0A /* Headers */, + 3F63BFFDB01ACA88867ADBE387F55E36 /* Sources */, + BE4E00E494DAADAB32FC91947A9C4C34 /* Frameworks */, + 9F949F3705AA15ACF1CF3311D42D7EC7 /* Headers */, ); buildRules = ( ); dependencies = ( - 3530AC604629113E40B76CB90F73E195 /* PBXTargetDependency */, ); - name = Parse; - productName = Parse; - productReference = BD2D7F17F9C540FBFE58E4DB0EEBDC9A /* libParse.a */; + name = AFNetworking; + productName = AFNetworking; + productReference = 31F93A9FA8BA9A2E0A7B707CCB9668F4 /* libAFNetworking.a */; productType = "com.apple.product-type.library.static"; }; /* End PBXNativeTarget section */ @@ -2232,11 +2524,12 @@ projectDirPath = ""; projectRoot = ""; targets = ( - 39991CD032545E130997094168EF96E2 /* AFNetworking */, - 9D8311DD3E0DA85313EF9710C8614AD8 /* Bolts */, - 7D5B41A236FF14B6B02D4BAF6C4A690A /* ContextMenu.iOS */, - F7D0346E5B3C07CA2678B48D1D1BD750 /* Parse */, - 538138A83A89C41D6A179BAAAA7A87CB /* Pods */, + E525AC57810AC5DC4DD2F97ABD9EC4EE /* AFNetworking */, + 63424AA4CF7BFFFC31A230BC68DB1283 /* Bolts */, + A457234CA8AE922542FEBB7E984D9B13 /* ContextMenu.iOS */, + 37F6420F8EF0C3E689A20C749DE084A5 /* Parse */, + 9A7DAE4E6908C5BFF25ECBAA445E8A2F /* ParseUI */, + 1DDE7D1F8C6E863F202337492C269E6B /* Pods */, 47C800E42623009B7192B025B3DD25A1 /* pop */, ); }; @@ -2269,277 +2562,376 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 1A03F498BE17FF37BB8283717DD19577 /* Sources */ = { + 298311C4D8303A7A55563C3B8D8DA217 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 16076CA62CD1EEB4CFA1957E9F923B40 /* BFTask+Private.m in Sources */, - 76BE46560E2489F20B07ADE2A8383AB0 /* PFACL.m in Sources */, - 6ECC50446D8CE723BFA8398E30E0B34B /* PFACLState.m in Sources */, - A57A790BA267D5575D66FBA7194C9C9C /* PFAlertView.m in Sources */, - 896910FF549C79158B14DBA4B82DD337 /* PFAnalytics.m in Sources */, - 025BE970FE1936D8AE73A5BD6FCF5A4D /* PFAnalyticsController.m in Sources */, - 410C3023E9AAE2B3E429CDCDA5B48391 /* PFAnalyticsUtilities.m in Sources */, - 69134BFEE551E2C9B6F3DACC87775C7C /* PFAnonymousAuthenticationProvider.m in Sources */, - 86563FC6CF9DA9365C823E7285BFE1FF /* PFAnonymousUtils.m in Sources */, - 2CD85B954E0A03C2FC81163F60CFC4D8 /* PFApplication.m in Sources */, - F0B1181F18792D478147E3051A915EB6 /* PFAsyncTaskQueue.m in Sources */, - 9C526742FC642C90CD9887187FD9478E /* PFBase64Encoder.m in Sources */, - EBD7FD53C5DEA72FEB27FF599E88BC80 /* PFBaseState.m in Sources */, - 26E8BB7BF9D5A57648508C4E19560B77 /* PFCachedQueryController.m in Sources */, - 375E59B3F0F22CB28FA382DDB3790F5D /* PFCategoryLoader.m in Sources */, - CFDDEDCA97A5F84CDDD5A6F1BFFA2243 /* PFCloud.m in Sources */, - D9B88BBFFE6342E41F3A86220B3B9410 /* PFCloudCodeController.m in Sources */, - B4EBD2930890E190BA160A6B52C9029E /* PFCommandCache.m in Sources */, - 2322FAF5379B9BC9FBEFF748570BECCA /* PFCommandResult.m in Sources */, - 8B3ECF63B2E1B777FC04BECEC1F7C0EB /* PFCommandRunning.m in Sources */, - BA645FA6D6E0D66E9CF92B04F93777DD /* PFCommandRunningConstants.m in Sources */, - E5831BEBB501CAE9B5B49F7C5BE1433C /* PFCommandURLRequestConstructor.m in Sources */, - 851D4FF3A335CF48002CAFE2E4F2E376 /* PFConfig.m in Sources */, - 2C043C346C73A86BCA7BAF2D9B4A6D42 /* PFConfigController.m in Sources */, - AC42EC854B284673B3E2CA42FD46285A /* PFConstants.m in Sources */, - 7070EE01AEB4E7454E9C81B2A421900C /* PFCoreManager.m in Sources */, - 4059140EA33C2322618F795A388B41D5 /* PFCurrentConfigController.m in Sources */, - F8A080400150D1AC42F6C531CAB577D2 /* PFCurrentInstallationController.m in Sources */, - 65EAB2BF94627BD112EE4724B065D38E /* PFCurrentUserController.m in Sources */, - 9195D181434FFDA880E3FFCCB38FE33C /* PFDateFormatter.m in Sources */, - 12641D479C071B60EF715865ABFCE798 /* PFDecoder.m in Sources */, - DD3558902E5E8D951999253854B2A573 /* PFDefaultACLController.m in Sources */, - A91F60D12B823B21A59FA96BC5AF0825 /* PFDevice.m in Sources */, - 6A96EFBD2ECDE315AA0FCC4BAD67A9F8 /* PFEncoder.m in Sources */, - 4F8D2DF83D8B2D41170ED4D1C05D6B55 /* PFErrorUtilities.m in Sources */, - 77A778BD6F968FCB02BD567C7B5A6D79 /* PFEventuallyPin.m in Sources */, - 0D2DC39580098F73627DE62060F0E256 /* PFEventuallyQueue.m in Sources */, - 97048C05413C62808681EA864F2667C4 /* PFFieldOperation.m in Sources */, - CB4CF87BD5935737F20BDF0C99B80495 /* PFFieldOperationDecoder.m in Sources */, - F39244CD95764B7D0C035FE193512606 /* PFFile.m in Sources */, - C2B622D57413084005AD4FF3FE3B4CBE /* PFFileController.m in Sources */, - 0CADB282A28A344B568CD36701CD99A0 /* PFFileDataStream.m in Sources */, - EB8809FA99543F795F70FD6A9F457547 /* PFFileManager.m in Sources */, - 5EB711D9E225DDEED6606BBF5E4D400E /* PFFileStagingController.m in Sources */, - 7140367343A5DBE5AEABEE022C385B6B /* PFFileState.m in Sources */, - D5859A1400F3FE968B0AFCC64C078904 /* PFGeoPoint.m in Sources */, - FC49E18E4DE9E4CEA0E8144D55F407A7 /* PFHTTPURLRequestConstructor.m in Sources */, - 507D5F0F50CC15E879DD054990D1693E /* PFHash.m in Sources */, - 359312B1BB35A2C98A870CFE8FB33B67 /* PFInstallation.m in Sources */, - 5B2E3974FFB3B52E1377C6959B742F56 /* PFInstallationConstants.m in Sources */, - 2060BB5093B7CC2D7AB326AD3FE0CEDC /* PFInstallationController.m in Sources */, - 7DC754D4F086EC145F14F6CDF360960B /* PFInstallationIdentifierStore.m in Sources */, - 91EDAEBEF03847E95272606E90B11838 /* PFInternalUtils.m in Sources */, - 4FBE8D3A5BB9B088B3D381A2A623FD4D /* PFJSONSerialization.m in Sources */, - C1570CA337867BEF23B4AC733E51D4B9 /* PFKeyValueCache.m in Sources */, - A1984ACB538B0EB2EC33303455FF996F /* PFKeychainStore.m in Sources */, - 24BA59BBC3BD72DAB4E18A3549C1C70C /* PFLocationManager.m in Sources */, - F947354D06D4DB18853AD81F00869ED3 /* PFLogger.m in Sources */, - F965B0BA7C7E070E515C1ED0343E68A3 /* PFMultiProcessFileLock.m in Sources */, - 77FFDD6A37B8A941ACF4ABEF102EE786 /* PFMultiProcessFileLockController.m in Sources */, - 3EEF37314E80E89B4E7A8176F07348A2 /* PFMulticastDelegate.m in Sources */, - EDCC71FC92D40B3862592FF1F64D9F22 /* PFMutableACLState.m in Sources */, - E08EE32C93126D92DC9E6961789914E7 /* PFMutableFileState.m in Sources */, - B87F4316CA745157952D0E957CEF8D0F /* PFMutableObjectState.m in Sources */, - 6628D87D3C8481FD02EC5908FE0842F4 /* PFMutablePushState.m in Sources */, - 738F9BE2CEAA34CA252698CB2D3724B3 /* PFMutableQueryState.m in Sources */, - B3E990CB8A89D42E7E9F7ED33D39721F /* PFMutableRelationState.m in Sources */, - 76CCB91B392B898460B3E17FAE24BC80 /* PFMutableUserState.m in Sources */, - 4071546C204958FA56B126598AA21012 /* PFNetworkActivityIndicatorManager.m in Sources */, - 2C7EC42E5437F4F927B80CF65D5CEA3B /* PFObject.m in Sources */, - E12A39C3E3423DE57BA268CB553E74DD /* PFObjectBatchController.m in Sources */, - 2F3A21F75992E245B70D2FAB4213679F /* PFObjectConstants.m in Sources */, - 192C2017BBCDB1177A5F77494B10ADEF /* PFObjectController.m in Sources */, - 54CC3108BC26BBB273A857924B6173BF /* PFObjectEstimatedData.m in Sources */, - 7A4647A24ED50F8CB942285D95285B10 /* PFObjectFileCoder.m in Sources */, - F2CCD104B91461CC1548C32C003353FD /* PFObjectFileCodingLogic.m in Sources */, - D149C0E66489B8A63BF8ED2BA213DF12 /* PFObjectFilePersistenceController.m in Sources */, - 2627401700D6CCD2EF48DDF1FE042FFE /* PFObjectLocalIdStore.m in Sources */, - D9B2F24603C0F48EC73090BC6DC94FCE /* PFObjectState.m in Sources */, - B07458C275E7B87DEAF687642BB4EDA2 /* PFObjectSubclassInfo.m in Sources */, - 1CAD0670AB203262F90F62BC3BADEB14 /* PFObjectSubclassingController.m in Sources */, - 37A5F32AC77016F849D167378E9675A3 /* PFObjectUtilities.m in Sources */, - 628EC2E2FC6B26D0F6C7ED0DAB935A84 /* PFOfflineObjectController.m in Sources */, - A9D0D78B1F9703C282B64100E9E8926C /* PFOfflineQueryController.m in Sources */, - 9CC680543CB311240352F92FB2493BB2 /* PFOfflineQueryLogic.m in Sources */, - C7344A2F05279C90561EED1D8EA489CD /* PFOfflineStore.m in Sources */, - 40FA82215DAF72DD25F30AE4D6AC2F5D /* PFOperationSet.m in Sources */, - F2D9EF32073176AC4B9F935577A44456 /* PFPaymentTransactionObserver.m in Sources */, - B1905D70D1237C127EBBFCC391721F35 /* PFPin.m in Sources */, - 10989B990683FCA58C99BB82050E5077 /* PFPinningEventuallyQueue.m in Sources */, - 157A5FFCF49C427C049F82A6C6E7EF9C /* PFPinningObjectStore.m in Sources */, - 82A1CF90239B1B2448900BC02195737D /* PFProduct.m in Sources */, - 7B4FF17B0F855D9EBD572C18D1EE839B /* PFProductsRequestHandler.m in Sources */, - 3D264439507D686CBF9E7040B2B181EE /* PFPropertyInfo.m in Sources */, - C050B90E44F1D7D1B242336E9ED81E08 /* PFPropertyInfo_Runtime.m in Sources */, - A20B7AB30DBD8368549A2ADD1834EE47 /* PFPurchase.m in Sources */, - DBA301B469C007350C52449ADB7E4236 /* PFPurchaseController.m in Sources */, - 9AEB47308349EFDFA683BF4A62CF195D /* PFPush.m in Sources */, - DF425C7C6CA426D5CBB0ADB6A96871C7 /* PFPushChannelsController.m in Sources */, - C5B8E5BD9C4C8E0AF430CD461992ACC0 /* PFPushController.m in Sources */, - 025598DFFF793FB641F506825074F34A /* PFPushManager.m in Sources */, - 5E344479C1E3FE458D0D732D5EFD8C8B /* PFPushState.m in Sources */, - 9E7CF062169C9A81B37510D0AD9162C2 /* PFPushUtilities.m in Sources */, - E0C01AA7CFB002785436D33521E5328D /* PFQuery.m in Sources */, - 3E1E0EBBE4CD3857AF753AA1AB9DF965 /* PFQueryController.m in Sources */, - B0CBDEF8AB0A74F25C79B87615C2A832 /* PFQueryState.m in Sources */, - 3C0D480E2EB6981485CFFA27131FACCC /* PFQueryUtilities.m in Sources */, - 191D1C449C141C961A7F6B7D6982B73E /* PFRESTAnalyticsCommand.m in Sources */, - 9FD4177987850C6E6E37BA911CDD3C1A /* PFRESTCloudCommand.m in Sources */, - D79E5121E2F988A64AE071076264C201 /* PFRESTCommand.m in Sources */, - F3C1136C8D88E18B962C1C4AF612B3B3 /* PFRESTConfigCommand.m in Sources */, - 3B3D6A60DE4D34A1163B63BAB228AD0E /* PFRESTFileCommand.m in Sources */, - E4D2116E355F2C101B6DE6296544C3BC /* PFRESTObjectBatchCommand.m in Sources */, - C910FDABF6D86FF242B7CD5A85FE7B94 /* PFRESTObjectCommand.m in Sources */, - FFDEE01AE0207886F8D70AA02F184FB3 /* PFRESTPushCommand.m in Sources */, - A0BA6E93BF48588EBC097ACE78DA328D /* PFRESTQueryCommand.m in Sources */, - 4A9B74E229EB5509659505EE1DE1692E /* PFRESTSessionCommand.m in Sources */, - 3D6CCE33D20C53A3D9E7C977ADFD6072 /* PFRESTUserCommand.m in Sources */, - E2D8E1BB40962D1F2A8E7C8B179CBB3A /* PFReachability.m in Sources */, - 060F06CDB2C21C334A0082FD9EA5D079 /* PFRelation.m in Sources */, - 865A7864DFFA64506A9F6C30E05ECEE3 /* PFRelationState.m in Sources */, - 76266C2FA1D348D717AC228690DC36EA /* PFRole.m in Sources */, - FB2E5E78E63B5474E21182AC6AB7AE38 /* PFSQLiteDatabase.m in Sources */, - 64CF2D655AAA7C7FBED2449AEC710E4A /* PFSQLiteDatabaseController.m in Sources */, - 75050C536E96095BD980D5A9F3593D53 /* PFSQLiteDatabaseResult.m in Sources */, - 8C37D4BE18B21A9CD00B953782624248 /* PFSQLiteStatement.m in Sources */, - BD7119081B9A134A53DCAD9949D575C4 /* PFSession.m in Sources */, - D4B06A600FA1DBCBB68ACFDE2E554753 /* PFSessionController.m in Sources */, - 3576593700E45C9EBD7D41E2565B1DF9 /* PFSessionUtilities.m in Sources */, - 84C42678DE4460E60A66876CDAC64149 /* PFTaskQueue.m in Sources */, - 82756AE351CEDAA36F92E191804E5C29 /* PFThreadsafety.m in Sources */, - 532D3DF59CE8F5865F4E86368EB6462A /* PFURLConstructor.m in Sources */, - 892C9CADE551523C8EDF800C648306EC /* PFURLSession.m in Sources */, - 2B0B2B3095BEFC0D0520B92D5354F428 /* PFURLSessionCommandRunner.m in Sources */, - 6D2F9FB21ADBAC74D397280A5832D308 /* PFURLSessionDataTaskDelegate.m in Sources */, - 4D74C041164EA0F477B58E5AC7FE23E5 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */, - 6848B68295C1A953461430BFAB2A5D46 /* PFURLSessionJSONDataTaskDelegate.m in Sources */, - 9CDAF8961B1E25C066FAC4D7D44433EA /* PFURLSessionUploadTaskDelegate.m in Sources */, - DE7E8446AB52346D9156DC34976D7342 /* PFUser.m in Sources */, - 1067E9F5F6F4D70E1111D34A159980FB /* PFUserAuthenticationController.m in Sources */, - 897527170E376AFAE5654193F3308633 /* PFUserConstants.m in Sources */, - 3114529BA3CA84D2274E6E9220D1B1EE /* PFUserController.m in Sources */, - 99CC3B1A726965F2F7E569FD3A7EA623 /* PFUserFileCodingLogic.m in Sources */, - AE56E1589FBE716D4F7C22543A5A4C71 /* PFUserState.m in Sources */, - CDCB55B6E5A8A71A543987CB14B2045E /* PFWeakValue.m in Sources */, - 882F9183523311ED2A32898E978C05F0 /* Parse-dummy.m in Sources */, - F3DDD9A3039C1313F12C2A248576DD56 /* Parse.m in Sources */, - 6A7DBAA42BF1E9104329ED6DD2FD0E91 /* ParseManager.m in Sources */, - BAB47A67F4485EE6E586A25B834A2801 /* ParseModule.m in Sources */, + 3B32D30DDAB5F616552953A89CAD5B4B /* BFCancellationToken.m in Sources */, + 7ADA1B50F379A2F4138E1D9AB87725B3 /* BFCancellationTokenRegistration.m in Sources */, + DF6F63AD654936433F0F5FB491062B51 /* BFCancellationTokenSource.m in Sources */, + 15C923711123142A187E54AF51DAD21F /* BFExecutor.m in Sources */, + 77115982F49982BDC610FD0AAF0437E1 /* BFTask.m in Sources */, + 1A4FBF768112F503096A3FF377FE229B /* BFTaskCompletionSource.m in Sources */, + 8A26B6A728510CA76E3A66379A985CF9 /* Bolts-dummy.m in Sources */, + 9AB12335C4C90E038AB8C2EEA46A1E20 /* Bolts.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 40BBC341D8D7A72368D8E6B132E1D6AB /* Sources */ = { + 3F63BFFDB01ACA88867ADBE387F55E36 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BE032518FE863AF44351DDE1D6844470 /* Pods-dummy.m in Sources */, + 646EBA4C236F8278776EE3D386435502 /* AFHTTPRequestOperation.m in Sources */, + 4A43A9BB2D9C6F6B02AE7D378EFE11E0 /* AFHTTPRequestOperationManager.m in Sources */, + 2845AA659BE5007C74F91E8D1FCE10A3 /* AFHTTPSessionManager.m in Sources */, + B322E9C7946C1928ADD7BD54C251BE68 /* AFNetworkActivityIndicatorManager.m in Sources */, + 4A392C6CFBC94113466B20D7DD17A87A /* AFNetworkReachabilityManager.m in Sources */, + 243BC984DF0446C5D09D04FAB0021DA6 /* AFNetworking-dummy.m in Sources */, + 550E02B1289336EED5B66F8EA2629C7F /* AFSecurityPolicy.m in Sources */, + 07689D7D557EEC2F26936CD3E8E12AAC /* AFURLConnectionOperation.m in Sources */, + 0AD7746E244AF27FA8348E42A6C58C75 /* AFURLRequestSerialization.m in Sources */, + 439D6739EB8D8942E83677AE6C6CAE78 /* AFURLResponseSerialization.m in Sources */, + 080EF2C03F1BA90A754AB0F92AA0BCBB /* AFURLSessionManager.m in Sources */, + 7852E0160CD9C638D5B97764D46247B2 /* UIActivityIndicatorView+AFNetworking.m in Sources */, + C0A10DF1BB88502B700C9C29710A0CE7 /* UIAlertView+AFNetworking.m in Sources */, + 980722E68E1A6EBE5B0BDCC12FFF24DB /* UIButton+AFNetworking.m in Sources */, + C8A108971154EAE299CBF95D90E32A91 /* UIImageView+AFNetworking.m in Sources */, + 19B9A6736568C7B840E400D5456C3107 /* UIProgressView+AFNetworking.m in Sources */, + 09EBDBF272847A14AAB323F0059319D6 /* UIRefreshControl+AFNetworking.m in Sources */, + AFB647C03A230B99D3C2E8A875173236 /* UIWebView+AFNetworking.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 63A52441CABAEA2A034C298787B71B23 /* Sources */ = { + 56C7B27B1B482492D26CBE5E9ADE324A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - EED1C92E54E432794307DC75AF87EE82 /* AFHTTPRequestOperation.m in Sources */, - C521D37D942FE201D29B17ED2BACAFE1 /* AFHTTPRequestOperationManager.m in Sources */, - 1502050CA80F5B97E273857066C10540 /* AFHTTPSessionManager.m in Sources */, - 1249B7E8D033D0D59D0D8F097A745AB3 /* AFNetworkActivityIndicatorManager.m in Sources */, - F6C4B0AB4C5CC75A89E9E082659B1181 /* AFNetworkReachabilityManager.m in Sources */, - 786D083E69FEC7BBDAD2112F88692F61 /* AFNetworking-dummy.m in Sources */, - 7944A48A8FCFDF523DD67A11DA48E2D3 /* AFSecurityPolicy.m in Sources */, - FA8549933F4A9D5FC6E695B2C00C484E /* AFURLConnectionOperation.m in Sources */, - D1ED7907552DF919137E30AEDBAC4AD3 /* AFURLRequestSerialization.m in Sources */, - 1380A386F92D641C726FA9687404B11E /* AFURLResponseSerialization.m in Sources */, - 6F827A5588B3DF26C10C2E566D2D41E1 /* AFURLSessionManager.m in Sources */, - 354DC5158891E616616904856C60FA22 /* UIActivityIndicatorView+AFNetworking.m in Sources */, - 3E36642B632C36FD496D0345C6B12E15 /* UIAlertView+AFNetworking.m in Sources */, - 00275592A13B5D46B08409D995DB6ADB /* UIButton+AFNetworking.m in Sources */, - DEBBD76F7A9E5B75BF2732334FA25155 /* UIImageView+AFNetworking.m in Sources */, - BEDAE19BB304069C127DED5676C08866 /* UIProgressView+AFNetworking.m in Sources */, - 6FDF337377416BE9C6958B05AC1C571E /* UIRefreshControl+AFNetworking.m in Sources */, - 626E3E94132CE3E2B174CCB5C2E61241 /* UIWebView+AFNetworking.m in Sources */, + 058C33FB5C2A3719FE4ADF9A72690954 /* Pods-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - C404306DBE18890298706A71A7863ED7 /* Sources */ = { + 64842CE7F10AB438289053D54DD58814 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8F23210C8BC4F5C9280066640C17C69B /* BFCancellationToken.m in Sources */, - 21D65B5E8DF938F32091BDBD66B1E5D1 /* BFCancellationTokenRegistration.m in Sources */, - AB0423F50C0C64EEE86C2680EC9F02B5 /* BFCancellationTokenSource.m in Sources */, - E219C58B408FA57BF94D5A4113C59B87 /* BFExecutor.m in Sources */, - 90F6AC61C0D614F4F3DD46C81171C8ED /* BFTask.m in Sources */, - C6E0B8D8F68167D1CEA74DEAAE59F09A /* BFTaskCompletionSource.m in Sources */, - D22255492F43BE2B59EDB2478E8C5818 /* Bolts-dummy.m in Sources */, - 842EC859A33C10671D3500B99F24C6C5 /* Bolts.m in Sources */, + 0A5C5780FD7F1B7733BB3782558AE5F2 /* BFTask+Private.m in Sources */, + 3CDD14AD6299D861BD4A75E51C955FB0 /* PFACL.m in Sources */, + 0FFE217A2F5661D71D515960C6C127A3 /* PFACLState.m in Sources */, + F7E1547B925A529368F48054B83FB2BB /* PFAlertView.m in Sources */, + 34DA07B0700F3722B759F670EB634321 /* PFAnalytics.m in Sources */, + F44272477D3F7D1C424C5E530A526F49 /* PFAnalyticsController.m in Sources */, + FA51E4A2D88C2F49851379F4944D3C0E /* PFAnalyticsUtilities.m in Sources */, + 9B41546D5BF367123CECD1C41C61CDBF /* PFAnonymousAuthenticationProvider.m in Sources */, + CCDEBAF806FE044AC4E3ED59E2E2ECC1 /* PFAnonymousUtils.m in Sources */, + 8EE9177604889F84ED7E162F79219460 /* PFApplication.m in Sources */, + EB39803E763F8B8D482C26A2D6062693 /* PFAsyncTaskQueue.m in Sources */, + 0E7C6F4A18B0C575C95C2B728F287226 /* PFBase64Encoder.m in Sources */, + 82EC3599D5C399A277C618637E8E3F7C /* PFBaseState.m in Sources */, + 5AD4B793E83B8E054CAE6B89855D8D9C /* PFCachedQueryController.m in Sources */, + 1142F84DA854B1C4DC3AAE803BC1E0F7 /* PFCategoryLoader.m in Sources */, + BD0E934130A4AF2DFCCC964A022D1001 /* PFCloud.m in Sources */, + 98E57F0238DFA229DCE4C9362B1F3247 /* PFCloudCodeController.m in Sources */, + 7815964872C2B51CB4A6E3DDFB259F9E /* PFCommandCache.m in Sources */, + BB94918ED5DE293AF4900C1525400B44 /* PFCommandResult.m in Sources */, + 1175BA0356280D99698F51554B61E080 /* PFCommandRunning.m in Sources */, + 7A99B23BF2F12FD39E70FA4D2070D029 /* PFCommandRunningConstants.m in Sources */, + 4804980741C45D9A093408BC9C2A1109 /* PFCommandURLRequestConstructor.m in Sources */, + 82D09FFFD776A9F4CFBB39AFA24A94DD /* PFConfig.m in Sources */, + 755581EED26A565E146BBCEF97615961 /* PFConfigController.m in Sources */, + B22514014C4FD728708247C36A4D2C06 /* PFConstants.m in Sources */, + B162D6ADD7D48D114D60C7058AB6ADC7 /* PFCoreManager.m in Sources */, + DF10EECC8F4347BD60C03DB90E6CAA53 /* PFCurrentConfigController.m in Sources */, + 6D9D0C26999CCBB70AF8D2684115C77B /* PFCurrentInstallationController.m in Sources */, + 5D1D7B8A1EBB2541939160A3BA0DFFBA /* PFCurrentUserController.m in Sources */, + EDB338AC8EB3F78108F7D5E695AB70CB /* PFDateFormatter.m in Sources */, + FB78D672E994A15E6DFCA3C4D85ED228 /* PFDecoder.m in Sources */, + 8AE9974F18F4211C4FC4E079A3F918C3 /* PFDefaultACLController.m in Sources */, + 959985EE2DDB61C72EF152E7DEAA1505 /* PFDevice.m in Sources */, + 278E40F6EE95CF00DB279DCC0011B8E3 /* PFEncoder.m in Sources */, + 70CAD307A522EDD432E2E142E8FB2AC3 /* PFErrorUtilities.m in Sources */, + 523BF7C602D2C334D249699DF15F03EC /* PFEventuallyPin.m in Sources */, + 204772803C990F2F4CE6C83C40143CC7 /* PFEventuallyQueue.m in Sources */, + 3535C673DE202C41CC12B5FF2AB1A21A /* PFFieldOperation.m in Sources */, + 10F5A5F62CE7A90BB74CAEB8E6D9F621 /* PFFieldOperationDecoder.m in Sources */, + AD97A6603AC678AB9566480E98F13D60 /* PFFile.m in Sources */, + 4D261C59967A55D67AFCA703F83241B2 /* PFFileController.m in Sources */, + 4FA6C6D39F058D7EA20D7EF637A8A57A /* PFFileDataStream.m in Sources */, + 5DC64089C30C0511F3625CD1D962E3B4 /* PFFileManager.m in Sources */, + EDB9D6D01DE172DB8ED0FC38F94FD498 /* PFFileStagingController.m in Sources */, + 0B171376313276CA617C411FEEBBC0E9 /* PFFileState.m in Sources */, + 4537620269E7D26207A9DFAFD880B28A /* PFGeoPoint.m in Sources */, + 0324A587668B5642075BB00C08E967C7 /* PFHTTPURLRequestConstructor.m in Sources */, + 5C3C95B94390673EE792DEAE3DBE1092 /* PFHash.m in Sources */, + 0779F394E8BC13F56C39B0AD79D237AC /* PFInstallation.m in Sources */, + D7640761AE1745BF2997189B5DB9AE5E /* PFInstallationConstants.m in Sources */, + B6F3BB847C3FE8C7885EF6699B267CEB /* PFInstallationController.m in Sources */, + F2F88046052A13EED40281048B936022 /* PFInstallationIdentifierStore.m in Sources */, + 56E91AB371FC2BB10D67DAF7649F7C0C /* PFInternalUtils.m in Sources */, + 7F4F12FF6F0A3C6D1845F078F0004F6F /* PFJSONSerialization.m in Sources */, + 4A59411383BFA6BB68350E089CFBDC5A /* PFKeyValueCache.m in Sources */, + 9E03585B3015EE3103C5F73C92A933C2 /* PFKeychainStore.m in Sources */, + 1D0BD1009819AAD1AB8F8F06ADEBC826 /* PFLocationManager.m in Sources */, + AAFAEDF937B05009965ACA3AA79497BE /* PFLogger.m in Sources */, + D3BA714EBA9CCEF754C2FF17053B7F6D /* PFMultiProcessFileLock.m in Sources */, + F8B5F7BEA7C83DC314107B06E4DFF660 /* PFMultiProcessFileLockController.m in Sources */, + 59D9FB33E5F0C38CA2E687471A6F8644 /* PFMulticastDelegate.m in Sources */, + 4DDB3968C8A8A39F557F0F98E3FBC084 /* PFMutableACLState.m in Sources */, + 7321D80D3B0B0CD8683BDF3DBEE8726D /* PFMutableFileState.m in Sources */, + C031BF00625EA58B0E0F43664A6221F6 /* PFMutableObjectState.m in Sources */, + B68444D00C3BE5FF2CE8F08CA027ED38 /* PFMutablePushState.m in Sources */, + ABE5442021681A5A3DFF0E4E61221DB4 /* PFMutableQueryState.m in Sources */, + 80A03D9C38836FCA35E6C7A0E96B2C68 /* PFMutableRelationState.m in Sources */, + 61A3FD15B2531C1A521A1112D5CCE5B1 /* PFMutableUserState.m in Sources */, + B2BEA9220E24B84E66D4C25D4191A4A6 /* PFNetworkActivityIndicatorManager.m in Sources */, + 27E0A3BCBFFECAB4AED61DF691863C7F /* PFObject.m in Sources */, + 62254E2BAF384DE7CEDDD8E9D244BFDA /* PFObjectBatchController.m in Sources */, + 5C57468DCECC07BC543040A08B37D595 /* PFObjectConstants.m in Sources */, + E7A71CBCC35381012DF4754ECCFAE54B /* PFObjectController.m in Sources */, + 0DF1F1C0EB06F34AD36329B2953E83A3 /* PFObjectEstimatedData.m in Sources */, + D7D35AF9A402F329043D58BC49AE209B /* PFObjectFileCoder.m in Sources */, + 2981ECF4D915465E57AB031FBE516899 /* PFObjectFileCodingLogic.m in Sources */, + 1438BD13EE86C427BFF89FB983E5C521 /* PFObjectFilePersistenceController.m in Sources */, + 5690DD3B08D87092DFD98E2F2FE1CC3A /* PFObjectLocalIdStore.m in Sources */, + 1726653C23DD9E9D779480508DDAF357 /* PFObjectState.m in Sources */, + DBA63BC235D5E10D72CDB0AF89EF50EB /* PFObjectSubclassInfo.m in Sources */, + 9A38DE9FDB3E7D427118F17716DCB0D3 /* PFObjectSubclassingController.m in Sources */, + CD91B87ED0BF7972FD3075256D3B5FC9 /* PFObjectUtilities.m in Sources */, + A35CC042438994CCC95CA00358911CBC /* PFOfflineObjectController.m in Sources */, + 65F50C4FDE00BFD21521C2C77D1EE5F8 /* PFOfflineQueryController.m in Sources */, + D4C9FC064C9671F00AFE2BBB28B717C8 /* PFOfflineQueryLogic.m in Sources */, + 31DBF0CF1281280BF8BC1C97ABF7E70F /* PFOfflineStore.m in Sources */, + DC1CF0ADB23CF7A4DE023F7F2E8EF79E /* PFOperationSet.m in Sources */, + C7B3A79CC6F994A3856811BB3E7650B2 /* PFPaymentTransactionObserver.m in Sources */, + 4D787A75B05A49DAD6AF077665141080 /* PFPin.m in Sources */, + 5B78DF4D5909AD46E1F0CAB5072F86E2 /* PFPinningEventuallyQueue.m in Sources */, + 859ED907A159E53ACAE5EF1301034908 /* PFPinningObjectStore.m in Sources */, + B9D6397236C3B93431B38327C0F09EC7 /* PFProduct.m in Sources */, + 9BBC8BFDFD6E1FEE5B9E4580BD75DA32 /* PFProductsRequestHandler.m in Sources */, + CD613FD1DB7B5DE11F8617B8F8499EAA /* PFPropertyInfo.m in Sources */, + 85EBFB73ABE0D5B3C28180EE3F28B04F /* PFPropertyInfo_Runtime.m in Sources */, + 17A5133A7E56EE7FB1BF9EDA962CD339 /* PFPurchase.m in Sources */, + B233E11E9B18531FA3846A13921B608E /* PFPurchaseController.m in Sources */, + 88A493D5108AB8DE462BD0E5FF2641D7 /* PFPush.m in Sources */, + 15BACF6F4392C06333ABB855D1C09D26 /* PFPushChannelsController.m in Sources */, + A862EC88C384FA53351F004CE6FBE964 /* PFPushController.m in Sources */, + 39395992EEF2BBD07B4072712B9B6BC9 /* PFPushManager.m in Sources */, + 6D1E15CB50AF31C5F1FC48C9307396CE /* PFPushState.m in Sources */, + ABDD078EE52F5D96F65AD16A32A2AEB9 /* PFPushUtilities.m in Sources */, + FCFE88B120605ADD81D83D8709691A7B /* PFQuery.m in Sources */, + 3811029805E268A2454BC0EA9246BBF8 /* PFQueryController.m in Sources */, + 0B922D7B1F2BEE58B09201C396ED1E50 /* PFQueryState.m in Sources */, + 41D2984BBCB035BBAFE7FF0A7665C571 /* PFQueryUtilities.m in Sources */, + 1132ABF6EE0847419FB61C4426DDED7D /* PFRESTAnalyticsCommand.m in Sources */, + F3EBD0819CE9E67DD61F06A6C6879435 /* PFRESTCloudCommand.m in Sources */, + 38DE0AB21944981CDD2A823746B8D042 /* PFRESTCommand.m in Sources */, + D65614CEF258F3A4E8E6B5888D4B7CDF /* PFRESTConfigCommand.m in Sources */, + DAB688C1A5A2539C6A972C1D752DC734 /* PFRESTFileCommand.m in Sources */, + 32DFD993548CFCEB5718D6E55014913D /* PFRESTObjectBatchCommand.m in Sources */, + F0D96EAAA93A0079475AAD4E960D8F3B /* PFRESTObjectCommand.m in Sources */, + D8A9DE018D72A141E9CCF603B8B0A45D /* PFRESTPushCommand.m in Sources */, + 2D23F414111C13F47EC26E5EBCB71E51 /* PFRESTQueryCommand.m in Sources */, + CD194BB451204670AB0A694560D9263D /* PFRESTSessionCommand.m in Sources */, + 8689D876F786C4BC98494F21A88AFCE5 /* PFRESTUserCommand.m in Sources */, + 8D85B553AB44873F6C90954084FD9721 /* PFReachability.m in Sources */, + B59BA13445B3371F9E88645BD03D36E5 /* PFRelation.m in Sources */, + AE3BAEB87401EDE9E3ECDC888F08D174 /* PFRelationState.m in Sources */, + 3237EECD82318F5B0FB8E6F9CAED0D1E /* PFRole.m in Sources */, + 6397E8A743D712A580B76B8E5E05F3F4 /* PFSQLiteDatabase.m in Sources */, + 0689650490C5FA178FB55BF99FEFE32A /* PFSQLiteDatabaseController.m in Sources */, + 53D741970EB5CAD1C6F501A3E2D939F8 /* PFSQLiteDatabaseResult.m in Sources */, + F746DD1FA02FFC12E938F04777C9529A /* PFSQLiteStatement.m in Sources */, + 6246EEA145637AB8C43D53D9A0CD8084 /* PFSession.m in Sources */, + 0C0269A055BF9D65CECCEFF350E25230 /* PFSessionController.m in Sources */, + 3820EBC1F6A8B84CF94E8BD96ADA28B3 /* PFSessionUtilities.m in Sources */, + F77AAC38F065B6E370AAAC1C59906F73 /* PFTaskQueue.m in Sources */, + CF405FDD9B6CC954679AD7757C0F6AF3 /* PFThreadsafety.m in Sources */, + 6A82FFB9C6777D6F7FE528562A59B813 /* PFURLConstructor.m in Sources */, + D6337DEC57E37290582ECA6573B320E8 /* PFURLSession.m in Sources */, + 84FE535E6E603F6AFF0739BCDB2C7E8E /* PFURLSessionCommandRunner.m in Sources */, + 4A4757C75E3BF0A7B11F52575953063A /* PFURLSessionDataTaskDelegate.m in Sources */, + B0F0B301A563B1B00CA1E54D3DB6B00C /* PFURLSessionFileDownloadTaskDelegate.m in Sources */, + EA5D8F7D99B81A3F0B37F13594C6B09F /* PFURLSessionJSONDataTaskDelegate.m in Sources */, + 2CE1FD6550579515D80B980891301A7D /* PFURLSessionUploadTaskDelegate.m in Sources */, + 726B14EA0541A276FF4C99A72D1666FF /* PFUser.m in Sources */, + BB56D58A2B84E11B4B5D600D1463C4B4 /* PFUserAuthenticationController.m in Sources */, + 04EEEAD9FEA496471400B5FCD3F39CE9 /* PFUserConstants.m in Sources */, + CA4B1DD1B4C3C9E84FE49AEC2FA665A1 /* PFUserController.m in Sources */, + 449FD42DA83CA92A8E0F3F22B0187364 /* PFUserFileCodingLogic.m in Sources */, + D9B4A22246C884827CD655A9156C472F /* PFUserState.m in Sources */, + 9FE54FF0687B60AAE4D75F85B3EFE342 /* PFWeakValue.m in Sources */, + EA8EF5F11DEA83024A32A85701C9F3F2 /* Parse-dummy.m in Sources */, + 42D65A52447035F8EE55B5CB58812055 /* Parse.m in Sources */, + 0099E2B1CF4EC129452C3FB7F8C4BCF6 /* ParseManager.m in Sources */, + 1E89BEBB3085CA72872A08470CC5E905 /* ParseModule.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - E716450A5FA3787141F895F94CEB9A8B /* Sources */ = { + AEF278FCD18D7EDC0486BA674562B5E6 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 46DCE2CC317AC30889B0B674F4C86173 /* ContextMenu.iOS-dummy.m in Sources */, - 6ACF579F7F083EF03A3DBB128D76B4C3 /* UIView+YALConstraints.m in Sources */, - 27C6F9BEE80BC03933C78785106C81FE /* YALContextMenuTableView.m in Sources */, + 77418FF216133AFC144219F1E91FC6B0 /* ContextMenu.iOS-dummy.m in Sources */, + FF5CDF2194CB64CB138D22962F1BD236 /* UIView+YALConstraints.m in Sources */, + C1B61FD5829B0E8EF13788BDEAE71476 /* YALContextMenuTableView.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B7D41FF8C3988070869C18E377BB5881 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9D37632001F7DD8990242244C9AD09CD /* PFActionButton.m in Sources */, + EA1BF58C6AD803B2721DA1878CFCC713 /* PFActivityIndicatorCollectionReusableView.m in Sources */, + EB59258B2DF066823D0304F785C50A93 /* PFActivityIndicatorTableViewCell.m in Sources */, + 1D48242F40C98225F12C6A79D022CC58 /* PFCollectionViewCell.m in Sources */, + 632CEFF588E7171112D856112688FCDE /* PFColor.m in Sources */, + 61D4996EE6591C850ED3739F3B8A500D /* PFDismissButton.m in Sources */, + 31317B2C0B9E11C4B55199B46B0638EF /* PFImage.m in Sources */, + F6F92BBA0307541F2BFFD08EA6EBA3EE /* PFImageCache.m in Sources */, + CB8A6911585DD2E85C4B59A6BF7F3F1A /* PFImageView.m in Sources */, + ECC7C4DF3B8E8BCF4A68C7936F8804EA /* PFLoadingView.m in Sources */, + D30FD7247BF7B33D7AE8EECC2839822E /* PFLogInView.m in Sources */, + 26B7EDDF6363F273CFB7F3DEED91CF80 /* PFLogInViewController.m in Sources */, + 1806FCD022ED494BFB481CC76AAE2B03 /* PFPrimaryButton.m in Sources */, + 85DF6A9EC2F1AF2F728E01D985425789 /* PFProductTableViewController.m in Sources */, + 132B5AF281B12843272B902AF2E38323 /* PFPurchaseTableViewCell.m in Sources */, + 704810C8E070CB7385AE3A703E040A0C /* PFQueryCollectionViewController.m in Sources */, + 3276E444942D4FC14870DBA0F0D08116 /* PFQueryTableViewController.m in Sources */, + 1F08E0262BF7F1367AF419DA62CD4F86 /* PFRect.m in Sources */, + 191DA66337D45246746ADE03C8FECDF6 /* PFResources.m in Sources */, + F2C2B60CE982DB296961EAF3689DEFFF /* PFSignUpView.m in Sources */, + AD391AD29A3B2458F1A4AEB266FEADEA /* PFSignUpViewController.m in Sources */, + 51422B93B5FFA3C268FC6C7E396B67CE /* PFTableViewCell.m in Sources */, + 08F14D425390F9F5229730E9364AC953 /* PFTextButton.m in Sources */, + B708D81052FD3DCCACE0CC2A9820B106 /* PFTextField.m in Sources */, + 1F07EE074A930CACDE467A34B20A80AF /* PFUIAlertView.m in Sources */, + FAF590CC3EFA1984D9572722478E40F8 /* ParseUI-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 090DA03D4C071EB1C946E6266644F1D9 /* PBXTargetDependency */ = { + 13E56317D4C79E315D0018B424AF8D8E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Parse; - target = F7D0346E5B3C07CA2678B48D1D1BD750 /* Parse */; - targetProxy = 58FD68CA85B5E72697502824B988F051 /* PBXContainerItemProxy */; + name = Bolts; + target = 63424AA4CF7BFFFC31A230BC68DB1283 /* Bolts */; + targetProxy = B91E15B00D3A74876D9CA29693929CAA /* PBXContainerItemProxy */; }; - 3530AC604629113E40B76CB90F73E195 /* PBXTargetDependency */ = { + 47F3F7858F1BDE7DEEAF189804B13EFD /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Bolts; - target = 9D8311DD3E0DA85313EF9710C8614AD8 /* Bolts */; - targetProxy = A350E8606E02ACFA8AA6C838EE4FDE3D /* PBXContainerItemProxy */; + target = 63424AA4CF7BFFFC31A230BC68DB1283 /* Bolts */; + targetProxy = 2CAA5A07ADAA327622EDE24FE7AE8E09 /* PBXContainerItemProxy */; + }; + 4D353D1FEAEF9BEBC251744328DD1E88 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Parse; + target = 37F6420F8EF0C3E689A20C749DE084A5 /* Parse */; + targetProxy = 9DCA40E162180CBDE80220C90E4FEEC2 /* PBXContainerItemProxy */; }; - 4B7038BA1BDC2249906D6018B5F6C3AB /* PBXTargetDependency */ = { + 5A138C7A80144A98D2B68DE8AE24F61A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AFNetworking; + target = E525AC57810AC5DC4DD2F97ABD9EC4EE /* AFNetworking */; + targetProxy = 19A35FDBB9C4F8BCD7206FDC9B4DD657 /* PBXContainerItemProxy */; + }; + 700A50753C15DBDBEF5F14DE1A49436B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ParseUI; + target = 9A7DAE4E6908C5BFF25ECBAA445E8A2F /* ParseUI */; + targetProxy = B757AECC09A246C51A0E03D6693EAEAD /* PBXContainerItemProxy */; + }; + 8360F037D03D9464D957D8ECFB259783 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = pop; target = 47C800E42623009B7192B025B3DD25A1 /* pop */; - targetProxy = 103117E18087B3EEC84D8F67EA532CD6 /* PBXContainerItemProxy */; + targetProxy = 3A56FD063F449BFD74325BC98E1D5C6F /* PBXContainerItemProxy */; }; - 4ECE2DEC9CA88EA95B0CAA98A75B9211 /* PBXTargetDependency */ = { + E83DE192F7A1C225ECB73063022DE127 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Bolts; - target = 9D8311DD3E0DA85313EF9710C8614AD8 /* Bolts */; - targetProxy = 898759E58BADE0E9FBFA1E66E38F8039 /* PBXContainerItemProxy */; + name = ContextMenu.iOS; + target = A457234CA8AE922542FEBB7E984D9B13 /* ContextMenu.iOS */; + targetProxy = 5400FD316CAF139612E0F98B1723D40D /* PBXContainerItemProxy */; }; - 6FB474EE146C7D054B64F0529723BBD5 /* PBXTargetDependency */ = { + EDF164D7A95656B0D39126451EBC0B6B /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = ContextMenu.iOS; - target = 7D5B41A236FF14B6B02D4BAF6C4A690A /* ContextMenu.iOS */; - targetProxy = 11F61E646F82C7A3027EAFA6F2C283CA /* PBXContainerItemProxy */; + name = Bolts; + target = 63424AA4CF7BFFFC31A230BC68DB1283 /* Bolts */; + targetProxy = 92283A8782B47574C074DE2A04824E63 /* PBXContainerItemProxy */; }; - 9A649419F2A6E8DA31A1B71517CF82EB /* PBXTargetDependency */ = { + F28EADBF6BAC7E42FB116D1D6C02EA7C /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = AFNetworking; - target = 39991CD032545E130997094168EF96E2 /* AFNetworking */; - targetProxy = 5990CF4195D3965C7E2B2A3208652783 /* PBXContainerItemProxy */; + name = Parse; + target = 37F6420F8EF0C3E689A20C749DE084A5 /* Parse */; + targetProxy = 04D0E410F8E96A5053B7A1F4ACD44739 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 000400B0D1E76EBBC48059E96D81D5FD /* Debug */ = { + 377D8F8B1424499BCE256365B12BE3AD /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F0959918976A05003B1E7FB37A8F8749 /* Bolts-Private.xcconfig */; + baseConfigurationReference = 2940BC6B2FD4089D74072136047C2FEE /* Pods.release.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = YES; + MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; - name = Debug; + name = Release; + }; + 3F77F15099C013262E1B4B1C3245CB82 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A89DC1C62077920038FC9E70EC43406F /* Parse-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 500A11FF036E8000E4D1DBE90EADC6D6 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 091BEB546F9E83DDA5A3AA12B9DEE1B4 /* AFNetworking-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 52F764F248C08C9E3023D25A1C8F3129 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 29F9DECE0CF6610E69C7A3675035677A /* ParseUI-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/ParseUI/ParseUI-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; }; 5CE5176205D06FF3FFE3DDDA9291E44B /* Debug */ = { isa = XCBuildConfiguration; @@ -2596,22 +2988,6 @@ }; name = Release; }; - 63D806B24D2E2AF2D57832D4C21C42A8 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 92EFA64DEEA2D7C788D39BE4B87668B0 /* ContextMenu.iOS-Private.xcconfig */; - buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/ContextMenu.iOS/ContextMenu.iOS-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; 74857149DC1E0D599B8A01A78349A926 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2646,12 +3022,12 @@ }; name = Release; }; - 8978DF038D028E26D938D43B1A73098F /* Debug */ = { + 7556D1C06290ABA2EE7F17D1B2304251 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 69C89E4E56C77B03B486A9C81B595B44 /* AFNetworking-Private.xcconfig */; + baseConfigurationReference = 29F9DECE0CF6610E69C7A3675035677A /* ParseUI-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/ParseUI/ParseUI-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; @@ -2662,41 +3038,41 @@ }; name = Debug; }; - 90C663DBECD470D47C0A32FB964DB72D /* Release */ = { + 851626EB7625D6878900A90BA665CFCC /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F0959918976A05003B1E7FB37A8F8749 /* Bolts-Private.xcconfig */; + baseConfigurationReference = 091BEB546F9E83DDA5A3AA12B9DEE1B4 /* AFNetworking-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; + MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; - name = Release; + name = Debug; }; - 92138A835212834AB25A49FEAAAF8DC4 /* Release */ = { + 8A48C4DA3CE954EB276387F21D97E5E0 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 69C89E4E56C77B03B486A9C81B595B44 /* AFNetworking-Private.xcconfig */; + baseConfigurationReference = A89DC1C62077920038FC9E70EC43406F /* Parse-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; + MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; - name = Release; + name = Debug; }; - B8FC56A1FDD3F521E15013C645A9236F /* Debug */ = { + 8F81628251F65DE85CD539EB703940D9 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 46A44DBE60FFDA06D7726DD3091A0E47 /* Pods.debug.xcconfig */; + baseConfigurationReference = 88941524D385690CBCF300DD140DF00E /* Pods.debug.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; IPHONEOS_DEPLOYMENT_TARGET = 9.0; @@ -2710,12 +3086,12 @@ }; name = Debug; }; - C1DEE2986C7D0977543B7BADA2F3BB1B /* Release */ = { + A1550668E111B3AE7520B7DBAF7B39C2 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 92EFA64DEEA2D7C788D39BE4B87668B0 /* ContextMenu.iOS-Private.xcconfig */; + baseConfigurationReference = 035B567BBDDB9DF3B6541DFC52B519A0 /* Bolts-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/ContextMenu.iOS/ContextMenu.iOS-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; @@ -2726,12 +3102,12 @@ }; name = Release; }; - C9530B48CBF28D013878B635CA786748 /* Debug */ = { + ABE0B754A1C1D7D21B9A7B8273FB6249 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4743EB53C73E4B52C1EC84395BD476F5 /* Parse-Private.xcconfig */; + baseConfigurationReference = 035B567BBDDB9DF3B6541DFC52B519A0 /* Bolts-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; @@ -2742,44 +3118,44 @@ }; name = Debug; }; - CBF78EF43B07DE62F513E7142428C170 /* Release */ = { + BE677D51E4BD69884BF8C9646A381377 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 554179C2DB1E42B74E86A13E79A45730 /* Pods.release.xcconfig */; + baseConfigurationReference = 21565D1D07AD78BD3FD76735ADC39994 /* ContextMenu.iOS-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/ContextMenu.iOS/ContextMenu.iOS-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; name = Release; }; - D7DC57C4D3F0140BD338639511AED72F /* Release */ = { + E69EFF8AAAC9CEFE6A33102476292CA8 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4743EB53C73E4B52C1EC84395BD476F5 /* Parse-Private.xcconfig */; + baseConfigurationReference = 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/pop/pop-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; + MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; - name = Release; + name = Debug; }; - E69EFF8AAAC9CEFE6A33102476292CA8 /* Debug */ = { + EE40F3DC01937CFC34A5AC195B257824 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */; + baseConfigurationReference = 21565D1D07AD78BD3FD76735ADC39994 /* ContextMenu.iOS-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/pop/pop-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/ContextMenu.iOS/ContextMenu.iOS-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; @@ -2793,11 +3169,20 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 05D30B977C164867CBB28678E172C5BA /* Build configuration list for PBXNativeTarget "Parse" */ = { + 05D41F997AFFD8575A32C481902633BE /* Build configuration list for PBXNativeTarget "AFNetworking" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 851626EB7625D6878900A90BA665CFCC /* Debug */, + 500A11FF036E8000E4D1DBE90EADC6D6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 232C8EB3BB4BBD4011E481EF5D518590 /* Build configuration list for PBXNativeTarget "ContextMenu.iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - C9530B48CBF28D013878B635CA786748 /* Debug */, - D7DC57C4D3F0140BD338639511AED72F /* Release */, + EE40F3DC01937CFC34A5AC195B257824 /* Debug */, + BE677D51E4BD69884BF8C9646A381377 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -2811,11 +3196,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 431EFC273B3FC2034AFD6C4C92E174CD /* Build configuration list for PBXNativeTarget "AFNetworking" */ = { + 5C34FB991FA427DC58BDC724C9A71282 /* Build configuration list for PBXNativeTarget "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 8978DF038D028E26D938D43B1A73098F /* Debug */, - 92138A835212834AB25A49FEAAAF8DC4 /* Release */, + 8F81628251F65DE85CD539EB703940D9 /* Debug */, + 377D8F8B1424499BCE256365B12BE3AD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -2829,29 +3214,29 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 67A13180ACA2EC97B329D12BBF330556 /* Build configuration list for PBXNativeTarget "Bolts" */ = { + 6906A264C799B105138FB80C08E37FD9 /* Build configuration list for PBXNativeTarget "Bolts" */ = { isa = XCConfigurationList; buildConfigurations = ( - 000400B0D1E76EBBC48059E96D81D5FD /* Debug */, - 90C663DBECD470D47C0A32FB964DB72D /* Release */, + ABE0B754A1C1D7D21B9A7B8273FB6249 /* Debug */, + A1550668E111B3AE7520B7DBAF7B39C2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9B6492829B8D73AD10769E85FCA9F27E /* Build configuration list for PBXNativeTarget "Pods" */ = { + 6DA8E9181C234AE78BCB2835BFCE55A0 /* Build configuration list for PBXNativeTarget "Parse" */ = { isa = XCConfigurationList; buildConfigurations = ( - B8FC56A1FDD3F521E15013C645A9236F /* Debug */, - CBF78EF43B07DE62F513E7142428C170 /* Release */, + 8A48C4DA3CE954EB276387F21D97E5E0 /* Debug */, + 3F77F15099C013262E1B4B1C3245CB82 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D8C66A8CA86F8BA4F03E908B331BECA5 /* Build configuration list for PBXNativeTarget "ContextMenu.iOS" */ = { + 6F93D3A1C5446CCEE5035B09CD0A6588 /* Build configuration list for PBXNativeTarget "ParseUI" */ = { isa = XCConfigurationList; buildConfigurations = ( - 63D806B24D2E2AF2D57832D4C21C42A8 /* Debug */, - C1DEE2986C7D0977543B7BADA2F3BB1B /* Release */, + 7556D1C06290ABA2EE7F17D1B2304251 /* Debug */, + 52F764F248C08C9E3023D25A1C8F3129 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-Private.xcconfig b/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-Private.xcconfig index 81e0c43..bfc8625 100644 --- a/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-Private.xcconfig +++ b/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-Private.xcconfig @@ -1,6 +1,6 @@ #include "AFNetworking.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/AFNetworking" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/AFNetworking" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" OTHER_LDFLAGS = ${AFNETWORKING_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig b/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig index 4f46a39..5b0d215 100644 --- a/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig +++ b/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig @@ -1,5 +1,5 @@ #include "Bolts.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Bolts" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Bolts" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-Private.xcconfig b/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-Private.xcconfig index cf9920d..d12ec85 100644 --- a/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-Private.xcconfig +++ b/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-Private.xcconfig @@ -1,6 +1,6 @@ #include "ContextMenu.iOS.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" OTHER_LDFLAGS = ${CONTEXTMENU_IOS_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig b/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig index 145418d..a4f468c 100644 --- a/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig +++ b/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig @@ -1,6 +1,6 @@ #include "Parse.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Parse" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Parse" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" OTHER_LDFLAGS = ${PARSE_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown index fcec2d4..306898c 100644 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown @@ -267,6 +267,27 @@ Apache License See https://www.parse.com/about/terms +## ParseUI + +Copyright (c) 2014, Parse, LLC. All rights reserved. + +You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +copy, modify, and distribute this software in source code or binary form for use +in connection with the web services and APIs provided by Parse. + +As with any software that integrates with the Parse platform, your use of +this software is subject to the Parse Terms of Service +[https://www.parse.com/about/terms]. This copyright 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. + + ## pop BSD License diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist index 4272d8f..6211c13 100644 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist @@ -294,6 +294,31 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Type PSGroupSpecifier + + FooterText + Copyright (c) 2014, Parse, LLC. All rights reserved. + +You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +copy, modify, and distribute this software in source code or binary form for use +in connection with the web services and APIs provided by Parse. + +As with any software that integrates with the Parse platform, your use of +this software is subject to the Parse Terms of Service +[https://www.parse.com/about/terms]. This copyright 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. + + Title + ParseUI + Type + PSGroupSpecifier + FooterText BSD License diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods-resources.sh b/BreakingBad/Pods/Target Support Files/Pods/Pods-resources.sh index a0fbc2e..0c4eb4b 100755 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods-resources.sh +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods-resources.sh @@ -59,9 +59,11 @@ install_resource() } if [[ "$CONFIGURATION" == "Debug" ]]; then install_resource "Parse/Parse/Resources/en.lproj" + install_resource "ParseUI/ParseUI/Resources/Localization/en.lproj" fi if [[ "$CONFIGURATION" == "Release" ]]; then install_resource "Parse/Parse/Resources/en.lproj" + install_resource "ParseUI/ParseUI/Resources/Localization/en.lproj" fi mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig b/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig index 33ec719..041274f 100644 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig @@ -1,7 +1,7 @@ CLANG_CXX_LANGUAGE_STANDARD = c++11 CLANG_CXX_LIBRARY = libc++ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" -isystem "${PODS_ROOT}/Headers/Public/Parse" -isystem "${PODS_ROOT}/Headers/Public/pop" -OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"Bolts" -l"ContextMenu.iOS" -l"Parse" -l"c++" -l"pop" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "Accounts" -weak_framework "Social" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" -isystem "${PODS_ROOT}/Headers/Public/Parse" -isystem "${PODS_ROOT}/Headers/Public/ParseUI" -isystem "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"Bolts" -l"ContextMenu.iOS" -l"Parse" -l"ParseUI" -l"c++" -l"pop" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "Foundation" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "Accounts" -weak_framework "Social" PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig b/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig index 33ec719..041274f 100644 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig @@ -1,7 +1,7 @@ CLANG_CXX_LANGUAGE_STANDARD = c++11 CLANG_CXX_LIBRARY = libc++ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" -isystem "${PODS_ROOT}/Headers/Public/Parse" -isystem "${PODS_ROOT}/Headers/Public/pop" -OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"Bolts" -l"ContextMenu.iOS" -l"Parse" -l"c++" -l"pop" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "Accounts" -weak_framework "Social" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" -isystem "${PODS_ROOT}/Headers/Public/Parse" -isystem "${PODS_ROOT}/Headers/Public/ParseUI" -isystem "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"Bolts" -l"ContextMenu.iOS" -l"Parse" -l"ParseUI" -l"c++" -l"pop" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "Foundation" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "Accounts" -weak_framework "Social" PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/pop/pop-Private.xcconfig b/BreakingBad/Pods/Target Support Files/pop/pop-Private.xcconfig index e537f3e..627f46a 100644 --- a/BreakingBad/Pods/Target Support Files/pop/pop-Private.xcconfig +++ b/BreakingBad/Pods/Target Support Files/pop/pop-Private.xcconfig @@ -2,7 +2,7 @@ CLANG_CXX_LANGUAGE_STANDARD = ${POP_CLANG_CXX_LANGUAGE_STANDARD} CLANG_CXX_LIBRARY = ${POP_CLANG_CXX_LIBRARY} GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/pop" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/pop" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/pop" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" OTHER_LDFLAGS = ${POP_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES \ No newline at end of file From 78f3f98f5cb94d5e3af1f2fac1b12030b7bf5c15 Mon Sep 17 00:00:00 2001 From: Zoufishan Mehdi Date: Fri, 16 Oct 2015 08:40:46 -0400 Subject: [PATCH 24/44] pods added --- .../Headers/Private/ParseUI/PFActionButton.h | 1 + ...FActivityIndicatorCollectionReusableView.h | 1 + .../PFActivityIndicatorTableViewCell.h | 1 + .../Private/ParseUI/PFCollectionViewCell.h | 1 + .../Pods/Headers/Private/ParseUI/PFColor.h | 1 + .../Headers/Private/ParseUI/PFDismissButton.h | 1 + .../Pods/Headers/Private/ParseUI/PFImage.h | 1 + .../Headers/Private/ParseUI/PFImageCache.h | 1 + .../Headers/Private/ParseUI/PFImageView.h | 1 + .../Headers/Private/ParseUI/PFLoadingView.h | 1 + .../Headers/Private/ParseUI/PFLocalization.h | 1 + .../Headers/Private/ParseUI/PFLogInView.h | 1 + .../Private/ParseUI/PFLogInViewController.h | 1 + .../Private/ParseUI/PFLogInView_Private.h | 1 + .../Headers/Private/ParseUI/PFPrimaryButton.h | 1 + .../ParseUI/PFProductTableViewController.h | 1 + .../Private/ParseUI/PFPurchaseTableViewCell.h | 1 + .../ParseUI/PFQueryCollectionViewController.h | 1 + .../ParseUI/PFQueryTableViewController.h | 1 + .../Pods/Headers/Private/ParseUI/PFRect.h | 1 + .../Headers/Private/ParseUI/PFResources.h | 1 + .../Headers/Private/ParseUI/PFSignUpView.h | 1 + .../Private/ParseUI/PFSignUpViewController.h | 1 + .../Headers/Private/ParseUI/PFTableViewCell.h | 1 + .../Headers/Private/ParseUI/PFTextButton.h | 1 + .../Headers/Private/ParseUI/PFTextField.h | 1 + .../Headers/Private/ParseUI/PFUIAlertView.h | 1 + .../Pods/Headers/Private/ParseUI/ParseUI.h | 1 + .../Private/ParseUI/ParseUIConstants.h | 1 + .../Public/ParseUI/PFCollectionViewCell.h | 1 + .../Pods/Headers/Public/ParseUI/PFImageView.h | 1 + .../Pods/Headers/Public/ParseUI/PFLogInView.h | 1 + .../Public/ParseUI/PFLogInViewController.h | 1 + .../Public/ParseUI/PFLogInView_Private.h | 1 + .../ParseUI/PFProductTableViewController.h | 1 + .../Public/ParseUI/PFPurchaseTableViewCell.h | 1 + .../ParseUI/PFQueryCollectionViewController.h | 1 + .../ParseUI/PFQueryTableViewController.h | 1 + .../Headers/Public/ParseUI/PFSignUpView.h | 1 + .../Public/ParseUI/PFSignUpViewController.h | 1 + .../Headers/Public/ParseUI/PFTableViewCell.h | 1 + .../Pods/Headers/Public/ParseUI/PFTextField.h | 1 + .../Pods/Headers/Public/ParseUI/ParseUI.h | 1 + .../Headers/Public/ParseUI/ParseUIConstants.h | 1 + BreakingBad/Pods/ParseUI/LICENSE | 17 + .../Classes/Cells/PFCollectionViewCell.h | 61 ++ .../Classes/Cells/PFCollectionViewCell.m | 97 +++ .../Classes/Cells/PFPurchaseTableViewCell.h | 68 ++ .../Classes/Cells/PFPurchaseTableViewCell.m | 154 +++++ .../ParseUI/Classes/Cells/PFTableViewCell.h | 46 ++ .../ParseUI/Classes/Cells/PFTableViewCell.m | 120 ++++ ...FActivityIndicatorCollectionReusableView.h | 38 ++ ...FActivityIndicatorCollectionReusableView.m | 115 ++++ .../Cells/PFActivityIndicatorTableViewCell.h | 34 + .../Cells/PFActivityIndicatorTableViewCell.m | 64 ++ .../Classes/Internal/Extensions/PFColor.h | 50 ++ .../Classes/Internal/Extensions/PFColor.m | 86 +++ .../Classes/Internal/Extensions/PFImage.h | 31 + .../Classes/Internal/Extensions/PFImage.m | 111 ++++ .../Classes/Internal/Extensions/PFRect.h | 30 + .../Classes/Internal/Extensions/PFRect.m | 48 ++ .../Internal/Extensions/PFUIAlertView.h | 34 + .../Internal/Extensions/PFUIAlertView.m | 56 ++ .../ParseUI/Classes/Internal/PFImageCache.h | 34 + .../ParseUI/Classes/Internal/PFImageCache.m | 47 ++ .../ParseUI/Classes/Internal/PFLocalization.h | 29 + .../Internal/Views/Buttons/PFActionButton.h | 65 ++ .../Internal/Views/Buttons/PFActionButton.m | 202 ++++++ .../Internal/Views/Buttons/PFDismissButton.h | 26 + .../Internal/Views/Buttons/PFDismissButton.m | 84 +++ .../Internal/Views/Buttons/PFPrimaryButton.h | 31 + .../Internal/Views/Buttons/PFPrimaryButton.m | 110 ++++ .../Internal/Views/Buttons/PFTextButton.h | 26 + .../Internal/Views/Buttons/PFTextButton.m | 53 ++ .../Classes/Internal/Views/PFLoadingView.h | 29 + .../Classes/Internal/Views/PFLoadingView.m | 80 +++ .../Classes/LogInViewController/PFLogInView.h | 172 +++++ .../Classes/LogInViewController/PFLogInView.m | 488 ++++++++++++++ .../PFLogInViewController.h | 176 +++++ .../PFLogInViewController.m | 601 ++++++++++++++++++ .../LogInViewController/PFLogInView_Private.h | 28 + .../PFProductTableViewController.h | 47 ++ .../PFProductTableViewController.m | 249 ++++++++ .../PFQueryCollectionViewController.h | 227 +++++++ .../PFQueryCollectionViewController.m | 452 +++++++++++++ .../PFQueryTableViewController.h | 259 ++++++++ .../PFQueryTableViewController.m | 585 +++++++++++++++++ .../SignUpViewController/PFSignUpView.h | 144 +++++ .../SignUpViewController/PFSignUpView.m | 319 ++++++++++ .../PFSignUpViewController.h | 160 +++++ .../PFSignUpViewController.m | 513 +++++++++++++++ .../ParseUI/Classes/Views/PFImageView.h | 77 +++ .../ParseUI/Classes/Views/PFImageView.m | 150 +++++ .../ParseUI/Classes/Views/PFTextField.h | 77 +++ .../ParseUI/Classes/Views/PFTextField.m | 120 ++++ .../ParseUI/ParseUI/Generated/PFResources.h | 13 + .../ParseUI/ParseUI/Generated/PFResources.m | 76 +++ .../Pods/ParseUI/ParseUI/Other/ParseUI.h | 34 + .../ParseUI/ParseUI/Other/ParseUIConstants.h | 76 +++ .../Localization/en.lproj/ParseUI.strings | Bin 0 -> 6528 bytes BreakingBad/Pods/ParseUI/README.md | 115 ++++ .../ParseUI/ParseUI-Private.xcconfig | 6 + .../ParseUI/ParseUI-dummy.m | 5 + .../ParseUI/ParseUI-prefix.pch | 4 + .../ParseUI/ParseUI.xcconfig | 1 + 105 files changed, 7294 insertions(+) create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFActionButton.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFActivityIndicatorCollectionReusableView.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFActivityIndicatorTableViewCell.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFCollectionViewCell.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFColor.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFDismissButton.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFImage.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFImageCache.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFImageView.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFLoadingView.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFLocalization.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFLogInView.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFLogInViewController.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFLogInView_Private.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFPrimaryButton.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFProductTableViewController.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFPurchaseTableViewCell.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFQueryCollectionViewController.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFQueryTableViewController.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFRect.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFResources.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFSignUpView.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFSignUpViewController.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFTableViewCell.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFTextButton.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFTextField.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/PFUIAlertView.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/ParseUI.h create mode 120000 BreakingBad/Pods/Headers/Private/ParseUI/ParseUIConstants.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFCollectionViewCell.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFImageView.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFLogInView.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFLogInViewController.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFLogInView_Private.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFProductTableViewController.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFPurchaseTableViewCell.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFQueryCollectionViewController.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFQueryTableViewController.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFSignUpView.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFSignUpViewController.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFTableViewCell.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/PFTextField.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/ParseUI.h create mode 120000 BreakingBad/Pods/Headers/Public/ParseUI/ParseUIConstants.h create mode 100644 BreakingBad/Pods/ParseUI/LICENSE create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFLocalization.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView_Private.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Generated/PFResources.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Generated/PFResources.m create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Other/ParseUI.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Other/ParseUIConstants.h create mode 100644 BreakingBad/Pods/ParseUI/ParseUI/Resources/Localization/en.lproj/ParseUI.strings create mode 100644 BreakingBad/Pods/ParseUI/README.md create mode 100644 BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-Private.xcconfig create mode 100644 BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-dummy.m create mode 100644 BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-prefix.pch create mode 100644 BreakingBad/Pods/Target Support Files/ParseUI/ParseUI.xcconfig diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFActionButton.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFActionButton.h new file mode 120000 index 0000000..4218e48 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFActionButton.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFActivityIndicatorCollectionReusableView.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFActivityIndicatorCollectionReusableView.h new file mode 120000 index 0000000..df46b16 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFActivityIndicatorCollectionReusableView.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFActivityIndicatorTableViewCell.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFActivityIndicatorTableViewCell.h new file mode 120000 index 0000000..50c1ce3 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFActivityIndicatorTableViewCell.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFCollectionViewCell.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFCollectionViewCell.h new file mode 120000 index 0000000..af4cf00 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFCollectionViewCell.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFColor.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFColor.h new file mode 120000 index 0000000..2042f25 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFColor.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFDismissButton.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFDismissButton.h new file mode 120000 index 0000000..a736731 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFDismissButton.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFImage.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFImage.h new file mode 120000 index 0000000..8da6b34 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFImage.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFImageCache.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFImageCache.h new file mode 120000 index 0000000..6aefcce --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFImageCache.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/PFImageCache.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFImageView.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFImageView.h new file mode 120000 index 0000000..6998b25 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFImageView.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Views/PFImageView.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFLoadingView.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFLoadingView.h new file mode 120000 index 0000000..23ffd12 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFLoadingView.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFLocalization.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFLocalization.h new file mode 120000 index 0000000..81c19f7 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFLocalization.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/PFLocalization.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFLogInView.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFLogInView.h new file mode 120000 index 0000000..03efbc7 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFLogInView.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFLogInViewController.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFLogInViewController.h new file mode 120000 index 0000000..f640f6e --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFLogInViewController.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFLogInView_Private.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFLogInView_Private.h new file mode 120000 index 0000000..5a1445a --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFLogInView_Private.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/LogInViewController/PFLogInView_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFPrimaryButton.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFPrimaryButton.h new file mode 120000 index 0000000..b3b12bf --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFPrimaryButton.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFProductTableViewController.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFProductTableViewController.h new file mode 120000 index 0000000..b59c01b --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFProductTableViewController.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFPurchaseTableViewCell.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFPurchaseTableViewCell.h new file mode 120000 index 0000000..4832020 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFPurchaseTableViewCell.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFQueryCollectionViewController.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFQueryCollectionViewController.h new file mode 120000 index 0000000..2912eff --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFQueryCollectionViewController.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFQueryTableViewController.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFQueryTableViewController.h new file mode 120000 index 0000000..e61be1d --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFQueryTableViewController.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFRect.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFRect.h new file mode 120000 index 0000000..fcab421 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFRect.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFResources.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFResources.h new file mode 120000 index 0000000..cb18b2f --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFResources.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Generated/PFResources.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFSignUpView.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFSignUpView.h new file mode 120000 index 0000000..ce44295 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFSignUpView.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFSignUpViewController.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFSignUpViewController.h new file mode 120000 index 0000000..5c962e0 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFSignUpViewController.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFTableViewCell.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFTableViewCell.h new file mode 120000 index 0000000..1f9ce36 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFTableViewCell.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Cells/PFTableViewCell.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFTextButton.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFTextButton.h new file mode 120000 index 0000000..bd398e9 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFTextButton.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFTextField.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFTextField.h new file mode 120000 index 0000000..51edbe9 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFTextField.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Views/PFTextField.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/PFUIAlertView.h b/BreakingBad/Pods/Headers/Private/ParseUI/PFUIAlertView.h new file mode 120000 index 0000000..0f32862 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/PFUIAlertView.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/ParseUI.h b/BreakingBad/Pods/Headers/Private/ParseUI/ParseUI.h new file mode 120000 index 0000000..6b5f250 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/ParseUI.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Other/ParseUI.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Private/ParseUI/ParseUIConstants.h b/BreakingBad/Pods/Headers/Private/ParseUI/ParseUIConstants.h new file mode 120000 index 0000000..58c59ff --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/ParseUI/ParseUIConstants.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Other/ParseUIConstants.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFCollectionViewCell.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFCollectionViewCell.h new file mode 120000 index 0000000..af4cf00 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFCollectionViewCell.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFImageView.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFImageView.h new file mode 120000 index 0000000..6998b25 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFImageView.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Views/PFImageView.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFLogInView.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFLogInView.h new file mode 120000 index 0000000..03efbc7 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFLogInView.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFLogInViewController.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFLogInViewController.h new file mode 120000 index 0000000..f640f6e --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFLogInViewController.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFLogInView_Private.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFLogInView_Private.h new file mode 120000 index 0000000..5a1445a --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFLogInView_Private.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/LogInViewController/PFLogInView_Private.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFProductTableViewController.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFProductTableViewController.h new file mode 120000 index 0000000..b59c01b --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFProductTableViewController.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFPurchaseTableViewCell.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFPurchaseTableViewCell.h new file mode 120000 index 0000000..4832020 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFPurchaseTableViewCell.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFQueryCollectionViewController.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFQueryCollectionViewController.h new file mode 120000 index 0000000..2912eff --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFQueryCollectionViewController.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFQueryTableViewController.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFQueryTableViewController.h new file mode 120000 index 0000000..e61be1d --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFQueryTableViewController.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFSignUpView.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFSignUpView.h new file mode 120000 index 0000000..ce44295 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFSignUpView.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFSignUpViewController.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFSignUpViewController.h new file mode 120000 index 0000000..5c962e0 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFSignUpViewController.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFTableViewCell.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFTableViewCell.h new file mode 120000 index 0000000..1f9ce36 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFTableViewCell.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Cells/PFTableViewCell.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/PFTextField.h b/BreakingBad/Pods/Headers/Public/ParseUI/PFTextField.h new file mode 120000 index 0000000..51edbe9 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/PFTextField.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Classes/Views/PFTextField.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/ParseUI.h b/BreakingBad/Pods/Headers/Public/ParseUI/ParseUI.h new file mode 120000 index 0000000..6b5f250 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/ParseUI.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Other/ParseUI.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/ParseUI/ParseUIConstants.h b/BreakingBad/Pods/Headers/Public/ParseUI/ParseUIConstants.h new file mode 120000 index 0000000..58c59ff --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/ParseUI/ParseUIConstants.h @@ -0,0 +1 @@ +../../../ParseUI/ParseUI/Other/ParseUIConstants.h \ No newline at end of file diff --git a/BreakingBad/Pods/ParseUI/LICENSE b/BreakingBad/Pods/ParseUI/LICENSE new file mode 100644 index 0000000..31425ea --- /dev/null +++ b/BreakingBad/Pods/ParseUI/LICENSE @@ -0,0 +1,17 @@ +Copyright (c) 2014, Parse, LLC. All rights reserved. + +You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +copy, modify, and distribute this software in source code or binary form for use +in connection with the web services and APIs provided by Parse. + +As with any software that integrates with the Parse platform, your use of +this software is subject to the Parse Terms of Service +[https://www.parse.com/about/terms]. This copyright 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/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.h new file mode 100644 index 0000000..71b3642 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import + +PFUI_ASSUME_NONNULL_BEGIN + +@class PFImageView; +@class PFObject; + +/*! + The `PFCollectionViewCell` class represents a collection view cell which can + download and display remote images stored on Parse as well as has a default simple text label. + */ +@interface PFCollectionViewCell : UICollectionViewCell + +/*! + @abstract A simple lazy-loaded label for the collection view cell. + */ +@property (nonatomic, strong, readonly) UILabel *textLabel; + +/*! + @abstract The lazy-loaded imageView of the collection view cell. + + @see PFImageView + */ +@property (nonatomic, strong, readonly) PFImageView *imageView; + +/*! + @abstract This method should update all the relevant information inside a subclass of `PFCollectionViewCell`. + + @discussion This method is automatically called by whenever the cell + should display new information. By default this method does nothing. + + @param object An instance of `PFObject` to update from. + */ +- (void)updateFromObject:(PFUI_NULLABLE PFObject *)object; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.m new file mode 100644 index 0000000..6fb1f46 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.m @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFCollectionViewCell.h" + +#import "PFImageView.h" +#import "PFRect.h" + +@implementation PFCollectionViewCell + +@synthesize imageView = _imageView; +@synthesize textLabel = _textLabel; + +#pragma mark - +#pragma mark UIView + +- (void)layoutSubviews { + [super layoutSubviews]; + + const CGRect bounds = self.contentView.bounds; + + CGRect imageViewFrame = CGRectZero; + if (_imageView && _imageView.image){ + imageViewFrame = PFRectMakeWithSizeCenteredInRect(PFSizeMin(_imageView.image.size, bounds.size), + bounds); + } + CGRect textLabelFrame = CGRectZero; + if (_textLabel) { + CGSize maxImageViewSize = CGSizeMake(CGRectGetWidth(bounds), CGRectGetHeight(bounds) / 3.0f * 2.0f); + CGSize imageViewSize = PFSizeMin(imageViewFrame.size, maxImageViewSize); + + imageViewFrame = PFRectMakeWithSizeCenteredInRect(imageViewSize, PFRectMakeWithSize(maxImageViewSize)); + CGFloat textLabelTopInset = (CGRectIsEmpty(imageViewFrame) ? 0.0f : CGRectGetMaxY(imageViewFrame)); + + textLabelFrame = PFRectMakeWithOriginSize(CGPointMake(0.0f, textLabelTopInset), + CGSizeMake(CGRectGetWidth(bounds), CGRectGetHeight(bounds) - textLabelTopInset)); + } + + // Adapt content mode of _imageView to fit the image in bounds if the layout frame is smaller or center if it's bigger. + if (!CGRectIsEmpty(imageViewFrame)) { + if (CGRectContainsRect(PFRectMakeWithSize(_imageView.image.size), PFRectMakeWithSize(imageViewFrame.size))) { + _imageView.contentMode = UIViewContentModeScaleAspectFit; + } else { + _imageView.contentMode = UIViewContentModeCenter; + } + } + + _imageView.frame = CGRectIntegral(imageViewFrame); + _textLabel.frame = CGRectIntegral(textLabelFrame); +} + +#pragma mark - +#pragma mark Update + +- (void)updateFromObject:(PFObject *)object { + // Do nothing +} + +#pragma mark - +#pragma mark Accessors + +- (PFImageView *)imageView { + if (!_imageView) { + _imageView = [[PFImageView alloc] initWithFrame:CGRectZero]; + [self.contentView addSubview:_imageView]; + } + return _imageView; +} + +- (UILabel *)textLabel { + if (!_textLabel) { + _textLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + _textLabel.numberOfLines = 0; + [self.contentView addSubview:_textLabel]; + } + return _textLabel; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.h new file mode 100644 index 0000000..eb80487 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import +#import + +PFUI_ASSUME_NONNULL_BEGIN + +/*! + An enum that represents states of the PFPurchaseTableViewCell. + @see PFPurchaseTableViewCell + */ +typedef NS_ENUM(uint8_t, PFPurchaseTableViewCellState) { + /*! Normal state of the cell. */ + PFPurchaseTableViewCellStateNormal = 0, + /*! Downloading state of the cell. */ + PFPurchaseTableViewCellStateDownloading, + /*! State of the cell, when the product was downloaded. */ + PFPurchaseTableViewCellStateDownloaded +}; + +/*! + `PFPurchaseTableViewCell` is a subclass that is used to show + products in a . + + @see PFProductTableViewController + */ +@interface PFPurchaseTableViewCell : PFTableViewCell + +/*! + @abstract State of the cell. + @see PFPurchaseTableViewCellState + */ +@property (nonatomic, assign) PFPurchaseTableViewCellState state; + +/*! + @abstract Label where price of the product is displayed. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UILabel *priceLabel; + +/*! + @abstract Progress view that is shown, when the product is downloading. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIProgressView *progressView; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.m new file mode 100644 index 0000000..4a7968b --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.m @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFPurchaseTableViewCell.h" + +#import "PFLocalization.h" +#import "PFRect.h" + +@interface PFPurchaseTableViewCell () + +@property (nonatomic, strong) UILabel *priceLabel; +@property (nonatomic, strong) UIProgressView *progressView; + +@end + +@implementation PFPurchaseTableViewCell + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + self.backgroundView = [[UIView alloc] initWithFrame:CGRectZero]; + + self.imageView.layer.shadowColor = [UIColor blackColor].CGColor; + self.imageView.layer.shadowOffset = CGSizeMake(0.0f, 1.0f); + self.imageView.layer.shadowRadius = 1.0f; + self.imageView.layer.shadowOpacity = 1.0f; + + self.textLabel.backgroundColor = [UIColor clearColor]; + self.detailTextLabel.backgroundColor = [UIColor clearColor]; + self.detailTextLabel.numberOfLines = 2; + self.detailTextLabel.font = [UIFont systemFontOfSize:12.0f]; + + self.priceLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + self.priceLabel.backgroundColor = [UIColor colorWithWhite:242.0f/255.0f alpha:1.0f]; + self.priceLabel.textColor = [UIColor grayColor]; + self.priceLabel.shadowColor = [UIColor whiteColor]; + self.priceLabel.shadowOffset = CGSizeMake(0.0f, -1.0f); + self.priceLabel.font = [UIFont boldSystemFontOfSize:12.0f]; + self.priceLabel.layer.borderColor = [UIColor grayColor].CGColor; + self.priceLabel.layer.borderWidth = 1.0f; + self.priceLabel.layer.cornerRadius = 3.0f; + self.priceLabel.lineBreakMode = NSLineBreakByWordWrapping; + self.priceLabel.numberOfLines = 0; + [self.contentView addSubview:self.priceLabel]; + + self.progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault]; + self.state = PFPurchaseTableViewCellStateNormal; + } + return self; +} +#pragma mark - +#pragma mark UIView + +- (void)layoutSubviews { + [super layoutSubviews]; + + const CGRect bounds = self.contentView.bounds; + + CGFloat iconWidth = floorf(0.8f * CGRectGetHeight(bounds)); + CGFloat iconMarginY = floorf((CGRectGetHeight(bounds) - iconWidth)/2.0f); + CGFloat iconMarginX = iconMarginY; + CGFloat x = iconMarginX; + CGFloat y = iconMarginY; + self.imageView.frame = CGRectMake(x, y, iconWidth, iconWidth); + x += self.imageView.frame.size.width + iconMarginX; + + self.priceLabel.frame = CGRectZero; // this is necessary for sizeToFit to work correctly + [self.priceLabel sizeToFit]; + CGFloat priceLabelRightInset = 10.0f; + CGFloat priceLabelX = CGRectGetWidth(bounds) - CGRectGetWidth(self.priceLabel.frame) - priceLabelRightInset; + CGFloat priceLabelY = floorf((CGRectGetHeight(self.textLabel.frame) - CGRectGetHeight(self.priceLabel.frame))/2.0f) + iconMarginY; + + self.priceLabel.frame = PFRectMakeWithOriginSize(CGPointMake(priceLabelX, priceLabelY), self.priceLabel.frame.size); + + CGFloat titleWidth = self.contentView.frame.size.width - self.imageView.frame.size.width - iconMarginX - 100.0f; + CGFloat titleHeight = self.textLabel.frame.size.height; + self.textLabel.frame = CGRectMake(x, y, titleWidth, titleHeight); + + CGFloat textMarginBottom = 5.0f; + y += self.textLabel.frame.size.height + textMarginBottom; + + CGFloat detailTextLabelWidth = CGRectGetWidth(bounds) - x - 50.0f; + self.detailTextLabel.frame = CGRectMake(x, y, detailTextLabelWidth, CGRectGetWidth(self.detailTextLabel.frame)); + self.progressView.frame = CGRectMake(x, CGRectGetHeight(bounds) - CGRectGetHeight(self.progressView.frame) - iconMarginY - 2.0f, + detailTextLabelWidth, CGRectGetHeight(self.progressView.frame)); +} + +#pragma mark - +#pragma mark PFPurchaseTableViewCell + +- (void)setState:(PFPurchaseTableViewCellState)state { + if (self.state == state) { + return; + } + + _state = state; + + switch (state) { + case PFPurchaseTableViewCellStateNormal: + { + self.detailTextLabel.numberOfLines = 2; + } + break; + case PFPurchaseTableViewCellStateDownloading: + { + self.detailTextLabel.numberOfLines = 1; + self.priceLabel.backgroundColor = [UIColor colorWithRed:132.0f/255.0f green:175.0f/255.0f blue:230.0f/255.0f alpha:1.0f]; + NSString *downloadingText = NSLocalizedString(@"DOWNLOADING", @"DOWNLOADING"); + self.priceLabel.text = [NSString stringWithFormat:@" %@ ", downloadingText]; + self.priceLabel.textColor = [UIColor whiteColor]; + self.priceLabel.shadowColor = [UIColor blackColor]; + self.priceLabel.shadowOffset = CGSizeMake(0.0f, -1.0f); + [self.contentView addSubview:self.progressView]; + } + break; + case PFPurchaseTableViewCellStateDownloaded: + { + self.detailTextLabel.numberOfLines = 2; + NSString *installedText = NSLocalizedString(@"INSTALLED", @"INSTALLED"); + self.priceLabel.text = [NSString stringWithFormat:@" %@ ", installedText]; + self.priceLabel.textColor = [UIColor whiteColor]; + self.priceLabel.shadowColor = [UIColor blackColor]; + self.priceLabel.shadowOffset = CGSizeMake(0.0f, -1.0f); + self.priceLabel.backgroundColor = [UIColor colorWithRed:160.0f/255.0f green:200.0f/255.0f blue:120.0f/255.0f alpha:1.0f]; + [self.progressView removeFromSuperview]; + } + break; + default: + break; + } + [self setNeedsLayout]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.h new file mode 100644 index 0000000..9238d99 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import +#import + +PFUI_ASSUME_NONNULL_BEGIN + +/*! + The `PFTableViewCell` class represents a table view cell which can download and display remote images stored on Parse. + + When used in a - downloading and displaying of the remote images + are automatically managed by the . + */ +@interface PFTableViewCell : UITableViewCell + +/*! + @abstract The imageView of the table view cell. + + @see PFImageView + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFImageView *imageView; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.m new file mode 100644 index 0000000..65f67cd --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.m @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFTableViewCell.h" + +#import "PFRect.h" + +@interface PFTableViewCell () + +@property (nonatomic, assign) UITableViewCellStyle style; +@property (nonatomic, strong) PFImageView *customImageView; + +@end + +@implementation PFTableViewCell + +#pragma mark - +#pragma mark NSObject + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + _style = style; + + _customImageView = [[PFImageView alloc] initWithFrame:CGRectZero]; + [self.contentView addSubview:_customImageView]; + } + return self; +} + +#pragma mark - +#pragma mark UIView + +- (void)layoutSubviews { + [super layoutSubviews]; + + // We cannot depend on the parent class to lay out things perfectly because + // UITableViewCell layoutSubviews use its internal imageView member rather than via + // its self.imageView property, so we need to lay out things manually + + // Don't relayout anything if there is no file/image + if (!self.imageView.file && !self.imageView.image) { + return; + } + + // Value2 ignores imageView entirely + if (self.style == UITableViewCellStyleValue2) { + return; + } + + const CGRect bounds = self.contentView.bounds; + + CGFloat imageHeight = MIN(CGRectGetWidth(bounds), CGRectGetHeight(bounds)); + CGFloat imageWidth = floorf(13.0f * imageHeight / 9.0f); // Default is 13/9 aspect ratio + _customImageView.frame = PFRectMakeWithSize(CGSizeMake(imageWidth, imageHeight)); + + CGFloat imageViewRightInset = 10.0f; + CGFloat textOrigin = CGRectGetMaxX(_customImageView.frame) + imageViewRightInset; + + CGRect textLabelFrame = self.textLabel.frame; + CGRect detailTextLabelFrame = self.detailTextLabel.frame; + + switch (self.style) { + case UITableViewCellStyleDefault: + case UITableViewCellStyleSubtitle: + { + CGFloat originalTextLabelInset = CGRectGetMinX(textLabelFrame); + CGFloat originalDetailTextLabelInset = CGRectGetMinX(detailTextLabelFrame); + + CGFloat maxTextLabelWidth = CGRectGetMaxX(bounds) - textOrigin - originalTextLabelInset; + CGFloat maxDetailTextLabelWidth = CGRectGetMaxX(bounds) - textOrigin - originalDetailTextLabelInset; + + textLabelFrame.origin.x = textOrigin; + textLabelFrame.size.width = MIN(maxTextLabelWidth, CGRectGetWidth(textLabelFrame)); + + detailTextLabelFrame.origin.x = textOrigin; + detailTextLabelFrame.size.width = MIN(maxDetailTextLabelWidth, CGRectGetWidth(detailTextLabelFrame)); + } + break; + case UITableViewCellStyleValue1: + { + CGFloat maxTextLabelWidth = CGRectGetMinX(detailTextLabelFrame) - textOrigin; + + textLabelFrame.origin.x = textOrigin; + textLabelFrame.size.width = MIN(maxTextLabelWidth, CGRectGetWidth(textLabelFrame)); + } + break; + default: + break; + } + self.textLabel.frame = textLabelFrame; + self.detailTextLabel.frame = detailTextLabelFrame; +} + +#pragma mark - +#pragma mark PFImageTableViewCell + +- (PFImageView *)imageView { + return _customImageView; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h new file mode 100644 index 0000000..91f15fa --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +/*! + The `PFActivityIndicatorCollectionReusableView` class represents a collection footer + that has a simple text label and displays UIActivityIndicatorView if property is set to `YES`. + An instance of this class is used as a default next page button inside . + */ +@interface PFActivityIndicatorCollectionReusableView : UICollectionReusableView + +@property (nonatomic, strong, readonly) UILabel *textLabel; + +@property (nonatomic, assign, getter=isAnimating) BOOL animating; + +- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents; +- (void)removeTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents; + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.m new file mode 100644 index 0000000..3385edd --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.m @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFActivityIndicatorCollectionReusableView.h" + +#import "PFRect.h" + +@interface PFActivityIndicatorCollectionReusableView () { + UIActivityIndicatorView *_activityIndicator; + UIButton *_actionButton; +} + +@end + +@implementation PFActivityIndicatorCollectionReusableView + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (!self) return nil; + + _actionButton = [UIButton buttonWithType:UIButtonTypeCustom]; + _actionButton.backgroundColor = self.backgroundColor; + [self addSubview:_actionButton]; + + _textLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + _textLabel.numberOfLines = 0; + _textLabel.textAlignment = NSTextAlignmentCenter; + [self addSubview:_textLabel]; + + _activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; + _activityIndicator.hidesWhenStopped = YES; + [self addSubview:_activityIndicator]; + + return self; +} + +#pragma mark - +#pragma mark Dealloc + +- (void)dealloc { + [self removeTarget:nil action:nil forControlEvents:UIControlEventAllEvents]; +} + +#pragma mark - +#pragma mark UIView + +- (void)setBackgroundColor:(UIColor *)backgroundColor { + [super setBackgroundColor:backgroundColor]; + _actionButton.backgroundColor = backgroundColor; +} + +- (void)layoutSubviews { + [super layoutSubviews]; + + const CGRect bounds = self.bounds; + + _actionButton.frame = bounds; + + _textLabel.frame = PFRectMakeWithSizeCenteredInRect([_textLabel sizeThatFits:bounds.size], bounds); + _activityIndicator.frame = PFRectMakeWithSizeCenteredInRect([_activityIndicator sizeThatFits:bounds.size], bounds); +} + +#pragma mark - +#pragma mark Accessors + +- (void)setAnimating:(BOOL)animating { + if (self.animating != animating) { + + if (animating) { + [_activityIndicator startAnimating]; + _textLabel.alpha = 0.0f; + } else { + [_activityIndicator stopAnimating]; + _textLabel.alpha = 1.0f; + } + } +} + +- (BOOL)isAnimating { + return [_activityIndicator isAnimating]; +} + +#pragma mark - +#pragma mark Actions + +- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents { + [_actionButton addTarget:target action:action forControlEvents:controlEvents]; +} + +- (void)removeTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents { + [_actionButton removeTarget:target action:action forControlEvents:controlEvents]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h new file mode 100644 index 0000000..fea50a7 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import + +/*! + The `PFActivityIndicatorTableViewCell` class represents a table view cell + that displays UIActivityIndicatorView as the accessory view. + */ +@interface PFActivityIndicatorTableViewCell : PFTableViewCell + +@property (nonatomic, assign, getter=isAnimating) BOOL animating; + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.m new file mode 100644 index 0000000..b825bd1 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.m @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFActivityIndicatorTableViewCell.h" + +@interface PFActivityIndicatorTableViewCell () + +@property (nonatomic, strong) UIActivityIndicatorView *activityIndicator; + +@end + +@implementation PFActivityIndicatorTableViewCell + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + _activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; + _activityIndicator.hidesWhenStopped = YES; + self.accessoryView = _activityIndicator; + } + return self; +} + +#pragma mark - +#pragma mark Accessors + +- (void)setAnimating:(BOOL)animating { + if (self.animating != animating) { + + if (animating) { + [_activityIndicator startAnimating]; + } else { + [_activityIndicator stopAnimating]; + } + } +} + +- (BOOL)isAnimating { + return [_activityIndicator isAnimating]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.h new file mode 100644 index 0000000..bcf4f10 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +@interface PFColor : UIColor + +///-------------------------------------- +/// @name Common +///-------------------------------------- + ++ (UIColor *)commonBackgroundColor; + +///-------------------------------------- +/// @name TextFields +///-------------------------------------- + ++ (UIColor *)textFieldBackgroundColor; ++ (UIColor *)textFieldTextColor; ++ (UIColor *)textFieldPlaceholderColor; ++ (UIColor *)textFieldSeparatorColor; + +///-------------------------------------- +/// @name Buttons +///-------------------------------------- + ++ (UIColor *)loginButtonBackgroundColor; ++ (UIColor *)signupButtonBackgroundColor; ++ (UIColor *)facebookButtonBackgroundColor; ++ (UIColor *)twitterButtonBackgroundColor; + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.m new file mode 100644 index 0000000..467d9ee --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.m @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFColor.h" + +@implementation PFColor + +#pragma mark - +#pragma mark Common + ++ (UIColor *)commonBackgroundColor { + return [UIColor colorWithRed:249/255.0f + green:251.0f/255.0f + blue:1.0f + alpha:1.0f]; +} + +#pragma mark - +#pragma mark TextField + ++ (UIColor *)textFieldBackgroundColor { + return [UIColor whiteColor]; +} + ++ (UIColor *)textFieldTextColor { + return [UIColor blackColor]; +} + ++ (UIColor *)textFieldPlaceholderColor { + return [UIColor colorWithWhite:194.0f/255.0f alpha:1.0f]; +} + ++ (UIColor *)textFieldSeparatorColor { + return [UIColor colorWithWhite:227.0f/255.0f alpha:1.0f]; +} + +#pragma mark - +#pragma mark Buttons + ++ (UIColor *)loginButtonBackgroundColor { + return [UIColor colorWithRed:97.0f/255.0f + green:106.f/255.0f + blue:116.0f/255.0f + alpha:1.0f]; +} + ++ (UIColor *)signupButtonBackgroundColor { + return [UIColor colorWithRed:108.0f/255.0f + green:150.0f/255.0f + blue:249.0f/255.0f + alpha:1.0f]; +} + ++ (UIColor *)facebookButtonBackgroundColor { + return [UIColor colorWithRed:58.0f/255.0f + green:89.0f/255.0f + blue:152.0f/255.0f + alpha:1.0f]; +} + ++ (UIColor *)twitterButtonBackgroundColor { + return [UIColor colorWithRed:45.0f/255.0f + green:170.0f/255.0f + blue:1.0f + alpha:1.0f]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.h new file mode 100644 index 0000000..b7d5222 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +@interface PFImage : UIImage + ++ (UIImage *)imageWithColor:(UIColor *)color; ++ (UIImage *)imageWithColor:(UIColor *)color cornerRadius:(CGFloat)cornerRadius; + ++ (UIImage *)imageNamed:(NSString *)name; + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.m new file mode 100644 index 0000000..ac01c1e --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.m @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFImage.h" + +#import "PFColor.h" +#import "PFRect.h" +#import "PFResources.h" + +@implementation PFImage + ++ (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size +{ + UIGraphicsBeginImageContext(size); + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGContextSetFillColorWithColor(context, color.CGColor); + CGContextFillRect(context, (CGRect){.size = size}); + + UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + return image; +} + ++ (UIImage *)imageWithColor:(UIColor *)color cornerRadius:(CGFloat)cornerRadius { + CGSize size = CGSizeMake(cornerRadius * 2.0f + 1.0f, cornerRadius * 2.0f + 1.0f); + + UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f); + + [color setFill]; + UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:PFRectMakeWithSize(size) cornerRadius:cornerRadius]; + [path fill]; + + UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(cornerRadius, + cornerRadius, + cornerRadius, + cornerRadius) + resizingMode:UIImageResizingModeStretch]; + + return image; +} + ++ (UIImage *)imageWithColor:(UIColor *)color { + return [self imageWithColor:color size:CGSizeMake(1.0f, 1.0f)]; +} + ++ (UIImage *)imageNamed:(NSString *)imageName { + UIImage *image = [UIImage imageNamed:imageName]; + if (image) { + // If there is an external override for the image at the given path, use it. + return image; + } + + NSString *fileExtension = [imageName pathExtension]; + NSMutableString *filenameWithoutExtension = [[imageName stringByDeletingPathExtension] mutableCopy]; + [filenameWithoutExtension replaceOccurrencesOfString:@"-\\." + withString:@"_" + options:NSRegularExpressionSearch + range:NSMakeRange(0, [filenameWithoutExtension length])]; + + NSData *data = nil; + + int imageScale = (int)ceilf([UIScreen mainScreen].scale); + while (data == nil && imageScale > 1) { + NSString *selectorName = [filenameWithoutExtension stringByAppendingFormat:@"%dx_%@", + imageScale, + fileExtension]; + SEL selector = NSSelectorFromString(selectorName); + if ([PFResources respondsToSelector:selector]) { + data = (NSData *)[PFResources performSelector:selector]; + } + if (data == nil) { + imageScale--; + } + } + if (!data) { + NSString *selectorName = [filenameWithoutExtension stringByAppendingFormat:@"_%@", fileExtension]; + SEL selector = NSSelectorFromString(selectorName); + data = (NSData *)[PFResources performSelector:selector]; + } + image = [[UIImage alloc] initWithData:data]; + + // we need to indicate to the framework that the data is already a 2x image, otherwise the framework + // stretches the image by 2x again. To do that, we drop down to CGImage layer to take advantage of + // +[UIImage imageWithCGImage:scale:orientation] + return [UIImage imageWithCGImage:image.CGImage scale:imageScale orientation:image.imageOrientation]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.h new file mode 100644 index 0000000..e6c1f05 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import +#import + +extern CGRect PFRectMakeWithOriginSize(CGPoint origin, CGSize size); +extern CGRect PFRectMakeWithOrigin(CGPoint origin); +extern CGRect PFRectMakeWithSize(CGSize size); + +extern CGRect PFRectMakeWithSizeCenteredInRect(CGSize size, CGRect rect); +extern CGSize PFSizeMin(CGSize size1, CGSize size2); diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.m new file mode 100644 index 0000000..0aeb75c --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.m @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFRect.h" + +CGRect PFRectMakeWithOriginSize(CGPoint origin, CGSize size) { + return CGRectMake(origin.x, origin.y, size.width, size.height); +} + +CGRect PFRectMakeWithOrigin(CGPoint origin) { + return PFRectMakeWithOriginSize(origin, CGSizeZero); +} + +CGRect PFRectMakeWithSize(CGSize size) { + return PFRectMakeWithOriginSize(CGPointZero, size); +} + +CGRect PFRectMakeWithSizeCenteredInRect(CGSize size, CGRect rect) { + CGPoint center = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect)); + CGPoint origin = CGPointMake(floorf(center.x - size.width / 2.0f), + floorf(center.y - size.height / 2.0f)); + return PFRectMakeWithOriginSize(origin, size); +} + +CGSize PFSizeMin(CGSize size1, CGSize size2) { + CGSize size = CGSizeZero; + size.width = MIN(size1.width, size2.width); + size.height = MIN(size1.height, size2.height); + return size; +} diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.h new file mode 100644 index 0000000..3478c95 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +@interface PFUIAlertView : UIAlertView + ++ (void)showAlertViewWithTitle:(NSString *)title + error:(NSError *)error; ++ (void)showAlertViewWithTitle:(NSString *)title + message:(NSString *)message; ++ (void)showAlertViewWithTitle:(NSString *)title + message:(NSString *)message + cancelButtonTitle:(NSString *)cancelButtonTitle; + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.m new file mode 100644 index 0000000..e958829 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.m @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFUIAlertView.h" + +#import "PFLocalization.h" + +@implementation PFUIAlertView + ++ (void)showAlertViewWithTitle:(NSString *)title error:(NSError *)error { + NSString *message = error.userInfo[@"error"]; + if (!message) { + message = [error.userInfo[@"originalError"] localizedDescription]; + } + if (!message) { + message = [error localizedDescription]; + } + [self showAlertViewWithTitle:title message:message]; +} + ++ (void)showAlertViewWithTitle:(NSString *)title message:(NSString *)message { + [self showAlertViewWithTitle:title + message:message + cancelButtonTitle:NSLocalizedString(@"OK", @"OK")]; +} + ++ (void)showAlertViewWithTitle:(NSString *)title + message:(NSString *)message + cancelButtonTitle:(NSString *)cancelButtonTitle { + UIAlertView *alertView = [[self alloc] initWithTitle:title + message:message + delegate:nil + cancelButtonTitle:cancelButtonTitle + otherButtonTitles:nil]; + [alertView show]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.h new file mode 100644 index 0000000..36c2337 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +/*! + A memory cache for UIImage, based on NSCache + */ +@interface PFImageCache : NSCache + ++ (instancetype)sharedCache; + +- (void)setImage:(UIImage *)image forURL:(NSURL *)url; +- (UIImage *)imageForURL:(NSURL *)url; + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.m new file mode 100644 index 0000000..260cd50 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.m @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFImageCache.h" + +static NSString *PFImageCacheKeyFromURL(NSURL *url) { + return [url absoluteString]; +} + +@implementation PFImageCache + ++ (instancetype)sharedCache { + static dispatch_once_t onceToken; + static PFImageCache *sharedCache; + dispatch_once(&onceToken, ^{ + sharedCache = [[self alloc] init]; + }); + return sharedCache; +} + +- (void)setImage:(UIImage *)image forURL:(NSURL *)url { + [self setObject:image forKey:PFImageCacheKeyFromURL(url)]; +} + +- (UIImage *)imageForURL:(NSURL *)url { + return [self objectForKey:PFImageCacheKeyFromURL(url)]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFLocalization.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFLocalization.h new file mode 100644 index 0000000..8477d8f --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/PFLocalization.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#ifndef ParseUI_PFLocalization_h +#define ParseUI_PFLocalization_h + +#undef NSLocalizedString +#define NSLocalizedString(key, comment) \ +[[NSBundle bundleForClass:[self class]] localizedStringForKey:key value:nil table:@"ParseUI"] + +#endif diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h new file mode 100644 index 0000000..c9772ef --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +typedef NS_ENUM(uint8_t, PFActionButtonStyle) +{ + PFActionButtonStyleNormal, + PFActionButtonStyleWide +}; + +@class PFActionButtonConfiguration; + +@interface PFActionButton : UIButton + +@property (nonatomic, assign, getter=isLoading) BOOL loading; + +@property (nonatomic, assign) PFActionButtonStyle buttonStyle; + +///-------------------------------------- +/// @name Class +///-------------------------------------- + ++ (NSString *)titleForButtonStyle:(PFActionButtonStyle)buttonStyle; + +///-------------------------------------- +/// @name Init +///-------------------------------------- + +- (instancetype)initWithConfiguration:(PFActionButtonConfiguration *)configuration + buttonStyle:(PFActionButtonStyle)buttonStyle NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE; + +@end + +@interface PFActionButtonConfiguration : NSObject + +@property (nonatomic, strong, readonly) UIColor *backgroundImageColor; +@property (nonatomic, strong, readonly) UIImage *image; + +- (instancetype)initWithBackgroundImageColor:(UIColor *)backgroundImageColor + image:(UIImage *)image NS_DESIGNATED_INITIALIZER; + +- (void)setTitle:(NSString *)title forButtonStyle:(PFActionButtonStyle)style; +- (NSString *)titleForButtonStyle:(PFActionButtonStyle)style; + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m new file mode 100644 index 0000000..f741d35 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m @@ -0,0 +1,202 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFActionButton.h" + +#import "PFImage.h" +#import "PFRect.h" + +static const UIEdgeInsets PFActionButtonContentEdgeInsets = { .top = 0.0f, .left = 12.0f, .bottom = 0.0f, .right = 0.0f }; + +@interface PFActionButton () +{ + UIActivityIndicatorView *_activityIndicatorView; +} + +@property (nonatomic, strong) PFActionButtonConfiguration *configuration; + +- (instancetype)initWithCoder:(nonnull NSCoder *)decoder NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER; + +@end + +@implementation PFActionButton + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithFrame:(CGRect)frame { + return [super initWithFrame:frame]; +} + +- (instancetype)initWithCoder:(nonnull NSCoder *)decoder { + return [super initWithCoder:decoder]; +} + +- (instancetype)initWithConfiguration:(PFActionButtonConfiguration *)configuration + buttonStyle:(PFActionButtonStyle)buttonStyle { + self = [super initWithFrame:CGRectZero]; + if (!self) return nil; + + _buttonStyle = buttonStyle; + _configuration = configuration; + + self.backgroundColor = [UIColor clearColor]; + self.titleLabel.font = [UIFont systemFontOfSize:16.0f]; + + self.contentEdgeInsets = UIEdgeInsetsZero; + self.imageEdgeInsets = UIEdgeInsetsZero; + + UIImage *backgroundImage = [PFImage imageWithColor:configuration.backgroundImageColor cornerRadius:4.0f]; + [self setBackgroundImage:backgroundImage forState:UIControlStateNormal]; + + [self setImage:configuration.image forState:UIControlStateNormal]; + + [self setTitle:[configuration titleForButtonStyle:buttonStyle] + forState:UIControlStateNormal]; + + return self; +} + +#pragma mark - +#pragma mark Layout + +- (void)layoutSubviews { + [super layoutSubviews]; + + _activityIndicatorView.center = self.imageView.center; + self.imageView.alpha = (self.loading ? 0.0f : 1.0f); +} + +- (CGSize)sizeThatFits:(CGSize)boundingSize { + CGSize size = CGSizeZero; + size.width = MAX([super sizeThatFits:boundingSize].width, boundingSize.width); + size.height = MIN(44.0f, boundingSize.height); + return size; +} + +- (CGRect)imageRectForContentRect:(CGRect)contentRect { + CGRect imageRect = PFRectMakeWithSize([self imageForState:UIControlStateNormal].size); + imageRect.origin.x = PFActionButtonContentEdgeInsets.left; + imageRect.origin.y = CGRectGetMidY(contentRect) - CGRectGetMidY(imageRect); + return imageRect; +} + +- (CGRect)titleRectForContentRect:(CGRect)contentRect { + contentRect.origin.x = CGRectGetMaxX([self imageRectForContentRect:contentRect]); + contentRect.size.width = CGRectGetWidth(self.bounds) - CGRectGetMaxX([self imageRectForContentRect:contentRect]); + + CGSize size = [super titleRectForContentRect:contentRect].size; + CGRect rect = PFRectMakeWithSizeCenteredInRect(size, contentRect); + return rect; +} + +#pragma mark - +#pragma mark Configuration + ++ (UIColor *)backgroundImageColor { + return [UIColor clearColor]; +} + ++ (NSString *)titleForButtonStyle:(PFActionButtonStyle)buttonStyle { + return nil; +} + +#pragma mark - +#pragma mark Accessors + +- (void)setLoading:(BOOL)loading { + if (self.loading != loading) { + if (loading) { + if (!_activityIndicatorView) { + _activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; + } + + [_activityIndicatorView startAnimating]; + [self addSubview:_activityIndicatorView]; + [self setNeedsLayout]; + } else { + [_activityIndicatorView stopAnimating]; + [_activityIndicatorView removeFromSuperview]; + } + + self.imageView.alpha = (loading ? 0.0f : 1.0f); + } +} + +- (BOOL)isLoading { + return [_activityIndicatorView isAnimating]; +} + +- (void)setButtonStyle:(PFActionButtonStyle)buttonStyle { + if (self.buttonStyle != buttonStyle) { + _buttonStyle = buttonStyle; + + [self setTitle:[self.configuration titleForButtonStyle:self.buttonStyle] forState:UIControlStateNormal]; + } +} + +@end + +@interface PFActionButtonConfiguration () { + NSMutableDictionary *_titlesDictionary; +} + +@property (nonatomic, strong, readwrite) UIColor *backgroundImageColor; +@property (nonatomic, strong, readwrite) UIImage *image; + +@end + +@implementation PFActionButtonConfiguration + +#pragma mark - +#pragma mark Init + +- (instancetype)init { + return [self initWithBackgroundImageColor:nil image:nil]; +} + +- (instancetype)initWithBackgroundImageColor:(UIColor *)backgroundImageColor + image:(UIImage *)image { + self = [super init]; + if (!self) return nil; + + _backgroundImageColor = backgroundImageColor; + _image = image; + + return self; +} + +#pragma mark - +#pragma mark Title + +- (void)setTitle:(NSString *)title forButtonStyle:(PFActionButtonStyle)style { + if (!_titlesDictionary) { + _titlesDictionary = [NSMutableDictionary dictionaryWithCapacity:style]; + } + _titlesDictionary[@(style)] = title; +} + +- (NSString *)titleForButtonStyle:(PFActionButtonStyle)style { + return _titlesDictionary[@(style)]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h new file mode 100644 index 0000000..c34e4db --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +@interface PFDismissButton : UIButton + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.m new file mode 100644 index 0000000..ba40367 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.m @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFDismissButton.h" + +#import "PFRect.h" + +@implementation PFDismissButton + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (!self) return nil; + + [self setImage:[self _defaultImage] forState:UIControlStateNormal]; + + return self; +} + +#pragma mark - +#pragma mark Init + +- (UIImage *)_defaultImage { + CGRect imageRect = PFRectMakeWithSize(CGSizeMake(22.0f, 22.0f)); + + UIGraphicsBeginImageContextWithOptions(imageRect.size, NO, 0.0f); + + [[UIColor colorWithRed:91.0f/255.0f green:107.0f/255.0f blue:118.0f/255.0f alpha:1.0f] setStroke]; + + UIBezierPath *path = [UIBezierPath bezierPath]; + + [path moveToPoint:CGPointZero]; + [path addLineToPoint:CGPointMake(CGRectGetMaxX(imageRect), CGRectGetMaxY(imageRect))]; + + [path moveToPoint:CGPointMake(CGRectGetMaxX(imageRect), CGRectGetMinY(imageRect))]; + [path addLineToPoint:CGPointMake(CGRectGetMinX(imageRect), CGRectGetMaxY(imageRect))]; + + path.lineWidth = 2.0f; + + [path stroke]; + + UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + return image; +} + +#pragma mark - +#pragma mark UIView + +- (CGSize)sizeThatFits:(CGSize)boundingSize { + CGSize size = CGSizeZero; + size.width = MIN(22.0f, boundingSize.width); + size.height = MIN(22.0f, boundingSize.height); + return size; +} + +- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event +{ + CGRect bigBounds = CGRectInset(self.bounds, -22.0f, -22.0f); + return CGRectContainsPoint(bigBounds, point); +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h new file mode 100644 index 0000000..8517180 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +@interface PFPrimaryButton : UIButton + +@property (nonatomic, assign, getter=isLoading) BOOL loading; + +- (instancetype)initWithBackgroundImageColor:(UIColor *)color NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE; + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.m new file mode 100644 index 0000000..5c5a076 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.m @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFPrimaryButton.h" + +#import "PFImage.h" +#import "PFRect.h" + +@interface PFPrimaryButton () +{ + UIActivityIndicatorView *_activityIndicatorView; +} + +- (instancetype)initWithCoder:(nonnull NSCoder *)decoder NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER; + +@end + +@implementation PFPrimaryButton + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithFrame:(CGRect)frame { + return [super initWithFrame:frame]; +} + +- (instancetype)initWithCoder:(nonnull NSCoder *)decoder { + return [super initWithCoder:decoder]; +} + +- (instancetype)initWithBackgroundImageColor:(UIColor *)color { + self = [super initWithFrame:CGRectZero]; + if (!self) return nil; + + [self setBackgroundImage:[PFImage imageWithColor:color] forState:UIControlStateNormal]; + + self.titleLabel.font = [UIFont systemFontOfSize:20.0f]; + self.contentVerticalAlignment = UIControlContentHorizontalAlignmentCenter; + self.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter; + + return self; +} + +#pragma mark - +#pragma mark Layout + +- (void)layoutSubviews { + [super layoutSubviews]; + + CGFloat activityIndicatorRightInset = 12.0f; + + CGRect activityIndicatorFrame = PFRectMakeWithSizeCenteredInRect(_activityIndicatorView.bounds.size, self.bounds); + activityIndicatorFrame.origin.x = (CGRectGetMinX(self.titleLabel.frame) + - CGRectGetWidth(activityIndicatorFrame) + - activityIndicatorRightInset); + _activityIndicatorView.frame = activityIndicatorFrame; +} + +- (CGSize)sizeThatFits:(CGSize)boundingSize { + CGSize size = CGSizeZero; + size.width = boundingSize.width; + size.height = MIN(56.0f, boundingSize.height); + return size; +} + +#pragma mark - +#pragma mark Accessors + +- (void)setLoading:(BOOL)loading { + if (self.loading != loading) { + if (loading) { + if (!_activityIndicatorView) { + _activityIndicatorView = [[UIActivityIndicatorView alloc] + initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; + } + + [_activityIndicatorView startAnimating]; + [self addSubview:_activityIndicatorView]; + [self setNeedsLayout]; + } else { + [_activityIndicatorView stopAnimating]; + [_activityIndicatorView removeFromSuperview]; + } + } +} + +- (BOOL)isLoading { + return [_activityIndicatorView isAnimating]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h new file mode 100644 index 0000000..75db8f2 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +@interface PFTextButton : UIButton + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.m new file mode 100644 index 0000000..9ada726 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.m @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFTextButton.h" + +@implementation PFTextButton + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (!self) return nil; + + self.titleLabel.font = [UIFont systemFontOfSize:16.0f]; + [self setTitleColor:[UIColor colorWithRed:82.0f/255.0f + green:152.0f/255.0f + blue:252.0f/255.0f + alpha:1.0f] + forState:UIControlStateNormal]; + + return self; +} + +#pragma mark - +#pragma mark UIView + +- (CGSize)sizeThatFits:(CGSize)boundingSize { + CGSize size = [super sizeThatFits:boundingSize]; + size.width = MAX(32.0f, boundingSize.width); + size.height = MIN(32.0f, boundingSize.height); + return size; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.h new file mode 100644 index 0000000..02b2a90 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +/*! + A loading view that is used to show users that data is being loaded before any data is available. + */ +@interface PFLoadingView : UIView + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.m new file mode 100644 index 0000000..a9b7688 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.m @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFLoadingView.h" + +#import "PFRect.h" +#import "PFLocalization.h" + +@interface PFLoadingView () + +@property (nonatomic, strong) UILabel *loadingLabel; +@property (nonatomic, strong) UIActivityIndicatorView *activityIndicator; + +@end + +@implementation PFLoadingView + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + _activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; + [_activityIndicator startAnimating]; + [self addSubview:_activityIndicator]; + + _loadingLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + _loadingLabel.text = NSLocalizedString(@"Loading...", @"Loading message of PFQueryTableViewController"); + _loadingLabel.backgroundColor = [UIColor clearColor]; + _loadingLabel.shadowOffset = CGSizeMake(0.0f, 1.0f); + _loadingLabel.shadowColor = [UIColor whiteColor]; + [_loadingLabel sizeToFit]; + [self addSubview:_loadingLabel]; + } + return self; +} + +#pragma mark - +#pragma mark UIView + +- (void)layoutSubviews { + [super layoutSubviews]; + + const CGRect bounds = self.bounds; + + CGFloat viewsInset = 4.0f; + CGFloat startX = floorf((CGRectGetMaxX(bounds) + - CGRectGetWidth(_loadingLabel.frame) + - CGRectGetWidth(_activityIndicator.frame) + - viewsInset) + / 2.0f); + + CGRect activityIndicatorFrame = PFRectMakeWithSizeCenteredInRect(_activityIndicator.frame.size, bounds); + activityIndicatorFrame.origin.x = startX; + _activityIndicator.frame = activityIndicatorFrame; + + CGRect loadingLabelFrame = PFRectMakeWithSizeCenteredInRect(_loadingLabel.frame.size, bounds); + loadingLabelFrame.origin.x = CGRectGetMaxX(activityIndicatorFrame) + viewsInset; + _loadingLabel.frame = loadingLabelFrame; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.h new file mode 100644 index 0000000..ee71b02 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.h @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import + +PFUI_ASSUME_NONNULL_BEGIN + +/*! + `PFLogInFields` bitmask specifies the log in elements which are enabled in the view. + + @see PFLogInViewController + @see PFLogInView + */ +typedef NS_OPTIONS(NSInteger, PFLogInFields) { + /*! No fields. */ + PFLogInFieldsNone = 0, + /*! Username and password fields. */ + PFLogInFieldsUsernameAndPassword = 1 << 0, + /*! Forgot password button. */ + PFLogInFieldsPasswordForgotten = 1 << 1, + /*! Login button. */ + PFLogInFieldsLogInButton = 1 << 2, + /*! Button to login with Facebook. */ + PFLogInFieldsFacebook = 1 << 3, + /*! Button to login with Twitter. */ + PFLogInFieldsTwitter = 1 << 4, + /*! Signup Button. */ + PFLogInFieldsSignUpButton = 1 << 5, + /*! Dismiss Button. */ + PFLogInFieldsDismissButton = 1 << 6, + + /*! Default value. Combines Username, Password, Login, Signup, Forgot Password and Dismiss buttons. */ + PFLogInFieldsDefault = (PFLogInFieldsUsernameAndPassword | + PFLogInFieldsLogInButton | + PFLogInFieldsSignUpButton | + PFLogInFieldsPasswordForgotten | + PFLogInFieldsDismissButton) +}; + +@class PFTextField; + +/*! + The `PFLogInView` class provides a standard log in interface for authenticating a . + */ +@interface PFLogInView : UIScrollView + +///-------------------------------------- +/// @name Creating Log In View +///-------------------------------------- + +/*! + @abstract Initializes the view with the specified log in elements. + + @param fields A bitmask specifying the log in elements which are enabled in the view + + @returns An initialized `PFLogInView` object or `nil` if the object couldn't be created. + + @see PFLogInFields + */ +- (instancetype)initWithFields:(PFLogInFields)fields; + +/*! + @abstract The view controller that will present this view. + + @discussion Used to lay out elements correctly when the presenting view controller has translucent elements. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, weak) UIViewController *presentingViewController; + +///-------------------------------------- +/// @name Customizing the Logo +///-------------------------------------- + +/// The logo. By default, it is the Parse logo. +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong) UIView *logo; + +///-------------------------------------- +/// @name Configure Username Behaviour +///-------------------------------------- + +/*! + @abstract If email should be used to log in, instead of username + + @discussion By default, this is set to `NO`. + */ +@property (nonatomic, assign) BOOL emailAsUsername; + +///-------------------------------------- +/// @name Log In Elements +///-------------------------------------- + +/*! + @abstract The bitmask which specifies the enabled log in elements in the view. + */ +@property (nonatomic, assign, readonly) PFLogInFields fields; + +/*! + @abstract The username text field. It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFTextField *usernameField; + +/*! + @abstract The password text field. It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFTextField *passwordField; + +/*! + @abstract The password forgotten button. It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *passwordForgottenButton; + +/*! + @abstract The log in button. It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *logInButton; + +/*! + @abstract The Facebook button. It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *facebookButton; + +/*! + @abstract The Twitter button. It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *twitterButton; + +/*! + @abstract The sign up button. It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *signUpButton; + +/*! + @abstract It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *dismissButton; + +/*! + @abstract The facebook/twitter login label. + + @deprecated This property is deprecated and will always be nil. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UILabel *externalLogInLabel __attribute__(PARSE_UI_DEPRECATED("This property is deprecated and will always be nil.")); + +/*! + @abstract The sign up label. + + @deprecated This property is deprecated and will always be nil. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UILabel *signUpLabel __attribute__(PARSE_UI_DEPRECATED("This property is deprecated and will always be nil.")); + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.m new file mode 100644 index 0000000..4aed98d --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.m @@ -0,0 +1,488 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFLogInView.h" + +#import "PFActionButton.h" +#import "PFColor.h" +#import "PFDismissButton.h" +#import "PFImage.h" +#import "PFLocalization.h" +#import "PFPrimaryButton.h" +#import "PFRect.h" +#import "PFTextButton.h" +#import "PFTextField.h" + +static NSString *const PFLogInViewDefaultLogoImageName = @"parse_logo.png"; +static NSString *const PFLogInViewDefaultFacebookButtonImageName = @"facebook_icon.png"; +static NSString *const PFLogInViewDefaultTwitterButtonImageName = @"twitter_icon.png"; + +@implementation PFLogInView + +///-------------------------------------- +#pragma mark - Class +///-------------------------------------- + ++ (PFActionButtonConfiguration *)_defaultSignUpButtonConfiguration { + PFActionButtonConfiguration *configuration = [[PFActionButtonConfiguration alloc] initWithBackgroundImageColor:[PFColor signupButtonBackgroundColor] + image:nil]; + NSString *title = NSLocalizedString(@"Sign Up", @"Sign Up"); + [configuration setTitle:title forButtonStyle:PFActionButtonStyleNormal]; + [configuration setTitle:title forButtonStyle:PFActionButtonStyleWide]; + + return configuration; +} + ++ (PFActionButtonConfiguration *)_defaultFacebookButtonConfiguration { + PFActionButtonConfiguration *configuration = [[PFActionButtonConfiguration alloc] initWithBackgroundImageColor:[PFColor facebookButtonBackgroundColor] + image:[PFImage imageNamed:PFLogInViewDefaultFacebookButtonImageName]]; + + [configuration setTitle:NSLocalizedString(@"Facebook", @"Facebook") + forButtonStyle:PFActionButtonStyleNormal]; + [configuration setTitle:NSLocalizedString(@"Log In with Facebook", @"Log In with Facebook") + + forButtonStyle:PFActionButtonStyleWide]; + + return configuration; +} + ++ (PFActionButtonConfiguration *)_defaultTwitterButtonConfiguration { + PFActionButtonConfiguration *configuration = [[PFActionButtonConfiguration alloc] initWithBackgroundImageColor:[PFColor twitterButtonBackgroundColor] + image:[PFImage imageNamed:PFLogInViewDefaultTwitterButtonImageName]]; + + [configuration setTitle:NSLocalizedString(@"Twitter", @"Twitter") + forButtonStyle:PFActionButtonStyleNormal]; + [configuration setTitle:NSLocalizedString(@"Log In with Twitter", @"Log In with Twitter") + + forButtonStyle:PFActionButtonStyleWide]; + + return configuration; +} + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)initWithFields:(PFLogInFields)otherFields { + self = [super initWithFrame:CGRectZero]; + if (!self) return nil; + + [PFLogInView _validateFields:otherFields]; + + self.opaque = YES; + self.backgroundColor = [PFColor commonBackgroundColor]; + + _fields = otherFields; + + _logo = [[UIImageView alloc] initWithImage:[PFImage imageNamed:PFLogInViewDefaultLogoImageName]]; + _logo.contentMode = UIViewContentModeScaleAspectFit; + [self addSubview:_logo]; + + [self _updateAllFields]; + + return self; +} + +///-------------------------------------- +#pragma mark - Fields +///-------------------------------------- + +- (void)_updateAllFields { + if (_fields & PFLogInFieldsDismissButton) { + if (!_dismissButton) { + _dismissButton = [[PFDismissButton alloc] initWithFrame:CGRectZero]; + [self addSubview:_dismissButton]; + } + } else { + [_dismissButton removeFromSuperview]; + _dismissButton = nil; + } + + if (_fields & PFLogInFieldsUsernameAndPassword) { + if (!_usernameField) { + _usernameField = [[PFTextField alloc] initWithFrame:CGRectZero + separatorStyle:(PFTextFieldSeparatorStyleTop | + PFTextFieldSeparatorStyleBottom)]; + _usernameField.autocorrectionType = UITextAutocorrectionTypeNo; + _usernameField.autocapitalizationType = UITextAutocapitalizationTypeNone; + _usernameField.returnKeyType = UIReturnKeyNext; + [self addSubview:_usernameField]; + [self _updateUsernameFieldStyle]; + } + + if (!_passwordField) { + _passwordField = [[PFTextField alloc] initWithFrame:CGRectZero + separatorStyle:PFTextFieldSeparatorStyleBottom]; + _passwordField.placeholder = NSLocalizedString(@"Password", @"Password"); + _passwordField.secureTextEntry = YES; + _passwordField.autocorrectionType = UITextAutocorrectionTypeNo; + _passwordField.autocapitalizationType = UITextAutocapitalizationTypeNone; + _passwordField.returnKeyType = UIReturnKeyDone; + [self addSubview:_passwordField]; + } + } else { + [_usernameField removeFromSuperview]; + _usernameField = nil; + + [_passwordField removeFromSuperview]; + _passwordField = nil; + } + + if (_fields & PFLogInFieldsSignUpButton) { + if (!_signUpButton) { + _signUpButton = [[PFActionButton alloc] initWithConfiguration:[[self class] _defaultSignUpButtonConfiguration] + buttonStyle:PFActionButtonStyleNormal]; + [self addSubview:_signUpButton]; + } + } else { + [_signUpButton removeFromSuperview]; + _signUpButton = nil; + } + + if (_fields & PFLogInFieldsPasswordForgotten) { + if (!_passwordForgottenButton) { + _passwordForgottenButton = [[PFTextButton alloc] initWithFrame:CGRectZero]; + [_passwordForgottenButton setTitle:NSLocalizedString(@"Forgot Password?", "Forgot Password?") + forState:UIControlStateNormal]; + [self addSubview:_passwordForgottenButton]; + } + } else { + [_passwordForgottenButton removeFromSuperview]; + _passwordForgottenButton = nil; + } + + if (_fields & PFLogInFieldsLogInButton) { + if (!_logInButton) { + _logInButton = [[PFPrimaryButton alloc] initWithBackgroundImageColor:[PFColor loginButtonBackgroundColor]]; + [_logInButton setTitle:NSLocalizedString(@"Log In", @"Log In") forState:UIControlStateNormal]; + [self addSubview:_logInButton]; + } + } else { + [_logInButton removeFromSuperview]; + _logInButton = nil; + } + + if (_fields & PFLogInFieldsFacebook) { + if (!_facebookButton) { + _facebookButton = [[PFActionButton alloc] initWithConfiguration:[[self class] _defaultFacebookButtonConfiguration] + buttonStyle:PFActionButtonStyleNormal]; + [self addSubview:_facebookButton]; + } + } else { + [_facebookButton removeFromSuperview]; + _facebookButton = nil; + } + + if (_fields & PFLogInFieldsTwitter) { + if (!_twitterButton) { + _twitterButton = [[PFActionButton alloc] initWithConfiguration:[[self class] _defaultTwitterButtonConfiguration] + buttonStyle:PFActionButtonStyleNormal]; + [self addSubview:_twitterButton]; + } + } else { + [_twitterButton removeFromSuperview]; + _twitterButton = nil; + } +} + +///-------------------------------------- +#pragma mark - UIView +///-------------------------------------- + +- (void)layoutSubviews { + [super layoutSubviews]; + + const CGRect bounds = PFRectMakeWithOriginSize(CGPointZero, self.bounds.size); + + if (_dismissButton) { + CGPoint origin = CGPointMake(16.0f, 16.0f); + + // In iOS 7+, if this view is presented fullscreen, it's top edge will be behind the status bar. + // This lets us move down the dismiss button a bit so that it's not covered by the status bar. + if ([self.presentingViewController respondsToSelector:@selector(topLayoutGuide)]) { + origin.y += self.presentingViewController.topLayoutGuide.length; + } + + CGRect frame = PFRectMakeWithOriginSize(origin, [_dismissButton sizeThatFits:bounds.size]); + _dismissButton.frame = frame; + } + + CGRect contentRect = PFRectMakeWithSizeCenteredInRect(PFSizeMin(bounds.size, [self _maxContentSize]), + bounds); + const CGSize contentSizeScale = [self _contentSizeScaleForContentSize:contentRect.size]; + + CGFloat socialButtonsDefaultInset = 16.0f; + UIEdgeInsets socialButtonsRectInsets = UIEdgeInsetsZero; + if (CGRectGetMinX(contentRect) <= CGRectGetMinX(bounds)) { + socialButtonsRectInsets = UIEdgeInsetsMake(0.0f, + socialButtonsDefaultInset, + 0.0f, + socialButtonsDefaultInset); + } + CGRect socialButtonsRect = UIEdgeInsetsInsetRect(contentRect, socialButtonsRectInsets); + + if (_signUpButton) { + CGSize buttonSize = [_signUpButton sizeThatFits:socialButtonsRect.size]; + [(PFActionButton *)_signUpButton setButtonStyle:PFActionButtonStyleWide]; + + CGRect frame = PFRectMakeWithSizeCenteredInRect(buttonSize, socialButtonsRect); + frame.origin.y = CGRectGetMaxY(socialButtonsRect) - CGRectGetHeight(frame) - socialButtonsRectInsets.left; + _signUpButton.frame = frame; + + contentRect.size.height = CGRectGetMinY(frame) - CGRectGetMinY(contentRect); + socialButtonsRect = UIEdgeInsetsInsetRect(contentRect, socialButtonsRectInsets); + } + + if (_facebookButton && _twitterButton) { + CGSize buttonSize = [_facebookButton sizeThatFits:socialButtonsRect.size]; + buttonSize.width = (socialButtonsRect.size.width - socialButtonsDefaultInset) / 2.0f; + + CGRect frame = PFRectMakeWithOriginSize(socialButtonsRect.origin, buttonSize); + frame.origin.y = CGRectGetMaxY(socialButtonsRect) - buttonSize.height - socialButtonsDefaultInset; + [(PFActionButton *)_facebookButton setButtonStyle:PFActionButtonStyleNormal]; + _facebookButton.frame = frame; + + frame.origin.x = CGRectGetMaxX(frame) + socialButtonsDefaultInset; + [(PFActionButton *)_twitterButton setButtonStyle:PFActionButtonStyleNormal]; + _twitterButton.frame = frame; + + contentRect.size.height = CGRectGetMinY(frame) - CGRectGetMinY(contentRect); + socialButtonsRect = UIEdgeInsetsInsetRect(contentRect, socialButtonsRectInsets); + } else if (_facebookButton) { + CGSize buttonSize = [_facebookButton sizeThatFits:socialButtonsRect.size]; + CGRect frame = PFRectMakeWithOriginSize(socialButtonsRect.origin, buttonSize); + frame.origin.y = CGRectGetMaxY(socialButtonsRect) - buttonSize.height - socialButtonsDefaultInset; + _facebookButton.frame = frame; + + [(PFActionButton *)_facebookButton setButtonStyle:PFActionButtonStyleWide]; + + contentRect.size.height = CGRectGetMinY(frame) - CGRectGetMinY(contentRect); + socialButtonsRect = UIEdgeInsetsInsetRect(contentRect, socialButtonsRectInsets); + } else if (_twitterButton) { + CGSize buttonSize = [_twitterButton sizeThatFits:socialButtonsRect.size]; + CGRect frame = PFRectMakeWithOriginSize(socialButtonsRect.origin, buttonSize); + frame.origin.y = CGRectGetMaxY(socialButtonsRect) - buttonSize.height - socialButtonsDefaultInset; + _twitterButton.frame = frame; + + [(PFActionButton *)_twitterButton setButtonStyle:PFActionButtonStyleWide]; + + contentRect.size.height = CGRectGetMinY(frame) - CGRectGetMinY(contentRect); + socialButtonsRect = UIEdgeInsetsInsetRect(contentRect, socialButtonsRectInsets); + } + + if (_signUpButton || _facebookButton || _twitterButton) { + contentRect.size.height -= socialButtonsDefaultInset; + } + + const CGRect loginContentRect = PFRectMakeWithSizeCenteredInRect([self _loginContentSizeThatFits:contentRect.size + withContentSizeScale:contentSizeScale], + contentRect); + const CGSize loginContentSize = loginContentRect.size; + CGFloat currentY = CGRectGetMinY(loginContentRect); + + if (_logo) { + CGFloat logoTopInset = (CGRectGetMinX(contentRect) > 0.0f ? 36.0f : 88.0f) * contentSizeScale.height; + CGFloat logoBottomInset = floorf(36.0f * contentSizeScale.height); + + CGFloat logoAvailableHeight = floorf(68.0f * contentSizeScale.height); + + CGSize logoSize = [_logo sizeThatFits:CGSizeMake(loginContentSize.width, logoAvailableHeight)]; + logoSize.width = MIN(loginContentSize.width, logoSize.width); + logoSize.height = MIN(logoAvailableHeight, logoSize.height); + + CGRect frame = PFRectMakeWithSizeCenteredInRect(logoSize, loginContentRect); + frame.origin.y = CGRectGetMinY(loginContentRect) + logoTopInset; + _logo.frame = CGRectIntegral(frame); + + currentY = floorf(CGRectGetMaxY(frame) + logoBottomInset); + } + + if (_usernameField) { + CGRect frame = PFRectMakeWithSizeCenteredInRect([_usernameField sizeThatFits:loginContentSize], + loginContentRect); + frame.origin.y = currentY; + _usernameField.frame = frame; + + currentY = CGRectGetMaxY(frame); + } + + if (_passwordField) { + CGRect frame = PFRectMakeWithSizeCenteredInRect([_passwordField sizeThatFits:loginContentSize], + loginContentRect); + frame.origin.y = currentY; + _passwordField.frame = frame; + + currentY = CGRectGetMaxY(frame); + } + + if (_logInButton) { + CGFloat loginButtonTopInset = floorf(24.0f * contentSizeScale.height); + + CGRect frame = PFRectMakeWithSizeCenteredInRect([_logInButton sizeThatFits:loginContentSize], loginContentRect); + frame.origin.y = currentY + loginButtonTopInset; + _logInButton.frame = frame; + + currentY = CGRectGetMaxY(frame); + } + + if (_passwordForgottenButton) { + CGFloat forgotPasswordInset = floorf(12.0f * contentSizeScale.height); + + CGSize buttonSize = [_passwordForgottenButton sizeThatFits:loginContentSize]; + CGRect frame = PFRectMakeWithSizeCenteredInRect(buttonSize, loginContentRect); + frame.origin.y = currentY + forgotPasswordInset; + _passwordForgottenButton.frame = frame; + } +} + +- (CGSize)_loginContentSizeThatFits:(CGSize)boundingSize withContentSizeScale:(CGSize)contentSizeScale { + CGSize size = boundingSize; + size.height = 0.0f; + if (_logo) { + CGFloat logoTopInset = floorf(36.0f * contentSizeScale.height); + CGFloat logoBottomInset = floorf(36.0f * contentSizeScale.height); + + CGFloat logoAvailableHeight = floorf(68.0f * contentSizeScale.height); + + CGFloat scale = MAX(contentSizeScale.width, contentSizeScale.height); + + CGSize logoSize = [_logo sizeThatFits:CGSizeMake(boundingSize.width, logoAvailableHeight)]; + logoSize.height *= scale; + logoSize.width *= scale; + + size.height += logoSize.height + logoTopInset + logoBottomInset; + } + if (_usernameField) { + CGSize fieldSize = [_usernameField sizeThatFits:boundingSize]; + size.height += fieldSize.height; + } + if (_passwordField) { + CGSize fieldSize = [_passwordField sizeThatFits:boundingSize]; + size.height += fieldSize.height; + } + if (_logInButton) { + CGFloat loginButtonTopInset = 24.0f * contentSizeScale.height; + + CGSize buttonSize = [_logInButton sizeThatFits:boundingSize]; + + size.height += buttonSize.height + loginButtonTopInset; + } + if (_passwordForgottenButton) { + CGFloat forgotPasswordInset = 12.0f * contentSizeScale.height; + + UIView *button = _signUpButton ?: _passwordForgottenButton; + CGSize buttonSize = [button sizeThatFits:boundingSize]; + + size.height += buttonSize.height + forgotPasswordInset * 2.0f; + } + size.width = floorf(size.width); + size.height = floorf(size.height); + + return size; +} + +- (CGSize)_maxContentSize { + return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? CGSizeMake(420.0f, 550.0f) : CGSizeMake(500.0f, 800.0f)); +} + +- (CGSize)_contentSizeScaleForContentSize:(CGSize)contentSize { + CGSize maxContentSize = [self _maxContentSize]; + if (maxContentSize.width < contentSize.width && + maxContentSize.height < contentSize.height) { + return CGSizeMake(1.0f, 1.0f); + } + + CGSize contentSizeScale = CGSizeMake(contentSize.width / maxContentSize.width, + contentSize.height / maxContentSize.height); + return contentSizeScale; +} + +///-------------------------------------- +#pragma mark - Accessors +///-------------------------------------- + +- (void)setFields:(PFLogInFields)fields { + if (_fields != fields) { + _fields = fields; + [self _updateAllFields]; + [self setNeedsLayout]; + } +} + +- (void)setLogo:(UIView *)logo { + if (self.logo != logo) { + [_logo removeFromSuperview]; + _logo = logo; + [self addSubview:_logo]; + + [self setNeedsLayout]; + } +} + +- (void)setEmailAsUsername:(BOOL)otherEmailAsUsername { + if (_emailAsUsername != otherEmailAsUsername) { + _emailAsUsername = otherEmailAsUsername; + + [self _updateUsernameFieldStyle]; + } +} + +///-------------------------------------- +#pragma mark - Private +///-------------------------------------- + ++ (void)_validateFields:(PFLogInFields)fields { + if (fields == PFLogInFieldsNone) { + [NSException raise:NSInvalidArgumentException + format:@"Fields must be set before initializing PFLogInView."]; + } + + if (fields & PFLogInFieldsLogInButton) { + if (!(fields & PFLogInFieldsUsernameAndPassword)) { + [NSException raise:NSInvalidArgumentException + format:@"Username and password must be enabled if done button is enabled."]; + } + } + + if (fields & PFLogInFieldsPasswordForgotten) { + if (!(fields & PFLogInFieldsUsernameAndPassword)) { + [NSException raise:NSInvalidArgumentException + format:@"Username and password must be enabled if password forgotten button is enabled."]; + } + } +} + +- (void)_updateUsernameFieldStyle { + UIKeyboardType keyboardType = UIKeyboardTypeDefault; + NSString *usernamePlaceholder = nil; + if (!_emailAsUsername) { + keyboardType = UIKeyboardTypeDefault; + usernamePlaceholder = NSLocalizedString(@"Username", @"Username"); + } else { + keyboardType = UIKeyboardTypeEmailAddress; + usernamePlaceholder = NSLocalizedString(@"Email", @"Email"); + } + + _usernameField.placeholder = usernamePlaceholder; + _usernameField.keyboardType = keyboardType; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.h new file mode 100644 index 0000000..9df9112 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.h @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import +#import + +PFUI_ASSUME_NONNULL_BEGIN + +@class PFSignUpViewController; +@class PFUser; +@protocol PFLogInViewControllerDelegate; + +/*! + The `PFLogInViewController` class presents and manages a standard authentication interface for logging in a . + */ +@interface PFLogInViewController : UIViewController + +///-------------------------------------- +/// @name Configuring Log In Elements +///-------------------------------------- + +/*! + @abstract A bitmask specifying the log in elements which are enabled in the view. + + @see PFLogInFields + */ +@property (nonatomic, assign) PFLogInFields fields; + + +/*! + @abstract The log in view. It contains all the enabled log in elements. + + @see PFLogInView + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFLogInView *logInView; + +///-------------------------------------- +/// @name Configuring Log In Behaviors +///-------------------------------------- + +/*! + @abstract The delegate that responds to the control events of `PFLogInViewController`. + + @see PFLogInViewControllerDelegate + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, weak) id delegate; + +/*! + @abstract The facebook permissions that Facebook log in requests for. + + @discussion If unspecified, the default is basic facebook permissions. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, copy) NSArray *facebookPermissions; + +/*! + @abstract The sign up controller if sign up is enabled. + + @discussion Use this to configure the sign up view, and the transition animation to the sign up view. + The default is a sign up view with a username, a password, a dismiss button and a sign up button. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong) PFSignUpViewController *signUpController; + +/*! + @abstract Whether to prompt for the email as username on the login view. + + @discussion If set to `YES`, we'll prompt for the email in the username field. + This property value propagates to the attached . + By default, this is set to `NO`. + */ +@property (nonatomic, assign) BOOL emailAsUsername; + +@end + +///-------------------------------------- +/// @name Notifications +///-------------------------------------- + +/*! + @abstract The notification is posted immediately after the log in succeeds. + */ +extern NSString *const PFLogInSuccessNotification; + +/*! + @abstract The notification is posted immediately after the log in fails. + @discussion If the delegate prevents the log in from starting, the notification is not sent. + */ +extern NSString *const PFLogInFailureNotification; + +/*! + @abstract The notification is posted immediately after the log in is cancelled. + */ +extern NSString *const PFLogInCancelNotification; + +///-------------------------------------- +/// @name PFLogInViewControllerDelegate +///-------------------------------------- + +/*! + The `PFLogInViewControllerDelegate` protocol defines methods a delegate of a should implement. + All methods of this protocol are optional. + */ +@protocol PFLogInViewControllerDelegate + +@optional + +///-------------------------------------- +/// @name Customizing Behavior +///-------------------------------------- + +/*! + @abstract Sent to the delegate to determine whether the log in request should be submitted to the server. + + @param logInController The login view controller that is requesting the data. + @param username the username the user tries to log in with. + @param password the password the user tries to log in with. + + @returns A `BOOL` indicating whether the log in should proceed. + */ +- (BOOL)logInViewController:(PFLogInViewController *)logInController +shouldBeginLogInWithUsername:(NSString *)username + password:(NSString *)password; + +///-------------------------------------- +/// @name Responding to Actions +///-------------------------------------- + +/*! + @abstract Sent to the delegate when a is logged in. + + @param logInController The login view controller where login finished. + @param user object that is a result of the login. + */ +- (void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user; + +/*! + @abstract Sent to the delegate when the log in attempt fails. + + @discussion If you implement this method, PFLoginViewController will not automatically show its default + login failure alert view. Instead, you should show your custom alert view in your implementation. + + @param logInController The login view controller where login failed. + @param error `NSError` object representing the error that occured. + */ +- (void)logInViewController:(PFLogInViewController *)logInController + didFailToLogInWithError:(PFUI_NULLABLE NSError *)error; + +/*! + @abstract Sent to the delegate when the log in screen is cancelled. + + @param logInController The login view controller where login was cancelled. + */ +- (void)logInViewControllerDidCancelLogIn:(PFLogInViewController *)logInController; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.m new file mode 100644 index 0000000..a6dceae --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.m @@ -0,0 +1,601 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFLogInViewController.h" + +#import + +#import "PFActionButton.h" +#import "PFUIAlertView.h" +#import "PFLocalization.h" +#import "PFPrimaryButton.h" +#import "PFSignUpViewController.h" +#import "PFTextField.h" +#import "PFLogInView_Private.h" + +NSString *const PFLogInSuccessNotification = @"com.parse.ui.login.success"; +NSString *const PFLogInFailureNotification = @"com.parse.ui.login.failure"; +NSString *const PFLogInCancelNotification = @"com.parse.ui.login.cancel"; + +/*! + This protocol exists so that we can weakly refer to messages to pass to PFFacebookUtils without + actually taking a dependency on the symbols. + */ +@protocol WeaklyReferencedFBUtils + +// FBSDKv3 ++ (void)logInWithPermissions:(NSArray *)permissions block:(PFUserResultBlock)block; +// FBSDKv4 ++ (void)logInInBackgroundWithReadPermissions:(NSArray *)permissions block:(PFUserResultBlock)block; ++ (void)logInInBackgroundWithPublishPermissions:(NSArray *)permissions block:(PFUserResultBlock)block; + +@end + +@protocol WeaklyReferenceTwitterUtils + ++ (void)logInWithBlock:(PFUserResultBlock)block; + +@end + +@interface PFLogInViewController () { + struct { + BOOL shouldBeginLogIn : YES; + BOOL didLogInUser : YES; + BOOL didFailToLogIn : YES; + BOOL didCancelLogIn : YES; + } _delegateExistingMethods; +} + +@property (nonatomic, strong, readwrite) PFLogInView *logInView; +@property (nonatomic, assign) BOOL loading; + +@property (nonatomic, assign) CGFloat visibleKeyboardHeight; + +@end + +@implementation PFLogInViewController + +///-------------------------------------- +#pragma mark - Init +///-------------------------------------- + +- (instancetype)init { + if (self = [super init]) { + [self _commonInit]; + } + return self; +} + +- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { + [self _commonInit]; + } + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder { + if (self = [super initWithCoder:decoder]) { + [self _commonInit]; + } + return self; +} + +- (void)_commonInit { + self.modalTransitionStyle = UIModalTransitionStyleCoverVertical; + self.modalPresentationStyle = UIModalPresentationFormSheet; + _fields = PFLogInFieldsDefault; + + if ([self respondsToSelector:@selector(automaticallyAdjustsScrollViewInsets)]) { + self.automaticallyAdjustsScrollViewInsets = NO; + } +} + +///-------------------------------------- +#pragma mark - Dealloc +///-------------------------------------- + +- (void)dealloc { + // Unregister from all notifications + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +///-------------------------------------- +#pragma mark - UIViewController +///-------------------------------------- + +- (void)loadView { + _logInView = [[PFLogInView alloc] initWithFields:_fields]; + [_logInView setPresentingViewController:self]; + self.view = _logInView; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self setupHandlers]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + [self _registerForKeyboardNotifications]; + + if (self.navigationController && + self.fields & PFLogInFieldsDismissButton) { + self.fields = self.fields & ~PFLogInFieldsDismissButton; + + [_logInView.dismissButton removeFromSuperview]; + } +} + +- (UIInterfaceOrientationMask)supportedInterfaceOrientations { + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + return UIInterfaceOrientationMaskAll; + } + + return UIInterfaceOrientationMaskPortrait; +} + +///-------------------------------------- +#pragma mark - PFLogInViewController +///-------------------------------------- + +- (PFLogInView *)logInView { + return (PFLogInView *)self.view; // self.view will call loadView if the view is nil +} + +- (void)setEmailAsUsername:(BOOL)otherEmailAsUsername { + self.logInView.emailAsUsername = otherEmailAsUsername; +} + +- (BOOL)emailAsUsername { + return self.logInView.emailAsUsername; +} + +- (void)setFields:(PFLogInFields)fields { + if (_fields != fields) { + _fields = fields; + + // Avoid force loading logInView + if (_logInView) { + _logInView.fields = fields; + } + } +} + +- (void)setDelegate:(id)delegate { + if (self.delegate != delegate) { + _delegate = delegate; + + _delegateExistingMethods.shouldBeginLogIn = [delegate respondsToSelector:@selector(logInViewController: + shouldBeginLogInWithUsername: + password:)]; + _delegateExistingMethods.didLogInUser = [delegate respondsToSelector:@selector(logInViewController: + didLogInUser:)]; + _delegateExistingMethods.didFailToLogIn = [delegate respondsToSelector:@selector(logInViewController: + didFailToLogInWithError:)]; + _delegateExistingMethods.didCancelLogIn = [delegate + respondsToSelector:@selector(logInViewControllerDidCancelLogIn:)]; + } +} + +- (PFSignUpViewController *)signUpController { + if (!_signUpController) { + _signUpController = [[PFSignUpViewController alloc] init]; + _signUpController.modalTransitionStyle = UIModalTransitionStyleCoverVertical; + _signUpController.emailAsUsername = self.emailAsUsername; + } + return _signUpController; +} + +- (void)setLoading:(BOOL)loading { + if (self.loading != loading) { + _loading = loading; + + _logInView.usernameField.enabled = !self.loading; + _logInView.passwordField.enabled = !self.loading; + _logInView.passwordForgottenButton.enabled = !self.loading; + _logInView.dismissButton.enabled = !self.loading; + } +} + +///-------------------------------------- +#pragma mark - UITextFieldDelegate +///-------------------------------------- + +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + if (textField == _logInView.usernameField) { + [_logInView.passwordField becomeFirstResponder]; + } + if (textField == _logInView.passwordField) { + [self _dismissKeyboard]; + [self _loginAction]; + } + + return YES; +} + +///-------------------------------------- +#pragma mark - UIAlertViewDelegate +///-------------------------------------- + +- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex { + if (buttonIndex != [alertView cancelButtonIndex]) { + NSString *email = [alertView textFieldAtIndex:0].text; + [self _requestPasswordResetWithEmail:email]; + } +} + +///-------------------------------------- +#pragma mark - Private +///-------------------------------------- + +- (void)setupHandlers { + [_logInView.dismissButton addTarget:self + action:@selector(_dismissAction) + forControlEvents:UIControlEventTouchUpInside]; + + _logInView.usernameField.delegate = self; + _logInView.passwordField.delegate = self; + [_logInView.logInButton addTarget:self action:@selector(_loginAction) forControlEvents:UIControlEventTouchUpInside]; + [_logInView.passwordForgottenButton addTarget:self + action:@selector(_forgotPasswordAction) + forControlEvents:UIControlEventTouchUpInside]; + + [_logInView.facebookButton addTarget:self + action:@selector(_loginWithFacebook) + forControlEvents:UIControlEventTouchUpInside]; + [_logInView.twitterButton addTarget:self + action:@selector(_loginWithTwitter) + forControlEvents:UIControlEventTouchUpInside]; + + [_logInView.signUpButton addTarget:self + action:@selector(_signupAction) + forControlEvents:UIControlEventTouchUpInside]; + + UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self + action:@selector(_dismissKeyboard)]; + [_logInView addGestureRecognizer:gestureRecognizer]; + gestureRecognizer.cancelsTouchesInView = NO; +} + +- (void)_dismissAction { + [self cancelLogIn]; + + // Normally the role of dismissing a modal controller lies on the presenting controller. + // Here we violate the principle so that the presenting modal log in controller is especially easy. + // Cons of this design is that it makes working with non-modally presented log in controller hard; + // but this concern is mitigated by the fact that navigationally presented controller should not have + // dismiss button. + [self dismissViewControllerAnimated:YES completion:nil]; +} + +- (void)_forgotPasswordAction PF_EXTENSION_UNAVAILABLE("") { + NSString *title = NSLocalizedString(@"Reset Password", @"Forgot password request title in PFLogInViewController"); + NSString *message = NSLocalizedString(@"Please enter the email address for your account.", + @"Email request message in PFLogInViewController"); + UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title + message:message + delegate:self + cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel") + otherButtonTitles:NSLocalizedString(@"OK", @"OK"), nil]; + alertView.alertViewStyle = UIAlertViewStylePlainTextInput; + + UITextField *textField = [alertView textFieldAtIndex:0]; + textField.placeholder = NSLocalizedString(@"Email", @"Email"); + textField.keyboardType = UIKeyboardTypeEmailAddress; + textField.returnKeyType = UIReturnKeyDone; + + [alertView show]; +} + +- (void)_requestPasswordResetWithEmail:(NSString *)email { + [PFUser requestPasswordResetForEmailInBackground:email block:^(BOOL success, NSError *error) { + if (success) { + NSString *title = NSLocalizedString(@"Password Reset", + @"Password reset success alert title in PFLogInViewController."); + NSString *message = [NSString stringWithFormat:NSLocalizedString(@"An email with reset instructions has been sent to '%@'.", + @"Password reset message in PFLogInViewController"), email]; + [PFUIAlertView showAlertViewWithTitle:title + message:message + cancelButtonTitle:NSLocalizedString(@"OK", @"OK")]; + } else { + NSString *title = NSLocalizedString(@"Password Reset Failed", + @"Password reset error alert title in PFLogInViewController."); + [PFUIAlertView showAlertViewWithTitle:title error:error]; + } + }]; +} + +#pragma mark Log In With Facebook + +- (void)_loginWithFacebook { + if (self.loading) { + return; + } + + self.loading = YES; + if ([_logInView.facebookButton isKindOfClass:[PFActionButton class]]) { + [(PFActionButton *)_logInView.facebookButton setLoading:YES]; + } + + __weak typeof(self) wself = self; + PFUserResultBlock resultBlock = ^(PFUser *user, NSError *error) { + __strong typeof(wself) sself = wself; + sself.loading = NO; + if ([_logInView.facebookButton isKindOfClass:[PFActionButton class]]) { + [(PFActionButton *)_logInView.facebookButton setLoading:NO]; + } + + if (user) { + [sself _loginDidSucceedWithUser:user]; + } else if (error) { + [sself _loginDidFailWithError:error]; + } else { + // User cancelled login. + } + }; + + Class fbUtils = NSClassFromString(@"PFFacebookUtils"); + if ([fbUtils respondsToSelector:@selector(logInWithPermissions:block:)]) { + // Facebook SDK v3 Login + [fbUtils logInWithPermissions:_facebookPermissions block:resultBlock]; + } else if ([fbUtils respondsToSelector:@selector(logInInBackgroundWithReadPermissions:block:)]) { + // Facebook SDK v4 Login + if ([self _permissionsContainsFacebookPublishPermission:_facebookPermissions]) { + [fbUtils logInInBackgroundWithPublishPermissions:_facebookPermissions block:resultBlock]; + } else { + [fbUtils logInInBackgroundWithReadPermissions:_facebookPermissions block:resultBlock]; + } + } else { + [NSException raise:NSInternalInconsistencyException + format:@"Can't find PFFacebookUtils. Please link with ParseFacebookUtils or ParseFacebookUtilsV4 to enable login with Facebook."]; + } +} + +- (BOOL)_permissionsContainsFacebookPublishPermission:(NSArray *)permissions { + for (NSString *permission in permissions) { + if ([permission hasPrefix:@"publish"] || + [permission hasPrefix:@"manage"] || + [permission isEqualToString:@"ads_management"] || + [permission isEqualToString:@"create_event"] || + [permission isEqualToString:@"rsvp_event"]) { + return YES; + } + } + return NO; +} + +#pragma mark Log In With Twitter + +- (void)_loginWithTwitter { + if (self.loading) { + return; + } + + if ([_logInView.facebookButton isKindOfClass:[PFActionButton class]]) { + [(PFActionButton *)_logInView.twitterButton setLoading:YES]; + } + self.loading = YES; + + Class twitterUtils = NSClassFromString(@"PFTwitterUtils"); + if (twitterUtils && [twitterUtils respondsToSelector:@selector(logInWithBlock:)]) { + [twitterUtils logInWithBlock:^(PFUser *user, NSError *error) { + self.loading = NO; + if ([_logInView.facebookButton isKindOfClass:[PFActionButton class]]) { + [(PFActionButton *)_logInView.twitterButton setLoading:NO]; + } + + if (user) { + [self _loginDidSucceedWithUser:user]; + } else if (error) { + [self _loginDidFailWithError:error]; + } else { + // User cancelled login. + } + }]; + } else { + [NSException raise:NSInternalInconsistencyException + format:@"Can't find PFTwitterUtils. Please link with ParseTwitterUtils to enable login with Twitter."]; + } +} + +#pragma mark Log In + +- (void)_loginAction { + if (self.loading) { + return; + } + + NSString *username = _logInView.usernameField.text ?: @""; + NSString *password = _logInView.passwordField.text ?: @""; + + if (_delegateExistingMethods.shouldBeginLogIn) { + if (![_delegate logInViewController:self shouldBeginLogInWithUsername:username password:password]) { + return; + } + } + + self.loading = YES; + if ([_logInView.logInButton isKindOfClass:[PFPrimaryButton class]]) { + [(PFActionButton *)_logInView.logInButton setLoading:YES]; + } + + [PFUser logInWithUsernameInBackground:username password:password block:^(PFUser *user, NSError *error) { + self.loading = NO; + if ([_logInView.logInButton isKindOfClass:[PFPrimaryButton class]]) { + [(PFPrimaryButton *)_logInView.logInButton setLoading:NO]; + } + + if (user) { + [self _loginDidSucceedWithUser:user]; + } else { + [self _loginDidFailWithError:error]; + } + }]; +} + +- (void)_signupAction { + if (self.loading) { + return; + } + [self presentViewController:self.signUpController animated:YES completion:nil]; +} + +- (void)_loginDidSucceedWithUser:(PFUser *)user { + if (_delegateExistingMethods.didLogInUser) { + [_delegate logInViewController:self didLogInUser:user]; + } + [[NSNotificationCenter defaultCenter] postNotificationName:PFLogInSuccessNotification object:self]; +} + +- (void)_loginDidFailWithError:(NSError *)error { + if (_delegateExistingMethods.didFailToLogIn) { + [_delegate logInViewController:self didFailToLogInWithError:error]; + } else { + NSString *title = NSLocalizedString(@"Login Failed", @"Login failed alert title in PFLogInViewController"); + NSString *message = nil; + if (error.code == kPFErrorObjectNotFound) { + message = NSLocalizedString(@"The username and password you entered don't match", @"Invalid login credentials alert message in PFLogInViewController"); + } else { + message = NSLocalizedString(@"Please try again", @"Generic login failed alert message in PFLogInViewController"); + } + [PFUIAlertView showAlertViewWithTitle:title message:message]; + } + [[NSNotificationCenter defaultCenter] postNotificationName:PFLogInFailureNotification object:self]; +} + +- (void)cancelLogIn { + if (_delegateExistingMethods.didCancelLogIn) { + [_delegate logInViewControllerDidCancelLogIn:self]; + } + [[NSNotificationCenter defaultCenter] postNotificationName:PFLogInCancelNotification object:self]; +} + +///-------------------------------------- +#pragma mark - Keyboard +///-------------------------------------- + +- (UIView *)currentFirstResponder { + if ([_logInView.usernameField isFirstResponder]) { + return _logInView.usernameField; + } + if ([_logInView.passwordField isFirstResponder]) { + return _logInView.passwordField; + } + return nil; +} + +- (void)_dismissKeyboard { + [self.view endEditing:YES]; +} + +- (void)_registerForKeyboardNotifications { + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(_keyboardWillShow:) + name:UIKeyboardWillShowNotification + object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(_keyboardWillHide:) + name:UIKeyboardWillHideNotification + object:nil]; +} + +- (void)_keyboardWillShow:(NSNotification *)notification { + NSDictionary *userInfo = [notification userInfo]; + CGRect endFrame = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; + CGFloat duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]; + UIViewAnimationCurve curve = [userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]; + + CGRect keyboardFrame = [self.view convertRect:endFrame fromView:self.view.window]; + CGFloat visibleKeyboardHeight = CGRectGetMaxY(self.view.bounds) - CGRectGetMinY(keyboardFrame); + + [self setVisibleKeyboardHeight:visibleKeyboardHeight + animationDuration:duration + animationOptions:curve << 16]; +} + +- (void)_keyboardWillHide:(NSNotification *)notification { + NSDictionary *userInfo = [notification userInfo]; + CGFloat duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]; + UIViewAnimationCurve curve = [userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]; + [self setVisibleKeyboardHeight:0.0 + animationDuration:duration + animationOptions:curve << 16]; +} + +- (void)setVisibleKeyboardHeight:(CGFloat)visibleKeyboardHeight + animationDuration:(NSTimeInterval)animationDuration + animationOptions:(UIViewAnimationOptions)animationOptions { + + dispatch_block_t animationsBlock = ^{ + self.visibleKeyboardHeight = visibleKeyboardHeight; + }; + + if (animationDuration == 0.0) { + animationsBlock(); + } else { + [UIView animateWithDuration:animationDuration + delay:0.0 + options:animationOptions | UIViewAnimationOptionBeginFromCurrentState + animations:animationsBlock + completion:nil]; + } +} + +- (void)setVisibleKeyboardHeight:(CGFloat)visibleKeyboardHeight { + if (self.visibleKeyboardHeight != visibleKeyboardHeight) { + _visibleKeyboardHeight = visibleKeyboardHeight; + [self _updateViewContentOffsetAnimated:NO]; + } +} + +- (void)_updateViewContentOffsetAnimated:(BOOL)animated { + CGPoint contentOffset = CGPointZero; + if (self.visibleKeyboardHeight > 0.0f) { + // Scroll the view to keep fields visible + CGFloat offsetForScrollingTextFieldToTop = CGRectGetMinY([self currentFirstResponder].frame); + + UIView *lowestView; + if (_logInView.passwordForgottenButton) { + lowestView = _logInView.passwordForgottenButton; + } else if (_logInView.logInButton) { + lowestView = _logInView.logInButton; + } else { + lowestView = _logInView.passwordField; + } + + CGFloat offsetForScrollingLowestViewToBottom = 0.0f; + offsetForScrollingLowestViewToBottom += self.visibleKeyboardHeight; + offsetForScrollingLowestViewToBottom += CGRectGetMaxY(lowestView.frame); + offsetForScrollingLowestViewToBottom -= CGRectGetHeight(_logInView.bounds); + + if (offsetForScrollingLowestViewToBottom < 0) { + return; // No scrolling required + } + + contentOffset = CGPointMake(0.0f, MIN(offsetForScrollingTextFieldToTop, offsetForScrollingLowestViewToBottom)); + } + + [_logInView setContentOffset:contentOffset animated:animated]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView_Private.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView_Private.h new file mode 100644 index 0000000..7069832 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView_Private.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +@interface PFLogInView (Private) + +@property (nonatomic, assign, readwrite) PFLogInFields fields; + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h new file mode 100644 index 0000000..fa5ce55 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import +#import + +PFUI_ASSUME_NONNULL_BEGIN + +/*! + `PFProductTableViewController` displays in-app purchase products stored on Parse. + In addition to setting up in-app purchases in iTunes Connect, the app developer needs + to register product information on Parse, in the Product class. + */ +@interface PFProductTableViewController : PFQueryTableViewController + +/*! + @abstract Initializes a product table view controller. + + @param style The UITableViewStyle for the table + + @returns An initialized `PFProductTableViewController` object or `nil` if the object couldn't be created. + */ +- (instancetype)initWithStyle:(UITableViewStyle)style NS_DESIGNATED_INITIALIZER; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m new file mode 100644 index 0000000..34da3ca --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m @@ -0,0 +1,249 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFProductTableViewController.h" + +#import +#import +#import + +#import "PFUIAlertView.h" +#import "PFLocalization.h" +#import "PFPurchaseTableViewCell.h" + +static NSString *const PFProductMetadataPriceKey = @"price"; +static NSString *const PFProductMetadataPriceLocaleKey = @"priceLocale"; + +@interface PFProductTableViewController () { + NSMutableDictionary *_productMetadataDictionary; + NSMutableDictionary *_productProgressDictionary; + + SKProductsRequest *_storeProductsRequest; +} + +@end + +@implementation PFProductTableViewController + +#pragma mark - +#pragma mark NSObject + +- (instancetype)initWithStyle:(UITableViewStyle)style { + if (self = [super initWithStyle:UITableViewStylePlain className:[PFProduct parseClassName]]) { + self.pullToRefreshEnabled = NO; + self.paginationEnabled = NO; + + _productMetadataDictionary = [NSMutableDictionary dictionary]; + _productProgressDictionary = [NSMutableDictionary dictionary]; + } + return self; +} + +- (instancetype)initWithStyle:(UITableViewStyle)style className:(NSString *)className { + return [self initWithStyle:style]; +} + +#pragma mark - +#pragma mark UIViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.tableView.rowHeight = 84.0f; +} + +- (void)objectsDidLoad:(NSError *)error { + [super objectsDidLoad:error]; + if (error) { + return; + } + + [self.objects enumerateObjectsUsingBlock:^(PFProduct *product, NSUInteger idx, BOOL *stop) { + // No download for this product - just continue + if (!product.downloadName) { + return; + } + + [PFPurchase addObserverForProduct:product.productIdentifier block:^(SKPaymentTransaction *transaction) { + NSIndexPath *indexPath = [NSIndexPath indexPathForRow:idx inSection:0]; + PFPurchaseTableViewCell *cell = (PFPurchaseTableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath]; + + cell.state = PFPurchaseTableViewCellStateDownloading; + [PFPurchase downloadAssetForTransaction:transaction + completion:^(NSString *filePath, NSError *downloadError) { + if (!downloadError) { + cell.state = PFPurchaseTableViewCellStateDownloaded; + } else { + cell.state = PFPurchaseTableViewCellStateNormal; + + NSString *title = NSLocalizedString(@"Download Error", + @"Download Error"); + [PFUIAlertView showAlertViewWithTitle:title error:downloadError]; + } + } + progress:^(int percentDone) { + _productProgressDictionary[product.productIdentifier] = @(percentDone); + [cell.progressView setProgress:percentDone/100.0f animated:YES]; + }]; + }]; + }]; +} + +#pragma mark - +#pragma mark UITableViewDataSource + +- (UITableViewCell *)tableView:(UITableView *)tableView + cellForRowAtIndexPath:(NSIndexPath *)indexPath + object:(PFProduct *)product { + static NSString *cellIdentifier = @"PFPurchaseTableViewCell"; + + PFPurchaseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; + if (!cell) { + cell = [[PFPurchaseTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle + reuseIdentifier:cellIdentifier]; + } + + if (indexPath.row % 2 == 0) { + cell.backgroundView.backgroundColor = [UIColor colorWithWhite:242.0f/255.0f alpha:1.0f]; + cell.textLabel.shadowOffset = CGSizeZero; + cell.textLabel.shadowColor = [UIColor whiteColor]; + cell.priceLabel.shadowOffset = CGSizeZero; + cell.priceLabel.shadowColor = [UIColor whiteColor]; + + } else { + cell.backgroundView.backgroundColor = [UIColor colorWithWhite:232.0f/255.0f alpha:1.0f]; + cell.textLabel.shadowOffset = CGSizeMake(0.0f, 1.0f); + cell.textLabel.shadowColor = [UIColor whiteColor]; + cell.priceLabel.shadowOffset = CGSizeMake(0.0f, 1.0f); + cell.priceLabel.shadowColor = [UIColor whiteColor]; + } + + cell.imageView.file = product.icon; + cell.textLabel.text = product.title; + cell.detailTextLabel.text = product.subtitle; + + NSString *price = [self _priceForProduct:product]; + if (price) { + cell.priceLabel.text = [NSString stringWithFormat:@" $%@ ", price]; + } + + if (product.downloadName) { + NSString *contentPath = [PFPurchase assetContentPathForProduct:product]; + if (contentPath) { + cell.state = PFPurchaseTableViewCellStateDownloaded; + } + } else { + int progress = [self _downloadProgressForProduct:product]; + if (progress == 0) { + cell.state = PFPurchaseTableViewCellStateNormal; + } else if (progress == 100) { + cell.state = PFPurchaseTableViewCellStateDownloaded; + } else { + cell.state = PFPurchaseTableViewCellStateDownloading; + } + } + + return cell; +} + +#pragma mark - +#pragma mark UITableViewDelegate + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + if (indexPath.row < self.objects.count) { + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + + PFProduct *product = self.objects[indexPath.row]; + [PFPurchase buyProduct:product.productIdentifier block:^(NSError *error) { + if (error) { + NSString *title = NSLocalizedString(@"Purchase Error", @"Purchase Error"); + [PFUIAlertView showAlertViewWithTitle:title error:error]; + } + }]; + } +} + +#pragma mark - +#pragma mark Data + +- (NSString *)_priceForProduct:(PFProduct *)product { + return _productMetadataDictionary[product.productIdentifier][PFProductMetadataPriceKey]; +} + +- (int)_downloadProgressForProduct:(PFProduct *)product { + return [_productProgressDictionary[product.productIdentifier] intValue]; +} + +#pragma mark - +#pragma mark PFQueryTableViewController + +- (PFQuery *)queryForTable { + PFQuery *query = [super queryForTable]; + [query orderByAscending:@"order"]; + return query; +} + +#pragma mark - +#pragma mark Querying Store + +- (void)_queryStoreForProductsWithIdentifiers:(NSSet *)identifiers { + _storeProductsRequest.delegate = nil; + _storeProductsRequest = nil; + + _storeProductsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:identifiers]; + _storeProductsRequest.delegate = self; + [_storeProductsRequest start]; +} + +#pragma mark - +#pragma mark SKProductsRequestDelegate + +- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { + if (request != _storeProductsRequest) { + return; + } + + NSArray *validProducts = response.products; + if ([validProducts count] == 0) { + return; + } + + [validProducts enumerateObjectsUsingBlock:^(SKProduct *product, NSUInteger idx, BOOL *stop) { + NSDictionary *metadata = @{ PFProductMetadataPriceKey : product.price, + PFProductMetadataPriceLocaleKey : product.priceLocale }; + _productMetadataDictionary[product.productIdentifier] = metadata; + }]; + [self.tableView reloadData]; + + _storeProductsRequest.delegate = nil; +} + +- (void)requestDidFinish:(SKRequest *)request { + _storeProductsRequest.delegate = nil; + _storeProductsRequest = nil; +} + +- (void)request:(SKRequest *)request didFailWithError:(NSError *)error { + _storeProductsRequest.delegate = nil; + _storeProductsRequest = nil; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h new file mode 100644 index 0000000..e658269 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h @@ -0,0 +1,227 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import + +PFUI_ASSUME_NONNULL_BEGIN + +@class BFTask; +@class PFCollectionViewCell; +@class PFObject; +@class PFQuery; + +/*! + This class allows you to think about a one-to-one mapping between a and a `UICollectionViewCell`, + rather than having to juggle index paths. + + You also get the following features out of the box: + + - Pagination with a cell that can be tapped to load the next page. + - Pull-to-refresh collection view header. + - Automatic downloading and displaying of remote images in cells. + - Loading screen, shown before any data is loaded. + - Automatic loading and management of the objects array. + - Various methods that can be overridden to customize behavior at major events in the data cycle. + + @see PFCollectionViewCell + */ +@interface PFQueryCollectionViewController : UICollectionViewController + +/*! + @abstract The class name of the this collection will use as a datasource. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, copy) IBInspectable NSString *parseClassName; + +/*! + @abstract Whether the collection should use the default loading view. Default - `YES`. + */ +@property (nonatomic, assign) IBInspectable BOOL loadingViewEnabled; + +/*! + @abstract Whether the collection should use the built-in pull-to-refresh feature. Defualt - `YES`. + */ +@property (nonatomic, assign) IBInspectable BOOL pullToRefreshEnabled; + +/*! + @abstract Whether the collection should use the built-in pagination feature. Default - `YES`. + */ +@property (nonatomic, assign) IBInspectable BOOL paginationEnabled; + +/*! + @abstract The number of objects to show per page. Default - `25`. + */ +@property (nonatomic, assign) IBInspectable NSUInteger objectsPerPage; + +/*! + @abstract Whether the collection is actively loading new data from the server. + */ +@property (nonatomic, assign, getter=isLoading) BOOL loading; + +///-------------------------------------- +/// @name Creating a PFQueryCollectionViewController +///-------------------------------------- + +/*! + @abstract Initializes a view controller with a `UICollectionViewFlowLayout` and a class name + of that will be associated with this collection. + + @param className The class name of the instances of that this table will display. + + @returns An initialized `PFQueryCollectionViewController` object or `nil` if the object couldn't be created. + */ +- (instancetype)initWithClassName:(PFUI_NULLABLE NSString *)className; + +/*! + @abstract Initializes a view controller with a class name of that will be associated with this collection. + + @param layout Layout for collection view to use. + @param className The class name of the instances of that this table will display. + + @returns An initialized `PFQueryCollectionViewController` object or `nil` if the object couldn't be created. + */ +- (instancetype)initWithCollectionViewLayout:(UICollectionViewLayout *)layout + className:(PFUI_NULLABLE NSString *)className NS_DESIGNATED_INITIALIZER; + +///-------------------------------------- +/// @name Responding to Events +///-------------------------------------- + +/*! + Called when objects will be loaded from Parse. If you override this method, you must + call [super objectsWillLoad] in your implementation. + */ +- (void)objectsWillLoad NS_REQUIRES_SUPER; + +/*! + Called when objects have loaded from Parse. If you override this method, you must + call [super objectsDidLoad:] in your implementation. + @param error The Parse error from running the PFQuery, if there was any. + */ +- (void)objectsDidLoad:(PFUI_NULLABLE NSError *)error NS_REQUIRES_SUPER; + +///-------------------------------------- +/// @name Accessing Results +///-------------------------------------- + +/*! + @abstract The array of instances of that is used as a data source. + */ +@property (nonatomic, copy, readonly) NSArray *objects; + +/*! + @abstract Returns an object at a particular indexPath. + + @discussion The default impementation returns the object at `indexPath.item`. + If you want to return objects in a different indexPath order, like for sections, override this method. + + @param indexPath An instance of `NSIndexPath`. + + @returns The object at the specified indexPath. + */ +- (PFUI_NULLABLE PFObject *)objectAtIndexPath:(PFUI_NULLABLE NSIndexPath *)indexPath; + +/*! + @abstract Removes an object at the specified index path, animated. + */ +- (void)removeObjectAtIndexPath:(PFUI_NULLABLE NSIndexPath *)indexPath; + +/*! + @abstract Removes all objects at the specified index paths, animated. + */ +- (void)removeObjectsAtIndexPaths:(PFUI_NULLABLE NSArray *)indexes; + +///-------------------------------------- +/// @name Loading Data +///-------------------------------------- + +/*! + @abstract Clears the collection view and loads the first page of objects. + + @returns An awaitable task that completes when the reload succeeds + */ +- (BFTask *)loadObjects; + +/*! + @abstract Loads the objects of the at the specified page and appends it to the + objects already loaded and refreshes the collection. + + @param page The page of objects to load. + @param clear Whether to clear the collection view after receiving the objects. + + @returns An awaitable task that completes when the reload succeeds + */ +- (BFTask *)loadObjects:(NSInteger)page clear:(BOOL)clear; + +/*! + @abstract Loads the next page of objects, appends to table, and refreshes. + */ +- (void)loadNextPage; + +/*! + @abstract Clears the collection view of all objects. + */ +- (void)clear; + +///-------------------------------------- +/// @name Querying +///-------------------------------------- + +/*! + @abstract Override to construct your own custom to get the objects. + + @returns An instance of that method will use to the objects for this collection. + */ +- (PFQuery *)queryForCollection; + +///-------------------------------------- +/// @name Data Source Methods +///-------------------------------------- + +/*! + @abstract Override this method to customize each cell given a that is loaded. + + @warning The cell should inherit from which is a subclass of `UICollectionViewCell`. + + @param collectionView The collection view object associated with this controller. + @param indexPath The indexPath of the cell. + @param object The that is associated with the cell. + + @returns The cell that represents this object. + */ +- (PFUI_NULLABLE PFCollectionViewCell *)collectionView:(UICollectionView *)collectionView + cellForItemAtIndexPath:(NSIndexPath *)indexPath + object:(PFUI_NULLABLE PFObject *)object; + +/*! + @discussion Override this method to customize the view that allows the user to load the + next page when pagination is turned on. + + @param collectionView The collection view object associated with this controller. + + @returns The view that allows the user to paginate. + */ +- (PFUI_NULLABLE UICollectionReusableView *)collectionViewReusableViewForNextPageAction:(UICollectionView *)collectionView; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m new file mode 100644 index 0000000..af1a52a --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m @@ -0,0 +1,452 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFQueryCollectionViewController.h" + +#import +#import + +#import + +#import "PFActivityIndicatorCollectionReusableView.h" +#import "PFCollectionViewCell.h" +#import "PFImageView.h" +#import "PFLoadingView.h" +#import "PFLocalization.h" + +static NSString *const PFQueryCollectionViewCellIdentifier = @"cell"; +static NSString *const PFQueryCollectionViewNextPageReusableViewIdentifier = @"nextPageView"; + +@interface PFQueryCollectionViewController () { + NSMutableArray *_mutableObjects; + + BOOL _firstLoad; // Whether we have loaded the first set of objects + NSInteger _currentPage; // The last page that was loaded + NSInteger _lastLoadCount; // The count of objects from the last load. +} + +@property (nonatomic, strong) UIRefreshControl *refreshControl; + +@property (nonatomic, strong) PFLoadingView *loadingView; + +@property (nonatomic, strong) PFActivityIndicatorCollectionReusableView *currentNextPageView; + +- (instancetype)initWithCoder:(NSCoder *)decoder NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil NS_DESIGNATED_INITIALIZER; + +@end + +@implementation PFQueryCollectionViewController + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithCoder:(NSCoder *)decoder { + // initWithCoder is usually a parallel designated initializer, as is the case here + // It's used by storyboard + self = [super initWithCoder:decoder]; + if (!self) return nil; + + [self _setupWithClassName:nil]; + + return self; +} + +- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + // This is used by interface builder + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (!self) return nil; + + [self _setupWithClassName:nil]; + + return self; +} + +- (instancetype)initWithCollectionViewLayout:(UICollectionViewLayout *)layout { + return[self initWithCollectionViewLayout:layout className:nil]; +} + +- (instancetype)initWithCollectionViewLayout:(UICollectionViewLayout *)layout className:(NSString *)className { + self = [super initWithCollectionViewLayout:layout]; + if (!self) return nil; + + [self _setupWithClassName:className]; + + return self; +} + +- (instancetype)initWithClassName:(NSString *)className { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + return [self initWithCollectionViewLayout:layout className:className]; +} + +- (void)_setupWithClassName:(NSString *)otherClassName { + _mutableObjects = [NSMutableArray array]; + _firstLoad = YES; + + // Set some reasonable defaults + _objectsPerPage = 25; + _loadingViewEnabled = YES; + _paginationEnabled = YES; + _pullToRefreshEnabled = YES; + _lastLoadCount = -1; + + _parseClassName = [otherClassName copy]; +} + +#pragma mark - +#pragma mark UIViewController + +- (void)loadView { + [super loadView]; + + self.collectionView.backgroundColor = [UIColor whiteColor]; + + [self.collectionView registerClass:[PFCollectionViewCell class] + forCellWithReuseIdentifier:PFQueryCollectionViewCellIdentifier]; + [self.collectionView registerClass:[PFActivityIndicatorCollectionReusableView class] + forSupplementaryViewOfKind:UICollectionElementKindSectionFooter + withReuseIdentifier:PFQueryCollectionViewNextPageReusableViewIdentifier]; + + if (self.pullToRefreshEnabled) { + self.refreshControl = [[UIRefreshControl alloc] init]; + [self.refreshControl addTarget:self + action:@selector(_refreshControlValueChanged:) + forControlEvents:UIControlEventValueChanged]; + [self.collectionView addSubview:self.refreshControl]; + self.collectionView.alwaysBounceVertical = YES; + } +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self loadObjects]; +} + +- (void)viewDidLayoutSubviews { + [super viewDidLayoutSubviews]; + + self.loadingView.frame = self.collectionView.bounds; +} + +#pragma mark - +#pragma mark Responding to Events + +- (void)objectsWillLoad { + [self _refreshLoadingView]; +} + +- (void)objectsDidLoad:(NSError *)error { + [self _refreshLoadingView]; + _firstLoad = NO; +} + +#pragma mark - +#pragma mark Accessing Results + +- (NSArray *)objects { + return _mutableObjects; +} + +- (PFObject *)objectAtIndexPath:(NSIndexPath *)indexPath { + return self.objects[indexPath.row]; +} + +#pragma mark - +#pragma mark Removing Objects + +- (void)removeObjectAtIndexPath:(NSIndexPath *)indexPath { + [self removeObjectsAtIndexPaths:@[ indexPath ]]; +} + +- (void)removeObjectsAtIndexPaths:(NSArray *)indexPaths { + if (indexPaths.count == 0) { + return; + } + + // We need the contents as both an index set and a list of index paths. + NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet]; + + for (NSIndexPath *indexPath in indexPaths) { + if (indexPath.section != 0) { + [NSException raise:NSRangeException format:@"Index Path section %lu out of range!", (long)indexPath.section]; + } + + if (indexPath.row >= self.objects.count) { + [NSException raise:NSRangeException format:@"Index Path row %lu out of range!", (long)indexPath.row]; + } + + [indexes addIndex:indexPath.row]; + } + + BFContinuationBlock deletionHandlerBlock = ^id (BFTask *task) { + self.refreshControl.enabled = YES; + + if (task.error) { + [self _handleDeletionError:task.error]; + } + + return nil; + }; + + NSMutableArray *allDeletionTasks = [NSMutableArray arrayWithCapacity:indexes.count]; + NSArray *objectsToRemove = [self.objects objectsAtIndexes:indexes]; + + // Remove the contents from our local cache so we can give the user immediate feedback. + [_mutableObjects removeObjectsInArray:objectsToRemove]; + [self.collectionView deleteItemsAtIndexPaths:indexPaths]; + + for (id obj in objectsToRemove) { + [allDeletionTasks addObject:[obj deleteInBackground]]; + } + + [[BFTask taskForCompletionOfAllTasks:allDeletionTasks] + continueWithBlock:deletionHandlerBlock]; +} + +#pragma mark - +#pragma mark Loading Data + +- (BFTask *)loadObjects { + return [self loadObjects:0 clear:YES]; +} + +- (BFTask *)loadObjects:(NSInteger)page clear:(BOOL)clear { + self.loading = YES; + [self objectsWillLoad]; + + BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; + + PFQuery *query = [self queryForCollection]; + [self _alterQuery:query forLoadingPage:page]; + [query findObjectsInBackgroundWithBlock:^(NSArray *foundObjects, NSError *error) { + if (![Parse isLocalDatastoreEnabled] && + query.cachePolicy != kPFCachePolicyCacheOnly && + error.code == kPFErrorCacheMiss) { + // no-op on cache miss + return; + } + + self.loading = NO; + + if (error) { + _lastLoadCount = -1; + _currentNextPageView.animating = NO; + } else { + _currentPage = page; + _lastLoadCount = [foundObjects count]; + + if (clear) { + [_mutableObjects removeAllObjects]; + } + + [_mutableObjects addObjectsFromArray:foundObjects]; + [self.collectionView reloadData]; + } + + [self objectsDidLoad:error]; + [self.refreshControl endRefreshing]; + + [source setError:error]; + }]; + + return source.task; +} + +- (void)loadNextPage { + if (!self.loading) { + [self loadObjects:(_currentPage + 1) clear:NO]; + _currentNextPageView.animating = YES; + } +} + +- (void)clear { + [_mutableObjects removeAllObjects]; + [self.collectionView reloadData]; + _currentPage = 0; +} + +#pragma mark - +#pragma mark Querying + +- (PFQuery *)queryForCollection { + if (!self.parseClassName) { + [NSException raise:NSInternalInconsistencyException + format:@"You need to specify a parseClassName for the PFQueryTableViewController.", nil]; + } + + PFQuery *query = [PFQuery queryWithClassName:self.parseClassName]; + + // If no objects are loaded in memory, we look to the cache first to fill the table + // and then subsequently do a query against the network. + if ([self.objects count] == 0 && ![Parse isLocalDatastoreEnabled]) { + query.cachePolicy = kPFCachePolicyCacheThenNetwork; + } + + [query orderByDescending:@"createdAt"]; + + return query; +} + +- (void)_alterQuery:(PFQuery *)query forLoadingPage:(NSInteger)page { + if (self.paginationEnabled && self.objectsPerPage) { + query.limit = self.objectsPerPage; + query.skip = page * self.objectsPerPage; + } +} + +#pragma mark - +#pragma mark Data Source Methods + +- (PFCollectionViewCell *)collectionView:(UICollectionView *)collectionView + cellForItemAtIndexPath:(NSIndexPath *)indexPath + object:(PFObject *)object { + PFCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:PFQueryCollectionViewCellIdentifier + forIndexPath:indexPath]; + [cell updateFromObject:object]; + return cell; +} + +- (UICollectionReusableView *)collectionViewReusableViewForNextPageAction:(UICollectionView *)collectionView { + _currentNextPageView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter + withReuseIdentifier:PFQueryCollectionViewNextPageReusableViewIdentifier + forIndexPath:[self _indexPathForPaginationReusableView]]; + _currentNextPageView.textLabel.text = NSLocalizedString(@"Load more...", @"Load more..."); + [_currentNextPageView addTarget:self action:@selector(loadNextPage) forControlEvents:UIControlEventTouchUpInside]; + _currentNextPageView.animating = self.loading; + return _currentNextPageView; +} + +#pragma mark - +#pragma mark UICollectionViewDataSource + +- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { + return 1; +} + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return [self.objects count]; +} + +- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView + cellForItemAtIndexPath:(NSIndexPath *)indexPath { + return [self collectionView:collectionView cellForItemAtIndexPath:indexPath object:[self objectAtIndexPath:indexPath]]; +} + +- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView + viewForSupplementaryElementOfKind:(NSString *)kind + atIndexPath:(NSIndexPath *)indexPath { + return [self collectionViewReusableViewForNextPageAction:collectionView]; +} + +#pragma mark - +#pragma mark UICollectionViewDelegateFlowLayout + +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section { + if ([self _shouldShowPaginationView]) { + return CGSizeMake(CGRectGetWidth(collectionView.bounds), 50.0f); + } + return CGSizeZero; +} + +#pragma mark - +#pragma mark Pagination + +- (BOOL)_shouldShowPaginationView { + return (self.paginationEnabled && + [self.objects count] != 0 && + (_lastLoadCount == -1 || _lastLoadCount >= (NSInteger)self.objectsPerPage)); +} + +- (NSIndexPath *)_indexPathForPaginationReusableView { + return [NSIndexPath indexPathForItem:0 inSection:[self numberOfSectionsInCollectionView:self.collectionView] - 1]; +} + +#pragma mark - +#pragma mark Error handling + +- (void)_handleDeletionError:(NSError *)error { + // Fully reload on error. + [self loadObjects]; + + NSString *errorMessage = [NSString stringWithFormat:@"%@: \"%@\"", + NSLocalizedString(@"Error occurred during deletion", @"Error occurred during deletion"), + error.localizedDescription]; + + if ([UIAlertController class]) { + UIAlertController *errorController = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Error", @"Error") + message:errorMessage + preferredStyle:UIAlertControllerStyleAlert]; + + [errorController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"OK", @"OK") + style:UIAlertActionStyleCancel + handler:nil]]; + + [self presentViewController:errorController animated:YES completion:nil]; + } else { + // Cast to `id` is required for building succesfully for app extensions, + // this code actually never runs in App Extensions, since they are iOS 8.0+, so we are good with just a hack + UIAlertView *alertView = [(id)[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", @"Error") + message:errorMessage + delegate:nil + cancelButtonTitle:NSLocalizedString(@"OK", @"OK") + otherButtonTitles:nil]; + + [alertView show]; + } +} + +#pragma mark - +#pragma mark Actions + +- (void)_refreshControlValueChanged:(UIRefreshControl *)refreshControl { + if (!self.loading) { + [self loadObjects]; + } +} + +#pragma mark - +#pragma mark Loading View + +- (void)_refreshLoadingView { + BOOL showLoadingView = self.loadingViewEnabled && self.loading && _firstLoad; + + if (showLoadingView) { + [self.collectionView addSubview:self.loadingView]; + [self.view setNeedsLayout]; + } else { + // Avoid loading `loadingView` - just use an ivar. + if (_loadingView) { + [self.loadingView removeFromSuperview]; + self.loadingView = nil; + } + } +} + +- (PFLoadingView *)loadingView { + if (!_loadingView) { + _loadingView = [[PFLoadingView alloc] initWithFrame:CGRectZero]; + } + return _loadingView; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h new file mode 100644 index 0000000..4f73344 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h @@ -0,0 +1,259 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import + +PFUI_ASSUME_NONNULL_BEGIN + +@class BFTask; +@class PFObject; +@class PFQuery; +@class PFTableViewCell; + +/*! + This class allows you to think about a one-to-one mapping between a and a `UITableViewCell`, + rather than having to juggle index paths. + + You also get the following features out of the box: + + - Pagination with a cell that can be tapped to load the next page. + - Pull-to-refresh table view header. + - Automatic downloading and displaying of remote images in cells. + - Loading screen, shown before any data is loaded. + - Automatic loading and management of the objects array. + - Various methods that can be overridden to customize behavior at major events in the data cycle. + */ +@interface PFQueryTableViewController : UITableViewController + +///-------------------------------------- +/// @name Creating a PFQueryTableViewController +///-------------------------------------- + +/*! + @abstract Initializes with a class name of the that will be associated with this table. + + @param style The UITableViewStyle for the table + @param className The class name of the instances of that this table will display. + + @returns An initialized `PFQueryTableViewController` object or `nil` if the object couldn't be created. + */ +- (instancetype)initWithStyle:(UITableViewStyle)style + className:(PFUI_NULLABLE NSString *)className NS_DESIGNATED_INITIALIZER; + +/*! + @abstract Initializes with a class name of the PFObjects that will be associated with this table. + + @param className The class name of the instances of that this table will display. + + @returns An initialized `PFQueryTableViewController` object or `nil` if the object couldn't be created. + */ +- (instancetype)initWithClassName:(PFUI_NULLABLE NSString *)className; + +///-------------------------------------- +/// @name Configuring Behavior +///-------------------------------------- + +/*! + @abstract The class name of the this table will use as a datasource. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, copy) IBInspectable NSString *parseClassName; + +/*! + @abstract The key to use to display for the cell text label. + + @discussion This won't apply if you override + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, copy) IBInspectable NSString *textKey; + +/*! + @abstract The key to use to display for the cell image view. + + @discussion This won't apply if you override + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, copy) IBInspectable NSString *imageKey; + +/*! + @abstract The image to use as a placeholder for the cell images. + + @discussion This won't apply if you override + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong) IBInspectable UIImage *placeholderImage; + +/*! + @abstract Whether the table should use the default loading view. Default - `YES`. + */ +@property (nonatomic, assign) IBInspectable BOOL loadingViewEnabled; + +/*! + @abstract Whether the table should use the built-in pull-to-refresh feature. Defualt - `YES`. + */ +@property (nonatomic, assign) IBInspectable BOOL pullToRefreshEnabled; + +/*! + @abstract Whether the table should use the built-in pagination feature. Default - `YES`. + */ +@property (nonatomic, assign) IBInspectable BOOL paginationEnabled; + +/*! + @abstract The number of objects to show per page. Default - `25`. + */ +@property (nonatomic, assign) IBInspectable NSUInteger objectsPerPage; + +/*! + @abstract Whether the table is actively loading new data from the server. + */ +@property (nonatomic, assign, getter=isLoading) BOOL loading; + +///-------------------------------------- +/// @name Responding to Events +///-------------------------------------- + +/*! + Called when objects will loaded from Parse. If you override this method, you must + call [super objectsWillLoad] in your implementation. + */ +- (void)objectsWillLoad; + +/*! + Called when objects have loaded from Parse. If you override this method, you must + call [super objectsDidLoad:] in your implementation. + @param error The Parse error from running the PFQuery, if there was any. + */ +- (void)objectsDidLoad:(PFUI_NULLABLE NSError *)error; + +///-------------------------------------- +/// @name Accessing Results +///-------------------------------------- + +/*! + @abstract The array of instances of that is used as a data source. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, copy, readonly) NSArray *objects; + +/*! + @abstract Returns an object at a particular indexPath. + + @discussion The default impementation returns the object at `indexPath.row`. + If you want to return objects in a different indexPath order, like for sections, override this method. + + @param indexPath The indexPath. + + @returns The object at the specified index + */ +- (PFUI_NULLABLE PFObject *)objectAtIndexPath:(PFUI_NULLABLE NSIndexPath *)indexPath; + +/*! + @abstract Removes an object at the specified index path, animated. + */ +- (void)removeObjectAtIndexPath:(PFUI_NULLABLE NSIndexPath *)indexPath; + +/*! + @abstract Removes an object at the specified index path, with or without animation. + */ +- (void)removeObjectAtIndexPath:(PFUI_NULLABLE NSIndexPath *)indexPath animated:(BOOL)animated; + +/*! + @abstract Removes all objects at the specified index paths, animated. + */ +- (void)removeObjectsAtIndexPaths:(PFUI_NULLABLE NSArray *)indexes; + +/*! + @abstract Removes all objects at the specified index paths, with or without animation. + */ +- (void)removeObjectsAtIndexPaths:(PFUI_NULLABLE NSArray *)indexes animated:(BOOL)animated; + +/*! + @abstract Clears the table of all objects. + */ +- (void)clear; + +/*! + @abstract Clears the table and loads the first page of objects. + + @returns An awaitable task that completes when the reload succeeds + */ +- (BFTask *)loadObjects; + +/*! + @abstract Loads the objects of the className at the specified page and appends it to the + objects already loaded and refreshes the table. + + @param page The page of objects to load. + @param clear Whether to clear the table after receiving the objects + + @returns An awaitable task that completes when the reload succeeds + */ +- (BFTask *)loadObjects:(NSInteger)page clear:(BOOL)clear; + +/*! + @abstract Loads the next page of objects, appends to table, and refreshes. + */ +- (void)loadNextPage; + +///-------------------------------------- +/// @name Querying +///-------------------------------------- + +/*! + Override to construct your own custom PFQuery to get the objects. + @result PFQuery that loadObjects will use to the objects for this table. + */ +- (PFQuery *)queryForTable; + +///-------------------------------------- +/// @name Data Source Methods +///-------------------------------------- + +/*! + @abstract Override this method to customize each cell given a PFObject that is loaded. + + @discussion If you don't override this method, it will use a default style cell and display either + the first data key from the object, or it will display the key as specified with `textKey`, `imageKey`. + + @warning The cell should inherit from which is a subclass of `UITableViewCell`. + + @param tableView The table view object associated with this controller. + @param indexPath The indexPath of the cell. + @param object The PFObject that is associated with the cell. + + @returns The cell that represents this object. + */ +- (PFUI_NULLABLE PFTableViewCell *)tableView:(UITableView *)tableView + cellForRowAtIndexPath:(NSIndexPath *)indexPath + object:(PFUI_NULLABLE PFObject *)object; + +/*! + @discussion Override this method to customize the cell that allows the user to load the + next page when pagination is turned on. + + @param tableView The table view object associated with this controller. + @param indexPath The indexPath of the cell. + + @returns The cell that allows the user to paginate. + */ +- (PFUI_NULLABLE PFTableViewCell *)tableView:(UITableView *)tableView + cellForNextPageAtIndexPath:(NSIndexPath *)indexPath; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m new file mode 100644 index 0000000..f9fad49 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m @@ -0,0 +1,585 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFQueryTableViewController.h" + +#import +#import + +#import + +#import "PFActivityIndicatorTableViewCell.h" +#import "PFImageView.h" +#import "PFLoadingView.h" +#import "PFLocalization.h" +#import "PFTableViewCell.h" + +// Add headers to kill any warnings. +// `initWithStyle:` is a UITableViewController method. +// `initWithCoder:`/`initWithNibName:bundle:` are UIViewController methods and are, for sure, available. +@interface UITableViewController () + +- (instancetype)initWithStyle:(UITableViewStyle)style NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithCoder:(NSCoder *)decoder NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil NS_DESIGNATED_INITIALIZER; + +@end + +@interface PFQueryTableViewController () { + NSMutableArray *_mutableObjects; + + BOOL _firstLoad; // Whether we have loaded the first set of objects + NSInteger _currentPage; // The last page that was loaded + NSInteger _lastLoadCount; // The count of objects from the last load. + // Set to -1 when objects haven't loaded, or there was an error. + UITableViewCellSeparatorStyle _savedSeparatorStyle; +} + +@property (nonatomic, strong) PFLoadingView *loadingView; + +- (instancetype)initWithCoder:(NSCoder *)decoder NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil NS_DESIGNATED_INITIALIZER; + +@end + +@implementation PFQueryTableViewController + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithCoder:(NSCoder *)decoder { + // initWithCoder is usually a parallel designated initializer, as is the case here + // It's used by storyboard + if (self = [super initWithCoder:decoder]) { + [self _setupWithClassName:nil]; + } + return self; +} + +- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + // This is used by interface builder + if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { + [self _setupWithClassName:nil]; + } + return self; +} + +- (instancetype)initWithStyle:(UITableViewStyle)style { + return [self initWithStyle:style className:nil]; +} + +- (instancetype)initWithClassName:(NSString *)className { + return [self initWithStyle:UITableViewStylePlain className:className]; +} + +- (instancetype)initWithStyle:(UITableViewStyle)style className:(NSString *)className { + if (self = [super initWithStyle:style]) { + [self _setupWithClassName:className]; + } + return self; +} + +- (void)_setupWithClassName:(NSString *)otherClassName { + _mutableObjects = [NSMutableArray array]; + _firstLoad = YES; + + // Set some reasonable defaults + _objectsPerPage = 25; + _loadingViewEnabled = YES; + _paginationEnabled = YES; + _pullToRefreshEnabled = YES; + _lastLoadCount = -1; + + _parseClassName = [otherClassName copy]; +} + +#pragma mark - +#pragma mark UIViewController + +- (void)loadView { + [super loadView]; + + // Setup the Pull to Refresh UI if needed + if (self.pullToRefreshEnabled) { + UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; + [refreshControl addTarget:self + action:@selector(_refreshControlValueChanged:) + forControlEvents:UIControlEventValueChanged]; + self.refreshControl = refreshControl; + } +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self loadObjects]; +} + +- (void)viewDidLayoutSubviews { + [super viewDidLayoutSubviews]; + + self.loadingView.frame = self.tableView.bounds; +} + +- (void)setEditing:(BOOL)editing animated:(BOOL)animated { + [self.tableView beginUpdates]; + + // If we're currently showing the pagination cell, we need to hide it during editing. + if ([self paginationEnabled] && [self _shouldShowPaginationCell]) { + [self.tableView deleteRowsAtIndexPaths:@[ [self _indexPathForPaginationCell] ] + withRowAnimation:UITableViewRowAnimationAutomatic]; + } + + [super setEditing:editing animated:animated]; + + // Ensure proper re-insertion of the pagination cell. + if ([self paginationEnabled] && [self _shouldShowPaginationCell]) { + [self.tableView insertRowsAtIndexPaths:@[ [self _indexPathForPaginationCell] ] + withRowAnimation:UITableViewRowAnimationAutomatic]; + } + + [self.tableView endUpdates]; +} + +#pragma mark - +#pragma mark Data + +- (void)objectsWillLoad { + if (_firstLoad) { + _savedSeparatorStyle = self.tableView.separatorStyle; + self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + } + [self _refreshLoadingView]; +} + +- (void)objectsDidLoad:(NSError *)error { + if (_firstLoad) { + _firstLoad = NO; + self.tableView.separatorStyle = _savedSeparatorStyle; + } + [self _refreshLoadingView]; +} + +- (PFQuery *)queryForTable { + if (!self.parseClassName) { + [NSException raise:NSInternalInconsistencyException + format:@"You need to specify a parseClassName for the PFQueryTableViewController.", nil]; + } + + PFQuery *query = [PFQuery queryWithClassName:self.parseClassName]; + + // If no objects are loaded in memory, we look to the cache first to fill the table + // and then subsequently do a query against the network. + if ([self.objects count] == 0 && ![Parse isLocalDatastoreEnabled]) { + query.cachePolicy = kPFCachePolicyCacheThenNetwork; + } + + [query orderByDescending:@"createdAt"]; + + return query; +} + +// Alters a query to add functionality like pagination +- (void)_alterQuery:(PFQuery *)query forLoadingPage:(NSInteger)page { + if (self.paginationEnabled && self.objectsPerPage) { + query.limit = self.objectsPerPage; + query.skip = page * self.objectsPerPage; + } +} + +- (void)clear { + [_mutableObjects removeAllObjects]; + [self.tableView reloadData]; + _currentPage = 0; +} + +- (BFTask *)loadObjects { + return [self loadObjects:0 clear:YES]; +} + +- (BFTask *)loadObjects:(NSInteger)page clear:(BOOL)clear { + self.loading = YES; + [self objectsWillLoad]; + + BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; + + PFQuery *query = [self queryForTable]; + [self _alterQuery:query forLoadingPage:page]; + [query findObjectsInBackgroundWithBlock:^(NSArray *foundObjects, NSError *error) { + if (![Parse isLocalDatastoreEnabled] && + query.cachePolicy != kPFCachePolicyCacheOnly && + error.code == kPFErrorCacheMiss) { + // no-op on cache miss + return; + } + + self.loading = NO; + + if (error) { + _lastLoadCount = -1; + [self _refreshPaginationCell]; + } else { + _currentPage = page; + _lastLoadCount = [foundObjects count]; + + if (clear) { + [_mutableObjects removeAllObjects]; + } + + [_mutableObjects addObjectsFromArray:foundObjects]; + [self.tableView reloadData]; + } + + [self objectsDidLoad:error]; + [self.refreshControl endRefreshing]; + + [source setError:error]; + }]; + + return source.task; +} + +- (void)loadNextPage { + if (!self.loading) { + [self loadObjects:(_currentPage + 1) clear:NO]; + [self _refreshPaginationCell]; + } +} + +#pragma mark - +#pragma mark UIScrollViewDelegate + +// scrollViewDidEndDragging:willDecelerate: is called when a user stops dragging the table view. +- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { + // If the user lets go and the table view has no momentum, + // scrollViewDidEndDragging:willDecelerate: is called with willDecelerate:NO. + // In this case, we trigger a load for all the PFImageViews + // in our PFTableViewCells through _loadImagesForOnscreenRows. + if (!decelerate) { + [self _loadImagesForOnscreenRows]; + } +} + +// If the user lets go and the table view has momentum, +// scrollViewDidEndDragging:willDecelerate: is called with willDecelerate:YES. +// We will defer loading of images until scrollViewDidEndDecelerating: is called. +- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { + [self _loadImagesForOnscreenRows]; +} + +#pragma mark - +#pragma mark UITableViewDataSource + +// Return the number of rows in the section. +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + NSInteger count = [self.objects count]; + + if ([self _shouldShowPaginationCell]) { + count += 1; + } + + return count; +} + +// Default implementation that displays a default style cell +- (PFTableViewCell *)tableView:(UITableView *)tableView + cellForRowAtIndexPath:(NSIndexPath *)indexPath + object:(PFObject *)object { + static NSString *cellIdentifier = @"PFTableViewCell"; + PFTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; + if (!cell) { + cell = [[PFTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; + } + + [self tableView:tableView configureCell:cell atIndexPath:indexPath object:object]; + + return cell; +} + +- (void)tableView:(UITableView *)tableView + configureCell:(PFTableViewCell *)cell + atIndexPath:(NSIndexPath *)indexPath + object:(PFObject *)object { + // Grab a key to display + NSString *key; + if (self.textKey) { + key = self.textKey; + } else if ([[object allKeys] count] > 0) { + key = [[object allKeys] objectAtIndex:0]; + } + + // Configure the cell + if (key) { + cell.textLabel.text = [NSString stringWithFormat:@"%@", [object objectForKey:key]]; + } + + if (self.placeholderImage) { + cell.imageView.image = self.placeholderImage; + } + + if (self.imageKey) { + cell.imageView.file = object[self.imageKey]; + } +} + +- (PFObject *)objectAtIndexPath:(NSIndexPath *)indexPath { + return self.objects[indexPath.row]; +} + +- (void)removeObjectAtIndexPath:(NSIndexPath *)indexPath { + [self removeObjectAtIndexPath:indexPath animated:YES]; +} + +- (void)removeObjectAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated { + [self removeObjectsAtIndexPaths:@[ indexPath ] animated:animated]; +} + +- (void)removeObjectsAtIndexPaths:(NSArray *)indexPaths { + [self removeObjectsAtIndexPaths:indexPaths animated:YES]; +} + +- (void)removeObjectsAtIndexPaths:(NSArray *)indexPaths animated:(BOOL)animated { + if (indexPaths.count == 0) { + return; + } + + // We need the contents as both an index set and a list of index paths. + NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet]; + + for (NSIndexPath *indexPath in indexPaths) { + if (indexPath.section != 0) { + [NSException raise:NSRangeException format:@"Index Path section %lu out of range!", (long)indexPath.section]; + } + + if (indexPath.row >= self.objects.count) { + [NSException raise:NSRangeException format:@"Index Path row %lu out of range!", (long)indexPath.row]; + } + + [indexes addIndex:indexPath.row]; + } + + BFContinuationBlock deletionHandlerBlock = ^id (BFTask *task) { + self.refreshControl.enabled = YES; + if (task.error) { + [self _handleDeletionError:task.error]; + } + + return nil; + }; + + NSMutableArray *allDeletionTasks = [NSMutableArray arrayWithCapacity:indexes.count]; + NSArray *objectsToRemove = [self.objects objectsAtIndexes:indexes]; + + // Remove the contents from our local cache so we can give the user immediate feedback. + [_mutableObjects removeObjectsInArray:objectsToRemove]; + [self.tableView deleteRowsAtIndexPaths:indexPaths + withRowAnimation:animated ? UITableViewRowAnimationAutomatic : UITableViewRowAnimationNone]; + + for (id obj in objectsToRemove) { + [allDeletionTasks addObject:[obj deleteInBackground]]; + } + + [[BFTask taskForCompletionOfAllTasks:allDeletionTasks] + continueWithBlock:deletionHandlerBlock]; +} + +- (PFTableViewCell *)tableView:(UITableView *)otherTableView cellForNextPageAtIndexPath:(NSIndexPath *)indexPath { + static NSString *cellIdentifier = @"PFTableViewCellNextPage"; + + PFActivityIndicatorTableViewCell *cell = [otherTableView dequeueReusableCellWithIdentifier:cellIdentifier]; + if (cell == nil) { + cell = [[PFActivityIndicatorTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault + reuseIdentifier:cellIdentifier]; + cell.textLabel.text = NSLocalizedString(@"Load more...", @"Load more..."); + } + + cell.animating = self.loading; + + return cell; +} + +- (UITableViewCell *)tableView:(UITableView *)otherTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + PFTableViewCell *cell; + if ([self _shouldShowPaginationCell] && [indexPath isEqual:[self _indexPathForPaginationCell]]) { + // Return the pagination cell on the last cell + cell = [self tableView:otherTableView cellForNextPageAtIndexPath:indexPath]; + } else { + cell = [self tableView:otherTableView + cellForRowAtIndexPath:indexPath + object:[self objectAtIndexPath:indexPath]]; + } + + if ([cell isKindOfClass:[PFTableViewCell class]] && + !otherTableView.dragging && + !otherTableView.decelerating) { + // The reason we dispatch to the main queue is that we want to enable subclasses to override + // tableView:cellForRowAtIndexPath:object:, and we still do image loading after they assign + // the remote image file. + dispatch_async(dispatch_get_main_queue(), ^{ + [cell.imageView loadInBackground]; + }); + } + return cell; +} + +#pragma mark - +#pragma mark UITableViewDelegate + +- (void)tableView:(UITableView *)otherTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + // Handle selection of the next page row + if (!_firstLoad && + self.paginationEnabled && + [indexPath isEqual:[self _indexPathForPaginationCell]]) { + [self loadNextPage]; + } +} + +- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView + editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { + if ([indexPath isEqual:[self _indexPathForPaginationCell]]) { + return UITableViewCellEditingStyleNone; + } + + return UITableViewCellEditingStyleDelete; +} + +- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath { + if ([indexPath isEqual:[self _indexPathForPaginationCell]]) { + return NO; + } + + return YES; +} + +#pragma mark - +#pragma mark Private + +// Whether we need to show the pagination cell +- (BOOL)_shouldShowPaginationCell { + return (self.paginationEnabled && + !self.editing && + [self.objects count] != 0 && + (_lastLoadCount == -1 || _lastLoadCount >= (NSInteger)self.objectsPerPage)); +} + +// Selectively refresh pagination cell +- (void)_refreshPaginationCell { + if ([self _shouldShowPaginationCell]) { + [self.tableView reloadRowsAtIndexPaths:@[ [self _indexPathForPaginationCell] ] + withRowAnimation:UITableViewRowAnimationNone]; + } +} + +// The row of the pagination cell +- (NSIndexPath *)_indexPathForPaginationCell { + return [NSIndexPath indexPathForRow:[self.objects count] inSection:0]; +} + +- (void)_loadImagesForOnscreenRows { + if (self.objects.count > 0) { + NSArray *visiblePaths = [self.tableView indexPathsForVisibleRows]; + for (NSIndexPath *indexPath in visiblePaths) { + [self _loadImageForCellAtIndexPath:indexPath]; + } + } +} + +- (void)_loadImageForCellAtIndexPath:(NSIndexPath *)indexPath { + PFTableViewCell *cell = (PFTableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath]; + if ([cell isKindOfClass:[PFTableViewCell class]]) { + [cell.imageView loadInBackground]; + } +} + +#pragma mark - +#pragma mark Error handling + +- (void)_handleDeletionError:(NSError *)error { + // Fully reload on error. + [self loadObjects]; + + NSString *errorMessage = [NSString stringWithFormat:@"%@: \"%@\"", + NSLocalizedString(@"Error occurred during deletion", @"Error occurred during deletion"), + error.localizedDescription]; + + if ([UIAlertController class]) { + UIAlertController *errorController = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Error", @"Error") + message:errorMessage + preferredStyle:UIAlertControllerStyleAlert]; + + [errorController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"OK", @"OK") + style:UIAlertActionStyleCancel + handler:nil]]; + + [self presentViewController:errorController animated:YES completion:nil]; + } else { + // Cast to `id` is required for building succesfully for app extensions, + // this code actually never runs in App Extensions, since they are iOS 8.0+, so we are good with just a hack + UIAlertView *alertView = [(id)[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", @"Error") + message:errorMessage + delegate:nil + cancelButtonTitle:NSLocalizedString(@"OK", @"OK") + otherButtonTitles:nil]; + + [alertView show]; + } +} + +#pragma mark - +#pragma mark Actions + +- (void)_refreshControlValueChanged:(UIRefreshControl *)refreshControl { + [self loadObjects]; +} + +#pragma mark - +#pragma mark Accessors + +- (NSArray *)objects { + return _mutableObjects; +} + +#pragma mark - +#pragma mark Loading View + +- (void)_refreshLoadingView { + BOOL showLoadingView = self.loadingViewEnabled && self.loading && _firstLoad; + + if (showLoadingView) { + [self.tableView addSubview:self.loadingView]; + [self.view setNeedsLayout]; + } else { + // Avoid loading `loadingView` - just use an ivar. + if (_loadingView) { + [self.loadingView removeFromSuperview]; + self.loadingView = nil; + } + } +} + +- (PFLoadingView *)loadingView { + if (!_loadingView) { + _loadingView = [[PFLoadingView alloc] initWithFrame:CGRectZero]; + } + return _loadingView; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.h new file mode 100644 index 0000000..d6a8795 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.h @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import + +PFUI_ASSUME_NONNULL_BEGIN + +/*! + `PFSignUpFields` bitmask specifies the sign up elements which are enabled in the view. + + @see PFSignUpViewController + @see PFSignUpView + */ +typedef NS_OPTIONS(NSInteger, PFSignUpFields) { + /*! Username and password fields. */ + PFSignUpFieldsUsernameAndPassword = 0, + /*! Email field. */ + PFSignUpFieldsEmail = 1 << 0, + /*! This field can be used for something else. */ + PFSignUpFieldsAdditional = 1 << 1, + /*! Sign Up Button */ + PFSignUpFieldsSignUpButton = 1 << 2, + /*! Dismiss Button */ + PFSignUpFieldsDismissButton = 1 << 3, + /*! Default value. Combines Username, Password, Email, Sign Up and Dismiss Buttons. */ + PFSignUpFieldsDefault = (PFSignUpFieldsUsernameAndPassword | + PFSignUpFieldsEmail | + PFSignUpFieldsSignUpButton | + PFSignUpFieldsDismissButton) +}; + +@class PFTextField; + +/*! + The `PFSignUpView` class provides a standard sign up interface for authenticating a . + */ +@interface PFSignUpView : UIScrollView + +///-------------------------------------- +/// @name Creating SignUp View +///-------------------------------------- + +/*! + @abstract Initializes the view with the specified sign up elements. + + @param fields A bitmask specifying the sign up elements which are enabled in the view + + @returns An initialized `PFSignUpView` object or `nil` if the object couldn't be created. + + @see PFSignUpFields + */ +- (instancetype)initWithFields:(PFSignUpFields)fields; + +/*! + @abstract The view controller that will present this view. + + @discussion Used to lay out elements correctly when the presenting view controller has translucent elements. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, weak) UIViewController *presentingViewController; + +///-------------------------------------- +/// @name Customizing the Logo +///-------------------------------------- + +/*! + @abstract The logo. By default, it is the Parse logo. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong) UIView *logo; + +///-------------------------------------- +/// @name Configure Username Behaviour +///-------------------------------------- + +/*! + @abstract If email should be used to log in, instead of username + + @discussion By default, this is set to `NO`. + */ +@property (nonatomic, assign) BOOL emailAsUsername; + +///-------------------------------------- +/// @name Sign Up Elements +///-------------------------------------- + +/*! + @abstract The bitmask which specifies the enabled sign up elements in the view + */ +@property (nonatomic, assign, readonly) PFSignUpFields fields; + +/*! + @abstract The username text field. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFTextField *usernameField; + +/*! + @abstract The password text field. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFTextField *passwordField; + +/*! + @abstract The email text field. It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFTextField *emailField; + +/*! + @abstract The additional text field. It is `nil` if the element is not enabled. + + @discussion This field is intended to be customized. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFTextField *additionalField; + +/*! + @abstract The sign up button. It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *signUpButton; + +/*! + @abstract The dismiss button. It is `nil` if the element is not enabled. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *dismissButton; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.m new file mode 100644 index 0000000..b171404 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.m @@ -0,0 +1,319 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFSignUpView.h" + +#import "PFColor.h" +#import "PFDismissButton.h" +#import "PFImage.h" +#import "PFLocalization.h" +#import "PFPrimaryButton.h" +#import "PFRect.h" +#import "PFTextButton.h" +#import "PFTextField.h" + +static NSString *const PFSignUpViewDefaultLogoImageName = @"parse_logo.png"; + +@implementation PFSignUpView + +#pragma mark - +#pragma mark NSObject + +- (instancetype)initWithFields:(PFSignUpFields)otherFields { + self = [super init]; + if (!self) return nil; + + _fields = otherFields; + + self.opaque = YES; + self.backgroundColor = [PFColor commonBackgroundColor]; + + _logo = [[UIImageView alloc] initWithImage:[PFImage imageNamed:PFSignUpViewDefaultLogoImageName]]; + _logo.contentMode = UIViewContentModeScaleAspectFit; + [self addSubview:_logo]; + + if (_fields & PFSignUpFieldsDismissButton) { + _dismissButton = [[PFDismissButton alloc] initWithFrame:CGRectZero]; + [self addSubview:_dismissButton]; + } + + _usernameField = [[PFTextField alloc] initWithFrame:CGRectZero + separatorStyle:(PFTextFieldSeparatorStyleTop | + PFTextFieldSeparatorStyleBottom)]; + _usernameField.autocorrectionType = UITextAutocorrectionTypeNo; + _usernameField.autocapitalizationType = UITextAutocapitalizationTypeNone; + _usernameField.returnKeyType = UIReturnKeyNext; + [self addSubview:_usernameField]; + [self _updateUsernameFieldStyle]; + + _passwordField = [[PFTextField alloc] initWithFrame:CGRectZero + separatorStyle:PFTextFieldSeparatorStyleBottom]; + _passwordField.placeholder = NSLocalizedString(@"Password", @"Password"); + _passwordField.secureTextEntry = YES; + _passwordField.autocorrectionType = UITextAutocorrectionTypeNo; + _passwordField.autocapitalizationType = UITextAutocapitalizationTypeNone; + if (!(_fields & PFSignUpFieldsEmail) && !(_fields & PFSignUpFieldsAdditional)) { + _passwordField.returnKeyType = UIReturnKeyDone; + } else { + _passwordField.returnKeyType = UIReturnKeyNext; + } + [self addSubview:_passwordField]; + + if (_fields & PFSignUpFieldsEmail) { + _emailField = [[PFTextField alloc] initWithFrame:CGRectZero + separatorStyle:PFTextFieldSeparatorStyleBottom]; + _emailField.autocorrectionType = UITextAutocorrectionTypeNo; + _emailField.autocapitalizationType = UITextAutocapitalizationTypeNone; + _emailField.keyboardType = UIKeyboardTypeEmailAddress; + _emailField.placeholder = NSLocalizedString(@"Email", @"Email"); + if (!(_fields & PFSignUpFieldsAdditional)) { + _emailField.returnKeyType = UIReturnKeyDone; + } else { + _emailField.returnKeyType = UIReturnKeyNext; + } + [self addSubview:_emailField]; + } + + if (_fields & PFSignUpFieldsAdditional) { + _additionalField = [[PFTextField alloc] initWithFrame:CGRectZero + separatorStyle:PFTextFieldSeparatorStyleBottom]; + _additionalField.autocorrectionType = UITextAutocorrectionTypeNo; + _additionalField.autocapitalizationType = UITextAutocapitalizationTypeNone; + _additionalField.placeholder = NSLocalizedString(@"Additional", @"Additional"); + _additionalField.returnKeyType = UIReturnKeyDone; + [self addSubview:_additionalField]; + } + + if (_fields & PFSignUpFieldsSignUpButton) { + _signUpButton = [[PFPrimaryButton alloc] initWithBackgroundImageColor:[PFColor signupButtonBackgroundColor]]; + [_signUpButton setTitle:NSLocalizedString(@"Sign Up", @"Sign Up") forState:UIControlStateNormal]; + [self addSubview:_signUpButton]; + } + + return self; +} + +#pragma mark - +#pragma mark UIView + +- (void)layoutSubviews { + [super layoutSubviews]; + + CGRect bounds = self.bounds; + + if (_dismissButton) { + CGPoint origin = CGPointMake(16.0f, 16.0f); + + // In iOS 7+, if the view controller that contains this view + // is presented modally, it's edges extend under the status bar. + // This lets us move down the dismiss button a bit so that it's not covered by the status bar. + if ([self.presentingViewController respondsToSelector:@selector(topLayoutGuide)]) { + origin.y += self.presentingViewController.topLayoutGuide.length; + } + + CGRect frame = PFRectMakeWithOriginSize(origin, [_dismissButton sizeThatFits:bounds.size]); + _dismissButton.frame = frame; + } + + const CGRect contentRect = PFRectMakeWithSizeCenteredInRect([self _contentSizeThatFits:bounds.size], + PFRectMakeWithSize(bounds.size)); + const CGSize contentSize = contentRect.size; + const CGSize contentSizeScale = [self _contentSizeScaleForContentSize:bounds.size]; + + CGFloat currentY = CGRectGetMinY(contentRect); + if (_logo) { + CGFloat logoTopInset = floorf(48.0f * contentSizeScale.height); + CGFloat logoBottomInset = floorf(36.0f * contentSizeScale.height); + + CGFloat logoAvailableHeight = floorf(68.0f * contentSizeScale.height); + + CGSize logoSize = [_logo sizeThatFits:CGSizeMake(contentSize.width, logoAvailableHeight)]; + logoSize.width = MIN(contentSize.width, logoSize.width); + logoSize.height = MIN(logoAvailableHeight, logoSize.height); + + CGRect frame = PFRectMakeWithSizeCenteredInRect(logoSize, contentRect); + frame.origin.y = CGRectGetMinY(contentRect) + logoTopInset; + _logo.frame = CGRectIntegral(frame); + + currentY = floorf(CGRectGetMaxY(frame) + logoBottomInset); + } + + if (_usernameField) { + CGRect frame = PFRectMakeWithSizeCenteredInRect([_usernameField sizeThatFits:contentSize], contentRect); + frame.origin.y = currentY; + _usernameField.frame = frame; + + currentY = CGRectGetMaxY(frame); + } + + if (_passwordField) { + CGRect frame = PFRectMakeWithSizeCenteredInRect([_passwordField sizeThatFits:contentSize], contentRect); + frame.origin.y = currentY; + _passwordField.frame = frame; + + currentY = CGRectGetMaxY(frame); + } + + if (_emailField && !_emailAsUsername) { + CGRect frame = PFRectMakeWithSizeCenteredInRect([_emailField sizeThatFits:contentSize], contentRect); + frame.origin.y = currentY; + _emailField.frame = frame; + + currentY = CGRectGetMaxY(frame); + } + + if (_additionalField) { + CGRect frame = PFRectMakeWithSizeCenteredInRect([_additionalField sizeThatFits:contentSize], contentRect); + frame.origin.y = currentY; + _additionalField.frame = frame; + + currentY = CGRectGetMaxY(frame); + } + + if (_signUpButton) { + CGFloat loginButtonTopInset = floorf(24.0f * contentSizeScale.height); + + CGRect frame = PFRectMakeWithSizeCenteredInRect([_signUpButton sizeThatFits:contentSize], contentRect);; + frame.origin.y = currentY + loginButtonTopInset; + _signUpButton.frame = frame; + + currentY = CGRectGetMaxY(frame); + } +} + +- (CGSize)_contentSizeThatFits:(CGSize)boundingSize { + CGSize maxContentSize = [self _maxContentSize]; + CGSize contentSizeScale = [self _contentSizeScaleForContentSize:boundingSize]; + + CGSize size = PFSizeMin(maxContentSize, boundingSize); + size.height = 0.0f; + if (_logo) { + CGFloat logoTopInset = floorf(36.0f * contentSizeScale.height); + CGFloat logoBottomInset = floorf(36.0f * contentSizeScale.height); + + CGFloat logoAvailableHeight = floorf(68.0f * contentSizeScale.height); + + CGFloat scale = MAX(contentSizeScale.width, contentSizeScale.height); + + CGSize logoSize = [_logo sizeThatFits:CGSizeMake(boundingSize.width, logoAvailableHeight)]; + logoSize.height *= scale; + logoSize.width *= scale; + + size.height += logoSize.height + logoTopInset + logoBottomInset; + } + if (_usernameField) { + CGSize fieldSize = [_usernameField sizeThatFits:boundingSize]; + size.height += fieldSize.height; + } + if (_passwordField) { + CGSize fieldSize = [_passwordField sizeThatFits:boundingSize]; + size.height += fieldSize.height; + } + if (_emailField && !_emailAsUsername) { + CGSize fieldSize = [_emailField sizeThatFits:boundingSize]; + size.height += fieldSize.height; + } + if (_additionalField) { + CGSize fieldSize = [_additionalField sizeThatFits:boundingSize]; + size.height += fieldSize.height; + } + if (_signUpButton) { + CGFloat buttonTopInset = floorf(24.0f * contentSizeScale.height); + + CGSize buttonSize = [_signUpButton sizeThatFits:boundingSize]; + + size.height += buttonSize.height + buttonTopInset; + } + + size.width = floorf(size.width); + size.height = floorf(size.height); + + return size; +} + +- (CGSize)_maxContentSize { + return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? + CGSizeMake(420.0f, 500.0f) : + CGSizeMake(500.0f, 800.0f)); +} + +- (CGSize)_contentSizeScaleForContentSize:(CGSize)contentSize { + CGSize maxContentSize = [self _maxContentSize]; + if (maxContentSize.width < contentSize.width && + maxContentSize.height < contentSize.height) { + return CGSizeMake(1.0f, 1.0f); + } + + CGSize contentSizeScale = CGSizeMake(contentSize.width / maxContentSize.width, + contentSize.height / maxContentSize.height); + return contentSizeScale; +} + +#pragma mark - +#pragma mark PFSignUpView + +- (void)setLogo:(UIView *)logo { + if (self.logo != logo) { + [_logo removeFromSuperview]; + _logo = logo; + [self addSubview:_logo]; + + [self setNeedsLayout]; + } +} + +- (void)setEmailAsUsername:(BOOL)otherEmailAsUsername { + if (_emailAsUsername != otherEmailAsUsername) { + _emailAsUsername = otherEmailAsUsername; + + if (_emailAsUsername) { + if (_emailField.superview) { + [_emailField removeFromSuperview]; + } + } else { + if (_emailField.superview == nil) { + [self addSubview:_emailField]; + } + [self setNeedsLayout]; + } + [self _updateUsernameFieldStyle]; + } +} + +#pragma mark - +#pragma mark Private + +- (void)_updateUsernameFieldStyle { + UIKeyboardType keyboardType = UIKeyboardTypeDefault; + NSString *placeholder = nil; + if (!_emailAsUsername) { + placeholder = NSLocalizedString(@"Username", @"Username"); + keyboardType = UIKeyboardTypeDefault; + } else { + placeholder = NSLocalizedString(@"Email", @"Email"); + keyboardType = UIKeyboardTypeEmailAddress; + } + + _usernameField.placeholder = placeholder; + _usernameField.keyboardType = keyboardType; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.h new file mode 100644 index 0000000..88b2332 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.h @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import +#import + +@class PFUser; +@protocol PFSignUpViewControllerDelegate; + +PFUI_ASSUME_NONNULL_BEGIN + +/*! + The `PFSignUpViewController` class that presents and manages + a standard authentication interface for signing up a . + */ +@interface PFSignUpViewController : UIViewController + +///-------------------------------------- +/// @name Configuring Sign Up Elements +///-------------------------------------- + +/*! + @abstract A bitmask specifying the log in elements which are enabled in the view. + + @see PFSignUpFields + */ +@property (nonatomic, assign) PFSignUpFields fields; + +/*! + @abstract The sign up view. It contains all the enabled log in elements. + + @see PFSignUpView + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFSignUpView *signUpView; + +///-------------------------------------- +/// @name Configuring Sign Up Behaviors +///-------------------------------------- + +/*! + @abstract The delegate that responds to the control events of `PFSignUpViewController`. + + @see PFSignUpViewControllerDelegate + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, weak) id delegate; + +/*! + @abstract Minimum required password length for user signups, defaults to `0`. + */ +@property (nonatomic, assign) NSUInteger minPasswordLength; + +/*! + @abstract Whether to use the email as username on the attached . + + @discussion If set to `YES`, we'll hide the email field, prompt for the email in + the username field, and save the email into both username and email + fields on the new object. By default, this is set to `NO`. + */ +@property (nonatomic, assign) BOOL emailAsUsername; + +@end + +///-------------------------------------- +/// @name Notifications +///-------------------------------------- + +/*! + @abstract The notification is posted immediately after the sign up succeeds. + */ +extern NSString *const PFSignUpSuccessNotification; + +/*! + @abstract The notification is posted immediately after the sign up fails. + + @discussion If the delegate prevents the sign up to start, the notification is not sent. + */ +extern NSString *const PFSignUpFailureNotification; + +/*! + @abstract The notification is posted immediately after the user cancels sign up. + */ +extern NSString *const PFSignUpCancelNotification; + +///-------------------------------------- +/// @name PFSignUpViewControllerDelegate +///-------------------------------------- + +/*! + The `PFLogInViewControllerDelegate` protocol defines methods a delegate of a should implement. + All methods of this protocol are optional. + */ +@protocol PFSignUpViewControllerDelegate + +@optional + +///-------------------------------------- +/// @name Customizing Behavior +///-------------------------------------- + +/*! + @abstract Sent to the delegate to determine whether the sign up request should be submitted to the server. + + @param signUpController The signup view controller that is requesting the data. + @param info An `NSDictionary` instance which contains all sign up information that the user entered. + + @returns A `BOOL` indicating whether the sign up should proceed. + */ +- (BOOL)signUpViewController:(PFSignUpViewController *)signUpController shouldBeginSignUp:(NSDictionary *)info; + +///-------------------------------------- +/// @name Responding to Actions +///-------------------------------------- + +/*! + @abstract Sent to the delegate when a is signed up. + + @param signUpController The signup view controller where signup finished. + @param user object that is a result of the sign up. + */ +- (void)signUpViewController:(PFSignUpViewController *)signUpController didSignUpUser:(PFUser *)user; + +/*! + @abstract Sent to the delegate when the sign up attempt fails. + + @param signUpController The signup view controller where signup failed. + @param error `NSError` object representing the error that occured. + */ +- (void)signUpViewController:(PFSignUpViewController *)signUpController + didFailToSignUpWithError:(PFUI_NULLABLE NSError *)error; + +/*! + @abstract Sent to the delegate when the sign up screen is cancelled. + + @param signUpController The signup view controller where signup was cancelled. + */ +- (void)signUpViewControllerDidCancelSignUp:(PFSignUpViewController *)signUpController; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.m new file mode 100644 index 0000000..257b5fb --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.m @@ -0,0 +1,513 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFSignUpViewController.h" + +#import +#import + +#import "PFUIAlertView.h" +#import "PFLocalization.h" +#import "PFPrimaryButton.h" +#import "PFTextField.h" + +NSString *const PFSignUpSuccessNotification = @"com.parse.ui.signup.success"; +NSString *const PFSignUpFailureNotification = @"com.parse.ui.signup.failure"; +NSString *const PFSignUpCancelNotification = @"com.parse.ui.signup.cancel"; + +// Keys that are used to pass information to the delegate on `signUpViewController:shouldBeginSignUp`. +static NSString *const PFSignUpViewControllerDelegateInfoUsernameKey = @"username"; +static NSString *const PFSignUpViewControllerDelegateInfoPasswordKey = @"password"; +static NSString *const PFSignUpViewControllerDelegateInfoEmailKey = @"email"; +static NSString *const PFSignUpViewControllerDelegateInfoAdditionalKey = @"additional"; + +@interface PFSignUpViewController () { + struct { + BOOL shouldSignUp : YES; + BOOL didSignUp : YES; + BOOL didFailToSignUp : YES; + BOOL didCancelSignUp : YES; + } _delegateExistingMethods; +} + +@property (nonatomic, strong, readwrite) PFSignUpView *signUpView; + +@property (nonatomic, assign) BOOL loading; + +@property (nonatomic, assign) CGFloat visibleKeyboardHeight; + +@end + +@implementation PFSignUpViewController + +#pragma mark - +#pragma mark Init + +- (instancetype)init { + if (self = [super init]) { + [self _commonInit]; + } + return self; +} + +- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { + [self _commonInit]; + } + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder { + if (self = [super initWithCoder:decoder]) { + [self _commonInit]; + } + return self; +} + +- (void)_commonInit { + self.modalTransitionStyle = UIModalTransitionStyleCoverVertical; + self.modalPresentationStyle = UIModalPresentationFormSheet; + _fields = PFSignUpFieldsDefault; + + if ([self respondsToSelector:@selector(automaticallyAdjustsScrollViewInsets)]) { + self.automaticallyAdjustsScrollViewInsets = NO; + } +} + +#pragma mark - +#pragma mark Dealloc + +- (void)dealloc { + // Unregister from all notifications + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +#pragma mark - +#pragma mark UIViewController + +- (void)loadView { + _signUpView = [[PFSignUpView alloc] initWithFields:_fields]; + _signUpView.presentingViewController = self; + self.view = _signUpView; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self _setupHandlers]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + [self _registerForKeyboardNotifications]; + if (self.navigationController && + self.fields & PFSignUpFieldsDismissButton) { + self.fields = self.fields & ~PFSignUpFieldsDismissButton; + + [_signUpView.dismissButton removeFromSuperview]; + } +} + +#pragma mark - +#pragma mark Rotation + +- (UIInterfaceOrientationMask)supportedInterfaceOrientations { + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + return UIInterfaceOrientationMaskAll; + } + + return UIInterfaceOrientationMaskPortrait; +} + +#pragma mark - +#pragma mark PFSignUpViewController + +- (PFSignUpView *)signUpView { + return (PFSignUpView *)self.view; // self.view will call loadView if the view is nil +} + +- (void)setDelegate:(id)delegate { + if (self.delegate != delegate) { + _delegate = delegate; + + _delegateExistingMethods.shouldSignUp = [delegate respondsToSelector:@selector(signUpViewController: + shouldBeginSignUp:)]; + _delegateExistingMethods.didSignUp = [delegate respondsToSelector:@selector(signUpViewController: + didSignUpUser:)]; + _delegateExistingMethods.didFailToSignUp = [delegate respondsToSelector:@selector(signUpViewController: + didFailToSignUpWithError:)]; + _delegateExistingMethods.didCancelSignUp = [delegate + respondsToSelector:@selector(signUpViewControllerDidCancelSignUp:)]; + } +} + +- (void)setEmailAsUsername:(BOOL)otherEmailAsUsername { + self.signUpView.emailAsUsername = otherEmailAsUsername; +} + +- (BOOL)emailAsUsername { + return self.signUpView.emailAsUsername; +} + +#pragma mark - +#pragma mark UITextFieldDelegate + +- (void)textFieldDidBeginEditing:(UITextField *)textField { + [self _updateSignUpViewContentOffsetAnimated:YES]; +} + +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + if (textField == _signUpView.usernameField) { + [_signUpView.passwordField becomeFirstResponder]; + return YES; + } + + if (textField == _signUpView.passwordField) { + if (_signUpView.emailField) { + [_signUpView.emailField becomeFirstResponder]; + return YES; + } else if (_signUpView.additionalField) { + [_signUpView.additionalField becomeFirstResponder]; + return YES; + } + } + + if (textField == _signUpView.emailField) { + if (_signUpView.additionalField) { + [_signUpView.additionalField becomeFirstResponder]; + return YES; + } + } + + [self _signUpAction]; + + return YES; +} + +#pragma mark - +#pragma mark Private + +- (void)_setupHandlers { + _signUpView.delegate = self; // UIScrollViewDelegate + [_signUpView.dismissButton addTarget:self + action:@selector(_dismissAction) + forControlEvents:UIControlEventTouchUpInside]; + _signUpView.usernameField.delegate = self; + _signUpView.passwordField.delegate = self; + _signUpView.emailField.delegate = self; + _signUpView.additionalField.delegate = self; + [_signUpView.signUpButton addTarget:self + action:@selector(_signUpAction) + forControlEvents:UIControlEventTouchUpInside]; + + UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] + initWithTarget:self + action:@selector(_dismissKeyboard)]; + gestureRecognizer.cancelsTouchesInView = NO; + [_signUpView addGestureRecognizer:gestureRecognizer]; +} + +- (void)_dismissAction { + [self _cancelSignUp]; + + // Normally the role of dismissing a modal controller lies on the presenting controller. + // Here we violate the principle so that the presenting modal log in controller is especially easy. + // Cons of this design is that it makes working with non-modally presented log in controller hard; + // but this concern is mitigated by the fact that navigationally presented controller should not have + // dismiss button. + + [self dismissViewControllerAnimated:YES completion:nil]; +} + +- (void)_signUpAction { + if (self.loading) { + return; + } + + [self _dismissKeyboard]; + + NSString *username = _signUpView.usernameField.text ?: @""; + NSString *password = _signUpView.passwordField.text ?: @""; + NSString *email = (self.emailAsUsername ? username : _signUpView.emailField.text); + email = [email stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + + NSString *additional = _signUpView.additionalField.text; + + NSMutableDictionary *dictionary = [@{ PFSignUpViewControllerDelegateInfoUsernameKey : username, + PFSignUpViewControllerDelegateInfoPasswordKey : password } mutableCopy]; + + if (email) { + dictionary[PFSignUpViewControllerDelegateInfoEmailKey] = email; + } + if (additional) { + dictionary[PFSignUpViewControllerDelegateInfoAdditionalKey] = additional; + } + + if (_delegateExistingMethods.shouldSignUp) { + if (![_delegate signUpViewController:self shouldBeginSignUp:dictionary]) { + return; + } + } + + if ([password length] < _minPasswordLength) { + NSString *errorMessage = NSLocalizedString(@"Password must be at least %d characters.", + @"Password too short error message in PFSignUpViewController"); + errorMessage = [NSString stringWithFormat:errorMessage, (unsigned long)_minPasswordLength]; + NSError *error = [NSError errorWithDomain:PFParseErrorDomain + code:0 + userInfo:@{ NSLocalizedDescriptionKey : errorMessage }]; + [self _signUpDidFailWithError:error]; + [_signUpView.passwordField becomeFirstResponder]; + + return; + } + + PFUser *user = [PFUser user]; + user.username = username; + user.password = password; + + if (email) { + user.email = email; + } + if (additional) { + user[PFSignUpViewControllerDelegateInfoAdditionalKey] = additional; + } + + self.loading = YES; + if ([_signUpView.signUpButton isKindOfClass:[PFPrimaryButton class]]) { + [(PFPrimaryButton *)_signUpView.signUpButton setLoading:YES]; + } + [user signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { + self.loading = NO; + if ([_signUpView.signUpButton isKindOfClass:[PFPrimaryButton class]]) { + [(PFPrimaryButton *)_signUpView.signUpButton setLoading:NO]; + } + + if (succeeded) { + [self _signUpDidSuceedWithUser:user]; + } + else { + [self _signUpDidFailWithError:error]; + } + }]; +} + +- (void)_signUpDidSuceedWithUser:(PFUser *)user { + if (_delegateExistingMethods.didSignUp) { + [_delegate signUpViewController:self didSignUpUser:user]; + } + [[NSNotificationCenter defaultCenter] postNotificationName:PFSignUpSuccessNotification object:self]; +} + +- (void)_signUpDidFailWithError:(NSError *)error { + if (_delegateExistingMethods.didFailToSignUp) { + [_delegate signUpViewController:self didFailToSignUpWithError:error]; + } + [[NSNotificationCenter defaultCenter] postNotificationName:PFSignUpFailureNotification object:self]; + + NSString *title = NSLocalizedString(@"Sign Up Error", @"Sign Up Error"); + + if ([[error domain] isEqualToString:PFParseErrorDomain]) { + NSInteger errorCode = [error code]; + NSString *message = nil; + UIResponder *responder = nil; + + if (errorCode == kPFErrorInvalidEmailAddress) { + message = NSLocalizedString(@"The email address is invalid. Please enter a valid email.", + @"Invalid email address error message in PFSignUpViewControllers"); + responder = _signUpView.emailField ?: _signUpView.usernameField; + } else if (errorCode == kPFErrorUsernameMissing) { + message = NSLocalizedString(@"Please enter a username.", + @"Username missing error message in PFSignUpViewController"); + responder = _signUpView.usernameField; + } else if (errorCode == kPFErrorUserPasswordMissing) { + message = NSLocalizedString(@"Please enter a password.", + @"Password missing error message in PFSignUpViewController"); + responder = _signUpView.passwordField; + } else if (errorCode == kPFErrorUsernameTaken) { + NSString *format = NSLocalizedString(@"The username '%@' is taken. Please try choosing a different username.", + @"Username taken error format in PFSignUpViewController"); + message = [NSString stringWithFormat:format, _signUpView.usernameField.text]; + responder = _signUpView.usernameField; + } else if (error.code == kPFErrorUserEmailTaken) { + NSString *format = NSLocalizedString(@"The email '%@' is taken. Please try using a different email.", + @"Email is taken error format in PFSignUpViewController."); + UITextField *textField = self.emailAsUsername ? _signUpView.usernameField : _signUpView.emailField; + + message = [NSString stringWithFormat:format, textField.text]; + responder = textField; + } else if (error.code == kPFErrorUserEmailMissing) { + message = NSLocalizedString(@"Please enter an email.", + @"Email missing error message in PFSignUpViewController"); + responder = _signUpView.emailField; + } + + if (message != nil) { + [PFUIAlertView showAlertViewWithTitle:title message:message]; + [responder becomeFirstResponder]; + + return; + } + } + + // Show the generic error alert, as no custom cases matched before + [PFUIAlertView showAlertViewWithTitle:title error:error]; +} + +- (void)_cancelSignUp { + if (_delegateExistingMethods.didCancelSignUp) { + [_delegate signUpViewControllerDidCancelSignUp:self]; + } + [[NSNotificationCenter defaultCenter] postNotificationName:PFSignUpCancelNotification object:self]; +} + +- (UIView *)_currentFirstResponder { + if ([_signUpView.usernameField isFirstResponder]) { + return _signUpView.usernameField; + } + if ([_signUpView.passwordField isFirstResponder]) { + return _signUpView.passwordField; + } + if ([_signUpView.emailField isFirstResponder]) { + return _signUpView.emailField; + } + if ([_signUpView.additionalField isFirstResponder]) { + return _signUpView.additionalField; + } + + return nil; +} + +#pragma mark Keyboard + +- (void)_dismissKeyboard { + [self.view endEditing:YES]; +} + +- (void)_registerForKeyboardNotifications { + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(_keyboardWillShow:) + name:UIKeyboardWillShowNotification + object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(_keyboardWillHide:) + name:UIKeyboardWillHideNotification object:nil]; +} + +- (void)_keyboardWillShow:(NSNotification *)notification { + NSDictionary *userInfo = [notification userInfo]; + CGRect endFrame = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; + CGFloat duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]; + UIViewAnimationCurve curve = [userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]; + + CGRect keyboardFrame = [self.view convertRect:endFrame fromView:self.view.window]; + CGFloat visibleKeyboardHeight = CGRectGetMaxY(self.view.bounds) - CGRectGetMinY(keyboardFrame); + + [self setVisibleKeyboardHeight:visibleKeyboardHeight + animationDuration:duration + animationOptions:curve << 16]; +} + +- (void)_keyboardWillHide:(NSNotification *)notification { + NSDictionary *userInfo = [notification userInfo]; + CGFloat duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]; + UIViewAnimationCurve curve = [userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]; + [self setVisibleKeyboardHeight:0.0 + animationDuration:duration + animationOptions:curve << 16]; +} + +- (void)setVisibleKeyboardHeight:(CGFloat)visibleKeyboardHeight + animationDuration:(NSTimeInterval)animationDuration + animationOptions:(UIViewAnimationOptions)animationOptions { + + dispatch_block_t animationsBlock = ^{ + self.visibleKeyboardHeight = visibleKeyboardHeight; + }; + + if (animationDuration == 0.0) { + animationsBlock(); + } else { + [UIView animateWithDuration:animationDuration + delay:0.0 + options:animationOptions | UIViewAnimationOptionBeginFromCurrentState + animations:animationsBlock + completion:nil]; + } +} + +- (void)setVisibleKeyboardHeight:(CGFloat)visibleKeyboardHeight { + if (self.visibleKeyboardHeight != visibleKeyboardHeight) { + _visibleKeyboardHeight = visibleKeyboardHeight; + [self _updateSignUpViewContentOffsetAnimated:NO]; + } +} + +- (void)_updateSignUpViewContentOffsetAnimated:(BOOL)animated { + CGPoint contentOffset = CGPointZero; + if (self.visibleKeyboardHeight > 0.0f) { + // Scroll the view to keep fields visible + CGFloat offsetForScrollingTextFieldToTop = CGRectGetMinY([self _currentFirstResponder].frame); + + UIView *lowestView; + if (_signUpView.signUpButton) { + lowestView = _signUpView.signUpButton; + } else if (_signUpView.additionalField) { + lowestView = _signUpView.additionalField; + } else if (_signUpView.emailField) { + lowestView = _signUpView.emailField; + } else { + lowestView = _signUpView.passwordField; + } + + CGFloat offsetForScrollingLowestViewToBottom = 0.0f; + offsetForScrollingLowestViewToBottom += self.visibleKeyboardHeight; + offsetForScrollingLowestViewToBottom += CGRectGetMaxY(lowestView.frame); + offsetForScrollingLowestViewToBottom -= CGRectGetHeight(_signUpView.bounds); + + if (offsetForScrollingLowestViewToBottom < 0) { + return; // No scrolling required + } + + contentOffset = CGPointMake(0.0f, MIN(offsetForScrollingTextFieldToTop, + offsetForScrollingLowestViewToBottom)); + } + + [_signUpView setContentOffset:contentOffset animated:animated]; +} + +#pragma mark - +#pragma mark Accessors + +- (void)setLoading:(BOOL)loading { + if (self.loading != loading) { + _loading = loading; + + _signUpView.usernameField.enabled = !self.loading; + _signUpView.passwordField.enabled = !self.loading; + _signUpView.emailField.enabled = !self.loading; + _signUpView.additionalField.enabled = !self.loading; + _signUpView.dismissButton.enabled = !self.loading; + } +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.h new file mode 100644 index 0000000..368b3d6 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import + +PFUI_ASSUME_NONNULL_BEGIN + +typedef void(^PFImageViewImageResultBlock)(UIImage *PFUI_NULLABLE_S image, NSError *PFUI_NULLABLE_S error); + +@class BFTask; +@class PFFile; + +/*! + An image view that downloads and displays remote image stored on Parse's server. + */ +@interface PFImageView : UIImageView + +/*! + @abstract The remote file on Parse's server that stores the image. + + @warning Note that the download does not start until is called. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong) PFFile *file; + +/*! + @abstract Initiate downloading of the remote image. + + @discussion Once the download completes, the remote image will be displayed. + + @returns The task, that encapsulates the work being done. + */ +- (BFTask *)loadInBackground; + +/*! + @abstract Initiate downloading of the remote image. + + @discussion Once the download completes, the remote image will be displayed. + + @param completion the completion block. + */ +- (void)loadInBackground:(PFUI_NULLABLE PFImageViewImageResultBlock)completion; + +/*! + @abstract Initiate downloading of the remote image. + + @discussion Once the download completes, the remote image will be displayed. + + @param completion the completion block. + @param progressBlock called with the download progress as the image is being downloaded. + Will be called with a value of 100 before the completion block is called. + */ +- (void)loadInBackground:(PFUI_NULLABLE PFImageViewImageResultBlock)completion + progressBlock:(PFUI_NULLABLE void (^)(int percentDone))progressBlock; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.m new file mode 100644 index 0000000..fe44076 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.m @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFImageView.h" + +#import + +#import + +#import "PFImageCache.h" + +@implementation PFImageView + +#pragma mark - +#pragma mark Accessors + +- (void)setFile:(PFFile *)otherFile { + // Here we don't check (file != otherFile) + // because self.image needs to be updated regardless. + // setFile: could have altered self.image + _file = otherFile; + NSURL *url = [NSURL URLWithString:self.file.url]; + UIImage *cachedImage = [[PFImageCache sharedCache] imageForURL:url]; + if (cachedImage) { + self.image = cachedImage; + } +} + +#pragma mark - +#pragma mark Load + +- (BFTask *)loadInBackground { + BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; + [self loadInBackground:^(UIImage *image, NSError *error) { + if (error) { + [source trySetError:error]; + } else { + [source trySetResult:image]; + } + }]; + return source.task; +} + + +- (void)loadInBackground:(void (^)(UIImage *, NSError *))completion { + [self loadInBackground:completion progressBlock:nil]; +} + +- (void)loadInBackground:(void (^)(UIImage *, NSError *))completion progressBlock:(PFProgressBlock)progressBlock { + if (!self.file) { + // When there is nothing to load, the user just wants to display + // the placeholder image. I think the better design decision is + // to return with no error, to simplify caller logic. (arguable) + if (completion) { + completion(nil, nil); + } + return; + } + + if (!self.file.url) { + // The file has not been saved. + if (completion) { + NSError *error = [NSError errorWithDomain:PFParseErrorDomain code:kPFErrorUnsavedFile userInfo:nil]; + completion(nil, error); + } + return; + } + + NSURL *url = [NSURL URLWithString:self.file.url]; + if (url) { + UIImage *cachedImage = [[PFImageCache sharedCache] imageForURL:url]; + if (cachedImage) { + self.image = cachedImage; + + if (progressBlock) { + progressBlock(100); + } + if (completion) { + completion(cachedImage, nil); + } + return; + } + } + + + PFFile *file = _file; + [_file getDataInBackgroundWithBlock:^(NSData *data, NSError *error) { + if (error) { + if (completion) { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(nil, error); + }); + } + return; + } + + // We dispatch to a background queue to offload the work to decode data into image + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ + UIImage *image = [UIImage imageWithData:data]; + if (!image) { + if (completion) { + NSError *invalidDataError = [NSError errorWithDomain:PFParseErrorDomain + code:kPFErrorInvalidImageData + userInfo:nil]; + dispatch_async(dispatch_get_main_queue(), ^{ + completion(nil, invalidDataError); + }); + } + return; + } + + dispatch_async(dispatch_get_main_queue(), ^{ + // check if a latter issued loadInBackground has not replaced the file being loaded + if (file == _file) { + self.image = image; + } + + if (completion) { + completion(image, nil); + } + }); + + if (url) { + // We always want to store the image in the cache. + // In previous checks we've verified neither key nor value is nil. + [[PFImageCache sharedCache] setImage:image forURL:url]; + } + }); + } progressBlock:progressBlock]; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.h b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.h new file mode 100644 index 0000000..5bfb168 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import + +#import + +PFUI_ASSUME_NONNULL_BEGIN + +/*! + `PFTextFieldSeparatorStyle` bitmask specifies the style of the separators, + that should be used for a given `PFTextField`. + + @see PFTextField + */ +typedef NS_OPTIONS(uint8_t, PFTextFieldSeparatorStyle){ + /*! No separators are visible. */ + PFTextFieldSeparatorStyleNone = 0, + /*! Separator on top of the text field. */ + PFTextFieldSeparatorStyleTop = 1 << 0, + /*! Separator at the bottom of the text field. */ + PFTextFieldSeparatorStyleBottom = 1 << 1 +}; + +/*! + `PFTextField` class serves as a stylable subclass of `UITextField`. + It includes styles that are specific to `ParseUI` framework and allows advanced customization. + */ +@interface PFTextField : UITextField + +/*! + @abstract Separator style bitmask that should be applied to this textfield. + + @discussion Default: + + @see PFTextFieldSeparatorStyle + */ +@property (nonatomic, assign) PFTextFieldSeparatorStyle separatorStyle; + +/*! + @abstract Color that should be used for the separators, if they are visible. + + @discussion Default: `227,227,227,1.0`. + */ +@property (PFUI_NULLABLE_PROPERTY nonatomic, strong) UIColor *separatorColor UI_APPEARANCE_SELECTOR; + +/*! + This method is a convenience initializer that sets both `frame` and `separatorStyle` for an instance of `PFTextField.` + + @param frame The frame rectangle for the view, measured in points. + @param separatorStyle Initial separator style to use. + + @return An initialized instance of `PFTextField` or `nil` if it couldn't be created. + */ +- (instancetype)initWithFrame:(CGRect)frame separatorStyle:(PFTextFieldSeparatorStyle)separatorStyle; + +@end + +PFUI_ASSUME_NONNULL_END diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.m b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.m new file mode 100644 index 0000000..7372cd5 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.m @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import "PFTextField.h" + +#import "PFColor.h" + +@implementation PFTextField + +#pragma mark - +#pragma mark Init + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (!self) return nil; + + self.backgroundColor = [PFColor textFieldBackgroundColor]; + self.textColor = [PFColor textFieldTextColor]; + + self.font = [UIFont systemFontOfSize:17.0f]; + + self.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; + + _separatorColor = [PFColor textFieldSeparatorColor]; + + return self; +} + +- (instancetype)initWithFrame:(CGRect)frame separatorStyle:(PFTextFieldSeparatorStyle)separatorStyle { + self = [self initWithFrame:frame]; + if (!self) return nil; + + _separatorStyle = separatorStyle; + + return self; +} + +#pragma mark - +#pragma mark Accessors + +- (void)setPlaceholder:(NSString *)placeholder { + NSDictionary *attributes = @{ NSForegroundColorAttributeName : [PFColor textFieldPlaceholderColor] }; + self.attributedPlaceholder = [[NSAttributedString alloc] initWithString:placeholder attributes:attributes]; +} + +- (void)setSeparatorStyle:(PFTextFieldSeparatorStyle)separatorStyle { + if (self.separatorStyle != separatorStyle) { + _separatorStyle = separatorStyle; + [self setNeedsDisplay]; + } +} + +#pragma mark - +#pragma mark Drawing + +- (void)drawRect:(CGRect)rect { + [super drawRect:rect]; + + const CGRect bounds = self.bounds; + CGContextRef context = UIGraphicsGetCurrentContext(); + + if (self.separatorStyle != PFTextFieldSeparatorStyleNone) { + [self.separatorColor setFill]; + } + + if (self.separatorStyle & PFTextFieldSeparatorStyleTop) { + CGRect borderRect = CGRectMake(0.0f, 0.0f, CGRectGetWidth(bounds), 1.0f); + CGContextFillRect(context, borderRect); + } + + if (self.separatorStyle & PFTextFieldSeparatorStyleBottom) { + CGRect borderRect = CGRectMake(0.0f, CGRectGetMaxY(bounds) - 1.0f, CGRectGetWidth(bounds), 1.0f); + CGContextFillRect(context, borderRect); + } +} + +#pragma mark - +#pragma mark Frame + +- (CGRect)textRectForBounds:(CGRect)bounds { + return CGRectMake(20.0f, 0.0f, CGRectGetWidth(bounds) - 30.0f, CGRectGetHeight(bounds)); +} + +- (CGRect)placeholderRectForBounds:(CGRect)bounds { + return [self textRectForBounds:bounds]; +} + +- (CGRect)editingRectForBounds:(CGRect)bounds { + return [self textRectForBounds:bounds]; +} + +#pragma mark - +#pragma mark Sizing + +- (CGSize)sizeThatFits:(CGSize)boundingSize { + CGSize size = CGSizeZero; + size.width = boundingSize.width; + size.height = MIN(44.0f, boundingSize.height); + return size; +} + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Generated/PFResources.h b/BreakingBad/Pods/ParseUI/ParseUI/Generated/PFResources.h new file mode 100644 index 0000000..d0f002e --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Generated/PFResources.h @@ -0,0 +1,13 @@ +// This is an auto-generated file. +#import +@interface PFResources : NSObject ++ (NSData *)facebook_icon_png;//modified:2015-10-15 16:27:03 -0400 ++ (NSData *)facebook_icon2x_png;//modified:2015-10-15 16:27:03 -0400 ++ (NSData *)facebook_icon3x_png;//modified:2015-10-15 16:27:03 -0400 ++ (NSData *)parse_logo_png;//modified:2015-10-15 16:27:03 -0400 ++ (NSData *)parse_logo2x_png;//modified:2015-10-15 16:27:03 -0400 ++ (NSData *)parse_logo3x_png;//modified:2015-10-15 16:27:03 -0400 ++ (NSData *)twitter_icon_png;//modified:2015-10-15 16:27:03 -0400 ++ (NSData *)twitter_icon2x_png;//modified:2015-10-15 16:27:03 -0400 ++ (NSData *)twitter_icon3x_png;//modified:2015-10-15 16:27:03 -0400 +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Generated/PFResources.m b/BreakingBad/Pods/ParseUI/ParseUI/Generated/PFResources.m new file mode 100644 index 0000000..5475765 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Generated/PFResources.m @@ -0,0 +1,76 @@ +// This is an auto-generated file. +#import "PFResources.h" +@implementation PFResources + const unsigned char facebook_icon_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x16, 0x0, 0x0, 0x0, 0x16, 0x8, 0x6, 0x0, 0x0, 0x0, 0xc4, 0xb4, 0x6c, 0x3b, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9, 0x65, 0x3c, 0x0, 0x0, 0x3, 0x23, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x35, 0x2d, 0x63, 0x30, 0x31, 0x34, 0x20, 0x37, 0x39, 0x2e, 0x31, 0x35, 0x31, 0x34, 0x38, 0x31, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2f, 0x30, 0x33, 0x2f, 0x31, 0x33, 0x2d, 0x31, 0x32, 0x3a, 0x30, 0x39, 0x3a, 0x31, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x43, 0x20, 0x28, 0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x29, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x46, 0x34, 0x42, 0x46, 0x44, 0x38, 0x36, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x46, 0x34, 0x42, 0x46, 0x44, 0x38, 0x37, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x46, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x38, 0x30, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, 0x3f, 0x3e, 0x98, 0x50, 0xa6, 0xc2, 0x0, 0x0, 0x1, 0x78, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x62, 0xd8, 0xbc, 0x79, 0xf3, 0x9a, 0xbf, 0x7f, 0xff, 0x7e, 0xff, 0xff, 0xff, 0xff, 0xf, 0x6a, 0xe0, 0x7f, 0xff, 0xfe, 0x7d, 0xdf, 0xb5, 0x6b, 0xd7, 0x26, 0x46, 0x20, 0xe7, 0x2f, 0x3, 0x3, 0x3, 0x13, 0x3, 0x95, 0x1, 0xc8, 0xc0, 0x3f, 0xc, 0xd4, 0x7, 0x7f, 0x59, 0xc8, 0xd1, 0xf5, 0xf9, 0xf3, 0xe7, 0xf, 0x6b, 0xd7, 0xae, 0x5d, 0x75, 0xf6, 0xec, 0xd9, 0x73, 0xbf, 0x7f, 0xff, 0xfe, 0xc9, 0xc1, 0xc1, 0xc1, 0xe5, 0xe1, 0xe1, 0xe1, 0xe, 0xc4, 0x7e, 0x70, 0x45, 0xc0, 0xa0, 0xf8, 0xf9, 0x9f, 0x4, 0x70, 0xef, 0xde, 0xbd, 0x5b, 0x3a, 0x3a, 0x3a, 0x1a, 0xe8, 0x96, 0x65, 0x65, 0x65, 0x25, 0x21, 0x29, 0xfb, 0x43, 0x72, 0xd8, 0xe6, 0xe4, 0xe4, 0x64, 0x5d, 0xb9, 0x72, 0xe5, 0x6, 0x16, 0x29, 0x46, 0x64, 0xe, 0x49, 0x41, 0xf1, 0xe8, 0xd1, 0xa3, 0x7b, 0x7b, 0xf6, 0xec, 0x39, 0x0, 0xe3, 0xeb, 0xeb, 0xeb, 0x6b, 0x45, 0x46, 0x46, 0x46, 0x70, 0x73, 0x73, 0x73, 0x18, 0x1a, 0x1a, 0x1a, 0xa1, 0x28, 0x26, 0x25, 0x28, 0x4e, 0x9e, 0x3c, 0x79, 0x18, 0x59, 0xef, 0x91, 0x23, 0x47, 0xf6, 0xe1, 0x50, 0x4a, 0x5a, 0x50, 0x30, 0x32, 0xa2, 0xf8, 0x96, 0x41, 0x0, 0x8, 0xf0, 0x25, 0x37, 0xa2, 0x1, 0x33, 0x33, 0x33, 0xba, 0xfa, 0xff, 0xb8, 0xd4, 0x12, 0xc, 0xe3, 0x97, 0x2f, 0x5f, 0x3e, 0xf, 0xb, 0xb, 0xb, 0xf9, 0xf9, 0xf3, 0xe7, 0xef, 0x2f, 0x5f, 0xbe, 0x7c, 0x46, 0x96, 0x3, 0x86, 0x6f, 0x2c, 0x17, 0x17, 0x17, 0x37, 0x88, 0x5d, 0x55, 0x55, 0x55, 0xee, 0xe7, 0xe7, 0x17, 0x4c, 0xb4, 0xc1, 0x40, 0x3, 0x7f, 0x1c, 0x3a, 0x74, 0xe8, 0x18, 0x36, 0xb9, 0xcb, 0x97, 0x2f, 0x5f, 0xc3, 0xe5, 0x1b, 0x82, 0x41, 0x1, 0x8a, 0x9, 0x62, 0x82, 0x49, 0x5e, 0x5e, 0x5e, 0x81, 0xa4, 0xa0, 0x10, 0x14, 0x14, 0x14, 0xea, 0xe8, 0xe8, 0x68, 0xfd, 0x3, 0x4, 0x4f, 0x9e, 0x3c, 0x79, 0x38, 0x63, 0xc6, 0x8c, 0x79, 0x48, 0x69, 0x3a, 0x4d, 0x42, 0x42, 0x42, 0x9a, 0x8d, 0x8d, 0x8d, 0x55, 0x51, 0x51, 0x51, 0x99, 0xec, 0xe4, 0x76, 0xed, 0xda, 0xb5, 0x73, 0xc8, 0x7a, 0xef, 0xde, 0xbd, 0x7b, 0x9d, 0x2a, 0xc9, 0xd, 0x18, 0x79, 0x5f, 0xd1, 0xf8, 0x5f, 0xa8, 0x92, 0xdc, 0x48, 0x2d, 0x36, 0x47, 0xd, 0x86, 0x1b, 0x4c, 0x74, 0x9, 0x47, 0x64, 0x92, 0x6, 0xe7, 0x17, 0xa6, 0xdd, 0xbb, 0x77, 0x6f, 0x5, 0x6a, 0xf8, 0x5, 0xad, 0xa2, 0x88, 0xc1, 0xc8, 0x16, 0x61, 0xc8, 0x3, 0xc5, 0x7e, 0x1f, 0x3c, 0x78, 0x70, 0x17, 0x40, 0x80, 0x1, 0x0, 0x86, 0x7f, 0xa9, 0xd0, 0x39, 0x35, 0xd1, 0x78, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; + + + + + (NSData *)facebook_icon_png { + return [NSData dataWithBytes:facebook_icon_png length:sizeof(facebook_icon_png)]; + } + + const unsigned char facebook_icon2x_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x2c, 0x0, 0x0, 0x0, 0x2c, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1e, 0x84, 0x5a, 0x1, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9, 0x65, 0x3c, 0x0, 0x0, 0x3, 0x23, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x35, 0x2d, 0x63, 0x30, 0x31, 0x34, 0x20, 0x37, 0x39, 0x2e, 0x31, 0x35, 0x31, 0x34, 0x38, 0x31, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2f, 0x30, 0x33, 0x2f, 0x31, 0x33, 0x2d, 0x31, 0x32, 0x3a, 0x30, 0x39, 0x3a, 0x31, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x43, 0x20, 0x28, 0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x29, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x44, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x45, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x42, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x43, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, 0x3f, 0x3e, 0x64, 0xec, 0x39, 0x7f, 0x0, 0x0, 0x2, 0x9a, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec, 0x97, 0xcf, 0x8f, 0xd2, 0x40, 0x14, 0xc7, 0x99, 0x96, 0xd2, 0xf2, 0x63, 0xbb, 0x18, 0x10, 0x83, 0x42, 0x14, 0x12, 0x4f, 0x12, 0xaf, 0x60, 0xbc, 0x60, 0xf8, 0x2f, 0x8c, 0x81, 0x4, 0x88, 0x5c, 0xbc, 0x7a, 0xf2, 0x60, 0xb8, 0xb0, 0x7f, 0x0, 0xc6, 0x13, 0x7, 0xc2, 0xdd, 0x83, 0x37, 0xc2, 0xca, 0x9, 0x3, 0x44, 0x8d, 0x82, 0x31, 0x21, 0x1c, 0x48, 0x5c, 0x12, 0x48, 0x38, 0xd8, 0x8, 0xba, 0x14, 0x97, 0xa5, 0xf8, 0x6a, 0x62, 0xb2, 0x36, 0x9d, 0x2e, 0x34, 0xed, 0xb2, 0x8d, 0x7d, 0xc9, 0x24, 0x4d, 0xdf, 0xcc, 0x9b, 0x4f, 0xa7, 0x6f, 0xde, 0x7c, 0x7, 0x5, 0x2, 0x1, 0x5f, 0xa9, 0x54, 0x7a, 0x19, 0x8f, 0xc7, 0x1f, 0xd0, 0x34, 0x4d, 0x5a, 0x2e, 0xa1, 0x2d, 0x97, 0x4b, 0xe1, 0x1d, 0x58, 0x36, 0x9b, 0xcd, 0x59, 0xaa, 0xd5, 0xea, 0xab, 0xb5, 0x41, 0xac, 0xdd, 0x6e, 0x1f, 0x22, 0x41, 0x10, 0x7e, 0x20, 0x84, 0x5c, 0x16, 0x63, 0xd8, 0x9, 0x2, 0xf0, 0x29, 0x3c, 0xb0, 0x6, 0x1, 0x5e, 0x88, 0xc0, 0xdf, 0xe1, 0x61, 0xdf, 0x20, 0xc0, 0xbc, 0x9, 0xbc, 0xd1, 0x7f, 0x5d, 0x2c, 0x66, 0xc3, 0xe1, 0xf0, 0x2b, 0xc7, 0x71, 0xdf, 0x4e, 0xc1, 0xec, 0x76, 0x3b, 0x45, 0x92, 0x24, 0xe3, 0x72, 0xb9, 0x9c, 0x2c, 0xcb, 0xee, 0x7b, 0xbd, 0xde, 0xeb, 0x4, 0x41, 0x58, 0xe5, 0x80, 0x2d, 0x22, 0xf0, 0x45, 0xed, 0xf2, 0x6e, 0xb7, 0xdb, 0xcc, 0xe5, 0x72, 0x8f, 0xc2, 0xe1, 0xf0, 0xd, 0x8a, 0xa2, 0x90, 0x94, 0xc6, 0x66, 0xb3, 0x21, 0x8f, 0xc7, 0xe3, 0x18, 0xc, 0x6, 0x9f, 0x31, 0x21, 0xe6, 0x17, 0x6, 0x5c, 0x28, 0x14, 0x9e, 0x31, 0xc, 0x43, 0x6c, 0xf2, 0x7, 0xfa, 0xfd, 0xfe, 0xa7, 0x9d, 0x2, 0xe7, 0xf3, 0xf9, 0xa7, 0x9b, 0xa6, 0x8b, 0xd5, 0x6a, 0xdd, 0x2d, 0x30, 0x14, 0xfb, 0x37, 0xdb, 0xe4, 0xf7, 0x79, 0xc0, 0x84, 0xde, 0x1b, 0xec, 0x0, 0x6c, 0x9b, 0xfe, 0xb0, 0x7, 0xc5, 0x45, 0x5c, 0x63, 0x3f, 0x48, 0x4f, 0xd8, 0xc9, 0x64, 0x72, 0x54, 0xaf, 0xd7, 0xdf, 0x2a, 0xf5, 0xf1, 0xf9, 0x7c, 0x62, 0x55, 0x70, 0x43, 0x95, 0x40, 0x7f, 0x57, 0x18, 0x72, 0x9d, 0xc6, 0xe, 0xd0, 0x33, 0x25, 0x6a, 0xb5, 0xda, 0x6b, 0xdc, 0xbc, 0x4e, 0xa7, 0x93, 0x2e, 0x97, 0xcb, 0x45, 0x28, 0x6d, 0xe3, 0xd5, 0x6a, 0x35, 0x87, 0xee, 0xfc, 0x99, 0x26, 0xe0, 0x52, 0x42, 0xd7, 0x15, 0x1e, 0x8d, 0x46, 0x43, 0x9c, 0x2f, 0x93, 0xc9, 0x3c, 0x4c, 0xa5, 0x52, 0x4f, 0xb6, 0x8d, 0xa9, 0x6b, 0xe, 0x43, 0x3e, 0x2e, 0x70, 0xbe, 0x58, 0x2c, 0x76, 0x4f, 0x4d, 0x4c, 0x5d, 0x81, 0x41, 0x5, 0x62, 0x7d, 0xa0, 0xbd, 0x6d, 0x97, 0xe, 0x58, 0xc9, 0x40, 0xd6, 0xae, 0xd, 0x5, 0xac, 0xd6, 0x74, 0x5, 0x6, 0x51, 0xc3, 0xe0, 0x7c, 0xe, 0x87, 0xc3, 0xae, 0x2a, 0xcd, 0xb4, 0x50, 0x6b, 0xe3, 0xf1, 0xf8, 0xe8, 0x39, 0x98, 0x34, 0x36, 0x9c, 0x58, 0x5f, 0x1a, 0x8d, 0xc6, 0x7, 0xb9, 0x31, 0x89, 0x44, 0xe2, 0x7e, 0x28, 0x14, 0xba, 0x2d, 0x56, 0xd6, 0xb3, 0xef, 0xe1, 0x8e, 0x79, 0xd, 0x42, 0x1d, 0x60, 0x16, 0x53, 0x1b, 0xb5, 0x6, 0x2a, 0xec, 0xbd, 0x56, 0x7f, 0x25, 0x1a, 0x8d, 0xde, 0x55, 0x98, 0x4a, 0x9b, 0xa3, 0x19, 0xb4, 0x2b, 0xa1, 0x54, 0x11, 0xb6, 0xb1, 0x48, 0x24, 0x72, 0xc7, 0x50, 0x9b, 0xe, 0xd2, 0xe4, 0x96, 0x9, 0x2c, 0xa3, 0x47, 0x94, 0x4, 0xd6, 0x56, 0x16, 0xc, 0x6, 0x6f, 0x2a, 0xca, 0x4f, 0x2d, 0x26, 0x81, 0xab, 0xd, 0xe5, 0xf7, 0xfb, 0xaf, 0x4a, 0xa1, 0x79, 0x9e, 0x9f, 0x4f, 0xa7, 0xd3, 0x63, 0xb9, 0x31, 0x6e, 0xb7, 0x7b, 0xf, 0x54, 0xd9, 0x3f, 0x65, 0x4f, 0xbc, 0x36, 0x9d, 0x7, 0xac, 0x49, 0x95, 0x0, 0xb5, 0x75, 0xa, 0x60, 0x9c, 0xb4, 0x15, 0x8b, 0xc5, 0x3c, 0x6e, 0xde, 0x4a, 0xa5, 0xf2, 0x42, 0xda, 0x7f, 0x36, 0x9b, 0x71, 0xa, 0x4a, 0x4d, 0x3b, 0xb5, 0x6, 0x45, 0x82, 0x84, 0xdb, 0xee, 0x15, 0xe9, 0x7b, 0xb8, 0x5, 0xef, 0xe1, 0xc6, 0x80, 0x8f, 0x95, 0x1b, 0xb3, 0xd3, 0x93, 0xe, 0x56, 0x7e, 0xa5, 0xc6, 0x67, 0x6a, 0x9, 0x13, 0xd8, 0x4, 0x36, 0x81, 0x4d, 0x60, 0x13, 0xf8, 0xff, 0x6, 0x46, 0x6, 0xe2, 0x45, 0x22, 0x30, 0x69, 0x20, 0x60, 0x92, 0x68, 0xb5, 0x5a, 0x4d, 0x3d, 0x57, 0x44, 0xa5, 0x4f, 0xd6, 0x7a, 0xbd, 0xde, 0x47, 0x22, 0x9d, 0x4e, 0x3f, 0x6, 0xe8, 0x43, 0x10, 0x4f, 0x3f, 0xff, 0x5c, 0xa3, 0xb5, 0x6d, 0x27, 0xa, 0xf3, 0xff, 0xda, 0x34, 0x8e, 0x20, 0x8, 0xc7, 0x9d, 0x4e, 0xa7, 0x99, 0x4c, 0x26, 0xd3, 0xbf, 0x5, 0x18, 0x0, 0x98, 0xef, 0x3, 0xa7, 0xc, 0x73, 0xce, 0xd3, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; + + + + + (NSData *)facebook_icon2x_png { + return [NSData dataWithBytes:facebook_icon2x_png length:sizeof(facebook_icon2x_png)]; + } + + const unsigned char facebook_icon3x_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x42, 0x0, 0x0, 0x0, 0x42, 0x8, 0x6, 0x0, 0x0, 0x0, 0xe3, 0x54, 0x0, 0xe8, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9, 0x65, 0x3c, 0x0, 0x0, 0x3, 0x23, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x35, 0x2d, 0x63, 0x30, 0x31, 0x34, 0x20, 0x37, 0x39, 0x2e, 0x31, 0x35, 0x31, 0x34, 0x38, 0x31, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2f, 0x30, 0x33, 0x2f, 0x31, 0x33, 0x2d, 0x31, 0x32, 0x3a, 0x30, 0x39, 0x3a, 0x31, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x43, 0x20, 0x28, 0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x29, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x39, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x41, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x37, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x38, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, 0x3f, 0x3e, 0x90, 0x6f, 0x2b, 0x47, 0x0, 0x0, 0x3, 0x4d, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec, 0x9c, 0xdf, 0x4b, 0x53, 0x61, 0x18, 0xc7, 0xcf, 0x39, 0x9b, 0x4e, 0xdc, 0x28, 0x6d, 0xb3, 0xd4, 0xd9, 0x36, 0x1c, 0x4a, 0x2c, 0x49, 0xa2, 0x1b, 0x17, 0x24, 0xde, 0xc8, 0x48, 0x85, 0xa3, 0x5e, 0xf4, 0x17, 0x94, 0xd2, 0xa5, 0x5e, 0x8c, 0x6, 0x42, 0x41, 0x46, 0x30, 0x6, 0x61, 0x74, 0x57, 0xd7, 0x43, 0x2f, 0x92, 0xae, 0x84, 0x89, 0x45, 0x9b, 0x3f, 0x82, 0x5, 0xf9, 0xa3, 0x99, 0x76, 0xe3, 0x61, 0x3, 0x65, 0x84, 0xc2, 0xf4, 0xa0, 0xec, 0x6c, 0x3b, 0x3b, 0x3d, 0xcb, 0x6e, 0xba, 0x48, 0x5f, 0x73, 0x9c, 0xce, 0xf6, 0x3e, 0xf, 0x1c, 0x36, 0xb6, 0x67, 0xe7, 0x3d, 0xfb, 0xec, 0xf9, 0xf1, 0x7d, 0xde, 0x3, 0x63, 0x19, 0x30, 0x97, 0xcb, 0x65, 0xb, 0x4, 0x2, 0xcf, 0xdc, 0x6e, 0xf7, 0x9d, 0x9a, 0x9a, 0x1a, 0x3, 0xbc, 0xa4, 0x30, 0xe5, 0x6d, 0xec, 0xe1, 0xe1, 0x61, 0xf6, 0xb, 0xd8, 0xd8, 0xd8, 0xd8, 0xe3, 0x48, 0x24, 0xb2, 0x5a, 0x80, 0x60, 0xdf, 0xda, 0xda, 0x8a, 0x29, 0x94, 0x5a, 0x2a, 0x95, 0xda, 0xe9, 0xea, 0xea, 0xba, 0xc9, 0x84, 0x42, 0xa1, 0xa0, 0x42, 0xb9, 0xad, 0xac, 0xac, 0x7c, 0x60, 0x45, 0x51, 0xdc, 0x36, 0x99, 0x4c, 0x8d, 0xc, 0xc5, 0x96, 0xcf, 0xe7, 0xf, 0x38, 0x80, 0xc0, 0x31, 0x94, 0x1b, 0xc7, 0x71, 0x2c, 0x47, 0x41, 0x61, 0x24, 0x31, 0x85, 0x43, 0x6, 0xbf, 0xa3, 0x2, 0x11, 0x20, 0x88, 0xb2, 0x2, 0x91, 0x83, 0xee, 0x97, 0x85, 0x47, 0xf9, 0xbc, 0x27, 0xd2, 0x97, 0xd0, 0x97, 0xce, 0x80, 0x10, 0x5c, 0x9c, 0x9f, 0x9f, 0xff, 0xb8, 0xbc, 0xbc, 0xbc, 0x9a, 0x48, 0x24, 0xb6, 0x41, 0x1d, 0x8a, 0x70, 0xe4, 0xcd, 0x66, 0xb3, 0xe, 0xde, 0xaf, 0x80, 0xc3, 0x0, 0xcf, 0x8d, 0xd5, 0xd5, 0xd5, 0x17, 0xea, 0xea, 0xea, 0xcc, 0x9d, 0x9d, 0x9d, 0xb7, 0x7, 0x6, 0x6, 0x1e, 0x90, 0x95, 0x4b, 0x45, 0xd9, 0xd1, 0xb8, 0xde, 0x91, 0x82, 0xc1, 0xe0, 0xcb, 0x8e, 0x8e, 0xe, 0xd7, 0x59, 0xc9, 0xf5, 0xf5, 0xf5, 0xb9, 0x9, 0xd7, 0xd8, 0xd7, 0x74, 0x44, 0x8, 0x82, 0xf0, 0x75, 0x68, 0x68, 0xe8, 0xfe, 0xdc, 0xdc, 0x5c, 0xf4, 0x5f, 0x3e, 0xf, 0x91, 0x61, 0x2c, 0xf9, 0xd4, 0x88, 0xc5, 0x62, 0x8b, 0xf0, 0x8b, 0xf2, 0xf1, 0x78, 0x7c, 0x8f, 0xda, 0x62, 0x99, 0x4c, 0x26, 0x5, 0x9e, 0xe7, 0x7, 0xd5, 0x82, 0xa0, 0x59, 0x10, 0xa3, 0xa3, 0xa3, 0xf, 0x61, 0x22, 0xfe, 0x41, 0x75, 0xfb, 0x8c, 0x46, 0xa3, 0x33, 0x93, 0x93, 0x93, 0x21, 0xea, 0x75, 0xc4, 0xc4, 0xc4, 0xc4, 0x2b, 0xa8, 0xe2, 0x74, 0xb, 0xaa, 0x54, 0x2a, 0xb5, 0x3d, 0x3b, 0x3b, 0x1b, 0x2e, 0x9a, 0xf0, 0xc8, 0x64, 0x8e, 0x4a, 0xb2, 0x6b, 0x80, 0x60, 0xfa, 0xbc, 0xbb, 0xbb, 0x4b, 0x7c, 0xf1, 0x6d, 0x6d, 0x6d, 0xf6, 0xfe, 0xfe, 0xfe, 0xbb, 0x2d, 0x2d, 0x2d, 0x2e, 0x10, 0x50, 0x26, 0x96, 0x65, 0xff, 0x90, 0x48, 0xf5, 0xf5, 0xf5, 0xd6, 0x92, 0x4, 0xb1, 0xbe, 0xbe, 0xbe, 0x46, 0xea, 0x3b, 0x3c, 0x3c, 0x3c, 0x8, 0x69, 0xf4, 0xc6, 0x60, 0x30, 0xd4, 0x96, 0x5d, 0x6a, 0x80, 0x6c, 0x4e, 0x90, 0xf8, 0xd9, 0xed, 0x76, 0xb, 0x40, 0x78, 0x5d, 0x2c, 0x8, 0x9a, 0x3, 0x1, 0x73, 0xc3, 0x3e, 0x89, 0x1f, 0xcc, 0x10, 0x6e, 0x80, 0x70, 0xa9, 0x6c, 0x8b, 0x25, 0xe4, 0x38, 0xd1, 0x14, 0xd9, 0xdc, 0xdc, 0x6c, 0xc3, 0x31, 0xbc, 0x50, 0xd8, 0xf4, 0xfa, 0xa, 0x4, 0x71, 0x3c, 0x31, 0x2b, 0x8, 0x82, 0xa6, 0x59, 0x3, 0x41, 0x20, 0x88, 0x63, 0xab, 0xac, 0xac, 0x24, 0x2a, 0x82, 0x55, 0x55, 0x55, 0x86, 0xa2, 0x17, 0x60, 0x15, 0xf7, 0x18, 0xe2, 0xd3, 0xd3, 0xd3, 0x6f, 0x4f, 0xea, 0x9e, 0x20, 0xb1, 0x37, 0x48, 0xce, 0x15, 0x89, 0x44, 0x3e, 0x19, 0x8d, 0xc6, 0x17, 0xcc, 0x29, 0x37, 0xa7, 0x7a, 0x7a, 0x7a, 0x3c, 0xe, 0x87, 0xe3, 0x3a, 0x69, 0x5, 0x56, 0x65, 0xcf, 0x32, 0x1c, 0xe, 0xcf, 0xa8, 0x1d, 0x61, 0xb0, 0xe6, 0x3b, 0xd2, 0x3d, 0x4b, 0xd5, 0x52, 0x43, 0xa7, 0xd3, 0xa9, 0x3a, 0xd7, 0x80, 0xf2, 0x64, 0x6d, 0x36, 0x9b, 0x93, 0xfa, 0x62, 0x69, 0xb1, 0x58, 0x2e, 0xc2, 0x44, 0x7a, 0x85, 0x7a, 0x10, 0xd, 0xd, 0xd, 0x97, 0xa1, 0x8e, 0xd4, 0x52, 0xf, 0xc2, 0x6a, 0xb5, 0x36, 0x9e, 0xa5, 0x19, 0x94, 0x2d, 0x8, 0xe8, 0x16, 0x76, 0x14, 0x54, 0xc7, 0x13, 0xaa, 0x3, 0x41, 0x30, 0xbf, 0x36, 0x6f, 0xb4, 0x9, 0x42, 0x96, 0xe5, 0x9c, 0x9a, 0x20, 0x9a, 0x9a, 0x9a, 0xae, 0x6a, 0x52, 0x59, 0x3a, 0x9d, 0xce, 0x6b, 0x81, 0x40, 0xe0, 0xe9, 0x49, 0xca, 0x12, 0x94, 0x67, 0x70, 0x69, 0x69, 0xe9, 0xdb, 0x69, 0xe7, 0xf2, 0x78, 0x3c, 0xee, 0xee, 0xee, 0xee, 0xde, 0xbf, 0x29, 0x4b, 0xd0, 0x2c, 0x6c, 0x6b, 0x6b, 0xeb, 0x8d, 0xb3, 0xce, 0xf6, 0x9a, 0xb9, 0x1b, 0x3e, 0x32, 0x32, 0x72, 0x8f, 0xe4, 0x9a, 0xfd, 0x7e, 0xbf, 0xb7, 0xc8, 0x4b, 0xef, 0x6b, 0xaa, 0x46, 0x48, 0x92, 0x94, 0x25, 0xf1, 0x4b, 0xa7, 0xd3, 0x12, 0x8e, 0xe1, 0xb8, 0x1f, 0x81, 0x20, 0x10, 0x4, 0x82, 0x40, 0x10, 0x8, 0x2, 0x41, 0x20, 0x8, 0x4, 0x81, 0x20, 0x10, 0x4, 0x82, 0x40, 0x10, 0x8, 0x2, 0x41, 0x20, 0x8, 0x4, 0x51, 0x7e, 0x20, 0x58, 0xc4, 0xc0, 0xb0, 0x9c, 0x24, 0x49, 0x88, 0xa1, 0x10, 0x11, 0x85, 0xbf, 0xe, 0xa0, 0x1d, 0x82, 0x20, 0x8, 0xdf, 0x39, 0xaf, 0xd7, 0xeb, 0x13, 0x45, 0x31, 0xa9, 0x95, 0x10, 0x2d, 0xb2, 0xdf, 0xa9, 0x26, 0xcb, 0xf2, 0x91, 0xcf, 0xe7, 0x7b, 0xa4, 0x5f, 0x58, 0x58, 0x58, 0xe3, 0x79, 0xbe, 0xd7, 0xef, 0xf7, 0x3f, 0x6f, 0x6f, 0x6f, 0xbf, 0x55, 0x1, 0xf6, 0x1f, 0x41, 0x64, 0x9, 0xfd, 0xa, 0xf9, 0x7c, 0x70, 0x9e, 0x85, 0x72, 0xb9, 0x9c, 0xbc, 0xb9, 0xb9, 0xb9, 0x31, 0x3e, 0x3e, 0xfe, 0x64, 0x6a, 0x6a, 0xea, 0xfd, 0x4f, 0x1, 0x6, 0x0, 0xec, 0x28, 0x31, 0x86, 0x11, 0x87, 0xbb, 0xa9, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; + + + + + (NSData *)facebook_icon3x_png { + return [NSData dataWithBytes:facebook_icon3x_png length:sizeof(facebook_icon3x_png)]; + } + + const unsigned char parse_logo_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xde, 0x0, 0x0, 0x0, 0x44, 0x8, 0x6, 0x0, 0x0, 0x0, 0xee, 0x9a, 0x8b, 0x92, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9, 0x65, 0x3c, 0x0, 0x0, 0x3, 0x23, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x35, 0x2d, 0x63, 0x30, 0x31, 0x34, 0x20, 0x37, 0x39, 0x2e, 0x31, 0x35, 0x31, 0x34, 0x38, 0x31, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2f, 0x30, 0x33, 0x2f, 0x31, 0x33, 0x2d, 0x31, 0x32, 0x3a, 0x30, 0x39, 0x3a, 0x31, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x43, 0x20, 0x28, 0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x29, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x44, 0x43, 0x37, 0x45, 0x43, 0x42, 0x35, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x44, 0x43, 0x37, 0x45, 0x43, 0x42, 0x36, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x31, 0x30, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x44, 0x43, 0x37, 0x45, 0x43, 0x42, 0x34, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, 0x3f, 0x3e, 0xf6, 0xc4, 0x10, 0x9d, 0x0, 0x0, 0x11, 0x8e, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec, 0x5d, 0x9, 0x98, 0x54, 0xc5, 0x11, 0xae, 0xdd, 0x9d, 0x5, 0x59, 0x90, 0x9b, 0x5, 0xb9, 0x5, 0x11, 0xf0, 0x2, 0x14, 0x54, 0x54, 0x22, 0x6e, 0x44, 0x3c, 0x50, 0xbc, 0x95, 0xc3, 0x88, 0x9, 0x41, 0x3c, 0x21, 0x1e, 0x68, 0x30, 0x11, 0x8f, 0x18, 0x3c, 0x51, 0x14, 0x13, 0x94, 0x28, 0x26, 0x9e, 0x78, 0x44, 0x12, 0x15, 0x25, 0xe0, 0x89, 0x8a, 0x28, 0x88, 0xa0, 0xe2, 0xe2, 0x2, 0x72, 0xca, 0xd, 0xcb, 0xd, 0x7b, 0xb0, 0xe9, 0xdf, 0xf7, 0xf7, 0x37, 0x9d, 0x9, 0xc8, 0xcc, 0xce, 0x3b, 0xe6, 0x3d, 0xba, 0xbe, 0xaf, 0xbe, 0xe9, 0xd9, 0x9d, 0x79, 0xd3, 0xaf, 0xbb, 0xff, 0xea, 0xaa, 0xea, 0xaa, 0x7a, 0x59, 0xfd, 0xae, 0xbd, 0xe5, 0x55, 0x11, 0x69, 0xa3, 0xb8, 0x5c, 0xfc, 0xa1, 0x2c, 0xc5, 0x6b, 0x15, 0x17, 0x2a, 0xfe, 0x54, 0xf1, 0xc7, 0x8a, 0x97, 0x8b, 0x25, 0x4b, 0x11, 0xa5, 0x8a, 0x8a, 0xa, 0xc5, 0x22, 0xf7, 0xe, 0x1f, 0x2a, 0xcd, 0x9b, 0x1c, 0xf4, 0xd3, 0xdf, 0x62, 0x8a, 0x4f, 0x52, 0xdc, 0x30, 0x80, 0xfe, 0xf4, 0x50, 0x7c, 0x9d, 0xe2, 0x95, 0x8a, 0xa7, 0x29, 0xfe, 0x87, 0xe2, 0xc9, 0x8a, 0xcb, 0xec, 0x54, 0x59, 0x8a, 0x3a, 0x1, 0x78, 0xbb, 0xd9, 0xde, 0xaa, 0x78, 0x1, 0x77, 0x24, 0xcf, 0xc0, 0xaf, 0xb8, 0x8a, 0xe2, 0x3a, 0x8a, 0x1b, 0xf0, 0xf7, 0x21, 0x2, 0x2e, 0x26, 0xcf, 0x54, 0x7c, 0xa7, 0xe2, 0x37, 0xed, 0xd4, 0x58, 0x8a, 0x3a, 0xf0, 0x34, 0xcd, 0x50, 0x7c, 0xaa, 0x4f, 0xbf, 0x59, 0x53, 0x71, 0x63, 0xc5, 0xc7, 0x2a, 0x3e, 0x9b, 0xbb, 0x5f, 0x75, 0xc5, 0x9d, 0x15, 0xbf, 0xa1, 0x78, 0x82, 0xe2, 0x6b, 0x15, 0xaf, 0xb3, 0x53, 0x64, 0x29, 0x8a, 0x94, 0x9d, 0x60, 0x7b, 0xf9, 0x41, 0x50, 0x25, 0x37, 0x28, 0xfe, 0x46, 0xf1, 0xd3, 0x8a, 0xcf, 0x53, 0xdc, 0x41, 0xf1, 0x63, 0x8a, 0x77, 0xf2, 0x33, 0x97, 0xd0, 0xfe, 0xeb, 0x64, 0xa7, 0xc8, 0x52, 0xd4, 0x81, 0x17, 0x24, 0x2d, 0x54, 0x7c, 0xbd, 0xe2, 0xe3, 0x15, 0x4f, 0xe7, 0xdf, 0xe0, 0xf0, 0x79, 0x57, 0x71, 0x81, 0x9d, 0x26, 0x4b, 0x16, 0x78, 0xde, 0xd2, 0x1c, 0xc5, 0xa7, 0x28, 0xfe, 0x2b, 0xdf, 0xc3, 0x16, 0x7c, 0x4d, 0xf1, 0x71, 0x76, 0xaa, 0x2c, 0x59, 0xe0, 0x79, 0x4b, 0xbb, 0x14, 0x5f, 0xad, 0xf8, 0x76, 0xbe, 0xaf, 0xad, 0xf8, 0x45, 0xc5, 0xcd, 0xec, 0x74, 0x59, 0xb2, 0xc0, 0xf3, 0x9e, 0xee, 0x56, 0xfc, 0x0, 0xdb, 0x7, 0x2b, 0xfe, 0x8b, 0x8f, 0x76, 0xa8, 0x25, 0x4b, 0xfb, 0x2d, 0xf0, 0x40, 0xb7, 0x88, 0xe3, 0xe5, 0x4, 0xf5, 0x52, 0x7c, 0xa5, 0x9d, 0x32, 0x4b, 0x16, 0x78, 0xde, 0x13, 0xce, 0xfd, 0xe0, 0x74, 0x59, 0xc5, 0xf7, 0xb7, 0x29, 0xce, 0xb7, 0xd3, 0x66, 0xc9, 0x2, 0xcf, 0x7b, 0x5a, 0xac, 0x78, 0x4, 0xdb, 0x4d, 0xc5, 0x89, 0x76, 0xb1, 0x64, 0xc9, 0x2, 0xcf, 0x7, 0x7a, 0x46, 0xf1, 0x6c, 0xb6, 0x2f, 0x57, 0x5c, 0xd7, 0x4e, 0x9d, 0x25, 0xb, 0x3c, 0xef, 0xa9, 0x44, 0xf1, 0xe3, 0x6c, 0xc3, 0xbb, 0xd9, 0xdb, 0x4e, 0x9d, 0x25, 0xb, 0x3c, 0x7f, 0x68, 0xa2, 0x38, 0x1, 0xd5, 0xa0, 0xf3, 0xec, 0xd4, 0x59, 0xb2, 0xc0, 0xf3, 0x87, 0xd6, 0x2b, 0x7e, 0x8f, 0x6d, 0x44, 0xb8, 0x34, 0xb0, 0xd3, 0x67, 0xc9, 0x2, 0xcf, 0x1f, 0xd2, 0xc0, 0x3, 0xe8, 0xe, 0xb7, 0xd3, 0x67, 0x29, 0xac, 0x14, 0xb, 0x59, 0x7f, 0xbf, 0x34, 0xda, 0x0, 0xde, 0x7, 0x2e, 0x5f, 0x1f, 0x7, 0xf4, 0x4d, 0x79, 0xed, 0x76, 0x8a, 0x9b, 0x28, 0xce, 0x13, 0xe7, 0x58, 0x3, 0xb4, 0x51, 0xf1, 0xf, 0x8a, 0xe7, 0x8b, 0x93, 0xc8, 0xbb, 0xde, 0xa7, 0xfb, 0x46, 0xbf, 0xaa, 0x89, 0x93, 0xac, 0xbc, 0xcb, 0xa5, 0x6b, 0xe6, 0x48, 0xfa, 0xc9, 0xcf, 0xb8, 0x46, 0x73, 0xc5, 0x6d, 0xc5, 0x9, 0x72, 0x40, 0xc6, 0x49, 0x9d, 0x84, 0xcf, 0x14, 0x8b, 0x73, 0x1c, 0xb4, 0x48, 0x9c, 0xb4, 0xb3, 0x25, 0x2e, 0xde, 0x83, 0x9b, 0x73, 0xde, 0x8e, 0xf7, 0x1, 0x1f, 0x42, 0xd, 0xce, 0x39, 0xfe, 0xb7, 0x59, 0x9c, 0x44, 0xed, 0x22, 0xc5, 0xf3, 0x14, 0xaf, 0x30, 0xd6, 0xc3, 0x7e, 0x3, 0xbc, 0x95, 0x5c, 0xec, 0xf5, 0x14, 0xb7, 0x76, 0x71, 0xd7, 0xef, 0x48, 0xbb, 0xb1, 0xa7, 0xe2, 0xf6, 0x1c, 0xf8, 0x7d, 0x11, 0xb2, 0xe8, 0x91, 0x41, 0xf1, 0x8a, 0x38, 0x87, 0xfc, 0x9b, 0x3d, 0xbc, 0xef, 0x2b, 0x14, 0xdf, 0x27, 0xce, 0xd1, 0xca, 0x99, 0xfc, 0xed, 0x64, 0xa9, 0x85, 0xe2, 0x13, 0x15, 0x1f, 0xa3, 0xb8, 0x15, 0xb5, 0x85, 0xfa, 0x4, 0xc1, 0xf9, 0xe2, 0x38, 0xae, 0x52, 0x5, 0xdb, 0x9, 0x8a, 0x2f, 0x54, 0xdc, 0x5d, 0x9c, 0x60, 0xf6, 0x6a, 0x49, 0x7e, 0xb7, 0x84, 0xc0, 0xfb, 0x94, 0x36, 0xfb, 0x54, 0x71, 0xf2, 0x40, 0x83, 0xa0, 0xc3, 0x14, 0x5f, 0xa4, 0xf8, 0x74, 0xc5, 0x47, 0x24, 0x39, 0xe7, 0x5b, 0x8, 0xbe, 0x77, 0x14, 0xa3, 0x72, 0xc3, 0x37, 0xfb, 0xb, 0xf0, 0x70, 0xe3, 0x1b, 0x8, 0xbc, 0xfa, 0x69, 0x5e, 0xb, 0x3, 0x8d, 0xe4, 0xdb, 0xdf, 0x8a, 0x13, 0x84, 0x9d, 0x18, 0x8e, 0xb6, 0x9b, 0xd2, 0x7a, 0x13, 0x77, 0x6, 0xec, 0x7c, 0xb5, 0xf9, 0xaa, 0xd5, 0xdd, 0xde, 0x64, 0x2c, 0xa6, 0x87, 0x14, 0x8f, 0x93, 0x78, 0x6a, 0x93, 0x9b, 0xd4, 0x8a, 0xf7, 0x8b, 0x9c, 0xc5, 0x9a, 0x49, 0x0, 0xf, 0xf3, 0x8a, 0x3c, 0xc7, 0x41, 0x8a, 0xbb, 0xf1, 0x7b, 0x89, 0x54, 0x93, 0x80, 0x29, 0x49, 0x41, 0x40, 0x61, 0xbc, 0x6e, 0x56, 0x7c, 0xf4, 0x1e, 0xfe, 0x5f, 0xc6, 0xb1, 0xda, 0xc6, 0x6b, 0x66, 0xf1, 0x77, 0x6b, 0x19, 0xc0, 0xac, 0x42, 0xa0, 0x82, 0x2f, 0xe7, 0xb8, 0x3d, 0x25, 0x4e, 0x38, 0xa0, 0x5f, 0xda, 0x43, 0x77, 0xde, 0xc3, 0xa9, 0xec, 0x8f, 0x49, 0x15, 0x9c, 0x73, 0x8, 0xd1, 0x52, 0xc5, 0xb9, 0x8a, 0xf, 0xe4, 0x3d, 0xe4, 0xb0, 0x7d, 0x1c, 0xf9, 0x36, 0x9a, 0x3e, 0xf, 0x13, 0x88, 0x91, 0x6, 0xde, 0xe, 0x4e, 0xac, 0x96, 0xbc, 0x95, 0x5, 0xdc, 0x60, 0x71, 0x12, 0x6d, 0x5b, 0x24, 0x0, 0xed, 0x3b, 0xc5, 0x1f, 0x2a, 0xfe, 0x84, 0xd2, 0x6c, 0xd, 0x25, 0x72, 0x39, 0x17, 0x4f, 0x4d, 0xaa, 0x56, 0x5d, 0xc4, 0x49, 0xde, 0xfd, 0x5, 0xff, 0x8e, 0xeb, 0x3c, 0xca, 0x9d, 0x69, 0x60, 0x82, 0x4a, 0xec, 0x6, 0x95, 0x1b, 0xb, 0x63, 0x5f, 0x6a, 0xe, 0x42, 0xeb, 0xee, 0x92, 0x3d, 0xe7, 0x32, 0x6e, 0xa5, 0xd6, 0xa0, 0xf3, 0x21, 0x93, 0x15, 0x12, 0x87, 0x2a, 0x1e, 0x2b, 0x4e, 0xe6, 0x88, 0x79, 0xad, 0x4f, 0xa9, 0xee, 0xcf, 0xe6, 0x6e, 0xac, 0x81, 0x57, 0x4a, 0xe0, 0xe5, 0x71, 0xb1, 0xe6, 0x73, 0x87, 0x41, 0xa2, 0xf3, 0x49, 0x6c, 0xc7, 0x38, 0x6e, 0xe8, 0x2b, 0x42, 0x1, 0x6f, 0x55, 0xfc, 0x9c, 0x87, 0x6b, 0x7, 0xf7, 0x70, 0xbf, 0xfc, 0xff, 0x51, 0xd4, 0x7c, 0x2, 0x8, 0x73, 0xfe, 0xad, 0x31, 0xe7, 0xa5, 0xec, 0x63, 0xd, 0xa, 0x7a, 0x7c, 0xbf, 0xab, 0x38, 0x69, 0x6a, 0x1d, 0xf8, 0xbf, 0xd3, 0xc8, 0x28, 0x59, 0x82, 0xf0, 0xc6, 0x39, 0x51, 0x5, 0x5e, 0x2e, 0x59, 0x24, 0xf5, 0x80, 0x69, 0x48, 0xec, 0x3e, 0xe2, 0x94, 0x96, 0x30, 0xd5, 0xd4, 0xd5, 0x8a, 0x5f, 0xe6, 0xa4, 0x7f, 0x29, 0x7b, 0xaf, 0xf9, 0xb2, 0x83, 0xb, 0x16, 0xb, 0xec, 0x23, 0xee, 0x70, 0x87, 0x28, 0xbe, 0x8a, 0xbb, 0xe6, 0x81, 0x5c, 0xec, 0xd3, 0x8, 0xbe, 0x17, 0x7d, 0x1e, 0x9b, 0x7c, 0x4a, 0xdf, 0xbe, 0x9, 0x7f, 0x2f, 0xa2, 0x2a, 0x3c, 0x85, 0x6a, 0xd2, 0xaa, 0x14, 0xd5, 0xcb, 0xd3, 0x39, 0x36, 0xf5, 0xf8, 0x7e, 0xa9, 0xe2, 0x31, 0x8a, 0x5f, 0x52, 0xbc, 0x6c, 0x1f, 0xdf, 0xdd, 0x2e, 0x4e, 0x15, 0x1, 0xd8, 0xc5, 0xa8, 0x70, 0x30, 0x9e, 0x2, 0xf3, 0x8, 0xf6, 0x73, 0x0, 0xfb, 0xd, 0x5b, 0xfa, 0x59, 0xaa, 0xb0, 0x43, 0xb8, 0xe8, 0xdd, 0xa4, 0x6b, 0x14, 0x8f, 0xe4, 0x1c, 0x9, 0x6d, 0xcc, 0x7f, 0x29, 0x7e, 0x42, 0x9c, 0x62, 0x5b, 0x25, 0xfb, 0xd0, 0xb2, 0x56, 0x52, 0x50, 0xfd, 0x93, 0xeb, 0xa8, 0x13, 0x85, 0x6c, 0x7f, 0xee, 0x86, 0x3d, 0xb9, 0x93, 0xde, 0x45, 0x93, 0xa0, 0x3c, 0x99, 0xc5, 0x18, 0x26, 0xca, 0xe3, 0xae, 0x23, 0x29, 0xda, 0x6, 0x47, 0x71, 0xe1, 0x3d, 0x67, 0x80, 0xe, 0x8b, 0x61, 0x28, 0xa5, 0x2f, 0xe2, 0x41, 0x3f, 0x97, 0xd4, 0xb, 0x2d, 0xc1, 0x4e, 0xba, 0x91, 0x92, 0x7c, 0xaa, 0xd1, 0x47, 0x2c, 0xa2, 0x5f, 0xf9, 0x38, 0x2e, 0x28, 0xa1, 0x31, 0x3d, 0x1, 0x74, 0xef, 0x2b, 0x3e, 0x47, 0xf1, 0x91, 0xec, 0xe3, 0x3b, 0x4, 0x4d, 0x2a, 0xa0, 0xc3, 0xae, 0xfe, 0xba, 0x1, 0xba, 0xd1, 0x1c, 0xcb, 0x7, 0x92, 0x0, 0xdd, 0xcf, 0xed, 0xde, 0x73, 0xb8, 0x43, 0x1c, 0xce, 0x5d, 0x48, 0xef, 0xbc, 0x57, 0x11, 0x9c, 0x6e, 0xd1, 0x1, 0xbc, 0xde, 0x18, 0x3, 0x74, 0x93, 0x38, 0x5e, 0x97, 0x70, 0xa7, 0x4b, 0xd5, 0xc6, 0x85, 0x66, 0x34, 0x8b, 0x1a, 0x13, 0xc6, 0xe2, 0x6f, 0xbc, 0xa7, 0xaa, 0x8a, 0xef, 0x21, 0xa0, 0xeb, 0x45, 0xd, 0x78, 0xb5, 0xc, 0xdb, 0x6e, 0x65, 0x92, 0xdf, 0x19, 0x46, 0x69, 0x5b, 0x60, 0x78, 0x26, 0x87, 0x53, 0x5d, 0x18, 0xcd, 0x5d, 0x2c, 0x5d, 0xfa, 0x9e, 0x52, 0xef, 0x21, 0x43, 0xd, 0x1e, 0xc7, 0x85, 0xeb, 0x35, 0x9d, 0x45, 0xd0, 0xb7, 0xe2, 0xfb, 0xc5, 0x74, 0x1a, 0x14, 0x70, 0xa7, 0xab, 0xac, 0x7, 0xb1, 0xa5, 0x38, 0xa1, 0x7a, 0x7, 0x70, 0x61, 0x5d, 0x41, 0x41, 0xb5, 0xc9, 0xc5, 0xbe, 0xaf, 0x23, 0x0, 0x7b, 0x48, 0xbc, 0xc4, 0x63, 0x3f, 0x89, 0xe7, 0x62, 0xa6, 0x43, 0x75, 0x79, 0xff, 0x3, 0xf8, 0xbe, 0x98, 0xf7, 0x80, 0xf1, 0x9a, 0xeb, 0x52, 0xff, 0x97, 0x52, 0xdb, 0x39, 0x8d, 0x42, 0x58, 0xcf, 0x7, 0x2a, 0x27, 0x34, 0x8b, 0x12, 0xf0, 0xe, 0x31, 0xc, 0xf5, 0xc2, 0x24, 0xbf, 0x53, 0xc0, 0xc5, 0x23, 0x54, 0x8f, 0x3a, 0x50, 0xed, 0xd8, 0xe2, 0x72, 0xdf, 0x20, 0x9, 0x6f, 0x12, 0x27, 0x8f, 0x50, 0x3b, 0x12, 0x9e, 0x10, 0x6f, 0xb3, 0x29, 0xe0, 0xe1, 0x7c, 0xcd, 0x90, 0xe6, 0x13, 0xe8, 0xbd, 0x7c, 0xd5, 0x85, 0x6b, 0x63, 0x8c, 0x1a, 0x1b, 0x3b, 0xd1, 0x33, 0x1e, 0xde, 0xc7, 0xc7, 0x54, 0x69, 0x7f, 0xe4, 0xfb, 0x6b, 0xd3, 0x1c, 0xb7, 0xea, 0x1c, 0x17, 0x5d, 0xbc, 0xeb, 0x3b, 0xda, 0xe3, 0x5e, 0xdd, 0x3, 0x76, 0xce, 0xe3, 0xd, 0x27, 0x4b, 0x7, 0xee, 0xac, 0xcd, 0xa2, 0x2, 0xbc, 0x2e, 0x86, 0x93, 0x21, 0x59, 0xe0, 0x5d, 0x47, 0xd5, 0xa0, 0x2f, 0x6d, 0xbc, 0x65, 0x1e, 0xf7, 0x11, 0xd2, 0xfa, 0x79, 0xb6, 0xf, 0xa6, 0xde, 0xef, 0x5, 0x75, 0xa5, 0x1d, 0x59, 0x95, 0xef, 0x1, 0xf8, 0x4b, 0x5d, 0xda, 0xc1, 0xbb, 0xf2, 0x5a, 0xa0, 0x17, 0xb8, 0x7b, 0x7b, 0x4d, 0xdf, 0xd2, 0x16, 0x9b, 0xc4, 0xdf, 0x5e, 0x53, 0xc9, 0xeb, 0xc0, 0xf6, 0xff, 0x3b, 0x6d, 0x2e, 0xe1, 0xdc, 0x43, 0xf8, 0x7e, 0xed, 0x71, 0xff, 0xd7, 0xd3, 0x71, 0xf3, 0x2c, 0xdf, 0x1f, 0x41, 0xb5, 0xb3, 0x6e, 0x14, 0x80, 0x57, 0x60, 0xa8, 0x53, 0xf3, 0x93, 0xfc, 0x4e, 0x11, 0x8d, 0x76, 0x3f, 0x9d, 0x1d, 0x37, 0xb0, 0x8f, 0x42, 0xf5, 0xe6, 0x28, 0x17, 0xaf, 0xd, 0x9b, 0xa4, 0xe, 0x17, 0x97, 0xb6, 0x77, 0x87, 0xbb, 0xa4, 0x9e, 0x69, 0xea, 0x6f, 0x38, 0x21, 0xee, 0xf5, 0x71, 0xdc, 0x26, 0x52, 0x55, 0x7b, 0x2f, 0x8d, 0x6b, 0xdc, 0xa1, 0xf8, 0x2, 0xb6, 0xe1, 0x10, 0xe9, 0x25, 0xf1, 0x7c, 0x4e, 0xaf, 0x9, 0x73, 0xf3, 0x6b, 0xee, 0xb6, 0x42, 0x27, 0xcc, 0x38, 0xd9, 0x83, 0x23, 0x30, 0x4c, 0xc0, 0x6b, 0xc5, 0xed, 0x5c, 0xab, 0x26, 0xdb, 0x53, 0x1c, 0x10, 0x3f, 0x69, 0x4d, 0x82, 0xca, 0x39, 0xd8, 0x45, 0x75, 0x16, 0x93, 0x88, 0xa3, 0x8b, 0x36, 0xfc, 0xdb, 0xa3, 0x54, 0xb, 0xdd, 0xa2, 0xaa, 0x86, 0x8a, 0xf6, 0xae, 0xf, 0x3b, 0x85, 0x9b, 0x84, 0x7e, 0xff, 0x91, 0xed, 0xb5, 0xdc, 0x39, 0x57, 0xf9, 0xdc, 0x87, 0x32, 0xa, 0xdb, 0xcf, 0xf9, 0xfe, 0x7c, 0x9a, 0x20, 0xa1, 0x5, 0xde, 0x25, 0x86, 0x2d, 0xf3, 0x6a, 0x8, 0xfa, 0xfb, 0x3c, 0xd5, 0x27, 0x10, 0xa2, 0x62, 0xdc, 0x8, 0xea, 0xde, 0x4e, 0x67, 0x41, 0x7f, 0x3, 0x18, 0x37, 0xb9, 0xdc, 0xef, 0x36, 0x74, 0xac, 0x80, 0xa6, 0x84, 0x68, 0x7d, 0xc0, 0xae, 0x7b, 0xd0, 0xd8, 0x5d, 0xae, 0x37, 0xc6, 0xdf, 0x6f, 0xda, 0x42, 0xa7, 0x4b, 0x31, 0xdf, 0x23, 0x91, 0xfb, 0xc8, 0x30, 0x2, 0xaf, 0x16, 0x6f, 0x44, 0x1b, 0xca, 0x53, 0x43, 0xd0, 0x67, 0xa8, 0x69, 0xfa, 0x40, 0xb8, 0x11, 0x8d, 0xfb, 0x74, 0xa9, 0xb6, 0x1, 0xb4, 0x62, 0xda, 0xaf, 0x6e, 0x9f, 0x79, 0x35, 0x93, 0x78, 0x44, 0x47, 0x61, 0x88, 0x80, 0x77, 0x3d, 0x9d, 0x1a, 0x42, 0x35, 0xfc, 0xa5, 0x80, 0xfb, 0x33, 0x57, 0xe2, 0x95, 0x13, 0xaa, 0x1b, 0x1a, 0x50, 0xa8, 0x80, 0x37, 0x88, 0x8e, 0xa, 0xa1, 0xce, 0xbc, 0x3d, 0x24, 0xfd, 0x7e, 0xc3, 0x0, 0x86, 0x1b, 0xe5, 0xf1, 0xab, 0x18, 0x76, 0xdd, 0x83, 0x14, 0x42, 0x6e, 0x53, 0xbe, 0xa1, 0xd6, 0xae, 0x9, 0xc9, 0x38, 0xe7, 0xd3, 0x31, 0x3, 0xc2, 0x11, 0xc5, 0x9d, 0x19, 0xd2, 0x2f, 0xd4, 0x87, 0x9d, 0x9e, 0x95, 0x95, 0x25, 0x25, 0xa5, 0x25, 0xbd, 0x67, 0xcd, 0x9d, 0xd7, 0x23, 0x4c, 0xc0, 0x83, 0xea, 0x73, 0x2b, 0xdb, 0x70, 0xa8, 0x3c, 0x1d, 0x22, 0x29, 0x5c, 0x28, 0xf1, 0x40, 0x5a, 0x37, 0xcb, 0xd1, 0xc3, 0x61, 0x34, 0xc6, 0xa3, 0x3e, 0xe7, 0x26, 0xd8, 0x94, 0x61, 0x20, 0xa8, 0xdf, 0x4d, 0xd8, 0x7e, 0x52, 0x9c, 0xe0, 0x88, 0x4c, 0x20, 0x8, 0xdd, 0x3f, 0xa1, 0x11, 0x8b, 0xc5, 0x64, 0xf2, 0x87, 0x9f, 0xdc, 0xb0, 0x79, 0xeb, 0xb6, 0x50, 0x0, 0x2f, 0xc6, 0x5, 0xa6, 0x5d, 0xb2, 0x77, 0x88, 0xbb, 0x7, 0xb8, 0x5e, 0x53, 0xb9, 0x1, 0x3c, 0x44, 0xcc, 0xd4, 0x71, 0xe9, 0xba, 0xe3, 0x3c, 0x1c, 0x87, 0x5d, 0x86, 0x50, 0xae, 0x1f, 0x82, 0x31, 0xc6, 0x19, 0xad, 0x8e, 0x12, 0x82, 0x4b, 0x7f, 0x6c, 0x86, 0xf5, 0xef, 0x6d, 0xc5, 0x1f, 0xc7, 0x72, 0x72, 0x64, 0xed, 0xfa, 0x8d, 0xa7, 0x7d, 0x53, 0x58, 0x74, 0x6c, 0x18, 0x80, 0x37, 0x4a, 0x9c, 0xa8, 0x0, 0xd0, 0xb, 0x19, 0xa0, 0xb7, 0x57, 0x86, 0xb4, 0x81, 0xf, 0xc7, 0x90, 0x1b, 0xcf, 0x21, 0x5c, 0xc7, 0xb1, 0xf0, 0x8a, 0x4c, 0x2f, 0x60, 0xdb, 0x10, 0x8c, 0x2f, 0x82, 0xae, 0x75, 0x52, 0x34, 0xdc, 0xf8, 0xcb, 0x32, 0xac, 0x7f, 0x38, 0x73, 0x46, 0x58, 0x99, 0x28, 0x95, 0x33, 0x7b, 0xea, 0xb4, 0xe9, 0x7d, 0x32, 0x1d, 0x78, 0xa3, 0x24, 0x5e, 0xca, 0xf, 0xbb, 0xc6, 0x10, 0x9, 0x27, 0xad, 0xe0, 0x2b, 0xdc, 0xf4, 0xf5, 0x5c, 0xb8, 0xde, 0x5b, 0xc6, 0x35, 0xbd, 0x20, 0x84, 0xbf, 0xe9, 0x38, 0xd8, 0x30, 0x14, 0x95, 0x3a, 0xc7, 0x68, 0x4f, 0xc8, 0xd0, 0x3e, 0x22, 0x28, 0x60, 0x75, 0x95, 0xdc, 0x5c, 0x59, 0xb8, 0x64, 0xf9, 0x99, 0xab, 0xd6, 0xac, 0xab, 0x96, 0x89, 0xc0, 0x83, 0xf3, 0x0, 0xae, 0xf8, 0xdf, 0xf1, 0x3d, 0x62, 0x32, 0x2f, 0x95, 0xf0, 0x3e, 0x2b, 0xaf, 0x38, 0xc1, 0x39, 0x92, 0x2e, 0xbd, 0xee, 0x71, 0x7f, 0x91, 0x23, 0x37, 0x83, 0x6d, 0x38, 0x3, 0x2e, 0xc8, 0xe0, 0xb1, 0xc5, 0xfa, 0x3d, 0x99, 0x6d, 0xc4, 0x4a, 0x7e, 0x96, 0xa1, 0xfd, 0xc4, 0x99, 0xe2, 0xfb, 0xd9, 0xd9, 0x59, 0xb2, 0x7d, 0xc7, 0xce, 0x43, 0x7f, 0x58, 0xbe, 0xa2, 0x63, 0xa6, 0x1, 0xf, 0x51, 0xb, 0x38, 0x78, 0xec, 0x6b, 0x2c, 0x82, 0xb3, 0x24, 0xb8, 0xf3, 0x18, 0xb7, 0x54, 0xd, 0x31, 0xd4, 0xcd, 0x74, 0x68, 0x87, 0xa4, 0x91, 0xf5, 0x9c, 0x2, 0x99, 0x8e, 0x1b, 0xa8, 0x49, 0xa7, 0x66, 0xe8, 0xd8, 0x1e, 0x4a, 0x6, 0x21, 0x9f, 0x2e, 0x93, 0xbd, 0xdd, 0x3f, 0x1d, 0x81, 0xed, 0x2e, 0x2f, 0x97, 0xa2, 0x45, 0x4b, 0x4e, 0x34, 0x81, 0x17, 0x94, 0x7, 0xb, 0x6, 0x3c, 0xe, 0xc7, 0x91, 0xc6, 0xf2, 0xa6, 0x61, 0x57, 0x20, 0xaf, 0xd, 0x67, 0x5f, 0xb3, 0x25, 0xdc, 0x94, 0xe5, 0x32, 0x88, 0xfd, 0x98, 0xa7, 0x89, 0xda, 0x2e, 0x11, 0xe7, 0xec, 0x10, 0xf3, 0x32, 0x52, 0x32, 0xcf, 0xd9, 0xd2, 0x56, 0xe2, 0x1, 0xf0, 0x9f, 0x64, 0xf8, 0x3a, 0xc0, 0x6e, 0x5c, 0x1e, 0xcb, 0x8d, 0xc9, 0xf7, 0xb, 0x17, 0x77, 0x36, 0x13, 0x61, 0x71, 0x70, 0x8a, 0x4c, 0xe0, 0x1c, 0xf1, 0xfe, 0x39, 0xe8, 0x31, 0xfe, 0x1e, 0xe, 0x3c, 0x3b, 0x25, 0x4c, 0x28, 0xec, 0x8b, 0xfb, 0xc9, 0x41, 0x14, 0xc5, 0xc1, 0xfd, 0xd7, 0xa2, 0xca, 0x8b, 0x7e, 0x9a, 0x45, 0x86, 0xf0, 0xa, 0x7f, 0x30, 0x22, 0x13, 0x76, 0x46, 0x0, 0xc8, 0x3f, 0x47, 0xd7, 0xf1, 0xde, 0xfb, 0xd1, 0x3e, 0xc5, 0x91, 0xe, 0x12, 0x7c, 0x91, 0x34, 0x8c, 0xb8, 0xd7, 0x2f, 0x24, 0xf8, 0xa2, 0x45, 0x87, 0x19, 0xed, 0x4c, 0xf, 0x6d, 0x5b, 0xac, 0x78, 0x69, 0x4e, 0x76, 0xf6, 0xc1, 0xc5, 0x9b, 0xb7, 0xb4, 0x8f, 0x25, 0x48, 0x8f, 0x20, 0x5d, 0xb1, 0xc8, 0x93, 0x7b, 0x89, 0x4e, 0x95, 0x5, 0x3e, 0xfe, 0x2e, 0x4a, 0x39, 0x20, 0x6, 0x14, 0xe9, 0x34, 0x8, 0xeb, 0x69, 0x41, 0x29, 0xaf, 0x81, 0x57, 0x95, 0xbb, 0x4c, 0x49, 0x2, 0xf0, 0x60, 0xbb, 0x21, 0x87, 0xc, 0x67, 0x46, 0x85, 0x64, 0x9c, 0xaf, 0xad, 0x12, 0x17, 0xaa, 0x50, 0x65, 0x0, 0x41, 0xb0, 0xf4, 0xa7, 0x26, 0x82, 0xb3, 0xa8, 0x46, 0x14, 0x90, 0x57, 0x93, 0x8b, 0xf8, 0xbf, 0xa9, 0x4, 0xe1, 0xd2, 0x0, 0xb4, 0xa6, 0xa6, 0x7c, 0x45, 0x8d, 0x94, 0x65, 0x19, 0x3e, 0x9e, 0x58, 0x37, 0x4b, 0xb3, 0x15, 0xf0, 0x36, 0x14, 0x6f, 0x6a, 0x10, 0x54, 0xe9, 0x87, 0x32, 0xe, 0x16, 0xca, 0x2e, 0x7c, 0x25, 0x4e, 0x1e, 0xd3, 0x64, 0xbe, 0xf7, 0x83, 0xb0, 0x88, 0x2e, 0xa4, 0xe3, 0x0, 0xe7, 0x2a, 0x79, 0x49, 0xec, 0x82, 0x3a, 0xf, 0x10, 0x35, 0x38, 0xf4, 0xb1, 0x40, 0xe7, 0x84, 0xcf, 0x6d, 0xe2, 0x82, 0x9c, 0xce, 0x45, 0xf9, 0x1f, 0x9, 0xcf, 0x21, 0xf4, 0xde, 0xe8, 0x29, 0xaa, 0x9e, 0x38, 0x2b, 0x1b, 0x40, 0xe1, 0x84, 0x5d, 0x57, 0x17, 0x2d, 0x1a, 0x44, 0xdb, 0xea, 0x3b, 0xaa, 0x53, 0xa8, 0xc3, 0x32, 0x93, 0x2, 0xa9, 0xd4, 0xe3, 0xbe, 0x69, 0x2f, 0xb1, 0xae, 0x3e, 0x97, 0xe9, 0x84, 0x0, 0x90, 0x93, 0x15, 0xf8, 0x6a, 0x99, 0xc0, 0x83, 0x53, 0xe3, 0xa, 0x4a, 0x79, 0x2f, 0xd5, 0x99, 0x2c, 0x4a, 0x53, 0xec, 0x18, 0xeb, 0x24, 0xf5, 0x72, 0xb, 0xe9, 0x4a, 0xc8, 0x61, 0x94, 0xe4, 0x7b, 0xaa, 0xff, 0x8, 0x75, 0x60, 0x11, 0xa5, 0xe7, 0x7a, 0xee, 0xc2, 0x15, 0x46, 0xbf, 0xb5, 0xa, 0xa, 0xc9, 0x7f, 0x10, 0xd5, 0xe5, 0x46, 0x5c, 0x0, 0xfa, 0xff, 0x9d, 0xc9, 0x50, 0xd5, 0x10, 0x72, 0xf5, 0x63, 0x4, 0x76, 0x3f, 0x8c, 0x5, 0xea, 0xb9, 0x3c, 0x46, 0xcd, 0x0, 0xa9, 0x36, 0x3d, 0x8, 0xc2, 0x3c, 0xf2, 0x31, 0xe4, 0x6b, 0xa8, 0x1d, 0x2c, 0x22, 0x0, 0x3f, 0xa2, 0x20, 0x2a, 0xf2, 0x40, 0x35, 0xad, 0xcd, 0x57, 0x8c, 0xfb, 0xef, 0x25, 0x9e, 0xbd, 0x91, 0xa9, 0x1a, 0x84, 0x3e, 0x6f, 0xcc, 0x33, 0x81, 0xa7, 0x6b, 0x6, 0x46, 0x91, 0x30, 0x19, 0x57, 0x51, 0x65, 0x32, 0x1, 0x57, 0x48, 0xc7, 0xc1, 0x14, 0xda, 0x8, 0xab, 0x53, 0xdc, 0xa1, 0x72, 0x8, 0xba, 0xe6, 0x5c, 0x84, 0xd8, 0x3d, 0x91, 0xfb, 0x87, 0xe2, 0xa8, 0x38, 0x3a, 0xc8, 0x97, 0x68, 0x3d, 0xcf, 0xf, 0x42, 0x72, 0x6, 0x79, 0x4, 0x5, 0xf, 0x92, 0x66, 0x4f, 0xa4, 0xba, 0xde, 0x8e, 0x1a, 0x41, 0x15, 0xb6, 0xdb, 0x51, 0xc8, 0xe1, 0x7b, 0xb, 0xe9, 0x0, 0x41, 0x24, 0x7, 0x2a, 0xb9, 0xad, 0x75, 0xb1, 0x5f, 0x10, 0x7e, 0xb7, 0x67, 0xfa, 0xe0, 0x55, 0x54, 0xc4, 0x2d, 0x90, 0x58, 0x0, 0x46, 0xbb, 0xdf, 0x4, 0xa9, 0x88, 0xf8, 0x4e, 0xf3, 0x41, 0x27, 0x38, 0xd0, 0x1c, 0x4d, 0x75, 0x30, 0x1d, 0x75, 0xa8, 0x9c, 0xbb, 0xda, 0x1a, 0x4a, 0x77, 0x5d, 0x45, 0xb, 0x2a, 0x18, 0x5c, 0xf0, 0xe7, 0x8a, 0x13, 0x59, 0x51, 0x35, 0x82, 0xe3, 0xa, 0x1, 0xb5, 0x84, 0xc, 0xdb, 0x1c, 0x1e, 0x72, 0xc4, 0x4b, 0x76, 0x24, 0x18, 0x1, 0xc4, 0xa3, 0x28, 0x98, 0x62, 0xf4, 0x21, 0x80, 0x91, 0x28, 0xba, 0x81, 0x63, 0xff, 0x22, 0x81, 0xb8, 0x3d, 0x8d, 0xf1, 0x17, 0xc3, 0xf9, 0x95, 0x15, 0x2, 0xe0, 0xa1, 0x8f, 0xa5, 0x31, 0x89, 0x36, 0x21, 0x7, 0xe, 0x19, 0x2, 0xc7, 0xf1, 0x3d, 0xd4, 0x9d, 0x21, 0x9c, 0x6c, 0xaf, 0xa8, 0xdc, 0x70, 0xb6, 0x8c, 0xa1, 0x5d, 0x34, 0x5e, 0xa2, 0x4f, 0xbb, 0xa9, 0xa2, 0x2f, 0x93, 0xf8, 0xe3, 0xb3, 0xeb, 0x13, 0x88, 0xa8, 0xc7, 0xd9, 0x9d, 0x6d, 0xa8, 0xa5, 0x75, 0x69, 0x5f, 0x5f, 0x40, 0x95, 0x14, 0x51, 0xfc, 0x4f, 0x48, 0xea, 0x75, 0x70, 0x36, 0xf2, 0x15, 0x26, 0x2, 0xa, 0xf8, 0xee, 0x90, 0xca, 0xd7, 0x5b, 0xf5, 0x7c, 0xa7, 0x1b, 0x3a, 0xf0, 0x32, 0x69, 0xd6, 0xb8, 0x51, 0x56, 0x69, 0x59, 0x59, 0xa4, 0x81, 0x57, 0x95, 0x12, 0x55, 0x83, 0xe, 0x35, 0x11, 0x7f, 0x23, 0xff, 0x1b, 0x49, 0xe2, 0x7, 0xad, 0x95, 0xfd, 0x97, 0x60, 0xc3, 0x4f, 0x95, 0x78, 0xfe, 0x24, 0x52, 0xbb, 0x7a, 0x12, 0x70, 0xdd, 0x38, 0x47, 0xa8, 0x2c, 0x80, 0x72, 0x81, 0x57, 0x52, 0x28, 0x4e, 0xaa, 0xc4, 0xd8, 0xd6, 0xe2, 0x2e, 0xba, 0x3a, 0x53, 0x7, 0x2, 0xd8, 0x6b, 0x94, 0x5f, 0x5f, 0xe, 0x6a, 0xe8, 0xe4, 0x43, 0x67, 0x47, 0x78, 0xd2, 0x61, 0x83, 0xfc, 0x92, 0x6d, 0xa8, 0x42, 0x17, 0x5, 0x0, 0xba, 0x28, 0xab, 0xf0, 0x95, 0x21, 0x78, 0x3a, 0xc7, 0xd2, 0x31, 0x83, 0x33, 0xdc, 0x51, 0xc6, 0x9c, 0xa0, 0x82, 0x1c, 0xe2, 0x50, 0xff, 0x90, 0xe2, 0xf5, 0xf4, 0xce, 0xda, 0x38, 0x4c, 0x3, 0x11, 0x55, 0xe0, 0xc1, 0xb6, 0x18, 0xca, 0x36, 0xce, 0x98, 0x6, 0x4a, 0xf8, 0xdd, 0xfa, 0x51, 0x23, 0xb8, 0xd6, 0x6f, 0xe4, 0x5c, 0x99, 0xa5, 0xdb, 0x91, 0xa9, 0x3d, 0x2c, 0xc9, 0x6b, 0x98, 0x89, 0xc0, 0x9d, 0x2c, 0xf0, 0x82, 0x27, 0xd4, 0x65, 0xc4, 0xb9, 0x5b, 0x5, 0x27, 0x71, 0x9b, 0x5d, 0xe7, 0x19, 0x4b, 0xb0, 0x9, 0x2f, 0x93, 0x78, 0x26, 0x8a, 0x6, 0xdf, 0xb1, 0x49, 0x7c, 0xb7, 0xd0, 0xd8, 0x31, 0x4f, 0xb2, 0xc0, 0xb, 0x96, 0x60, 0xb8, 0x9f, 0xc5, 0x36, 0xe, 0xe5, 0x3f, 0xb0, 0x6b, 0x3b, 0x14, 0x4, 0x47, 0x94, 0xae, 0x34, 0x80, 0xe3, 0x88, 0x5b, 0x92, 0x4, 0xed, 0x3c, 0x3, 0x78, 0x79, 0x16, 0x78, 0xc1, 0xaa, 0x99, 0x5a, 0xdf, 0x9f, 0x68, 0xd7, 0x73, 0xa8, 0x8, 0x25, 0xf0, 0x75, 0x59, 0x3c, 0xd8, 0x81, 0x2d, 0x93, 0xf8, 0xce, 0xbb, 0x7c, 0xc5, 0x11, 0x4e, 0x57, 0xb, 0xbc, 0xe0, 0xc8, 0xcc, 0x9a, 0x9e, 0x69, 0xd7, 0x72, 0xa8, 0x8, 0x7, 0xed, 0xcf, 0xb0, 0x8d, 0x14, 0xaa, 0x2e, 0x49, 0x7c, 0xe7, 0xd, 0x89, 0x47, 0x17, 0xf5, 0xb1, 0xc0, 0xb, 0x8e, 0x74, 0x1c, 0x25, 0xb2, 0x1c, 0x36, 0xda, 0xb5, 0x1c, 0x3a, 0x9a, 0x61, 0x0, 0xa9, 0x55, 0x12, 0x9f, 0x87, 0xf3, 0x4c, 0xa7, 0x4, 0x21, 0x48, 0xa2, 0xb9, 0x5, 0x5e, 0x30, 0x94, 0x69, 0xee, 0xfb, 0xa, 0x8b, 0xa5, 0x94, 0x68, 0xa5, 0x21, 0x30, 0x93, 0xb5, 0xd9, 0xc6, 0x1b, 0xf6, 0xfd, 0x95, 0x16, 0x78, 0xc1, 0x90, 0x2e, 0x11, 0x51, 0x4d, 0xd2, 0xcf, 0xf8, 0x76, 0x83, 0x1a, 0x5b, 0x2c, 0xa5, 0x44, 0x8, 0xe1, 0x2b, 0x4f, 0xf1, 0x3b, 0xc8, 0x11, 0xd4, 0x4e, 0x16, 0xc4, 0xe4, 0xb6, 0xb6, 0xc0, 0xf3, 0x9f, 0x16, 0xf3, 0x35, 0x27, 0x49, 0x55, 0xc5, 0x6b, 0xea, 0x65, 0xb1, 0x94, 0x12, 0x21, 0xb6, 0xb6, 0xba, 0x61, 0x2e, 0x24, 0x43, 0xf8, 0xdc, 0x68, 0xb6, 0x11, 0x4, 0x7f, 0x77, 0x86, 0xdc, 0x4b, 0x4d, 0x89, 0x3f, 0xc5, 0xa9, 0x6e, 0xd4, 0x81, 0x87, 0x43, 0xd5, 0x1d, 0x6c, 0x17, 0x4, 0xdc, 0x97, 0x6e, 0x16, 0x78, 0x29, 0x53, 0x2b, 0x43, 0xc5, 0x4c, 0x25, 0x21, 0x7a, 0xbc, 0x61, 0xeb, 0xc1, 0xc9, 0xd2, 0x2f, 0x3, 0xee, 0x5, 0xd1, 0x52, 0x88, 0xc4, 0x41, 0xe8, 0xe2, 0xc5, 0x51, 0x7, 0x1e, 0x82, 0x6e, 0x75, 0x9d, 0x96, 0x33, 0x2, 0x54, 0x37, 0x21, 0xb5, 0x1f, 0x92, 0x68, 0x87, 0xe5, 0x79, 0x41, 0xba, 0xb0, 0x12, 0x84, 0xe7, 0x9c, 0x14, 0x55, 0x54, 0x4, 0x4b, 0xe8, 0x27, 0x43, 0x3d, 0x22, 0xf1, 0xfc, 0xb7, 0xa0, 0x4c, 0xc, 0xfd, 0xe4, 0x22, 0xe4, 0x33, 0x4e, 0x8a, 0x3a, 0xf0, 0x40, 0xfa, 0xf9, 0x64, 0xad, 0x29, 0x75, 0x82, 0x20, 0x80, 0xae, 0x4b, 0xc8, 0xc6, 0xd, 0xc5, 0x83, 0x7, 0x5, 0xf8, 0xfb, 0x8, 0x76, 0xd6, 0xe5, 0x4, 0xbf, 0xa0, 0x10, 0x4d, 0x85, 0x90, 0xfd, 0xae, 0x1f, 0x14, 0x82, 0xf8, 0x4d, 0x14, 0xfe, 0x6d, 0x18, 0xd0, 0xbd, 0xe0, 0xf1, 0x69, 0x2d, 0xd8, 0xc6, 0x73, 0x2e, 0x96, 0xee, 0xf, 0xc0, 0xc3, 0x80, 0xeb, 0x8a, 0xc8, 0xb7, 0xca, 0x5e, 0x9e, 0xca, 0xe9, 0x21, 0x41, 0xaf, 0xd7, 0xde, 0x35, 0x84, 0xab, 0x85, 0x21, 0x4e, 0x14, 0xc5, 0x6b, 0x91, 0x14, 0x8c, 0xf4, 0x9c, 0x9b, 0x2, 0xea, 0xc3, 0x10, 0xc3, 0x2e, 0xaf, 0x6c, 0x2a, 0x15, 0x1e, 0xa4, 0xa9, 0x2b, 0x8e, 0x23, 0x98, 0x62, 0x2, 0x1, 0xed, 0xb7, 0xd0, 0xd5, 0x2, 0x4, 0xcf, 0x72, 0x1c, 0x95, 0xf8, 0x81, 0xa8, 0x2, 0xf, 0xa0, 0x7b, 0x98, 0xed, 0x36, 0x46, 0xdb, 0x6b, 0x42, 0x9a, 0xcb, 0x38, 0x89, 0x47, 0xd8, 0x7f, 0xc5, 0x76, 0x18, 0xc6, 0x19, 0x65, 0xf2, 0xf4, 0x3, 0x4b, 0x90, 0xa6, 0x83, 0x10, 0xae, 0x2a, 0x3e, 0xfe, 0x7e, 0x77, 0x71, 0xca, 0x37, 0x80, 0xbe, 0x94, 0xf4, 0x9e, 0xe0, 0x8b, 0x47, 0xba, 0x7d, 0xc8, 0x36, 0xa, 0xde, 0xa2, 0xc2, 0x80, 0x5f, 0xe7, 0x7b, 0x0, 0xd9, 0xd, 0x6c, 0xa3, 0xec, 0xc7, 0x40, 0xd9, 0xc3, 0x83, 0x51, 0xa3, 0x6c, 0x7f, 0x3c, 0x42, 0x69, 0x3, 0x42, 0xa1, 0x9e, 0xfb, 0x3c, 0xfe, 0x3d, 0x44, 0xc7, 0x4f, 0xe3, 0x40, 0x83, 0xe0, 0xe4, 0x39, 0x53, 0xc2, 0x53, 0x8c, 0x17, 0x3b, 0xc3, 0x0, 0x89, 0x67, 0xe4, 0xa3, 0x76, 0xa, 0xc2, 0xb1, 0xda, 0xfb, 0xf0, 0xdb, 0x28, 0x1d, 0xf1, 0xa, 0xc1, 0x5f, 0x46, 0x5b, 0x2d, 0x9d, 0xfa, 0x2c, 0x5b, 0xb9, 0xe3, 0xe8, 0xf9, 0xef, 0xc2, 0xb9, 0x39, 0xc5, 0xc3, 0x7b, 0x40, 0xa2, 0x1d, 0xaa, 0x7c, 0xeb, 0xa, 0xe8, 0xa8, 0x4a, 0x80, 0xa7, 0xc1, 0xee, 0xf1, 0x91, 0xe1, 0x51, 0x6, 0x1e, 0xa4, 0xc, 0x12, 0x5f, 0xf5, 0x73, 0x6, 0x30, 0x99, 0x8f, 0x8b, 0xfb, 0x65, 0x18, 0x1a, 0x11, 0xe4, 0xd3, 0xd, 0x9b, 0x6e, 0x32, 0x25, 0xf8, 0x4a, 0x89, 0x17, 0x5c, 0xd, 0x3, 0xe1, 0x81, 0x8e, 0x88, 0xfe, 0xd0, 0x7, 0xd8, 0x8, 0x3c, 0xfe, 0x8c, 0xea, 0x7a, 0x35, 0x8f, 0x7e, 0x13, 0xa5, 0x20, 0xde, 0x96, 0x78, 0x6d, 0xd5, 0x9b, 0x25, 0x1e, 0x7f, 0x99, 0xe, 0xc1, 0xa1, 0xd1, 0x8b, 0xea, 0xb3, 0x70, 0xc7, 0x9b, 0xc2, 0xdd, 0xdc, 0x6d, 0xd5, 0xf3, 0x22, 0xda, 0xa4, 0xe7, 0xf2, 0x3d, 0xd6, 0x1c, 0x32, 0xe2, 0x67, 0xec, 0xed, 0xb, 0x51, 0xf7, 0xb8, 0xe1, 0x1, 0x1c, 0x28, 0xe3, 0xa7, 0x33, 0x95, 0x51, 0xf, 0x12, 0x2e, 0xe7, 0x13, 0xd2, 0xbc, 0x2e, 0xa2, 0x63, 0x8e, 0x16, 0xa7, 0xea, 0xd6, 0x3c, 0xda, 0x26, 0x0, 0x34, 0x2a, 0x49, 0xd, 0xe7, 0x84, 0xeb, 0x87, 0x3a, 0x9a, 0x55, 0xd4, 0xaa, 0x84, 0x60, 0xcc, 0xde, 0x22, 0xe0, 0x74, 0xb0, 0x32, 0xce, 0xa2, 0x46, 0x52, 0x6d, 0x86, 0xdd, 0x5a, 0xdb, 0x85, 0xdf, 0xc0, 0xf8, 0xa1, 0x4a, 0x38, 0x32, 0xd3, 0x51, 0x3e, 0xf0, 0x40, 0x43, 0x38, 0x3e, 0xe2, 0xe2, 0xbd, 0x6c, 0x22, 0x18, 0xa0, 0xed, 0x20, 0x82, 0x28, 0x87, 0xf6, 0x2b, 0xee, 0x65, 0xb0, 0xc4, 0x1f, 0xf2, 0x59, 0x19, 0xc2, 0xb5, 0x90, 0x4d, 0x8f, 0xda, 0x31, 0x2f, 0x1b, 0x8e, 0x94, 0xf7, 0xb9, 0xbe, 0x3e, 0xff, 0xb9, 0x2f, 0xef, 0xf, 0xae, 0x6e, 0x48, 0x6c, 0x64, 0xa2, 0xeb, 0x67, 0xe, 0x1c, 0x43, 0xfd, 0x7f, 0x22, 0x55, 0xc1, 0x1a, 0x29, 0xa8, 0x12, 0x50, 0x55, 0xee, 0xa0, 0x24, 0xc3, 0xc0, 0x22, 0xef, 0x4f, 0x57, 0x2d, 0x7b, 0x93, 0x3b, 0xde, 0xc8, 0x4, 0xb0, 0xa1, 0xce, 0x8b, 0x3e, 0x57, 0xbc, 0x91, 0xbf, 0x9f, 0xe9, 0x34, 0x8f, 0xc0, 0x18, 0x21, 0xf1, 0x43, 0x6c, 0x3c, 0xa3, 0x60, 0x2c, 0x55, 0x68, 0xd4, 0x48, 0x41, 0xea, 0x55, 0x43, 0x49, 0x3e, 0x44, 0x2f, 0x8f, 0xea, 0xf8, 0x30, 0x8e, 0xdf, 0x7, 0x12, 0xaf, 0x10, 0xb0, 0x96, 0x2, 0xf2, 0x1, 0xf, 0xee, 0xa5, 0x9c, 0x3b, 0xf6, 0x19, 0x9c, 0xb, 0x50, 0x4b, 0xde, 0xc3, 0xb7, 0xb4, 0xff, 0xbb, 0x25, 0xb9, 0xe, 0xe, 0xe0, 0x3d, 0xc0, 0x16, 0x9d, 0x25, 0x4e, 0x3d, 0xd8, 0xee, 0xfc, 0xdf, 0x66, 0xee, 0xd6, 0x0, 0xe3, 0xd2, 0x7d, 0x5d, 0xc8, 0xeb, 0x1a, 0x9a, 0x99, 0x42, 0x5f, 0x53, 0x8a, 0xff, 0x59, 0x1c, 0x77, 0x39, 0xee, 0xbb, 0x37, 0x79, 0x5, 0x8d, 0xf9, 0x79, 0x34, 0x86, 0x35, 0x68, 0x70, 0xe, 0x87, 0xd2, 0x7c, 0x28, 0x61, 0xd7, 0x9a, 0x93, 0x95, 0xf8, 0xec, 0x80, 0x52, 0xaa, 0x95, 0xf, 0x1a, 0xc6, 0x7c, 0x22, 0x2d, 0x20, 0x28, 0xa1, 0x8e, 0xa0, 0xf2, 0xd6, 0x5d, 0x12, 0xcf, 0x17, 0x4c, 0x65, 0x87, 0xf0, 0x9b, 0x76, 0xb1, 0xaf, 0x78, 0x72, 0x13, 0x72, 0xe3, 0xfa, 0x72, 0x4c, 0x1a, 0x71, 0xb7, 0x18, 0x4c, 0x95, 0x74, 0x21, 0xed, 0x98, 0x65, 0x4, 0xd0, 0x4e, 0xf6, 0x17, 0x42, 0xbd, 0x2e, 0x3f, 0xdf, 0x9a, 0xc0, 0x6d, 0x96, 0x20, 0xec, 0xf1, 0x1b, 0xcf, 0x52, 0x98, 0xad, 0xf0, 0xf8, 0x7e, 0x26, 0x4b, 0xbc, 0xee, 0xe7, 0x50, 0xa, 0x8d, 0xa6, 0x6c, 0x83, 0x97, 0x13, 0x88, 0xf3, 0xd9, 0xd6, 0xc9, 0xd3, 0x50, 0xb1, 0x51, 0x3d, 0xd, 0x4e, 0xba, 0xc3, 0xb8, 0xb3, 0x99, 0x5, 0x95, 0xb6, 0x73, 0x8c, 0xee, 0x11, 0xa7, 0xe2, 0x5a, 0x52, 0x14, 0x33, 0x16, 0x5a, 0x79, 0xc4, 0xc1, 0xb7, 0x89, 0x83, 0x3e, 0x8e, 0x52, 0xf7, 0x1c, 0x2e, 0xa4, 0x26, 0xe4, 0xb3, 0x53, 0x58, 0x90, 0xd8, 0x3d, 0xff, 0x4d, 0x87, 0x40, 0x32, 0xcf, 0x21, 0x47, 0x76, 0x35, 0xca, 0xdc, 0x15, 0x48, 0xe5, 0x82, 0xa6, 0x4b, 0x8c, 0x39, 0x2a, 0xf3, 0x79, 0xdc, 0x16, 0x52, 0x58, 0x41, 0x68, 0xf5, 0xe1, 0xce, 0x84, 0x1a, 0xa2, 0xb9, 0xdc, 0xed, 0x75, 0x1, 0xdf, 0x54, 0x68, 0x1, 0x1d, 0x11, 0x4f, 0xed, 0xcd, 0xf9, 0xe0, 0x11, 0xa1, 0x8a, 0xd9, 0xbd, 0x5c, 0x3, 0xfd, 0xe8, 0x74, 0xeb, 0x48, 0x20, 0x35, 0x25, 0xf7, 0x4c, 0xe2, 0x3a, 0x15, 0x14, 0xd4, 0x13, 0x28, 0x38, 0x16, 0xa7, 0xda, 0x91, 0x18, 0x75, 0xe0, 0x6, 0xc9, 0x6c, 0x8f, 0x11, 0xa1, 0xaf, 0x28, 0xbd, 0x5b, 0x52, 0xfd, 0x0, 0x18, 0xe, 0xe7, 0xee, 0x56, 0x9d, 0xea, 0x44, 0x29, 0x25, 0xf7, 0x36, 0x2, 0x56, 0x67, 0x3a, 0xcf, 0xa4, 0x9a, 0x84, 0x85, 0x93, 0xca, 0xd9, 0xdc, 0x6a, 0xaa, 0xb5, 0x9d, 0xa5, 0x72, 0xa9, 0x4a, 0x4f, 0xd2, 0x78, 0xdf, 0x44, 0x69, 0x1c, 0x4, 0x2d, 0xa6, 0x1a, 0x7d, 0x3f, 0x77, 0xaf, 0x6e, 0xdc, 0x41, 0xda, 0x53, 0x70, 0xd5, 0xe4, 0xee, 0x50, 0x8d, 0xbb, 0xda, 0x4e, 0xa, 0x29, 0xf4, 0x79, 0x1d, 0xed, 0xed, 0xd9, 0xb4, 0xb1, 0x67, 0x49, 0x70, 0xf, 0x7d, 0xd1, 0x8e, 0x97, 0x47, 0xe9, 0x6c, 0x3b, 0x92, 0x26, 0x4, 0xec, 0xb2, 0xb6, 0xc4, 0x42, 0xd, 0xae, 0x85, 0xdd, 0xdc, 0xd1, 0xb6, 0x72, 0x37, 0x9f, 0xcf, 0xf9, 0x87, 0x76, 0x33, 0x57, 0xf6, 0x70, 0x4c, 0x90, 0x2c, 0xfd, 0x57, 0x80, 0x1, 0x0, 0xc5, 0xb1, 0xf0, 0x59, 0xcd, 0x2e, 0xe2, 0x4, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; + + + + + (NSData *)parse_logo_png { + return [NSData dataWithBytes:parse_logo_png length:sizeof(parse_logo_png)]; + } + + const unsigned char parse_logo2x_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x1, 0xbb, 0x0, 0x0, 0x0, 0x88, 0x8, 0x6, 0x0, 0x0, 0x0, 0x7e, 0xf0, 0x45, 0xa9, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9, 0x65, 0x3c, 0x0, 0x0, 0x3, 0x23, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x35, 0x2d, 0x63, 0x30, 0x31, 0x34, 0x20, 0x37, 0x39, 0x2e, 0x31, 0x35, 0x31, 0x34, 0x38, 0x31, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2f, 0x30, 0x33, 0x2f, 0x31, 0x33, 0x2d, 0x31, 0x32, 0x3a, 0x30, 0x39, 0x3a, 0x31, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x43, 0x20, 0x28, 0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x29, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x45, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x46, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x43, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x44, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, 0x3f, 0x3e, 0xe8, 0x51, 0xff, 0x90, 0x0, 0x0, 0x26, 0xd1, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec, 0x5d, 0x7, 0x98, 0x14, 0x55, 0xd6, 0xbd, 0xd, 0x33, 0xcc, 0x90, 0x54, 0x24, 0x88, 0xa2, 0x2, 0x8a, 0x28, 0x20, 0x62, 0x40, 0x51, 0x5c, 0x57, 0x10, 0x51, 0x44, 0xd7, 0x35, 0xff, 0xbb, 0x46, 0x5c, 0x31, 0xc3, 0x9a, 0x45, 0xd4, 0x55, 0x74, 0xd7, 0xac, 0xb0, 0x86, 0x5d, 0x73, 0x5e, 0x75, 0x4d, 0x6b, 0x56, 0x14, 0x11, 0xcc, 0x1, 0x41, 0xc9, 0x51, 0x82, 0x8, 0x8, 0x22, 0x82, 0x48, 0x9a, 0xf8, 0xbf, 0x63, 0x9d, 0x96, 0xa6, 0xe6, 0x55, 0x4f, 0xcf, 0x4c, 0x55, 0x77, 0x55, 0xf5, 0x3d, 0xdf, 0x77, 0x3f, 0xe0, 0x55, 0x33, 0x53, 0xfd, 0xea, 0xd5, 0x3b, 0x37, 0xbf, 0xc4, 0x49, 0x83, 0x86, 0xb4, 0x13, 0x91, 0x53, 0x8c, 0x34, 0x96, 0xf8, 0xa2, 0xbe, 0x91, 0xa9, 0x46, 0x66, 0x19, 0x99, 0x61, 0x64, 0xb5, 0x91, 0x52, 0x51, 0x28, 0x14, 0xa, 0x45, 0x6c, 0xb0, 0x66, 0xed, 0x3a, 0x19, 0x3a, 0x68, 0xa0, 0xec, 0xb3, 0x47, 0xd7, 0x2a, 0xd7, 0xa, 0x8c, 0xdc, 0x62, 0xa4, 0xb7, 0x91, 0xe2, 0x18, 0xcf, 0x41, 0x82, 0xe4, 0x56, 0x66, 0xa4, 0xc4, 0xc8, 0x14, 0x92, 0xdf, 0x24, 0xfe, 0x1d, 0xb2, 0x41, 0x97, 0x8a, 0x42, 0xa1, 0x50, 0xc4, 0x13, 0x20, 0xbb, 0xed, 0x8c, 0x34, 0xe3, 0xdf, 0xf3, 0x5, 0x6d, 0x8c, 0x1c, 0xca, 0xbf, 0xff, 0x42, 0xd2, 0xfb, 0xd0, 0xc8, 0x33, 0xfc, 0x7b, 0xa5, 0x2e, 0xd, 0x85, 0x42, 0xa1, 0x88, 0xf, 0xea, 0x19, 0x29, 0x37, 0x52, 0x91, 0xc7, 0x73, 0xd0, 0xc4, 0x48, 0x4f, 0x23, 0x43, 0x8c, 0x8c, 0x33, 0x32, 0xd2, 0xc8, 0x31, 0x46, 0xa, 0x75, 0x79, 0x28, 0x14, 0xa, 0x45, 0x7c, 0xc8, 0x4e, 0xb1, 0x11, 0x20, 0xb8, 0x43, 0x8c, 0xbc, 0x68, 0x64, 0xb4, 0x91, 0x63, 0x75, 0x8e, 0x14, 0xa, 0x85, 0x22, 0xfa, 0xf0, 0x72, 0x5d, 0x22, 0x89, 0x63, 0x6a, 0x8c, 0x8, 0xbd, 0x95, 0x91, 0x46, 0xfc, 0x73, 0xeb, 0xc, 0x9, 0xec, 0x0, 0xca, 0x28, 0x23, 0x7f, 0x17, 0xc7, 0xcd, 0xa9, 0x50, 0x28, 0x14, 0x8a, 0x18, 0x91, 0xdd, 0x93, 0x46, 0x6e, 0x8c, 0xd1, 0xf7, 0x6c, 0x40, 0xb2, 0xdb, 0xca, 0x48, 0x6b, 0x23, 0x9d, 0x53, 0xc8, 0xc, 0xf1, 0xbb, 0x44, 0x9a, 0xff, 0xdb, 0x97, 0x9f, 0xbb, 0xd7, 0xc8, 0x75, 0x46, 0x56, 0xe9, 0xb2, 0x51, 0x28, 0x14, 0x8a, 0xe8, 0x59, 0x3d, 0x36, 0x34, 0x8c, 0xd9, 0xf7, 0x44, 0x6, 0xe6, 0x4a, 0x23, 0x33, 0x8d, 0xbc, 0x4f, 0xe2, 0x3a, 0xd1, 0x48, 0x27, 0x23, 0xfd, 0x8d, 0x3c, 0x6a, 0xe4, 0xbb, 0x34, 0xff, 0x1f, 0x99, 0xaa, 0x17, 0x19, 0x79, 0xdb, 0x48, 0x77, 0x5d, 0x36, 0xa, 0x85, 0x42, 0x11, 0xf, 0xb2, 0xcb, 0x17, 0x20, 0x13, 0x13, 0x9, 0x29, 0x7f, 0x31, 0x72, 0x90, 0x91, 0x2b, 0x8d, 0xcc, 0x4d, 0xf3, 0xf9, 0x1e, 0x46, 0xde, 0x32, 0x32, 0x40, 0x97, 0x8e, 0x42, 0xa1, 0x50, 0x28, 0xd9, 0x45, 0x11, 0xb3, 0x8d, 0xdc, 0x64, 0x64, 0x2f, 0x71, 0xdc, 0x95, 0xcb, 0x3c, 0x3e, 0xd7, 0x82, 0x96, 0x20, 0xdc, 0xbc, 0x9, 0x9d, 0x36, 0x85, 0x42, 0xa1, 0x50, 0xb2, 0x8b, 0x22, 0xe0, 0xee, 0x1c, 0x66, 0xa4, 0x8f, 0x91, 0x17, 0xd2, 0x7c, 0x6e, 0xa8, 0x38, 0xee, 0xd0, 0x22, 0x9d, 0x32, 0x85, 0x42, 0xa1, 0x50, 0xb2, 0x8b, 0x2a, 0xd0, 0x55, 0xe5, 0x78, 0x23, 0x3, 0x8d, 0xac, 0xf0, 0xf8, 0xcc, 0xd9, 0x46, 0x1e, 0x96, 0xf8, 0xc5, 0x38, 0x15, 0xa, 0x85, 0x42, 0xc9, 0x2e, 0xcf, 0x0, 0x32, 0x43, 0xed, 0xdd, 0xd7, 0x1e, 0xd7, 0x4f, 0xa2, 0x85, 0xa7, 0x45, 0xe8, 0xa, 0x85, 0x42, 0xa1, 0x64, 0x17, 0x69, 0x8c, 0x17, 0xa7, 0x4, 0xe1, 0x4d, 0x8f, 0xeb, 0xa7, 0x89, 0xe3, 0xfa, 0x54, 0x28, 0x14, 0xa, 0x85, 0x92, 0x5d, 0xa4, 0xb1, 0xdc, 0xc8, 0x9f, 0xc4, 0x49, 0x4e, 0xb1, 0x1, 0x99, 0x9c, 0x67, 0xea, 0x34, 0x29, 0x14, 0xa, 0x85, 0x92, 0x5d, 0xd4, 0x81, 0xa3, 0x81, 0x10, 0xc3, 0x7b, 0xc8, 0xe3, 0xfa, 0x8, 0x23, 0xbd, 0x74, 0x9a, 0x14, 0xa, 0x85, 0x42, 0xc9, 0x2e, 0xea, 0x40, 0xd3, 0xec, 0xc1, 0xe2, 0xf4, 0xcf, 0x74, 0x3, 0x67, 0x2, 0x22, 0x7e, 0xd7, 0x42, 0xa7, 0x49, 0xa1, 0x50, 0x28, 0x94, 0xec, 0xa2, 0x8e, 0xf5, 0xb4, 0xf0, 0x3e, 0xb6, 0x5c, 0xdb, 0x45, 0x9c, 0x33, 0x2, 0xb, 0x74, 0x9a, 0x14, 0xa, 0x85, 0x42, 0xc9, 0x2e, 0xea, 0x40, 0x3d, 0xde, 0x0, 0x23, 0xdf, 0x5a, 0xae, 0x9d, 0x6a, 0xe4, 0x70, 0x9d, 0x22, 0x85, 0x42, 0xa1, 0x50, 0xb2, 0x8b, 0x3, 0xe6, 0x18, 0x19, 0x24, 0xce, 0x29, 0xe8, 0xa9, 0x48, 0x9e, 0x0, 0xbf, 0x85, 0x4e, 0x91, 0x42, 0xa1, 0x50, 0x28, 0xd9, 0xc5, 0x1, 0xaf, 0x19, 0xb9, 0xdb, 0x32, 0xbe, 0xb3, 0x91, 0x8b, 0x75, 0x7a, 0x14, 0xa, 0x85, 0x42, 0xc9, 0x2e, 0x2e, 0xb8, 0xd9, 0xc8, 0x44, 0xcb, 0xf8, 0x19, 0x46, 0x76, 0xd2, 0xe9, 0x51, 0x28, 0x14, 0xa, 0x25, 0xbb, 0x38, 0xe0, 0x7, 0x23, 0x97, 0x59, 0xc6, 0xb7, 0x11, 0xe7, 0x68, 0x20, 0x85, 0x42, 0xa1, 0x50, 0x28, 0xd9, 0xc5, 0x2, 0x38, 0xd1, 0xfc, 0x19, 0xcb, 0x38, 0x92, 0x55, 0xda, 0xeb, 0xf4, 0x28, 0x14, 0xa, 0x85, 0x92, 0x5d, 0x5c, 0x80, 0xa2, 0xf2, 0x9f, 0x5d, 0x63, 0xa8, 0xbd, 0xfb, 0x8b, 0x4e, 0x8d, 0x42, 0xa1, 0x50, 0x28, 0xd9, 0xc5, 0x5, 0xe3, 0x8c, 0xbc, 0x6a, 0x19, 0x3f, 0xc1, 0x48, 0x4b, 0x9d, 0x1e, 0x85, 0x42, 0xa1, 0x50, 0xb2, 0x8b, 0x93, 0x75, 0xe7, 0x46, 0x47, 0xd1, 0x36, 0x62, 0xa, 0x85, 0x42, 0xa1, 0x64, 0x17, 0x23, 0x7c, 0x65, 0xe4, 0xd, 0xcb, 0xf8, 0x19, 0x3a, 0x35, 0xa, 0x85, 0x42, 0xa1, 0x64, 0x17, 0x17, 0x54, 0x1a, 0x79, 0xce, 0x32, 0xde, 0xd3, 0x48, 0x3b, 0x9d, 0x1e, 0x85, 0x42, 0xa1, 0x50, 0xb2, 0x8b, 0xb, 0xde, 0x36, 0x32, 0xd7, 0x35, 0xd6, 0x54, 0x9c, 0x33, 0xf1, 0x14, 0xa, 0x85, 0x42, 0xa1, 0x64, 0x17, 0xb, 0x2c, 0x35, 0xf2, 0xa5, 0x65, 0xfc, 0x77, 0x3a, 0x35, 0xa, 0x85, 0x42, 0xa1, 0x64, 0x17, 0x27, 0xd8, 0xb2, 0x32, 0xf7, 0x36, 0xd2, 0x5a, 0xa7, 0x46, 0xa1, 0x50, 0x28, 0x94, 0xec, 0xe2, 0x82, 0xb1, 0x46, 0x4a, 0x5c, 0x63, 0x68, 0x1d, 0xb6, 0x9d, 0x4e, 0x8d, 0x42, 0xa1, 0x50, 0x28, 0xd9, 0xc5, 0x5, 0x3f, 0x1a, 0x99, 0xea, 0x1a, 0x2b, 0x10, 0xed, 0x95, 0xa9, 0x50, 0x28, 0x14, 0x59, 0x87, 0x1e, 0x30, 0x1a, 0x1c, 0x70, 0xc0, 0xeb, 0x27, 0x46, 0xf6, 0x70, 0x8d, 0xef, 0x66, 0xe4, 0xe9, 0x8, 0x7f, 0xaf, 0x42, 0x23, 0xd, 0x8c, 0x34, 0xf1, 0xb0, 0x52, 0x13, 0x46, 0xd6, 0x19, 0x59, 0x48, 0xcb, 0x76, 0x83, 0x38, 0xa7, 0xbb, 0x2b, 0x14, 0x99, 0xee, 0x49, 0xc9, 0x35, 0x86, 0xf5, 0xd5, 0x50, 0x9c, 0xc, 0x67, 0x9b, 0xa2, 0xe, 0x85, 0xf2, 0x7b, 0xae, 0x2f, 0xac, 0xb5, 0x72, 0x9d, 0x3e, 0x5f, 0x90, 0xe0, 0xfc, 0xe3, 0x59, 0x6c, 0x6d, 0x64, 0x4b, 0xcb, 0x3b, 0x8c, 0xf9, 0xc7, 0x99, 0x9e, 0x8b, 0x8c, 0x94, 0x89, 0x73, 0xcc, 0x59, 0x45, 0xd8, 0x17, 0x96, 0x22, 0x38, 0xcc, 0xb0, 0x8c, 0xed, 0x1c, 0xb1, 0x8d, 0x7, 0x27, 0xaf, 0x77, 0x30, 0xd2, 0xc9, 0xc8, 0x5e, 0x46, 0xda, 0xf2, 0xdf, 0x45, 0xdc, 0x94, 0x2a, 0x2d, 0x2f, 0x4a, 0x5, 0x17, 0xff, 0x4f, 0xe2, 0x9c, 0xf9, 0x87, 0x79, 0x98, 0x69, 0x64, 0x16, 0xff, 0xfc, 0x26, 0xa6, 0xcf, 0xbb, 0x1e, 0x37, 0x9, 0xe1, 0xc6, 0x5b, 0xaa, 0xaf, 0x40, 0x5a, 0x6c, 0x6b, 0x64, 0x47, 0xa, 0xd6, 0x19, 0x9a, 0x2f, 0xa0, 0x79, 0xfa, 0xf6, 0x54, 0xa6, 0xa, 0x39, 0xa7, 0x95, 0x1e, 0x1b, 0x72, 0x39, 0x37, 0x5a, 0x6c, 0xba, 0xf3, 0xc5, 0x39, 0x48, 0x79, 0x26, 0xff, 0x3e, 0xdb, 0xc8, 0x2, 0x6e, 0xc6, 0x8a, 0xf4, 0x68, 0xcd, 0xf7, 0xbb, 0x3, 0xf7, 0xa7, 0x2e, 0x46, 0x76, 0x30, 0xd2, 0x86, 0x7b, 0x40, 0x7d, 0x8f, 0xf7, 0x3c, 0x39, 0xff, 0xdf, 0x73, 0xee, 0x67, 0xf0, 0x1d, 0x9f, 0xc2, 0x77, 0x7c, 0x9e, 0x92, 0x5d, 0xfe, 0x60, 0x11, 0x17, 0x49, 0x22, 0x65, 0xac, 0x63, 0xc8, 0xef, 0x19, 0xbd, 0x3c, 0xf, 0x31, 0x72, 0xb0, 0x91, 0xae, 0x5c, 0xfc, 0xad, 0x6a, 0xf1, 0x73, 0x1a, 0xf0, 0x67, 0x61, 0x43, 0xeb, 0x95, 0x32, 0x8e, 0xd, 0x68, 0xba, 0x91, 0x31, 0x46, 0xfe, 0x27, 0x4e, 0x89, 0x46, 0x1c, 0x2c, 0x3f, 0x28, 0x2, 0xb7, 0x53, 0x9, 0x10, 0x6e, 0x2, 0x77, 0x18, 0x79, 0x25, 0x8b, 0xf7, 0xd0, 0x90, 0xd6, 0xd0, 0xce, 0x54, 0x4a, 0x5a, 0xf3, 0x7e, 0x92, 0x8d, 0xc8, 0x8b, 0x68, 0x1, 0x5d, 0x60, 0xe4, 0xbb, 0x1c, 0xcc, 0x11, 0x7e, 0x7f, 0x37, 0x23, 0x87, 0x89, 0x93, 0xac, 0xb5, 0x13, 0x89, 0xae, 0x7e, 0x1d, 0xf6, 0xaf, 0x22, 0xae, 0x33, 0x6c, 0xcc, 0xfb, 0xbb, 0x3c, 0x2b, 0xdf, 0x52, 0xd9, 0x1a, 0x2f, 0xce, 0xb9, 0x93, 0x93, 0xe8, 0x69, 0xc8, 0x77, 0xd4, 0xe7, 0x3e, 0x84, 0xf7, 0xbc, 0x37, 0x9f, 0x43, 0xe7, 0x3a, 0xcc, 0x7f, 0x52, 0x61, 0xe9, 0x9d, 0x72, 0x6d, 0x1e, 0x15, 0x8e, 0x64, 0xb, 0xc5, 0xaf, 0xa5, 0x6a, 0xe, 0x83, 0x92, 0x5d, 0x8c, 0xb0, 0xd8, 0xc8, 0x2f, 0xe2, 0xd4, 0xd8, 0x25, 0xd1, 0x82, 0xda, 0x6a, 0x98, 0x36, 0x78, 0xb8, 0x29, 0x50, 0xf4, 0x7e, 0x84, 0x91, 0xc3, 0x49, 0x50, 0x41, 0xa1, 0x2d, 0xa5, 0x9f, 0x91, 0xeb, 0x8d, 0x7c, 0x64, 0xe4, 0x29, 0x23, 0x6f, 0x8a, 0x53, 0xb2, 0x11, 0x55, 0x1c, 0x21, 0x55, 0x5b, 0xc2, 0x2d, 0xa, 0x98, 0xec, 0xb0, 0x69, 0x75, 0x37, 0xb2, 0x9f, 0x91, 0x3, 0x8c, 0xec, 0x23, 0x4e, 0xf, 0xd6, 0xa2, 0x6a, 0xfe, 0xdf, 0xf3, 0x46, 0xfe, 0x9b, 0xc5, 0xb9, 0x1, 0xb1, 0xf5, 0x31, 0x72, 0x1a, 0xad, 0x87, 0x6c, 0xec, 0x3b, 0xc5, 0xdc, 0xd0, 0x21, 0xfd, 0x8d, 0xc, 0xe5, 0x6, 0x8c, 0x86, 0xf, 0x23, 0xb9, 0xee, 0xf2, 0xd, 0xed, 0xa9, 0xc4, 0x9e, 0xc8, 0xf7, 0xbd, 0x41, 0xc0, 0xbf, 0xab, 0x3d, 0x9, 0x75, 0x8, 0x95, 0x8e, 0xff, 0x70, 0xee, 0xc7, 0x2b, 0xd9, 0xc5, 0xf, 0x38, 0x1, 0x61, 0x8d, 0x8b, 0xec, 0x8a, 0xa8, 0x7d, 0x2f, 0x8, 0xc1, 0xfd, 0x61, 0x23, 0x38, 0x95, 0x1b, 0x75, 0xb7, 0x1c, 0x69, 0xfa, 0x7d, 0x28, 0xd3, 0x8c, 0x3c, 0x6e, 0xe4, 0x3e, 0xa9, 0x7a, 0x72, 0x44, 0x14, 0x60, 0x73, 0xb5, 0x95, 0x7, 0xb8, 0x91, 0x9c, 0xcc, 0x79, 0xeb, 0x4e, 0xcb, 0xa6, 0x26, 0x48, 0x64, 0x61, 0x3e, 0x12, 0x24, 0x19, 0x9c, 0xf8, 0xd1, 0xd7, 0xf5, 0xe, 0xe4, 0x6a, 0xaf, 0x83, 0x5, 0x73, 0x95, 0x38, 0x67, 0x4f, 0xc2, 0xb3, 0x80, 0x23, 0xb9, 0x9e, 0xa5, 0x15, 0x18, 0x67, 0xec, 0x6e, 0xe4, 0x1c, 0x23, 0x87, 0x4a, 0x6e, 0xba, 0x38, 0x25, 0xc3, 0x21, 0xff, 0xe0, 0xdc, 0x7f, 0xc0, 0xf7, 0xfc, 0x1d, 0x7a, 0x40, 0x94, 0xec, 0x62, 0x80, 0xd5, 0x46, 0xd6, 0x5a, 0xb4, 0xf1, 0x46, 0x39, 0xbe, 0xaf, 0x83, 0xb8, 0x9, 0x1d, 0x23, 0x8e, 0xeb, 0xab, 0xa6, 0xc0, 0x26, 0xe, 0x3f, 0x3d, 0x12, 0x51, 0x56, 0x88, 0x13, 0x9b, 0x4a, 0x70, 0xc3, 0x87, 0x65, 0x81, 0x58, 0x4b, 0x73, 0x23, 0x9b, 0xd5, 0xe0, 0x67, 0xc2, 0x8d, 0x72, 0x8b, 0x91, 0xb3, 0xc4, 0x39, 0xf9, 0xfd, 0x71, 0x89, 0x56, 0xcc, 0xab, 0x32, 0xc3, 0xb1, 0xba, 0xa0, 0x27, 0x37, 0xad, 0xa3, 0x42, 0x40, 0x1e, 0xe9, 0x80, 0xe6, 0x9, 0x57, 0x53, 0xab, 0xaf, 0xd, 0xb1, 0xae, 0xa4, 0x60, 0xfe, 0x96, 0x71, 0x43, 0x4c, 0xfe, 0x1c, 0x78, 0x44, 0xb6, 0x20, 0xc1, 0x37, 0xa2, 0x57, 0xa2, 0xb0, 0x86, 0x3f, 0xbf, 0x1, 0x37, 0x7e, 0xc8, 0xa5, 0x46, 0x6e, 0x23, 0xe9, 0xc5, 0xcd, 0xc5, 0x9, 0x4b, 0xff, 0x5c, 0x5a, 0x72, 0xb5, 0xb1, 0xe2, 0xa0, 0x74, 0x22, 0xee, 0xe, 0xf7, 0xe3, 0xf2, 0x94, 0xf5, 0x5c, 0xc9, 0xf5, 0xd7, 0x94, 0xcf, 0x21, 0xe9, 0xad, 0xca, 0x4, 0x9b, 0x1b, 0xf9, 0x3, 0x15, 0x6c, 0x58, 0x78, 0x77, 0xd0, 0xd3, 0x10, 0x78, 0x72, 0x91, 0x92, 0x5d, 0xb0, 0xc0, 0x42, 0xf9, 0xc5, 0xb2, 0x1, 0xe6, 0xc2, 0x85, 0x59, 0x9f, 0x9b, 0xe4, 0x59, 0xb4, 0x8, 0x32, 0x8d, 0x93, 0x94, 0x93, 0xd0, 0x3e, 0x17, 0xa7, 0xc9, 0x35, 0x82, 0xcf, 0x70, 0x37, 0x2e, 0xa1, 0x46, 0x9c, 0x4a, 0x76, 0x15, 0x29, 0x64, 0x87, 0x17, 0xa0, 0x15, 0xad, 0x10, 0x4, 0xbc, 0x7f, 0x4f, 0xcd, 0xba, 0xba, 0x97, 0xe, 0xbe, 0xff, 0x7, 0x8d, 0xfc, 0xd9, 0xc8, 0xe5, 0xb9, 0x72, 0x79, 0x84, 0xc, 0x3d, 0x8c, 0x5c, 0xc8, 0xe7, 0x57, 0x1c, 0xe2, 0xfb, 0x44, 0x72, 0xc9, 0x35, 0x46, 0x4e, 0xcf, 0x70, 0x73, 0xc5, 0xba, 0x41, 0xec, 0x10, 0xb1, 0x34, 0xc4, 0x76, 0xe6, 0x51, 0x89, 0x5a, 0xc9, 0x77, 0x47, 0xaa, 0x21, 0xbb, 0x86, 0x54, 0xaa, 0x40, 0x78, 0xad, 0xb9, 0xce, 0xba, 0xd3, 0x8a, 0xd8, 0x3c, 0xc3, 0xd, 0x78, 0x57, 0x2a, 0x56, 0x3, 0x68, 0x79, 0xbc, 0x17, 0x83, 0xf5, 0x2, 0xeb, 0xed, 0x62, 0x2a, 0xb4, 0x99, 0x5a, 0xfd, 0x78, 0x97, 0x67, 0xf1, 0x3d, 0x1f, 0xc7, 0xe7, 0xb0, 0x84, 0xef, 0x77, 0x2a, 0xd9, 0x25, 0x95, 0xda, 0x26, 0x54, 0x66, 0x93, 0x64, 0xb7, 0xd, 0xdf, 0xef, 0xae, 0x54, 0x76, 0x9a, 0x57, 0xc3, 0x2f, 0x9, 0x3e, 0x2b, 0x58, 0xd7, 0x3, 0x8d, 0xdc, 0x4a, 0x4b, 0x4f, 0xc9, 0x2e, 0xa2, 0xa8, 0x97, 0x25, 0x97, 0x51, 0x75, 0xe8, 0x4f, 0xf7, 0x41, 0xaf, 0x1a, 0x68, 0xd6, 0xe3, 0xb9, 0xf0, 0xb1, 0x0, 0x27, 0xd0, 0x4a, 0xcd, 0x4, 0xc9, 0xec, 0xb7, 0xf9, 0x16, 0x6d, 0x1a, 0x19, 0x5e, 0x87, 0x51, 0xa3, 0x3e, 0xa0, 0x1a, 0xb, 0x17, 0xd6, 0xe7, 0x28, 0x5a, 0x8, 0xff, 0xce, 0xd3, 0xf5, 0x83, 0xac, 0xc4, 0x21, 0x54, 0x50, 0x6a, 0xfa, 0xae, 0x42, 0x2b, 0x5f, 0x98, 0x42, 0x1e, 0x73, 0xb9, 0x69, 0x81, 0x5c, 0x3e, 0xe, 0xe0, 0x5e, 0xf1, 0x5c, 0xef, 0x12, 0x27, 0x26, 0x97, 0xe, 0x3f, 0x70, 0x33, 0x7d, 0x5f, 0x9c, 0xf8, 0xcd, 0x2c, 0xa9, 0xb9, 0x1b, 0x71, 0x59, 0x35, 0x7b, 0x1a, 0x48, 0x10, 0x9, 0x43, 0x7, 0x8a, 0x93, 0xb4, 0xd2, 0x85, 0x9b, 0x71, 0x3a, 0xf4, 0xe6, 0x9a, 0xbc, 0xdb, 0xc8, 0x30, 0x89, 0xa6, 0x2b, 0x1d, 0xdf, 0xfd, 0x4c, 0x2a, 0x1c, 0x99, 0x74, 0x6a, 0x42, 0x1c, 0xed, 0xb, 0x71, 0x7a, 0xf9, 0x7e, 0xc8, 0x77, 0x37, 0xd3, 0x24, 0x12, 0x58, 0xc1, 0x3f, 0x7a, 0x5c, 0xc3, 0xfc, 0xef, 0xce, 0xf7, 0x1c, 0x4a, 0xee, 0xde, 0x24, 0x47, 0x2f, 0xf4, 0xe1, 0xfb, 0xfe, 0xb0, 0x91, 0x9b, 0xa4, 0x6a, 0x5f, 0x61, 0x25, 0x3b, 0x45, 0xb5, 0xc0, 0xb, 0x7f, 0xa5, 0x91, 0x23, 0x33, 0x78, 0xd6, 0x15, 0xd4, 0xb0, 0x9f, 0xe0, 0x46, 0x34, 0xc1, 0xe7, 0x7b, 0xc1, 0x4b, 0x34, 0x83, 0x82, 0x33, 0xff, 0xf6, 0x35, 0x72, 0x34, 0x37, 0xf2, 0x2d, 0x3c, 0xfe, 0x4f, 0x33, 0x23, 0xff, 0xa2, 0xa6, 0x8e, 0x4d, 0x7f, 0x5d, 0x1e, 0x3d, 0xbb, 0x53, 0xb8, 0x69, 0x75, 0xc8, 0xf0, 0xf3, 0x20, 0x8c, 0x89, 0xdc, 0xb8, 0xbe, 0x22, 0xa9, 0x2d, 0x94, 0xec, 0x24, 0xfd, 0xc0, 0xea, 0x84, 0xeb, 0x39, 0x5d, 0x62, 0xc, 0xb2, 0xf1, 0x1e, 0xa5, 0xe5, 0x34, 0x25, 0xc0, 0x7b, 0x29, 0xa3, 0x62, 0x36, 0x96, 0x22, 0x5c, 0x3f, 0x70, 0x1, 0xff, 0x89, 0xa, 0x5f, 0x61, 0x9a, 0xfd, 0xf0, 0x22, 0xbe, 0x37, 0x58, 0x97, 0x33, 0x23, 0xb4, 0x5e, 0x92, 0x61, 0x80, 0x23, 0x32, 0x98, 0x9f, 0xd1, 0xe2, 0x24, 0x8b, 0x20, 0x76, 0xf6, 0x6d, 0x0, 0xf7, 0x82, 0xf7, 0xf4, 0x53, 0x4a, 0x82, 0x64, 0x77, 0x38, 0xd7, 0x74, 0xfb, 0x34, 0x96, 0x1e, 0x2c, 0xbc, 0xbe, 0x5c, 0xf7, 0x4f, 0x28, 0xd9, 0x45, 0xb, 0x30, 0xe5, 0x9b, 0x7a, 0x3c, 0xd8, 0xa0, 0x2d, 0x2, 0xb8, 0x31, 0xce, 0x91, 0xea, 0x33, 0xf3, 0x16, 0xd3, 0x82, 0x7a, 0x82, 0xda, 0x5d, 0xb6, 0xe2, 0x64, 0x9f, 0x51, 0x86, 0xf3, 0x5e, 0xe1, 0xfa, 0xf2, 0x3a, 0xcd, 0x7d, 0x30, 0x5d, 0x24, 0x27, 0xd1, 0xad, 0x12, 0x67, 0x40, 0x23, 0xbf, 0x9d, 0xdf, 0x35, 0x13, 0x5, 0x2, 0x1b, 0xfa, 0x5b, 0x46, 0x5e, 0x26, 0xc1, 0x95, 0x65, 0xf1, 0x5e, 0xb, 0xf9, 0xfc, 0x6, 0xa5, 0xf9, 0xcc, 0x47, 0xb4, 0x96, 0x5e, 0x92, 0xdc, 0xc5, 0x60, 0x93, 0x4a, 0xd6, 0x63, 0xb4, 0x38, 0xce, 0x33, 0x72, 0x6c, 0x1a, 0x25, 0xb, 0xd6, 0x8, 0xd2, 0xe5, 0x7, 0x70, 0xc3, 0x8e, 0x82, 0x62, 0x84, 0xe7, 0xd0, 0x22, 0xcd, 0x67, 0xf0, 0xde, 0xa0, 0xd4, 0xe7, 0x11, 0xbe, 0x77, 0x95, 0x59, 0xba, 0xb7, 0x4a, 0x5a, 0x8f, 0x10, 0xb8, 0x2a, 0x8f, 0xe1, 0xbe, 0xd4, 0xd3, 0xe3, 0xf3, 0xc8, 0xd4, 0x7e, 0x9c, 0x4a, 0xc9, 0x10, 0x7a, 0x2, 0x7c, 0x81, 0xb6, 0xb, 0xb, 0x16, 0x70, 0xd3, 0x15, 0x5b, 0x2c, 0xa8, 0xa0, 0xb2, 0xbf, 0xea, 0x91, 0x34, 0xa0, 0x3d, 0x5f, 0x50, 0xd, 0xd1, 0x2d, 0xa4, 0xbb, 0xe6, 0x20, 0xbe, 0xd4, 0xef, 0xe5, 0x68, 0x33, 0x5a, 0xca, 0x45, 0xdd, 0x87, 0x1b, 0xa2, 0x17, 0xfa, 0x51, 0x1b, 0x6d, 0x16, 0xe3, 0xf5, 0x82, 0xd, 0xe0, 0x9d, 0xc, 0x88, 0x6e, 0x39, 0xad, 0x63, 0x3c, 0x3b, 0xb8, 0x8a, 0xfe, 0x29, 0x8e, 0xdb, 0xb8, 0x2c, 0xcb, 0xf7, 0x3b, 0x22, 0xd, 0xd1, 0x2d, 0xe2, 0xa6, 0x86, 0x24, 0x95, 0xe7, 0x24, 0x1c, 0xc9, 0x46, 0x15, 0xf4, 0x58, 0xc, 0xe4, 0x7a, 0x43, 0x46, 0xa0, 0x57, 0x62, 0x44, 0x47, 0x12, 0xde, 0x81, 0x21, 0x5e, 0x2f, 0x5, 0x24, 0x90, 0xc7, 0xd3, 0x10, 0x5d, 0x5, 0x49, 0x1e, 0xdf, 0xf7, 0x4c, 0x92, 0x77, 0x65, 0x8e, 0xee, 0x17, 0x99, 0xe9, 0x4f, 0xf2, 0x5e, 0xb0, 0xc6, 0xa7, 0xa6, 0xf9, 0xec, 0xe9, 0x54, 0xe2, 0x7a, 0x28, 0xd9, 0x45, 0x3, 0x4d, 0xa5, 0x6a, 0x5c, 0x6a, 0x43, 0x40, 0xae, 0x3, 0x68, 0xac, 0x23, 0xa9, 0xb9, 0xed, 0x98, 0xe6, 0x73, 0x88, 0x91, 0xc0, 0xb5, 0x89, 0xb6, 0x65, 0xd7, 0x85, 0xc8, 0x55, 0x33, 0x99, 0x5a, 0xdf, 0x5f, 0x65, 0x63, 0x72, 0x82, 0x1b, 0x88, 0xb, 0x3d, 0x95, 0x46, 0x23, 0x8f, 0x32, 0x4e, 0xe4, 0xf3, 0xeb, 0x9a, 0xe6, 0x33, 0x8b, 0xa8, 0xa0, 0xec, 0x46, 0x6b, 0xf8, 0xe3, 0x1c, 0xde, 0x2f, 0xea, 0xd6, 0xce, 0xf7, 0xb8, 0xf6, 0x16, 0x35, 0xf3, 0xfb, 0x25, 0xbc, 0xae, 0x67, 0x90, 0xde, 0xb9, 0x54, 0x16, 0x3e, 0xf4, 0xf8, 0x4c, 0xb, 0x2a, 0x58, 0x5d, 0x42, 0x78, 0xff, 0xf0, 0x82, 0x20, 0x83, 0x14, 0xb1, 0x78, 0x2f, 0x4f, 0xd1, 0xe7, 0xfc, 0x7e, 0x20, 0x8e, 0xaf, 0x43, 0x74, 0xef, 0x50, 0xf6, 0x9f, 0x26, 0x91, 0xd, 0x4d, 0x63, 0xbd, 0xc1, 0x9d, 0xfc, 0x6, 0xf7, 0x5, 0x25, 0xbb, 0x90, 0x3, 0xd9, 0x88, 0xee, 0xf4, 0xfb, 0x1f, 0xc4, 0xdf, 0x6c, 0x4c, 0x68, 0x77, 0x97, 0x88, 0xe3, 0x8a, 0xec, 0x5b, 0x8d, 0x1b, 0xe3, 0x6, 0x5a, 0x3, 0x8, 0x2, 0xaf, 0xc, 0xe9, 0x9c, 0xc1, 0xe5, 0x75, 0x38, 0x49, 0xd9, 0x8b, 0xf0, 0x86, 0x4b, 0x38, 0x12, 0x7f, 0xfc, 0xc2, 0x60, 0x6a, 0xdf, 0x4d, 0xd3, 0x68, 0xe7, 0xf, 0x50, 0x23, 0x86, 0x82, 0xb2, 0x24, 0xc7, 0xf7, 0x8b, 0x58, 0xeb, 0xdf, 0x3d, 0xae, 0xdd, 0xc1, 0xeb, 0x73, 0x22, 0x32, 0xf7, 0x88, 0x5f, 0xf5, 0xa7, 0x75, 0x6c, 0xc3, 0xb6, 0xb4, 0x9c, 0xb6, 0xc, 0xd1, 0x3d, 0xb7, 0xa5, 0x17, 0xc4, 0x8b, 0x4, 0xa0, 0x50, 0x27, 0x4b, 0x3f, 0xde, 0xd, 0xf1, 0xdc, 0xc3, 0xd2, 0xbb, 0x99, 0x7b, 0xd2, 0x48, 0x8f, 0xcf, 0x34, 0xe7, 0xfc, 0x5f, 0xa0, 0x64, 0x17, 0x6e, 0x6c, 0x6f, 0x19, 0x9b, 0xef, 0xb3, 0xe5, 0x8, 0x17, 0xd1, 0xed, 0x69, 0xdc, 0x18, 0x58, 0xf8, 0x88, 0xc7, 0xed, 0xc3, 0x17, 0x20, 0xa, 0xbd, 0x2, 0x3f, 0xe5, 0x6, 0xf4, 0x59, 0x1a, 0x17, 0xc7, 0xc5, 0x31, 0x58, 0x1f, 0x50, 0x54, 0xae, 0x15, 0x27, 0x8b, 0xd1, 0x2b, 0x69, 0x2, 0xc9, 0x26, 0x70, 0xe1, 0x9e, 0x1d, 0x12, 0x2b, 0x1c, 0xb1, 0xd3, 0x3b, 0xc5, 0x5e, 0xba, 0x72, 0xa3, 0x38, 0x75, 0x6b, 0x51, 0xab, 0x57, 0x43, 0x79, 0x10, 0x12, 0x53, 0x4e, 0x13, 0x7b, 0x88, 0x61, 0x2f, 0x3e, 0xa7, 0x30, 0x0, 0x56, 0x26, 0xba, 0xd, 0xed, 0xef, 0x71, 0x7d, 0x1a, 0xdf, 0x1d, 0x28, 0xb6, 0x51, 0xc9, 0x28, 0x9d, 0x42, 0x5, 0x17, 0x56, 0x9e, 0x2d, 0xeb, 0xbb, 0x9, 0x95, 0x91, 0xcb, 0x94, 0xec, 0xc2, 0xb, 0x5b, 0x26, 0x9d, 0x9f, 0x1a, 0x2f, 0x5c, 0x19, 0x7, 0xa4, 0xb9, 0xfe, 0x39, 0x17, 0x11, 0x5e, 0xe2, 0xa8, 0x35, 0x5f, 0xfe, 0x86, 0x16, 0xc2, 0x27, 0x1e, 0xd7, 0x61, 0x59, 0xfc, 0x3e, 0xe2, 0xeb, 0x3, 0x75, 0x5d, 0xc3, 0xaa, 0xb1, 0x72, 0xfb, 0xd2, 0x6a, 0xf, 0xb, 0xb0, 0xe9, 0xdb, 0x4e, 0xbb, 0xb8, 0x85, 0xca, 0x54, 0x94, 0x1, 0xa5, 0x10, 0xc9, 0x2b, 0xb6, 0xf8, 0xe2, 0xb9, 0x54, 0x3a, 0x72, 0x89, 0x4e, 0xb4, 0xe8, 0xbc, 0xfa, 0x58, 0xbe, 0x40, 0x6b, 0x2e, 0x8a, 0xb5, 0x82, 0x15, 0xb4, 0xf2, 0x8e, 0x13, 0xef, 0xee, 0x52, 0x37, 0x53, 0x29, 0x51, 0xb2, 0xb, 0x19, 0xa0, 0xa9, 0xef, 0x6a, 0x19, 0x9f, 0xec, 0xe3, 0xef, 0x98, 0x27, 0x76, 0x77, 0x12, 0x12, 0x18, 0xae, 0x20, 0x19, 0x8c, 0x8e, 0xf0, 0x1c, 0x7e, 0xcf, 0xc5, 0x6f, 0x4b, 0x55, 0x47, 0x2d, 0xcf, 0x8, 0x9, 0x77, 0x27, 0x91, 0x74, 0x80, 0x5b, 0x66, 0x88, 0xc7, 0x35, 0x3c, 0x3f, 0xb4, 0x3, 0x43, 0xfc, 0xf2, 0xc7, 0x10, 0xdd, 0x33, 0x14, 0xa7, 0x13, 0x2c, 0xe3, 0x2f, 0x92, 0xe8, 0x2a, 0x63, 0xf0, 0xde, 0xa2, 0x3c, 0xe2, 0x7c, 0xcb, 0x77, 0xc1, 0xfb, 0xdc, 0x26, 0x87, 0xf7, 0x5, 0xc5, 0xf6, 0x71, 0xf1, 0x3e, 0xf, 0x13, 0xef, 0x2, 0x4a, 0x2b, 0xa2, 0x7e, 0xca, 0xc3, 0x3b, 0x5c, 0x67, 0x5f, 0x7a, 0xf0, 0xd5, 0x70, 0x7a, 0xf, 0x94, 0xec, 0x42, 0x4, 0xc4, 0xea, 0xf6, 0xb3, 0x8c, 0xcf, 0xf2, 0xf1, 0x77, 0xe0, 0x85, 0xbc, 0x47, 0x36, 0x3d, 0x1f, 0x6f, 0x24, 0xad, 0x1, 0x68, 0xda, 0x25, 0x31, 0x98, 0xc7, 0x25, 0xb4, 0x4c, 0x6d, 0x41, 0xec, 0x3d, 0xeb, 0xea, 0xda, 0xc8, 0x11, 0x50, 0xc3, 0x75, 0x87, 0xc7, 0x35, 0x14, 0xd4, 0xa2, 0x9d, 0xd2, 0x53, 0x21, 0xbb, 0x67, 0x64, 0x15, 0x5f, 0x2c, 0x55, 0xdd, 0xad, 0x8b, 0x39, 0x5e, 0x16, 0xa3, 0x77, 0x17, 0x1d, 0x7c, 0x1e, 0x4a, 0xf9, 0x37, 0xdc, 0xe9, 0xe8, 0x21, 0xfb, 0x4c, 0x8e, 0xee, 0x7, 0xa, 0x1d, 0x5a, 0x6a, 0xed, 0xed, 0x71, 0xfd, 0x1a, 0x3e, 0x83, 0xb8, 0x9c, 0xe7, 0x87, 0x2c, 0xcd, 0x3f, 0xca, 0xc6, 0x3a, 0x49, 0x9b, 0x17, 0xe1, 0x7c, 0x25, 0xbb, 0xf0, 0x0, 0x8d, 0x95, 0xdd, 0xad, 0x7a, 0x16, 0x5, 0xa0, 0x79, 0x55, 0x70, 0xa1, 0x63, 0x61, 0xdc, 0xc4, 0x45, 0xf2, 0x75, 0xcc, 0xe6, 0x72, 0x2, 0xdd, 0x17, 0xb6, 0xc4, 0x1e, 0x8c, 0xef, 0x16, 0xa1, 0xef, 0x2, 0x57, 0x98, 0x57, 0xcc, 0xb, 0x5d, 0x6b, 0xe, 0x16, 0xef, 0x58, 0x65, 0x2e, 0x81, 0x98, 0x6f, 0x6f, 0xcb, 0xf8, 0xdf, 0x24, 0x98, 0xec, 0xe2, 0x5c, 0x3, 0x1e, 0x13, 0x64, 0x36, 0xa3, 0x1e, 0xf, 0xa1, 0x2, 0xa4, 0xcc, 0xaf, 0xcd, 0xc1, 0x7d, 0x60, 0x9d, 0x20, 0xa6, 0xeb, 0x55, 0x2, 0x71, 0x95, 0x78, 0x27, 0xb, 0x45, 0x19, 0x8b, 0xa9, 0xf4, 0xbd, 0xe2, 0xc1, 0x5b, 0xe8, 0x67, 0xda, 0x5f, 0xc9, 0x2e, 0x1c, 0x38, 0xd2, 0x43, 0x63, 0x59, 0x18, 0xc0, 0xef, 0x5a, 0xca, 0xdf, 0x77, 0x65, 0x4c, 0xac, 0x39, 0x1b, 0x60, 0xe9, 0x3c, 0x6a, 0x19, 0x47, 0xf0, 0x7a, 0x50, 0x44, 0xbe, 0x3, 0x6a, 0xb7, 0xee, 0x13, 0x7b, 0x7f, 0xcb, 0x2f, 0xf9, 0xc, 0xe7, 0x85, 0xf4, 0xde, 0x61, 0xd9, 0xb8, 0x33, 0x60, 0xe1, 0x92, 0x7f, 0x2e, 0xa6, 0xeb, 0xd, 0xef, 0xe9, 0x19, 0xe2, 0x14, 0x62, 0xe7, 0xd2, 0x6a, 0x1d, 0x4c, 0xcf, 0x86, 0x97, 0x45, 0x77, 0x63, 0x8c, 0xf7, 0x50, 0x24, 0xe, 0xd, 0xf0, 0x50, 0xfe, 0x10, 0xc6, 0x40, 0x86, 0x72, 0xa6, 0x1d, 0x86, 0x94, 0xec, 0x2, 0x2, 0xfa, 0x40, 0xda, 0x3a, 0x4, 0xa0, 0x8b, 0x40, 0x50, 0xc5, 0xb5, 0xab, 0xf3, 0x60, 0x5e, 0x87, 0x79, 0x90, 0x1, 0x62, 0x15, 0x5d, 0x43, 0x7e, 0xef, 0x28, 0xf0, 0x47, 0xdd, 0x59, 0x5b, 0xcb, 0xb5, 0xc9, 0xb4, 0x20, 0x16, 0x87, 0xf4, 0xde, 0xe1, 0x92, 0x3f, 0xd4, 0xe2, 0x51, 0xb8, 0x47, 0xaa, 0x36, 0x3a, 0x57, 0xf8, 0x7, 0xa4, 0xe4, 0xdf, 0x22, 0xf6, 0x32, 0x9b, 0xbb, 0x62, 0x6a, 0xd1, 0xb9, 0x81, 0x12, 0x29, 0xc4, 0xed, 0x6d, 0xde, 0xaa, 0x36, 0xb4, 0xb8, 0x33, 0x3a, 0x5d, 0x45, 0xc9, 0x2e, 0x18, 0xa0, 0xc0, 0x7b, 0x67, 0xd7, 0x18, 0xfc, 0xe9, 0x63, 0x74, 0x6a, 0xea, 0x84, 0xef, 0xf8, 0xf2, 0xbb, 0x81, 0x98, 0xc6, 0xd9, 0x21, 0xbf, 0x77, 0xd4, 0xc7, 0xf5, 0xf2, 0xb0, 0x20, 0x50, 0x50, 0x1e, 0x66, 0x57, 0x20, 0x36, 0xdd, 0xad, 0x5d, 0x63, 0x70, 0xc7, 0xbf, 0xac, 0x4b, 0x32, 0x30, 0xa0, 0x6d, 0xdc, 0xdd, 0x62, 0x3f, 0x3d, 0x2, 0x9d, 0x5d, 0x2e, 0xcb, 0xa3, 0xb9, 0xc0, 0x5a, 0x3b, 0xd9, 0xe3, 0x1d, 0x41, 0x8f, 0xdd, 0x8c, 0xca, 0x42, 0x94, 0xec, 0x82, 0xc1, 0x11, 0x16, 0x6d, 0x3, 0xe9, 0xb4, 0x1f, 0xeb, 0xd4, 0xd4, 0x19, 0xe8, 0x68, 0x31, 0xc9, 0x32, 0x7e, 0xbc, 0x64, 0xd6, 0xe9, 0x3d, 0x17, 0x40, 0x31, 0xf8, 0x85, 0x96, 0x71, 0xc4, 0x80, 0x90, 0xac, 0x32, 0x25, 0xe4, 0x73, 0xe, 0x2f, 0x85, 0x3b, 0xc6, 0x88, 0x92, 0x90, 0x65, 0xba, 0x1c, 0x3, 0x3, 0x36, 0x70, 0x5b, 0x89, 0x1, 0x9a, 0x7d, 0xa3, 0xc, 0xa2, 0x24, 0xcf, 0xe6, 0x63, 0x2a, 0xdf, 0x21, 0x9b, 0x67, 0xc, 0x39, 0xb, 0x47, 0x29, 0xd9, 0x65, 0x1f, 0x68, 0xf, 0xf6, 0x7f, 0x96, 0x71, 0xd4, 0xc7, 0x6c, 0xd0, 0xe9, 0xa9, 0x33, 0xd0, 0x75, 0xe1, 0x1e, 0xcb, 0x78, 0xcb, 0x4c, 0x16, 0x7c, 0x96, 0x51, 0x42, 0xab, 0x13, 0xd6, 0xa8, 0xad, 0x4f, 0x29, 0xd2, 0xf5, 0x47, 0x86, 0x7c, 0xbe, 0x11, 0x5f, 0xb4, 0x9d, 0x62, 0xff, 0xb6, 0x2e, 0xc5, 0xc0, 0xd0, 0x97, 0x4a, 0x90, 0x1b, 0xd8, 0x3f, 0xd0, 0x6f, 0x74, 0x71, 0x9e, 0xce, 0xb, 0xf6, 0x50, 0xaf, 0x2c, 0x66, 0xd4, 0xac, 0xb6, 0x50, 0xb2, 0xcb, 0x2e, 0x50, 0x8, 0xdd, 0xd1, 0x35, 0x6, 0x6d, 0xe4, 0x39, 0x9d, 0x1a, 0xdf, 0x80, 0x14, 0xf0, 0x19, 0xae, 0xb1, 0x4, 0xc9, 0xae, 0x28, 0x44, 0xf7, 0x9, 0xb2, 0x43, 0x3d, 0xdd, 0x5e, 0x96, 0x6b, 0x48, 0x7c, 0x18, 0x11, 0x81, 0xb9, 0x46, 0x1f, 0x52, 0xdb, 0xb1, 0x2c, 0x9f, 0xeb, 0x32, 0xc, 0x4, 0x50, 0x8e, 0x6e, 0xb7, 0xec, 0xcd, 0x28, 0x33, 0x42, 0xe6, 0xe5, 0x67, 0x79, 0x3e, 0x3f, 0xc8, 0x38, 0xff, 0xc0, 0x32, 0x8e, 0xce, 0x32, 0x43, 0x94, 0xec, 0xb2, 0x87, 0x22, 0xba, 0x18, 0xdc, 0x80, 0xcb, 0x67, 0x92, 0x4e, 0x8f, 0x6f, 0x40, 0x52, 0xc4, 0xf3, 0x96, 0x71, 0x9c, 0x90, 0xbc, 0x7d, 0x88, 0xee, 0x13, 0x75, 0x51, 0x36, 0xf7, 0xe5, 0x3c, 0x8f, 0xf1, 0xb0, 0x92, 0x9d, 0x7b, 0x4e, 0xe1, 0xbe, 0x5c, 0xa1, 0xcb, 0x30, 0x10, 0x60, 0xff, 0xb0, 0x95, 0xd2, 0x8c, 0x15, 0xe7, 0x6c, 0xc7, 0x7c, 0x7, 0x5a, 0xa0, 0x9d, 0x27, 0xf6, 0xc4, 0xa8, 0xf3, 0x3c, 0x14, 0x4b, 0x25, 0xbb, 0x0, 0x80, 0xd4, 0x71, 0x5b, 0xcf, 0x3a, 0xa4, 0xcd, 0xaf, 0xd7, 0xe9, 0xf1, 0x15, 0xb0, 0x94, 0xdd, 0x1d, 0xf5, 0x51, 0xd7, 0xd8, 0x33, 0x44, 0xf7, 0x88, 0x17, 0xaf, 0xb9, 0x6b, 0xc, 0x59, 0x8c, 0xc3, 0x24, 0x98, 0x12, 0x94, 0x20, 0xd0, 0xc4, 0x62, 0x2d, 0xa3, 0x31, 0xc2, 0x6a, 0x5d, 0x82, 0xbe, 0x3, 0xa7, 0xa9, 0xdb, 0xba, 0x83, 0x60, 0x9d, 0x5f, 0xa4, 0x7b, 0xc8, 0x6f, 0x98, 0x4a, 0xeb, 0xd7, 0x8d, 0x46, 0x95, 0x95, 0x95, 0xd7, 0x16, 0x35, 0x68, 0xd0, 0x40, 0xc9, 0x2e, 0x58, 0xa0, 0xb3, 0x84, 0xad, 0x33, 0xf7, 0x7c, 0x51, 0x17, 0x66, 0x10, 0x80, 0x1b, 0xd3, 0x76, 0x34, 0x4b, 0xbf, 0x90, 0xdf, 0x37, 0xda, 0xb7, 0x3d, 0x1d, 0xa1, 0x79, 0xb6, 0x95, 0x4a, 0x20, 0x76, 0x54, 0xa6, 0x4b, 0xd0, 0x77, 0xa0, 0x2b, 0x88, 0xed, 0x0, 0x63, 0xc4, 0xa8, 0x27, 0xea, 0xf4, 0x6c, 0x2, 0x34, 0x86, 0x9e, 0xe6, 0x1e, 0x34, 0x44, 0xd7, 0xef, 0x8d, 0xd1, 0x1f, 0xf4, 0x56, 0xb2, 0xb, 0x16, 0xa7, 0x79, 0x58, 0x75, 0x88, 0xcb, 0xac, 0xd2, 0xe9, 0xf1, 0x1d, 0x65, 0x1e, 0x64, 0xb7, 0xaf, 0x84, 0x2b, 0x6e, 0xe7, 0x26, 0x89, 0x2b, 0x23, 0x46, 0x14, 0x4d, 0x2c, 0x63, 0x68, 0xdd, 0x56, 0xaa, 0x4b, 0xd0, 0x57, 0x20, 0x2e, 0x3a, 0xc0, 0x32, 0x3e, 0x4f, 0xa2, 0x11, 0xdb, 0xcd, 0x36, 0xb0, 0xa7, 0x5e, 0xef, 0x1e, 0x2c, 0x28, 0x28, 0x28, 0x9c, 0x38, 0x6d, 0xe6, 0x25, 0xd3, 0x67, 0xcf, 0x4d, 0x28, 0xd9, 0x5, 0x3, 0xd4, 0x20, 0x5d, 0x61, 0x19, 0x9f, 0x2d, 0xb9, 0xeb, 0xa7, 0x97, 0xf, 0x40, 0x92, 0x84, 0xdb, 0xb5, 0x83, 0x73, 0xc7, 0x3a, 0x87, 0xf4, 0x7e, 0xd1, 0xc8, 0x77, 0x42, 0xc4, 0xe6, 0xd8, 0xd6, 0xa2, 0x6d, 0xb5, 0xf8, 0x7b, 0x26, 0xa3, 0xc2, 0x51, 0x96, 0xb7, 0xb1, 0x8c, 0xa3, 0x65, 0xd9, 0x12, 0x9d, 0x1e, 0x2b, 0x70, 0xca, 0xc3, 0x26, 0x8d, 0xee, 0x13, 0x86, 0xe2, 0x4a, 0x4a, 0x4b, 0xfb, 0xbe, 0xfc, 0xf6, 0x7b, 0x87, 0x54, 0x54, 0x54, 0x28, 0xd9, 0xf9, 0xc, 0x68, 0x10, 0xe8, 0x64, 0x60, 0x3b, 0x1d, 0xfc, 0x1f, 0xe2, 0x7d, 0xa, 0xaf, 0xa2, 0xee, 0x98, 0x60, 0xd9, 0x8, 0x90, 0xcd, 0xb6, 0x4b, 0x8, 0xef, 0x15, 0xa7, 0x17, 0xdc, 0x11, 0x13, 0x92, 0x80, 0x15, 0x52, 0xac, 0xcb, 0xcf, 0x37, 0x6c, 0xee, 0x61, 0xd5, 0xa1, 0x98, 0xfa, 0x5e, 0x9d, 0x1e, 0x4f, 0xa0, 0x51, 0xc7, 0xad, 0x6e, 0x2f, 0x43, 0xe3, 0x46, 0xd, 0x65, 0xfc, 0xa4, 0xa9, 0x83, 0xbf, 0x9e, 0x3a, 0xa3, 0xbe, 0x92, 0x9d, 0xbf, 0x40, 0xab, 0xaa, 0xd3, 0x2d, 0xe3, 0xef, 0x1b, 0x79, 0x56, 0xa7, 0x27, 0x70, 0x2, 0x59, 0x60, 0x51, 0x3e, 0xc2, 0x48, 0x76, 0x6f, 0x89, 0xbf, 0x27, 0x5e, 0x64, 0x53, 0x99, 0x73, 0xa3, 0xbe, 0x2e, 0x3d, 0x5f, 0x81, 0x63, 0x93, 0x6c, 0xb1, 0xd1, 0x7f, 0x4b, 0xb8, 0x8e, 0x78, 0xa, 0x23, 0x50, 0x86, 0x30, 0xae, 0xa, 0xb, 0x96, 0x57, 0xf4, 0x5a, 0xb7, 0x7e, 0x43, 0x77, 0x25, 0x3b, 0xff, 0x80, 0xb6, 0x60, 0x23, 0x2c, 0xf3, 0x88, 0xf4, 0xd8, 0x28, 0x9e, 0xd8, 0x1c, 0x45, 0x4c, 0xb3, 0x8c, 0x6d, 0x1b, 0xb2, 0x7b, 0x44, 0xbd, 0xdd, 0xdd, 0x11, 0x9d, 0x5f, 0x9b, 0x67, 0x2, 0x87, 0xb7, 0x36, 0xd6, 0xa5, 0xe7, 0xb, 0x10, 0x5f, 0x3e, 0xd6, 0x32, 0x8e, 0xc2, 0xf1, 0xa7, 0x74, 0x7a, 0xaa, 0x5, 0xc2, 0x18, 0x55, 0x4a, 0x32, 0x8a, 0x8b, 0x8b, 0x1a, 0xff, 0xe7, 0xc5, 0xd7, 0x8f, 0x57, 0xb2, 0xf3, 0x7, 0x88, 0xd, 0x3d, 0x6c, 0x64, 0x2b, 0xcb, 0x35, 0xb8, 0xab, 0xbe, 0xd4, 0x29, 0xca, 0xa, 0x6c, 0xf5, 0x8b, 0x88, 0xa1, 0x16, 0x86, 0xe8, 0x1e, 0xdf, 0x95, 0xe8, 0xc5, 0xea, 0x92, 0xb0, 0xc5, 0x8b, 0x60, 0x85, 0x34, 0xd5, 0xa5, 0xe7, 0xb, 0xe0, 0x85, 0xe8, 0x65, 0x19, 0x7f, 0x43, 0xbc, 0x4f, 0xec, 0x56, 0x6c, 0x8a, 0x57, 0xdc, 0x73, 0x55, 0x2f, 0x91, 0x90, 0x1f, 0x57, 0xae, 0x3a, 0xe9, 0xb5, 0x51, 0x63, 0x37, 0x53, 0xb2, 0xab, 0x1b, 0x50, 0x3b, 0x5, 0x17, 0xe5, 0x9e, 0x96, 0x6b, 0x1f, 0x89, 0x73, 0x7c, 0xbc, 0x22, 0x3b, 0xb0, 0x6d, 0x8, 0xcd, 0xc4, 0x69, 0xdb, 0x16, 0x6, 0x20, 0xae, 0xf0, 0x5f, 0x89, 0x6e, 0xaa, 0x3e, 0xba, 0xce, 0x2f, 0x75, 0x8d, 0x41, 0x91, 0xe8, 0xa9, 0x4b, 0xcf, 0x17, 0xf4, 0x11, 0x7b, 0xf6, 0xf0, 0x23, 0x3a, 0x35, 0x19, 0x3, 0x2d, 0x4, 0x1f, 0x4b, 0x1d, 0x48, 0x18, 0xb2, 0x2b, 0x29, 0x29, 0x6d, 0x3d, 0x67, 0xfe, 0xb7, 0x7d, 0x95, 0xec, 0x6a, 0x8f, 0x2d, 0xb8, 0x79, 0x1d, 0x6c, 0xb9, 0x86, 0xae, 0xfc, 0xe8, 0xbe, 0x5f, 0xa2, 0xd3, 0x94, 0x35, 0xd8, 0x3a, 0xa1, 0xb7, 0xe, 0x91, 0xe5, 0x1, 0xcb, 0xe8, 0xf5, 0x8, 0xcf, 0xef, 0x4f, 0x1e, 0x73, 0xfc, 0x47, 0x5d, 0x7a, 0xbe, 0xe0, 0x78, 0xcb, 0xd8, 0x78, 0x8a, 0x22, 0x73, 0xe0, 0x1d, 0xdb, 0xa4, 0xd1, 0x41, 0xc3, 0xe2, 0x6, 0x32, 0x7d, 0xf6, 0xdc, 0xa3, 0xd, 0xe1, 0x29, 0xd9, 0xd5, 0x2, 0xb0, 0x18, 0x9e, 0xf7, 0x20, 0x3a, 0x10, 0xdc, 0x99, 0x62, 0x8f, 0x21, 0x29, 0x82, 0xc3, 0x5a, 0x8b, 0x72, 0x1, 0xa2, 0x6b, 0x10, 0x92, 0xfb, 0x1b, 0x49, 0xc2, 0x88, 0x2a, 0x56, 0x79, 0x6c, 0xbc, 0xb0, 0x48, 0x3a, 0xea, 0xf2, 0xab, 0x13, 0x76, 0x12, 0xfb, 0x39, 0x8c, 0x50, 0xa6, 0xb5, 0x8e, 0xb1, 0x66, 0xc0, 0xc9, 0x21, 0x9b, 0x84, 0xa, 0xa, 0xa, 0xa, 0x64, 0xc9, 0xd2, 0xe5, 0xfb, 0x2d, 0x5f, 0xf1, 0x53, 0x1b, 0x25, 0xbb, 0x9a, 0x1, 0xbe, 0xf5, 0xb7, 0x3c, 0x88, 0xe, 0x18, 0x2c, 0xe1, 0xef, 0x60, 0x1f, 0x47, 0xa0, 0x95, 0x92, 0x3b, 0x89, 0x2, 0xae, 0xc3, 0xb0, 0xa4, 0xf8, 0xc7, 0x21, 0x23, 0x77, 0xb4, 0x65, 0x3e, 0xe1, 0xca, 0xbf, 0x5c, 0x97, 0x5f, 0x9d, 0x80, 0x73, 0x2, 0xdd, 0xee, 0x76, 0xf4, 0x7c, 0xd4, 0xa3, 0xc0, 0x6a, 0xe, 0x24, 0xaa, 0x8c, 0x4a, 0x1d, 0xa8, 0xac, 0xac, 0x34, 0x84, 0x57, 0xbf, 0x5d, 0x79, 0x45, 0xc5, 0xee, 0x4a, 0x76, 0x35, 0x73, 0x35, 0xe0, 0x85, 0xef, 0xe1, 0x71, 0x1d, 0x7, 0x73, 0x3e, 0xa0, 0xd3, 0x94, 0x33, 0x94, 0xbb, 0xfe, 0x8d, 0x1a, 0xb0, 0x30, 0x74, 0x51, 0x81, 0xff, 0x64, 0x72, 0xc, 0xe6, 0xf7, 0x1d, 0x23, 0x73, 0x2d, 0xe3, 0x67, 0x88, 0x93, 0x36, 0xaf, 0xa8, 0x1d, 0xd0, 0x71, 0xc9, 0x5d, 0xda, 0x31, 0x4f, 0xc2, 0x7f, 0xbe, 0x61, 0x58, 0xf1, 0x86, 0x5b, 0x29, 0x6b, 0x58, 0x5c, 0x54, 0xef, 0xc9, 0x17, 0x5e, 0xdb, 0x7f, 0x43, 0x49, 0x89, 0x92, 0x5d, 0x35, 0xc0, 0xf9, 0x48, 0x48, 0x19, 0x47, 0x2f, 0xc3, 0x6d, 0x3c, 0x3e, 0x73, 0x83, 0x38, 0x8d, 0x7d, 0x15, 0xb9, 0x83, 0x7b, 0xc3, 0x40, 0x6, 0x56, 0x93, 0x10, 0xdc, 0xd7, 0xa7, 0x12, 0x8f, 0x3, 0x4e, 0x51, 0x4a, 0x73, 0xbf, 0xc7, 0xb5, 0xfb, 0x8c, 0x1c, 0xa6, 0x4b, 0xb0, 0xc6, 0x40, 0x48, 0xa4, 0x8b, 0x65, 0x1c, 0x56, 0x9d, 0x36, 0xd9, 0xae, 0x1d, 0x10, 0x42, 0x9a, 0xed, 0x1e, 0x2c, 0x2d, 0x2b, 0x3b, 0xa0, 0x41, 0x61, 0x61, 0x42, 0xc9, 0xce, 0xe, 0x6c, 0x94, 0x28, 0x14, 0x47, 0x3b, 0xaa, 0x41, 0x46, 0xa, 0x2c, 0x9f, 0x41, 0x76, 0x1d, 0x8e, 0xe3, 0xb8, 0x5a, 0xa7, 0x2b, 0x94, 0xa8, 0xc, 0xc1, 0x3d, 0x6c, 0x8, 0xc9, 0x7d, 0xf8, 0x81, 0xc7, 0xc4, 0x1e, 0x8f, 0xc6, 0xa6, 0x8d, 0x18, 0xd3, 0xa9, 0xba, 0xe4, 0x6a, 0x84, 0x76, 0x46, 0x3a, 0x59, 0xc6, 0xc7, 0xe8, 0xd4, 0xd4, 0x1a, 0x25, 0xee, 0xf9, 0xfb, 0x35, 0x2b, 0xb3, 0xb4, 0xb4, 0xfb, 0xec, 0x79, 0xb, 0x5a, 0x28, 0xd9, 0x6d, 0x8a, 0x86, 0xe2, 0xb4, 0xed, 0x81, 0xcb, 0x12, 0xa9, 0xbf, 0x3b, 0x78, 0x7c, 0xe, 0xda, 0xfa, 0x49, 0xd4, 0x6a, 0x15, 0xa, 0x2f, 0xc4, 0xe9, 0xfd, 0x5a, 0x2e, 0xce, 0xe1, 0x98, 0xb6, 0x12, 0x8a, 0xcd, 0xf8, 0xbe, 0xa0, 0x13, 0x7d, 0x2b, 0x7d, 0xec, 0x19, 0x61, 0x3b, 0xee, 0x37, 0x6e, 0x5, 0x4d, 0xeb, 0x73, 0xeb, 0x86, 0x8f, 0xdd, 0x64, 0xf7, 0xcb, 0x2f, 0x6b, 0x8b, 0x47, 0x8e, 0xf9, 0x68, 0x8f, 0x7a, 0x21, 0xd6, 0x8a, 0xb3, 0x5, 0xbc, 0xa8, 0xbd, 0xc4, 0xe9, 0x63, 0x9, 0x5f, 0xf9, 0xa3, 0x46, 0xf6, 0x49, 0xf3, 0xf9, 0x2f, 0x8c, 0x1c, 0x22, 0x7a, 0x6c, 0x8f, 0x22, 0xff, 0x80, 0xf4, 0xee, 0x6b, 0x3d, 0xae, 0xa1, 0x85, 0xd8, 0x5, 0xdc, 0xac, 0x71, 0x54, 0x4d, 0x6b, 0x9d, 0xae, 0xb4, 0xb0, 0x35, 0x2b, 0x47, 0x7c, 0x57, 0x9b, 0x3e, 0xd7, 0xd, 0xd3, 0xc5, 0x75, 0xb0, 0x2b, 0x8, 0xaf, 0xb8, 0xa8, 0xa8, 0x73, 0x41, 0x9a, 0x85, 0x8b, 0x6b, 0x89, 0x18, 0x4d, 0x42, 0x25, 0xbf, 0x53, 0x63, 0xba, 0xf, 0xba, 0x89, 0x73, 0x1c, 0xc, 0xfe, 0xbe, 0x67, 0x6, 0xdf, 0x15, 0x49, 0x10, 0x77, 0x8a, 0xd3, 0xf4, 0x79, 0xa5, 0xae, 0x29, 0x45, 0x9e, 0x2, 0xd, 0x13, 0xd0, 0x35, 0xe8, 0xaf, 0x69, 0x2c, 0x96, 0x7b, 0x48, 0x78, 0xaf, 0x89, 0xe3, 0xfe, 0x9c, 0x91, 0x67, 0xa, 0x74, 0x26, 0xb0, 0x95, 0x1c, 0xe0, 0x50, 0x52, 0x3d, 0xa0, 0xb5, 0x6e, 0x40, 0xad, 0xf3, 0x42, 0x71, 0xb9, 0x88, 0xcb, 0xca, 0xcb, 0x3d, 0xc9, 0xe, 0xf1, 0x2a, 0xa4, 0xd8, 0xc7, 0xc9, 0xd, 0x53, 0xc9, 0x97, 0x14, 0x49, 0x27, 0x45, 0x52, 0xb3, 0x66, 0xb6, 0x63, 0xc5, 0xc9, 0xb8, 0x1c, 0x9b, 0xa7, 0xb, 0x8, 0xf3, 0x85, 0x62, 0xfa, 0x86, 0x29, 0xf3, 0x57, 0xc9, 0xf5, 0xd1, 0x82, 0x73, 0x89, 0xf8, 0xd4, 0xa, 0xd7, 0x7c, 0xe3, 0xdf, 0xf0, 0xa3, 0xaf, 0xa1, 0x82, 0xa0, 0xc5, 0xf6, 0xd1, 0x47, 0x5, 0x2d, 0xb8, 0xf9, 0x7c, 0x27, 0xbc, 0x8a, 0xf7, 0x3b, 0x51, 0x40, 0x8a, 0xef, 0x19, 0x79, 0xc9, 0xc8, 0x67, 0xa2, 0x99, 0x86, 0x49, 0xd8, 0x1a, 0x3f, 0xcf, 0x54, 0xa5, 0xa0, 0xce, 0x58, 0x4a, 0xc2, 0xfb, 0x8d, 0xec, 0x1a, 0x35, 0x2c, 0x96, 0xcf, 0x27, 0x4c, 0xda, 0xda, 0x8b, 0xec, 0xb6, 0xa6, 0xe4, 0x3b, 0x92, 0xc7, 0xbf, 0x3f, 0x9d, 0x27, 0x1b, 0x35, 0xda, 0x40, 0xc1, 0xad, 0xbb, 0x87, 0x38, 0x6e, 0x96, 0x5d, 0xb8, 0xe, 0x70, 0x7a, 0x72, 0x33, 0x17, 0xd9, 0x55, 0x90, 0xec, 0x52, 0x8b, 0xb7, 0x93, 0x5a, 0x69, 0xc2, 0x45, 0x76, 0x70, 0x2b, 0xa0, 0x38, 0x19, 0x59, 0x7d, 0xc8, 0x34, 0x43, 0x8b, 0xaf, 0x6f, 0x29, 0xd8, 0x34, 0xe7, 0xf0, 0x73, 0x7a, 0xfa, 0x75, 0x74, 0x80, 0x6, 0xe8, 0xe3, 0xf8, 0x7e, 0xf4, 0x48, 0xf3, 0x39, 0x94, 0x81, 0xf4, 0xa7, 0x2c, 0xe3, 0xff, 0x41, 0x5c, 0xe5, 0x4d, 0x5a, 0x7c, 0xf9, 0xda, 0x2c, 0x7d, 0x7b, 0xf, 0xb2, 0x53, 0xd4, 0x1d, 0xdf, 0x18, 0xe9, 0xeb, 0xb2, 0xec, 0x5a, 0x16, 0xe8, 0xbc, 0x54, 0x1, 0x36, 0x5d, 0xf4, 0xb7, 0x7c, 0x88, 0xda, 0x68, 0xdc, 0xdd, 0xa, 0x70, 0xa7, 0xec, 0x26, 0x4e, 0xaf, 0x43, 0xd4, 0xfd, 0x20, 0x29, 0xa7, 0x71, 0x2d, 0xad, 0x7a, 0xf7, 0x19, 0x67, 0xdb, 0x64, 0xf0, 0x7f, 0x4a, 0x49, 0x80, 0x58, 0xa0, 0x13, 0xc5, 0xa9, 0xe7, 0x9a, 0x4c, 0x57, 0xc4, 0x7c, 0xd1, 0x53, 0xde, 0xc3, 0xc, 0xbc, 0x27, 0xbd, 0x8d, 0x5c, 0x22, 0x4e, 0xf7, 0xa0, 0xed, 0xab, 0xf9, 0x3c, 0x92, 0x57, 0xe, 0xa7, 0x5c, 0xc7, 0xe7, 0x8b, 0x42, 0xe0, 0x4f, 0x48, 0x7c, 0x33, 0xe8, 0x5, 0x88, 0x3b, 0xa0, 0x30, 0x36, 0xb1, 0xec, 0x3b, 0x7a, 0xf6, 0xa5, 0x3f, 0xa8, 0x52, 0x13, 0x9a, 0x48, 0x24, 0x36, 0x57, 0xb2, 0xdb, 0xb8, 0xd0, 0x90, 0x56, 0x8d, 0x93, 0x6f, 0xdf, 0xa7, 0xe6, 0x19, 0x57, 0x77, 0x2, 0x48, 0xac, 0x83, 0x91, 0xa3, 0x8d, 0x1c, 0x6a, 0x64, 0x57, 0x5a, 0x6e, 0xb9, 0xb4, 0x26, 0xb7, 0xa4, 0xec, 0x9d, 0x32, 0xe, 0xab, 0x70, 0x1e, 0x5, 0xee, 0xaf, 0xb1, 0x7c, 0x46, 0xeb, 0x74, 0xb9, 0x86, 0xa, 0x78, 0x1e, 0x48, 0xee, 0x42, 0xf9, 0x1, 0xce, 0x76, 0x1c, 0x28, 0x76, 0x17, 0x9d, 0xed, 0xb9, 0xef, 0x44, 0x39, 0x8f, 0x4a, 0xcd, 0xc, 0x3e, 0x63, 0xbc, 0x7f, 0x1f, 0x50, 0xe1, 0x89, 0xa3, 0xb2, 0x89, 0xee, 0x33, 0xee, 0xbd, 0x17, 0xdf, 0x7f, 0xb9, 0x2e, 0x27, 0x5f, 0x30, 0xdf, 0x32, 0xb6, 0x59, 0xbe, 0x91, 0x1d, 0x5c, 0x26, 0x70, 0xa5, 0xe1, 0x40, 0xc4, 0xa5, 0xdc, 0x48, 0x91, 0x3d, 0x86, 0xda, 0x8c, 0xd9, 0x12, 0xef, 0x7e, 0x74, 0xdb, 0xd0, 0xb4, 0x3f, 0xc5, 0xc8, 0xef, 0x24, 0x1c, 0x1d, 0x46, 0xd2, 0x21, 0x49, 0x80, 0x7b, 0x19, 0x39, 0x8e, 0xcf, 0x6, 0x9a, 0xef, 0x48, 0x12, 0xdf, 0x24, 0x5a, 0x82, 0x3f, 0x8b, 0xc6, 0x39, 0xc2, 0x80, 0x39, 0x24, 0xbd, 0xbb, 0x8c, 0x1c, 0x43, 0xe2, 0x43, 0x56, 0x73, 0xb3, 0xc, 0xff, 0x3f, 0x4e, 0xeb, 0xee, 0x41, 0x39, 0x9d, 0xef, 0xea, 0x12, 0x3e, 0xeb, 0xf, 0x69, 0xf9, 0xcf, 0x90, 0xaa, 0x27, 0x30, 0x44, 0x11, 0xb0, 0xea, 0xdc, 0x39, 0x3, 0x3f, 0xc7, 0xe4, 0xbb, 0x85, 0x1, 0xf3, 0xb8, 0x5f, 0xa4, 0x1e, 0xf3, 0xd5, 0xc8, 0x8b, 0xec, 0x5e, 0xa0, 0xa6, 0x16, 0x27, 0xac, 0xe5, 0x82, 0x4a, 0x92, 0xdd, 0xf7, 0x12, 0x9e, 0xfe, 0x89, 0x41, 0x2, 0xae, 0xa5, 0xb3, 0xb9, 0x1, 0xd5, 0xe5, 0x4, 0xef, 0x52, 0x4a, 0x32, 0x16, 0xb7, 0x58, 0xec, 0x49, 0x3e, 0xb8, 0x8e, 0x7e, 0x7f, 0xdb, 0x52, 0x7b, 0xad, 0xc7, 0x3f, 0xeb, 0x4b, 0xdd, 0x12, 0x9e, 0xa, 0x49, 0xd8, 0x7f, 0xa1, 0xac, 0xa0, 0xc5, 0x87, 0x26, 0xc5, 0xd, 0xf5, 0xfd, 0xe, 0xd, 0xf0, 0x7e, 0x3d, 0x46, 0x41, 0xec, 0xb7, 0x27, 0xd7, 0xde, 0x7e, 0x35, 0x7c, 0x4e, 0x50, 0xc6, 0xda, 0x89, 0x53, 0xf7, 0xa, 0x41, 0x36, 0xf4, 0x4c, 0x92, 0xea, 0x44, 0x92, 0xe0, 0x4, 0x5a, 0x44, 0x51, 0x53, 0x76, 0x90, 0xb1, 0x5a, 0x6c, 0xb1, 0x90, 0xb1, 0x1f, 0xe9, 0xa1, 0xb8, 0x75, 0xc7, 0x1a, 0xae, 0x97, 0x54, 0xb2, 0xdb, 0xc2, 0x8b, 0xec, 0xbe, 0x36, 0xf2, 0xa2, 0xce, 0x59, 0xa4, 0x81, 0xc4, 0x12, 0xc4, 0x51, 0x2e, 0x12, 0x27, 0x93, 0x32, 0x53, 0x20, 0x6b, 0x72, 0x1, 0x5d, 0x1, 0xb, 0x68, 0xf1, 0x22, 0x91, 0x64, 0x91, 0x38, 0x6e, 0xa5, 0xe4, 0x42, 0x42, 0x32, 0x49, 0xc2, 0x83, 0xec, 0xea, 0xa5, 0x2c, 0xb4, 0x26, 0x24, 0x3e, 0x64, 0xed, 0xa1, 0xfb, 0xf8, 0x56, 0xdc, 0xc4, 0xf0, 0xc2, 0xa3, 0x16, 0xab, 0x25, 0xc7, 0x8b, 0x6b, 0x61, 0xf9, 0x25, 0x13, 0x1f, 0x14, 0xe1, 0xc4, 0x57, 0x94, 0x7b, 0xb9, 0x1e, 0xf1, 0xac, 0x10, 0xe3, 0xeb, 0x4a, 0xc5, 0xab, 0x26, 0x9e, 0x25, 0x28, 0x4b, 0x9d, 0x29, 0x47, 0x1a, 0xb9, 0x4a, 0x9c, 0xd3, 0x24, 0xd0, 0xe5, 0xe8, 0x7d, 0x12, 0xdf, 0x2c, 0xb1, 0x1f, 0x47, 0x14, 0x36, 0x94, 0x5b, 0x8, 0x1a, 0xdf, 0x6b, 0xae, 0x2e, 0x19, 0x5f, 0x50, 0x29, 0x16, 0xcf, 0x95, 0xd7, 0x62, 0x2b, 0xd6, 0xf9, 0x8a, 0x34, 0xe0, 0xaa, 0x1c, 0x2a, 0xf6, 0x76, 0x44, 0x36, 0x8b, 0xd, 0xee, 0x21, 0xb8, 0x72, 0x3f, 0xe0, 0xb, 0xb7, 0x40, 0x36, 0x2d, 0x23, 0xa8, 0xd, 0x4a, 0x52, 0xb4, 0x2c, 0x2f, 0xf7, 0x4c, 0xa3, 0x14, 0xb2, 0x83, 0xd5, 0x86, 0x44, 0x19, 0x74, 0x28, 0xef, 0x2e, 0x4e, 0x10, 0xbf, 0x50, 0x1f, 0x65, 0x2c, 0x50, 0x41, 0x65, 0xe9, 0x41, 0x4a, 0x4b, 0xae, 0x4d, 0x3c, 0x6f, 0x34, 0x68, 0x40, 0xbd, 0x6b, 0xb3, 0x1a, 0x92, 0x1f, 0x14, 0xaa, 0xe6, 0x2e, 0x85, 0x7, 0xae, 0x4e, 0x14, 0x15, 0x23, 0xe6, 0x87, 0xd3, 0xe1, 0x91, 0xe8, 0x14, 0x95, 0x6c, 0xcf, 0x7a, 0x6a, 0xd5, 0x5, 0xb, 0x4d, 0x50, 0x89, 0x17, 0x60, 0x2d, 0xdd, 0x40, 0xb2, 0xab, 0x6e, 0xf3, 0x41, 0x6, 0x1c, 0x62, 0x21, 0x38, 0x9f, 0x6f, 0xaa, 0xe4, 0xa6, 0xb4, 0x62, 0x2d, 0x89, 0x35, 0x79, 0xda, 0xf8, 0xb, 0xfc, 0x13, 0xee, 0x2e, 0x24, 0x2e, 0xf4, 0x12, 0xc7, 0xd, 0x6, 0xad, 0xb7, 0x8b, 0xe8, 0x29, 0x1d, 0x71, 0xc1, 0xf, 0x14, 0x28, 0x57, 0xf7, 0xd0, 0xea, 0x7, 0xf9, 0xfd, 0x5e, 0x1c, 0x77, 0x27, 0xce, 0xc9, 0xdb, 0x41, 0x6a, 0x7e, 0xda, 0xfc, 0x8e, 0x94, 0x23, 0x8c, 0x5c, 0x2f, 0x4e, 0xec, 0xe6, 0x15, 0x92, 0xdf, 0x67, 0xa2, 0x31, 0x31, 0x25, 0x3b, 0x45, 0x2c, 0x80, 0xce, 0xf3, 0x48, 0xe, 0xe8, 0x50, 0xd, 0xb9, 0x3c, 0x45, 0xf9, 0x44, 0xc2, 0x9b, 0x90, 0x83, 0xf8, 0xc5, 0x24, 0xca, 0x5d, 0xb4, 0x4, 0x40, 0x76, 0xfb, 0xf3, 0x7b, 0x22, 0x6b, 0xb3, 0x81, 0x3e, 0xf2, 0xd8, 0x0, 0xa5, 0x27, 0x5f, 0x50, 0x80, 0x56, 0x24, 0xbb, 0xce, 0xb4, 0xfa, 0x90, 0xe8, 0x2, 0xb7, 0x67, 0x4d, 0x92, 0xaa, 0xa, 0x49, 0x9a, 0x97, 0x51, 0x90, 0xe5, 0x39, 0x8e, 0xa, 0xd5, 0x58, 0x71, 0xb5, 0x94, 0xca, 0x81, 0x15, 0x97, 0xd0, 0xc7, 0xae, 0x64, 0xa7, 0xa8, 0x39, 0xd0, 0xa5, 0xe2, 0x16, 0xf1, 0x76, 0x3f, 0x23, 0xa5, 0x19, 0x8d, 0x7a, 0x11, 0x3b, 0x99, 0x1f, 0x51, 0x4b, 0x60, 0x2c, 0xe5, 0x66, 0x6e, 0x62, 0x28, 0x9d, 0xe8, 0xc7, 0xcd, 0x50, 0xdd, 0x9d, 0xf1, 0xc2, 0x32, 0xca, 0x67, 0x5c, 0xb7, 0x78, 0xbe, 0x6d, 0xa9, 0xe4, 0xe0, 0x79, 0xef, 0x46, 0x4b, 0x70, 0xab, 0x1a, 0xfc, 0xcc, 0x64, 0xbc, 0xef, 0x34, 0x7a, 0x12, 0x90, 0x80, 0xf7, 0x32, 0x7f, 0x47, 0x2e, 0x3c, 0x1a, 0xe5, 0x2e, 0x4f, 0x5, 0xe2, 0x4c, 0x1b, 0xf4, 0xd1, 0xd7, 0xd, 0xe8, 0x83, 0xb9, 0x6e, 0xfd, 0x6, 0x29, 0x2f, 0xdf, 0xe4, 0x88, 0x4b, 0xc4, 0x7b, 0x57, 0x2a, 0xd9, 0x45, 0x1f, 0x68, 0xcc, 0x3b, 0x2c, 0xcd, 0x75, 0x58, 0x71, 0xb7, 0xd2, 0x4a, 0x8a, 0x3, 0xb0, 0x8a, 0xa7, 0x53, 0xf0, 0xbd, 0x10, 0xaf, 0x79, 0x58, 0x9c, 0x18, 0x9f, 0x22, 0x9e, 0x80, 0x7, 0x62, 0xe, 0xe5, 0x19, 0x92, 0xc4, 0x2e, 0x54, 0x7a, 0x50, 0xaa, 0x70, 0x8, 0x2d, 0xff, 0x4c, 0x2d, 0x3f, 0x10, 0x27, 0x4e, 0x70, 0x18, 0x2c, 0x4e, 0x6c, 0xf, 0xeb, 0xe7, 0xd, 0xa9, 0x7a, 0x8, 0x70, 0x50, 0x40, 0xfc, 0x72, 0xbd, 0x4b, 0x49, 0x83, 0xcb, 0xf5, 0x6c, 0x12, 0xa1, 0xa2, 0x96, 0x58, 0x6f, 0x88, 0xee, 0x98, 0xc3, 0xfa, 0x48, 0x87, 0xf6, 0x6d, 0xdd, 0x96, 0xb4, 0x92, 0x5d, 0xc4, 0x81, 0xb8, 0xc4, 0xdf, 0x3c, 0xae, 0xc1, 0x82, 0xbb, 0x9a, 0x64, 0x17, 0x57, 0x20, 0x23, 0x14, 0x7d, 0x17, 0xd7, 0x28, 0xd9, 0xe5, 0x15, 0x10, 0x73, 0x9e, 0x46, 0x81, 0x75, 0x76, 0x8d, 0x38, 0x25, 0x36, 0x7, 0x18, 0xe9, 0x43, 0xcb, 0x6f, 0xb7, 0xc, 0x7e, 0xe, 0x62, 0x82, 0x47, 0x52, 0xe0, 0x35, 0x18, 0x2e, 0x4e, 0xf3, 0xea, 0xc0, 0xf7, 0x64, 0xa9, 0x9a, 0x8d, 0x9, 0xeb, 0x3, 0x9, 0x35, 0x1a, 0x57, 0xac, 0x8b, 0x56, 0x54, 0x56, 0x26, 0x5d, 0x3a, 0x76, 0x90, 0x6e, 0x5d, 0x76, 0xae, 0x72, 0x4d, 0x3, 0xfe, 0xd1, 0xc5, 0xe0, 0x34, 0x44, 0x7, 0x2d, 0xf5, 0xa0, 0x98, 0x13, 0x5d, 0x12, 0x8d, 0x75, 0x1d, 0xeb, 0x1e, 0x27, 0x4e, 0x26, 0xe6, 0x63, 0xe2, 0x24, 0x67, 0x61, 0xed, 0xa3, 0x81, 0x2, 0x8a, 0xdc, 0x67, 0x65, 0x68, 0xb1, 0xf5, 0x12, 0x27, 0x99, 0xe5, 0x79, 0x5a, 0x8c, 0x41, 0x2, 0x8d, 0x8a, 0xdd, 0x2e, 0x4b, 0x94, 0xd2, 0xb4, 0xd7, 0x47, 0x59, 0x37, 0xc0, 0x8d, 0xb9, 0xa1, 0xc4, 0x9e, 0x6b, 0xa7, 0x9b, 0x44, 0x34, 0x81, 0x6c, 0xb3, 0x5b, 0x3c, 0xae, 0xa1, 0xa7, 0xe7, 0x51, 0xe2, 0xb8, 0x45, 0x14, 0x8a, 0x7c, 0x4, 0x9a, 0x46, 0xbc, 0x4b, 0x65, 0x10, 0x47, 0x79, 0x1d, 0x28, 0x4e, 0xa2, 0xd3, 0xe4, 0xea, 0xf6, 0x4a, 0x71, 0xba, 0xf5, 0x20, 0x4b, 0xf9, 0x1c, 0x9, 0x2e, 0x89, 0x4, 0xbb, 0xf1, 0x32, 0xd7, 0x18, 0xea, 0x51, 0xf5, 0xc, 0xc0, 0x0, 0xa1, 0x64, 0x17, 0x3d, 0x20, 0x28, 0x8f, 0x74, 0x6d, 0x5b, 0x37, 0xa, 0x74, 0xa0, 0x3f, 0x57, 0xf4, 0xf4, 0x0, 0x85, 0x22, 0x9, 0xb8, 0xc, 0x51, 0x7a, 0x70, 0x1, 0x2d, 0x3e, 0xb4, 0x31, 0x7b, 0xb3, 0x1a, 0x6b, 0xf, 0xd9, 0xa0, 0xf7, 0x52, 0x82, 0x6a, 0xab, 0xb7, 0xc0, 0x42, 0xb4, 0x3b, 0xe8, 0xe3, 0x52, 0xb2, 0x53, 0x6c, 0x7c, 0x5e, 0xb0, 0xe8, 0x6c, 0x8d, 0x76, 0x9f, 0x14, 0x27, 0xc5, 0x5a, 0x89, 0x4e, 0xa1, 0xb0, 0x3, 0x59, 0xc9, 0xcf, 0x8a, 0xe3, 0x19, 0x41, 0x6c, 0xef, 0x25, 0x49, 0x5f, 0x5f, 0x7a, 0x36, 0x3f, 0x13, 0x44, 0xa3, 0xf4, 0x19, 0x96, 0xb1, 0x1d, 0xf5, 0x11, 0x29, 0xd9, 0x29, 0x1c, 0xa0, 0xd5, 0xd2, 0x9f, 0x2d, 0xe3, 0x68, 0x97, 0x74, 0x8e, 0x4e, 0x8f, 0x42, 0x91, 0x11, 0x2a, 0xf9, 0xce, 0xa0, 0x67, 0x27, 0xea, 0x36, 0xdf, 0x4b, 0xf3, 0x59, 0x5c, 0x7f, 0x24, 0x0, 0xb, 0xcf, 0x46, 0x76, 0x28, 0xa8, 0xd7, 0xee, 0x55, 0x4a, 0x76, 0x79, 0xf, 0xb8, 0x39, 0x2e, 0x97, 0xaa, 0xc5, 0xd4, 0x88, 0x4f, 0xe0, 0x88, 0x14, 0x4d, 0x59, 0x56, 0x28, 0x6a, 0xe, 0x10, 0x1d, 0x8e, 0xba, 0xba, 0x50, 0x9c, 0x5e, 0x9b, 0x36, 0xc0, 0x12, 0xbc, 0x55, 0xfc, 0x8d, 0xe1, 0x81, 0xec, 0xdc, 0xae, 0x54, 0x94, 0x4f, 0x68, 0x56, 0xb1, 0x92, 0x5d, 0xde, 0x3, 0xf1, 0x86, 0x43, 0x2c, 0xe3, 0xc8, 0x38, 0x9b, 0xa6, 0xd3, 0xa3, 0x50, 0xd4, 0x1a, 0x70, 0xfd, 0xdf, 0x69, 0xe4, 0xf, 0xe2, 0x7d, 0x5a, 0x38, 0x14, 0xca, 0xa3, 0x7c, 0xfc, 0x9d, 0x68, 0xaa, 0xbe, 0xd8, 0x35, 0x6, 0x45, 0xb6, 0x87, 0x3e, 0xe, 0x25, 0xbb, 0x7c, 0xc7, 0xf9, 0x96, 0x31, 0xf4, 0xb4, 0x7c, 0x5c, 0xa7, 0x46, 0xa1, 0xf0, 0x5, 0x48, 0x64, 0x39, 0xc6, 0x83, 0xf0, 0xa, 0xa8, 0x58, 0x36, 0xf5, 0xe9, 0x77, 0x2d, 0xf2, 0x50, 0x52, 0x7b, 0xeb, 0x63, 0x50, 0xb2, 0xcb, 0x67, 0xa0, 0x29, 0xf2, 0xfe, 0x96, 0x71, 0x94, 0x19, 0xfc, 0xa4, 0xd3, 0xa3, 0x50, 0xf8, 0x6, 0x10, 0x10, 0x8a, 0xcc, 0x97, 0x58, 0xae, 0xa1, 0xdd, 0xd8, 0xa9, 0x3e, 0xfd, 0x1e, 0xd4, 0x6, 0x7e, 0x65, 0x19, 0x47, 0x1f, 0x50, 0x8d, 0xdb, 0x29, 0xd9, 0xe5, 0x2d, 0x10, 0xb8, 0x6e, 0xe5, 0x1a, 0x43, 0xbf, 0xc8, 0x67, 0x74, 0x6a, 0x14, 0xa, 0xdf, 0x81, 0x42, 0xf4, 0x81, 0x62, 0x8f, 0x83, 0x23, 0x11, 0xcc, 0xaf, 0xc3, 0x82, 0xd1, 0x8c, 0xdd, 0x7d, 0x80, 0x34, 0x7a, 0x7e, 0xee, 0xae, 0x8f, 0x40, 0xc9, 0x2e, 0x5f, 0xb1, 0x97, 0x65, 0xc, 0xd9, 0x64, 0xda, 0x5a, 0x48, 0xa1, 0x8, 0x6, 0xa8, 0xc5, 0x7b, 0xc9, 0x32, 0x8e, 0xee, 0x2a, 0x7, 0xf8, 0xf4, 0x3b, 0xf0, 0xe, 0xbb, 0x3d, 0x33, 0x4d, 0x7c, 0xfc, 0xf9, 0xa, 0x25, 0xbb, 0x48, 0x1, 0x2e, 0x8d, 0xee, 0x96, 0xf1, 0x51, 0x3a, 0x35, 0xa, 0x45, 0xa0, 0xb8, 0x4d, 0x9c, 0xbe, 0xab, 0xa9, 0x40, 0x12, 0x49, 0x2f, 0x9f, 0x7e, 0xfe, 0xcf, 0x46, 0x46, 0x5b, 0xc6, 0x4f, 0x11, 0x3d, 0xc2, 0x4a, 0xc9, 0x2e, 0xf, 0x81, 0xde, 0x8f, 0xee, 0x33, 0xea, 0x90, 0xb2, 0xfc, 0xb5, 0x4e, 0x8d, 0x42, 0x11, 0x28, 0x26, 0x8a, 0xd3, 0x3a, 0xcc, 0x8d, 0x1e, 0x3e, 0x92, 0xd1, 0x2b, 0x96, 0xb1, 0xae, 0xe2, 0x1c, 0x5a, 0xac, 0x50, 0xb2, 0xcb, 0x3b, 0xcb, 0xce, 0x1d, 0xaf, 0x43, 0x5f, 0xbd, 0xe5, 0x3a, 0x35, 0xa, 0x45, 0xe0, 0x78, 0xce, 0x32, 0x86, 0x98, 0xda, 0x66, 0x3e, 0xfd, 0xfc, 0x31, 0x46, 0xe6, 0x5a, 0xc6, 0x4f, 0xd7, 0xa9, 0x57, 0xb2, 0xcb, 0x37, 0xd8, 0x5a, 0x83, 0x81, 0xec, 0x56, 0xeb, 0xd4, 0x28, 0x14, 0x81, 0x3, 0x19, 0x93, 0xa5, 0xae, 0x31, 0x9c, 0x50, 0xb0, 0xb9, 0x4f, 0x3f, 0x1f, 0x59, 0x9f, 0xef, 0x58, 0xc6, 0x51, 0xe8, 0xae, 0xed, 0xc3, 0x94, 0xec, 0xf2, 0xa, 0x8d, 0x3d, 0x9e, 0x5b, 0x42, 0xa7, 0x46, 0xa1, 0x8, 0x1c, 0xe8, 0x50, 0xb4, 0xd0, 0x32, 0xde, 0xce, 0xc7, 0xdf, 0x81, 0xa3, 0xb8, 0xdc, 0x59, 0x99, 0x68, 0xf8, 0xfe, 0x27, 0x9d, 0x7e, 0x25, 0xbb, 0x7c, 0x42, 0xa5, 0x4e, 0x81, 0x42, 0x91, 0x33, 0xac, 0x12, 0x7b, 0xd6, 0xb3, 0x9f, 0xca, 0x26, 0x4a, 0x10, 0x6c, 0xb1, 0x41, 0x9c, 0x60, 0xd2, 0x5c, 0x1f, 0x81, 0x92, 0x5d, 0xbe, 0xa0, 0xc4, 0x83, 0x0, 0x95, 0x4, 0x37, 0xce, 0x45, 0x85, 0x4e, 0x83, 0x22, 0x20, 0xfc, 0x62, 0x64, 0x45, 0xc0, 0xbf, 0x3, 0xeb, 0xf7, 0x7e, 0xcb, 0x78, 0x1b, 0x12, 0x9e, 0x42, 0xc9, 0x2e, 0x2f, 0xb0, 0xc0, 0x32, 0x6, 0xd7, 0x66, 0x91, 0x4e, 0xcd, 0xaf, 0x40, 0x81, 0x6f, 0x2b, 0x9d, 0x6, 0x45, 0xc0, 0xa, 0x55, 0xd0, 0x78, 0xd5, 0xc8, 0x78, 0xcb, 0xf8, 0x59, 0x46, 0xb6, 0xd7, 0x47, 0xa0, 0x64, 0x97, 0xf, 0x40, 0x17, 0x7, 0x77, 0xad, 0xcf, 0xd6, 0xe2, 0x4, 0xc9, 0x15, 0x4e, 0x9a, 0x76, 0x43, 0x9d, 0x6, 0x45, 0x40, 0x48, 0x64, 0x69, 0x9f, 0xc4, 0x3b, 0x7e, 0xa7, 0x65, 0x7c, 0x3b, 0x23, 0x97, 0xea, 0x63, 0x50, 0xb2, 0xcb, 0x7, 0xac, 0x33, 0xf2, 0x8d, 0x6b, 0xac, 0x91, 0x5a, 0x33, 0xbf, 0xe1, 0x8f, 0x3a, 0x5, 0x8a, 0x0, 0x81, 0xc6, 0xcf, 0xb6, 0xb8, 0x59, 0x10, 0xae, 0x73, 0x94, 0x39, 0x4c, 0xb4, 0x8c, 0xe3, 0x10, 0x59, 0x3d, 0xd, 0xa1, 0x2a, 0xba, 0x89, 0x93, 0xad, 0x9e, 0x11, 0x8f, 0x29, 0xd9, 0x45, 0x83, 0xec, 0xe6, 0x58, 0xc6, 0xf7, 0xd4, 0xa9, 0x91, 0xd6, 0xe2, 0x1c, 0xae, 0xa9, 0x50, 0x4, 0x85, 0x26, 0x16, 0xb2, 0x83, 0x5b, 0x73, 0x56, 0x0, 0xbf, 0x6b, 0x83, 0x91, 0x9b, 0xa5, 0xea, 0x39, 0x77, 0x28, 0x60, 0xbf, 0x4b, 0xfc, 0xab, 0xed, 0x8b, 0xcb, 0xbb, 0xff, 0x82, 0x38, 0xe7, 0x2, 0xbe, 0x6b, 0xe4, 0xa, 0xb1, 0x77, 0x9a, 0x52, 0xb2, 0x8b, 0x10, 0xb0, 0xf0, 0xa7, 0x5a, 0xc6, 0xf, 0xd5, 0xa9, 0xf9, 0x35, 0x9e, 0xd1, 0x46, 0xa7, 0x41, 0x11, 0xf0, 0xa6, 0xda, 0xde, 0x35, 0x86, 0xe3, 0x79, 0xd6, 0x4, 0xf4, 0xfb, 0x5e, 0x34, 0x32, 0xd2, 0x32, 0x8e, 0xd3, 0x10, 0x2e, 0xd6, 0xc7, 0xf1, 0x1b, 0xfe, 0x4f, 0x9c, 0xce, 0x52, 0x68, 0xba, 0x81, 0x63, 0x91, 0x6e, 0xe2, 0xbc, 0x15, 0x2b, 0xd9, 0x45, 0x1b, 0x68, 0xd, 0x56, 0x61, 0xb1, 0xec, 0xb6, 0xcd, 0xe3, 0x39, 0xc1, 0xa9, 0xce, 0x7f, 0xd5, 0xa5, 0xa1, 0x8, 0x18, 0xbb, 0x18, 0xa9, 0xef, 0x1a, 0x9b, 0x2c, 0x4e, 0x96, 0x66, 0x10, 0x40, 0x1, 0xfb, 0x95, 0x62, 0x6f, 0x1a, 0x31, 0xd4, 0xc8, 0xef, 0xf4, 0x91, 0xfc, 0x5a, 0x83, 0x78, 0xa5, 0x65, 0x1c, 0x46, 0x41, 0x99, 0x92, 0x5d, 0xb4, 0x31, 0x9e, 0xda, 0x64, 0x2a, 0xd0, 0xc1, 0xe1, 0xc8, 0x3c, 0x9d, 0xf, 0x24, 0xd, 0xdc, 0x2a, 0x5a, 0x83, 0xa4, 0x8, 0x1e, 0xfd, 0x3c, 0x94, 0xcf, 0xd2, 0x0, 0x7f, 0xe7, 0x24, 0x23, 0x77, 0x58, 0xc6, 0xe1, 0xce, 0xbc, 0xcf, 0xc8, 0x36, 0x79, 0xfe, 0x4c, 0xae, 0x15, 0x7b, 0xce, 0xc2, 0xbf, 0x94, 0xec, 0xa2, 0xf, 0x94, 0x1f, 0x7c, 0x62, 0xd9, 0xf0, 0x8f, 0x95, 0xfc, 0xec, 0x8e, 0x7e, 0x89, 0x91, 0xfe, 0xba, 0x2c, 0x14, 0x1, 0x63, 0x4b, 0xb, 0xd9, 0xc1, 0xc3, 0xf2, 0x65, 0x16, 0x7e, 0xf7, 0x70, 0xb1, 0x17, 0x9a, 0xc3, 0xa3, 0x71, 0xaf, 0xe4, 0x6f, 0xe9, 0x11, 0x14, 0xfc, 0xb3, 0x2c, 0xe3, 0x98, 0xab, 0x37, 0xd3, 0xfd, 0x47, 0x25, 0xbb, 0xe8, 0xc0, 0xd6, 0x1d, 0x1d, 0x2e, 0x8d, 0xdf, 0xe7, 0xd9, 0x3c, 0xc0, 0x3f, 0xff, 0x37, 0x5d, 0xe, 0x59, 0xc1, 0xbe, 0x92, 0xdf, 0x49, 0x11, 0xc7, 0x19, 0x69, 0xe6, 0x1a, 0x83, 0x87, 0x65, 0x42, 0x16, 0x7e, 0x37, 0xdc, 0x98, 0x70, 0xd3, 0xff, 0xe4, 0xb1, 0xe1, 0xff, 0x23, 0xf, 0x9f, 0x7, 0x2c, 0x5a, 0x94, 0x67, 0xd4, 0xb7, 0x5c, 0xbb, 0x41, 0xaa, 0x71, 0x2d, 0x2b, 0xd9, 0x45, 0x7, 0xaf, 0x4b, 0xd5, 0xee, 0xe8, 0xb0, 0xea, 0x2e, 0xcf, 0xa3, 0x39, 0xc0, 0x29, 0xce, 0xf, 0x8b, 0x66, 0xa5, 0x65, 0x3, 0x97, 0x51, 0x5b, 0x7e, 0x44, 0x9c, 0x8c, 0xc4, 0x7c, 0x3, 0x12, 0x1d, 0x4e, 0xb7, 0xec, 0x91, 0xef, 0x19, 0x99, 0x9f, 0xa5, 0x7b, 0x80, 0xbb, 0x14, 0x59, 0x86, 0x36, 0xd7, 0x1c, 0x6a, 0xef, 0x86, 0xe6, 0xd1, 0xf3, 0x68, 0xcc, 0xb5, 0xd8, 0xce, 0x72, 0xed, 0x49, 0x23, 0x6f, 0x57, 0xf7, 0x3, 0x94, 0xec, 0xa2, 0x83, 0xd5, 0xdc, 0xe8, 0xdd, 0x38, 0x58, 0x1c, 0x77, 0x66, 0x3e, 0x68, 0x75, 0xcf, 0x48, 0xd5, 0xcc, 0x38, 0x85, 0xbf, 0x80, 0x7b, 0xc, 0x87, 0x96, 0x22, 0x26, 0x5a, 0xc0, 0xb5, 0x95, 0x8f, 0x84, 0x77, 0x2a, 0x2d, 0x5b, 0x37, 0x1e, 0xcf, 0xf2, 0x7d, 0x3c, 0x64, 0xe4, 0x41, 0x8f, 0x6b, 0xd7, 0x1b, 0x39, 0x39, 0x4f, 0x9e, 0x7, 0xd6, 0xa4, 0x2d, 0x3, 0x1d, 0x8a, 0x47, 0x46, 0x9e, 0x1e, 0x25, 0xbb, 0x68, 0xe1, 0x9, 0xa9, 0xda, 0x81, 0x1d, 0xb1, 0xbb, 0x1b, 0xc5, 0x49, 0x91, 0x8e, 0x2b, 0x90, 0x62, 0x8c, 0x9a, 0x9a, 0x6e, 0x96, 0x6b, 0x3f, 0x48, 0xf0, 0xbd, 0xb, 0xf3, 0x9, 0x37, 0x4a, 0xd5, 0x8e, 0x1d, 0xc7, 0x8b, 0xe3, 0x46, 0xdf, 0x2a, 0x4f, 0xe6, 0xa0, 0x2d, 0x89, 0xc4, 0x8d, 0xb7, 0xc4, 0x1e, 0x47, 0xb, 0x12, 0x88, 0x11, 0x5e, 0xe8, 0x61, 0xb9, 0x14, 0x90, 0x8, 0x4f, 0x8d, 0xf1, 0xb3, 0xc0, 0x77, 0x1c, 0x21, 0xf6, 0x1e, 0xa1, 0x65, 0xf4, 0x40, 0x2c, 0x50, 0xb2, 0x8b, 0x1f, 0xbe, 0x13, 0x27, 0x1b, 0xcb, 0x8d, 0x8e, 0x62, 0xcf, 0xde, 0x8a, 0x3, 0xd0, 0x39, 0x2, 0x45, 0xa3, 0xfb, 0x59, 0xae, 0x7d, 0x6b, 0x64, 0xa0, 0xe8, 0x41, 0xb6, 0x7e, 0xc2, 0x6b, 0x4f, 0x38, 0x88, 0xcf, 0x61, 0xf7, 0x98, 0x7f, 0x7f, 0xc4, 0x83, 0x86, 0x5b, 0x88, 0x1d, 0xd9, 0x97, 0x77, 0x49, 0x9a, 0x6c, 0xbf, 0x0, 0x81, 0x66, 0xf0, 0x3, 0xc4, 0x39, 0x5b, 0xcf, 0x8d, 0x62, 0xee, 0x9, 0x43, 0x62, 0xfa, 0x3c, 0x6e, 0x25, 0xd9, 0xdb, 0x30, 0x82, 0x4a, 0x70, 0x9d, 0x16, 0xb6, 0x22, 0xbc, 0xf8, 0xa7, 0xd8, 0x5b, 0xa, 0x9d, 0x98, 0x66, 0x51, 0x44, 0x15, 0x28, 0x1c, 0x7d, 0x5d, 0xec, 0x7, 0xd8, 0x7e, 0x6f, 0xe4, 0x4, 0x23, 0xa3, 0x44, 0x7b, 0x63, 0xfa, 0x9, 0x58, 0x34, 0x5e, 0x59, 0x6d, 0xbb, 0xf2, 0x79, 0x1c, 0x17, 0xe3, 0xef, 0x7f, 0x9d, 0x91, 0x63, 0x2c, 0xe3, 0x2f, 0x89, 0xbd, 0xd8, 0x3b, 0x5b, 0xc0, 0x7a, 0x87, 0xcb, 0x72, 0xb6, 0xe5, 0x1a, 0xd6, 0x3f, 0x3a, 0xaf, 0xdc, 0x46, 0x4b, 0x28, 0xe, 0x80, 0xdb, 0xfc, 0x1, 0x23, 0x17, 0x79, 0x5c, 0x47, 0x48, 0xa3, 0x46, 0x31, 0x4b, 0x25, 0xbb, 0xe8, 0x61, 0x2d, 0x1f, 0xf2, 0x7a, 0xcb, 0x35, 0x64, 0x68, 0x9d, 0x12, 0x93, 0x85, 0xe, 0x52, 0xc7, 0xa1, 0x96, 0x2d, 0x2c, 0xd7, 0x91, 0x11, 0x7, 0xd7, 0xda, 0xe7, 0xa2, 0xc9, 0x2a, 0x7e, 0xe3, 0x27, 0x6e, 0xaa, 0x5e, 0x1b, 0x3b, 0x3a, 0xd6, 0xfc, 0x87, 0xa4, 0x10, 0xb7, 0xb2, 0x97, 0xab, 0x8d, 0x5c, 0xe5, 0x31, 0x27, 0x57, 0x87, 0xe0, 0xfe, 0xa6, 0x19, 0x39, 0xda, 0xc8, 0x4c, 0x8f, 0xeb, 0x97, 0xf2, 0xd9, 0xb4, 0x8c, 0xf8, 0x73, 0xc0, 0x29, 0xf, 0xe8, 0x13, 0x7a, 0xa6, 0xc7, 0x75, 0x9c, 0x10, 0x1, 0xb7, 0x66, 0xb9, 0x92, 0x5d, 0xfc, 0x81, 0xd8, 0xc1, 0x70, 0xcb, 0x38, 0x32, 0x96, 0x90, 0xc4, 0x12, 0x65, 0x1f, 0x3e, 0xdc, 0x65, 0x63, 0x8c, 0x5c, 0x20, 0xf6, 0x14, 0xe3, 0xe9, 0xd4, 0xbc, 0x3f, 0xd2, 0x65, 0x10, 0x28, 0xe1, 0xc1, 0x53, 0xe0, 0xe5, 0x22, 0x42, 0x12, 0xcb, 0x35, 0x46, 0xde, 0x31, 0xb2, 0x47, 0xc, 0xbe, 0x2f, 0xd6, 0xd9, 0x30, 0x23, 0x7f, 0xb7, 0x5c, 0xc3, 0x86, 0x3a, 0xd8, 0xc3, 0xa2, 0xca, 0x5, 0xa6, 0xd2, 0xb2, 0x9e, 0x93, 0xc6, 0x1b, 0x32, 0x8a, 0xef, 0x51, 0x14, 0x81, 0xfa, 0xd9, 0xb1, 0xe2, 0xdd, 0xf3, 0xf6, 0x25, 0x2a, 0x63, 0xab, 0x6a, 0xfa, 0x83, 0x95, 0xec, 0xa2, 0xb, 0xd4, 0x95, 0xd8, 0xdc, 0x4d, 0x85, 0xe2, 0x14, 0x9d, 0xe, 0x8c, 0xd8, 0xf7, 0xd9, 0x41, 0x9c, 0x60, 0x3b, 0x2c, 0xa, 0xaf, 0x86, 0xae, 0x78, 0x89, 0xf, 0x31, 0xf2, 0x85, 0x3e, 0xfe, 0xac, 0x59, 0x78, 0xf7, 0xa6, 0xf9, 0xcc, 0x81, 0xe2, 0x24, 0x4e, 0xa0, 0x75, 0x53, 0x71, 0x44, 0xbf, 0x27, 0xa, 0xc7, 0x91, 0x6d, 0x7a, 0xad, 0xc7, 0xf5, 0x11, 0xf4, 0x30, 0x84, 0x9, 0x53, 0x8c, 0x1c, 0x2e, 0x55, 0x1b, 0x4d, 0x24, 0xd1, 0x8d, 0xd6, 0xcf, 0xb5, 0x12, 0x9d, 0x2c, 0x5a, 0x3c, 0x87, 0xdb, 0xa9, 0x60, 0xb5, 0x4f, 0x63, 0xd1, 0xd, 0x10, 0x7b, 0x2b, 0x35, 0x25, 0xbb, 0x18, 0x63, 0x2d, 0x9, 0xcd, 0x16, 0xb4, 0x6e, 0x44, 0xe2, 0x80, 0xf5, 0xd7, 0x34, 0xe4, 0xdf, 0x63, 0x3b, 0x5a, 0x9, 0xe3, 0xf9, 0x7d, 0xa, 0x3d, 0x3e, 0x87, 0x56, 0x40, 0x28, 0xa6, 0xfd, 0x4e, 0x1f, 0x7d, 0xd6, 0x80, 0x2e, 0xfc, 0xe7, 0x89, 0x13, 0xb, 0x5e, 0xef, 0xf1, 0x99, 0x96, 0x54, 0xbc, 0x90, 0xa5, 0xf8, 0x87, 0x88, 0x7d, 0x3f, 0x28, 0x4e, 0xef, 0xa6, 0xf1, 0x84, 0x20, 0xfb, 0x39, 0xac, 0xb5, 0x6c, 0x38, 0x75, 0x1, 0x2e, 0xcd, 0xb7, 0x3c, 0xae, 0x37, 0xa6, 0xb5, 0x8a, 0xba, 0xc0, 0x7e, 0x21, 0x7e, 0x6, 0xc8, 0x26, 0x47, 0x48, 0x2, 0x9e, 0x1a, 0x74, 0x46, 0xf2, 0x8a, 0xbf, 0xa3, 0x4, 0x3, 0x21, 0x9a, 0x9f, 0x6b, 0xfb, 0x8b, 0x94, 0xec, 0xa2, 0x8d, 0x25, 0xd4, 0xbe, 0x67, 0x78, 0x5c, 0x47, 0x70, 0x17, 0xae, 0xa6, 0x7d, 0x43, 0x78, 0xef, 0xd0, 0xde, 0x90, 0x41, 0x3a, 0x5a, 0x9c, 0xf8, 0xcf, 0x16, 0x69, 0xbe, 0xe3, 0x69, 0x46, 0x6, 0xa5, 0xd9, 0x70, 0x13, 0x96, 0xb1, 0x72, 0x5d, 0x1e, 0xbe, 0x1, 0x5d, 0x2b, 0xe0, 0xd6, 0xfc, 0x36, 0xcd, 0x67, 0x60, 0x8d, 0xc3, 0xc5, 0xf4, 0x9a, 0x84, 0xdf, 0x85, 0xb6, 0x13, 0xad, 0x39, 0x24, 0xdb, 0x78, 0xb9, 0x61, 0x51, 0xa8, 0x7c, 0x8e, 0xe4, 0x26, 0xfb, 0x32, 0x53, 0x2c, 0x13, 0xa7, 0xe, 0xf2, 0x9f, 0x69, 0x3e, 0xb3, 0x37, 0xbf, 0xe7, 0xb3, 0x46, 0x76, 0xb, 0x19, 0xc9, 0xf5, 0x25, 0x59, 0x23, 0x3e, 0xd7, 0xc9, 0xe3, 0x73, 0xc8, 0x44, 0x45, 0x1c, 0xf5, 0xec, 0xba, 0x10, 0x9d, 0x92, 0x5d, 0x3c, 0x80, 0xa0, 0x35, 0x7c, 0xf8, 0x5e, 0x41, 0xeb, 0x7d, 0x49, 0x28, 0xc8, 0xd4, 0xca, 0xf5, 0x29, 0x9, 0x2d, 0x68, 0x9d, 0xe1, 0xc5, 0x43, 0xb3, 0xdb, 0x8b, 0xb9, 0xf1, 0x78, 0xe1, 0x79, 0x71, 0x5a, 0xa2, 0x3d, 0x91, 0xe6, 0x33, 0x78, 0x19, 0x56, 0x5a, 0xc6, 0x5b, 0xeb, 0xd2, 0xf0, 0x15, 0x20, 0x32, 0x34, 0x30, 0x78, 0x35, 0xcd, 0x67, 0x10, 0xfb, 0x3a, 0x42, 0x1c, 0x77, 0x33, 0x48, 0xef, 0xa8, 0x34, 0x4a, 0x4c, 0x2e, 0xb0, 0x97, 0x38, 0x47, 0xc1, 0x7c, 0x26, 0x4e, 0x77, 0x14, 0x2f, 0x2f, 0xc2, 0xfd, 0x46, 0xce, 0x10, 0xe7, 0x2c, 0xc9, 0xb0, 0x63, 0x1d, 0x95, 0x5a, 0x28, 0xbd, 0xdf, 0xa7, 0x79, 0x2e, 0x27, 0xf0, 0x7b, 0xa3, 0x4c, 0x21, 0x97, 0x2d, 0x6, 0x1b, 0x73, 0xf, 0x0, 0x1, 0x23, 0x64, 0x71, 0x68, 0x35, 0xd6, 0x2b, 0xbc, 0x5, 0xa8, 0xfd, 0xac, 0xf3, 0x61, 0xb9, 0x4a, 0x76, 0xf1, 0x0, 0x82, 0xd6, 0x8, 0xec, 0xbe, 0xeb, 0x71, 0x1d, 0x6e, 0xcd, 0x4b, 0xe9, 0xd2, 0x80, 0x6b, 0x63, 0xfb, 0x2c, 0xde, 0x5b, 0x23, 0x2e, 0xe8, 0xbb, 0x49, 0xba, 0xaf, 0xf0, 0xc5, 0x6b, 0x52, 0xcd, 0x22, 0x3f, 0x85, 0x9f, 0x9b, 0x5b, 0xcd, 0xcf, 0x5f, 0xe5, 0x61, 0xd9, 0x9e, 0x2f, 0xd1, 0x8d, 0x23, 0x85, 0x15, 0x48, 0xd2, 0x80, 0xcb, 0x9, 0x6e, 0xcd, 0xe5, 0xd5, 0xec, 0x2b, 0x47, 0x90, 0x20, 0xf1, 0xcc, 0x6f, 0xa1, 0xe6, 0x5e, 0x98, 0x83, 0x7b, 0xde, 0x92, 0x44, 0xf0, 0x3c, 0xd7, 0xff, 0x15, 0x1c, 0xb3, 0x1, 0xb5, 0x74, 0x70, 0xa5, 0x9d, 0x2b, 0xc1, 0x9e, 0x6a, 0x10, 0x4, 0x10, 0x57, 0xec, 0x43, 0x12, 0xf1, 0x42, 0x43, 0x5a, 0x48, 0xa3, 0x68, 0x51, 0xd, 0xc8, 0x92, 0x32, 0x2, 0x2b, 0x6e, 0x47, 0x71, 0xc2, 0x15, 0xc9, 0x3d, 0xa0, 0x7f, 0x35, 0xfc, 0xf3, 0x0, 0x3d, 0x4, 0xef, 0xf8, 0x75, 0x13, 0x5, 0xfa, 0xfe, 0xc6, 0x6, 0x20, 0x85, 0xa3, 0xb9, 0xb1, 0x9c, 0xe7, 0xf1, 0x19, 0x58, 0x51, 0x8, 0x5a, 0x23, 0xd3, 0xf1, 0x65, 0x71, 0x82, 0xc1, 0xe8, 0xbf, 0xb7, 0xc8, 0xc7, 0xfb, 0xd8, 0x8e, 0xb, 0xbb, 0x2b, 0x35, 0xc8, 0x9e, 0x46, 0xb6, 0x16, 0xbb, 0xab, 0xd1, 0xd, 0xb8, 0xc9, 0x1e, 0x13, 0xc7, 0xbd, 0x99, 0xa9, 0xcb, 0xa2, 0x82, 0x1a, 0xab, 0xbb, 0xf6, 0xb, 0x1a, 0xe1, 0x4, 0x6e, 0x2, 0xb7, 0xd1, 0x2, 0x54, 0xd4, 0x1d, 0x98, 0xc7, 0x3b, 0xb9, 0x9, 0x5d, 0x4d, 0x85, 0x24, 0xdd, 0x3e, 0xb2, 0x27, 0x5, 0x4d, 0x8d, 0x91, 0x58, 0x81, 0xa4, 0xaa, 0x4f, 0xc5, 0xc9, 0xaa, 0x5d, 0xe8, 0x87, 0xc6, 0xee, 0x2, 0x36, 0xef, 0x9d, 0x8d, 0x74, 0xe6, 0xe6, 0x7f, 0xa8, 0xd8, 0xcb, 0x57, 0xdc, 0x98, 0x44, 0x12, 0x1f, 0x13, 0x71, 0x2f, 0xcf, 0x91, 0x24, 0xeb, 0x2b, 0xf8, 0x2e, 0xda, 0x80, 0x92, 0x91, 0x7e, 0x94, 0xdb, 0x68, 0x85, 0xc3, 0xca, 0x9a, 0x4c, 0xc5, 0xb1, 0xd2, 0x87, 0x7b, 0x69, 0xce, 0xe7, 0x0, 0xcf, 0x12, 0x62, 0xa3, 0x7, 0x66, 0xa8, 0x7c, 0x8e, 0x13, 0x27, 0x6, 0xfc, 0x8a, 0xdf, 0x93, 0xa3, 0x64, 0x17, 0x2f, 0xfc, 0x42, 0x8b, 0x6, 0xc9, 0x1e, 0x28, 0x32, 0x6d, 0x99, 0x66, 0x43, 0x18, 0x40, 0x99, 0xc5, 0x17, 0x7d, 0xa, 0x17, 0xda, 0x54, 0x6a, 0xed, 0xa5, 0xdc, 0x88, 0x52, 0x49, 0xaa, 0x92, 0x6b, 0xa6, 0x3e, 0xb5, 0x63, 0xf4, 0xab, 0x44, 0xc1, 0x37, 0x32, 0x29, 0xd1, 0xc5, 0x5, 0x35, 0x58, 0xed, 0x49, 0x76, 0x35, 0xf1, 0x1a, 0xfc, 0x40, 0x4d, 0xe, 0x44, 0x37, 0xa7, 0x16, 0xdf, 0x1b, 0xc4, 0x3d, 0x54, 0xaa, 0x9e, 0x6f, 0x7, 0x6b, 0x62, 0x8, 0x7f, 0xee, 0x22, 0x5d, 0x1e, 0xbe, 0x2, 0x64, 0x75, 0x12, 0xe7, 0x16, 0x73, 0xdf, 0xbb, 0x9a, 0xcf, 0x63, 0xa3, 0xeb, 0x2e, 0x1b, 0x33, 0x6d, 0xe7, 0x92, 0xec, 0xe6, 0x71, 0xed, 0xc1, 0xd, 0xbf, 0x98, 0xe3, 0xa5, 0x24, 0xd5, 0x4a, 0xcb, 0xfa, 0x4b, 0x70, 0xd, 0xd6, 0xe3, 0xfa, 0x83, 0x22, 0xd5, 0x81, 0x8a, 0x5c, 0x27, 0x7a, 0x2d, 0x76, 0xa6, 0x47, 0x21, 0x13, 0xac, 0xa6, 0x72, 0xf5, 0x6f, 0xae, 0xc3, 0xa8, 0xa3, 0x92, 0xdf, 0x5, 0xd6, 0xdb, 0x20, 0x12, 0x5f, 0x3a, 0x8b, 0x1a, 0x8a, 0xc0, 0xe9, 0x94, 0xef, 0xf9, 0x5c, 0xe7, 0x90, 0xf8, 0xb0, 0x17, 0x7c, 0x93, 0x66, 0x3f, 0x10, 0xfe, 0xec, 0x62, 0xce, 0x3f, 0xf6, 0x82, 0x3d, 0x38, 0xff, 0x3b, 0x72, 0x4f, 0xc8, 0xd4, 0xbb, 0xf2, 0x1d, 0x15, 0xf5, 0x27, 0xa5, 0x16, 0x65, 0x5, 0x4a, 0x76, 0xf9, 0x8b, 0x47, 0xe8, 0xb2, 0xb9, 0x96, 0x1b, 0x52, 0xba, 0xc5, 0xde, 0x91, 0x72, 0x1c, 0x5f, 0x94, 0xd, 0xdc, 0x68, 0xd0, 0x6f, 0x6e, 0xbd, 0x6b, 0x71, 0x57, 0x90, 0x40, 0x5b, 0x91, 0xf0, 0xa, 0xea, 0xb8, 0x86, 0xd0, 0x9, 0xe6, 0x7f, 0xe2, 0xd4, 0x6, 0xd6, 0x85, 0x8c, 0xf0, 0x42, 0xc2, 0x4d, 0x3a, 0xcc, 0x72, 0x6d, 0xad, 0xd8, 0xeb, 0xf5, 0x14, 0xfe, 0x0, 0x9b, 0xea, 0x68, 0x5a, 0xd2, 0x83, 0xa8, 0xc1, 0x67, 0xe2, 0xae, 0xdc, 0x81, 0x72, 0x60, 0xca, 0x58, 0x69, 0x8a, 0x5, 0x3e, 0x87, 0x7f, 0xb7, 0x79, 0x4, 0x10, 0x7b, 0x6e, 0x9a, 0xb2, 0xfe, 0x6a, 0xf3, 0x7c, 0x57, 0x71, 0xed, 0xdd, 0x29, 0xf6, 0x8e, 0x44, 0x51, 0xc7, 0x6c, 0x7a, 0x70, 0x1e, 0x15, 0x27, 0x36, 0x7e, 0x94, 0x54, 0x9f, 0x99, 0xdd, 0x9a, 0xd2, 0x3b, 0xe5, 0x7d, 0xc7, 0x33, 0x28, 0xe7, 0x7e, 0xb0, 0xc6, 0xf2, 0x3c, 0xda, 0x51, 0xb1, 0x68, 0x50, 0xcb, 0xbd, 0x60, 0x3a, 0x9f, 0x3, 0xde, 0xdf, 0xa5, 0x41, 0x4e, 0x88, 0xd7, 0x42, 0xd1, 0x58, 0x5e, 0xf4, 0x31, 0x9f, 0xda, 0x1a, 0x88, 0xef, 0x12, 0x6e, 0x46, 0xd5, 0x3d, 0xd7, 0x4, 0x35, 0x31, 0x48, 0xd7, 0x80, 0xee, 0xb, 0x2f, 0xc, 0xe2, 0xa, 0x88, 0xa1, 0x8c, 0x35, 0xf2, 0xa3, 0x4f, 0x3f, 0x17, 0x41, 0xec, 0x5d, 0xa5, 0xaa, 0x3b, 0x33, 0x91, 0xa5, 0xf9, 0xae, 0x9f, 0xe1, 0x58, 0x1c, 0x81, 0x4d, 0x11, 0x6e, 0x27, 0x24, 0xaf, 0x1c, 0x60, 0xe4, 0xcf, 0xe2, 0xc4, 0xf6, 0x6a, 0x7a, 0x92, 0x7c, 0x61, 0xa, 0x51, 0x76, 0xb, 0xe8, 0x5e, 0x57, 0x90, 0x0, 0x9e, 0xa1, 0x7, 0x24, 0xee, 0x40, 0x98, 0x2, 0xa5, 0x15, 0x7b, 0xf3, 0xb9, 0x9c, 0x26, 0xde, 0x31, 0x4b, 0x1b, 0xf, 0x24, 0x2d, 0xb3, 0xce, 0x3e, 0xde, 0x13, 0xc8, 0xf3, 0xb, 0x7a, 0x5, 0x5e, 0x15, 0xef, 0xc4, 0x1a, 0xdf, 0xc9, 0x6e, 0x83, 0x54, 0x6d, 0xfb, 0x53, 0x2a, 0x8a, 0xb8, 0xe0, 0x43, 0xa, 0xb4, 0xb5, 0xf3, 0xb8, 0x19, 0x65, 0xbb, 0x7b, 0x3d, 0x5c, 0x53, 0x53, 0x48, 0x72, 0x6f, 0x4a, 0x30, 0x2e, 0x45, 0xac, 0xd9, 0x93, 0xa9, 0x29, 0x9e, 0x23, 0x1b, 0x5d, 0xb8, 0xd, 0x24, 0x3b, 0xf1, 0x3a, 0x5b, 0x46, 0xe8, 0xea, 0x3c, 0x5b, 0x6b, 0xf0, 0xc, 0x7c, 0x40, 0x41, 0x3c, 0xf, 0x9d, 0x6e, 0x8e, 0xa4, 0xe2, 0xd4, 0x36, 0x87, 0xf7, 0x5, 0x8b, 0xe1, 0x4b, 0xae, 0x3d, 0xa4, 0xb9, 0xe7, 0x63, 0xe3, 0xf0, 0x71, 0x94, 0x9b, 0xf9, 0x9e, 0x20, 0x81, 0xa8, 0xbb, 0x64, 0xb7, 0xe, 0x17, 0x7b, 0xc0, 0xc7, 0x46, 0x9e, 0x16, 0xa7, 0x20, 0x3e, 0xab, 0x65, 0x1d, 0x5, 0x34, 0x71, 0xfb, 0xa4, 0x30, 0x78, 0x5, 0x6f, 0x46, 0x11, 0x2f, 0x8c, 0xa1, 0x40, 0x43, 0xeb, 0xcb, 0x4d, 0x68, 0x1f, 0xf1, 0xbf, 0xc3, 0x42, 0x19, 0x37, 0xf9, 0x9, 0xb4, 0xdc, 0xf0, 0xe7, 0x34, 0xc9, 0xce, 0x81, 0x97, 0x50, 0xdc, 0xae, 0xe1, 0x86, 0x96, 0x4c, 0x8c, 0x81, 0x3b, 0x67, 0x59, 0x16, 0x7e, 0xf7, 0x53, 0xd4, 0x84, 0x1b, 0xf3, 0xdf, 0x20, 0xd8, 0x17, 0xf3, 0x78, 0xbd, 0xc1, 0x62, 0x7f, 0x90, 0x82, 0xf8, 0x4d, 0x17, 0x71, 0x12, 0x96, 0xb0, 0xd7, 0x20, 0xbe, 0xd3, 0x28, 0x40, 0xab, 0x7b, 0x3d, 0x15, 0x2a, 0x28, 0x79, 0xa3, 0x53, 0xd6, 0xa0, 0xc2, 0x79, 0x17, 0x86, 0x53, 0x60, 0xed, 0xe1, 0x34, 0x11, 0x94, 0x94, 0xa0, 0xc4, 0x67, 0x73, 0xf1, 0xd7, 0xab, 0xb7, 0x8e, 0x96, 0x25, 0xba, 0xec, 0x7c, 0xca, 0xbf, 0x2f, 0xcb, 0xd5, 0x17, 0x4f, 0x9c, 0x34, 0x68, 0x88, 0x3e, 0xfe, 0xfc, 0x44, 0x3d, 0x5a, 0x3f, 0xfb, 0x8b, 0x73, 0x8c, 0xe, 0x12, 0x4b, 0x5a, 0xd3, 0xc5, 0xd1, 0x9c, 0x1b, 0x11, 0x12, 0x59, 0x8a, 0x52, 0x88, 0xe4, 0x27, 0x8e, 0x63, 0x33, 0x41, 0xcc, 0x63, 0xd, 0xc7, 0x20, 0xf3, 0x68, 0xc1, 0x21, 0xb0, 0x3d, 0x93, 0xd7, 0x2a, 0x74, 0x9a, 0x15, 0x2e, 0x14, 0x72, 0x7d, 0x81, 0xfc, 0x76, 0x11, 0x27, 0x99, 0xa1, 0xd, 0xd7, 0x5d, 0x33, 0x71, 0xd2, 0xe3, 0x37, 0xe7, 0xda, 0x81, 0xe2, 0x90, 0xda, 0xe8, 0xbb, 0x84, 0x6b, 0x2d, 0xf9, 0xf7, 0x1f, 0xb9, 0xce, 0xf0, 0xe7, 0xf, 0x5c, 0x7f, 0xd3, 0x69, 0xc5, 0x2d, 0xe3, 0x9a, 0x55, 0x64, 0x6, 0xcc, 0x39, 0x92, 0x4b, 0xe0, 0x3e, 0xee, 0x44, 0x45, 0xb1, 0x15, 0xc7, 0x93, 0xe5, 0x9, 0x5b, 0xc8, 0xc6, 0xe, 0x27, 0x6b, 0x52, 0x3c, 0x17, 0x2b, 0xb9, 0x1f, 0x2c, 0xa3, 0x15, 0x8d, 0x78, 0x2b, 0xe2, 0xa0, 0x70, 0x13, 0xc3, 0x6d, 0x9c, 0xb5, 0x6, 0xf, 0x6b, 0xd6, 0xae, 0x93, 0xa1, 0x83, 0x6, 0xca, 0x3e, 0x7b, 0x54, 0x8d, 0xc2, 0xfc, 0xbf, 0x0, 0x3, 0x0, 0x73, 0x78, 0xf7, 0xf2, 0x7e, 0x74, 0x3a, 0x48, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; + + + + + (NSData *)parse_logo2x_png { + return [NSData dataWithBytes:parse_logo2x_png length:sizeof(parse_logo2x_png)]; + } + + const unsigned char parse_logo3x_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x2, 0x99, 0x0, 0x0, 0x0, 0xcc, 0x8, 0x6, 0x0, 0x0, 0x0, 0x38, 0x73, 0xb8, 0x3f, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9, 0x65, 0x3c, 0x0, 0x0, 0x3, 0x23, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x35, 0x2d, 0x63, 0x30, 0x31, 0x34, 0x20, 0x37, 0x39, 0x2e, 0x31, 0x35, 0x31, 0x34, 0x38, 0x31, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2f, 0x30, 0x33, 0x2f, 0x31, 0x33, 0x2d, 0x31, 0x32, 0x3a, 0x30, 0x39, 0x3a, 0x31, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x43, 0x20, 0x28, 0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x29, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x41, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x42, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x38, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x39, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, 0x3f, 0x3e, 0x66, 0x5f, 0x10, 0x71, 0x0, 0x0, 0x22, 0xe8, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec, 0x9d, 0x4d, 0x72, 0x1b, 0xbd, 0x11, 0x86, 0x3b, 0x29, 0xef, 0xa3, 0xef, 0x4, 0xdf, 0xf8, 0x4, 0xa6, 0x4f, 0xa0, 0xd1, 0x9, 0x4c, 0xaf, 0x93, 0x2a, 0x53, 0xfb, 0xa4, 0x2c, 0xad, 0x92, 0x9d, 0xc8, 0x5d, 0x76, 0x92, 0x2b, 0x7, 0x10, 0x5d, 0x95, 0xbd, 0xe8, 0x13, 0x68, 0x74, 0x2, 0x53, 0x27, 0xf0, 0xf8, 0x4, 0x56, 0x6e, 0x10, 0x21, 0x2, 0x22, 0x98, 0xa6, 0x8, 0x60, 0x7e, 0x31, 0xc0, 0xf3, 0x54, 0x4d, 0x49, 0x32, 0x29, 0x99, 0x83, 0x1, 0xba, 0xdf, 0x6e, 0x0, 0x8d, 0x3f, 0xfc, 0xf9, 0xaf, 0x7f, 0x3f, 0x12, 0x91, 0x8f, 0x2, 0x7d, 0x70, 0xa7, 0xbf, 0x6e, 0x1f, 0xaf, 0x7, 0x9a, 0x3, 0x0, 0x0, 0x0, 0x52, 0xe0, 0xdf, 0xff, 0xfa, 0xa7, 0xf3, 0x3d, 0xaf, 0x1e, 0xaf, 0xeb, 0xc7, 0x6b, 0x4e, 0x73, 0xd, 0x42, 0xa5, 0x5, 0xe7, 0xbd, 0xfe, 0xba, 0xa5, 0x49, 0x0, 0x0, 0x0, 0x20, 0x45, 0x94, 0xc8, 0x3c, 0xa2, 0x19, 0x6, 0xa3, 0xd4, 0x97, 0x41, 0x65, 0x37, 0x37, 0xf2, 0x94, 0xf1, 0xdc, 0x8, 0xd9, 0x4e, 0x0, 0x0, 0x0, 0x48, 0x84, 0x3f, 0xd2, 0x4, 0xa3, 0xa2, 0x4, 0xfe, 0x42, 0x9e, 0xb2, 0xc9, 0x3f, 0x1e, 0xaf, 0x1b, 0xfd, 0x33, 0x0, 0x0, 0x0, 0x0, 0x22, 0x13, 0x3a, 0x63, 0x6e, 0x9, 0xce, 0xcb, 0xc7, 0xab, 0xa0, 0x49, 0x0, 0x0, 0x0, 0x0, 0x91, 0x9, 0x5d, 0xa1, 0x32, 0x9c, 0x67, 0x8f, 0xd7, 0x37, 0x2d, 0x3a, 0x11, 0x9b, 0x0, 0x0, 0x0, 0x80, 0xc8, 0x84, 0x4e, 0x59, 0x20, 0x36, 0x1, 0x0, 0x0, 0x0, 0x91, 0x9, 0x7d, 0x8b, 0x4d, 0x35, 0x8d, 0xce, 0x66, 0x2d, 0x0, 0x0, 0x0, 0x88, 0x9a, 0x57, 0x8e, 0xd7, 0xab, 0xc7, 0xeb, 0x84, 0x66, 0xa, 0xa6, 0xd4, 0x5f, 0x8b, 0xc7, 0xeb, 0xf7, 0xc7, 0x6b, 0xa6, 0xbf, 0x9f, 0x75, 0xf0, 0xb7, 0xcf, 0xb4, 0xe0, 0x3c, 0x7f, 0xbc, 0xd6, 0x34, 0x35, 0x0, 0x0, 0x0, 0x4c, 0x51, 0x64, 0x42, 0x33, 0xaa, 0x17, 0xfe, 0xfd, 0x48, 0xb, 0xd0, 0x63, 0xfd, 0xb5, 0xa9, 0xe8, 0x54, 0x7f, 0x47, 0x4d, 0x9f, 0x7f, 0x78, 0xbc, 0x4e, 0x1f, 0xaf, 0x9a, 0x26, 0x7, 0x0, 0x0, 0x80, 0x98, 0x60, 0xba, 0x7c, 0x58, 0x4c, 0x5d, 0x4c, 0x95, 0x85, 0x7c, 0xfb, 0x78, 0xbd, 0xd6, 0xdf, 0x37, 0x2d, 0xca, 0xae, 0x84, 0xea, 0x57, 0xa1, 0x98, 0x3e, 0x0, 0x0, 0x0, 0x20, 0x32, 0xc1, 0xa2, 0x7e, 0xbc, 0xae, 0xb4, 0xe0, 0x54, 0xd7, 0xba, 0xc1, 0xdf, 0x50, 0x59, 0x4d, 0x55, 0x5f, 0xf3, 0x92, 0xe6, 0x4, 0x0, 0x0, 0x0, 0x44, 0x26, 0xec, 0xa2, 0xb2, 0x99, 0x6a, 0xea, 0x5b, 0x65, 0x37, 0x97, 0x12, 0x7e, 0xfa, 0x8f, 0x5a, 0xab, 0xf9, 0x55, 0xd8, 0x14, 0x4, 0x0, 0x0, 0x0, 0x88, 0x4c, 0xd8, 0x43, 0xfd, 0x78, 0xad, 0xb4, 0xd8, 0xbc, 0xa, 0xfc, 0x5d, 0xb5, 0xc6, 0xf3, 0x9b, 0x74, 0xb3, 0xc1, 0x8, 0x0, 0x0, 0x0, 0x0, 0x91, 0x99, 0x20, 0x2a, 0x93, 0x79, 0xae, 0xc5, 0x66, 0x15, 0xf0, 0x7b, 0x2a, 0x93, 0x79, 0x2b, 0x3f, 0x9f, 0x91, 0xe, 0x0, 0x0, 0x0, 0x80, 0xc8, 0x84, 0x9f, 0xa8, 0xe5, 0xa9, 0x8c, 0xd4, 0x7b, 0xf1, 0x9f, 0x42, 0x37, 0x42, 0x73, 0x41, 0xf3, 0x1, 0x0, 0x0, 0x0, 0x22, 0x13, 0xe, 0xa1, 0x76, 0xa5, 0xbf, 0xd6, 0x5f, 0x7d, 0xb9, 0x46, 0x68, 0x2, 0x0, 0x0, 0x0, 0x22, 0x13, 0x5c, 0xa8, 0x4c, 0xa6, 0xca, 0x68, 0x9e, 0x23, 0x34, 0x1, 0x0, 0x0, 0x0, 0x91, 0x9, 0x5d, 0x63, 0xca, 0x1e, 0xf9, 0x4e, 0x9f, 0x23, 0x34, 0x1, 0x0, 0x0, 0x0, 0x91, 0x9, 0x5e, 0xa8, 0x92, 0x47, 0xaf, 0xc5, 0xbf, 0x90, 0xbb, 0xaa, 0xa3, 0xc9, 0xae, 0x73, 0x0, 0x0, 0x0, 0x40, 0x64, 0x82, 0x13, 0x95, 0xc9, 0x54, 0x9b, 0x82, 0x7c, 0xd6, 0x69, 0x9a, 0xcd, 0x40, 0x5, 0xcd, 0x6, 0x0, 0x0, 0x0, 0x88, 0x4c, 0xf0, 0x11, 0x9a, 0x6a, 0x9d, 0xe6, 0xda, 0x53, 0x68, 0xde, 0x8, 0x5, 0xdb, 0x1, 0x0, 0x0, 0x0, 0x91, 0x9, 0x9e, 0x9c, 0x7a, 0xa, 0x4d, 0x35, 0x65, 0x7e, 0x4d, 0x73, 0x1, 0x0, 0x0, 0x0, 0x22, 0x13, 0xba, 0x16, 0x9a, 0x73, 0x79, 0x3a, 0x86, 0x12, 0x0, 0x0, 0x0, 0x0, 0x91, 0x9, 0xde, 0x42, 0xb3, 0xf2, 0x78, 0x1f, 0x1b, 0x81, 0x0, 0x0, 0x0, 0x0, 0x91, 0x9, 0x41, 0xa8, 0x35, 0x9a, 0x3e, 0xbb, 0xce, 0xd5, 0xb4, 0x39, 0xeb, 0x33, 0x1, 0x0, 0x0, 0x0, 0x91, 0x9, 0x5e, 0x98, 0xcd, 0x40, 0xae, 0x3a, 0x9a, 0x2a, 0x93, 0x79, 0x41, 0x73, 0x1, 0x0, 0x0, 0x0, 0x22, 0x13, 0x7c, 0xa9, 0xb5, 0xd0, 0x74, 0x71, 0x26, 0x4c, 0x9b, 0x3, 0x0, 0x0, 0x0, 0x22, 0x13, 0x2, 0xa8, 0x1e, 0xaf, 0xa5, 0xc7, 0xfb, 0xd8, 0x6d, 0xe, 0x0, 0x0, 0x0, 0x88, 0x4c, 0x8, 0x62, 0x25, 0xee, 0x8d, 0x40, 0x2a, 0x93, 0xc9, 0x6e, 0x73, 0x0, 0x0, 0x0, 0x40, 0x64, 0x42, 0x10, 0x6a, 0xc7, 0xb9, 0x6b, 0x7d, 0xa6, 0x5a, 0x9b, 0xc9, 0x26, 0x20, 0x0, 0x0, 0x0, 0x40, 0x64, 0x82, 0x37, 0xb5, 0x3c, 0x65, 0x34, 0xf, 0xa1, 0x4, 0xe6, 0x47, 0x9a, 0xa, 0x0, 0x0, 0x0, 0x10, 0x99, 0x10, 0xc2, 0x95, 0xb8, 0xa7, 0xcd, 0x97, 0xc2, 0xd9, 0xe6, 0x0, 0x0, 0x0, 0x80, 0xc8, 0x84, 0x40, 0x4e, 0x3d, 0xde, 0x43, 0x49, 0x23, 0x0, 0x0, 0x0, 0x40, 0x64, 0x42, 0x10, 0xb5, 0x3c, 0x65, 0x34, 0xf, 0xb1, 0x10, 0xb2, 0x99, 0x0, 0x0, 0x0, 0x80, 0xc8, 0x84, 0x40, 0xd4, 0xda, 0x4c, 0xd7, 0x26, 0xa0, 0xf, 0x34, 0x13, 0x0, 0x0, 0x0, 0x20, 0x32, 0x21, 0x4, 0x25, 0x30, 0x5d, 0xd9, 0x4c, 0x55, 0xce, 0x88, 0x9d, 0xe6, 0x0, 0x0, 0x0, 0x80, 0xc8, 0x84, 0x20, 0x3e, 0xc9, 0xe1, 0x6c, 0xa6, 0x12, 0x98, 0x73, 0x9a, 0x9, 0x0, 0x0, 0x0, 0x10, 0x99, 0x10, 0x82, 0x4f, 0x36, 0x93, 0x72, 0x46, 0x0, 0x0, 0x0, 0x80, 0xc8, 0x84, 0x60, 0x3e, 0x39, 0x5e, 0x9f, 0x9, 0x67, 0x9a, 0x3, 0x0, 0x0, 0x0, 0x22, 0x13, 0x2, 0x51, 0xd9, 0xcc, 0xb5, 0xe3, 0x3d, 0x64, 0x33, 0x1, 0x0, 0x0, 0x0, 0x91, 0x9, 0xc1, 0xb8, 0xb2, 0x99, 0xac, 0xcb, 0x4, 0x0, 0x0, 0x0, 0x44, 0x26, 0x4, 0xb3, 0x95, 0xa7, 0xda, 0x99, 0x2f, 0xc1, 0x6, 0x20, 0x0, 0x0, 0x0, 0x40, 0x64, 0x42, 0x23, 0x5c, 0xd9, 0xcc, 0x63, 0x9a, 0x8, 0x0, 0x0, 0x0, 0x10, 0x99, 0x10, 0xca, 0xc6, 0xf1, 0x3a, 0x99, 0x4c, 0x0, 0x0, 0x0, 0x40, 0x64, 0x42, 0x30, 0xb5, 0x3c, 0x4d, 0x9b, 0xbf, 0x44, 0x21, 0x1c, 0x33, 0x9, 0x0, 0x0, 0x0, 0x88, 0x4c, 0x68, 0x0, 0xd9, 0x4c, 0x0, 0x0, 0x0, 0x40, 0x64, 0x42, 0xe7, 0x7c, 0x71, 0xbc, 0xce, 0xba, 0x4c, 0x0, 0x0, 0x0, 0x40, 0x64, 0x42, 0x30, 0x6a, 0xba, 0xfc, 0xd0, 0x31, 0x93, 0x14, 0x65, 0x7, 0x0, 0x0, 0x0, 0x44, 0x26, 0x34, 0x16, 0x9a, 0x2f, 0x51, 0x8, 0xeb, 0x32, 0x1, 0x0, 0x0, 0x0, 0x91, 0x9, 0xd, 0xa8, 0x1c, 0xaf, 0x23, 0x32, 0x1, 0x0, 0x0, 0xc0, 0x9b, 0x57, 0x34, 0x1, 0x68, 0xee, 0x1c, 0xaf, 0x1f, 0x7b, 0x8, 0x51, 0x78, 0x42, 0x15, 0xb1, 0xf7, 0x5d, 0x62, 0x50, 0xcb, 0xe1, 0x82, 0xf8, 0x0, 0xd0, 0x9e, 0xa2, 0x41, 0xa0, 0xec, 0x5a, 0x46, 0x4, 0xf4, 0x23, 0x6c, 0x3b, 0x22, 0x13, 0x2, 0xc, 0xaa, 0x6b, 0x70, 0xc1, 0xaf, 0x42, 0xf2, 0xd8, 0x32, 0x3c, 0x33, 0xfd, 0xef, 0x4d, 0xa9, 0xb4, 0x53, 0x53, 0xcf, 0xe2, 0x5e, 0xdc, 0xe5, 0xa5, 0x0, 0xe0, 0x89, 0x99, 0x1e, 0x83, 0x6f, 0xac, 0xf1, 0x18, 0x12, 0xec, 0xf9, 0xa, 0x4e, 0xf3, 0xf5, 0xce, 0xfa, 0x19, 0xd2, 0xed, 0x4b, 0xc6, 0xa6, 0x97, 0x2d, 0xff, 0x66, 0x65, 0x7d, 0xfd, 0xae, 0x6d, 0x7b, 0x85, 0xc8, 0x84, 0x9c, 0x70, 0x45, 0xec, 0xb9, 0x8b, 0xcc, 0x42, 0x1b, 0x9a, 0x63, 0xfd, 0xb5, 0x8f, 0xf6, 0x30, 0x86, 0x6c, 0xbe, 0xc7, 0x40, 0x55, 0xda, 0xb1, 0x55, 0x74, 0xd5, 0x5e, 0x32, 0x11, 0x29, 0x67, 0xad, 0x8c, 0xe0, 0x4a, 0x45, 0x10, 0x1d, 0x59, 0x63, 0x71, 0xd6, 0x81, 0x0, 0xf0, 0x15, 0x1e, 0xf2, 0xc2, 0xff, 0x55, 0x59, 0x81, 0x61, 0x25, 0x64, 0xaf, 0xa6, 0x86, 0x6d, 0xd7, 0xcb, 0x1e, 0xff, 0x8f, 0x7d, 0xfd, 0xc7, 0xf4, 0x9d, 0x3b, 0x2b, 0xc9, 0x80, 0xc8, 0x84, 0x64, 0xa9, 0xe, 0xc, 0xb2, 0x1c, 0x77, 0x98, 0x2b, 0xb1, 0xf7, 0xae, 0x47, 0x51, 0x19, 0x62, 0xa0, 0x4a, 0x2b, 0x18, 0x50, 0x75, 0x4d, 0xbf, 0x88, 0xbb, 0xbe, 0x29, 0xfc, 0xda, 0x87, 0x6f, 0x65, 0x7f, 0xb6, 0x59, 0x19, 0xfa, 0x93, 0x9, 0x19, 0x79, 0x3b, 0xdb, 0xb2, 0x9b, 0xb1, 0x7b, 0x69, 0xc, 0x9f, 0x3e, 0x5e, 0xeb, 0x9, 0xb, 0x1, 0x33, 0x16, 0x67, 0x11, 0x7e, 0x36, 0xbb, 0xcd, 0x6b, 0x6d, 0x4b, 0x19, 0xa3, 0xf1, 0x6, 0x5d, 0x73, 0x2d, 0x2c, 0xe7, 0x91, 0xf4, 0x9d, 0x33, 0xcb, 0xe, 0x19, 0xfb, 0x9e, 0x44, 0x50, 0x88, 0xc8, 0x4, 0x9b, 0x7, 0x47, 0xf6, 0x20, 0x27, 0x61, 0x39, 0x8f, 0xf4, 0x9e, 0xd5, 0x67, 0x5a, 0xe8, 0xcb, 0x8, 0xce, 0xcf, 0x42, 0x86, 0xd3, 0x87, 0x77, 0x7, 0x9e, 0xe9, 0x4c, 0x5f, 0x55, 0xa4, 0xcf, 0xbc, 0x94, 0xf6, 0x99, 0xbb, 0xf, 0x13, 0x13, 0x99, 0xea, 0x5e, 0x3f, 0x46, 0x3c, 0x16, 0xf, 0x89, 0x18, 0x33, 0x46, 0xc5, 0x12, 0xd, 0x6b, 0x86, 0xe0, 0xa8, 0x63, 0x68, 0xae, 0xfb, 0xd3, 0x2c, 0xf2, 0x3e, 0xaf, 0xae, 0xa5, 0xe, 0x56, 0x54, 0xdf, 0xf9, 0x24, 0x13, 0xce, 0x8e, 0xb3, 0xbb, 0x1c, 0x6c, 0xb6, 0x1e, 0x3, 0x35, 0x45, 0xd4, 0xa0, 0xbe, 0x7e, 0xbc, 0x7e, 0x3c, 0x5e, 0x37, 0xda, 0x39, 0x4c, 0xe1, 0x5e, 0x8d, 0xe0, 0x54, 0xd9, 0xb9, 0xaf, 0x96, 0x53, 0x83, 0x34, 0x9c, 0xe2, 0x42, 0xf7, 0x47, 0xd3, 0x2f, 0xcf, 0x64, 0x98, 0xa9, 0xe1, 0xb1, 0xef, 0x5b, 0xdd, 0xe7, 0x37, 0xab, 0x4f, 0x4f, 0xdd, 0xee, 0xcc, 0x2d, 0xfb, 0x72, 0x2d, 0xd4, 0x1d, 0x1e, 0x92, 0x72, 0xc2, 0x6d, 0x5f, 0x58, 0x63, 0xe1, 0x76, 0xaa, 0xf6, 0x1d, 0x91, 0x9, 0xa1, 0x62, 0x2c, 0x35, 0x27, 0xfe, 0x35, 0x11, 0x67, 0x66, 0x84, 0xf2, 0x37, 0xc4, 0xe6, 0xe4, 0x5, 0xc9, 0x8d, 0xe5, 0x14, 0x73, 0x39, 0xd2, 0xb5, 0xb0, 0xfa, 0xef, 0xa5, 0xa4, 0xb9, 0x6, 0xdc, 0xb6, 0x39, 0xb7, 0x8c, 0xd3, 0x5e, 0x49, 0xad, 0x9d, 0x6d, 0xb1, 0x7c, 0x31, 0x25, 0x5f, 0x85, 0xc8, 0x4, 0x9b, 0xff, 0x64, 0xe2, 0xcc, 0x2e, 0xb5, 0x33, 0x4b, 0x31, 0xab, 0x60, 0x3b, 0x6b, 0xce, 0x9c, 0x9f, 0x8e, 0xf8, 0xb8, 0xd0, 0xcf, 0xec, 0x26, 0xb3, 0xe7, 0x76, 0xb4, 0x13, 0x1c, 0xe5, 0xb2, 0x2c, 0xa7, 0x24, 0x28, 0xec, 0x4d, 0x5c, 0xa6, 0x6a, 0xdb, 0xcd, 0x78, 0x59, 0x5a, 0x41, 0x68, 0xf4, 0xc1, 0x18, 0x6b, 0x32, 0xc1, 0x26, 0xe5, 0x72, 0x1c, 0x66, 0x7d, 0xd7, 0xa2, 0xe7, 0xf6, 0x53, 0xeb, 0x24, 0x2b, 0x4b, 0xb4, 0xbf, 0xd4, 0xa6, 0xc7, 0x3b, 0xe, 0xa7, 0xcb, 0x72, 0x2b, 0x46, 0x6c, 0xde, 0xe8, 0xcf, 0xa2, 0x36, 0x7c, 0xd4, 0x74, 0xef, 0x28, 0x1d, 0x86, 0xea, 0x93, 0x67, 0x19, 0x89, 0x2b, 0x9b, 0x8b, 0x1e, 0xef, 0xdd, 0x8c, 0xc5, 0x7a, 0xa7, 0xef, 0xfb, 0xd4, 0x3, 0xb6, 0x6d, 0xc6, 0x91, 0xf4, 0x7b, 0xe2, 0x99, 0x9, 0xa, 0x55, 0x3f, 0x38, 0x17, 0xd6, 0x56, 0xb7, 0x11, 0x97, 0x17, 0x3d, 0x3e, 0xa7, 0x4a, 0x7e, 0x2e, 0x59, 0x75, 0xc8, 0xb6, 0xab, 0x3e, 0xf3, 0xc6, 0xfa, 0x7e, 0xd6, 0x83, 0x7d, 0x37, 0xf7, 0xac, 0xae, 0xab, 0xc7, 0x6b, 0x25, 0x91, 0x6e, 0x5a, 0x44, 0x64, 0x42, 0xe, 0x19, 0x83, 0xb, 0xe9, 0x7e, 0x2d, 0xdb, 0x56, 0x1b, 0x9e, 0x7b, 0xfd, 0x7d, 0xa8, 0x40, 0xb7, 0x9d, 0xc9, 0x6a, 0xc7, 0xb1, 0x15, 0xf2, 0x5c, 0x52, 0x63, 0xd6, 0xc1, 0xfd, 0x7f, 0xd3, 0xd1, 0xef, 0x8a, 0xee, 0x80, 0xb8, 0x8c, 0x64, 0x4c, 0x76, 0x95, 0x85, 0xa9, 0xad, 0xf1, 0x77, 0x27, 0xed, 0xb, 0x60, 0x57, 0xe, 0x41, 0x68, 0xc6, 0xe6, 0xcc, 0x1a, 0xab, 0x5d, 0x5, 0xc1, 0x6a, 0x6a, 0x77, 0xa3, 0xc5, 0x26, 0x41, 0xe1, 0x38, 0xf6, 0xdd, 0x24, 0x9, 0x4c, 0x7f, 0x6a, 0x5a, 0xda, 0x6c, 0x73, 0xe0, 0x39, 0x17, 0x5a, 0x84, 0x96, 0x1d, 0x7d, 0xee, 0xb3, 0x1d, 0xb1, 0x89, 0xc8, 0x4, 0x98, 0xa0, 0xf1, 0xa9, 0xb5, 0xe1, 0xe8, 0xbb, 0x9e, 0x99, 0x71, 0x98, 0x1b, 0x4b, 0x90, 0xd8, 0xe5, 0x36, 0x9a, 0x8a, 0x92, 0xa5, 0x6e, 0xb, 0xb2, 0x9a, 0xe3, 0xa2, 0x9c, 0xc1, 0xe5, 0x40, 0xe2, 0xb2, 0xda, 0xe9, 0x57, 0xf7, 0x11, 0xdc, 0xff, 0xa5, 0x3c, 0x97, 0x6b, 0x69, 0x23, 0x2, 0xbe, 0xc8, 0xf0, 0x35, 0x29, 0x8d, 0x80, 0xad, 0x76, 0x2, 0x86, 0xb2, 0xc3, 0xa0, 0x70, 0xae, 0xff, 0xce, 0x4a, 0x8b, 0x6, 0x78, 0x39, 0x50, 0xbb, 0x94, 0x6e, 0x66, 0xa6, 0x6c, 0xbb, 0xde, 0xf7, 0x6c, 0x9e, 0x6d, 0xdf, 0x57, 0x96, 0xaf, 0x32, 0xf6, 0x7d, 0xd6, 0xa2, 0x3d, 0x96, 0xba, 0x3d, 0x4e, 0x25, 0xa2, 0x8c, 0x38, 0x22, 0x13, 0x52, 0xa3, 0xd0, 0xe2, 0x72, 0xd1, 0x91, 0x41, 0xf8, 0xac, 0xd, 0xc2, 0x58, 0xc2, 0x4c, 0x39, 0xd5, 0xb5, 0xbe, 0x4e, 0xf5, 0x7d, 0x7d, 0x68, 0x28, 0x9e, 0xd5, 0xef, 0xa8, 0xc5, 0xf0, 0xef, 0x85, 0x69, 0xb9, 0xa1, 0x99, 0x69, 0xa7, 0x58, 0x76, 0xfc, 0x77, 0x6b, 0xcb, 0x71, 0xc5, 0x7c, 0x4a, 0x94, 0x1a, 0x97, 0x37, 0xd, 0x9d, 0x68, 0xcc, 0xb5, 0x61, 0xcd, 0x67, 0xdb, 0x58, 0xf7, 0xa9, 0x9e, 0xb1, 0x29, 0x83, 0xd6, 0x46, 0x40, 0x1d, 0xeb, 0x31, 0xcf, 0xd1, 0x96, 0xbf, 0xa, 0xf1, 0xeb, 0x96, 0x81, 0x9a, 0xdd, 0x9f, 0xc6, 0x6e, 0xdf, 0x4a, 0x5f, 0x2b, 0x79, 0xae, 0xe1, 0xf9, 0xa1, 0xe1, 0x58, 0x51, 0xbf, 0x6f, 0x32, 0xe2, 0x51, 0xf4, 0x1d, 0x36, 0xfe, 0x40, 0x6a, 0x91, 0x6d, 0xdb, 0x85, 0xf4, 0xb5, 0xce, 0x20, 0xbc, 0x7e, 0xbc, 0xde, 0xea, 0xef, 0xeb, 0x88, 0xee, 0x53, 0x89, 0xcd, 0x13, 0xfd, 0xf9, 0xd6, 0xd, 0xdb, 0x49, 0x19, 0xa1, 0x33, 0xba, 0xcc, 0x60, 0x5c, 0x68, 0x71, 0xdf, 0x85, 0xc0, 0x34, 0xfd, 0x53, 0x5, 0xa, 0xbf, 0xe9, 0x7e, 0xf0, 0x5e, 0x3b, 0xa8, 0x4d, 0xa4, 0x2, 0x73, 0xa6, 0xef, 0x3f, 0xd4, 0x69, 0x6e, 0xb5, 0xa3, 0x7c, 0xad, 0xbf, 0x4e, 0xa1, 0xb0, 0x79, 0xad, 0xc7, 0xa5, 0x79, 0x3e, 0xa7, 0x2d, 0x9e, 0xc9, 0xbc, 0x61, 0xbb, 0xa5, 0x6c, 0xe3, 0x6f, 0xf4, 0x75, 0xd4, 0xf0, 0xd9, 0x2c, 0xad, 0x31, 0xb3, 0x8e, 0x50, 0xc0, 0x9b, 0xf1, 0xfd, 0x56, 0x5f, 0x4d, 0x3f, 0xe3, 0x5c, 0x22, 0xd9, 0xfc, 0x89, 0xc8, 0x84, 0xdd, 0x28, 0x68, 0x8a, 0x98, 0x5a, 0x62, 0x6d, 0x84, 0xd3, 0x46, 0x1b, 0x1e, 0x65, 0x80, 0xa6, 0xb0, 0x26, 0xaa, 0xd6, 0xe, 0xec, 0x37, 0x69, 0x36, 0xad, 0x76, 0xa9, 0xb3, 0x1, 0xd0, 0xbf, 0xb8, 0x5a, 0xb6, 0xfc, 0x3b, 0x5b, 0xdd, 0x27, 0x5f, 0x5b, 0xfd, 0x33, 0x86, 0xc, 0x8c, 0xf, 0xb, 0x79, 0xf9, 0x94, 0xa5, 0x97, 0xa8, 0x74, 0x20, 0xd5, 0xc6, 0xc9, 0xc6, 0x80, 0x99, 0x85, 0xb0, 0x5, 0x43, 0x13, 0x9b, 0x7c, 0x2b, 0xe9, 0xd7, 0x47, 0x75, 0x51, 0xb6, 0x10, 0x4d, 0x95, 0x15, 0xac, 0xac, 0x64, 0x3a, 0xcb, 0x85, 0x76, 0x83, 0xac, 0xd0, 0xcf, 0x6d, 0x44, 0x79, 0xdb, 0xac, 0x2f, 0x22, 0x13, 0x3a, 0xe3, 0xf7, 0x9, 0x1a, 0x9e, 0xaf, 0xd2, 0x7c, 0x8d, 0xdb, 0xc3, 0x4e, 0x64, 0x3b, 0xc5, 0x23, 0xe0, 0x1e, 0x2c, 0x1, 0x12, 0xfa, 0xf9, 0x17, 0x8, 0xcd, 0xde, 0xc5, 0xd5, 0xac, 0xc5, 0x73, 0x8d, 0x39, 0xa3, 0x1e, 0xd2, 0xbf, 0x7c, 0xc7, 0xa6, 0x39, 0xda, 0xf3, 0x44, 0xd2, 0x5b, 0xce, 0x61, 0xb, 0x86, 0x50, 0xb1, 0x69, 0x66, 0x1f, 0x16, 0x99, 0x8e, 0xa5, 0x8b, 0x6, 0x81, 0x8a, 0x1d, 0xac, 0x9c, 0xc8, 0xb4, 0x4f, 0x5b, 0x32, 0xc1, 0x4a, 0x53, 0xb1, 0xd9, 0xd6, 0x16, 0x21, 0x32, 0x61, 0xd0, 0xce, 0x1e, 0x3, 0xa6, 0xb6, 0x5e, 0xd3, 0x81, 0x53, 0x5b, 0xc2, 0x6c, 0x4a, 0x91, 0xad, 0xeb, 0x9e, 0xde, 0xeb, 0x2b, 0xe4, 0x7e, 0x10, 0x9a, 0xdd, 0x73, 0xdd, 0x22, 0x7b, 0x60, 0xc4, 0xc8, 0x6f, 0x32, 0xed, 0x5d, 0xc6, 0x21, 0xfd, 0xca, 0x4, 0x4a, 0x6f, 0x25, 0xfd, 0xb5, 0xc2, 0x75, 0xb, 0xb1, 0x79, 0x9d, 0x99, 0xd0, 0x34, 0x99, 0xb8, 0x65, 0x83, 0x36, 0x4e, 0x35, 0x58, 0x31, 0x62, 0xf3, 0x3c, 0xd0, 0x1f, 0xcf, 0xc6, 0xa, 0x54, 0x10, 0x99, 0xb0, 0x3b, 0xa8, 0x5d, 0xe, 0x70, 0x6c, 0xcc, 0xd4, 0x78, 0x93, 0xc1, 0x62, 0x1b, 0xf8, 0x2b, 0x49, 0x73, 0x41, 0xfd, 0x46, 0x3b, 0xeb, 0x90, 0xac, 0x26, 0x42, 0xb3, 0xbb, 0xf1, 0xd3, 0xf4, 0x78, 0xcf, 0x4a, 0x7e, 0x9e, 0x22, 0x9e, 0x32, 0xb3, 0x80, 0xfe, 0xb4, 0x95, 0xe7, 0x4c, 0x6d, 0x4e, 0x18, 0x5b, 0x74, 0x12, 0x68, 0x57, 0x55, 0xbb, 0x96, 0x19, 0xb4, 0x4f, 0xa1, 0x45, 0x51, 0xc8, 0xf4, 0xb8, 0x3d, 0xab, 0x93, 0x7a, 0xb0, 0x72, 0x65, 0xf9, 0xb1, 0x10, 0xfb, 0xa4, 0xfa, 0xcf, 0x25, 0x22, 0x13, 0xc6, 0x74, 0xe, 0xb1, 0x1b, 0x9d, 0x26, 0x53, 0xe3, 0x6d, 0xb2, 0x7, 0x53, 0x44, 0x19, 0xdb, 0xf7, 0xfa, 0x9e, 0x43, 0x84, 0xe6, 0x25, 0x43, 0xa0, 0xd5, 0xd8, 0x69, 0xb2, 0x49, 0xa3, 0x96, 0xb4, 0xb2, 0x2e, 0x66, 0x9c, 0xfa, 0x3a, 0xca, 0xb7, 0x92, 0x77, 0x49, 0xad, 0x4a, 0xb7, 0xc1, 0x32, 0xe0, 0x77, 0x9a, 0xee, 0xd2, 0x4f, 0x79, 0x2c, 0x6d, 0x32, 0xc, 0x56, 0xec, 0x19, 0x80, 0x90, 0x40, 0xe5, 0x4c, 0x6, 0x5c, 0xa7, 0x89, 0xc8, 0x84, 0xdd, 0x48, 0xe7, 0x50, 0xc6, 0x61, 0x2c, 0xce, 0xa4, 0xd9, 0xee, 0x5c, 0xb3, 0xe6, 0x32, 0x85, 0xec, 0x50, 0x13, 0xd6, 0xfa, 0xde, 0x1f, 0x2, 0xda, 0x79, 0xc1, 0x30, 0x68, 0xe4, 0x14, 0x6f, 0x25, 0x6c, 0xe3, 0x5c, 0xaa, 0x59, 0x17, 0xdf, 0x9d, 0xbf, 0xa7, 0xfa, 0xfe, 0xe1, 0x89, 0x95, 0xe, 0x34, 0x7c, 0xc6, 0xea, 0x91, 0x8c, 0xbc, 0x99, 0xa3, 0x47, 0x4a, 0x9, 0x5b, 0x7f, 0x69, 0x2, 0xea, 0xd0, 0x65, 0x42, 0x29, 0xb1, 0x6d, 0x10, 0xa8, 0x2c, 0xa4, 0xd9, 0x3a, 0x57, 0x44, 0x26, 0xb4, 0x76, 0x96, 0x87, 0x6, 0xf3, 0x18, 0xa2, 0xb7, 0x69, 0xf6, 0x72, 0x2d, 0xcf, 0x6b, 0x2e, 0x73, 0xae, 0x33, 0xb7, 0xd, 0x8c, 0x74, 0x53, 0x3d, 0xf3, 0x37, 0x16, 0xa7, 0xa8, 0xd8, 0x48, 0xf8, 0x54, 0xd7, 0x14, 0xb8, 0xf4, 0xec, 0x3b, 0xa7, 0x99, 0x6, 0x7d, 0x2e, 0x2a, 0xdd, 0x2f, 0x7c, 0xc6, 0xaa, 0x6a, 0xe7, 0x8b, 0xc4, 0xee, 0x3f, 0x54, 0xf8, 0x54, 0x12, 0xbe, 0x34, 0x28, 0xf5, 0x40, 0x25, 0x64, 0x66, 0x60, 0x36, 0x84, 0xd0, 0x44, 0x64, 0x82, 0x8f, 0xc0, 0x14, 0x19, 0x27, 0x93, 0xb9, 0x90, 0xf0, 0xec, 0xa5, 0x31, 0x3c, 0x14, 0x31, 0x7e, 0x46, 0x19, 0x9d, 0x90, 0xb5, 0x5f, 0x4d, 0xeb, 0xd0, 0xe5, 0x46, 0xa8, 0x53, 0xb4, 0xb3, 0x2e, 0xa9, 0xf5, 0x4d, 0x35, 0x4e, 0x7d, 0x4a, 0x88, 0x21, 0x30, 0xdd, 0x7d, 0xc4, 0x77, 0xac, 0x9e, 0x49, 0x3a, 0xeb, 0x33, 0x17, 0x12, 0xb6, 0x2e, 0xfc, 0x4a, 0xb7, 0x53, 0x4d, 0x97, 0xd9, 0x9b, 0x54, 0xf0, 0x1d, 0x63, 0xbd, 0xb, 0x4d, 0x44, 0x26, 0x18, 0xa, 0xc7, 0xeb, 0xdf, 0x47, 0x32, 0xb8, 0x21, 0xef, 0x6d, 0xb2, 0x90, 0x1e, 0xe7, 0xb5, 0xbf, 0x2f, 0xb0, 0x11, 0xe8, 0x30, 0xf3, 0xc0, 0x36, 0x52, 0xc1, 0x4f, 0x93, 0x32, 0x53, 0x53, 0xc1, 0x67, 0x3d, 0x2f, 0x2, 0xb3, 0xfb, 0xb1, 0x9a, 0xc2, 0x38, 0xd, 0x11, 0x98, 0x26, 0x50, 0x63, 0xa9, 0x85, 0xdb, 0x17, 0xfa, 0xb6, 0x51, 0xaf, 0x42, 0x13, 0x91, 0x9, 0x86, 0x37, 0x1e, 0x11, 0xd2, 0xd0, 0xac, 0x3d, 0x9d, 0xf2, 0x5a, 0xf2, 0xd9, 0xd4, 0x33, 0x94, 0xf3, 0x9a, 0x4b, 0x4, 0xa7, 0x45, 0x44, 0x4a, 0xc8, 0xee, 0x69, 0xc5, 0x52, 0xfc, 0xd7, 0xdb, 0x4d, 0x91, 0x33, 0x71, 0xcf, 0x84, 0x5c, 0x31, 0x3e, 0x7b, 0x19, 0xab, 0x85, 0x4c, 0x7b, 0xd6, 0x21, 0x64, 0x2c, 0x99, 0x36, 0x61, 0x7a, 0xdc, 0xf, 0x73, 0x32, 0xd8, 0x83, 0xe7, 0x73, 0xe8, 0x45, 0x68, 0x22, 0x32, 0xc1, 0x50, 0x46, 0x28, 0x32, 0x45, 0xe, 0x17, 0x9f, 0xad, 0xb5, 0xd1, 0x61, 0x6a, 0x3c, 0x3c, 0xca, 0xf5, 0x69, 0xaf, 0x54, 0x37, 0x17, 0xb4, 0x75, 0x8a, 0xbe, 0xc6, 0xd8, 0x64, 0x5d, 0x56, 0x9, 0xb7, 0x87, 0x6a, 0x7, 0xd7, 0xda, 0x40, 0x73, 0x62, 0x11, 0x74, 0x3f, 0x56, 0x97, 0x13, 0xb6, 0x7d, 0x66, 0x2c, 0xf9, 0xb0, 0x15, 0xff, 0xf5, 0xaa, 0xf0, 0xcc, 0x26, 0x20, 0xc0, 0xed, 0x45, 0x68, 0x22, 0x32, 0xc1, 0x47, 0x64, 0xd6, 0x23, 0x1a, 0x32, 0xe3, 0xa8, 0xf7, 0x45, 0x69, 0x39, 0x14, 0x6f, 0xee, 0x83, 0xed, 0xb, 0x6d, 0xba, 0x4f, 0x40, 0x50, 0xd6, 0xe8, 0x99, 0x22, 0x50, 0x60, 0xe6, 0x90, 0x75, 0xf9, 0xe8, 0xd1, 0x1e, 0xa7, 0x74, 0x9d, 0x56, 0x63, 0xf5, 0x7c, 0x4f, 0xdf, 0x32, 0x75, 0x12, 0x57, 0x19, 0x8c, 0xa5, 0xad, 0xa4, 0x3d, 0x13, 0x30, 0x44, 0x1f, 0xf2, 0x5d, 0xbf, 0x1a, 0x22, 0xfc, 0x11, 0x99, 0x10, 0x14, 0x51, 0xba, 0x3a, 0x69, 0x2c, 0x86, 0xd6, 0x5e, 0x93, 0x83, 0xd1, 0x69, 0x8e, 0x12, 0xe7, 0x4b, 0x8f, 0xf7, 0x2d, 0x84, 0x73, 0x93, 0x8d, 0xe0, 0xf6, 0xdd, 0x10, 0x95, 0x53, 0xd6, 0x65, 0xe1, 0x78, 0x7d, 0x29, 0x64, 0x9f, 0xda, 0xb2, 0xd6, 0xe3, 0xb5, 0x96, 0xe7, 0x63, 0x70, 0xa7, 0x7c, 0x1a, 0x54, 0xe8, 0x58, 0x42, 0x60, 0x76, 0xe3, 0x43, 0x7d, 0xab, 0x8c, 0x84, 0x2e, 0x7, 0x3a, 0xc8, 0x2b, 0xda, 0x1e, 0x1e, 0x79, 0xe7, 0x78, 0xfd, 0x2e, 0x82, 0xcf, 0x78, 0x65, 0x19, 0x5c, 0xc, 0x4e, 0x37, 0xac, 0xb4, 0x80, 0x74, 0x89, 0xc8, 0xb, 0x21, 0x63, 0xec, 0x5b, 0xda, 0x29, 0x27, 0xa7, 0xa8, 0x4, 0x66, 0x71, 0xe0, 0x75, 0xd5, 0x6, 0x9f, 0x18, 0x66, 0x9d, 0x90, 0x52, 0x45, 0x82, 0x4b, 0xc6, 0xd2, 0x28, 0x98, 0xd9, 0x95, 0xaf, 0xe2, 0xde, 0xe8, 0xab, 0xc6, 0xf6, 0xbd, 0x74, 0x50, 0x66, 0x8d, 0x4c, 0x26, 0x28, 0x5c, 0x1b, 0x3c, 0x62, 0x11, 0x18, 0xa9, 0x1e, 0x5, 0x39, 0x26, 0x3e, 0xeb, 0x33, 0x7d, 0x84, 0x68, 0xca, 0x5c, 0x88, 0xdf, 0x26, 0xa8, 0xdc, 0x9c, 0xe2, 0x3b, 0xc6, 0xeb, 0xa0, 0x2, 0x21, 0x5, 0x7c, 0xf, 0x7c, 0x40, 0x60, 0xf6, 0xd7, 0x8f, 0x7c, 0x3, 0x96, 0xcb, 0x2e, 0xec, 0x3e, 0x22, 0x13, 0x8e, 0xc4, 0x5d, 0x84, 0x9d, 0xe9, 0xae, 0x74, 0xa9, 0xc5, 0x6f, 0x5d, 0xd7, 0x45, 0xa6, 0xed, 0xa3, 0x8c, 0xec, 0x12, 0xa7, 0xb8, 0xd7, 0x6e, 0xcc, 0x1d, 0x76, 0x83, 0x2c, 0x26, 0xec, 0x8e, 0x25, 0x9f, 0x35, 0xde, 0xf, 0x8, 0xcc, 0x5e, 0x9, 0xb1, 0x55, 0x6a, 0x59, 0x43, 0x81, 0xc8, 0x84, 0x36, 0xb8, 0x32, 0x34, 0x94, 0x8b, 0x48, 0x9f, 0x2b, 0x8f, 0x40, 0xa2, 0x94, 0xfc, 0xb2, 0x99, 0x66, 0xed, 0x18, 0x4e, 0x31, 0xdc, 0x6e, 0xac, 0x11, 0x9, 0xb0, 0x33, 0x96, 0xae, 0x19, 0x4b, 0x51, 0x9, 0x4d, 0xdf, 0xcd, 0x9f, 0x37, 0x6d, 0xfe, 0x23, 0x44, 0x26, 0x4c, 0x61, 0x3d, 0x26, 0xf4, 0x8f, 0x4f, 0x89, 0x99, 0x8f, 0x99, 0xb5, 0x89, 0xcf, 0xe6, 0x84, 0x5c, 0x9d, 0xa2, 0xcb, 0x6e, 0x7c, 0x66, 0x48, 0x81, 0x85, 0x12, 0x98, 0x85, 0xc7, 0xfb, 0x4e, 0x85, 0x99, 0xb3, 0xa1, 0xa8, 0xc4, 0xaf, 0xf2, 0x43, 0xab, 0x23, 0x4c, 0x11, 0x99, 0x79, 0xa3, 0x6, 0x3d, 0x99, 0x4c, 0x30, 0x6, 0xa7, 0x72, 0xbc, 0x67, 0x2e, 0x2d, 0xa7, 0x4e, 0x26, 0x84, 0xef, 0x91, 0x7d, 0xb9, 0x3a, 0xc5, 0x43, 0x6d, 0x53, 0x23, 0x14, 0x60, 0xc7, 0x6e, 0xf8, 0xac, 0x69, 0x5e, 0xe2, 0x6f, 0x6, 0x67, 0x2d, 0x7e, 0x87, 0x24, 0x2c, 0xa5, 0xe1, 0x4c, 0x16, 0x22, 0x93, 0xc1, 0xef, 0x12, 0x98, 0x4c, 0x5b, 0xe4, 0x83, 0xcf, 0xda, 0xcc, 0xf, 0x99, 0x4, 0x5f, 0x3e, 0x91, 0x7b, 0xae, 0x4e, 0x51, 0x65, 0x36, 0x8e, 0x8, 0x4c, 0xc1, 0x3, 0xdf, 0x69, 0xf2, 0x8d, 0xa4, 0x7d, 0x68, 0x41, 0xcc, 0x9c, 0x8b, 0xff, 0x11, 0xa6, 0xc1, 0x85, 0xda, 0x11, 0x99, 0x79, 0xe3, 0x9a, 0xfe, 0xfc, 0x42, 0x13, 0x65, 0x45, 0x25, 0xee, 0x6c, 0xe6, 0x22, 0x83, 0x76, 0xf0, 0x31, 0xa6, 0x39, 0x3b, 0xc5, 0xd2, 0xf1, 0x3a, 0x4b, 0x6c, 0xc0, 0x70, 0x29, 0x7e, 0x4b, 0x4e, 0x28, 0xd8, 0x3f, 0x1e, 0xbe, 0xa7, 0xc0, 0x15, 0xd2, 0x60, 0xc9, 0x14, 0x22, 0x33, 0x5f, 0x5c, 0x53, 0x9f, 0xaa, 0xc3, 0xad, 0x69, 0xa6, 0xec, 0x70, 0x9, 0xa7, 0x42, 0xd2, 0xde, 0x0, 0x34, 0xf7, 0xb8, 0xbf, 0xdc, 0x9d, 0xe2, 0xef, 0x1e, 0xc1, 0xa, 0x40, 0xe9, 0x19, 0x94, 0xa6, 0x54, 0x3, 0x74, 0xaa, 0x6c, 0x3d, 0x83, 0xe6, 0xa5, 0xf8, 0xd5, 0x38, 0x45, 0x64, 0x82, 0x33, 0x22, 0x61, 0xca, 0x2b, 0x4f, 0x94, 0x40, 0xa8, 0x1d, 0xef, 0x49, 0x75, 0xca, 0xdc, 0x77, 0x6a, 0x2f, 0x77, 0xa7, 0xe8, 0x2a, 0x79, 0x86, 0x60, 0x0, 0xf1, 0x1c, 0x4b, 0x57, 0x4, 0x25, 0xd1, 0x70, 0xe5, 0xe9, 0xf7, 0x83, 0x8e, 0x1a, 0x46, 0x64, 0xe6, 0x1b, 0x61, 0x96, 0x8e, 0xf7, 0x50, 0xe3, 0x2e, 0x5f, 0x3e, 0x79, 0xf4, 0x9f, 0x54, 0x3, 0x2f, 0xd7, 0xd4, 0x1e, 0x4e, 0xf1, 0xf0, 0xc, 0x8, 0x1b, 0x7e, 0x40, 0x71, 0x26, 0xee, 0x4d, 0x82, 0x2a, 0x98, 0x65, 0x1d, 0x66, 0x5c, 0xf8, 0x1e, 0xce, 0xb1, 0x40, 0x64, 0xc2, 0x21, 0x5c, 0x9b, 0x1a, 0x2a, 0x9c, 0x45, 0xd6, 0xb8, 0xa2, 0x59, 0xe5, 0x3c, 0x66, 0x9, 0xde, 0xb7, 0x4b, 0x3c, 0xe3, 0x14, 0x11, 0x99, 0xe0, 0xe6, 0x48, 0xfc, 0x36, 0xce, 0xf9, 0x8, 0x1a, 0x18, 0x96, 0x7, 0xf1, 0x3f, 0x9c, 0xc3, 0x6b, 0x13, 0x10, 0x22, 0x33, 0x3f, 0x4a, 0xf, 0x67, 0x4a, 0x8d, 0xbb, 0xbc, 0xa9, 0x3d, 0x84, 0xe6, 0xbb, 0xc, 0xdb, 0xe5, 0x1c, 0xa7, 0xe8, 0xb5, 0x89, 0x3, 0xf2, 0xc6, 0x67, 0x46, 0x40, 0xd9, 0x97, 0x8a, 0xa6, 0x8a, 0x12, 0x9f, 0xd9, 0x9a, 0x42, 0x3c, 0x37, 0x1, 0x21, 0x32, 0xf3, 0xc3, 0x15, 0x61, 0x2a, 0x81, 0xb1, 0xa6, 0x99, 0xb2, 0xc7, 0x55, 0x59, 0xa0, 0xcc, 0xac, 0x3d, 0x2a, 0x61, 0x9d, 0xb2, 0x62, 0x46, 0x13, 0x80, 0x23, 0x8, 0x39, 0xf3, 0x8, 0x44, 0xce, 0x69, 0xaa, 0xa8, 0xf1, 0xc9, 0x66, 0x9e, 0xfd, 0xe5, 0x6f, 0xff, 0x70, 0x66, 0x33, 0x11, 0x99, 0x79, 0xe1, 0xb3, 0x73, 0x96, 0xe9, 0x40, 0x10, 0x8f, 0x48, 0x36, 0x37, 0x91, 0x49, 0x89, 0x15, 0x3f, 0xbe, 0xd3, 0x4, 0x59, 0xe3, 0xbb, 0xae, 0xb9, 0xa6, 0xa9, 0xa2, 0xb7, 0xff, 0x6b, 0x8f, 0x80, 0xc2, 0x99, 0xcd, 0x44, 0x64, 0xe6, 0x15, 0x61, 0xba, 0x76, 0x85, 0xd5, 0x42, 0x16, 0x13, 0x9e, 0xfb, 0x82, 0xcf, 0x79, 0xe6, 0x39, 0xb0, 0xc6, 0x29, 0x6, 0xf5, 0x1b, 0xc8, 0xd7, 0xc7, 0xf8, 0x64, 0x31, 0xd9, 0x54, 0x3a, 0xd, 0x3a, 0xc9, 0x66, 0x22, 0x32, 0xf3, 0x8a, 0x30, 0x8b, 0xe, 0x3a, 0x15, 0xe4, 0x15, 0xcd, 0x1e, 0x22, 0x87, 0xa9, 0x53, 0xa6, 0xf6, 0x0, 0xfc, 0x7d, 0x8c, 0x4f, 0x16, 0x93, 0x75, 0xbb, 0xd3, 0x9, 0x18, 0x97, 0x1e, 0x81, 0xc5, 0x47, 0x44, 0x26, 0xcc, 0x3c, 0x3a, 0x8b, 0x12, 0x14, 0x6b, 0x9a, 0xa, 0x2c, 0x5c, 0x27, 0xb7, 0xbc, 0xc9, 0xa0, 0xd, 0x70, 0x8a, 0x61, 0x1c, 0xd3, 0x4, 0xd9, 0xb2, 0xf0, 0x8, 0xd8, 0xc8, 0x62, 0x4e, 0x8b, 0x4f, 0x1e, 0xf6, 0xef, 0x60, 0x36, 0x13, 0x91, 0x99, 0x3e, 0xbe, 0x5, 0xa6, 0xc9, 0x62, 0xc2, 0xbe, 0xc0, 0xc3, 0x15, 0xbc, 0xa4, 0xc, 0x4e, 0x11, 0xc0, 0x5f, 0x60, 0x16, 0x4, 0x6c, 0x49, 0xda, 0xc0, 0xb5, 0x87, 0xc6, 0x98, 0x23, 0x32, 0xf3, 0xe5, 0xc2, 0x43, 0xc, 0xac, 0x85, 0x72, 0x12, 0xb0, 0xdf, 0xc0, 0xd4, 0x19, 0x8b, 0xcc, 0xd, 0x4e, 0x11, 0xc0, 0xb, 0xd7, 0x29, 0x60, 0x4, 0x6c, 0xd3, 0xc5, 0xe7, 0xb9, 0x5d, 0x20, 0x32, 0xf3, 0x8d, 0x2e, 0x29, 0x27, 0x1, 0x6d, 0xa8, 0x1d, 0xaf, 0x17, 0x9, 0xdf, 0x3b, 0xd9, 0xfd, 0xfd, 0xf6, 0x42, 0x32, 0xe, 0x3c, 0x60, 0xbf, 0xd, 0x28, 0x1d, 0xef, 0x59, 0x13, 0xb0, 0x4d, 0xda, 0x7, 0xac, 0x5d, 0x7d, 0xe0, 0x2f, 0x7f, 0xfb, 0x47, 0x89, 0xc8, 0xcc, 0xb, 0x65, 0xec, 0x7d, 0xce, 0x18, 0xe5, 0xd4, 0x5, 0x38, 0x44, 0x95, 0xa9, 0xc8, 0xdc, 0x8, 0x3b, 0xa5, 0xf7, 0xb1, 0xcd, 0xb4, 0x3f, 0xc0, 0xcb, 0xf8, 0x14, 0xe5, 0x26, 0x8b, 0x39, 0x6d, 0x7c, 0x9e, 0xdf, 0x7, 0x44, 0x66, 0x3e, 0xa8, 0x35, 0x12, 0x37, 0xe2, 0x77, 0xea, 0x2, 0x5, 0xa6, 0xe1, 0x10, 0xae, 0xba, 0x87, 0xa9, 0x8a, 0xa, 0x9c, 0x62, 0xf3, 0xe0, 0x16, 0xf2, 0x62, 0x4e, 0xc0, 0x96, 0x45, 0x70, 0xe9, 0xa, 0x30, 0x17, 0xfb, 0x36, 0x0, 0x21, 0x32, 0xd3, 0x14, 0x98, 0xb7, 0x1e, 0xce, 0x5f, 0x65, 0x2f, 0x29, 0x30, 0xd, 0x2e, 0x5c, 0xce, 0xe1, 0xf7, 0x44, 0xef, 0xb9, 0xe2, 0xd1, 0xbf, 0x88, 0xab, 0x6d, 0x4a, 0x9a, 0x28, 0xab, 0xa0, 0xc2, 0xe5, 0x6b, 0x38, 0xa6, 0x38, 0x9f, 0xc0, 0x7b, 0x8e, 0xc8, 0xcc, 0x43, 0x60, 0xfa, 0x64, 0x13, 0xde, 0xb, 0xd3, 0xe4, 0xd0, 0x5e, 0x64, 0xe6, 0x6a, 0x4c, 0xe9, 0x13, 0x2f, 0xf3, 0x8e, 0x26, 0xca, 0x6, 0x9f, 0xd, 0x3f, 0xcc, 0x96, 0xa5, 0x81, 0xcf, 0x46, 0xc8, 0x77, 0x88, 0x4c, 0x4, 0xa6, 0x62, 0x29, 0x64, 0x6a, 0xa0, 0x1b, 0x41, 0x51, 0x26, 0x6a, 0x4c, 0xe1, 0x65, 0xee, 0x1d, 0xaf, 0xcf, 0x69, 0xa2, 0x6c, 0x70, 0x3d, 0xeb, 0x35, 0x4d, 0x94, 0xc, 0x3e, 0x1, 0xc3, 0x7c, 0x77, 0xca, 0x1c, 0x91, 0x99, 0x9f, 0xc0, 0x54, 0x83, 0x9e, 0x5d, 0xb3, 0x0, 0xfb, 0xa9, 0x84, 0xf5, 0x63, 0x3e, 0x6d, 0x74, 0x88, 0x2, 0xa1, 0x99, 0x5, 0x4c, 0x95, 0xe7, 0xc7, 0x97, 0xd0, 0xc0, 0x3, 0x91, 0x99, 0x97, 0xc0, 0x54, 0xb, 0x77, 0x29, 0x57, 0x4, 0xa1, 0x6c, 0x33, 0xba, 0x57, 0x9c, 0xa2, 0x5f, 0x7f, 0x70, 0x9, 0xf1, 0x8f, 0x34, 0x53, 0xf2, 0x94, 0x8e, 0xd7, 0xeb, 0xcc, 0x6c, 0x47, 0xe, 0x4, 0x4f, 0x99, 0x23, 0x32, 0xa7, 0x1f, 0x49, 0x7e, 0xb, 0x10, 0x98, 0x27, 0xc2, 0x3a, 0x4c, 0x8, 0x27, 0xa7, 0x3e, 0xc3, 0x54, 0x79, 0x37, 0xed, 0xa4, 0x4, 0xc8, 0x19, 0xcd, 0x94, 0x34, 0xef, 0x18, 0x4b, 0x8c, 0xfd, 0x3d, 0x90, 0xc9, 0x4c, 0x4, 0x65, 0xc0, 0xbf, 0x8a, 0xbb, 0x4c, 0x91, 0x11, 0x9, 0xd4, 0xc3, 0x4, 0x70, 0x7, 0x62, 0x8c, 0x11, 0x3f, 0x7c, 0x32, 0xbe, 0xea, 0x14, 0x90, 0x82, 0xa6, 0x4a, 0x96, 0xd2, 0xf1, 0xfa, 0x1d, 0x4d, 0x94, 0x24, 0xce, 0x29, 0x73, 0xbb, 0x30, 0x3b, 0x22, 0x73, 0x7a, 0x98, 0x1a, 0x98, 0x97, 0x9e, 0xef, 0x57, 0x4e, 0xf3, 0x44, 0x98, 0xb6, 0x80, 0x71, 0x1c, 0x4d, 0x6a, 0xc2, 0x9, 0x9e, 0x5, 0x79, 0xe5, 0x69, 0xab, 0x8e, 0x68, 0xae, 0x2c, 0xc7, 0x3d, 0x99, 0xcc, 0x34, 0xa9, 0x3c, 0xde, 0x73, 0x8c, 0xc8, 0x9c, 0x26, 0x2a, 0xd, 0xfd, 0x4d, 0xfc, 0x17, 0xd5, 0x23, 0x30, 0x1, 0xc2, 0x84, 0x13, 0xf8, 0xe3, 0xb3, 0x81, 0x50, 0x2d, 0xe5, 0xb9, 0x45, 0x68, 0x26, 0xc7, 0x31, 0x2, 0x33, 0x5b, 0x1e, 0x24, 0xa0, 0x56, 0x2e, 0x22, 0x73, 0x1a, 0x14, 0xda, 0x50, 0x87, 0x64, 0x5, 0x94, 0xc3, 0x7c, 0x8b, 0xe3, 0x4, 0x80, 0x9e, 0xa8, 0xc4, 0x2f, 0xab, 0x61, 0x84, 0x66, 0x41, 0x93, 0x25, 0x43, 0xe9, 0x78, 0x9d, 0xa9, 0xf2, 0xf4, 0xc7, 0x3e, 0x22, 0x33, 0x11, 0x71, 0x79, 0x2d, 0x4f, 0xd9, 0xcb, 0x32, 0xe0, 0xf7, 0xcc, 0x26, 0x9f, 0x9a, 0x26, 0x4, 0x80, 0x1e, 0xf1, 0x5d, 0xeb, 0xad, 0x84, 0xe6, 0x57, 0xe1, 0x34, 0xa0, 0x54, 0x70, 0x6d, 0x36, 0x25, 0xb9, 0x91, 0x36, 0xce, 0x20, 0xc2, 0xac, 0xcb, 0x44, 0x64, 0xc6, 0x2f, 0x2e, 0x17, 0x81, 0xbf, 0xbb, 0x96, 0xa7, 0xc, 0x26, 0x1b, 0x18, 0x0, 0xa0, 0x6f, 0x54, 0x20, 0xeb, 0x5b, 0x77, 0xd7, 0x94, 0x5b, 0xbb, 0x14, 0xa6, 0xcf, 0xa7, 0xee, 0x9f, 0x5c, 0xcf, 0xaf, 0xa2, 0x99, 0x92, 0xc6, 0xe7, 0xf9, 0xce, 0x10, 0x99, 0x71, 0x71, 0xa4, 0x5, 0xe5, 0x6d, 0x43, 0x71, 0x69, 0xb2, 0xa, 0x9c, 0x47, 0xe, 0x0, 0x43, 0x72, 0x25, 0x61, 0x27, 0xbb, 0x9c, 0x69, 0x1b, 0x47, 0x89, 0xa3, 0xe9, 0x8a, 0x4c, 0x4, 0x26, 0xb8, 0x9e, 0xf3, 0x1b, 0x44, 0x66, 0x1c, 0x83, 0x55, 0x89, 0x49, 0xb5, 0xd6, 0xf2, 0x87, 0x3c, 0x65, 0x2f, 0xcb, 0x6, 0x7f, 0xc7, 0xac, 0xbf, 0x5c, 0xd3, 0xa4, 0x0, 0x30, 0x2, 0xa7, 0x81, 0xe2, 0x42, 0x5, 0xd5, 0x97, 0x96, 0xd8, 0x24, 0xb3, 0x39, 0x1d, 0x5c, 0x9b, 0x7e, 0x98, 0x2a, 0xcf, 0x3, 0xd7, 0x73, 0x26, 0x93, 0x39, 0x30, 0x47, 0xf2, 0x5c, 0xa0, 0xd8, 0x4c, 0x85, 0x7f, 0xd3, 0xdf, 0xb7, 0x39, 0x82, 0x4d, 0x65, 0x11, 0xd8, 0x41, 0xe, 0x0, 0x63, 0xf3, 0x5e, 0xc2, 0xb3, 0x58, 0x85, 0x25, 0x36, 0xaf, 0xc5, 0xef, 0x60, 0x9, 0x18, 0x97, 0xc2, 0xf1, 0xfa, 0x3d, 0x4d, 0x94, 0x5, 0xae, 0xe7, 0xfc, 0xbf, 0xb1, 0xfc, 0xca, 0xe3, 0x4d, 0xb7, 0xb4, 0x65, 0x6b, 0x71, 0xd9, 0x87, 0xe1, 0xdc, 0xea, 0xec, 0x1, 0xe2, 0x12, 0x0, 0x62, 0xc0, 0x94, 0x4c, 0x53, 0x62, 0x71, 0xd1, 0xc0, 0x4e, 0x2e, 0xf4, 0xa5, 0x6c, 0x9a, 0xaa, 0x59, 0xaa, 0xca, 0xe0, 0xd4, 0x34, 0xeb, 0xe4, 0x44, 0x26, 0xcf, 0x2c, 0xf, 0x9c, 0xda, 0xe3, 0x2f, 0x7f, 0xfb, 0xc7, 0xec, 0x95, 0xc7, 0xc0, 0x2f, 0x69, 0xcb, 0xa8, 0x50, 0x3, 0x58, 0x2d, 0xb4, 0x5f, 0xd3, 0x14, 0xa3, 0x51, 0x5a, 0x41, 0xd8, 0x9f, 0x76, 0xfe, 0xed, 0x50, 0x80, 0xf1, 0x70, 0x60, 0x60, 0xd6, 0x3b, 0xc6, 0xf9, 0xce, 0xe3, 0x77, 0x0, 0x62, 0xe4, 0x54, 0xf7, 0xdf, 0xa6, 0x1b, 0x7c, 0x66, 0xfa, 0xba, 0x44, 0x70, 0x4e, 0x52, 0x64, 0x56, 0x34, 0x11, 0x22, 0xd3, 0xf8, 0xc0, 0x57, 0xb4, 0xd3, 0xa4, 0xb2, 0x4, 0x6a, 0x6a, 0xfc, 0x93, 0xb0, 0x73, 0x7c, 0x8, 0x8c, 0x40, 0x3c, 0xd6, 0x46, 0xb5, 0xe8, 0x20, 0xe0, 0x6a, 0x1b, 0xb4, 0x6d, 0x2d, 0xd1, 0xa9, 0xbe, 0xde, 0x8b, 0x5f, 0x61, 0x5c, 0x80, 0xa1, 0x59, 0xeb, 0x7e, 0x79, 0xdd, 0xb2, 0xcf, 0xef, 0xa, 0x4e, 0xf5, 0x37, 0xbf, 0xd0, 0xe7, 0xa3, 0x15, 0x99, 0x4, 0x2, 0xf9, 0x9, 0xcd, 0x43, 0x33, 0xb5, 0xc7, 0x88, 0xcc, 0xf8, 0x51, 0x83, 0x76, 0xa5, 0x23, 0x79, 0xc4, 0x65, 0x7f, 0xcc, 0xb4, 0x33, 0x3c, 0xd6, 0xdf, 0x17, 0x91, 0x7e, 0x46, 0x79, 0xc1, 0x69, 0xd7, 0xfa, 0x52, 0xce, 0xf7, 0xbb, 0xf5, 0x3d, 0xc0, 0x98, 0xb6, 0x4b, 0x4d, 0x9f, 0x2f, 0xa4, 0x9b, 0xb2, 0x45, 0x46, 0x70, 0x9a, 0x5d, 0xe9, 0xca, 0x26, 0xde, 0xe9, 0x7e, 0x4e, 0xb6, 0x7f, 0xb8, 0xe0, 0xdb, 0xf5, 0xcc, 0x21, 0x1f, 0x9c, 0x9a, 0x4, 0x91, 0x19, 0x2f, 0xca, 0x80, 0x9a, 0x69, 0x22, 0xe8, 0xc7, 0x58, 0xce, 0xb5, 0xa8, 0x9c, 0xcb, 0xf4, 0x77, 0xb7, 0x16, 0xb2, 0x3f, 0xdb, 0xba, 0xd5, 0xd7, 0x3d, 0xce, 0x18, 0x46, 0x62, 0xad, 0xed, 0xd8, 0x47, 0xe9, 0x76, 0x27, 0xf9, 0x5c, 0x9e, 0x37, 0x4d, 0x9a, 0x8c, 0x3e, 0xa2, 0x73, 0x98, 0x40, 0x17, 0x91, 0x9, 0xa2, 0xc7, 0x5a, 0x79, 0xa8, 0xbf, 0x20, 0x32, 0xe3, 0x13, 0x96, 0x5f, 0x84, 0xac, 0x65, 0xdf, 0xc2, 0xf2, 0x9d, 0xb4, 0xdb, 0xd1, 0x3f, 0x35, 0xa7, 0x30, 0xdb, 0x63, 0x18, 0x6c, 0x87, 0xc, 0xd0, 0x37, 0xca, 0x9e, 0xa9, 0x19, 0x19, 0xb5, 0xdc, 0x67, 0xa1, 0x5, 0x67, 0xd1, 0xc3, 0xd8, 0x46, 0x74, 0x8e, 0xb, 0x22, 0x13, 0x7e, 0x1a, 0x97, 0x88, 0xcc, 0xf1, 0xa3, 0x80, 0xad, 0x36, 0x84, 0x64, 0x2c, 0xfb, 0x43, 0x39, 0x9e, 0xf, 0x19, 0x9, 0x4b, 0x17, 0xe5, 0x4e, 0xf4, 0x59, 0xc9, 0xf3, 0x3a, 0x37, 0x9c, 0x31, 0xf4, 0x2d, 0x36, 0xaf, 0xf4, 0xd5, 0xe7, 0xb8, 0xdc, 0x15, 0x9d, 0x4, 0x57, 0xc3, 0xf0, 0x1f, 0x9a, 0x20, 0x2b, 0x9c, 0xc7, 0x4b, 0x22, 0x32, 0xfb, 0x8f, 0xea, 0x4c, 0x64, 0x67, 0x6f, 0xd6, 0xa8, 0x71, 0xe6, 0xfd, 0x47, 0x50, 0xf2, 0x94, 0x2d, 0x59, 0x48, 0x9c, 0xeb, 0x2b, 0x63, 0x15, 0x9d, 0xb5, 0x25, 0x3a, 0x9, 0x7c, 0xa0, 0x4f, 0x36, 0xfa, 0x2a, 0x2c, 0xc1, 0x39, 0x1b, 0xa8, 0x9f, 0x1b, 0x9b, 0x6c, 0x8b, 0x4e, 0x66, 0x8f, 0xdc, 0x50, 0x88, 0x1d, 0x82, 0xc6, 0x9c, 0x4b, 0x64, 0xaa, 0x81, 0x77, 0x42, 0x3b, 0xc1, 0x84, 0x50, 0xe, 0xeb, 0x42, 0xc6, 0x5b, 0x67, 0x59, 0x35, 0xf8, 0xbc, 0x45, 0x64, 0xed, 0xb7, 0xd0, 0xd7, 0x83, 0x25, 0x2, 0x0, 0xfa, 0xc, 0xc6, 0x4d, 0x76, 0x73, 0x28, 0xc1, 0x29, 0xf2, 0xeb, 0x46, 0xa2, 0x7a, 0x47, 0x74, 0xd6, 0x3c, 0x1a, 0x80, 0x76, 0x41, 0x5, 0x99, 0x4c, 0x48, 0x5, 0x73, 0x4c, 0xdd, 0xa2, 0x47, 0x47, 0x58, 0xcb, 0xaf, 0xe5, 0x83, 0xea, 0x8e, 0x9d, 0x91, 0x5d, 0x5b, 0x53, 0x7d, 0xff, 0xc6, 0x72, 0x88, 0x47, 0xd6, 0xd7, 0xa1, 0xda, 0x74, 0x41, 0xd7, 0x82, 0x91, 0x4, 0xa7, 0xbd, 0x86, 0xba, 0x1c, 0xa0, 0xdf, 0xdb, 0x1, 0x16, 0xa2, 0xb3, 0x19, 0x1c, 0xde, 0x2, 0x88, 0x4c, 0x48, 0xe, 0x95, 0xb9, 0xec, 0x72, 0xd7, 0xaa, 0x71, 0x2e, 0xf7, 0xf2, 0x3c, 0xa5, 0x36, 0x14, 0xbb, 0x75, 0x2f, 0x5f, 0x9a, 0xb2, 0x2e, 0x2d, 0x11, 0x6a, 0x4a, 0x2e, 0x71, 0x24, 0x1f, 0xa4, 0x84, 0x1a, 0xb, 0x6b, 0x79, 0x3e, 0x78, 0x42, 0xf5, 0xf9, 0x63, 0xf9, 0x75, 0xda, 0x1b, 0xd1, 0x9, 0x80, 0xc8, 0x4, 0xe8, 0x1c, 0xe5, 0x68, 0xae, 0xa5, 0xfd, 0x74, 0xae, 0xed, 0x3c, 0xa6, 0xb2, 0xb3, 0xbf, 0x7a, 0x41, 0x84, 0x96, 0xba, 0x3d, 0x4c, 0xbd, 0x4f, 0x84, 0x27, 0xa4, 0x42, 0xa5, 0xaf, 0x95, 0xfe, 0x79, 0x6e, 0x89, 0xce, 0x21, 0xfa, 0xf9, 0xae, 0xe8, 0xdc, 0xee, 0xd8, 0xd, 0x0, 0x40, 0x64, 0x42, 0x2, 0xa8, 0xc, 0x9e, 0xc9, 0x5e, 0xb6, 0x11, 0x96, 0xa6, 0x16, 0x69, 0x4a, 0x8b, 0xd5, 0x8d, 0xf8, 0x5c, 0xef, 0x8, 0xcf, 0x21, 0x33, 0x40, 0x0, 0x43, 0xb0, 0xb1, 0xc4, 0x9d, 0x7d, 0x42, 0xd7, 0x50, 0xfd, 0x7c, 0x5f, 0x71, 0x78, 0x53, 0xa5, 0xa1, 0xe6, 0xf1, 0x0, 0x20, 0x32, 0x61, 0x7a, 0x28, 0xa3, 0x7e, 0x23, 0xcd, 0xb2, 0x97, 0x66, 0xfa, 0x2d, 0x35, 0x61, 0xe9, 0x23, 0x3c, 0xd5, 0xb5, 0xb2, 0x44, 0xa7, 0x59, 0xe7, 0x46, 0xa6, 0x13, 0x52, 0xe0, 0xe1, 0x85, 0x7e, 0x6e, 0x32, 0xfa, 0xa5, 0xf4, 0xbf, 0xa6, 0xd3, 0x2e, 0x99, 0xc4, 0x99, 0xeb, 0x0, 0x88, 0x4c, 0x98, 0x18, 0x2a, 0x63, 0x70, 0xd9, 0xe0, 0xf7, 0x6a, 0xed, 0x78, 0xd6, 0x34, 0xe1, 0x4f, 0xa2, 0x53, 0xe4, 0x79, 0x37, 0xef, 0xb1, 0x50, 0x47, 0x14, 0xd2, 0xed, 0xe7, 0x62, 0x89, 0xcd, 0x37, 0xf2, 0xbc, 0xac, 0xa4, 0xcf, 0x60, 0xd8, 0x3e, 0x73, 0x1d, 0xc1, 0x9, 0x88, 0x4c, 0x80, 0x88, 0x51, 0x6b, 0x2f, 0x17, 0xd, 0x9c, 0xcc, 0x4a, 0x28, 0xbc, 0xec, 0x12, 0xe0, 0xfb, 0x76, 0xf3, 0x22, 0x38, 0x21, 0x35, 0xcc, 0x11, 0xab, 0x62, 0x5, 0x58, 0xb6, 0xe8, 0xec, 0x2b, 0xab, 0x6f, 0xb, 0xce, 0xca, 0x12, 0x9c, 0xd4, 0xe5, 0x4, 0x44, 0x26, 0xc0, 0xc8, 0x28, 0xe1, 0x73, 0x1b, 0xe8, 0x0, 0x94, 0x70, 0x3a, 0x45, 0x5c, 0x6, 0x63, 0xef, 0xe6, 0x35, 0xe5, 0x8b, 0x86, 0xa8, 0x57, 0x8, 0x30, 0x56, 0x80, 0xb5, 0xde, 0xb1, 0x35, 0x4a, 0x6c, 0xf6, 0xb9, 0x99, 0xa8, 0xd4, 0xd7, 0xa5, 0xfe, 0xbf, 0x3f, 0xc9, 0xb4, 0xb2, 0x9b, 0xf7, 0x1e, 0x42, 0x1e, 0xf1, 0xc, 0x86, 0xcf, 0x88, 0x4c, 0x48, 0x49, 0x60, 0x9a, 0xf3, 0x91, 0xaf, 0x68, 0xba, 0x4e, 0x4, 0xa7, 0xc9, 0x70, 0xde, 0xa, 0x1b, 0x86, 0x20, 0x8f, 0x3e, 0xbf, 0xbb, 0x99, 0xc8, 0x88, 0x4e, 0x95, 0xd9, 0x2f, 0x3a, 0xb6, 0x6d, 0x67, 0xfa, 0xda, 0x68, 0xb1, 0x59, 0x4d, 0xa4, 0x8d, 0xe, 0x71, 0x4e, 0x70, 0x9f, 0xf, 0xff, 0xfe, 0xd7, 0x3f, 0x9d, 0xef, 0xf9, 0x23, 0xcd, 0x4, 0x89, 0x8, 0x4c, 0x65, 0xd8, 0xde, 0x22, 0x30, 0x1, 0xa0, 0x63, 0xd1, 0xa9, 0x84, 0xd3, 0x6b, 0x7d, 0xa9, 0x19, 0x92, 0xb5, 0x74, 0x9b, 0xad, 0x9b, 0x6b, 0x5b, 0x97, 0x42, 0x30, 0xc7, 0xac, 0x7, 0x20, 0x32, 0x21, 0x29, 0x81, 0xf9, 0xa0, 0x9d, 0x80, 0x3a, 0xfe, 0xb4, 0xa6, 0xe9, 0x0, 0xa0, 0x27, 0x6a, 0x2d, 0x30, 0x95, 0xd0, 0xfc, 0x4d, 0x7, 0xb5, 0x4b, 0xe9, 0xae, 0x52, 0x45, 0xa9, 0xed, 0x5e, 0xd3, 0xea, 0x19, 0x43, 0xb5, 0xc1, 0x21, 0xfe, 0x44, 0x37, 0x1, 0x44, 0x26, 0xc4, 0xce, 0xb5, 0xa7, 0xc0, 0xac, 0xb5, 0xb8, 0x24, 0x7b, 0x9, 0x0, 0x43, 0xa3, 0xc4, 0xe5, 0x4a, 0x8b, 0xcd, 0xd7, 0x3a, 0xd8, 0xed, 0x42, 0x70, 0xaa, 0xcc, 0xe6, 0x37, 0x79, 0xaa, 0x5, 0x3c, 0x35, 0x91, 0x49, 0x26, 0x13, 0x10, 0x99, 0x10, 0x35, 0x97, 0xe2, 0xb7, 0xb3, 0x79, 0xab, 0x8d, 0xfb, 0x96, 0x26, 0x3, 0x80, 0x8, 0xc4, 0xd7, 0x55, 0xc7, 0x82, 0x73, 0xf9, 0x78, 0x7d, 0x8d, 0x50, 0xb8, 0x1d, 0x5a, 0x2a, 0x70, 0x44, 0x57, 0x0, 0x44, 0x26, 0xc4, 0x8a, 0x12, 0x97, 0x3e, 0xa7, 0xf8, 0xa8, 0x75, 0x52, 0x27, 0xc2, 0x2e, 0x46, 0x0, 0x88, 0x5f, 0x70, 0x5e, 0xb5, 0xb0, 0x55, 0x33, 0x2d, 0x34, 0xcf, 0x22, 0xba, 0xbf, 0x43, 0xe2, 0xb9, 0xe4, 0xf1, 0x3, 0x22, 0x13, 0x62, 0x44, 0x45, 0xc0, 0xd7, 0x9e, 0x2, 0xf3, 0x3d, 0x2, 0x13, 0x0, 0x26, 0x22, 0x38, 0x55, 0x56, 0x53, 0xad, 0xe1, 0x6c, 0x53, 0x56, 0xed, 0xd2, 0xd3, 0x3e, 0xe, 0x81, 0xcb, 0xf6, 0x16, 0x3c, 0x76, 0x40, 0x64, 0x42, 0x6c, 0x5c, 0x8b, 0x7b, 0xaa, 0x65, 0xab, 0xd, 0x35, 0x0, 0xc0, 0xd4, 0x58, 0xcb, 0xd3, 0xc, 0xcc, 0x49, 0x43, 0xb1, 0xb9, 0x90, 0xa7, 0x8d, 0x41, 0x63, 0x4f, 0x49, 0xbb, 0x96, 0x1, 0x20, 0x32, 0x1, 0x91, 0x9, 0x51, 0x61, 0x9f, 0xf9, 0x7b, 0x28, 0x23, 0xc0, 0x14, 0x39, 0x0, 0x4c, 0x9d, 0xaa, 0x85, 0xd8, 0x2c, 0x23, 0x10, 0x9a, 0xae, 0x82, 0xec, 0xc7, 0x3c, 0x62, 0x40, 0x64, 0x42, 0x4c, 0xb8, 0xce, 0x23, 0x57, 0xc2, 0x92, 0x29, 0x72, 0x0, 0x48, 0x51, 0x6c, 0xbe, 0x97, 0xb0, 0xf2, 0x6b, 0x6a, 0x9d, 0xe6, 0x98, 0x53, 0xe7, 0xae, 0xcf, 0x5a, 0xf2, 0x68, 0x1, 0x91, 0x9, 0xb1, 0xb0, 0x10, 0xf7, 0xf4, 0x8a, 0x2a, 0x13, 0xc2, 0x2e, 0x72, 0x0, 0x48, 0x11, 0xb5, 0xce, 0x3c, 0xf4, 0x20, 0x89, 0xb9, 0x47, 0x70, 0xde, 0x17, 0x2e, 0x5b, 0x4c, 0x19, 0x23, 0x40, 0x64, 0x42, 0x34, 0xb8, 0x6a, 0xc1, 0x55, 0x42, 0x1d, 0x4c, 0x0, 0x48, 0x1b, 0xfb, 0x50, 0x9, 0xdf, 0x19, 0x9b, 0x33, 0xf1, 0x2b, 0xf7, 0xd6, 0x7, 0xd5, 0x81, 0xd7, 0x8e, 0x10, 0x9a, 0x80, 0xc8, 0x84, 0x18, 0x58, 0x88, 0x3b, 0x8b, 0xc9, 0x46, 0x1f, 0x0, 0xc8, 0x5, 0x25, 0xde, 0x42, 0xea, 0xff, 0xfa, 0x6c, 0x98, 0xec, 0x3, 0xd7, 0xe7, 0x2b, 0x79, 0x94, 0x80, 0xc8, 0x84, 0xb1, 0xf9, 0xe8, 0x78, 0x7d, 0x2d, 0x1c, 0x15, 0x9, 0x0, 0x79, 0xa1, 0x6c, 0xde, 0x89, 0xa7, 0xd0, 0x54, 0x2, 0x73, 0x8c, 0x93, 0x81, 0xee, 0x1c, 0xaf, 0xb3, 0xf9, 0x7, 0x10, 0x99, 0x30, 0x2a, 0x33, 0x71, 0x4f, 0xa9, 0xac, 0x68, 0x26, 0x0, 0xc8, 0x90, 0x87, 0x0, 0xa1, 0xa9, 0xa6, 0xcd, 0x8b, 0x81, 0x3f, 0x5f, 0xe5, 0x78, 0xbd, 0xe4, 0x11, 0x2, 0x22, 0x13, 0xc6, 0xe4, 0x83, 0xe3, 0xf5, 0xb5, 0x90, 0xc5, 0x4, 0x0, 0x84, 0xa6, 0xcf, 0x1a, 0xcd, 0x8b, 0x11, 0x3e, 0xdb, 0x21, 0x1, 0x7c, 0x84, 0xd0, 0x4, 0x44, 0x26, 0x8c, 0x89, 0xcb, 0x0, 0x7d, 0xa6, 0x89, 0x0, 0x0, 0xa1, 0xf9, 0x3f, 0xa1, 0xe9, 0x62, 0x21, 0xf1, 0x65, 0x33, 0xdf, 0xf1, 0xf8, 0x0, 0x91, 0x9, 0x63, 0xa0, 0x8c, 0xe1, 0xa1, 0xa9, 0xf2, 0x5a, 0x9a, 0x1f, 0xbf, 0x6, 0x0, 0x90, 0x12, 0x2a, 0x63, 0xb8, 0xf4, 0x78, 0xdf, 0xd0, 0x3b, 0xcd, 0xef, 0x22, 0xfb, 0x3c, 0x80, 0xc8, 0x4, 0xf8, 0x1f, 0xae, 0xb5, 0x98, 0x1b, 0x9a, 0x8, 0x0, 0xe0, 0xff, 0x7c, 0x12, 0xf7, 0xb4, 0xf9, 0x87, 0x81, 0x3f, 0x93, 0xcb, 0x4e, 0x17, 0x42, 0x29, 0x23, 0x44, 0x26, 0x4d, 0x0, 0x23, 0xe0, 0xda, 0x79, 0x78, 0x47, 0x13, 0x1, 0x0, 0xfc, 0x1f, 0x25, 0x30, 0x5d, 0x1b, 0x21, 0x67, 0x32, 0xfc, 0x94, 0xb9, 0x4b, 0x68, 0x7e, 0xe4, 0xd1, 0x21, 0x32, 0x1, 0x86, 0xc6, 0x15, 0xdd, 0x56, 0x34, 0x11, 0x0, 0xc0, 0x4f, 0xac, 0xc5, 0x9d, 0xcd, 0x2c, 0x7, 0xfe, 0x4c, 0x5f, 0x1c, 0xaf, 0x33, 0x65, 0x8e, 0xc8, 0x4, 0x18, 0x9c, 0x43, 0xd1, 0xf6, 0x56, 0x38, 0xa3, 0x1c, 0x0, 0x60, 0x17, 0x65, 0x17, 0x5d, 0x99, 0xc3, 0xa1, 0xeb, 0x53, 0xba, 0x3e, 0x8f, 0xda, 0x65, 0xbe, 0xe0, 0xd1, 0x21, 0x32, 0x1, 0x62, 0x11, 0x99, 0x8, 0x4c, 0x0, 0x80, 0xfd, 0xb8, 0x32, 0x87, 0x43, 0xaf, 0x81, 0x54, 0xf6, 0x7a, 0xed, 0x78, 0xcf, 0x7, 0x1e, 0x1b, 0x22, 0x13, 0x60, 0x28, 0x5c, 0x47, 0xa0, 0x55, 0x34, 0x11, 0x0, 0xc0, 0x5e, 0x5c, 0x99, 0xc3, 0x31, 0x36, 0xda, 0xb8, 0x84, 0x6f, 0x29, 0xc3, 0xaf, 0x15, 0x5, 0x44, 0x26, 0x64, 0xa, 0xbb, 0xd, 0x1, 0x0, 0x9a, 0xe3, 0x3a, 0x5, 0x68, 0xe8, 0xb3, 0xcc, 0x95, 0xf0, 0xad, 0x1d, 0xef, 0xb9, 0xe0, 0xb1, 0x21, 0x32, 0x1, 0x0, 0x0, 0x60, 0xda, 0x22, 0x73, 0x8c, 0x40, 0x7e, 0xed, 0x78, 0x7d, 0x3e, 0x82, 0xf8, 0x5, 0x44, 0x26, 0x0, 0x0, 0x0, 0x4, 0x50, 0x47, 0xf8, 0x99, 0x5c, 0x27, 0xb4, 0x29, 0x81, 0x49, 0x39, 0x23, 0x44, 0x26, 0x0, 0x0, 0x0, 0x44, 0xcc, 0xf7, 0x48, 0x85, 0xef, 0xda, 0xf1, 0x9e, 0x33, 0x21, 0x9b, 0x89, 0xc8, 0x4, 0x0, 0x0, 0x80, 0x68, 0xa9, 0x23, 0xfd, 0x5c, 0x64, 0x33, 0x1, 0x91, 0x9, 0x18, 0x48, 0x0, 0x0, 0xe8, 0x9c, 0x4a, 0xdc, 0xd5, 0x41, 0xc8, 0x66, 0x22, 0x32, 0x1, 0x46, 0x15, 0x99, 0x5, 0x4d, 0x14, 0x1d, 0x25, 0x4d, 0x0, 0x0, 0x1e, 0xb8, 0x8e, 0xbe, 0x54, 0x2, 0x93, 0x9d, 0xe6, 0x88, 0x4c, 0x80, 0xd1, 0x40, 0x64, 0xc6, 0x5, 0x25, 0xa7, 0x0, 0xc0, 0x97, 0x4a, 0xfc, 0xb2, 0x99, 0xd8, 0x79, 0x44, 0x26, 0x40, 0xaf, 0x86, 0x8, 0x51, 0x33, 0xd, 0x4a, 0x9a, 0x0, 0x20, 0x2a, 0x62, 0x9f, 0x6e, 0x5e, 0x79, 0xbc, 0xe7, 0x9a, 0xc7, 0x88, 0xc8, 0x4, 0xe8, 0x8b, 0x7, 0x87, 0x1, 0x65, 0xcd, 0x4e, 0x3c, 0x70, 0x24, 0x1c, 0x40, 0x5c, 0xbc, 0x89, 0xfc, 0xf3, 0x55, 0xe2, 0xce, 0x66, 0xaa, 0xe0, 0x75, 0xce, 0xa3, 0x8c, 0x9a, 0x85, 0x74, 0x90, 0x71, 0x46, 0x64, 0xc2, 0x18, 0xc4, 0x58, 0x4c, 0x18, 0xf6, 0x3f, 0x7, 0x9e, 0x5, 0xc0, 0xb4, 0xa8, 0x22, 0xf8, 0xc, 0xbe, 0xd9, 0x4c, 0x12, 0xa, 0xf1, 0xa, 0x4c, 0xf5, 0x7c, 0xbe, 0xe9, 0xeb, 0x52, 0x1a, 0x16, 0xd4, 0x47, 0x64, 0xc2, 0x18, 0xdc, 0x3b, 0x5e, 0x7f, 0x47, 0x13, 0x45, 0x1, 0xe5, 0x46, 0x0, 0xe2, 0xa3, 0x3c, 0xf0, 0xda, 0x43, 0x44, 0x42, 0x77, 0xed, 0x78, 0xcf, 0x91, 0x30, 0x6d, 0x1e, 0x2b, 0xf6, 0xc, 0x56, 0x21, 0x4f, 0xeb, 0x68, 0x6f, 0x1e, 0xaf, 0x1f, 0x5a, 0x70, 0x22, 0x32, 0x21, 0x6a, 0x5c, 0x99, 0xcc, 0x92, 0x26, 0x1a, 0x9d, 0x99, 0x8e, 0x66, 0x1, 0x20, 0xbe, 0xb1, 0xd9, 0xd4, 0xb6, 0xe, 0xc9, 0xca, 0x43, 0xf4, 0xce, 0x85, 0x69, 0xf3, 0xd8, 0x98, 0x3b, 0x7c, 0xf0, 0x19, 0x22, 0x13, 0x62, 0xa7, 0x96, 0xc3, 0xa5, 0x8c, 0x66, 0xc2, 0xee, 0xc3, 0xb1, 0xb9, 0xa4, 0x9, 0x0, 0xa2, 0x43, 0xd9, 0xc5, 0xa3, 0x89, 0x88, 0xcc, 0x5a, 0x98, 0x36, 0x4f, 0xd1, 0xf6, 0x57, 0x88, 0x4c, 0x98, 0x2, 0xae, 0x8e, 0x4a, 0x74, 0x3b, 0x1e, 0x67, 0x42, 0x36, 0x19, 0x20, 0x46, 0x5c, 0xe3, 0xf2, 0x3e, 0xb2, 0xcf, 0x7b, 0xe5, 0x21, 0x7c, 0x95, 0xc0, 0xbc, 0xe1, 0xd1, 0x46, 0x63, 0xfb, 0xb, 0xc7, 0x7b, 0x3e, 0x21, 0x32, 0x61, 0xa, 0x7c, 0x71, 0xbc, 0xce, 0xae, 0xe6, 0x71, 0x50, 0x6, 0x86, 0x62, 0xc9, 0x0, 0x71, 0xe2, 0x5a, 0xaf, 0x5e, 0x45, 0xf8, 0x99, 0x4f, 0x3d, 0xc5, 0x33, 0x76, 0x27, 0x7e, 0xdb, 0x5f, 0x3f, 0x5e, 0x1b, 0x44, 0x26, 0x4c, 0x1, 0xd5, 0x51, 0xf, 0xad, 0xd7, 0x61, 0x67, 0xf3, 0x38, 0xa8, 0x8c, 0x2, 0x53, 0x57, 0x0, 0xf1, 0xa1, 0xc6, 0xe5, 0xdc, 0x21, 0x0, 0xea, 0x8, 0x3f, 0xb7, 0xca, 0x64, 0x2e, 0x3d, 0xde, 0xb7, 0x14, 0x66, 0xb0, 0xc6, 0xc4, 0x67, 0xd9, 0xc2, 0x2a, 0xf4, 0x8f, 0x22, 0x32, 0x61, 0x6c, 0xa1, 0x79, 0x8, 0x76, 0x37, 0xf, 0xcb, 0x5, 0xc2, 0x1e, 0x20, 0x5a, 0x5c, 0x2, 0xac, 0x8a, 0xf8, 0xb3, 0xaf, 0xc4, 0x6f, 0xbd, 0xe8, 0x35, 0x36, 0x68, 0x14, 0x7c, 0x96, 0x48, 0xa9, 0xfe, 0xb5, 0x46, 0x64, 0xc2, 0x94, 0x70, 0x4d, 0x99, 0x2f, 0x84, 0xd, 0x40, 0x43, 0x3a, 0xb0, 0x25, 0xcd, 0x0, 0x2f, 0x70, 0x24, 0x81, 0xbb, 0x4a, 0xa1, 0x73, 0x5c, 0x41, 0xf7, 0x97, 0xc8, 0x3f, 0xff, 0x7b, 0x71, 0xef, 0x36, 0x37, 0xeb, 0x33, 0x99, 0x4d, 0x19, 0xe, 0x25, 0xea, 0x7d, 0x36, 0x7a, 0xae, 0x9a, 0xfc, 0x71, 0x44, 0x26, 0x8c, 0x89, 0xca, 0x64, 0xd6, 0x8e, 0xf7, 0xb0, 0x4e, 0x67, 0x18, 0x23, 0x43, 0xbd, 0x3a, 0x38, 0xd4, 0x3f, 0xbe, 0x6a, 0x47, 0x44, 0x3f, 0x19, 0x87, 0x52, 0xe, 0x67, 0xf8, 0x6a, 0x9, 0x5c, 0x2b, 0x37, 0x2, 0xea, 0x33, 0x9e, 0x7b, 0xbc, 0xaf, 0x78, 0xbc, 0x6e, 0x11, 0x9a, 0x83, 0x5, 0x8f, 0x3e, 0x9b, 0xae, 0xd6, 0xd2, 0x30, 0x53, 0x8e, 0xc8, 0x84, 0xb1, 0x71, 0xed, 0x54, 0x5b, 0x8, 0xd9, 0xcc, 0x3e, 0xc1, 0xa0, 0x83, 0x4b, 0xdc, 0xdc, 0x5a, 0x63, 0x70, 0x81, 0xd0, 0x1c, 0x5, 0x57, 0xb0, 0xbd, 0x99, 0xc8, 0x7d, 0x28, 0xb1, 0x72, 0xe5, 0x19, 0xd8, 0xb0, 0xe3, 0xbc, 0x7f, 0x6e, 0x3d, 0xfc, 0xeb, 0x83, 0x67, 0x70, 0x80, 0xc8, 0x84, 0x68, 0x8d, 0x8e, 0x6b, 0xa, 0x5, 0xa7, 0xd6, 0x6f, 0x14, 0x8b, 0xc0, 0x84, 0x97, 0x2, 0xbc, 0x7d, 0x1, 0x8, 0x42, 0x73, 0xf8, 0xe7, 0x50, 0xb6, 0xc, 0xd6, 0x63, 0x42, 0x9, 0x16, 0x9f, 0xf5, 0x99, 0x25, 0xfd, 0xac, 0x57, 0x7c, 0xd7, 0xbf, 0x9e, 0x4a, 0x8b, 0x93, 0xa4, 0x10, 0x99, 0x30, 0x36, 0xf, 0x1e, 0x91, 0x6d, 0x29, 0x9c, 0x3e, 0xd3, 0x87, 0xc0, 0xbc, 0xf5, 0x34, 0x32, 0xf, 0x34, 0x57, 0x76, 0x9c, 0x39, 0x1c, 0xfc, 0x4b, 0x2, 0x14, 0xba, 0x1f, 0xa7, 0xae, 0xf5, 0x72, 0x2a, 0x50, 0xaf, 0x27, 0x76, 0x5f, 0x27, 0x9e, 0x9f, 0x99, 0x80, 0xa6, 0x3f, 0x81, 0xe9, 0xe3, 0x53, 0x55, 0xdf, 0x6a, 0x95, 0x25, 0x47, 0x64, 0x42, 0xc, 0x7c, 0xf2, 0x10, 0x32, 0xca, 0xd0, 0x16, 0x34, 0x55, 0x27, 0x28, 0x61, 0xf9, 0xcd, 0x53, 0x60, 0xfa, 0x14, 0x53, 0x86, 0xf4, 0x78, 0xe7, 0xf1, 0x9e, 0x12, 0xa1, 0x39, 0x88, 0x18, 0xe8, 0xbc, 0xac, 0x4c, 0x24, 0xc9, 0x5, 0x9f, 0x8d, 0x40, 0xb6, 0xd0, 0xa4, 0x9f, 0xd, 0x2b, 0x30, 0x95, 0xdd, 0x3f, 0x6f, 0xfb, 0x9f, 0x21, 0x32, 0x21, 0x16, 0x83, 0xe3, 0x32, 0x94, 0x9c, 0xa, 0xd1, 0xd, 0x21, 0xc2, 0x60, 0xdd, 0x85, 0x91, 0x81, 0x49, 0xe2, 0xbb, 0x53, 0x39, 0x24, 0x60, 0x81, 0x30, 0x94, 0x10, 0x98, 0x7b, 0x8c, 0xd1, 0x7a, 0xa2, 0xf7, 0xb7, 0xd5, 0x42, 0xd3, 0xb7, 0x2d, 0x8, 0x68, 0x86, 0x13, 0x98, 0xca, 0x27, 0xb7, 0x9a, 0x26, 0x47, 0x64, 0x42, 0x6c, 0xf8, 0x64, 0xcc, 0x7c, 0x4b, 0x2d, 0x40, 0x7b, 0x43, 0xbd, 0x16, 0xbf, 0x93, 0x3a, 0x20, 0xdd, 0xf1, 0xb8, 0xf6, 0x7c, 0xaf, 0x59, 0x7a, 0xb1, 0xa0, 0xd9, 0x3a, 0xc3, 0xa7, 0xe2, 0x83, 0x4f, 0x70, 0x1e, 0x3b, 0x55, 0x80, 0x9d, 0x99, 0x89, 0xdf, 0x46, 0x15, 0xd8, 0x3f, 0x46, 0xaf, 0x3, 0xc6, 0xe8, 0x7b, 0xe9, 0x68, 0x6, 0xb, 0x91, 0x9, 0x31, 0xe1, 0x93, 0x35, 0x3b, 0xc3, 0x99, 0x35, 0x36, 0x30, 0xbe, 0x6b, 0x9b, 0x10, 0x98, 0x20, 0xba, 0xf, 0xac, 0x3, 0xfb, 0x18, 0x41, 0x60, 0x37, 0x2, 0xf3, 0xd6, 0xe3, 0x7d, 0x4a, 0x60, 0xd6, 0x9, 0xdc, 0x6f, 0x88, 0xbd, 0x31, 0xe5, 0xb4, 0xc8, 0x9c, 0x87, 0xd9, 0xff, 0x90, 0x20, 0xf0, 0x54, 0x3a, 0x2c, 0xec, 0x8f, 0xc8, 0x84, 0xd8, 0xa2, 0x5a, 0x9f, 0xf2, 0x16, 0x21, 0x11, 0x19, 0xe, 0xeb, 0xc9, 0x28, 0xfb, 0xb6, 0x17, 0x2, 0x13, 0x9a, 0xa, 0x4d, 0x13, 0x4, 0xaa, 0xfe, 0x56, 0xd0, 0x74, 0xad, 0x4, 0xa6, 0x6b, 0xb6, 0x61, 0xeb, 0x69, 0x2b, 0x53, 0x14, 0x9a, 0x47, 0x81, 0x36, 0xd, 0xfb, 0xef, 0x2f, 0xca, 0x43, 0xc7, 0x3b, 0x22, 0x13, 0x26, 0x87, 0x6f, 0x79, 0xb, 0x84, 0xa6, 0x9b, 0x8b, 0x40, 0x87, 0x7f, 0x85, 0xc0, 0x84, 0xe, 0x1c, 0x8f, 0x71, 0x6c, 0x9c, 0x10, 0xd4, 0x8f, 0xc0, 0x34, 0x9b, 0x66, 0x52, 0x23, 0x34, 0xc0, 0x35, 0xb3, 0x33, 0xac, 0xd3, 0xec, 0x26, 0xe0, 0xeb, 0x5c, 0x60, 0x22, 0x32, 0x21, 0x66, 0xa7, 0xe6, 0xb3, 0xe0, 0x18, 0xa1, 0xb9, 0x9f, 0x52, 0x9e, 0x36, 0x63, 0x2c, 0x3, 0xdb, 0x9c, 0x4d, 0x3e, 0xd0, 0x55, 0xff, 0x30, 0xa5, 0x77, 0x6e, 0x84, 0xac, 0xa6, 0xf, 0x73, 0xf1, 0x5f, 0x2f, 0xad, 0x9e, 0x45, 0x9d, 0x68, 0x3b, 0x84, 0xa, 0xcd, 0x85, 0x16, 0x52, 0x25, 0x5d, 0xe8, 0xa7, 0xb1, 0x77, 0x23, 0x61, 0x4b, 0x57, 0x7a, 0x11, 0x98, 0x88, 0x4c, 0x88, 0x95, 0x6d, 0x80, 0xa1, 0xb9, 0x16, 0x32, 0x26, 0x86, 0x42, 0x1b, 0x97, 0x90, 0xc5, 0xf1, 0x4a, 0xcc, 0x9f, 0xf4, 0x65, 0x60, 0x20, 0x29, 0x9a, 0x64, 0xba, 0xe7, 0x42, 0x56, 0xd3, 0xc5, 0x85, 0xf8, 0x1f, 0x8a, 0xa0, 0x2, 0xc7, 0x4d, 0xe2, 0xed, 0xb1, 0xd6, 0x36, 0xc9, 0x77, 0x67, 0x73, 0xa1, 0x6d, 0xde, 0x85, 0x90, 0xd5, 0x5c, 0xe8, 0x4, 0xc3, 0x3c, 0xe0, 0x77, 0x7a, 0x13, 0x98, 0x88, 0x4c, 0x88, 0x19, 0x65, 0x48, 0x7d, 0x33, 0x27, 0xe6, 0x4c, 0xe5, 0x5c, 0xd, 0x8c, 0xc9, 0x1a, 0x85, 0x1a, 0x17, 0x25, 0xe6, 0xdf, 0x4a, 0x87, 0x8b, 0xbc, 0x21, 0x79, 0xd6, 0xba, 0xcf, 0x3c, 0x34, 0xe8, 0x9f, 0x64, 0x9c, 0xf6, 0x8b, 0xa3, 0x65, 0x40, 0xdb, 0xaf, 0x32, 0x69, 0x9b, 0x2a, 0x50, 0x68, 0x1a, 0x1, 0x9e, 0x6b, 0x1f, 0x33, 0x7d, 0x29, 0xc4, 0xf, 0x3e, 0xf4, 0x2d, 0x30, 0x11, 0x99, 0x10, 0x3b, 0x21, 0x65, 0x54, 0x16, 0xe2, 0x7f, 0x82, 0x4d, 0x4a, 0xe2, 0xf2, 0x42, 0x8b, 0xcb, 0xd0, 0x4c, 0x91, 0xc9, 0x16, 0xd4, 0x74, 0x33, 0x8, 0xc4, 0x4, 0x27, 0xa1, 0x25, 0x4e, 0x66, 0x96, 0x23, 0x2c, 0x32, 0x6f, 0xc3, 0x8b, 0x40, 0x41, 0xb4, 0x96, 0xfc, 0xd6, 0x4b, 0xab, 0xfe, 0xf5, 0x3a, 0xb0, 0x9f, 0x19, 0xb1, 0x95, 0xcb, 0x32, 0xd, 0x3b, 0xc1, 0x10, 0x22, 0xae, 0x7, 0x9b, 0xc1, 0x42, 0x64, 0x42, 0xec, 0x84, 0x44, 0x5a, 0x66, 0xc3, 0xc1, 0x45, 0x6, 0x51, 0xab, 0x72, 0xd4, 0x3f, 0x74, 0xf4, 0x1e, 0x92, 0xc1, 0x35, 0x9b, 0x6, 0x3a, 0x29, 0xb4, 0xb, 0xd9, 0x52, 0xb7, 0x70, 0x52, 0xb, 0xed, 0x14, 0x73, 0x14, 0x9b, 0x73, 0x79, 0x5e, 0x2f, 0xed, 0x3b, 0x6e, 0x73, 0x14, 0x98, 0xb6, 0xbd, 0x7a, 0xdb, 0xa0, 0x9f, 0x99, 0x76, 0xbe, 0x94, 0x34, 0x67, 0xb8, 0xda, 0x24, 0x18, 0xaa, 0x6, 0xe2, 0x1d, 0x91, 0x9, 0x8, 0x4d, 0x8b, 0xa5, 0xa4, 0x39, 0x6d, 0xb2, 0xd0, 0x51, 0xfa, 0x37, 0x69, 0xb6, 0xe1, 0x69, 0xa3, 0x8d, 0x4b, 0xe8, 0x9a, 0x2e, 0x97, 0x18, 0x65, 0x77, 0x67, 0xbe, 0x2, 0xe0, 0xb4, 0x45, 0xc0, 0x62, 0x8b, 0xcd, 0xd4, 0x67, 0x20, 0x4a, 0x69, 0x96, 0x61, 0xcb, 0x59, 0x60, 0xee, 0xfa, 0x80, 0x26, 0xfd, 0xec, 0x4c, 0xf7, 0xb1, 0x8b, 0x44, 0x2, 0x1a, 0x5b, 0x5c, 0x86, 0x26, 0x18, 0x8c, 0x6f, 0x3c, 0x91, 0x1, 0x13, 0xc, 0x88, 0x4c, 0x48, 0x55, 0x68, 0xce, 0x24, 0x8d, 0x69, 0x13, 0x73, 0xf2, 0xc7, 0xf, 0xfd, 0xb5, 0x89, 0x70, 0x36, 0xd9, 0x4b, 0xdf, 0xb3, 0x82, 0x77, 0x71, 0x45, 0xbc, 0x73, 0xba, 0x67, 0xd6, 0xa8, 0x71, 0xd9, 0x66, 0x6d, 0xef, 0x42, 0x7, 0x85, 0xa9, 0x9d, 0x1a, 0x74, 0x64, 0x9, 0xe9, 0xdb, 0x6, 0x63, 0xf7, 0x1c, 0x81, 0xf9, 0x4b, 0x3f, 0x3b, 0x91, 0xf0, 0xc, 0xdc, 0x91, 0x16, 0x57, 0x53, 0xe, 0x68, 0x6c, 0x3f, 0xd0, 0x44, 0x5c, 0xd6, 0xba, 0xed, 0x6, 0x5f, 0xd3, 0x8b, 0xc8, 0x84, 0x29, 0x46, 0xb3, 0x21, 0x98, 0x69, 0x93, 0x1b, 0x99, 0x4e, 0x66, 0x53, 0x7d, 0x4e, 0xb3, 0xce, 0xc6, 0x14, 0x1d, 0x6e, 0x9a, 0x2d, 0x54, 0xeb, 0x5a, 0x9b, 0x64, 0x2f, 0x6d, 0xee, 0x1d, 0xaf, 0xb3, 0xab, 0x13, 0x8c, 0x13, 0x3b, 0x97, 0xe6, 0x59, 0x92, 0x72, 0x27, 0xa0, 0x9a, 0x6a, 0x76, 0x73, 0xae, 0x3f, 0x7f, 0xd3, 0x25, 0x1, 0x66, 0xbd, 0xdc, 0x15, 0xdd, 0x6a, 0x6f, 0xc0, 0xfb, 0x56, 0xc2, 0xca, 0xb3, 0xed, 0xb, 0x68, 0xda, 0xda, 0xd5, 0xa1, 0x82, 0x94, 0xb3, 0x9d, 0xcf, 0xdb, 0xd4, 0x7, 0x8c, 0xb6, 0xc1, 0x13, 0x91, 0x9, 0x53, 0x8d, 0x66, 0x43, 0x1d, 0x99, 0xa9, 0x43, 0x67, 0xca, 0xa9, 0xc4, 0x64, 0x5c, 0x66, 0xfa, 0x33, 0xdd, 0x68, 0x7, 0x7b, 0xab, 0x7f, 0x2e, 0x5a, 0xfc, 0xcd, 0x4a, 0x8b, 0xcb, 0x36, 0x4e, 0xdf, 0xfe, 0x5b, 0x87, 0x28, 0x2c, 0x87, 0x4a, 0x56, 0x33, 0x6f, 0x8c, 0x43, 0x6b, 0x13, 0xd4, 0x1c, 0x59, 0x62, 0xc0, 0xee, 0x57, 0xb1, 0xa, 0x82, 0x23, 0x4b, 0x58, 0xfe, 0xd0, 0xe3, 0xb8, 0xa9, 0x80, 0x31, 0xe3, 0xb6, 0xa2, 0x2b, 0x1d, 0x64, 0x25, 0xcd, 0x36, 0x9f, 0xd9, 0x36, 0xb7, 0x8b, 0xe7, 0xd5, 0x35, 0xc5, 0x8e, 0x2f, 0xb8, 0x6c, 0x11, 0x6c, 0x6d, 0x3b, 0x8, 0xfc, 0x5a, 0xf3, 0x8a, 0xbe, 0xa, 0x13, 0xc4, 0x18, 0xe2, 0x26, 0xd9, 0xc9, 0x99, 0xbe, 0x2e, 0xb5, 0x23, 0xbc, 0xd3, 0x5f, 0xeb, 0x1, 0x1d, 0x92, 0xfa, 0xff, 0x8f, 0xf5, 0xd7, 0xb2, 0x63, 0xe3, 0x56, 0x69, 0x3, 0xdc, 0xa5, 0x93, 0x7a, 0xd0, 0x6d, 0x34, 0xf7, 0x10, 0x6, 0x8b, 0x96, 0xc6, 0x1f, 0xa6, 0x8f, 0x1a, 0x4b, 0xef, 0xe5, 0x39, 0x23, 0xdf, 0x26, 0x23, 0x59, 0x58, 0xfd, 0xca, 0xf4, 0x6f, 0x75, 0xdd, 0xeb, 0x3e, 0x56, 0x8f, 0x70, 0x7f, 0x85, 0x35, 0x86, 0x4b, 0xe9, 0x26, 0xe3, 0xfa, 0xa0, 0xc7, 0x2d, 0xd9, 0xcb, 0x30, 0x11, 0xf5, 0x56, 0x8b, 0xb2, 0x36, 0xb3, 0x29, 0x73, 0x2b, 0x48, 0x30, 0xfd, 0xeb, 0x6e, 0x20, 0xa1, 0x9f, 0x7c, 0x5f, 0x42, 0x64, 0xc2, 0x54, 0x31, 0x53, 0x4a, 0xca, 0xb8, 0x2c, 0x5b, 0x1a, 0x97, 0x4b, 0xed, 0xac, 0xb6, 0xfa, 0xba, 0xd3, 0x3f, 0xd7, 0x2d, 0xc, 0x47, 0xa1, 0x8d, 0xde, 0x1b, 0xeb, 0xe7, 0x59, 0x8f, 0xd1, 0x72, 0x1f, 0xe2, 0xd2, 0xe6, 0x93, 0xf8, 0x67, 0x29, 0x99, 0x3a, 0x7, 0xd3, 0x27, 0xdf, 0x6a, 0x81, 0xd8, 0xd5, 0xc6, 0x8b, 0x72, 0x27, 0xb0, 0x7c, 0xb0, 0xc6, 0xed, 0x77, 0x2b, 0xb8, 0x69, 0x3b, 0xe, 0x8e, 0x2c, 0x87, 0x7f, 0x6c, 0xfd, 0xdc, 0xc7, 0x18, 0x5e, 0xcb, 0xc8, 0xd9, 0xa6, 0x89, 0x63, 0x4a, 0xdd, 0x5d, 0x48, 0xfb, 0xa2, 0xff, 0xbb, 0xfd, 0x6b, 0x6b, 0x5, 0x33, 0x77, 0x56, 0x7f, 0x6b, 0xda, 0x9f, 0xd4, 0x18, 0xf8, 0x5d, 0xff, 0x1f, 0x85, 0x74, 0xbf, 0x5f, 0x60, 0xa9, 0x6d, 0x75, 0x34, 0x7d, 0x9, 0x91, 0x9, 0x53, 0x47, 0x9, 0xab, 0xcf, 0xd2, 0x7c, 0x53, 0xcc, 0xae, 0x30, 0x9c, 0xef, 0x11, 0xb3, 0xdb, 0x80, 0xdf, 0x1f, 0x9a, 0x8d, 0x36, 0x2a, 0x7d, 0x47, 0xdd, 0x26, 0xc2, 0x2f, 0xe9, 0x72, 0xd0, 0x40, 0x44, 0xad, 0x3b, 0x16, 0x9b, 0xb6, 0xf3, 0x2e, 0x1d, 0xfd, 0xb2, 0xa, 0xf8, 0x5b, 0x43, 0xae, 0x3, 0xed, 0x3b, 0x30, 0xcc, 0x2d, 0xe9, 0x70, 0xae, 0x6d, 0xe1, 0x85, 0x74, 0xb7, 0x81, 0x6c, 0x76, 0xa0, 0x4f, 0x6c, 0x3d, 0xc4, 0x5c, 0x9f, 0x89, 0x85, 0xdd, 0x31, 0xb6, 0x92, 0x8, 0xeb, 0x1e, 0x23, 0x32, 0x21, 0x5, 0xd4, 0xc0, 0x3a, 0x91, 0xe7, 0xac, 0x64, 0x1f, 0x4e, 0x2c, 0x36, 0x83, 0xba, 0xd6, 0x6, 0x75, 0x48, 0xa3, 0xa2, 0xa6, 0x40, 0xbf, 0x9, 0x99, 0x4a, 0x68, 0x2f, 0x36, 0x3f, 0xc, 0x38, 0xae, 0x62, 0x1b, 0xbf, 0x88, 0xcb, 0x7e, 0x7d, 0xc1, 0xa9, 0x6e, 0xdf, 0x2e, 0xc5, 0xe6, 0x4b, 0x2, 0x72, 0x6c, 0x3f, 0xa0, 0xb2, 0xb8, 0x9f, 0x25, 0xe2, 0x43, 0x35, 0xd8, 0xf8, 0x3, 0x29, 0x61, 0xea, 0x40, 0x9e, 0x4a, 0x9a, 0x27, 0xd9, 0x6c, 0xb4, 0xd0, 0xfb, 0x4d, 0x47, 0xed, 0x43, 0xdf, 0xa3, 0x59, 0xa2, 0xc0, 0xb4, 0x1e, 0xb4, 0x15, 0x9b, 0xaa, 0x1f, 0x99, 0x22, 0xdb, 0xf, 0x19, 0xdd, 0xf7, 0x5b, 0x7d, 0xef, 0x8, 0xcc, 0x61, 0xc4, 0xa6, 0xf2, 0x7, 0xcb, 0xc4, 0xfa, 0xd8, 0xd6, 0xba, 0xb7, 0x28, 0xb3, 0x97, 0x88, 0x4c, 0xc8, 0xc1, 0x98, 0xa7, 0x22, 0x36, 0x37, 0xfa, 0x3e, 0x7e, 0xd3, 0x2, 0x73, 0x33, 0xf2, 0xe7, 0x31, 0x3b, 0x16, 0xd9, 0xd8, 0x3, 0x5d, 0x39, 0xcb, 0xdf, 0xf4, 0xd7, 0x4d, 0xa2, 0xf7, 0x78, 0x6e, 0xdd, 0x23, 0xe3, 0x66, 0x78, 0xb1, 0xb9, 0xb2, 0xda, 0x7f, 0xaa, 0xe2, 0xfe, 0xc1, 0xa, 0x52, 0x26, 0x15, 0x9c, 0xfd, 0xd1, 0xd1, 0xe9, 0x19, 0x10, 0x90, 0x82, 0xd8, 0x1c, 0xe4, 0x8c, 0xd6, 0xe, 0x8d, 0xe2, 0x5a, 0x9e, 0x33, 0x96, 0xef, 0x23, 0x34, 0x28, 0x66, 0x57, 0xe7, 0x3e, 0x11, 0xff, 0x10, 0xb1, 0xb0, 0xff, 0x72, 0xa0, 0x1d, 0xb7, 0xd8, 0xbb, 0xd1, 0xc7, 0xea, 0x7b, 0x4b, 0xc, 0x4c, 0xc6, 0x89, 0x1e, 0x10, 0x96, 0xaf, 0xf5, 0x38, 0xb9, 0x12, 0xb2, 0xff, 0xb1, 0xf4, 0xb1, 0x13, 0x79, 0x2e, 0xed, 0x16, 0xfb, 0x78, 0x7f, 0xd8, 0x33, 0x2e, 0x26, 0x67, 0xa3, 0xfe, 0xf0, 0xe7, 0xbf, 0xfe, 0x5d, 0x7d, 0x2d, 0x5f, 0x78, 0xbd, 0xa2, 0x5f, 0x42, 0x42, 0x98, 0x7a, 0x76, 0xef, 0xa4, 0xfb, 0xd2, 0x41, 0x6d, 0x44, 0xa5, 0x1a, 0x67, 0xa6, 0x64, 0x46, 0x3d, 0xc1, 0x76, 0x2d, 0xe4, 0x79, 0x1d, 0x6c, 0x1d, 0xf9, 0x3d, 0xd8, 0x9f, 0x75, 0x57, 0x18, 0x20, 0x4, 0xe2, 0x63, 0x66, 0x8d, 0xd7, 0x99, 0xc4, 0xb9, 0x1e, 0xd8, 0x1e, 0xc3, 0x1b, 0xfa, 0xd1, 0xe4, 0x6c, 0x57, 0x19, 0x91, 0x4f, 0xa8, 0xf4, 0xf5, 0x65, 0xa, 0x82, 0xf2, 0xdf, 0xff, 0xfa, 0xa7, 0xb7, 0xc8, 0x4, 0xc8, 0x11, 0x65, 0x54, 0x8e, 0x7, 0x74, 0x60, 0x95, 0x25, 0xc2, 0xee, 0x10, 0x36, 0x0, 0x8d, 0x44, 0xa7, 0xba, 0xfa, 0x2c, 0x3, 0x73, 0x8, 0x53, 0xce, 0x66, 0xcb, 0x18, 0x4e, 0xb6, 0x7f, 0xa9, 0x7e, 0xf5, 0x46, 0xe, 0xef, 0x2c, 0xef, 0xb2, 0x2f, 0x99, 0x7e, 0x54, 0x4d, 0xad, 0xb1, 0x7c, 0x44, 0x26, 0xbb, 0xcb, 0x21, 0x67, 0x4c, 0xd4, 0xb8, 0xb2, 0xa2, 0xda, 0x42, 0xb, 0x4f, 0x23, 0x42, 0x65, 0xe7, 0x35, 0x9b, 0x7d, 0xe5, 0x8d, 0x6c, 0xa7, 0x73, 0xb7, 0xe7, 0xdf, 0x0, 0xa0, 0x9d, 0x63, 0x36, 0x63, 0x6e, 0xb5, 0x13, 0x30, 0x8a, 0x35, 0x76, 0xf7, 0x95, 0x23, 0x7a, 0x29, 0x90, 0x34, 0x81, 0xdf, 0xae, 0x6d, 0x50, 0x7c, 0xb7, 0x5e, 0xaf, 0x69, 0xfe, 0xac, 0xfa, 0xd7, 0x6e, 0xbf, 0x39, 0x7e, 0xa1, 0x1f, 0x95, 0xe, 0xbf, 0x60, 0xff, 0xdc, 0xa6, 0xd6, 0xe6, 0x24, 0xf9, 0xaf, 0x0, 0x3, 0x0, 0x58, 0xbf, 0x46, 0x22, 0x7, 0x65, 0x51, 0xc8, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; + + + + + (NSData *)parse_logo3x_png { + return [NSData dataWithBytes:parse_logo3x_png length:sizeof(parse_logo3x_png)]; + } + + const unsigned char twitter_icon_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x16, 0x0, 0x0, 0x0, 0x12, 0x8, 0x6, 0x0, 0x0, 0x0, 0x5f, 0x25, 0x2e, 0x2d, 0x0, 0x0, 0x0, 0x1, 0x73, 0x52, 0x47, 0x42, 0x0, 0xae, 0xce, 0x1c, 0xe9, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0x2e, 0x23, 0x0, 0x0, 0x2e, 0x23, 0x1, 0x78, 0xa5, 0x3f, 0x76, 0x0, 0x0, 0x1, 0xcb, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0xa, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0xa, 0x29, 0x2e, 0xcd, 0x3d, 0x0, 0x0, 0x2, 0x34, 0x49, 0x44, 0x41, 0x54, 0x38, 0x11, 0x8d, 0x93, 0xbd, 0x6b, 0x54, 0x41, 0x14, 0x47, 0xdf, 0x6e, 0x36, 0x51, 0x8b, 0xa0, 0x9d, 0x44, 0x8b, 0x10, 0xb4, 0x10, 0xac, 0x4, 0xb1, 0x52, 0x50, 0x10, 0x8b, 0x80, 0x76, 0x36, 0x16, 0xfe, 0x7, 0xda, 0x5a, 0x58, 0x8b, 0xad, 0x88, 0x20, 0x16, 0x82, 0x36, 0x36, 0x12, 0x10, 0x24, 0xda, 0x89, 0x48, 0x10, 0x92, 0x42, 0xc1, 0x2e, 0x5a, 0xaa, 0x85, 0x22, 0x2a, 0x4a, 0xd4, 0xe8, 0xee, 0xbe, 0x9c, 0x33, 0x6f, 0xee, 0x63, 0xb2, 0x1b, 0xd4, 0xb, 0xe7, 0xdd, 0x3b, 0x77, 0x66, 0x7e, 0xef, 0xce, 0x57, 0x55, 0x61, 0x75, 0x5d, 0x77, 0xb3, 0x9f, 0xd0, 0x6f, 0x65, 0x8c, 0x49, 0x7d, 0xf8, 0x39, 0xb8, 0xb, 0xef, 0xe0, 0x3b, 0x2c, 0xc3, 0xf9, 0x98, 0x43, 0x7c, 0x6, 0xe, 0xa4, 0x36, 0xc1, 0x7d, 0x38, 0x6e, 0x3, 0x3f, 0x5, 0xe9, 0x47, 0xa9, 0xb3, 0xc9, 0x85, 0xe8, 0x41, 0xfa, 0xbe, 0xc0, 0x56, 0xf6, 0x80, 0xe4, 0x4b, 0x58, 0x84, 0x6d, 0xa, 0xed, 0x86, 0x3e, 0xfc, 0x84, 0x13, 0x85, 0xd8, 0x24, 0xed, 0x2e, 0x74, 0x8a, 0xdc, 0x12, 0x6d, 0x6d, 0xd, 0xfa, 0x43, 0xc, 0xff, 0x1b, 0xfe, 0x80, 0xe6, 0xa, 0xae, 0xc2, 0x39, 0x85, 0x67, 0x21, 0x55, 0xd1, 0x8c, 0xab, 0x2f, 0xd3, 0xee, 0x15, 0x62, 0x29, 0x26, 0x77, 0x18, 0x14, 0x1a, 0x64, 0x41, 0xe3, 0x1c, 0xa6, 0xfc, 0x2f, 0xda, 0xda, 0x2b, 0x98, 0x4b, 0xf3, 0x9, 0x56, 0xcd, 0x60, 0x56, 0xae, 0xbd, 0x81, 0x8b, 0xb0, 0xb7, 0xf8, 0xc1, 0x31, 0x3b, 0xb0, 0x41, 0x26, 0x9, 0x13, 0xeb, 0xa3, 0x62, 0x75, 0xb6, 0xc7, 0x1c, 0xab, 0x3e, 0xb, 0x9a, 0x3, 0x5c, 0x5a, 0xd8, 0x57, 0x82, 0x27, 0x70, 0x5, 0x6e, 0xe4, 0x64, 0x2b, 0x98, 0x57, 0x68, 0x3a, 0xe6, 0x3c, 0x56, 0x94, 0x76, 0xaf, 0xc7, 0xc7, 0xaa, 0x76, 0xc0, 0x23, 0x98, 0x87, 0x1, 0xf4, 0xa1, 0x86, 0x9d, 0xe0, 0xbe, 0xa7, 0xbd, 0x57, 0xa1, 0xd3, 0x69, 0xb7, 0xbc, 0x22, 0x76, 0x4c, 0x69, 0x6b, 0xb9, 0x31, 0x74, 0xff, 0xd6, 0xe1, 0x16, 0x78, 0x13, 0xdc, 0x8a, 0x5e, 0x31, 0x61, 0x48, 0xce, 0x1f, 0x69, 0x5d, 0xf2, 0x9b, 0x6e, 0x8b, 0xc9, 0xe6, 0x5f, 0xed, 0xf, 0x56, 0xcd, 0x61, 0x13, 0xe, 0xfe, 0x44, 0x70, 0x1b, 0xa6, 0x60, 0x58, 0x88, 0xd2, 0xac, 0x3a, 0x4c, 0x9c, 0xc4, 0x5b, 0xc0, 0x98, 0x68, 0x1a, 0xd0, 0x54, 0x1d, 0x7d, 0xcb, 0xe6, 0xb0, 0x66, 0x25, 0x4c, 0x9e, 0x86, 0xa7, 0x10, 0xe6, 0x1, 0xb5, 0x7b, 0xf9, 0x8f, 0x38, 0xe, 0xfc, 0x3d, 0xe3, 0x76, 0x25, 0x55, 0xdf, 0x1, 0x8d, 0xb8, 0xfc, 0x33, 0xc4, 0x37, 0xc1, 0x3b, 0xaa, 0xfd, 0xaf, 0xf8, 0x7a, 0x33, 0xbc, 0xbe, 0x96, 0x45, 0x9b, 0xd7, 0x4b, 0x32, 0x84, 0x4f, 0x12, 0x7f, 0x0, 0x85, 0xbd, 0x1d, 0x9b, 0x84, 0xf3, 0xd, 0x18, 0x5d, 0x45, 0x54, 0xfb, 0x8d, 0xf1, 0xb3, 0x6d, 0xb5, 0x6, 0x1a, 0xc9, 0x74, 0xd4, 0xf8, 0x3b, 0xd0, 0x5a, 0xf9, 0x10, 0x48, 0x8e, 0x8a, 0xda, 0x8e, 0x6a, 0x2f, 0x64, 0x9d, 0xf6, 0x61, 0x25, 0x51, 0x6, 0xb4, 0x9, 0xe2, 0x4b, 0xf0, 0x2, 0x3e, 0x43, 0x3c, 0xad, 0x52, 0xd4, 0xb4, 0xab, 0x89, 0x97, 0xb6, 0x90, 0xaa, 0x2b, 0xa, 0x8c, 0xf6, 0x98, 0x67, 0x92, 0xcf, 0xf7, 0x35, 0x68, 0xb1, 0x5c, 0xc5, 0x15, 0xf4, 0x31, 0x44, 0xee, 0x21, 0x71, 0x6c, 0x65, 0xdc, 0x8c, 0x46, 0x8f, 0x8e, 0x3d, 0xb0, 0xf, 0xf6, 0xc3, 0x69, 0xb8, 0x7, 0x3f, 0x40, 0x73, 0xaf, 0x15, 0x51, 0x4c, 0x14, 0xf, 0xbb, 0x1e, 0x15, 0x91, 0x68, 0xe, 0x2c, 0x12, 0x7a, 0x92, 0x87, 0x60, 0x1, 0xa2, 0xa, 0xc2, 0xbf, 0xda, 0x33, 0x7a, 0x4f, 0x85, 0x6, 0xf1, 0xb8, 0x28, 0x9d, 0x71, 0x68, 0xfa, 0xa3, 0xe0, 0x84, 0x23, 0xe0, 0x9, 0xcf, 0x80, 0xaf, 0xee, 0x23, 0xbc, 0x85, 0x15, 0x58, 0xe4, 0x1, 0x3d, 0xc7, 0x5b, 0x90, 0x4b, 0xf7, 0x89, 0x8f, 0x3e, 0x6b, 0xbb, 0xab, 0xd, 0x23, 0x5c, 0xa6, 0xb2, 0xce, 0x6d, 0xd4, 0xea, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; + + + + + (NSData *)twitter_icon_png { + return [NSData dataWithBytes:twitter_icon_png length:sizeof(twitter_icon_png)]; + } + + const unsigned char twitter_icon2x_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x2c, 0x0, 0x0, 0x0, 0x24, 0x8, 0x6, 0x0, 0x0, 0x0, 0xf2, 0xd7, 0xd8, 0x6c, 0x0, 0x0, 0x0, 0x1, 0x73, 0x52, 0x47, 0x42, 0x0, 0xae, 0xce, 0x1c, 0xe9, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0x2e, 0x23, 0x0, 0x0, 0x2e, 0x23, 0x1, 0x78, 0xa5, 0x3f, 0x76, 0x0, 0x0, 0x1, 0xcb, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0xa, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0xa, 0x29, 0x2e, 0xcd, 0x3d, 0x0, 0x0, 0x5, 0xbd, 0x49, 0x44, 0x41, 0x54, 0x58, 0x9, 0xc5, 0x98, 0x5b, 0xa8, 0x95, 0x45, 0x14, 0xc7, 0xdd, 0x9e, 0xa3, 0x42, 0x56, 0x50, 0x91, 0x5, 0x86, 0x9c, 0xae, 0x44, 0x50, 0x68, 0x46, 0xd1, 0x85, 0x12, 0x7a, 0x28, 0x22, 0x88, 0xa0, 0x22, 0x2, 0xe9, 0x25, 0x90, 0x82, 0xea, 0x21, 0xe8, 0xf6, 0x90, 0xd1, 0x4b, 0x29, 0xbd, 0x56, 0x4, 0x81, 0x51, 0x50, 0xd4, 0x93, 0x2f, 0x85, 0x74, 0x21, 0x3a, 0xa6, 0x60, 0x54, 0x90, 0x12, 0x89, 0x91, 0xfa, 0x90, 0x5d, 0xf5, 0xa1, 0x9b, 0x78, 0x3d, 0xbb, 0xdf, 0x6f, 0xed, 0x59, 0xdf, 0xf9, 0xbe, 0x7d, 0xf6, 0xf6, 0xec, 0xbd, 0xf, 0xda, 0x82, 0xff, 0x59, 0x6b, 0xd6, 0xcc, 0xac, 0xf9, 0xcf, 0xcc, 0x9a, 0xd9, 0xf3, 0x9d, 0x79, 0xf3, 0x90, 0x76, 0xbb, 0xdd, 0x52, 0x2b, 0xd8, 0xf3, 0x3b, 0xd6, 0xdc, 0xff, 0xd6, 0x63, 0x61, 0x4f, 0x80, 0xe7, 0xc1, 0x24, 0xf8, 0x19, 0x1c, 0x7, 0x3f, 0x81, 0xcf, 0xc0, 0x33, 0xe0, 0x82, 0x1c, 0x11, 0x7b, 0x1, 0x18, 0xcf, 0xb2, 0x9a, 0xf2, 0x32, 0xd0, 0xd2, 0x8, 0xb2, 0xe8, 0xd3, 0xc0, 0xe9, 0xa5, 0x72, 0xac, 0xde, 0x78, 0x14, 0x9b, 0x58, 0x55, 0xc, 0x6c, 0x89, 0x1e, 0x4, 0x75, 0x99, 0xaa, 0x17, 0xb0, 0xff, 0x6, 0x4f, 0x74, 0x8f, 0x85, 0x6f, 0x5, 0xf8, 0x10, 0x3c, 0x1b, 0x75, 0x18, 0x31, 0x13, 0xf4, 0x23, 0x60, 0x5b, 0x76, 0x48, 0x7f, 0x96, 0x87, 0xd1, 0xf4, 0x8d, 0x5d, 0x42, 0xb7, 0xc0, 0x46, 0x90, 0x72, 0x4, 0x43, 0x1c, 0x3, 0x12, 0x56, 0xa7, 0xf, 0x33, 0xe4, 0x2d, 0xfe, 0xde, 0x8, 0xd6, 0x82, 0xcd, 0x40, 0x39, 0x4, 0xce, 0x4b, 0xc2, 0xb9, 0xc2, 0x9b, 0xa2, 0xaa, 0xdd, 0x7e, 0x27, 0xc9, 0x51, 0x6e, 0x6c, 0x4b, 0xfa, 0x67, 0xd3, 0xf4, 0xcb, 0x98, 0x6f, 0x96, 0x98, 0xe, 0x98, 0x24, 0x25, 0xda, 0xb, 0xd6, 0x8b, 0x5e, 0x72, 0x7b, 0x63, 0x4c, 0x5a, 0x2c, 0x1, 0x7f, 0xd4, 0x5a, 0x7e, 0x80, 0xbd, 0xc0, 0x46, 0xe8, 0x85, 0x8d, 0xc6, 0xb3, 0x14, 0x68, 0x9f, 0x3b, 0x76, 0x7f, 0x89, 0xe7, 0xa, 0xf6, 0x22, 0xd8, 0xcf, 0x97, 0xc4, 0xd5, 0x7f, 0x82, 0x7b, 0xa, 0x8f, 0x55, 0xd8, 0xf, 0xe4, 0x1, 0x73, 0xb9, 0xcf, 0x2e, 0x5c, 0x8e, 0xa0, 0xef, 0x0, 0x5b, 0x69, 0xb0, 0xb4, 0xd5, 0x6a, 0x39, 0xe0, 0x98, 0x28, 0xf5, 0x7d, 0x15, 0x6d, 0x68, 0xde, 0x3a, 0x56, 0x1a, 0x3c, 0xd9, 0xb7, 0xe1, 0x9, 0x2a, 0x88, 0x21, 0x27, 0x77, 0xc8, 0xf1, 0x3e, 0x5, 0x57, 0xe2, 0xdb, 0x89, 0xfe, 0x8, 0xec, 0x5, 0xb1, 0x8a, 0x57, 0xe3, 0xc, 0x99, 0x42, 0x30, 0xe, 0x97, 0xe2, 0x7e, 0xf4, 0xbd, 0xd1, 0xa8, 0xd3, 0x6e, 0x9c, 0x72, 0x5f, 0xe2, 0x59, 0x87, 0xbe, 0x16, 0x28, 0xc6, 0xf2, 0x36, 0xe8, 0xb7, 0x9a, 0x3d, 0xfd, 0x1d, 0xa, 0x55, 0x3f, 0xe3, 0x28, 0x77, 0x26, 0xf, 0xb7, 0xfd, 0x22, 0xf0, 0xaf, 0x5e, 0xc4, 0x1, 0x14, 0x57, 0x36, 0xe5, 0x5d, 0x8c, 0x89, 0xec, 0x80, 0xed, 0x8a, 0x4b, 0x3e, 0x72, 0xb5, 0xe6, 0xcf, 0x74, 0x78, 0x94, 0x3a, 0xe5, 0x28, 0xe8, 0x49, 0xaa, 0xdb, 0x5f, 0x48, 0xd6, 0xdb, 0x66, 0x3e, 0xbb, 0x78, 0x91, 0xc3, 0xe8, 0xce, 0x99, 0xc2, 0xf0, 0xde, 0xfb, 0x1e, 0x28, 0x39, 0x48, 0xda, 0xd9, 0xd1, 0x6b, 0xe7, 0x45, 0xb0, 0x34, 0x9, 0xaa, 0x29, 0xcf, 0x7, 0xb1, 0xf2, 0xe8, 0xc8, 0x77, 0xf4, 0x3a, 0xa0, 0xc, 0x9c, 0xbf, 0x5d, 0x84, 0x73, 0xd1, 0xf6, 0x11, 0xe3, 0xa6, 0x32, 0x4e, 0x90, 0x75, 0xb0, 0x31, 0xf2, 0xee, 0x28, 0xce, 0x4d, 0x56, 0x20, 0x53, 0x1d, 0x25, 0x97, 0x98, 0x91, 0x39, 0x65, 0xbd, 0x77, 0xf4, 0xd3, 0xc0, 0x89, 0x79, 0xf5, 0xdc, 0x6, 0x16, 0xd3, 0x77, 0xca, 0xbc, 0x5, 0xc7, 0x81, 0xf9, 0xaf, 0xe4, 0xd9, 0x30, 0x48, 0x63, 0x17, 0x3a, 0xd5, 0x33, 0xff, 0xd2, 0xb7, 0x5d, 0xf3, 0x1e, 0x2f, 0xf6, 0x1b, 0xf8, 0xbf, 0x20, 0xc6, 0x22, 0x74, 0x9c, 0xd, 0x3, 0x67, 0xc3, 0xd7, 0xb1, 0x1d, 0xd0, 0x55, 0xa, 0xd2, 0x19, 0x84, 0xe, 0xde, 0x18, 0xfa, 0x24, 0x7e, 0x6, 0x58, 0xd, 0x9c, 0xe0, 0xe, 0xea, 0xde, 0x6, 0x6b, 0xc0, 0xd, 0x60, 0x2, 0x9f, 0xf2, 0x4b, 0x47, 0xcd, 0x23, 0x44, 0x83, 0x48, 0x71, 0xf, 0xac, 0xf2, 0x86, 0xca, 0x83, 0x1c, 0x5b, 0x5a, 0xad, 0x0, 0x3, 0x3e, 0x7, 0x94, 0x13, 0x1d, 0x14, 0xeb, 0xdc, 0xea, 0x4c, 0x15, 0xdb, 0xa7, 0x78, 0xd, 0xed, 0x2, 0x7b, 0x8b, 0xa3, 0x9e, 0x93, 0xc3, 0xd8, 0xa6, 0xa5, 0xb2, 0xd6, 0xa9, 0xa1, 0x3b, 0xb9, 0x8b, 0x3d, 0xee, 0xa, 0x20, 0x4b, 0x8a, 0xfd, 0x2, 0xb6, 0xd7, 0xdb, 0xe3, 0xc0, 0x6d, 0xa9, 0xb6, 0x16, 0x3b, 0xc5, 0xe, 0xb, 0xca, 0xca, 0xd9, 0xc6, 0x95, 0xd7, 0x67, 0xac, 0x33, 0xb1, 0x45, 0xe4, 0x13, 0x65, 0xcd, 0xb9, 0xc8, 0xfe, 0xee, 0xce, 0x49, 0xe8, 0xa, 0x2a, 0xbe, 0x63, 0xd0, 0x57, 0xd0, 0x5b, 0xc1, 0x16, 0xe0, 0xf5, 0x15, 0xa9, 0x81, 0xbf, 0x31, 0x72, 0x21, 0x4b, 0x75, 0x4c, 0xc8, 0xd9, 0x7b, 0xe, 0x6c, 0x2b, 0x9c, 0x84, 0xf9, 0x8c, 0x1a, 0x5c, 0xba, 0xc6, 0xc8, 0xce, 0xfb, 0xba, 0x23, 0x44, 0x5, 0x8d, 0x2f, 0xa4, 0x62, 0x17, 0xc8, 0xa5, 0x3f, 0x8c, 0x9d, 0xf9, 0xd3, 0xdd, 0xe7, 0x64, 0x97, 0x3d, 0x53, 0x2e, 0xa4, 0x79, 0xbb, 0x92, 0x89, 0x6f, 0x87, 0x9f, 0xb, 0xe2, 0x42, 0x74, 0xb6, 0x9c, 0xc2, 0x1e, 0xec, 0x6f, 0x74, 0x20, 0x1e, 0xac, 0x45, 0x61, 0xfd, 0x3f, 0x7f, 0xf2, 0x12, 0x70, 0x75, 0xe5, 0xa5, 0xc4, 0x4e, 0x6b, 0xc4, 0x1d, 0xaa, 0x81, 0xbc, 0xdf, 0x51, 0x71, 0x6b, 0x64, 0xa7, 0xe2, 0x3a, 0x35, 0xaa, 0xa4, 0x45, 0x92, 0xfb, 0x96, 0x85, 0xf4, 0xee, 0x9f, 0x8f, 0xae, 0xf8, 0xb8, 0xf4, 0xb1, 0xd4, 0x68, 0xf3, 0xd7, 0xb4, 0x30, 0x15, 0x5c, 0xe5, 0xcc, 0x23, 0xcc, 0x69, 0x29, 0x41, 0xc3, 0x51, 0xb7, 0xa7, 0x5b, 0x8c, 0x6e, 0xd5, 0x89, 0x11, 0xe5, 0x93, 0x12, 0x29, 0xcf, 0x59, 0x14, 0x83, 0x3d, 0x3, 0x7b, 0xc2, 0xf, 0xe1, 0x79, 0xa8, 0x34, 0x92, 0xb4, 0x79, 0x3c, 0x43, 0xba, 0x82, 0xce, 0xa8, 0x9f, 0xa3, 0xc3, 0x95, 0xf4, 0xce, 0x77, 0x11, 0x3f, 0x2e, 0xb1, 0xaa, 0xd5, 0xb5, 0x1c, 0xec, 0x21, 0xe1, 0x9d, 0x2a, 0xe9, 0xcd, 0xf8, 0xee, 0x6, 0x76, 0xc8, 0x3c, 0x6e, 0x74, 0xc0, 0x5f, 0xc9, 0x49, 0x20, 0x9f, 0xbb, 0xfd, 0x39, 0xb1, 0x77, 0x96, 0x1d, 0xcc, 0x14, 0x89, 0x71, 0xab, 0xe5, 0xa6, 0x41, 0x92, 0xde, 0x48, 0xcd, 0x25, 0xc0, 0x5f, 0x32, 0xd3, 0xc2, 0x3c, 0x47, 0x9d, 0x52, 0xd9, 0x50, 0x46, 0xf3, 0x76, 0x68, 0xc, 0x3e, 0x23, 0x4f, 0x21, 0xe7, 0x9b, 0x61, 0x31, 0x30, 0x45, 0xee, 0x2, 0x8f, 0x81, 0x95, 0xc0, 0x99, 0xfa, 0x3, 0x41, 0x8c, 0x4e, 0x90, 0xba, 0x4d, 0xdd, 0x5c, 0xc5, 0xd5, 0xf5, 0x5a, 0xfd, 0x1, 0x5c, 0xc5, 0x18, 0x7e, 0xa5, 0x54, 0x63, 0x65, 0xf0, 0xbc, 0x77, 0xe3, 0x91, 0x52, 0x88, 0x1c, 0xa4, 0xd2, 0xfc, 0x59, 0xe, 0x7e, 0x5, 0xe7, 0x0, 0x25, 0x26, 0x97, 0x64, 0xc3, 0xd1, 0x35, 0xfb, 0x68, 0x35, 0xf7, 0x3f, 0xeb, 0xa, 0x59, 0x53, 0x74, 0xfa, 0xd, 0xd1, 0x2b, 0x2e, 0x33, 0x8a, 0x9, 0xa0, 0x57, 0x83, 0xba, 0xf4, 0x7c, 0x7, 0x74, 0x3d, 0x9, 0x7b, 0xb6, 0x21, 0xc8, 0x6c, 0x7e, 0xc7, 0xf1, 0x6d, 0xa2, 0x7c, 0x9d, 0xbc, 0xb0, 0x67, 0xec, 0x7e, 0xd6, 0xd5, 0x75, 0x6c, 0xb9, 0xe, 0x3a, 0xbc, 0x67, 0x4, 0xc4, 0xcf, 0xf3, 0x7c, 0x9f, 0xce, 0x36, 0xf8, 0x28, 0xf5, 0xc6, 0xce, 0xf8, 0x37, 0x97, 0xb1, 0xab, 0x9d, 0xaf, 0x93, 0xeb, 0x69, 0xd3, 0x39, 0xe, 0x22, 0x7a, 0x11, 0x98, 0x4, 0x6d, 0x56, 0x52, 0x22, 0xbe, 0xfc, 0x3d, 0x98, 0x6, 0x1f, 0x85, 0x58, 0xbf, 0x3e, 0xf9, 0x39, 0xb6, 0x7e, 0x68, 0xb2, 0x39, 0x3, 0x8, 0xc5, 0x77, 0x1b, 0x7a, 0x21, 0x78, 0xd, 0xf4, 0x92, 0x7e, 0x4, 0x6, 0xf5, 0x1b, 0x33, 0xc9, 0x4e, 0xd6, 0xc6, 0x1e, 0x28, 0x15, 0xb2, 0x7d, 0xa5, 0x9, 0x56, 0x7d, 0x6c, 0x62, 0x5f, 0x7, 0x36, 0x80, 0xdd, 0xe0, 0x77, 0x90, 0x3, 0xd, 0x4a, 0xae, 0xbb, 0x1d, 0x21, 0xe2, 0x9f, 0x23, 0xea, 0x3d, 0x20, 0xbe, 0xd8, 0xd1, 0xd5, 0x98, 0x15, 0x91, 0x61, 0xc, 0x2, 0x78, 0x7, 0x37, 0x5e, 0x6d, 0x94, 0x1f, 0x6, 0xe6, 0xb5, 0x32, 0x6a, 0x7a, 0x78, 0x65, 0x29, 0x7e, 0x95, 0x5f, 0x26, 0x27, 0xb4, 0xbf, 0x70, 0xb3, 0xb, 0xd, 0x25, 0x55, 0x47, 0x7e, 0x11, 0x37, 0xbe, 0x8a, 0x69, 0x73, 0x3e, 0x78, 0x19, 0xe4, 0xea, 0xe, 0x4b, 0x96, 0xae, 0x31, 0xc1, 0xec, 0xbf, 0x87, 0xf2, 0xa5, 0x32, 0x44, 0xf, 0x46, 0x76, 0xf6, 0xe9, 0x44, 0xb0, 0xcb, 0x9, 0xf8, 0x12, 0x38, 0x0, 0x52, 0x86, 0x25, 0x6b, 0x4a, 0x78, 0x75, 0xa9, 0x95, 0xcd, 0x20, 0xee, 0x77, 0xf4, 0x50, 0x64, 0xbd, 0xc6, 0x96, 0x41, 0xdc, 0x44, 0x3f, 0x0, 0xdc, 0x7e, 0x3f, 0x97, 0x26, 0xc0, 0x35, 0xe0, 0x56, 0x70, 0x3d, 0xc8, 0x77, 0x85, 0xaf, 0x38, 0xf3, 0x6c, 0x90, 0x83, 0x61, 0x1b, 0x7f, 0x56, 0xf3, 0x7d, 0x90, 0x57, 0xd5, 0x7a, 0x7e, 0x10, 0x9e, 0xc2, 0x1f, 0x2b, 0x8b, 0x6d, 0xcc, 0xc1, 0x5, 0xc2, 0xcb, 0x81, 0xff, 0x61, 0xfc, 0x7, 0xb8, 0x5d, 0xb9, 0x65, 0x98, 0x95, 0xb8, 0x3a, 0xae, 0xaa, 0xd2, 0x38, 0x40, 0xde, 0x78, 0x89, 0x52, 0x67, 0x3b, 0xaf, 0x3f, 0xe3, 0x64, 0x1f, 0xcc, 0xf6, 0x16, 0xe0, 0xe4, 0x43, 0xb0, 0x47, 0x3f, 0x60, 0x74, 0x36, 0x5f, 0x1f, 0x4, 0x5f, 0x81, 0xba, 0xf8, 0xf5, 0x2a, 0x59, 0xa1, 0x2d, 0x24, 0xe3, 0xd5, 0x2c, 0x71, 0xed, 0xee, 0x36, 0xb8, 0x1a, 0xb2, 0x8d, 0xd2, 0x7d, 0x35, 0xa2, 0x8d, 0xb3, 0x91, 0xfe, 0x81, 0x35, 0xc1, 0xaa, 0x17, 0x9b, 0x9d, 0x28, 0xdf, 0x2, 0x5e, 0x5, 0x3f, 0x82, 0x51, 0xc5, 0xbe, 0xde, 0xdf, 0xab, 0xea, 0x44, 0x28, 0x67, 0x5a, 0xd4, 0xdd, 0x43, 0xd9, 0x91, 0x8b, 0x4, 0x52, 0xfb, 0x94, 0xab, 0x1e, 0x1b, 0xf8, 0xcc, 0xdb, 0x15, 0xc0, 0x5c, 0xf6, 0x21, 0x74, 0x31, 0x38, 0x17, 0x9c, 0x5, 0xbc, 0x37, 0x6d, 0x6b, 0xde, 0xff, 0x5, 0x7e, 0x3, 0xbb, 0xc1, 0x76, 0xf0, 0x25, 0xd8, 0x41, 0x2c, 0x5f, 0x7b, 0x21, 0x85, 0xa8, 0x5f, 0xd2, 0x8d, 0xa7, 0x62, 0xd6, 0xf, 0xa3, 0xff, 0x3, 0xf7, 0x93, 0x7f, 0xd4, 0xd5, 0x86, 0x9a, 0x4d, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; + + + + + (NSData *)twitter_icon2x_png { + return [NSData dataWithBytes:twitter_icon2x_png length:sizeof(twitter_icon2x_png)]; + } + + const unsigned char twitter_icon3x_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x42, 0x0, 0x0, 0x0, 0x36, 0x8, 0x6, 0x0, 0x0, 0x0, 0x73, 0xe7, 0x4f, 0x3f, 0x0, 0x0, 0x0, 0x1, 0x73, 0x52, 0x47, 0x42, 0x0, 0xae, 0xce, 0x1c, 0xe9, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0x2e, 0x23, 0x0, 0x0, 0x2e, 0x23, 0x1, 0x78, 0xa5, 0x3f, 0x76, 0x0, 0x0, 0x1, 0xcb, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0xa, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0xa, 0x29, 0x2e, 0xcd, 0x3d, 0x0, 0x0, 0xb, 0x9, 0x49, 0x44, 0x41, 0x54, 0x68, 0x5, 0xd5, 0x9a, 0x7b, 0xa8, 0xe5, 0x55, 0x15, 0xc7, 0xe7, 0xce, 0x1d, 0xc7, 0xd1, 0x44, 0xcd, 0xde, 0x33, 0x15, 0xa9, 0x94, 0x56, 0x14, 0x64, 0x30, 0x44, 0xa1, 0x5d, 0x1a, 0x2c, 0x6d, 0xe8, 0x61, 0x94, 0x45, 0x30, 0x4a, 0x49, 0x52, 0x50, 0x4a, 0x18, 0x18, 0x64, 0xd0, 0x3, 0x26, 0x8, 0x89, 0xe8, 0x41, 0xfd, 0xa3, 0x21, 0x15, 0xa5, 0xff, 0x68, 0x62, 0x89, 0x77, 0xd4, 0x92, 0xc9, 0xc7, 0x58, 0x8, 0x9a, 0x64, 0xce, 0x4c, 0x83, 0x36, 0x39, 0x5a, 0x96, 0x8f, 0xd1, 0xd2, 0x79, 0xdc, 0xb9, 0x7d, 0x3e, 0xfb, 0xec, 0xf5, 0x73, 0xff, 0x7e, 0xe7, 0xf7, 0x3b, 0xf7, 0x9e, 0x39, 0xe7, 0xdc, 0x99, 0x16, 0x7c, 0xcf, 0x5a, 0x7b, 0xed, 0xb5, 0xd7, 0xde, 0x7b, 0xed, 0xb5, 0xf7, 0x6f, 0x9f, 0x73, 0x7e, 0x53, 0xcb, 0x1a, 0x34, 0x3f, 0x3f, 0x3f, 0x8d, 0x6a, 0x7e, 0x6a, 0x6a, 0xea, 0x40, 0xa3, 0x6a, 0x49, 0x8a, 0xf4, 0xbf, 0xdc, 0x8e, 0xa2, 0x7f, 0xca, 0xab, 0x29, 0xce, 0x80, 0x33, 0xc0, 0xa9, 0xe0, 0x64, 0xf0, 0x6a, 0xb0, 0x1b, 0x6c, 0x7, 0x3b, 0xc0, 0xdd, 0xe0, 0x16, 0xda, 0xdc, 0x3, 0x4f, 0x44, 0xbb, 0x15, 0x94, 0xf7, 0x17, 0xe5, 0x29, 0x64, 0xe7, 0xa6, 0xef, 0x52, 0x7f, 0x24, 0xe5, 0x3d, 0x61, 0xb7, 0x8c, 0x86, 0x1a, 0x56, 0x44, 0x39, 0x35, 0xaa, 0x14, 0x4b, 0x20, 0x94, 0x7d, 0x22, 0xbf, 0x1c, 0x5c, 0x6, 0xb6, 0x82, 0x1a, 0x1d, 0x80, 0x6a, 0x8a, 0x5e, 0xe1, 0x19, 0xd8, 0x2f, 0xc0, 0xbb, 0x62, 0xa8, 0xc8, 0x2b, 0xc1, 0x11, 0x22, 0x74, 0xc1, 0xd1, 0xad, 0x5, 0x5f, 0x7, 0x6b, 0x42, 0x67, 0x10, 0xd2, 0x2a, 0xc0, 0xa7, 0xc1, 0x9b, 0xc0, 0x31, 0x56, 0xc2, 0xfb, 0x1c, 0x54, 0x8d, 0xc6, 0x2c, 0xd8, 0x77, 0xb8, 0x44, 0x7e, 0x1f, 0xb8, 0x17, 0x24, 0xca, 0xf3, 0xde, 0x47, 0x61, 0x2f, 0xd8, 0xf, 0xc, 0xc4, 0x1c, 0x28, 0x75, 0x14, 0x13, 0x3d, 0xc7, 0xa7, 0x13, 0x5c, 0x15, 0xfe, 0x82, 0xab, 0x3, 0xa7, 0x83, 0xef, 0x2, 0xdb, 0x5f, 0x13, 0x75, 0x89, 0xa3, 0x48, 0x13, 0x86, 0xaf, 0x1, 0xf7, 0x81, 0x8d, 0x61, 0x80, 0xbc, 0x22, 0xe4, 0x49, 0x71, 0xfa, 0x48, 0xb, 0xa1, 0x7f, 0xe4, 0xb, 0xc1, 0x1e, 0x20, 0xc5, 0x44, 0x1d, 0xb4, 0x93, 0x6f, 0x45, 0xce, 0x10, 0x6d, 0x9f, 0x7, 0x41, 0xd7, 0x20, 0xbc, 0x12, 0x1c, 0xb, 0xce, 0x0, 0x97, 0x80, 0x9b, 0xc0, 0x6e, 0x20, 0x19, 0xd4, 0x37, 0xe7, 0x3e, 0xa7, 0xd3, 0x96, 0x40, 0x91, 0xb6, 0x5, 0x7c, 0x3, 0x8, 0xba, 0x20, 0x26, 0x8e, 0x62, 0x62, 0xc1, 0xc0, 0xf7, 0x94, 0xc8, 0x3, 0xba, 0x20, 0x3a, 0x87, 0xbb, 0xb2, 0x73, 0x39, 0x1b, 0x5a, 0x3, 0x40, 0x7d, 0x4d, 0x9f, 0x6d, 0x23, 0x88, 0xba, 0xba, 0x7, 0x6c, 0x6, 0xcf, 0x5a, 0x68, 0xd0, 0xa5, 0xb9, 0x4f, 0xb7, 0x4e, 0xa, 0x44, 0x35, 0x49, 0x14, 0xee, 0xb1, 0x20, 0x23, 0x76, 0xde, 0xa4, 0x83, 0x41, 0x1f, 0xa9, 0x7f, 0xf8, 0xbb, 0x41, 0xc, 0xf8, 0xf9, 0x61, 0x2, 0x40, 0xbb, 0x32, 0x20, 0x14, 0xd3, 0xf6, 0x71, 0xb, 0x95, 0xe4, 0x7c, 0xc, 0xae, 0x74, 0x3d, 0x38, 0x3a, 0xe6, 0x96, 0x38, 0x8a, 0x18, 0x88, 0x69, 0xf4, 0x0, 0x90, 0xfe, 0xd3, 0x63, 0x29, 0x7d, 0x2e, 0x8c, 0x6, 0xe8, 0xc6, 0x7a, 0x66, 0xe0, 0x2f, 0xfa, 0x3e, 0x6, 0xf9, 0x8e, 0xdc, 0xa7, 0x2b, 0x5a, 0x4e, 0x6c, 0x68, 0xb9, 0x8, 0xa2, 0xbe, 0xdc, 0x2e, 0xe5, 0x96, 0xf9, 0x15, 0xe5, 0xf2, 0x3c, 0x7a, 0xb, 0xe5, 0xf5, 0x6e, 0x8d, 0xa4, 0x84, 0x9f, 0x6, 0x9e, 0x6, 0x92, 0xd1, 0x2c, 0x53, 0xec, 0xb2, 0x32, 0x18, 0xd4, 0xd5, 0x9e, 0x30, 0x51, 0x37, 0x2c, 0xc7, 0x4f, 0xf4, 0x7d, 0x11, 0x72, 0x90, 0x7b, 0x5d, 0x1a, 0x3a, 0x0, 0x2d, 0x6d, 0xc2, 0x8f, 0xdc, 0x6c, 0xf8, 0x11, 0x58, 0xd, 0x5e, 0x7, 0xce, 0x7, 0xee, 0x80, 0xad, 0xe0, 0x23, 0x6, 0x22, 0x9e, 0x18, 0xeb, 0x90, 0x3d, 0x94, 0xa4, 0x48, 0xab, 0x2a, 0x18, 0x73, 0x73, 0x73, 0x3f, 0x41, 0x7f, 0x9c, 0x93, 0x85, 0x2f, 0x7, 0x55, 0x54, 0x87, 0xd, 0x40, 0xf6, 0x11, 0xd9, 0xe0, 0x61, 0x76, 0x27, 0x90, 0xa2, 0xbf, 0x71, 0x4, 0x21, 0x7c, 0xc4, 0x9c, 0x1e, 0xc6, 0xff, 0xcf, 0xc0, 0x2c, 0x78, 0x14, 0x4, 0xf5, 0x1e, 0xc, 0x94, 0x22, 0x10, 0x67, 0x45, 0xd, 0x3c, 0x1e, 0x51, 0xaa, 0xf6, 0x16, 0xfa, 0x2d, 0xc8, 0xef, 0x8c, 0x89, 0x23, 0xaf, 0x0, 0x6, 0x65, 0xe8, 0xc, 0xa1, 0xcd, 0xca, 0x1c, 0x90, 0xb3, 0x91, 0x63, 0xef, 0x46, 0x5f, 0x31, 0x89, 0x81, 0xbc, 0xd8, 0x2, 0x3, 0xed, 0xf0, 0x6f, 0x7d, 0x2c, 0x2e, 0x62, 0x45, 0xdf, 0x8f, 0xb9, 0x18, 0x84, 0x98, 0xc4, 0x73, 0xc8, 0xfb, 0xa2, 0x22, 0xf3, 0x79, 0xb8, 0xe7, 0x82, 0x37, 0x31, 0x6f, 0x9a, 0x6b, 0xc1, 0x8d, 0xb8, 0xf9, 0xa, 0x58, 0xe5, 0xd, 0xd, 0xa8, 0x37, 0x18, 0x8b, 0xe, 0x8, 0xb6, 0xf6, 0x19, 0xb7, 0x3b, 0x7d, 0xfa, 0xcc, 0xb7, 0x2f, 0xb3, 0x4c, 0x5e, 0xa3, 0x6c, 0x5f, 0xd3, 0x75, 0x15, 0x6, 0xd8, 0xea, 0x7b, 0x2e, 0xc3, 0xe6, 0x57, 0x80, 0x8b, 0x15, 0x68, 0xb3, 0xa2, 0xf7, 0xd1, 0x2b, 0x78, 0x91, 0x7a, 0x1c, 0x48, 0xee, 0xd3, 0x32, 0xca, 0xea, 0x8c, 0x68, 0xec, 0x5f, 0xcb, 0xb7, 0x83, 0xf7, 0xeb, 0x28, 0x88, 0x72, 0xda, 0x32, 0xf2, 0xd0, 0xb5, 0x71, 0xea, 0xab, 0x6d, 0x85, 0xfc, 0x73, 0x20, 0x99, 0xd, 0x65, 0x9f, 0x63, 0x93, 0x73, 0xe6, 0x94, 0x63, 0xff, 0x31, 0x7d, 0xc5, 0xd6, 0x4c, 0xbc, 0xc, 0xc4, 0xf1, 0x54, 0xfe, 0x1, 0x48, 0xee, 0xd5, 0xda, 0x40, 0x8a, 0x34, 0x2c, 0x1d, 0xba, 0xff, 0xae, 0x6, 0xd5, 0xb5, 0x36, 0x26, 0x8e, 0xce, 0x5b, 0xaa, 0x5b, 0x47, 0x1e, 0x59, 0x97, 0xaa, 0xd5, 0x2b, 0xc0, 0x8f, 0x2, 0x9b, 0x80, 0x34, 0x89, 0xf3, 0x21, 0xe6, 0x10, 0xe7, 0x84, 0xc1, 0xfe, 0x6a, 0x31, 0xc6, 0x5e, 0x10, 0x50, 0xb8, 0x72, 0x29, 0x15, 0x49, 0xf1, 0xa7, 0x90, 0xef, 0xca, 0x46, 0xb5, 0x81, 0xab, 0xa3, 0x3e, 0x52, 0x36, 0x52, 0xcc, 0xd4, 0xb6, 0xfd, 0xb9, 0xe0, 0x16, 0x3a, 0xf0, 0x26, 0xb7, 0x1e, 0xbc, 0x88, 0xb2, 0xf6, 0x73, 0xc0, 0xad, 0x63, 0x3a, 0x7a, 0x69, 0x32, 0x28, 0xbd, 0xcb, 0x4b, 0xfe, 0xf2, 0x83, 0xde, 0x73, 0xa2, 0xef, 0x2a, 0x8c, 0x6e, 0x9c, 0xe4, 0xb8, 0x23, 0x43, 0xbf, 0xcc, 0x78, 0xbe, 0xa9, 0x73, 0xc7, 0xe3, 0xf8, 0xa2, 0xa3, 0xe5, 0xe, 0x14, 0x65, 0xa4, 0xea, 0x6f, 0x72, 0x85, 0xe7, 0x82, 0x7b, 0xbf, 0x95, 0xb4, 0xcf, 0x6d, 0x62, 0xcf, 0x1d, 0x89, 0xe1, 0xc7, 0xc0, 0xd, 0xe0, 0x66, 0xea, 0x2e, 0x5, 0x6f, 0x7, 0x47, 0xe9, 0x80, 0x3e, 0xe, 0xd8, 0x29, 0xd8, 0x67, 0x7f, 0xa8, 0xe2, 0x2c, 0xb2, 0xf, 0xcb, 0x93, 0xa4, 0x58, 0x40, 0xfb, 0x78, 0xc0, 0xf, 0xc6, 0x75, 0x84, 0xe3, 0x51, 0xe, 0x8a, 0xd4, 0x88, 0xc, 0xb8, 0x95, 0x8a, 0x59, 0xf0, 0x5e, 0xa0, 0xa1, 0x13, 0x2c, 0x1d, 0x51, 0xac, 0x65, 0x87, 0x67, 0x42, 0x5a, 0xfd, 0x6c, 0xa7, 0xbf, 0x77, 0x64, 0x3c, 0xb, 0xff, 0x23, 0xf5, 0xbf, 0x97, 0x83, 0x7, 0xc1, 0x2e, 0x6, 0xb0, 0x1b, 0xa4, 0x20, 0xc3, 0xfd, 0xc6, 0xf8, 0x77, 0xf4, 0x92, 0x63, 0xe8, 0xeb, 0x2b, 0xd5, 0x8c, 0xef, 0x23, 0x7d, 0x99, 0xc4, 0x5d, 0x5f, 0xf0, 0x53, 0x20, 0x8c, 0x4e, 0x8e, 0x92, 0xfb, 0xf4, 0x3b, 0x18, 0xae, 0x3, 0x6, 0x61, 0x2f, 0x30, 0x7d, 0x3b, 0x7, 0x48, 0x5b, 0xaa, 0xab, 0xd4, 0x73, 0x82, 0x42, 0xa5, 0x9d, 0xce, 0x64, 0xc0, 0x96, 0x3d, 0x6, 0x76, 0xe0, 0x7f, 0x7, 0x7c, 0x27, 0x78, 0x34, 0xe3, 0x78, 0xb8, 0x14, 0x59, 0x99, 0xa, 0xd8, 0xe1, 0xba, 0xb7, 0x1d, 0x4b, 0x39, 0x55, 0xe6, 0x8f, 0x36, 0x7d, 0xa9, 0xcb, 0x72, 0xd9, 0xc4, 0xf9, 0x48, 0xb1, 0xf0, 0xbd, 0x52, 0x9b, 0xc2, 0x1a, 0x1c, 0x5c, 0xe, 0xbb, 0x44, 0x11, 0x98, 0x19, 0x6e, 0x95, 0xce, 0x60, 0x50, 0xd7, 0x24, 0x6d, 0x45, 0x4, 0x25, 0x5, 0xbc, 0x69, 0x94, 0xcb, 0x74, 0x97, 0xb2, 0xaa, 0xa3, 0x7a, 0x24, 0xb5, 0x13, 0x76, 0xf5, 0xd, 0xb2, 0xf3, 0x58, 0x4f, 0x70, 0x67, 0xe9, 0xaf, 0x76, 0x3e, 0xa0, 0xaf, 0x56, 0xd2, 0xc9, 0x9b, 0x1, 0x89, 0x30, 0xfe, 0x12, 0x82, 0xdf, 0xd5, 0x75, 0x64, 0x10, 0x3c, 0x47, 0xfa, 0xa2, 0x88, 0xbe, 0x8b, 0xb4, 0xf5, 0x80, 0x32, 0x0, 0xe, 0xc2, 0x80, 0x78, 0x2e, 0xb8, 0x22, 0xc2, 0x41, 0xa9, 0x93, 0x5c, 0xf9, 0x9e, 0x54, 0x7c, 0x96, 0xfd, 0x95, 0x72, 0x61, 0xe2, 0x98, 0xfb, 0x1a, 0x96, 0x3a, 0x64, 0xcd, 0x63, 0x1, 0xbd, 0x27, 0x3d, 0x53, 0xb6, 0x2f, 0xe5, 0x38, 0x4d, 0xd5, 0x9d, 0x49, 0xc3, 0x2b, 0xc0, 0xba, 0x6c, 0xf0, 0x49, 0xf8, 0xf, 0x80, 0x13, 0x98, 0x66, 0xb0, 0x31, 0xf0, 0x5c, 0x3d, 0x14, 0xf3, 0xa9, 0x61, 0x40, 0xdd, 0x66, 0xf2, 0xd8, 0x6, 0xfa, 0x6c, 0xf5, 0x4b, 0x7f, 0x31, 0x1, 0x23, 0x55, 0xc9, 0xd8, 0x57, 0xd4, 0xa6, 0x2f, 0x75, 0xc8, 0xda, 0x46, 0x5b, 0x7f, 0xda, 0x7b, 0x32, 0x37, 0xee, 0xb, 0x60, 0xba, 0x22, 0xd3, 0xc0, 0xc1, 0xb8, 0xa7, 0x3f, 0xd, 0xce, 0x65, 0xd0, 0xf7, 0xc2, 0x37, 0x83, 0x47, 0xc0, 0x76, 0xf0, 0x46, 0x30, 0x12, 0x95, 0x3, 0xcc, 0x8e, 0xd2, 0xef, 0x10, 0x2d, 0xfa, 0x91, 0xfa, 0x69, 0x69, 0x1c, 0x81, 0x78, 0x9c, 0xba, 0x27, 0x5a, 0xea, 0x93, 0xca, 0xd4, 0x8d, 0xe8, 0xfc, 0x15, 0xd9, 0x93, 0xde, 0x80, 0x78, 0x41, 0x12, 0x92, 0x29, 0x45, 0x6c, 0xe6, 0x7d, 0xd4, 0x86, 0xd3, 0x94, 0x96, 0x51, 0xa6, 0xe, 0xf1, 0x85, 0x83, 0xcd, 0x46, 0x51, 0x56, 0xee, 0xa2, 0x41, 0x36, 0x4d, 0x9f, 0x6d, 0xb6, 0xa5, 0x4d, 0x57, 0x1f, 0x85, 0x7e, 0x27, 0x72, 0x64, 0x44, 0x35, 0x8f, 0xa8, 0x77, 0x6b, 0x44, 0x20, 0x34, 0x14, 0xd2, 0x7f, 0x41, 0x3c, 0x62, 0xe2, 0x2e, 0x50, 0x6b, 0x5c, 0xe, 0xac, 0x29, 0x97, 0xe5, 0xe4, 0xed, 0x20, 0x3e, 0x4a, 0x1f, 0xa5, 0x5c, 0xba, 0xea, 0xd2, 0x17, 0x36, 0x8e, 0x39, 0xb6, 0xff, 0x36, 0xec, 0xdd, 0xe6, 0x52, 0xdf, 0x76, 0xd4, 0x28, 0x4d, 0x10, 0x23, 0x1f, 0x6f, 0x77, 0x6a, 0x5, 0xb9, 0x8f, 0xad, 0xf3, 0x50, 0x8b, 0x80, 0x20, 0xfe, 0xdf, 0x91, 0x13, 0x8e, 0x27, 0xd6, 0x9f, 0x1d, 0xbd, 0x99, 0x2d, 0x53, 0x2e, 0x49, 0xa5, 0xf7, 0x71, 0xb9, 0x74, 0x7d, 0x8f, 0xa5, 0x40, 0x84, 0x93, 0xa8, 0xcb, 0x55, 0x3d, 0x66, 0x5a, 0x86, 0x62, 0x31, 0x72, 0xd8, 0x6, 0xb7, 0x4d, 0xd9, 0xae, 0xd4, 0x2b, 0x97, 0x75, 0xa5, 0x1c, 0x76, 0x4d, 0x9b, 0x52, 0x9f, 0x65, 0xc7, 0x17, 0x2b, 0xef, 0x96, 0xb8, 0x3f, 0xeb, 0x3d, 0xf8, 0xfb, 0x3, 0x91, 0x95, 0x31, 0xd9, 0x59, 0x8c, 0x6f, 0xce, 0xd, 0x22, 0x8d, 0x72, 0xb1, 0xce, 0x4a, 0x67, 0x8b, 0x91, 0xeb, 0xad, 0x7b, 0x67, 0x48, 0xd9, 0x2e, 0xea, 0x43, 0x17, 0x5c, 0x7d, 0x29, 0x87, 0xdd, 0x20, 0x7d, 0x61, 0x13, 0x81, 0xf8, 0xb, 0xba, 0xad, 0x85, 0xbe, 0x4f, 0x4c, 0x1, 0xa0, 0x23, 0x6f, 0x96, 0x46, 0xca, 0x83, 0xd1, 0xcb, 0x94, 0x5b, 0xc2, 0x2f, 0x43, 0x3e, 0xf3, 0xab, 0x95, 0x47, 0xee, 0xa3, 0xae, 0xd5, 0xea, 0x33, 0x5c, 0x7a, 0x85, 0xab, 0x3e, 0x9d, 0xbb, 0xdd, 0xc2, 0xdc, 0xe2, 0xa0, 0x6c, 0xdd, 0xea, 0x91, 0x9, 0xda, 0xc7, 0x59, 0x71, 0x13, 0xf2, 0xc6, 0xec, 0xc0, 0xe7, 0x7e, 0x4, 0xa3, 0x35, 0x20, 0x5d, 0xab, 0x95, 0xdb, 0x1f, 0x2a, 0xe6, 0x58, 0x9d, 0xb0, 0xe7, 0x83, 0xfc, 0x36, 0xe0, 0x76, 0xf3, 0xcb, 0x56, 0x64, 0x89, 0xaa, 0x8a, 0xaa, 0x40, 0x68, 0x80, 0x61, 0x1c, 0x2c, 0xdf, 0xc0, 0xe2, 0xca, 0x6c, 0x65, 0x30, 0xfc, 0x6f, 0x50, 0x7, 0x76, 0xd0, 0x1a, 0x10, 0xf4, 0x87, 0x1b, 0xc5, 0xca, 0xdf, 0xc7, 0xc0, 0xee, 0x58, 0x68, 0x70, 0x55, 0x20, 0x34, 0x24, 0x18, 0x6e, 0x11, 0xef, 0xe1, 0x3a, 0xf9, 0x2c, 0xf8, 0xa1, 0x7a, 0x28, 0xae, 0xdf, 0x6, 0x64, 0xe0, 0xd9, 0x91, 0xac, 0xf, 0xfd, 0x87, 0x8b, 0xe6, 0x93, 0x4f, 0x9a, 0x65, 0x3e, 0xff, 0xec, 0x89, 0x69, 0xcb, 0x67, 0xb1, 0xce, 0x6a, 0x81, 0xb0, 0xaa, 0x8, 0x86, 0xbf, 0x1d, 0x7c, 0x1e, 0xd5, 0x45, 0x60, 0x17, 0xd0, 0xd6, 0x80, 0xd8, 0x41, 0x67, 0x56, 0x94, 0x67, 0x46, 0x29, 0xd3, 0xa6, 0x46, 0xd6, 0xb5, 0xd5, 0x87, 0x2e, 0xb8, 0x8d, 0x4a, 0xb9, 0x74, 0xd2, 0xa1, 0x77, 0x6c, 0x9e, 0x71, 0x8e, 0xd7, 0x73, 0xe1, 0x3a, 0xa0, 0x8f, 0x95, 0xcc, 0xa7, 0xef, 0x69, 0x61, 0x9d, 0x34, 0x68, 0x42, 0xee, 0xa7, 0xb4, 0xfa, 0x38, 0x79, 0x29, 0xb6, 0x9f, 0x1, 0xeb, 0xc1, 0x29, 0xe0, 0xc5, 0xa0, 0x2f, 0x88, 0xe8, 0xe, 0x17, 0x8a, 0xf3, 0xe1, 0x6a, 0xe6, 0xf0, 0x9, 0x7, 0xc5, 0x1c, 0xbc, 0x19, 0xb7, 0x9e, 0xf, 0xd6, 0x77, 0x6, 0x22, 0x37, 0xf6, 0x3b, 0x86, 0x93, 0xde, 0x9e, 0x6d, 0xd7, 0xc2, 0x75, 0xfc, 0x41, 0xe0, 0x55, 0x3c, 0xce, 0xd, 0xc4, 0xc3, 0x82, 0x9c, 0x8f, 0x8b, 0x67, 0xd6, 0xba, 0x8d, 0xcf, 0x61, 0xf2, 0xfe, 0xea, 0x5e, 0x2d, 0x2a, 0xba, 0x56, 0x8a, 0xc3, 0xb1, 0x56, 0x49, 0xc3, 0xf8, 0xbe, 0xee, 0xc4, 0xfd, 0xa1, 0x46, 0xa7, 0x5e, 0xbb, 0x25, 0x3, 0xe0, 0xa3, 0x55, 0x1a, 0x18, 0xc8, 0x9e, 0xc9, 0xd2, 0x7d, 0x32, 0xee, 0xf4, 0xa5, 0x27, 0xf7, 0x78, 0xa3, 0x41, 0xc8, 0x72, 0x1c, 0x9c, 0x9d, 0x83, 0x69, 0xd, 0x44, 0x61, 0xbd, 0x9, 0xf9, 0x69, 0x70, 0x62, 0xa1, 0xb, 0xb1, 0x75, 0xbf, 0xe5, 0xb1, 0xb4, 0xd6, 0x45, 0xc3, 0x9, 0x71, 0xe6, 0x9d, 0xb6, 0xb2, 0xd9, 0xe0, 0x7d, 0xe8, 0x7b, 0xf6, 0xc3, 0x78, 0x16, 0xcc, 0x6, 0xed, 0x5a, 0xf7, 0x39, 0xe, 0xe3, 0xe9, 0xe1, 0x21, 0xb9, 0x51, 0x43, 0xc8, 0xa8, 0x9a, 0x15, 0xd6, 0x75, 0x4e, 0x94, 0xb6, 0x9d, 0x75, 0x3a, 0x99, 0x4, 0x19, 0x7c, 0xfc, 0xba, 0x4d, 0xe3, 0x2, 0xf5, 0x53, 0xc6, 0xf1, 0xdb, 0xdc, 0x97, 0x7, 0xe7, 0x82, 0xd4, 0x99, 0xda, 0x38, 0xf7, 0xa6, 0x19, 0xbf, 0x4c, 0x5d, 0x8b, 0xa7, 0xf, 0x81, 0x48, 0x31, 0x3b, 0x5c, 0xf2, 0x9, 0x2f, 0x30, 0x1b, 0x27, 0x6c, 0x36, 0x3c, 0x4, 0x66, 0x18, 0xfb, 0xc3, 0xcc, 0x21, 0xb6, 0x38, 0xaa, 0xc1, 0xd4, 0x9a, 0x11, 0x36, 0xc9, 0x41, 0xd0, 0x91, 0x13, 0xfe, 0x2, 0xf8, 0x13, 0x30, 0x0, 0x46, 0x3e, 0x45, 0x39, 0xaf, 0x4, 0xc5, 0x43, 0x4a, 0x2e, 0xa6, 0xb, 0x64, 0x10, 0xa4, 0xaf, 0xe5, 0x20, 0xb8, 0x90, 0x8b, 0xca, 0x6, 0x1b, 0x75, 0x6, 0xc2, 0x4a, 0x1d, 0xe5, 0xa8, 0xee, 0xa4, 0xf8, 0x71, 0x60, 0x30, 0xec, 0x30, 0x5d, 0x5d, 0xa9, 0x77, 0x0, 0x91, 0x19, 0x9d, 0xd9, 0x85, 0xcd, 0x24, 0xa9, 0x7c, 0x72, 0x5d, 0xc9, 0x98, 0xae, 0xca, 0x9d, 0xc5, 0xb8, 0xc6, 0xd3, 0xb7, 0xab, 0xe, 0xd2, 0xde, 0x83, 0xbf, 0x6, 0x5c, 0xb, 0x4a, 0x72, 0xfb, 0xf8, 0x37, 0xa0, 0x7f, 0xa7, 0x19, 0xb8, 0xf8, 0x9b, 0x6d, 0xa9, 0xb8, 0xfd, 0x4a, 0xfe, 0x87, 0xf2, 0x12, 0x67, 0xd, 0x5f, 0xe8, 0x21, 0x70, 0x70, 0xc1, 0xc1, 0x71, 0x19, 0xc, 0xff, 0xd4, 0xf1, 0x85, 0xaf, 0xfb, 0x41, 0x1b, 0x2d, 0x55, 0x0, 0xec, 0x27, 0xfe, 0x2f, 0xfd, 0x7, 0xf2, 0x69, 0xa3, 0x4, 0x61, 0xa8, 0x74, 0xa6, 0xb3, 0x74, 0x80, 0xe6, 0xe, 0xbd, 0x68, 0x7d, 0x20, 0xe3, 0x6d, 0x70, 0xef, 0x17, 0x2b, 0xc1, 0x71, 0xc0, 0x2d, 0x57, 0x4b, 0x4d, 0xda, 0x92, 0xb5, 0x2f, 0x3c, 0x51, 0x2c, 0x63, 0xe3, 0xf6, 0x1b, 0x68, 0xa7, 0x4d, 0x7, 0x79, 0x71, 0xb2, 0x3f, 0xef, 0x38, 0x1f, 0xc5, 0xcf, 0xd, 0xf8, 0x4c, 0xfd, 0x36, 0x7d, 0x76, 0xb4, 0x1f, 0x4d, 0x6d, 0x67, 0x31, 0x89, 0xf0, 0x44, 0xd9, 0x3f, 0x77, 0x7d, 0x17, 0xe9, 0x97, 0x20, 0xc8, 0x2d, 0x33, 0xd6, 0xec, 0x28, 0xfe, 0x91, 0x8f, 0x4c, 0xd0, 0xff, 0x86, 0x62, 0x1c, 0x3, 0xcf, 0xbc, 0xb0, 0x1b, 0xb, 0xa7, 0x63, 0x3, 0xe1, 0x1b, 0xad, 0xd5, 0x3e, 0x44, 0x7e, 0x15, 0xf0, 0x25, 0xce, 0x78, 0x2b, 0xae, 0x2f, 0x8, 0xc5, 0x24, 0x52, 0x70, 0x2c, 0x37, 0x75, 0xb4, 0x1f, 0x14, 0x38, 0xaa, 0xd3, 0xab, 0x4d, 0xf1, 0x62, 0x98, 0xe7, 0xd1, 0xa7, 0x62, 0x52, 0xc8, 0xe9, 0x1c, 0x8b, 0xf2, 0xd8, 0x39, 0x1d, 0xa4, 0xf3, 0x1, 0xee, 0xaa, 0xc7, 0x23, 0x2a, 0xf5, 0x43, 0xf9, 0x4, 0xe0, 0x8b, 0x60, 0x7f, 0x3, 0x41, 0xfb, 0x87, 0x9c, 0xe0, 0xa0, 0xc9, 0x47, 0x9d, 0xbe, 0x9d, 0x78, 0x1c, 0x8c, 0xbe, 0xf4, 0xe6, 0x53, 0x2c, 0xc6, 0x31, 0x7a, 0x10, 0x70, 0x18, 0x2b, 0x9c, 0x26, 0x4a, 0x59, 0xee, 0x8a, 0xb, 0xe5, 0xbe, 0x74, 0x43, 0xf7, 0x5a, 0xf0, 0x39, 0xb0, 0x5, 0x4, 0xf9, 0xe4, 0x18, 0x6b, 0x10, 0x72, 0x40, 0xf5, 0xbf, 0xa7, 0x90, 0xb7, 0x51, 0x7e, 0xcf, 0x58, 0x83, 0x80, 0xb3, 0x45, 0x1f, 0x96, 0x74, 0xbe, 0x6, 0x7b, 0xf, 0xc5, 0x75, 0xe0, 0x2c, 0x70, 0x2a, 0x90, 0x3c, 0xec, 0xe2, 0x1b, 0x5f, 0x52, 0x8c, 0xe9, 0xc3, 0xb1, 0x79, 0x4f, 0xf1, 0x52, 0x14, 0x3f, 0xc, 0xfd, 0x1a, 0xf9, 0x8b, 0x1c, 0x86, 0x6, 0x23, 0x2d, 0x10, 0xb2, 0xf7, 0x88, 0x91, 0xc9, 0xb4, 0x7f, 0x3d, 0x5e, 0x7c, 0xfe, 0x3e, 0x6, 0xfc, 0x2e, 0xe1, 0x1f, 0x3a, 0x3e, 0x1, 0x7c, 0x2a, 0xac, 0x6, 0x27, 0x3, 0xdf, 0x59, 0x7e, 0x2b, 0x70, 0xf2, 0xe5, 0xf6, 0xf0, 0xf7, 0x4c, 0xcf, 0xa, 0x7, 0x55, 0x3b, 0xfd, 0x29, 0x1f, 0x14, 0x31, 0x1e, 0xe6, 0x96, 0x26, 0x67, 0x70, 0x23, 0x0, 0xbb, 0x91, 0xbf, 0xd, 0x2e, 0xa7, 0xce, 0x83, 0x32, 0x2e, 0x74, 0x63, 0xe9, 0xd3, 0x81, 0xea, 0xd0, 0xce, 0xce, 0x3, 0x67, 0x83, 0x55, 0xc0, 0x4e, 0xd5, 0xfb, 0xde, 0x82, 0x68, 0x6e, 0xd, 0x57, 0xc8, 0x55, 0xd0, 0xc6, 0xc7, 0x97, 0x83, 0x19, 0xd7, 0x80, 0x7c, 0xb3, 0x26, 0xae, 0xcb, 0x11, 0x4, 0xb3, 0xe0, 0x5b, 0xe8, 0x6f, 0x87, 0x2f, 0xfa, 0xdb, 0xa4, 0xb6, 0x43, 0x13, 0x11, 0x7e, 0x5, 0xb8, 0x18, 0x3c, 0x8, 0x9a, 0xe4, 0x21, 0xe5, 0x2a, 0x78, 0x5a, 0x7b, 0x58, 0x79, 0x80, 0x55, 0x27, 0xfe, 0x28, 0x7, 0x23, 0x6d, 0xf5, 0x55, 0xde, 0x4c, 0x75, 0x1d, 0x74, 0x17, 0xc2, 0x6, 0x60, 0xb0, 0x13, 0x21, 0x1b, 0xfc, 0x89, 0x50, 0xed, 0x8c, 0xa0, 0x23, 0x5f, 0x4, 0xfb, 0x30, 0x38, 0x1f, 0xcc, 0x80, 0x72, 0x1b, 0xb8, 0x52, 0x41, 0x55, 0x3b, 0xda, 0xb0, 0x58, 0x55, 0x31, 0xea, 0x9b, 0xbc, 0x99, 0x31, 0x65, 0x16, 0x35, 0x27, 0xf7, 0x3b, 0x1a, 0x5f, 0x5, 0xae, 0xc3, 0xef, 0x53, 0x3a, 0xa2, 0xf, 0xc7, 0xe1, 0xcb, 0x69, 0x63, 0x39, 0xf, 0xf4, 0xd9, 0x24, 0xcf, 0x8, 0x67, 0xe1, 0x60, 0xaa, 0x8e, 0xd0, 0x1d, 0x4d, 0xf9, 0x74, 0x70, 0xe, 0x38, 0x13, 0x9c, 0x4, 0x9a, 0xe4, 0xa0, 0x9a, 0x13, 0xd4, 0x97, 0x3e, 0xbd, 0x31, 0xb6, 0xd, 0xda, 0x6d, 0xd6, 0x16, 0xb5, 0x1d, 0xe8, 0x37, 0x1, 0xbf, 0xee, 0x6f, 0xa6, 0x6d, 0xfa, 0x35, 0xc, 0x3f, 0xda, 0xfb, 0x5b, 0xe3, 0xa2, 0xbf, 0x45, 0x62, 0x7f, 0x50, 0x54, 0xd, 0x2a, 0x7, 0xc4, 0xe7, 0xb1, 0x1, 0xa9, 0x26, 0x88, 0xde, 0xa7, 0x85, 0x2f, 0x88, 0xcd, 0x80, 0xb5, 0xe0, 0xd, 0xc0, 0xb3, 0x63, 0x14, 0xfa, 0x37, 0x8d, 0xb7, 0x81, 0xbb, 0xc1, 0x6d, 0xc0, 0x7f, 0xa2, 0x1e, 0x81, 0x27, 0xea, 0x1a, 0x4b, 0xd4, 0x4f, 0x82, 0x57, 0x81, 0x8, 0xe7, 0xc5, 0x20, 0x3c, 0xb8, 0x6a, 0xab, 0x4a, 0x9d, 0x5b, 0xe7, 0x44, 0x70, 0x4a, 0x86, 0x99, 0xe2, 0x93, 0xe5, 0x4, 0x70, 0x2c, 0x78, 0x19, 0xd0, 0xc6, 0x76, 0x4f, 0x82, 0x27, 0x80, 0xef, 0x5c, 0xfc, 0xb, 0xec, 0x2, 0xae, 0xbc, 0x1, 0xd8, 0xa, 0x1e, 0xc2, 0x7f, 0x5a, 0x79, 0xe4, 0x44, 0xf8, 0x4f, 0x19, 0x40, 0xa1, 0xb6, 0x18, 0xb9, 0x7a, 0xa2, 0xec, 0x7f, 0x27, 0x77, 0xca, 0xf8, 0x2b, 0x28, 0xe6, 0x63, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; + + + + + (NSData *)twitter_icon3x_png { + return [NSData dataWithBytes:twitter_icon3x_png length:sizeof(twitter_icon3x_png)]; + } + +@end diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Other/ParseUI.h b/BreakingBad/Pods/ParseUI/ParseUI/Other/ParseUI.h new file mode 100644 index 0000000..788a4b0 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Other/ParseUI.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Other/ParseUIConstants.h b/BreakingBad/Pods/ParseUI/ParseUI/Other/ParseUIConstants.h new file mode 100644 index 0000000..19cfa1d --- /dev/null +++ b/BreakingBad/Pods/ParseUI/ParseUI/Other/ParseUIConstants.h @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2014, Parse, LLC. All rights reserved. + * + * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, + * copy, modify, and distribute this software in source code or binary form for use + * in connection with the web services and APIs provided by Parse. + * + * As with any software that integrates with the Parse platform, your use of + * this software is subject to the Parse Terms of Service + * [https://www.parse.com/about/terms]. This copyright 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. + * + */ + +#import +#import + +#ifndef ParseUI_ParseUIConstants_h +#define ParseUI_ParseUIConstants_h + +///-------------------------------------- +/// @name Deprecated Macros +///-------------------------------------- + +#ifndef PARSE_UI_DEPRECATED +# ifdef __deprecated_msg +# define PARSE_UI_DEPRECATED(_MSG) (deprecated(_MSG)) +# else +# ifdef __deprecated +# define PARSE_UI_DEPRECATED(_MSG) (deprecated) +# else +# define PARSE_UI_DEPRECATED(_MSG) +# endif +# endif +#endif + +///-------------------------------------- +/// @name Nullability Support +///-------------------------------------- + +#if __has_feature(nullability) +# define PFUI_NULLABLE nullable +# define PFUI_NULLABLE_S __nullable +# define PFUI_NULL_UNSPECIFIED null_unspecified +# define PFUI_NULLABLE_PROPERTY nullable, +#else +# define PFUI_NULLABLE +# define PFUI_NULLABLE_S +# define PFUI_NULL_UNSPECIFIED +# define PFUI_NULLABLE_PROPERTY +#endif + +#if __has_feature(assume_nonnull) +# ifdef NS_ASSUME_NONNULL_BEGIN +# define PFUI_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN +# else +# define PFUI_ASSUME_NONNULL_BEGIN _Pragma("clang assume_nonnull begin") +# endif +# ifdef NS_ASSUME_NONNULL_END +# define PFUI_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END +# else +# define PFUI_ASSUME_NONNULL_END _Pragma("clang assume_nonnull end") +# endif +#else +# define PFUI_ASSUME_NONNULL_BEGIN +# define PFUI_ASSUME_NONNULL_END +#endif + +#endif diff --git a/BreakingBad/Pods/ParseUI/ParseUI/Resources/Localization/en.lproj/ParseUI.strings b/BreakingBad/Pods/ParseUI/ParseUI/Resources/Localization/en.lproj/ParseUI.strings new file mode 100644 index 0000000000000000000000000000000000000000..998662295e68838b7a263a8971d5cbcb8518aa52 GIT binary patch literal 6528 zcmd5>TTc@~6h6=ViVX=N@d18-F-m|EA^{Z8=hBu!EUmUh!k<^aZ^q%Ax$JhU<&vg! zcjnyhGyMLwEpMcf9qHq9BXfKwGM284u=+-}Wlh$LyX)A0hi~2PTVSpMpVUu5Z-&o3 zXiveX!ruYj2jEx9t$UsUW{9T>5{w;AM~(nLlta9K!Ri3`yH2_}@F$RPgtaMPRZe0K zK(PyWYH*L=xm@GPawLZt)~9kOy+@sAfVy^)R&og{11ATi96LGZ;91G0Y{&=v-Gb(7 zf#>CGZMzGJ$IxOBdCab=objrqvIpJnL1%>DuJh17tV1hX`!+!-mu9G#>xq1oWBB<* zc4QBpK9&PmHTZK6>-oOrRNl8d_DwVdy1J&c>{^VU+d*w(@dMnt)ZtIyrygRCkOODs zzI$Ul4xxA7d68M+vrsLe94q)_IVvR?|AmUxs)HzD%w0m7iF`9YOLvrez7tbqtPMep zH6g7S?;{S)ke1^jNGk!O?@Z2R2l03$`-n%if4-+&N_&mZaz zJw%C9h^Mr&PUOnjwj-YqcdVTc(6#1m!Ph+gi!S;m|qs+Y-qm5+ee|yo~*?qBGG5lhwQutgZ`lLbx_}=L25BoghfH}vi zGk5R*(}NiwLr@|w+LnEoyiyHH5LV_B`Do&UZ%VmvJvYNl zvC7GY^39@IW%ZPst!C%08FXOp;_Sz1YgN&=1zMrE=lXqi{Mc3NeP4-%YOj&?|8r|o zmtRd5NO77qy+z#8Q;cNRVXN(Gqdmki=YKzMlNTeTLe9je2RnJ6K4w5$Osnw)bR!?0 zcc>4u>@{f2Ot*5i*SLgfHP$Kjb?C}2F?gKN+v=HP)#=FU^TW+LzDCwZt?yfhh=q1@ zP<`a_yy>G+&!L?E`iQhp`L0|CsW5*{Af1nNRz|+@wAs!QtKwv>cK{j3_)d`tJ$PpX znL5~S7Z)Y;j0M`l-r3154+b`N@^3}w4V6O`rJ zaefY`nzWMnTL~MVtC_*Hm*poZ)uI{7Y7yp_%1toZYvXmLoUS*~DtRHsx1Orw5yM!1 zw&Jn2bI$GJ#OiN%80TSr^Et_!>H%Fu$%R$Vzo`h&-JrCWNy^wcw zSNKrwa4%J^pD!nYwLa_VPgryWxq0uWvNEURnrMAdUr$18ESjZh;gHoOTcq5*PiSkE zH}^|An<%W+%~tQ1;B7sS&p1yN|GB->X+&>Nm&pNEW1hSgXF|%a?~eRQ*~%BMTUr;0MAj-jHH12o?kK%{$5Z?RcM%~( literal 0 HcmV?d00001 diff --git a/BreakingBad/Pods/ParseUI/README.md b/BreakingBad/Pods/ParseUI/README.md new file mode 100644 index 0000000..7cb8a41 --- /dev/null +++ b/BreakingBad/Pods/ParseUI/README.md @@ -0,0 +1,115 @@ +# ParseUI + +[![Build Status](http://img.shields.io/travis/ParsePlatform/ParseUI-iOS/master.svg?style=flat)](https://travis-ci.org/ParsePlatform/ParseUI-iOS) +[![Pod Version](http://img.shields.io/cocoapods/v/ParseUI.svg?style=flat)](http://cocoadocs.org/docsets/ParseUI/) +[![Pod Platform](http://img.shields.io/cocoapods/p/ParseUI.svg?style=flat)](http://cocoadocs.org/docsets/ParseUI/) +[![Pod License](http://img.shields.io/cocoapods/l/ParseUI.svg?style=flat)](https://github.com/ParsePlatform/ParseUI-iOS/blob/master/LICENSE) + +## Overview + +`ParseUI` is a collection of a handy user interface components to be used with Parse iOS SDK, +which streamline and simplify logging in / signing up `PFUser`s and displaying a list of `PFObject`s. + +## Getting Started + +#### CocoaPods + +`ParseUI` is available on CocoaPods. +Add the following to your `Podfile`: + +```ruby +pod 'ParseUI' +``` + +#### Packaged Releases + +You can download the latest release in a form of `ParseUI.framework` from our [Releases](https://github.com/ParsePlatform/ParseUI-iOS/releases) page. + +Add `ParseUI.framework` to your Xcode project by dragging it into your project folder target, then add the following to any files that use `ParseUI` components: + + #import + +#### Build from Source + +`ParseUI` can also be built from source and supports Xcode subproject referencing. +Follow these steps to build and run via source code: +- Download the source code via `git clone` or in an archive +- Run `pod install` in the repo root to download all the dependencies +- Open `ParseUI.xcworkspace` +- Build and Run `ParseUIDemo` target + +## Components + +#### PFLogInViewController +If you are using Parse to manage users in your mobile app, you are already familiar with the `PFUser` class. +At some point in your app, you might want to present a screen to log in your `PFUser`. +`ParseUI` provides a view controller that does exactly this: +```objective-c +PFLogInViewController *logInViewController = [[PFLogInViewController alloc] init]; +logInViewController.delegate = self; +[self presentViewController:logInViewController animated:YES completion:nil]; +``` + +#### PFSignUpViewController +If you are using `PFLogInViewController` with the `PFLogInFieldsSignUpButton` option enabled, +you do not need to do any additional work to enable the sign up functionality. +When your user taps on the sign up button on the log in screen - a sign up screen will appear. +However, there are occasions where you might want to use the sign up screen independently of the log in screen. +This is when the `PFSignUpViewController` comes in handy. +```objective-c +PFSignUpViewController *controller = [[PFSignUpViewController alloc] init]; +controller.delegate = self; +[self presentViewController:controller animated:YES completion:nil]; +``` + +#### PFQueryTableViewController +Data oriented iOS applications are mostly a collection of `UITableViewController`s and corresponding `UITableView`s. +When using Parse, each cell of a `UITableView` typically represents data from a `PFObject`. +`PFQueryTableViewController` is a sub-class of `UITableViewController` that provides a layer of abstraction that lets you easily display data from one of your Parse classes. +```objective-c +PFQueryTableViewController *controller = [[PFQueryTableViewController alloc] initWithStyle:UITableViewStylePlain className:@"Todo"]; +[self presentViewController:controller animated:YES completion:nil]; +``` + +#### PFQueryCollectionViewController +A lot of advanced use cases usually include displaying data in a custom dynamic layout that is different from a simple list. +`PFQueryTableViewController` is a sub-class of `UICollectionViewController` that provides a layer of abstraction that lets you easily display data from one of your Parse classes in any dynamic and custom layout you might think of + +To display data in a simple grid layout you can use the default `UICollectionViewFlowLayout`: +```objective-c +PFQueryCollectionViewController *controller = [[PFQueryCollectionViewController alloc] initWithClassName:@"Todo"]; +UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout *)controller.collectionViewLayout; +flowLayout.itemSize = CGSizeMake(100.0f, 100.0f); +[self presentViewController:controller animated:YES completion:nil]; +``` + +And, for example, to display data in a circular layout - you can pass an instance of `UICollectionViewLayout` at initialization time: +```objective-c +UICollectionViewLayout *customCircularLayout = ...; +PFQueryCollectionViewController *controller = [[PFQueryCollectionViewController alloc] initWithCollectionViewLayout:customCircularLayout + className:@"Todo"]; +[self presentViewController:controller animated:YES completion:nil]; +``` + +#### PFImageView +Many apps need to display images stored in the Parse Cloud as `PFFile`s. +However, to load remote images with the built-in `UIImageView` involves writing many lines of boilerplate code. +`PFImageView` simplifies this task by abstracting away these parts. +```objective-c +PFImageView *imageView = [[PFImageView alloc] init]; +imageView.image = [UIImage imageNamed:@"..."]; // placeholder image +imageView.file = (PFFile *)someObject[@"picture"]; // remote image +[imageView loadInBackground]; +``` + +#### PFProductTableViewController +`PFProductTableViewController` is a subclass of `PFQueryTableViewController` that displays all IAP products in a table view. Some content apps, such as an app that sells comic books or video tutorials, may find it handy to use `PFProductTableViewController` to sell the products. By default, each cell is a product, and tapping on a cell initiates the purchase for the product. If the product has associated downloadable content, the download will start when the cell is selected and a progress bar is displayed to indicate the progress of the download. + +## Learn More +- Check out [ParseUIDemo](https://github.com/ParsePlatform/ParseUI-iOS/tree/master/ParseUIDemo) project +- Read the [iOS Guides](https://parse.com/docs/ios_guide#ui/iOS) +- Browse official [API Reference](https://parse.com/docs/ios/api/) +- Follow few [tutorials](https://parse.com/tutorials/) + +## Contributing +See the CONTRIBUTING file for how to help out. diff --git a/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-Private.xcconfig b/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-Private.xcconfig new file mode 100644 index 0000000..cf5336c --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-Private.xcconfig @@ -0,0 +1,6 @@ +#include "ParseUI.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/ParseUI" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = ${PARSEUI_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} +SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-dummy.m b/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-dummy.m new file mode 100644 index 0000000..c204211 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_ParseUI : NSObject +@end +@implementation PodsDummy_ParseUI +@end diff --git a/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-prefix.pch b/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-prefix.pch new file mode 100644 index 0000000..aa992a4 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI.xcconfig b/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI.xcconfig new file mode 100644 index 0000000..d856d00 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI.xcconfig @@ -0,0 +1 @@ +PARSEUI_OTHER_LDFLAGS = -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" \ No newline at end of file From f64708a9938ce22a1176b77724f31c287dea7548 Mon Sep 17 00:00:00 2001 From: Mesfin Date: Fri, 16 Oct 2015 12:44:34 -0400 Subject: [PATCH 25/44] Signup/Login Flow as well as saving objects to a user --- .../BreakingBad.xcodeproj/project.pbxproj | 6 + .../BreakingBad/Base.lproj/Main.storyboard | 52 ++++- .../BreakingBad/CustomModalViewController.m | 3 + .../CustomVCTransitionViewController.h | 4 +- .../CustomVCTransitionViewController.m | 20 ++ BreakingBad/BreakingBad/LoginViewController.h | 9 +- BreakingBad/BreakingBad/LoginViewController.m | 189 +++++++++--------- .../BreakingBad/SignUpViewController.h | 17 ++ .../BreakingBad/SignUpViewController.m | 83 ++++++++ BreakingBad/BreakingBad/ViewController.m | 26 ++- 10 files changed, 295 insertions(+), 114 deletions(-) create mode 100644 BreakingBad/BreakingBad/SignUpViewController.h create mode 100644 BreakingBad/BreakingBad/SignUpViewController.m diff --git a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj index 0580f13..21914e4 100644 --- a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj +++ b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj @@ -23,6 +23,7 @@ 5FEAE2711BCB126700201A0E /* DismissingAnimationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE2701BCB126700201A0E /* DismissingAnimationController.m */; }; DC22D49F1BCEE95A00D1E214 /* CheckProgressViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DC22D49E1BCEE95A00D1E214 /* CheckProgressViewController.m */; settings = {ASSET_TAGS = (); }; }; DC22D4A51BD0221200D1E214 /* LoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DC22D4A41BD0221200D1E214 /* LoginViewController.m */; settings = {ASSET_TAGS = (); }; }; + DC22D4A81BD1435000D1E214 /* SignUpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DC22D4A71BD1435000D1E214 /* SignUpViewController.m */; settings = {ASSET_TAGS = (); }; }; DC2DC1881BCAC00500A627E2 /* Habit.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC1871BCAC00500A627E2 /* Habit.m */; settings = {ASSET_TAGS = (); }; }; DC2DC18B1BCAC08700A627E2 /* Goal.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC18A1BCAC08700A627E2 /* Goal.m */; settings = {ASSET_TAGS = (); }; }; DC2DC18E1BCAC0A700A627E2 /* Entry.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC18D1BCAC0A700A627E2 /* Entry.m */; settings = {ASSET_TAGS = (); }; }; @@ -65,6 +66,8 @@ DC22D49E1BCEE95A00D1E214 /* CheckProgressViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CheckProgressViewController.m; sourceTree = ""; }; DC22D4A31BD0221200D1E214 /* LoginViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginViewController.h; sourceTree = ""; }; DC22D4A41BD0221200D1E214 /* LoginViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginViewController.m; sourceTree = ""; }; + DC22D4A61BD1435000D1E214 /* SignUpViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SignUpViewController.h; sourceTree = ""; }; + DC22D4A71BD1435000D1E214 /* SignUpViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SignUpViewController.m; sourceTree = ""; }; DC2DC1861BCAC00500A627E2 /* Habit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Habit.h; sourceTree = ""; }; DC2DC1871BCAC00500A627E2 /* Habit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Habit.m; sourceTree = ""; }; DC2DC1891BCAC08700A627E2 /* Goal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Goal.h; sourceTree = ""; }; @@ -163,6 +166,8 @@ 5FEAE2631BCB055A00201A0E /* CustomModalViewController.m */, DC22D4A31BD0221200D1E214 /* LoginViewController.h */, DC22D4A41BD0221200D1E214 /* LoginViewController.m */, + DC22D4A61BD1435000D1E214 /* SignUpViewController.h */, + DC22D4A71BD1435000D1E214 /* SignUpViewController.m */, 5FEAE26C1BCB125100201A0E /* PresentingAnimationController.h */, 5FEAE26D1BCB125A00201A0E /* PresentingAnimationController.m */, 5FEAE26F1BCB126200201A0E /* DismissingAnimationController.h */, @@ -317,6 +322,7 @@ 5F9B08321BCDAD1500460FF2 /* MainPageVC.m in Sources */, DC2DC1911BCAE7E600A627E2 /* Step.m in Sources */, DC22D4A51BD0221200D1E214 /* LoginViewController.m in Sources */, + DC22D4A81BD1435000D1E214 /* SignUpViewController.m in Sources */, 5FEAE2641BCB055A00201A0E /* CustomModalViewController.m in Sources */, DC2DC18B1BCAC08700A627E2 /* Goal.m in Sources */, 5FEAE26E1BCB125A00201A0E /* PresentingAnimationController.m in Sources */, diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index f04299a..82f4fb3 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -43,8 +43,8 @@ - - + + @@ -59,8 +59,8 @@ - - - + + @@ -658,8 +671,8 @@ - + + + + + + @@ -1049,7 +1080,7 @@ - + @@ -1067,10 +1098,11 @@ - + +
diff --git a/BreakingBad/BreakingBad/CustomModalViewController.m b/BreakingBad/BreakingBad/CustomModalViewController.m index 1867446..6316cb4 100644 --- a/BreakingBad/BreakingBad/CustomModalViewController.m +++ b/BreakingBad/BreakingBad/CustomModalViewController.m @@ -47,6 +47,9 @@ @implementation CustomModalViewController // [super viewDidLoad]; //} +- (IBAction)cancelButtonTapped:(UIButton *)sender { + [self dismissViewControllerAnimated:YES completion:nil]; +} - (IBAction)signUpButtonTapped:(UIButton *)sender { diff --git a/BreakingBad/BreakingBad/CustomVCTransitionViewController.h b/BreakingBad/BreakingBad/CustomVCTransitionViewController.h index 97f81a2..9b6ae08 100644 --- a/BreakingBad/BreakingBad/CustomVCTransitionViewController.h +++ b/BreakingBad/BreakingBad/CustomVCTransitionViewController.h @@ -7,7 +7,7 @@ // #import - -@interface CustomVCTransitionViewController : UIViewController +#import +@interface CustomVCTransitionViewController : UIViewController @end diff --git a/BreakingBad/BreakingBad/CustomVCTransitionViewController.m b/BreakingBad/BreakingBad/CustomVCTransitionViewController.m index f7a2543..db88111 100644 --- a/BreakingBad/BreakingBad/CustomVCTransitionViewController.m +++ b/BreakingBad/BreakingBad/CustomVCTransitionViewController.m @@ -11,6 +11,8 @@ #import "PresentingAnimationController.h" #import "DismissingAnimationController.h" #import "LoginViewController.h" +#import "LoginViewController.h" +#import "SignUpViewController.h" #import @implementation CustomVCTransitionViewController @@ -30,6 +32,24 @@ - (IBAction)didClickEnter:(id)sender { lvc.modalPresentationStyle = UIModalPresentationCustom; [self presentViewController:lvc animated:YES completion:nil]; +// if (![PFUser currentUser]) +// { // No user logged in +// // Create the log in view controller +// LoginViewController *logInViewController = [[LoginViewController alloc] init]; +// [logInViewController setDelegate:self]; // Set ourselves as the delegate +// logInViewController.transitioningDelegate = self; +// logInViewController.modalPresentationStyle = UIModalPresentationCustom; +// // Create the sign up view controller +// SignUpViewController *signUpViewController = [[SignUpViewController alloc] init]; +// [signUpViewController setDelegate:self]; // Set ourselves as the delegate +// +// // Assign our sign up controller to be displayed from the login contr oller +// [logInViewController setSignUpController:signUpViewController]; +// +// // Present the log in view controller +// [self presentViewController:logInViewController animated:YES completion:NULL]; +// } + } diff --git a/BreakingBad/BreakingBad/LoginViewController.h b/BreakingBad/BreakingBad/LoginViewController.h index d871d11..502ce5f 100644 --- a/BreakingBad/BreakingBad/LoginViewController.h +++ b/BreakingBad/BreakingBad/LoginViewController.h @@ -10,11 +10,10 @@ #import #import -@interface LoginViewController : PFLogInViewController -< -PFSignUpViewControllerDelegate, -PFLogInViewControllerDelegate -> +@interface LoginViewController : UIViewController +//< +//PFLogInViewControllerDelegate +//> @property (weak, nonatomic) IBOutlet UITextField *usernameTextField; @property (weak, nonatomic) IBOutlet UITextField *passwordTextField; diff --git a/BreakingBad/BreakingBad/LoginViewController.m b/BreakingBad/BreakingBad/LoginViewController.m index f919b80..ba8f431 100644 --- a/BreakingBad/BreakingBad/LoginViewController.m +++ b/BreakingBad/BreakingBad/LoginViewController.m @@ -9,95 +9,91 @@ #import "LoginViewController.h" #import "MainPageVC.h" #import "ViewController.h" +#import "SignUpViewController.h" @implementation LoginViewController -- (void)viewDidLoad{ +- (void)viewDidLoad +{ [super viewDidLoad]; - - [self.logInView setLogo:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"drugs"]]]; + // [self.logInView setLogo:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"drugs"]]]; } -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - - if (![PFUser currentUser]) { // No user logged in - // Create the log in view controller - PFLogInViewController *logInViewController = [[PFLogInViewController alloc] init]; - [logInViewController setDelegate:self]; // Set ourselves as the delegate - - // Create the sign up view controller - PFSignUpViewController *signUpViewController = [[PFSignUpViewController alloc] init]; - [signUpViewController setDelegate:self]; // Set ourselves as the delegate - - // Assign our sign up controller to be displayed from the login controller - [logInViewController setSignUpController:signUpViewController]; - - // Present the log in view controller - [self presentViewController:logInViewController animated:YES completion:NULL]; - } -} - -#pragma mark -#pragma PFLoginViewController Delegate - -// Sent to the delegate to determine whether the log in request should be submitted to the server. -- (BOOL)logInViewController:(PFLogInViewController *)logInController shouldBeginLogInWithUsername:(NSString *)username password:(NSString *)password { - // Check if both fields are completed - if (username && password && username.length != 0 && password.length != 0) { - return YES; // Begin login process - } - - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Missing Information" message:@"Make sure you fill out all of the information!" preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - [alertController dismissViewControllerAnimated:YES completion:nil]; - }]; +-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { - [alertController addAction:okAction]; - - [self presentViewController:alertController animated:YES completion:nil]; - return NO; // Interrupt login process + [self.usernameTextField resignFirstResponder]; + [self.passwordTextField resignFirstResponder]; } +// +////- (void)viewDidAppear:(BOOL)animated +////{ +//// [super viewDidAppear:animated]; +//// +//// if (![PFUser currentUser]) +//// { // No user logged in +//// // Create the log in view controller +//// PFLogInViewController *logInViewController = [[PFLogInViewController alloc] init]; +//// [logInViewController setDelegate:self]; // Set ourselves as the delegate +//// +//// // Create the sign up view controller +//// SignUpViewController *signUpViewController = [[SignUpViewController alloc] init]; +//// [signUpViewController setDelegate:self]; // Set ourselves as the delegate +//// +//// // Assign our sign up controller to be displayed from the login controller +//// [logInViewController setSignUpController:signUpViewController]; +//// +//// // Present the log in view controller +//// [self presentViewController:logInViewController animated:YES completion:NULL]; +//// } +////} +// +//#pragma mark +//#pragma PFLoginViewController Delegate +// +//// Sent to the delegate to determine whether the log in request should be submitted to the server. +//- (BOOL)logInViewController:(PFLogInViewController *)logInController shouldBeginLogInWithUsername:(NSString *)username password:(NSString *)password +//{ +// // Check if both fields are completed +// if (username && password && username.length != 0 && password.length != 0) +// { +// return YES; // Begin login process +// } +// +// UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Missing Information" message:@"Make sure you fill out all of the information!" preferredStyle:UIAlertControllerStyleAlert]; +// +// UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) +// { +// [alertController dismissViewControllerAnimated:YES completion:nil]; +// }]; +// +// [alertController addAction:okAction]; +// +// [self presentViewController:alertController animated:YES completion:nil]; +// return NO; // Interrupt login process +//} // Sent to the delegate when a PFUser is logged in. -- (void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user { - MainPageVC *mvc = (MainPageVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"showMainPgVC"]; - [self presentViewController:mvc animated:YES completion:nil]; - //[self dismissViewControllerAnimated:YES completion:NULL]; -} - -// Sent to the delegate when the log in attempt fails. -- (void)logInViewController:(PFLogInViewController *)logInController didFailToLogInWithError:(NSError *)error { - NSLog(@"Failed to log in because of error %@", error.localizedDescription); -} - -// Sent to the delegate when the log in screen is dismissed. -- (void)logInViewControllerDidCancelLogIn:(PFLogInViewController *)logInController { - ViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerID"]; - [self presentViewController:vc animated:YES completion:nil]; -#warning not going back to View Controller currently -} - -#pragma mark -#pragma PFSignUpViewController Delegate - -// Sent to the delegate to determine whether the sign up request should be submitted to the server. -- (BOOL)signUpViewController:(PFSignUpViewController *)signUpController shouldBeginSignUp:(NSDictionary *)info { - BOOL informationComplete = YES; +- (IBAction)loginButtonTapped:(UIButton *)sender +{ + NSString *password = self.passwordTextField.text; + NSString *username = self.usernameTextField.text; - // loop through all of the submitted data - for (id key in info) { - NSString *field = [info objectForKey:key]; - if (!field || field.length == 0) { // check completion - informationComplete = NO; - break; - } + if ((username && username.length) && (password && password.length)) + { + PFUser *thisUser = [PFUser user]; + + thisUser.username = username; + thisUser.password = password; + + [PFUser logInWithUsernameInBackground:thisUser.username password:thisUser.password block:^(PFUser * _Nullable user, NSError * _Nullable error) { + MainPageVC *mvc = (MainPageVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"showMainPgVC"]; + [self presentViewController:mvc animated:YES completion:nil]; + }]; } - - // Display an alert if a field wasn't completed - if (!informationComplete) { - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Missing Information" message:@"Make sure you fill out all of the information!" preferredStyle:UIAlertControllerStyleAlert]; + else + { + + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Error" message:@"The password field is either empty or does not match the confirm password field" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { [alertController dismissViewControllerAnimated:YES completion:nil]; @@ -108,26 +104,29 @@ - (BOOL)signUpViewController:(PFSignUpViewController *)signUpController shouldBe [self presentViewController:alertController animated:YES completion:nil]; } - return informationComplete; -} - -// Sent to the delegate when a PFUser is signed up. -- (void)signUpViewController:(PFSignUpViewController *)signUpController didSignUpUser:(PFUser *)user { - MainPageVC *mvc = (MainPageVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"showMainPgVC"]; - [self presentViewController:mvc animated:YES completion:nil]; - [self dismissViewControllerAnimated:YES completion:nil]; - // Dismiss the PFSignUpViewController -} - -// Sent to the delegate when the sign up attempt fails. -- (void)signUpViewController:(PFSignUpViewController *)signUpController didFailToSignUpWithError:(NSError *)error { - NSLog(@"Failed to sign up because of error %@...", error.localizedDescription); } -// Sent to the delegate when the sign up screen is dismissed. -- (void)signUpViewControllerDidCancelSignUp:(PFSignUpViewController *)signUpController { - NSLog(@"User dismissed the signUpViewController"); -} +//-(void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user +//{ +// MainPageVC *mvc = (MainPageVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"showMainPgVC"]; +// [self presentViewController:mvc animated:YES completion:nil]; +// [self dismissViewControllerAnimated:YES completion:NULL]; +//} +// +//// Sent to the delegate when the log in attempt fails. +//- (void)logInViewController:(PFLogInViewController *)logInController didFailToLogInWithError:(NSError *)error +//{ +// NSLog(@"Failed to log in because of error %@", error.localizedDescription); +//} +// +//// Sent to the delegate when the log in screen is dismissed. +//- (void)logInViewControllerDidCancelLogIn:(PFLogInViewController *)logInController { +// // ViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerID"]; +// // [self presentViewController:vc animated:YES completion:nil]; +// +// [self.navigationController popViewControllerAnimated:YES]; +//#warning not going back to View Controller currently +//} diff --git a/BreakingBad/BreakingBad/SignUpViewController.h b/BreakingBad/BreakingBad/SignUpViewController.h new file mode 100644 index 0000000..e033e7e --- /dev/null +++ b/BreakingBad/BreakingBad/SignUpViewController.h @@ -0,0 +1,17 @@ +// +// SignUpViewController.h +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/16/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "PFSignUpViewController.h" +#import + +@interface SignUpViewController : PFSignUpViewController +< +PFSignUpViewControllerDelegate +> + +@end diff --git a/BreakingBad/BreakingBad/SignUpViewController.m b/BreakingBad/BreakingBad/SignUpViewController.m new file mode 100644 index 0000000..21dc9e6 --- /dev/null +++ b/BreakingBad/BreakingBad/SignUpViewController.m @@ -0,0 +1,83 @@ +// +// SignUpViewController.m +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/16/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "SignUpViewController.h" +#import "MainPageVC.h" + +@interface SignUpViewController () + +@end + +@implementation SignUpViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self.signUpView setLogo:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"drugs"]]]; +} + + + + +// +// +//#pragma mark +//#pragma PFSignUpViewController Delegate +// +//// Sent to the delegate to determine whether the sign up request should be submitted to the server. +//- (BOOL)signUpViewController:(PFSignUpViewController *)signUpController shouldBeginSignUp:(NSDictionary *)info { +// BOOL informationComplete = YES; +// +// // loop through all of the submitted data +// for (id key in info) { +// NSString *field = [info objectForKey:key]; +// if (!field || field.length == 0) { // check completion +// informationComplete = NO; +// break; +// } +// } +// +// // Display an alert if a field wasn't completed +// if (!informationComplete) { +// UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Missing Information" message:@"Make sure you fill out all of the information!" preferredStyle:UIAlertControllerStyleAlert]; +// +// UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { +// [alertController dismissViewControllerAnimated:YES completion:nil]; +// }]; +// +// [alertController addAction:okAction]; +// +// [self presentViewController:alertController animated:YES completion:nil]; +// } +// +// return informationComplete; +//} +// +//// Sent to the delegate when a PFUser is signed up. +//- (void)signUpViewController:(PFSignUpViewController *)signUpController didSignUpUser:(PFUser *)user { +// MainPageVC *mvc = (MainPageVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"showMainPgVC"]; +// [self presentViewController:mvc animated:YES completion:nil]; +// [self dismissViewControllerAnimated:YES completion:nil]; +// // Dismiss the PFSignUpViewController +//} +// +//// Sent to the delegate when the sign up attempt fails. +//- (void)signUpViewController:(PFSignUpViewController *)signUpController didFailToSignUpWithError:(NSError *)error { +// NSLog(@"Failed to sign up because of error %@...", error.localizedDescription); +//} +// +//// Sent to the delegate when the sign up screen is dismissed. +//- (void)signUpViewControllerDidCancelSignUp:(PFSignUpViewController *)signUpController { +// NSLog(@"User dismissed the signUpViewController"); +// [self.navigationController popViewControllerAnimated:YES]; +// +//} + + + +@end diff --git a/BreakingBad/BreakingBad/ViewController.m b/BreakingBad/BreakingBad/ViewController.m index 64b5261..be79a41 100644 --- a/BreakingBad/BreakingBad/ViewController.m +++ b/BreakingBad/BreakingBad/ViewController.m @@ -29,6 +29,10 @@ @interface ViewController () Date: Fri, 16 Oct 2015 15:59:28 -0400 Subject: [PATCH 26/44] Made major changes --- BreakingBad/.swp | Bin 0 -> 12288 bytes .../save.imageset/Contents.json | 21 +++ .../save.imageset/Save as-50.png | Bin 0 -> 513 bytes .../BreakingBad/Base.lproj/Main.storyboard | 34 +++- .../BreakingBad/CustomModalViewController.m | 4 + .../CustomVCTransitionViewController.m | 63 ++++---- BreakingBad/BreakingBad/Entry.h | 1 + BreakingBad/BreakingBad/Habit.h | 3 +- BreakingBad/BreakingBad/LoginViewController.m | 19 +++ BreakingBad/BreakingBad/MainPageVC.m | 146 +++++++++++++++++- BreakingBad/BreakingBad/SharedManager.h | 3 + BreakingBad/BreakingBad/ViewController.m | 46 +++++- 12 files changed, 287 insertions(+), 53 deletions(-) create mode 100644 BreakingBad/.swp create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/save.imageset/Contents.json create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/save.imageset/Save as-50.png diff --git a/BreakingBad/.swp b/BreakingBad/.swp new file mode 100644 index 0000000000000000000000000000000000000000..69506048708f61212dbb0f5a73de4f6b1f7cf546 GIT binary patch literal 12288 zcmeI%y^6v>6o%pBc3Uay4UA*EiW)_*)XGB8LMt18GRy3mM2IOY#7po}_5y937%c-9 zqRl&yd?a(2b9lOtWn(rRsczj9w@T?PTeGuB;K#;>_c!@DXiwtWs6VcC@@v>Z0D*T4 zd``Vqvyo0w)fH9#n!bA=`Xhh<0tg_000IagfWQj{cH4p+UB8c8&q7YVa3oqGfB*sr zAb@_QYmrk?cr89oo4R8h=xa%o=ya1=bhh{M|;1;;lbRMCP8b(0gfnDGjkb$B0DCd{C-N^ z?235@?~-Ma!B?peXdntD4cf&lGN`&0!nV&Ma>Tp_B!QumVjmsmz>TpNL;q|~KBG%3B>A_h{(JTXO@MG7feJ&jppRaG&K zs8yTUF(%*kNTy=5hnYoek7PSfc%ZqKxt6(>?UAJh{$FJG74~(1s);@RDs7G5X+!e; zQTR=Y*mGAUslA|@^Dq26JAsjM&wfp573O|(<)ZmFsL - + @@ -392,7 +392,7 @@ - + @@ -499,9 +499,9 @@ - @@ -785,10 +766,10 @@ - + @@ -817,10 +798,10 @@ - + @@ -849,10 +830,10 @@ - + @@ -881,10 +862,10 @@ - + @@ -913,10 +894,10 @@ - + @@ -1014,10 +995,11 @@ + + - @@ -1036,6 +1018,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1116,7 +1168,25 @@ - + + + + + + + + + + + + + + + + + + + diff --git a/BreakingBad/BreakingBad/CustomContextTableViewCell.xib b/BreakingBad/BreakingBad/CustomContextTableViewCell.xib index 789a20c..53e7eb8 100644 --- a/BreakingBad/BreakingBad/CustomContextTableViewCell.xib +++ b/BreakingBad/BreakingBad/CustomContextTableViewCell.xib @@ -23,7 +23,7 @@ diff --git a/BreakingBad/BreakingBad/EntryLogsTableViewController.h b/BreakingBad/BreakingBad/EntryLogsTableViewController.h new file mode 100644 index 0000000..0aeb9b6 --- /dev/null +++ b/BreakingBad/BreakingBad/EntryLogsTableViewController.h @@ -0,0 +1,16 @@ +// +// EntryLogsTableViewController.h +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/16/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import +#import "Habit.h" + +@interface EntryLogsTableViewController : UITableViewController + +@property (nonatomic) Habit *habit; + +@end diff --git a/BreakingBad/BreakingBad/EntryLogsTableViewController.m b/BreakingBad/BreakingBad/EntryLogsTableViewController.m new file mode 100644 index 0000000..ee7cd5d --- /dev/null +++ b/BreakingBad/BreakingBad/EntryLogsTableViewController.m @@ -0,0 +1,65 @@ +// +// EntryLogsTableViewController.m +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/16/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "EntryLogsTableViewController.h" +#import "Entry.h" +#import "Habit.h" +#import "MainPageVC.h" + +@interface EntryLogsTableViewController () + +@end + +@implementation EntryLogsTableViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + +} + + + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.habit.entries.count; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"entryCell" forIndexPath:indexPath]; + + + Entry *entry = self.habit.entries[indexPath.row]; + + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + dateFormatter.dateStyle = NSDateFormatterShortStyle; + + NSString *dateString = [dateFormatter stringFromDate:entry.createdAt]; + + cell.textLabel.text = dateString; + + return cell; +} + +-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ + MainPageVC *mainPageVC = (MainPageVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"showMainPgVC"]; + + mainPageVC.entry = self.habit.entries[indexPath.row]; + mainPageVC.readOnly = YES; + + [self.navigationController pushViewController:mainPageVC animated:YES]; + + +} + +@end diff --git a/BreakingBad/BreakingBad/MainPageVC.h b/BreakingBad/BreakingBad/MainPageVC.h index f403cc4..4961c18 100644 --- a/BreakingBad/BreakingBad/MainPageVC.h +++ b/BreakingBad/BreakingBad/MainPageVC.h @@ -7,7 +7,11 @@ // #import +#import "MyHabitsTVC.h" +#import "Entry.h" +@interface MainPageVC : UIViewController -@interface MainPageVC : UIViewController +@property (nonatomic) Entry *entry; +@property (nonatomic) BOOL readOnly; @end diff --git a/BreakingBad/BreakingBad/MainPageVC.m b/BreakingBad/BreakingBad/MainPageVC.m index 16b4522..15bc1b9 100644 --- a/BreakingBad/BreakingBad/MainPageVC.m +++ b/BreakingBad/BreakingBad/MainPageVC.m @@ -15,6 +15,7 @@ #import "CustomContextTableViewCell.h" #import "CheckProgressViewController.h" #import "QuestionDetailVC.h" +#import "MyHabitsTVC.h" @interface MainPageVC () < @@ -38,9 +39,13 @@ @interface MainPageVC () @property (nonatomic) NSArray *habitsArray; @property (nonatomic) BBUser *user; -@property (nonatomic) Entry *entry; @property (nonatomic) Habit *habit; +@property (nonatomic) NSString *habitName; + + +@property (weak, nonatomic) IBOutlet UILabel *habitLabel; + @end @@ -56,6 +61,11 @@ - (IBAction)questionButtonTapped:(UIButton *)sender { qvc.delegate = self; qvc.tag = sender.tag; + UILabel *currentAnswerLabel = self.reply[sender.tag]; + if (currentAnswerLabel.text) { + qvc.answer = currentAnswerLabel.text; + } + [self presentViewController:qvc animated:YES completion:nil]; } @@ -94,8 +104,8 @@ - (IBAction)menuButtonTapped:(UIButton *)sender { [self.contextMenuTableView registerNib:cellNib forCellReuseIdentifier:@"contextMenuCellReuseId"]; } // it is better to use this method only for proper animation + self.contextMenuTableView.animationDuration = 0.15; [self.contextMenuTableView showInView:self.view withEdgeInsets:UIEdgeInsetsZero animated:YES]; - } - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{ @@ -200,6 +210,14 @@ -(void)answersFromPreviousScreen{ } } +#pragma mark +#pragma MyHabits Delegate Method + +-(void)pickedAHabit:(MyHabitsTVC *)tvc withName:(NSString *)name{ + self.habitName = name; + self.habitLabel.text = name; +} + #pragma mark - YALContextMenuTableViewDelegate @@ -210,6 +228,22 @@ - (void)contextMenuTableView:(YALContextMenuTableView *)contextMenuTableView did #pragma mark - UITableViewDataSource, UITableViewDelegate - (void)tableView:(YALContextMenuTableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + + self.contextMenuTableView.animationDuration = 0.02; + + if (indexPath.row == 1) { + + UINavigationController *navigationController = (UINavigationController *)[self.storyboard instantiateViewControllerWithIdentifier:@"habitsSegue"]; + + + MyHabitsTVC *controller = (MyHabitsTVC *)navigationController.topViewController; + controller.habitsArray = self.habitsArray; + controller.delegate = self; + + [self presentViewController:navigationController animated:YES completion:nil]; + + } + if(indexPath.row == 2){ CheckProgressViewController *cp = (CheckProgressViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"checkProgressID"]; [self presentViewController:cp animated:YES completion:nil]; @@ -219,8 +253,10 @@ - (void)tableView:(YALContextMenuTableView *)tableView didSelectRowAtIndexPath:( } [tableView dismisWithIndexPath:indexPath]; + } + - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 65; } @@ -248,11 +284,39 @@ - (UITableViewCell *)tableView:(YALContextMenuTableView *)tableView cellForRowAt #pragma mark #pragma Life Cycle Methods +-(void)viewWillAppear:(BOOL)animated{ + [super viewWillAppear:animated]; + if (self.readOnly) { + self.habitPickerView.hidden = YES; + self.habitLabel.hidden = NO; + self.habitLabel.text = self.habitName; + NSArray *allKeys = [self.entry.logs allKeys]; + + for(NSString *key in allKeys){ + NSInteger tag = [key integerValue]; + + for(int i=0; i < self.questionsArray.count; i++) + { + UIButton *currentButton = (UIButton *)self.questionsArray[i]; + if(tag == currentButton.tag) + { + UILabel *currentLabel = (UILabel *)self.reply[i]; + currentLabel.text = [self.entry.logs objectForKey:key]; + } + } + + } + } +} + - (void)viewDidLoad{ [super viewDidLoad]; self.habitPickerView.delegate = self; [self answersFromPreviousScreen]; [self initiateMenuOptions]; + [[self.navigationController navigationBar]setHidden:YES]; + + self.habitLabel.hidden = YES; // self.habitsArray = [NSMutableArray new]; @@ -278,6 +342,7 @@ - (void)viewDidLoad{ __weak typeof(self) weakSelf = self; PFQuery *query = [PFQuery queryWithClassName:@"Habit"]; + [query includeKey:@"entries"]; [query findObjectsInBackgroundWithBlock:^(NSArray * _Nullable objects, NSError * _Nullable error) { weakSelf.habitsArray = objects; [weakSelf.habitPickerView reloadAllComponents]; @@ -321,4 +386,8 @@ - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComp } +-(void)prepareForSegue:(nonnull UIStoryboardSegue *)segue sender:(nullable id)sender { + +} + @end diff --git a/BreakingBad/BreakingBad/MyHabitsTVC.h b/BreakingBad/BreakingBad/MyHabitsTVC.h new file mode 100644 index 0000000..3791be7 --- /dev/null +++ b/BreakingBad/BreakingBad/MyHabitsTVC.h @@ -0,0 +1,21 @@ +// +// MyHabitsTVC.h +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/16/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import + +@class MyHabitsTVC; + +@protocol MyHabitsDelegate +- (void)pickedAHabit:(MyHabitsTVC *)tvc withName:(NSString *)name; +@end + +@interface MyHabitsTVC : UITableViewController + +@property (nonatomic) NSArray *habitsArray; +@property (nonatomic, weak) id delegate; +@end diff --git a/BreakingBad/BreakingBad/MyHabitsTVC.m b/BreakingBad/BreakingBad/MyHabitsTVC.m new file mode 100644 index 0000000..6fa385b --- /dev/null +++ b/BreakingBad/BreakingBad/MyHabitsTVC.m @@ -0,0 +1,113 @@ +// +// MyHabitsTVC.m +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/16/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "MyHabitsTVC.h" +#import "Habit.h" +#import "EntryLogsTableViewController.h" +#import + +@interface MyHabitsTVC () + +@end + +@implementation MyHabitsTVC + +- (void)viewDidLoad { + [super viewDidLoad]; + + + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { +#warning Incomplete implementation, return the number of sections + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { +#warning Incomplete implementation, return the number of rows + return self.habitsArray.count; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myHabitsCell" forIndexPath:indexPath]; + Habit *habit = self.habitsArray[indexPath.row]; + cell.textLabel.text = habit.name; + + return cell; +} + + +/* +// Override to support conditional editing of the table view. +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the specified item to be editable. + return YES; +} +*/ + +/* +// Override to support editing the table view. +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Delete the row from the data source + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + } else if (editingStyle == UITableViewCellEditingStyleInsert) { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } +} +*/ + +/* +// Override to support rearranging the table view. +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { +} +*/ + +/* +// Override to support conditional rearranging of the table view. +- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the item to be re-orderable. + return YES; +} +*/ + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ +- (IBAction)doneButtonTapped:(UIBarButtonItem *)sender { + [self dismissViewControllerAnimated:YES completion:nil]; +} + +-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ + EntryLogsTableViewController *eltvc = (EntryLogsTableViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"entryLogsID"]; + + eltvc.habit = self.habitsArray[indexPath.row]; + [self.delegate pickedAHabit:self withName:eltvc.habit.name]; + [self.navigationController pushViewController:eltvc animated:YES]; + +} +@end diff --git a/BreakingBad/BreakingBad/QuestionDetailVC.h b/BreakingBad/BreakingBad/QuestionDetailVC.h index f64e31d..9472e62 100644 --- a/BreakingBad/BreakingBad/QuestionDetailVC.h +++ b/BreakingBad/BreakingBad/QuestionDetailVC.h @@ -21,6 +21,7 @@ @property (weak, nonatomic) IBOutlet UITextView *answerTextView; @property (nonatomic) NSString *question; +@property (nonatomic) NSString *answer; @property (nonatomic, retain) NSString *data; @property (nonatomic, weak) id delegate; diff --git a/BreakingBad/BreakingBad/QuestionDetailVC.m b/BreakingBad/BreakingBad/QuestionDetailVC.m index 0fa298e..a752767 100644 --- a/BreakingBad/BreakingBad/QuestionDetailVC.m +++ b/BreakingBad/BreakingBad/QuestionDetailVC.m @@ -22,6 +22,9 @@ - (void)viewDidLoad{ [super viewDidLoad]; self.questionLabel.text = self.question; + if (self.answer) { + self.answerTextView.text = self.answer; + } } From 16eefc3fe12fa690ebdcdeca8e10dc29d0760b55 Mon Sep 17 00:00:00 2001 From: Zoufishan Mehdi Date: Fri, 16 Oct 2015 20:54:12 -0400 Subject: [PATCH 28/44] awesome sauce --- BreakingBad/BreakingBad/EntryLogsTableViewController.m | 1 + BreakingBad/BreakingBad/MainPageVC.h | 1 + BreakingBad/BreakingBad/MainPageVC.m | 4 +--- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/BreakingBad/BreakingBad/EntryLogsTableViewController.m b/BreakingBad/BreakingBad/EntryLogsTableViewController.m index ee7cd5d..5a62e38 100644 --- a/BreakingBad/BreakingBad/EntryLogsTableViewController.m +++ b/BreakingBad/BreakingBad/EntryLogsTableViewController.m @@ -56,6 +56,7 @@ -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath * mainPageVC.entry = self.habit.entries[indexPath.row]; mainPageVC.readOnly = YES; + mainPageVC.habitName = self.habit.name; [self.navigationController pushViewController:mainPageVC animated:YES]; diff --git a/BreakingBad/BreakingBad/MainPageVC.h b/BreakingBad/BreakingBad/MainPageVC.h index 4961c18..30d3c57 100644 --- a/BreakingBad/BreakingBad/MainPageVC.h +++ b/BreakingBad/BreakingBad/MainPageVC.h @@ -13,5 +13,6 @@ @property (nonatomic) Entry *entry; @property (nonatomic) BOOL readOnly; +@property (nonatomic) NSString *habitName; @end diff --git a/BreakingBad/BreakingBad/MainPageVC.m b/BreakingBad/BreakingBad/MainPageVC.m index 15bc1b9..30e3b85 100644 --- a/BreakingBad/BreakingBad/MainPageVC.m +++ b/BreakingBad/BreakingBad/MainPageVC.m @@ -41,7 +41,6 @@ @interface MainPageVC () @property (nonatomic) BBUser *user; @property (nonatomic) Habit *habit; -@property (nonatomic) NSString *habitName; @property (weak, nonatomic) IBOutlet UILabel *habitLabel; @@ -317,8 +316,7 @@ - (void)viewDidLoad{ [[self.navigationController navigationBar]setHidden:YES]; self.habitLabel.hidden = YES; - - + // self.habitsArray = [NSMutableArray new]; // HabitList *hl = [HabitList new]; // self.habitsArray = hl.habitsList; From 6a522d314fe0030304837c82187aa35abea125fd Mon Sep 17 00:00:00 2001 From: Zoufishan Mehdi Date: Fri, 16 Oct 2015 20:56:42 -0400 Subject: [PATCH 29/44] awesomer stuff --- BreakingBad/BreakingBad/MainPageVC.h | 3 +-- BreakingBad/BreakingBad/MainPageVC.m | 10 +--------- BreakingBad/BreakingBad/MyHabitsTVC.h | 5 ----- BreakingBad/BreakingBad/MyHabitsTVC.m | 1 - 4 files changed, 2 insertions(+), 17 deletions(-) diff --git a/BreakingBad/BreakingBad/MainPageVC.h b/BreakingBad/BreakingBad/MainPageVC.h index 30d3c57..34f3e32 100644 --- a/BreakingBad/BreakingBad/MainPageVC.h +++ b/BreakingBad/BreakingBad/MainPageVC.h @@ -7,9 +7,8 @@ // #import -#import "MyHabitsTVC.h" #import "Entry.h" -@interface MainPageVC : UIViewController +@interface MainPageVC : UIViewController @property (nonatomic) Entry *entry; @property (nonatomic) BOOL readOnly; diff --git a/BreakingBad/BreakingBad/MainPageVC.m b/BreakingBad/BreakingBad/MainPageVC.m index 30e3b85..e46404a 100644 --- a/BreakingBad/BreakingBad/MainPageVC.m +++ b/BreakingBad/BreakingBad/MainPageVC.m @@ -209,13 +209,7 @@ -(void)answersFromPreviousScreen{ } } -#pragma mark -#pragma MyHabits Delegate Method --(void)pickedAHabit:(MyHabitsTVC *)tvc withName:(NSString *)name{ - self.habitName = name; - self.habitLabel.text = name; -} #pragma mark - YALContextMenuTableViewDelegate @@ -236,9 +230,7 @@ - (void)tableView:(YALContextMenuTableView *)tableView didSelectRowAtIndexPath:( MyHabitsTVC *controller = (MyHabitsTVC *)navigationController.topViewController; - controller.habitsArray = self.habitsArray; - controller.delegate = self; - + controller.habitsArray = self.habitsArray; [self presentViewController:navigationController animated:YES completion:nil]; } diff --git a/BreakingBad/BreakingBad/MyHabitsTVC.h b/BreakingBad/BreakingBad/MyHabitsTVC.h index 3791be7..b2c6fa6 100644 --- a/BreakingBad/BreakingBad/MyHabitsTVC.h +++ b/BreakingBad/BreakingBad/MyHabitsTVC.h @@ -8,14 +8,9 @@ #import -@class MyHabitsTVC; -@protocol MyHabitsDelegate -- (void)pickedAHabit:(MyHabitsTVC *)tvc withName:(NSString *)name; -@end @interface MyHabitsTVC : UITableViewController @property (nonatomic) NSArray *habitsArray; -@property (nonatomic, weak) id delegate; @end diff --git a/BreakingBad/BreakingBad/MyHabitsTVC.m b/BreakingBad/BreakingBad/MyHabitsTVC.m index 6fa385b..63a6f3e 100644 --- a/BreakingBad/BreakingBad/MyHabitsTVC.m +++ b/BreakingBad/BreakingBad/MyHabitsTVC.m @@ -106,7 +106,6 @@ -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath * EntryLogsTableViewController *eltvc = (EntryLogsTableViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"entryLogsID"]; eltvc.habit = self.habitsArray[indexPath.row]; - [self.delegate pickedAHabit:self withName:eltvc.habit.name]; [self.navigationController pushViewController:eltvc animated:YES]; } From 5081b91c96ed7e7bb0cb8c693e2581f37426fd01 Mon Sep 17 00:00:00 2001 From: Mesfin Date: Sat, 17 Oct 2015 23:52:40 -0400 Subject: [PATCH 30/44] changed the context menu --- .../BreakingBad.xcodeproj/project.pbxproj | 10 ++ .../cancel.imageset/Contents.json | 2 +- .../check_progress.imageset/Contents.json | 2 +- .../clear-day.imageset/Contents.json | 21 +++ .../clear-day.imageset/clear-day@2x.png | Bin 0 -> 16949 bytes .../clear-night.imageset/Contents.json | 21 +++ .../clear-night.imageset/clear-night@2x.png | Bin 0 -> 14024 bytes .../cloudy.imageset/Contents.json | 21 +++ .../cloudy.imageset/cloudy@2x.png | Bin 0 -> 17541 bytes .../drugs.imageset/Contents.json | 2 +- .../fog.imageset/Contents.json | 21 +++ .../Assets.xcassets/fog.imageset/fog@2x.png | Bin 0 -> 16671 bytes .../goals.imageset/Contents.json | 2 +- .../info.imageset/Contents.json | 2 +- .../menu.imageset/Contents.json | 2 +- .../my_habits.imageset/Contents.json | 2 +- .../partly-cloudy-day.imageset/Contents.json | 21 +++ .../partly-cloudy-day@2x.png | Bin 0 -> 17860 bytes .../Contents.json | 21 +++ .../partly-cloudy-night@2x.png | Bin 0 -> 14816 bytes .../rain.imageset/Contents.json | 21 +++ .../Assets.xcassets/rain.imageset/rain@2x.png | Bin 0 -> 19734 bytes .../save.imageset/Contents.json | 2 +- .../settings.imageset/Contents.json | 22 +++ .../settings.imageset/settings@2x.png | Bin 0 -> 1410 bytes .../settings.imageset/settings@3x.png | Bin 0 -> 2345 bytes .../sleet.imageset/Contents.json | 21 +++ .../sleet.imageset/sleet@2x.png | Bin 0 -> 19354 bytes .../snow.imageset/Contents.json | 21 +++ .../Assets.xcassets/snow.imageset/snow@2x.png | Bin 0 -> 19165 bytes .../wind.imageset/Contents.json | 21 +++ .../Assets.xcassets/wind.imageset/wind@2x.png | Bin 0 -> 17363 bytes .../BreakingBad/Base.lproj/Main.storyboard | 127 ++++++++++-------- .../BreakingBad/CustomContextTableViewCell.h | 1 + .../BreakingBad/CustomContextTableViewCell.m | 2 +- .../CustomContextTableViewCell.xib | 64 ++++++--- .../BreakingBad/EntryLogsTableViewCell.h | 17 +++ .../BreakingBad/EntryLogsTableViewCell.m | 23 ++++ .../BreakingBad/EntryLogsTableViewCell.xib | 53 ++++++++ .../EntryLogsTableViewController.m | 90 ++++++++++++- BreakingBad/BreakingBad/MainPageVC.m | 19 +-- BreakingBad/BreakingBad/MyHabitsTVC.m | 2 + 42 files changed, 545 insertions(+), 111 deletions(-) create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/clear-day.imageset/Contents.json create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/clear-day.imageset/clear-day@2x.png create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/clear-night.imageset/Contents.json create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/clear-night.imageset/clear-night@2x.png create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/cloudy.imageset/Contents.json create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/cloudy.imageset/cloudy@2x.png create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/fog.imageset/Contents.json create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/fog.imageset/fog@2x.png create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/partly-cloudy-day.imageset/Contents.json create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/partly-cloudy-day.imageset/partly-cloudy-day@2x.png create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/partly-cloudy-night.imageset/Contents.json create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/partly-cloudy-night.imageset/partly-cloudy-night@2x.png create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/rain.imageset/Contents.json create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/rain.imageset/rain@2x.png create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/settings.imageset/Contents.json create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/settings.imageset/settings@2x.png create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/settings.imageset/settings@3x.png create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/sleet.imageset/Contents.json create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/sleet.imageset/sleet@2x.png create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/snow.imageset/Contents.json create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/snow.imageset/snow@2x.png create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/wind.imageset/Contents.json create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/wind.imageset/wind@2x.png create mode 100644 BreakingBad/BreakingBad/EntryLogsTableViewCell.h create mode 100644 BreakingBad/BreakingBad/EntryLogsTableViewCell.m create mode 100644 BreakingBad/BreakingBad/EntryLogsTableViewCell.xib diff --git a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj index 7bcb520..66d3656 100644 --- a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj +++ b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj @@ -31,6 +31,8 @@ DC2DC18E1BCAC0A700A627E2 /* Entry.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC18D1BCAC0A700A627E2 /* Entry.m */; settings = {ASSET_TAGS = (); }; }; DC2DC1911BCAE7E600A627E2 /* Step.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC1901BCAE7E600A627E2 /* Step.m */; settings = {ASSET_TAGS = (); }; }; DC2DC1941BCAEB8D00A627E2 /* BBUser.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC1931BCAEB8D00A627E2 /* BBUser.m */; settings = {ASSET_TAGS = (); }; }; + DC2FFC5D1BD2EF2700A876F8 /* EntryLogsTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2FFC5B1BD2EF2700A876F8 /* EntryLogsTableViewCell.m */; settings = {ASSET_TAGS = (); }; }; + DC2FFC5E1BD2EF2700A876F8 /* EntryLogsTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = DC2FFC5C1BD2EF2700A876F8 /* EntryLogsTableViewCell.xib */; settings = {ASSET_TAGS = (); }; }; DC51A76B1BCC4CD60044984B /* HabitList.m in Sources */ = {isa = PBXBuildFile; fileRef = DC51A76A1BCC4CD60044984B /* HabitList.m */; settings = {ASSET_TAGS = (); }; }; DCBA27C21BCDE85800E61721 /* SharedManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DCBA27C11BCDE85800E61721 /* SharedManager.m */; settings = {ASSET_TAGS = (); }; }; DCBA27C61BCED16E00E61721 /* CustomContextTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = DCBA27C41BCED16E00E61721 /* CustomContextTableViewCell.m */; settings = {ASSET_TAGS = (); }; }; @@ -84,6 +86,9 @@ DC2DC1901BCAE7E600A627E2 /* Step.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Step.m; sourceTree = ""; }; DC2DC1921BCAEB8D00A627E2 /* BBUser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBUser.h; sourceTree = ""; }; DC2DC1931BCAEB8D00A627E2 /* BBUser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBUser.m; sourceTree = ""; }; + DC2FFC5A1BD2EF2700A876F8 /* EntryLogsTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EntryLogsTableViewCell.h; sourceTree = ""; }; + DC2FFC5B1BD2EF2700A876F8 /* EntryLogsTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EntryLogsTableViewCell.m; sourceTree = ""; }; + DC2FFC5C1BD2EF2700A876F8 /* EntryLogsTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = EntryLogsTableViewCell.xib; sourceTree = ""; }; DC51A7691BCC4CD60044984B /* HabitList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HabitList.h; sourceTree = ""; }; DC51A76A1BCC4CD60044984B /* HabitList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HabitList.m; sourceTree = ""; }; DCBA27C01BCDE85800E61721 /* SharedManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SharedManager.h; sourceTree = ""; }; @@ -142,6 +147,9 @@ 5F058DEF1BD1912C001D93B2 /* MyHabitsTVC.m */, 5FDF1A2A1BD1B7E200720A44 /* EntryLogsTableViewController.h */, 5FDF1A2B1BD1B7E200720A44 /* EntryLogsTableViewController.m */, + DC2FFC5A1BD2EF2700A876F8 /* EntryLogsTableViewCell.h */, + DC2FFC5B1BD2EF2700A876F8 /* EntryLogsTableViewCell.m */, + DC2FFC5C1BD2EF2700A876F8 /* EntryLogsTableViewCell.xib */, DCBA27C31BCED16E00E61721 /* CustomContextTableViewCell.h */, DCBA27C41BCED16E00E61721 /* CustomContextTableViewCell.m */, DCBA27C51BCED16E00E61721 /* CustomContextTableViewCell.xib */, @@ -280,6 +288,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + DC2FFC5E1BD2EF2700A876F8 /* EntryLogsTableViewCell.xib in Resources */, 5F8FF9AA1BC9A9CD00855DFB /* LaunchScreen.storyboard in Resources */, 5F8FF9A71BC9A9CD00855DFB /* Assets.xcassets in Resources */, DCBA27C71BCED16E00E61721 /* CustomContextTableViewCell.xib in Resources */, @@ -348,6 +357,7 @@ 5F8FF9A51BC9A9CD00855DFB /* BreakingBad.xcdatamodeld in Sources */, 5FEAE2711BCB126700201A0E /* DismissingAnimationController.m in Sources */, DC2DC1941BCAEB8D00A627E2 /* BBUser.m in Sources */, + DC2FFC5D1BD2EF2700A876F8 /* EntryLogsTableViewCell.m in Sources */, DC51A76B1BCC4CD60044984B /* HabitList.m in Sources */, 5F8FF9991BC9A9CD00855DFB /* main.m in Sources */, ); diff --git a/BreakingBad/BreakingBad/Assets.xcassets/cancel.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/cancel.imageset/Contents.json index 44cb34c..004a02d 100644 --- a/BreakingBad/BreakingBad/Assets.xcassets/cancel.imageset/Contents.json +++ b/BreakingBad/BreakingBad/Assets.xcassets/cancel.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", - "filename" : "Delete-50.png", "scale" : "1x" }, { "idiom" : "universal", + "filename" : "Delete-50.png", "scale" : "2x" }, { diff --git a/BreakingBad/BreakingBad/Assets.xcassets/check_progress.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/check_progress.imageset/Contents.json index de5485a..faffb9f 100644 --- a/BreakingBad/BreakingBad/Assets.xcassets/check_progress.imageset/Contents.json +++ b/BreakingBad/BreakingBad/Assets.xcassets/check_progress.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", - "filename" : "Positive Dynamic-50.png", "scale" : "1x" }, { "idiom" : "universal", + "filename" : "Positive Dynamic-50.png", "scale" : "2x" }, { diff --git a/BreakingBad/BreakingBad/Assets.xcassets/clear-day.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/clear-day.imageset/Contents.json new file mode 100644 index 0000000..c68e211 --- /dev/null +++ b/BreakingBad/BreakingBad/Assets.xcassets/clear-day.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "clear-day@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/BreakingBad/BreakingBad/Assets.xcassets/clear-day.imageset/clear-day@2x.png b/BreakingBad/BreakingBad/Assets.xcassets/clear-day.imageset/clear-day@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..37c51314f0b46fd3baf69abc8c9bbf82c8282d8c GIT binary patch literal 16949 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 literal 0 HcmV?d00001 diff --git a/BreakingBad/BreakingBad/Assets.xcassets/clear-night.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/clear-night.imageset/Contents.json new file mode 100644 index 0000000..3ada36f --- /dev/null +++ b/BreakingBad/BreakingBad/Assets.xcassets/clear-night.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "clear-night@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/BreakingBad/BreakingBad/Assets.xcassets/clear-night.imageset/clear-night@2x.png b/BreakingBad/BreakingBad/Assets.xcassets/clear-night.imageset/clear-night@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..72074ad8e2211f485c25ec91b921a4e98a51a6c9 GIT binary patch literal 14024 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 F{{Yt8d6NJD literal 0 HcmV?d00001 diff --git a/BreakingBad/BreakingBad/Assets.xcassets/cloudy.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/cloudy.imageset/Contents.json new file mode 100644 index 0000000..e2e4856 --- /dev/null +++ b/BreakingBad/BreakingBad/Assets.xcassets/cloudy.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "cloudy@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/BreakingBad/BreakingBad/Assets.xcassets/cloudy.imageset/cloudy@2x.png b/BreakingBad/BreakingBad/Assets.xcassets/cloudy.imageset/cloudy@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..092c6a521232321700cb78e9b2bfc084fa57bba7 GIT binary patch literal 17541 zcmW(-1ymbN7X<>rf?M!F@ghM=aR^e}ifeI)LJ98fuEk5S7MHeAq`{%MQ{1Jv6qi5W ze{!-pXOo?snSJx-z5DJ>jE0 u5@_3JMCIqJr#O6ckjf|K3? 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 literal 0 HcmV?d00001 diff --git a/BreakingBad/BreakingBad/Assets.xcassets/goals.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/goals.imageset/Contents.json index 78e7a69..173b235 100644 --- a/BreakingBad/BreakingBad/Assets.xcassets/goals.imageset/Contents.json +++ b/BreakingBad/BreakingBad/Assets.xcassets/goals.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", - "filename" : "Todo List-50.png", "scale" : "1x" }, { "idiom" : "universal", + "filename" : "Todo List-50.png", "scale" : "2x" }, { diff --git a/BreakingBad/BreakingBad/Assets.xcassets/info.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/info.imageset/Contents.json index 1ad3f6e..781166b 100644 --- a/BreakingBad/BreakingBad/Assets.xcassets/info.imageset/Contents.json +++ b/BreakingBad/BreakingBad/Assets.xcassets/info.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", - "filename" : "Info Squared-50.png", "scale" : "1x" }, { "idiom" : "universal", + "filename" : "Info Squared-50.png", "scale" : "2x" }, { diff --git a/BreakingBad/BreakingBad/Assets.xcassets/menu.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/menu.imageset/Contents.json index c1a7c64..c4a6f8c 100644 --- a/BreakingBad/BreakingBad/Assets.xcassets/menu.imageset/Contents.json +++ b/BreakingBad/BreakingBad/Assets.xcassets/menu.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", - "filename" : "Menu-50.png", "scale" : "1x" }, { "idiom" : "universal", + "filename" : "Menu-50.png", "scale" : "2x" }, { diff --git a/BreakingBad/BreakingBad/Assets.xcassets/my_habits.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/my_habits.imageset/Contents.json index 63ed5c9..5c8162d 100644 --- a/BreakingBad/BreakingBad/Assets.xcassets/my_habits.imageset/Contents.json +++ b/BreakingBad/BreakingBad/Assets.xcassets/my_habits.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", - "filename" : "Meditation Guru-50.png", "scale" : "1x" }, { "idiom" : "universal", + "filename" : "Meditation Guru-50.png", "scale" : "2x" }, { diff --git a/BreakingBad/BreakingBad/Assets.xcassets/partly-cloudy-day.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/partly-cloudy-day.imageset/Contents.json new file mode 100644 index 0000000..5ebca62 --- /dev/null +++ b/BreakingBad/BreakingBad/Assets.xcassets/partly-cloudy-day.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "partly-cloudy-day@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/BreakingBad/BreakingBad/Assets.xcassets/partly-cloudy-day.imageset/partly-cloudy-day@2x.png b/BreakingBad/BreakingBad/Assets.xcassets/partly-cloudy-day.imageset/partly-cloudy-day@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9848d7642f3cac5dc61cebf2521b3114ccb61dc1 GIT binary patch literal 17860 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 literal 0 HcmV?d00001 diff --git a/BreakingBad/BreakingBad/Assets.xcassets/rain.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/rain.imageset/Contents.json new file mode 100644 index 0000000..8d3f7a0 --- /dev/null +++ b/BreakingBad/BreakingBad/Assets.xcassets/rain.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "rain@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/BreakingBad/BreakingBad/Assets.xcassets/rain.imageset/rain@2x.png b/BreakingBad/BreakingBad/Assets.xcassets/rain.imageset/rain@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1a6f2512f6400d8fda4ac26c10dac52e78ce6dc7 GIT binary patch literal 19734 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 Eg7WoxNB{r; literal 0 HcmV?d00001 diff --git a/BreakingBad/BreakingBad/Assets.xcassets/save.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/save.imageset/Contents.json index eb4bb9a..f6bcbcd 100644 --- a/BreakingBad/BreakingBad/Assets.xcassets/save.imageset/Contents.json +++ b/BreakingBad/BreakingBad/Assets.xcassets/save.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", - "filename" : "Save as-50.png", "scale" : "1x" }, { "idiom" : "universal", + "filename" : "Save as-50.png", "scale" : "2x" }, { diff --git a/BreakingBad/BreakingBad/Assets.xcassets/settings.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/settings.imageset/Contents.json new file mode 100644 index 0000000..224bf4d --- /dev/null +++ b/BreakingBad/BreakingBad/Assets.xcassets/settings.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "settings@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "settings@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/BreakingBad/BreakingBad/Assets.xcassets/settings.imageset/settings@2x.png b/BreakingBad/BreakingBad/Assets.xcassets/settings.imageset/settings@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3804f53e7fe8d83b061ddcf94a5fd03ea936ae33 GIT binary patch literal 1410 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 P00000NkvXXu0mjfIsSh? literal 0 HcmV?d00001 diff --git a/BreakingBad/BreakingBad/Assets.xcassets/sleet.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/sleet.imageset/Contents.json new file mode 100644 index 0000000..1d97a7b --- /dev/null +++ b/BreakingBad/BreakingBad/Assets.xcassets/sleet.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "sleet@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/BreakingBad/BreakingBad/Assets.xcassets/sleet.imageset/sleet@2x.png b/BreakingBad/BreakingBad/Assets.xcassets/sleet.imageset/sleet@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a552f980791cc4694f238b12d43e705a65447ae7 GIT binary patch literal 19354 zcmXV21yqym+lMh=^cdZv5u`(!(H$ZvDIg#nqq`fWySt=w(jbk5w6uhDgCHT_-v9Zw zvuEe*?2hN&9oH|eMQdp&;$c%_qoAPRDJ#ioqoAOI{(FHike?L)v3*9qp}J}-%AnLv zQXin8z)+Osq;yBiCQ7=iy<^_g3n$-plpmTDD9#ju}hkXxsR6vhroCn;`2= zDp@|waAnAz@r6;a=VQ9(ZBOrWjaLu)^X}T!vz7RBkdxHq)|H0X$-qOq)bnGL*Gj9y z;LYLuN|ck391xHO+c8t*(yK4nTK7HkC$Cxujd-(xzk+TJ?lg<)J-M>Od>+FtV_(OU zc>R9Dc{I73)s*72T}51!87)ktIpCwJLcg1(%@dpW-^>S)uQvHwTLY0zAO5@-6(8JN@r z`%9AG_{y&;#4U;Hmoc2xt2W}S#hF_sN5VOkq?K`UF{%knN4E9%4Y5>*<68UCSd9Hf zI2!Uk!iwp1ILAoH$mp=c9MFNb=oYr&1UGYv?!#?0cPv&Pp$81&b(<}g<7rz)jMP}m zwH>GIB9wDYq-oIi8j(O&$(OR7`W4SF!6o|g^78iSM0BJ7rtp9-gGcaI%}ZworSo!^9m9KA*yCti=^rQGaSPV11tR?Nl(9_It_ z5hirF?QV+VMs~8|>i2}?n^MZUlpfJwF%GB(@gjZg$Q!+f?Wm+1O z^VW|8G3?a+w+x?B-LXpIv|cK+*|6pB$B8Ff(Os;MfJ5A)oG<6UhD zZlM^4+dHFq33<*zSiW2liu9VAJ)Yx*UsF66u->wRW2cxkL2vUgYVn4|8KpxI@&4QM zJABEz&F3x0T~cge)OF5a5IEyIw#?8W`F9EU&CuW)1_e*XD8;A2(_W4iyT$jL-L0?C zKz>g*i=P`-T!fMm_LF84Q0t#47kP||p*u#!>npzZ;Cdi~KRGrRz0aTHpR^EPNVvv` z3)!m`r~2`8zP#ZNX%9UpF^&2NFp8�Br}_@4d}{gok@gaC95Wm07XE=PdhlD3{I* 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 l1@{0a} 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 literal 0 HcmV?d00001 diff --git a/BreakingBad/BreakingBad/Assets.xcassets/wind.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/wind.imageset/Contents.json new file mode 100644 index 0000000..7a3c61e --- /dev/null +++ b/BreakingBad/BreakingBad/Assets.xcassets/wind.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "wind@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/BreakingBad/BreakingBad/Assets.xcassets/wind.imageset/wind@2x.png b/BreakingBad/BreakingBad/Assets.xcassets/wind.imageset/wind@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..dca1ba6d6bcd252ea61b6b82cb48d07a145aedf0 GIT binary patch literal 17363 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 - + @@ -41,8 +41,8 @@ - - + + - - + + - - + + - - - - + + - - - - + + - - - - + + - - - - + + - - - - + + - - diff --git a/BreakingBad/BreakingBad/CustomContextTableViewCell.h b/BreakingBad/BreakingBad/CustomContextTableViewCell.h index 7f26407..289f9b1 100644 --- a/BreakingBad/BreakingBad/CustomContextTableViewCell.h +++ b/BreakingBad/BreakingBad/CustomContextTableViewCell.h @@ -13,5 +13,6 @@ @property (weak, nonatomic) IBOutlet UIImageView *menuTitleImage; @property (weak, nonatomic) IBOutlet UILabel *menuTitleLabel; +@property (weak, nonatomic) IBOutlet UIView *viewHoldingImageView; @end diff --git a/BreakingBad/BreakingBad/CustomContextTableViewCell.m b/BreakingBad/BreakingBad/CustomContextTableViewCell.m index b82dd27..8c29ef1 100644 --- a/BreakingBad/BreakingBad/CustomContextTableViewCell.m +++ b/BreakingBad/BreakingBad/CustomContextTableViewCell.m @@ -30,7 +30,7 @@ -(UIView *)animatedContent{ } -(UIView *)animatedIcon{ - return self.menuTitleImage; + return self.viewHoldingImageView; } diff --git a/BreakingBad/BreakingBad/CustomContextTableViewCell.xib b/BreakingBad/BreakingBad/CustomContextTableViewCell.xib index 53e7eb8..685542f 100644 --- a/BreakingBad/BreakingBad/CustomContextTableViewCell.xib +++ b/BreakingBad/BreakingBad/CustomContextTableViewCell.xib @@ -6,42 +6,62 @@ - - + + - + - - - - - - - - - - - - - - - + + + + + + - + + - + diff --git a/BreakingBad/BreakingBad/EntryLogsTableViewCell.h b/BreakingBad/BreakingBad/EntryLogsTableViewCell.h new file mode 100644 index 0000000..b09ff0e --- /dev/null +++ b/BreakingBad/BreakingBad/EntryLogsTableViewCell.h @@ -0,0 +1,17 @@ +// +// EntryLogsTableViewCell.h +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/17/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import + +@interface EntryLogsTableViewCell : UITableViewCell + +@property (weak, nonatomic) IBOutlet UIImageView *weatherIconImageView; +@property (weak, nonatomic) IBOutlet UILabel *tempInfoLabel; +@property (weak, nonatomic) IBOutlet UILabel *entryDateLabel; + +@end diff --git a/BreakingBad/BreakingBad/EntryLogsTableViewCell.m b/BreakingBad/BreakingBad/EntryLogsTableViewCell.m new file mode 100644 index 0000000..eebad18 --- /dev/null +++ b/BreakingBad/BreakingBad/EntryLogsTableViewCell.m @@ -0,0 +1,23 @@ +// +// EntryLogsTableViewCell.m +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/17/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "EntryLogsTableViewCell.h" + +@implementation EntryLogsTableViewCell + +- (void)awakeFromNib { + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/BreakingBad/BreakingBad/EntryLogsTableViewCell.xib b/BreakingBad/BreakingBad/EntryLogsTableViewCell.xib new file mode 100644 index 0000000..54a5a92 --- /dev/null +++ b/BreakingBad/BreakingBad/EntryLogsTableViewCell.xib @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BreakingBad/BreakingBad/EntryLogsTableViewController.m b/BreakingBad/BreakingBad/EntryLogsTableViewController.m index 5a62e38..4ab714d 100644 --- a/BreakingBad/BreakingBad/EntryLogsTableViewController.m +++ b/BreakingBad/BreakingBad/EntryLogsTableViewController.m @@ -10,19 +10,36 @@ #import "Entry.h" #import "Habit.h" #import "MainPageVC.h" +#import "EntryLogsTableViewCell.h" +#import @interface EntryLogsTableViewController () +@property (nonatomic) NSArray *data; + @end @implementation EntryLogsTableViewController - (void)viewDidLoad { [super viewDidLoad]; - + self.navigationItem.title = @"My Entries"; + + UINib *nib = [UINib nibWithNibName:@"EntryLogsTableViewCell" bundle:nil]; + [self.tableView registerNib:nib forCellReuseIdentifier:@"entryLogCellID"]; + + [self fetchWeatherData]; + } - +-(NSString *)stringFromTimeInterval:(NSTimeInterval)time{ + NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:time]; + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setDateFormat:@"EEEE"]; + NSString *dateName = [dateFormatter stringFromDate:date]; + + return dateName; +} #pragma mark - Table view data source @@ -36,17 +53,47 @@ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"entryCell" forIndexPath:indexPath]; +// UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"entryCell" forIndexPath:indexPath]; +// +// +// Entry *entry = self.habit.entries[indexPath.row]; +// +// NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; +// dateFormatter.dateStyle = NSDateFormatterShortStyle; +// +// NSString *dateString = [dateFormatter stringFromDate:entry.createdAt]; +// +// cell.textLabel.text = dateString; + + + + EntryLogsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"entryLogCellID" forIndexPath:indexPath]; + + NSDictionary *dict = self.data[indexPath.row]; + + //NSTimeInterval timeInterval = [dict[@"time"] doubleValue]; + + NSString *minTemp = [NSString stringWithFormat:@"%@",dict[@"temperatureMin"]]; + NSString *minTempShort = [NSString stringWithFormat:@"%.02f",[minTemp doubleValue]]; + + NSString *maxTemp = [NSString stringWithFormat:@"%@",dict[@"temperatureMax"] ]; + NSString *maxTempShort = [NSString stringWithFormat:@"%.02f",[maxTemp doubleValue]]; + + double avgTempDouble = ([minTempShort doubleValue] + [maxTempShort doubleValue])/2 ; + + NSString *avgTemp = [NSString stringWithFormat:@"%.01f",avgTempDouble]; Entry *entry = self.habit.entries[indexPath.row]; - NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - dateFormatter.dateStyle = NSDateFormatterShortStyle; + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + dateFormatter.dateStyle = NSDateFormatterShortStyle; - NSString *dateString = [dateFormatter stringFromDate:entry.createdAt]; + NSString *dateString = [dateFormatter stringFromDate:entry.createdAt]; - cell.textLabel.text = dateString; + cell.weatherIconImageView.image = [UIImage imageNamed:dict[@"icon"]]; + cell.tempInfoLabel.text = avgTemp; + cell.entryDateLabel.text = dateString; return cell; } @@ -63,4 +110,33 @@ -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath * } +-(void)fetchWeatherData{ + AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] init]; + NSDictionary *latitudeLongitudeDict = [[NSUserDefaults standardUserDefaults] objectForKey:@"dict"]; + + NSString *latitude = [latitudeLongitudeDict objectForKey:@"latitude"]; + NSString *longitude = [latitudeLongitudeDict objectForKey:@"longitude"]; + + NSString *url; + if(latitude && longitude && latitude.length && longitude.length) + { + // url =[NSString stringWithFormat:@"https://api.forecast.io/forecast/95ac0e76481513d58b808d31fba3a227/%@,%@",latitude,longitude]; + } + else + { + // url = [NSString stringWithFormat:@"https://api.forecast.io/forecast/95ac0e76481513d58b808d31fba3a227/%@,%@",self.latitude,self.longitude]; + } + url = @"https://api.forecast.io/forecast/95ac0e76481513d58b808d31fba3a227/-22,47"; + [manager GET:url parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { + + + NSDictionary *daily = responseObject[@"daily"]; + NSArray *data = daily[@"data"]; + self.data = data; + [self.tableView reloadData]; + } failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) { + NSLog(@"Error: %@", error.localizedDescription); + }]; +} + @end diff --git a/BreakingBad/BreakingBad/MainPageVC.m b/BreakingBad/BreakingBad/MainPageVC.m index e46404a..18516f4 100644 --- a/BreakingBad/BreakingBad/MainPageVC.m +++ b/BreakingBad/BreakingBad/MainPageVC.m @@ -27,7 +27,6 @@ @interface MainPageVC () > @property (weak, nonatomic) IBOutlet UIPickerView *habitPickerView; -@property (weak, nonatomic) IBOutlet UITextField *habitTextField; @property (weak, nonatomic) IBOutlet UIButton *doneButton; @property (strong, nonatomic) IBOutletCollection(UILabel) NSArray *reply; @@ -41,14 +40,10 @@ @interface MainPageVC () @property (nonatomic) BBUser *user; @property (nonatomic) Habit *habit; - - @property (weak, nonatomic) IBOutlet UILabel *habitLabel; @end - - @implementation MainPageVC #pragma mark @@ -67,7 +62,8 @@ - (IBAction)questionButtonTapped:(UIButton *)sender { [self presentViewController:qvc animated:YES completion:nil]; } - +#pragma mark +#pragma Question Detail View Delegate Method - (void)finishedAnswering:(QuestionDetailVC *)qvc withAnswer:(NSString *)answer { for(int i=0; i < self.questionsArray.count; i++) { @@ -94,9 +90,7 @@ - (void)finishedAnswering:(QuestionDetailVC *)qvc withAnswer:(NSString *)answer - (IBAction)menuButtonTapped:(UIButton *)sender { if(!self.contextMenuTableView){ self.contextMenuTableView = [[YALContextMenuTableView alloc] initWithTableViewDelegateDataSource:self]; - self.contextMenuTableView.animationDuration = 0.15; self.contextMenuTableView.delegate = self; - //register nib UINib *cellNib = [UINib nibWithNibName:@"CustomContextTableViewCell" bundle:nil]; @@ -261,9 +255,10 @@ - (UITableViewCell *)tableView:(YALContextMenuTableView *)tableView cellForRowAt CustomContextTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"contextMenuCellReuseId" forIndexPath:indexPath]; if (cell) { - cell.backgroundColor = [UIColor orangeColor]; + cell.backgroundColor = [UIColor clearColor]; cell.menuTitleLabel.text = [self.menuTitles objectAtIndex:indexPath.row]; cell.menuTitleImage.image = [self.menuIcons objectAtIndex:indexPath.row]; + cell.viewHoldingImageView.backgroundColor = [UIColor whiteColor]; } return cell; @@ -278,6 +273,7 @@ - (UITableViewCell *)tableView:(YALContextMenuTableView *)tableView cellForRowAt -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; if (self.readOnly) { + self.navigationController.navigationBar.hidden = NO; self.habitPickerView.hidden = YES; self.habitLabel.hidden = NO; self.habitLabel.text = self.habitName; @@ -338,11 +334,6 @@ - (void)viewDidLoad{ [weakSelf.habitPickerView reloadAllComponents]; }]; } - --(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { - [self.habitTextField resignFirstResponder]; -} - #pragma mark #pragma UIPickerView DataSource Methods diff --git a/BreakingBad/BreakingBad/MyHabitsTVC.m b/BreakingBad/BreakingBad/MyHabitsTVC.m index 63a6f3e..bda8f4c 100644 --- a/BreakingBad/BreakingBad/MyHabitsTVC.m +++ b/BreakingBad/BreakingBad/MyHabitsTVC.m @@ -20,6 +20,8 @@ @implementation MyHabitsTVC - (void)viewDidLoad { [super viewDidLoad]; + self.navigationItem.title = @"My Habits"; + // Uncomment the following line to preserve selection between presentations. // self.clearsSelectionOnViewWillAppear = NO; From ec0351a43c306bcb7c9db36441dc4642c685dc49 Mon Sep 17 00:00:00 2001 From: Mesfin Date: Sun, 18 Oct 2015 10:08:22 -0400 Subject: [PATCH 31/44] Fixed animation for context menu --- BreakingBad/BreakingBad/MainPageVC.m | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/BreakingBad/BreakingBad/MainPageVC.m b/BreakingBad/BreakingBad/MainPageVC.m index 18516f4..fc35cdb 100644 --- a/BreakingBad/BreakingBad/MainPageVC.m +++ b/BreakingBad/BreakingBad/MainPageVC.m @@ -91,6 +91,7 @@ - (IBAction)menuButtonTapped:(UIButton *)sender { if(!self.contextMenuTableView){ self.contextMenuTableView = [[YALContextMenuTableView alloc] initWithTableViewDelegateDataSource:self]; self.contextMenuTableView.delegate = self; + self.contextMenuTableView.animationDuration = 0.15; //register nib UINib *cellNib = [UINib nibWithNibName:@"CustomContextTableViewCell" bundle:nil]; @@ -216,16 +217,12 @@ - (void)contextMenuTableView:(YALContextMenuTableView *)contextMenuTableView did - (void)tableView:(YALContextMenuTableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - self.contextMenuTableView.animationDuration = 0.02; + //self.contextMenuTableView.animationDuration = 0.15; if (indexPath.row == 1) { + [tableView dismisWithIndexPath:indexPath]; - UINavigationController *navigationController = (UINavigationController *)[self.storyboard instantiateViewControllerWithIdentifier:@"habitsSegue"]; - - - MyHabitsTVC *controller = (MyHabitsTVC *)navigationController.topViewController; - controller.habitsArray = self.habitsArray; - [self presentViewController:navigationController animated:YES completion:nil]; + [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(showMyHabits) userInfo:nil repeats:NO]; } @@ -241,6 +238,16 @@ - (void)tableView:(YALContextMenuTableView *)tableView didSelectRowAtIndexPath:( } +- (void)showMyHabits{ + + UINavigationController *navigationController = (UINavigationController *)[self.storyboard instantiateViewControllerWithIdentifier:@"habitsSegue"]; + + MyHabitsTVC *controller = (MyHabitsTVC *)navigationController.topViewController; + controller.habitsArray = self.habitsArray; + + [self presentViewController:navigationController animated:YES completion:nil]; +} + - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 65; From ebf13a395a5c27e0835c137c122db173264831ed Mon Sep 17 00:00:00 2001 From: Mesfin Date: Sun, 18 Oct 2015 10:22:05 -0400 Subject: [PATCH 32/44] fixed look of context menu ui --- .../CustomContextTableViewCell.xib | 28 ++++++++++--------- BreakingBad/BreakingBad/MainPageVC.m | 2 +- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/BreakingBad/BreakingBad/CustomContextTableViewCell.xib b/BreakingBad/BreakingBad/CustomContextTableViewCell.xib index 685542f..b09565a 100644 --- a/BreakingBad/BreakingBad/CustomContextTableViewCell.xib +++ b/BreakingBad/BreakingBad/CustomContextTableViewCell.xib @@ -2,41 +2,43 @@ + - - + + - + - diff --git a/BreakingBad/BreakingBad/MainPageVC.m b/BreakingBad/BreakingBad/MainPageVC.m index fc35cdb..555fefe 100644 --- a/BreakingBad/BreakingBad/MainPageVC.m +++ b/BreakingBad/BreakingBad/MainPageVC.m @@ -250,7 +250,7 @@ - (void)showMyHabits{ - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - return 65; + return 50; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { From fc1181d186171e63bfae26c621c2b6693a0a2892 Mon Sep 17 00:00:00 2001 From: Zoufishan Mehdi Date: Mon, 19 Oct 2015 14:25:37 -0400 Subject: [PATCH 33/44] Working version of NYTimes API --- .../BreakingBad.xcodeproj/project.pbxproj | 36 +++++ .../Base.lproj/LaunchScreen.storyboard | 4 +- .../BreakingBad/Base.lproj/Main.storyboard | 90 ++++++++++++ BreakingBad/BreakingBad/HabitInfoData.h | 20 +++ BreakingBad/BreakingBad/HabitInfoData.m | 25 ++++ BreakingBad/BreakingBad/HabitInfoTVC.h | 15 ++ BreakingBad/BreakingBad/HabitInfoTVC.m | 72 ++++++++++ BreakingBad/BreakingBad/HabitNewsTVC.h | 19 +++ BreakingBad/BreakingBad/HabitNewsTVC.m | 132 ++++++++++++++++++ .../BreakingBad/HabitsNewsTableViewCell.h | 15 ++ .../BreakingBad/HabitsNewsTableViewCell.m | 23 +++ .../BreakingBad/HabitsNewsTableViewCell.xib | 47 +++++++ BreakingBad/BreakingBad/Info.plist | 5 + BreakingBad/BreakingBad/MainPageVC.m | 15 ++ BreakingBad/BreakingBad/MyHabitsTVC.m | 48 +------ 15 files changed, 517 insertions(+), 49 deletions(-) create mode 100644 BreakingBad/BreakingBad/HabitInfoData.h create mode 100644 BreakingBad/BreakingBad/HabitInfoData.m create mode 100644 BreakingBad/BreakingBad/HabitInfoTVC.h create mode 100644 BreakingBad/BreakingBad/HabitInfoTVC.m create mode 100644 BreakingBad/BreakingBad/HabitNewsTVC.h create mode 100644 BreakingBad/BreakingBad/HabitNewsTVC.m create mode 100644 BreakingBad/BreakingBad/HabitsNewsTableViewCell.h create mode 100644 BreakingBad/BreakingBad/HabitsNewsTableViewCell.m create mode 100644 BreakingBad/BreakingBad/HabitsNewsTableViewCell.xib diff --git a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj index 66d3656..941888b 100644 --- a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj +++ b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj @@ -19,6 +19,11 @@ 5F9B082F1BCC9ECD00460FF2 /* QuestionDetailVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F9B082E1BCC9ECC00460FF2 /* QuestionDetailVC.m */; }; 5F9B08321BCDAD1500460FF2 /* MainPageVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F9B08311BCDAD1500460FF2 /* MainPageVC.m */; }; 5FDF1A2C1BD1B7E200720A44 /* EntryLogsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FDF1A2B1BD1B7E200720A44 /* EntryLogsTableViewController.m */; settings = {ASSET_TAGS = (); }; }; + 5FE7B03A1BD3EF3200C5E163 /* HabitInfoData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FE7B0391BD3EF3200C5E163 /* HabitInfoData.m */; settings = {ASSET_TAGS = (); }; }; + 5FE7B0431BD41E1500C5E163 /* HabitInfoTVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FE7B0421BD41E1500C5E163 /* HabitInfoTVC.m */; settings = {ASSET_TAGS = (); }; }; + 5FE7B04C1BD5178D00C5E163 /* HabitNewsTVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FE7B04B1BD5178D00C5E163 /* HabitNewsTVC.m */; settings = {ASSET_TAGS = (); }; }; + 5FE7B0501BD51F4B00C5E163 /* HabitsNewsTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FE7B04E1BD51F4B00C5E163 /* HabitsNewsTableViewCell.m */; settings = {ASSET_TAGS = (); }; }; + 5FE7B0511BD51F4B00C5E163 /* HabitsNewsTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5FE7B04F1BD51F4B00C5E163 /* HabitsNewsTableViewCell.xib */; settings = {ASSET_TAGS = (); }; }; 5FEAE2611BCB053F00201A0E /* CustomVCTransitionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE2601BCB053F00201A0E /* CustomVCTransitionViewController.m */; }; 5FEAE2641BCB055A00201A0E /* CustomModalViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE2631BCB055A00201A0E /* CustomModalViewController.m */; }; 5FEAE26E1BCB125A00201A0E /* PresentingAnimationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAE26D1BCB125A00201A0E /* PresentingAnimationController.m */; }; @@ -61,6 +66,15 @@ 5F9B08311BCDAD1500460FF2 /* MainPageVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainPageVC.m; sourceTree = ""; }; 5FDF1A2A1BD1B7E200720A44 /* EntryLogsTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EntryLogsTableViewController.h; sourceTree = ""; }; 5FDF1A2B1BD1B7E200720A44 /* EntryLogsTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EntryLogsTableViewController.m; sourceTree = ""; }; + 5FE7B0381BD3EF3200C5E163 /* HabitInfoData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HabitInfoData.h; sourceTree = ""; }; + 5FE7B0391BD3EF3200C5E163 /* HabitInfoData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HabitInfoData.m; sourceTree = ""; }; + 5FE7B0411BD41E1500C5E163 /* HabitInfoTVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HabitInfoTVC.h; sourceTree = ""; }; + 5FE7B0421BD41E1500C5E163 /* HabitInfoTVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HabitInfoTVC.m; sourceTree = ""; }; + 5FE7B04A1BD5178D00C5E163 /* HabitNewsTVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HabitNewsTVC.h; sourceTree = ""; }; + 5FE7B04B1BD5178D00C5E163 /* HabitNewsTVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HabitNewsTVC.m; sourceTree = ""; }; + 5FE7B04D1BD51F4B00C5E163 /* HabitsNewsTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HabitsNewsTableViewCell.h; sourceTree = ""; }; + 5FE7B04E1BD51F4B00C5E163 /* HabitsNewsTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HabitsNewsTableViewCell.m; sourceTree = ""; }; + 5FE7B04F1BD51F4B00C5E163 /* HabitsNewsTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HabitsNewsTableViewCell.xib; sourceTree = ""; }; 5FEAE25F1BCB053F00201A0E /* CustomVCTransitionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomVCTransitionViewController.h; sourceTree = ""; }; 5FEAE2601BCB053F00201A0E /* CustomVCTransitionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomVCTransitionViewController.m; sourceTree = ""; }; 5FEAE2621BCB055A00201A0E /* CustomModalViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomModalViewController.h; sourceTree = ""; }; @@ -155,6 +169,7 @@ DCBA27C51BCED16E00E61721 /* CustomContextTableViewCell.xib */, DCBA27C01BCDE85800E61721 /* SharedManager.h */, DCBA27C11BCDE85800E61721 /* SharedManager.m */, + 5FE7B0371BD3EEF200C5E163 /* NYTimesAPI */, DC51A7651BCC1D4A0044984B /* BBModel */, 5FEAE26B1BCB0D7C00201A0E /* PopAnimation */, 5F8FF9A01BC9A9CD00855DFB /* Main.storyboard */, @@ -175,6 +190,22 @@ name = "Supporting Files"; sourceTree = ""; }; + 5FE7B0371BD3EEF200C5E163 /* NYTimesAPI */ = { + isa = PBXGroup; + children = ( + 5FE7B0381BD3EF3200C5E163 /* HabitInfoData.h */, + 5FE7B0391BD3EF3200C5E163 /* HabitInfoData.m */, + 5FE7B0411BD41E1500C5E163 /* HabitInfoTVC.h */, + 5FE7B0421BD41E1500C5E163 /* HabitInfoTVC.m */, + 5FE7B04A1BD5178D00C5E163 /* HabitNewsTVC.h */, + 5FE7B04B1BD5178D00C5E163 /* HabitNewsTVC.m */, + 5FE7B04D1BD51F4B00C5E163 /* HabitsNewsTableViewCell.h */, + 5FE7B04E1BD51F4B00C5E163 /* HabitsNewsTableViewCell.m */, + 5FE7B04F1BD51F4B00C5E163 /* HabitsNewsTableViewCell.xib */, + ); + name = NYTimesAPI; + sourceTree = ""; + }; 5FEAE26B1BCB0D7C00201A0E /* PopAnimation */ = { isa = PBXGroup; children = ( @@ -293,6 +324,7 @@ 5F8FF9A71BC9A9CD00855DFB /* Assets.xcassets in Resources */, DCBA27C71BCED16E00E61721 /* CustomContextTableViewCell.xib in Resources */, 5F8FF9A21BC9A9CD00855DFB /* Main.storyboard in Resources */, + 5FE7B0511BD51F4B00C5E163 /* HabitsNewsTableViewCell.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -337,14 +369,18 @@ buildActionMask = 2147483647; files = ( DC2DC1881BCAC00500A627E2 /* Habit.m in Sources */, + 5FE7B0431BD41E1500C5E163 /* HabitInfoTVC.m in Sources */, 5FEAE2611BCB053F00201A0E /* CustomVCTransitionViewController.m in Sources */, 5F9B08321BCDAD1500460FF2 /* MainPageVC.m in Sources */, DC2DC1911BCAE7E600A627E2 /* Step.m in Sources */, + 5FE7B0501BD51F4B00C5E163 /* HabitsNewsTableViewCell.m in Sources */, + 5FE7B04C1BD5178D00C5E163 /* HabitNewsTVC.m in Sources */, DC22D4A51BD0221200D1E214 /* LoginViewController.m in Sources */, DC22D4A81BD1435000D1E214 /* SignUpViewController.m in Sources */, 5FEAE2641BCB055A00201A0E /* CustomModalViewController.m in Sources */, DC2DC18B1BCAC08700A627E2 /* Goal.m in Sources */, 5FEAE26E1BCB125A00201A0E /* PresentingAnimationController.m in Sources */, + 5FE7B03A1BD3EF3200C5E163 /* HabitInfoData.m in Sources */, 5F8FF99F1BC9A9CD00855DFB /* ViewController.m in Sources */, 5F9B082F1BCC9ECD00460FF2 /* QuestionDetailVC.m in Sources */, DC22D49F1BCEE95A00D1E214 /* CheckProgressViewController.m in Sources */, diff --git a/BreakingBad/BreakingBad/Base.lproj/LaunchScreen.storyboard b/BreakingBad/BreakingBad/Base.lproj/LaunchScreen.storyboard index 2e721e1..5a9c4a6 100644 --- a/BreakingBad/BreakingBad/Base.lproj/LaunchScreen.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/LaunchScreen.storyboard @@ -1,7 +1,7 @@ - + - + diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index b474437..442f880 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -29,6 +29,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1197,6 +1269,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/BreakingBad/BreakingBad/HabitInfoData.h b/BreakingBad/BreakingBad/HabitInfoData.h new file mode 100644 index 0000000..e59559e --- /dev/null +++ b/BreakingBad/BreakingBad/HabitInfoData.h @@ -0,0 +1,20 @@ +// +// HabitInfoData.h +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/18/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import + +@interface HabitInfoData : NSObject + +//add info properties to be used in instance type +@property (nonatomic) NSString *nyHeadline; +@property (nonatomic) NSString *nySnippet; +@property (nonatomic) NSString *nyUrl; + +- (instancetype)initWithJSON:(NSDictionary *)json; + +@end diff --git a/BreakingBad/BreakingBad/HabitInfoData.m b/BreakingBad/BreakingBad/HabitInfoData.m new file mode 100644 index 0000000..6cabe36 --- /dev/null +++ b/BreakingBad/BreakingBad/HabitInfoData.m @@ -0,0 +1,25 @@ +// +// HabitInfoData.m +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/18/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "HabitInfoData.h" + +@implementation HabitInfoData + +- (instancetype) initWithJSON:(NSDictionary *)json { + + if (self = [super init]) { + self.nyHeadline = json[@"headline"][@"main"]; + self.nySnippet = json[@"snippet"]; + self.nyUrl = json[@"web_url"]; + + return self; + } + return nil; +} + +@end diff --git a/BreakingBad/BreakingBad/HabitInfoTVC.h b/BreakingBad/BreakingBad/HabitInfoTVC.h new file mode 100644 index 0000000..45d29a0 --- /dev/null +++ b/BreakingBad/BreakingBad/HabitInfoTVC.h @@ -0,0 +1,15 @@ +// +// HabitInfoTVC.h +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/18/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import + +@interface HabitInfoTVC : UITableViewController + +@property (nonatomic) NSArray *habitsArray; + +@end diff --git a/BreakingBad/BreakingBad/HabitInfoTVC.m b/BreakingBad/BreakingBad/HabitInfoTVC.m new file mode 100644 index 0000000..bc72f03 --- /dev/null +++ b/BreakingBad/BreakingBad/HabitInfoTVC.m @@ -0,0 +1,72 @@ +// +// HabitInfoTVC.m +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/18/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "HabitInfoTVC.h" +#import +#import "HabitInfoData.h" +#import "Habit.h" + +#import "MyHabitsTVC.h" +#import "EntryLogsTableViewController.h" +#import +#import "HabitNewsTVC.h" + + +@interface HabitInfoTVC () + +@end + +@implementation HabitInfoTVC + +- (void)viewDidLoad { + [super viewDidLoad]; + +} + + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.habitsArray.count; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"habitInfoCell" forIndexPath:indexPath]; + + Habit *habit = self.habitsArray[indexPath.row]; + cell.textLabel.text = habit.name; + + return cell; + + } + +#pragma mark - Navigation + +-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ + + HabitNewsTVC *habNewsTVC = (HabitNewsTVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"habitsNewsTVC"]; + + habNewsTVC.data = self.habitsArray[indexPath.row]; + + [self.navigationController pushViewController:habNewsTVC animated:YES]; + +} + + +- (IBAction)doneButtonTapped:(UIBarButtonItem *)sender { + + [self dismissViewControllerAnimated:YES completion:nil]; +} + + +@end diff --git a/BreakingBad/BreakingBad/HabitNewsTVC.h b/BreakingBad/BreakingBad/HabitNewsTVC.h new file mode 100644 index 0000000..47cc177 --- /dev/null +++ b/BreakingBad/BreakingBad/HabitNewsTVC.h @@ -0,0 +1,19 @@ +// +// HabitNewsTVC.h +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/19/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import +#import "HabitInfoData.h" + +@interface HabitNewsTVC : UITableViewController + + +@property (nonatomic) HabitInfoData *data; +@property (nonatomic) NSMutableArray *searchResults; + + +@end diff --git a/BreakingBad/BreakingBad/HabitNewsTVC.m b/BreakingBad/BreakingBad/HabitNewsTVC.m new file mode 100644 index 0000000..16365be --- /dev/null +++ b/BreakingBad/BreakingBad/HabitNewsTVC.m @@ -0,0 +1,132 @@ +// +// HabitNewsTVC.m +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/19/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "HabitNewsTVC.h" +#import +#import "HabitInfoTVC.h" +#import +#import "HabitInfoData.h" +#import "HabitsNewsTableViewCell.h" +#import "Habit.h" + +@interface HabitNewsTVC () + + +@end + +@implementation HabitNewsTVC + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.navigationItem.title = @"Habit News"; + + UINib *nib = [UINib nibWithNibName:@"HabitsNewsTableViewCell" bundle:nil]; + [self.tableView registerNib:nib forCellReuseIdentifier:@"HabitsNewsCellID"]; + + [self fetchHabitInfo]; +} + + +#pragma mark- NYTimes API Request +//- (void)fetchHabitInfoData:(NSString *)searchTerm +// callbackBlock:(void(^)())block { +- (void)fetchHabitInfo{ + + // NSString *urlString = [NSString stringWithFormat:@"https://api.nytimes.com/svc/search/v2/articlesearch.json?fq=smoking&api-key=4aaf719230b21874acd05c657c680643:18:73243649", searchTerm]; + + + NSString *url = @"http://api.nytimes.com/svc/search/v2/articlesearch.json?fq=drinking&api-key=4aaf719230b21874acd05c657c680643:18:73243649" ; + + // NSString *encodedString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; + // + // NSURL *forecastURL = [NSURL URLWithString:encodedString]; + // NSString *myString = [forecastURL absoluteString]; + + + AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] init]; + + [manager GET:url parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { + + + NSDictionary *results = responseObject[@"response"]; + NSArray *docs = results[@"docs"]; + + + + // reset my array + self.searchResults = [[NSMutableArray alloc] init]; + + // loop through all json posts + for (NSDictionary *result in docs) { + // create new post from json + HabitInfoData *data = [[HabitInfoData alloc] initWithJSON:result]; + // add post to array + [self.searchResults addObject:data]; + NSLog(@"This is the habit info data: %@",data); + } + + + [self.tableView reloadData]; + NSLog(@"%@", results); + + } failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) { + NSLog(@"Error: %@", error.localizedDescription); + // block(); + }]; +} + + + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.searchResults.count; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + HabitsNewsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"HabitsNewsCellID" forIndexPath:indexPath]; + + + HabitInfoData *data = self.searchResults[indexPath.row]; + + cell.newsHeadlineLabel.text = data.nyHeadline; + cell.newsSnippetTextView.text = data.nySnippet; + + + return cell; +} + + + +- (IBAction)doneButtonTapped:(UIBarButtonItem *)sender { + + [self dismissViewControllerAnimated:YES completion:nil]; +} + + +-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ + + HabitInfoData *article = self.searchResults[indexPath.row]; + [[UIApplication sharedApplication] openURL:[NSURL URLWithString:article.nyUrl]]; +} + + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + return 140; +} + + + +@end diff --git a/BreakingBad/BreakingBad/HabitsNewsTableViewCell.h b/BreakingBad/BreakingBad/HabitsNewsTableViewCell.h new file mode 100644 index 0000000..2864b00 --- /dev/null +++ b/BreakingBad/BreakingBad/HabitsNewsTableViewCell.h @@ -0,0 +1,15 @@ +// +// HabitsNewsTableViewCell.h +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/19/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import + +@interface HabitsNewsTableViewCell : UITableViewCell +@property (weak, nonatomic) IBOutlet UILabel *newsHeadlineLabel; +@property (weak, nonatomic) IBOutlet UITextView *newsSnippetTextView; + +@end diff --git a/BreakingBad/BreakingBad/HabitsNewsTableViewCell.m b/BreakingBad/BreakingBad/HabitsNewsTableViewCell.m new file mode 100644 index 0000000..2ae5748 --- /dev/null +++ b/BreakingBad/BreakingBad/HabitsNewsTableViewCell.m @@ -0,0 +1,23 @@ +// +// HabitsNewsTableViewCell.m +// BreakingBad +// +// Created by Zoufishan Mehdi on 10/19/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "HabitsNewsTableViewCell.h" + +@implementation HabitsNewsTableViewCell + +- (void)awakeFromNib { + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/BreakingBad/BreakingBad/HabitsNewsTableViewCell.xib b/BreakingBad/BreakingBad/HabitsNewsTableViewCell.xib new file mode 100644 index 0000000..2629246 --- /dev/null +++ b/BreakingBad/BreakingBad/HabitsNewsTableViewCell.xib @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda. + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BreakingBad/BreakingBad/Info.plist b/BreakingBad/BreakingBad/Info.plist index 6905cc6..db26bc0 100644 --- a/BreakingBad/BreakingBad/Info.plist +++ b/BreakingBad/BreakingBad/Info.plist @@ -2,6 +2,11 @@ + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + CFBundleDevelopmentRegion en CFBundleExecutable diff --git a/BreakingBad/BreakingBad/MainPageVC.m b/BreakingBad/BreakingBad/MainPageVC.m index 555fefe..6935a72 100644 --- a/BreakingBad/BreakingBad/MainPageVC.m +++ b/BreakingBad/BreakingBad/MainPageVC.m @@ -16,6 +16,8 @@ #import "CheckProgressViewController.h" #import "QuestionDetailVC.h" #import "MyHabitsTVC.h" +#import "HabitInfoTVC.h" + @interface MainPageVC () < @@ -230,6 +232,17 @@ - (void)tableView:(YALContextMenuTableView *)tableView didSelectRowAtIndexPath:( CheckProgressViewController *cp = (CheckProgressViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"checkProgressID"]; [self presentViewController:cp animated:YES completion:nil]; } + + else if (indexPath.row == 4) { + + UINavigationController *navigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"HabitInfoNav"]; + + HabitInfoTVC *hInfo = (HabitInfoTVC *) navigationController.topViewController; + + hInfo.habitsArray = self.habitsArray; + + [self presentViewController:navigationController animated:YES completion:nil]; + } else if (indexPath.row == 5){ [self.user saveInBackground]; } @@ -238,6 +251,8 @@ - (void)tableView:(YALContextMenuTableView *)tableView didSelectRowAtIndexPath:( } + + - (void)showMyHabits{ UINavigationController *navigationController = (UINavigationController *)[self.storyboard instantiateViewControllerWithIdentifier:@"habitsSegue"]; diff --git a/BreakingBad/BreakingBad/MyHabitsTVC.m b/BreakingBad/BreakingBad/MyHabitsTVC.m index bda8f4c..f0c0b48 100644 --- a/BreakingBad/BreakingBad/MyHabitsTVC.m +++ b/BreakingBad/BreakingBad/MyHabitsTVC.m @@ -10,6 +10,7 @@ #import "Habit.h" #import "EntryLogsTableViewController.h" #import +#import @interface MyHabitsTVC () @@ -30,10 +31,6 @@ - (void)viewDidLoad { // self.navigationItem.rightBarButtonItem = self.editButtonItem; } -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} #pragma mark - Table view data source @@ -57,49 +54,6 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N } -/* -// Override to support conditional editing of the table view. -- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { - // Return NO if you do not want the specified item to be editable. - return YES; -} -*/ - -/* -// Override to support editing the table view. -- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { - if (editingStyle == UITableViewCellEditingStyleDelete) { - // Delete the row from the data source - [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; - } else if (editingStyle == UITableViewCellEditingStyleInsert) { - // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view - } -} -*/ - -/* -// Override to support rearranging the table view. -- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { -} -*/ - -/* -// Override to support conditional rearranging of the table view. -- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { - // Return NO if you do not want the item to be re-orderable. - return YES; -} -*/ - -/* -#pragma mark - Navigation - -// In a storyboard-based application, you will often want to do a little preparation before navigation -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - // Get the new view controller using [segue destinationViewController]. - // Pass the selected object to the new view controller. -} -*/ - (IBAction)doneButtonTapped:(UIBarButtonItem *)sender { [self dismissViewControllerAnimated:YES completion:nil]; } From 9c78d15e5dd62e0a0e1dfc29d7fc761a7564279f Mon Sep 17 00:00:00 2001 From: Mesfin Date: Mon, 19 Oct 2015 22:24:31 -0400 Subject: [PATCH 34/44] Weather api working --- .../BreakingBad.xcodeproj/project.pbxproj | 6 + BreakingBad/BreakingBad/Entry.h | 1 + BreakingBad/BreakingBad/Entry.m | 3 +- .../EntryLogsTableViewController.h | 2 + .../EntryLogsTableViewController.m | 157 +++++++++++------- BreakingBad/BreakingBad/FetchWeatherData.h | 26 +++ BreakingBad/BreakingBad/FetchWeatherData.m | 57 +++++++ BreakingBad/BreakingBad/Info.plist | 5 + BreakingBad/BreakingBad/MainPageVC.m | 110 ++++++------ BreakingBad/BreakingBad/MyHabitsTVC.m | 60 +------ BreakingBad/BreakingBad/SharedManager.h | 3 + 11 files changed, 252 insertions(+), 178 deletions(-) create mode 100644 BreakingBad/BreakingBad/FetchWeatherData.h create mode 100644 BreakingBad/BreakingBad/FetchWeatherData.m diff --git a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj index 66d3656..3fa3a8a 100644 --- a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj +++ b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj @@ -34,6 +34,7 @@ DC2FFC5D1BD2EF2700A876F8 /* EntryLogsTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2FFC5B1BD2EF2700A876F8 /* EntryLogsTableViewCell.m */; settings = {ASSET_TAGS = (); }; }; DC2FFC5E1BD2EF2700A876F8 /* EntryLogsTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = DC2FFC5C1BD2EF2700A876F8 /* EntryLogsTableViewCell.xib */; settings = {ASSET_TAGS = (); }; }; DC51A76B1BCC4CD60044984B /* HabitList.m in Sources */ = {isa = PBXBuildFile; fileRef = DC51A76A1BCC4CD60044984B /* HabitList.m */; settings = {ASSET_TAGS = (); }; }; + DCB5888F1BD562BA00777FF9 /* FetchWeatherData.m in Sources */ = {isa = PBXBuildFile; fileRef = DCB5888E1BD562BA00777FF9 /* FetchWeatherData.m */; settings = {ASSET_TAGS = (); }; }; DCBA27C21BCDE85800E61721 /* SharedManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DCBA27C11BCDE85800E61721 /* SharedManager.m */; settings = {ASSET_TAGS = (); }; }; DCBA27C61BCED16E00E61721 /* CustomContextTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = DCBA27C41BCED16E00E61721 /* CustomContextTableViewCell.m */; settings = {ASSET_TAGS = (); }; }; DCBA27C71BCED16E00E61721 /* CustomContextTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = DCBA27C51BCED16E00E61721 /* CustomContextTableViewCell.xib */; settings = {ASSET_TAGS = (); }; }; @@ -91,6 +92,8 @@ DC2FFC5C1BD2EF2700A876F8 /* EntryLogsTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = EntryLogsTableViewCell.xib; sourceTree = ""; }; DC51A7691BCC4CD60044984B /* HabitList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HabitList.h; sourceTree = ""; }; DC51A76A1BCC4CD60044984B /* HabitList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HabitList.m; sourceTree = ""; }; + DCB5888D1BD562BA00777FF9 /* FetchWeatherData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FetchWeatherData.h; sourceTree = ""; }; + DCB5888E1BD562BA00777FF9 /* FetchWeatherData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FetchWeatherData.m; sourceTree = ""; }; DCBA27C01BCDE85800E61721 /* SharedManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SharedManager.h; sourceTree = ""; }; DCBA27C11BCDE85800E61721 /* SharedManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SharedManager.m; sourceTree = ""; }; DCBA27C31BCED16E00E61721 /* CustomContextTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomContextTableViewCell.h; sourceTree = ""; }; @@ -145,6 +148,8 @@ 5F9B08311BCDAD1500460FF2 /* MainPageVC.m */, 5F058DEE1BD1912C001D93B2 /* MyHabitsTVC.h */, 5F058DEF1BD1912C001D93B2 /* MyHabitsTVC.m */, + DCB5888D1BD562BA00777FF9 /* FetchWeatherData.h */, + DCB5888E1BD562BA00777FF9 /* FetchWeatherData.m */, 5FDF1A2A1BD1B7E200720A44 /* EntryLogsTableViewController.h */, 5FDF1A2B1BD1B7E200720A44 /* EntryLogsTableViewController.m */, DC2FFC5A1BD2EF2700A876F8 /* EntryLogsTableViewCell.h */, @@ -357,6 +362,7 @@ 5F8FF9A51BC9A9CD00855DFB /* BreakingBad.xcdatamodeld in Sources */, 5FEAE2711BCB126700201A0E /* DismissingAnimationController.m in Sources */, DC2DC1941BCAEB8D00A627E2 /* BBUser.m in Sources */, + DCB5888F1BD562BA00777FF9 /* FetchWeatherData.m in Sources */, DC2FFC5D1BD2EF2700A876F8 /* EntryLogsTableViewCell.m in Sources */, DC51A76B1BCC4CD60044984B /* HabitList.m in Sources */, 5F8FF9991BC9A9CD00855DFB /* main.m in Sources */, diff --git a/BreakingBad/BreakingBad/Entry.h b/BreakingBad/BreakingBad/Entry.h index a6de7cc..a9c54f4 100644 --- a/BreakingBad/BreakingBad/Entry.h +++ b/BreakingBad/BreakingBad/Entry.h @@ -13,5 +13,6 @@ @property (nonatomic) NSString *entryLog; @property (nonatomic) NSDictionary *logs; +@property (nonatomic) NSString *temperature; @end diff --git a/BreakingBad/BreakingBad/Entry.m b/BreakingBad/BreakingBad/Entry.m index 59cae4e..dd482e1 100644 --- a/BreakingBad/BreakingBad/Entry.m +++ b/BreakingBad/BreakingBad/Entry.m @@ -11,7 +11,8 @@ @implementation Entry @dynamic entryLog; - +@dynamic temperature; +@dynamic logs; + (NSString *)parseClassName{ return @"Entry"; diff --git a/BreakingBad/BreakingBad/EntryLogsTableViewController.h b/BreakingBad/BreakingBad/EntryLogsTableViewController.h index 0aeb9b6..e1d19ba 100644 --- a/BreakingBad/BreakingBad/EntryLogsTableViewController.h +++ b/BreakingBad/BreakingBad/EntryLogsTableViewController.h @@ -8,9 +8,11 @@ #import #import "Habit.h" +#import "FetchWeatherData.h" @interface EntryLogsTableViewController : UITableViewController @property (nonatomic) Habit *habit; +@property (nonatomic) FetchWeatherData *weatherData; @end diff --git a/BreakingBad/BreakingBad/EntryLogsTableViewController.m b/BreakingBad/BreakingBad/EntryLogsTableViewController.m index 4ab714d..c185eae 100644 --- a/BreakingBad/BreakingBad/EntryLogsTableViewController.m +++ b/BreakingBad/BreakingBad/EntryLogsTableViewController.m @@ -13,10 +13,21 @@ #import "EntryLogsTableViewCell.h" #import + + + @interface EntryLogsTableViewController () @property (nonatomic) NSArray *data; +@property (nonatomic) NSDate *entryCreationDate; + +@property (nonatomic) NSArray *urlStringsArray; + +@property (nonatomic) NSMutableArray *temps; + +@property (nonatomic) NSInteger index; + @end @implementation EntryLogsTableViewController @@ -27,15 +38,17 @@ - (void)viewDidLoad { UINib *nib = [UINib nibWithNibName:@"EntryLogsTableViewCell" bundle:nil]; [self.tableView registerNib:nib forCellReuseIdentifier:@"entryLogCellID"]; + self.urlStringsArray = [self urlStringsArray]; - [self fetchWeatherData]; - + //[self fetchWeatherData]; } -(NSString *)stringFromTimeInterval:(NSTimeInterval)time{ NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:time]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - [dateFormatter setDateFormat:@"EEEE"]; + //[dateFormatter setDateFormat:@"EEEE"]; + [dateFormatter setDateStyle:NSDateFormatterShortStyle]; + NSString *dateName = [dateFormatter stringFromDate:date]; return dateName; @@ -51,53 +64,35 @@ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger return self.habit.entries.count; } - - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { -// UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"entryCell" forIndexPath:indexPath]; -// -// -// Entry *entry = self.habit.entries[indexPath.row]; -// -// NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; -// dateFormatter.dateStyle = NSDateFormatterShortStyle; -// -// NSString *dateString = [dateFormatter stringFromDate:entry.createdAt]; -// -// cell.textLabel.text = dateString; - - EntryLogsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"entryLogCellID" forIndexPath:indexPath]; - NSDictionary *dict = self.data[indexPath.row]; - - //NSTimeInterval timeInterval = [dict[@"time"] doubleValue]; - - NSString *minTemp = [NSString stringWithFormat:@"%@",dict[@"temperatureMin"]]; - NSString *minTempShort = [NSString stringWithFormat:@"%.02f",[minTemp doubleValue]]; - - NSString *maxTemp = [NSString stringWithFormat:@"%@",dict[@"temperatureMax"] ]; - NSString *maxTempShort = [NSString stringWithFormat:@"%.02f",[maxTemp doubleValue]]; - - double avgTempDouble = ([minTempShort doubleValue] + [maxTempShort doubleValue])/2 ; - - NSString *avgTemp = [NSString stringWithFormat:@"%.01f",avgTempDouble]; - - Entry *entry = self.habit.entries[indexPath.row]; + self.entryCreationDate = entry.createdAt; + NSString *dateString = [self dateStringFromDate:entry.createdAt]; + - NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - dateFormatter.dateStyle = NSDateFormatterShortStyle; + NSString *tempF = entry.temperature; + cell.tempInfoLabel.text = tempF; - NSString *dateString = [dateFormatter stringFromDate:entry.createdAt]; + //cell.weatherIconImageView.image = [UIImage imageNamed:dict[@"icon"]]; - cell.weatherIconImageView.image = [UIImage imageNamed:dict[@"icon"]]; - cell.tempInfoLabel.text = avgTemp; cell.entryDateLabel.text = dateString; return cell; } +-(NSString *)dateStringFromDate:(NSDate *)date{ + NSDateFormatter *dateFormatter = [NSDateFormatter new]; + dateFormatter.dateStyle = NSDateFormatterShortStyle; + + NSString *dateString = [dateFormatter stringFromDate:date]; + return dateString; +} + + + -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ MainPageVC *mainPageVC = (MainPageVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"showMainPgVC"]; @@ -106,37 +101,73 @@ -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath * mainPageVC.habitName = self.habit.name; [self.navigationController pushViewController:mainPageVC animated:YES]; - - } --(void)fetchWeatherData{ - AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] init]; - NSDictionary *latitudeLongitudeDict = [[NSUserDefaults standardUserDefaults] objectForKey:@"dict"]; +//- (void)fetchWeatherData{ +// +// for(int i=0; i < self.urlStringsArray.count; i++){ +// AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; +// if(!self.temps){ +// self.temps = [NSMutableArray new]; +// } +// NSLog(@"%@",self.urlStringsArray); +// +// [manager GET:self.urlStringsArray[0] parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { +// +// NSDictionary *data = responseObject[@"data"]; +// NSArray *weatherData = data[@"weather"]; +// NSLog(@"%@", weatherData); +// self.data = weatherData; +// +// NSDictionary *dict = self.data[0]; +// NSArray *hourlyDataArray = dict[@"hourly"]; +// NSDictionary *hourlyDataDictionary = hourlyDataArray[0]; +// NSString *tempF = hourlyDataDictionary[@"tempF"]; +// // NSString *tempC = hourlyDataDictionary[@"tempC"]; +// +// [self.temps addObject:tempF]; +// [self.tableView reloadData]; +// } failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) { +// NSLog(@"Error: %@", error.localizedDescription); +// }]; +// } +//} + +//-(NSArray *)urlStringsArray{ +// NSArray *array = [self arrayWithFormattedDateStrings]; +// NSLog(@"Date Strings in array%@",array); +// +// NSMutableArray *urlStringsArray = [NSMutableArray new]; +// +// for(NSString *string in array){ +// +// NSString *urlString = [NSString stringWithFormat:@"https://api.worldweatheronline.com/free/v2/past-weather.ashx?q=22%%2C22&format=json&date=%@&tp=24&key=%@",string,WEATHERAPIKEY]; +// [urlStringsArray addObject:urlString]; +// } +// return urlStringsArray; +// +//} + +-(NSString *)formattedDateStringForAPI:(NSDate *)date{ - NSString *latitude = [latitudeLongitudeDict objectForKey:@"latitude"]; - NSString *longitude = [latitudeLongitudeDict objectForKey:@"longitude"]; + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setDateFormat:@"YYYY-MM-dd"]; - NSString *url; - if(latitude && longitude && latitude.length && longitude.length) - { - // url =[NSString stringWithFormat:@"https://api.forecast.io/forecast/95ac0e76481513d58b808d31fba3a227/%@,%@",latitude,longitude]; - } - else - { - // url = [NSString stringWithFormat:@"https://api.forecast.io/forecast/95ac0e76481513d58b808d31fba3a227/%@,%@",self.latitude,self.longitude]; + NSString *dateString = [dateFormatter stringFromDate:date]; + + return dateString; +} + +-(NSArray *)arrayWithFormattedDateStrings{ + NSMutableArray *dateStrings = [[NSMutableArray alloc] init]; + for(Entry *entry in self.habit.entries){ + NSString *formattedString = [self formattedDateStringForAPI:entry.createdAt]; + [dateStrings addObject:formattedString]; } - url = @"https://api.forecast.io/forecast/95ac0e76481513d58b808d31fba3a227/-22,47"; - [manager GET:url parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { - - - NSDictionary *daily = responseObject[@"daily"]; - NSArray *data = daily[@"data"]; - self.data = data; - [self.tableView reloadData]; - } failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) { - NSLog(@"Error: %@", error.localizedDescription); - }]; + return dateStrings; } + + + @end diff --git a/BreakingBad/BreakingBad/FetchWeatherData.h b/BreakingBad/BreakingBad/FetchWeatherData.h new file mode 100644 index 0000000..4bdc52e --- /dev/null +++ b/BreakingBad/BreakingBad/FetchWeatherData.h @@ -0,0 +1,26 @@ +// +// FetchWeatherData.h +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/19/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import +#import "Habit.h" + +@interface FetchWeatherData : NSObject + +@property (nonatomic) NSArray *urlStringsArray; + +@property (nonatomic) NSMutableArray *temps; + + +@property (nonatomic) Habit *habit; + +@property (nonatomic) NSArray *data; + +@property (nonatomic) NSOperationQueue *primeQueue; + + +@end diff --git a/BreakingBad/BreakingBad/FetchWeatherData.m b/BreakingBad/BreakingBad/FetchWeatherData.m new file mode 100644 index 0000000..c9decc5 --- /dev/null +++ b/BreakingBad/BreakingBad/FetchWeatherData.m @@ -0,0 +1,57 @@ +// +// FetchWeatherData.m +// BreakingBad +// +// Created by Mesfin Bekele Mekonnen on 10/19/15. +// Copyright © 2015 Zoufishan Mehdi. All rights reserved. +// + +#import "FetchWeatherData.h" +#import "SharedManager.h" +#import + +//NSString const *WEATHERAPIKEY = @"6cc63d13a4dd0826b7383ef753a32"; + +@implementation FetchWeatherData + +-(instancetype)init{ + if (self = [super init]) { + self.habit = [SharedManager sharedModel].habit; + //[self fetchWeatherData]; + //self.primeQueue = [NSOperationQueue new]; + [self data]; + return self; + } + return nil; +} + + + +-(NSArray *)data{ + NSMutableArray *operationArray =[NSMutableArray new]; + for(int i=0; i < self.urlStringsArray.count; i++) + { + NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ + NSMutableArray *urlRequests = [NSMutableArray new]; + + NSURL *url = [NSURL URLWithString:self.urlStringsArray[i]]; + NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url]; + [urlRequests addObject:urlRequest]; + + }]; + [operationArray addObject:operation]; + } + [self.primeQueue addOperations:operationArray waitUntilFinished:YES]; + + [AFURLConnectionOperation batchOfRequestOperations:operationArray progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) { + NSLog(@"%lu",(unsigned long)numberOfFinishedOperations); + } completionBlock:^(NSArray * _Nonnull operations) { + NSLog(@"%@",operations); + }]; + return operationArray; + +} + + + +@end diff --git a/BreakingBad/BreakingBad/Info.plist b/BreakingBad/BreakingBad/Info.plist index 6905cc6..db26bc0 100644 --- a/BreakingBad/BreakingBad/Info.plist +++ b/BreakingBad/BreakingBad/Info.plist @@ -2,6 +2,11 @@ + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + CFBundleDevelopmentRegion en CFBundleExecutable diff --git a/BreakingBad/BreakingBad/MainPageVC.m b/BreakingBad/BreakingBad/MainPageVC.m index 555fefe..6ab96b1 100644 --- a/BreakingBad/BreakingBad/MainPageVC.m +++ b/BreakingBad/BreakingBad/MainPageVC.m @@ -16,6 +16,10 @@ #import "CheckProgressViewController.h" #import "QuestionDetailVC.h" #import "MyHabitsTVC.h" +#import + +NSString const *WEATHERAPIKEY = @"6cc63d13a4dd0826b7383ef753a32"; + @interface MainPageVC () < @@ -79,12 +83,24 @@ - (void)finishedAnswering:(QuestionDetailVC *)qvc withAnswer:(NSString *)answer [[SharedManager sharedModel].answersDictionary setObject:answer forKey:tagString]; self.entry = [Entry new]; + self.entry.entryLog = answer; + [self.habit.entries addObject:self.entry]; } } } +-(NSString *)formattedDateStringForAPI:(NSDate *)date{ + + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setDateFormat:@"YYYY-MM-dd"]; + + NSString *dateString = [dateFormatter stringFromDate:date]; + + return dateString; +} + #pragma mark #pragma Context Menu methods - (IBAction)menuButtonTapped:(UIButton *)sender { @@ -154,7 +170,7 @@ - (IBAction)doneButtonTapped:(UIButton *)sender { NSMutableDictionary *entryDictionary = [[NSMutableDictionary alloc] init]; for(int i=0; i < self.questionsArray.count; i++) { - UIButton *currentButton = (UIButton *)self.questionsArray[i]; + // UIButton *currentButton = (UIButton *)self.questionsArray[i]; UILabel *label = (UILabel *)self.reply[i]; NSString *key = [NSString stringWithFormat:@"%d", i]; @@ -164,29 +180,36 @@ - (IBAction)doneButtonTapped:(UIButton *)sender { } newEntry.logs = entryDictionary; - [selectedHabit.entries addObject:newEntry]; - [selectedHabit saveInBackground]; - - - -// [self.habitsArray addObject:self.habitTextField.text]; - //[[SharedManager sharedModel].habitArray addObject:self.habitTextField.text]; -// [self.habitPickerView reloadAllComponents]; -// -// self.habit = [Habit new]; -// self.habit.name = self.habitTextField.text; -// -// if([self.user objectForKey:@"habits"]==nil) -// { -// self.user.habits = [NSMutableArray new]; -// [self.user.habits addObject:self.habit]; -// }else{ -// [self.user.habits addObject:self.habit]; -// } -} + NSString *dateString = [self formattedDateStringForAPI:newEntry.createdAt]; + + NSString *urlString = [NSString stringWithFormat:@"https://api.worldweatheronline.com/free/v2/past-weather.ashx?q=22%%2C22&format=json&date=%@&tp=24&key=%@",dateString,WEATHERAPIKEY]; + + AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; + [manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { + + NSDictionary *data = responseObject[@"data"]; + NSArray *weatherData = data[@"weather"]; + NSLog(@"%@", weatherData); + + NSDictionary *dict = weatherData[0]; + NSArray *hourlyDataArray = dict[@"hourly"]; + NSDictionary *hourlyDataDictionary = hourlyDataArray[0]; + NSString *tempF = hourlyDataDictionary[@"tempF"]; + newEntry.temperature = tempF; + NSLog(@"%@",newEntry); + + [selectedHabit.entries addObject:newEntry]; + [selectedHabit saveInBackground]; + + } failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) { + NSLog(@"Could not get weather data:-"); + NSLog(@"%@",error.localizedDescription); + }]; + +} --(void)answersFromPreviousScreen{ +- (void)answersFromPreviousScreen{ NSArray *allkeys = [[[SharedManager sharedModel] answersDictionary] allKeys]; for(NSString *key in allkeys) { @@ -271,9 +294,6 @@ - (UITableViewCell *)tableView:(YALContextMenuTableView *)tableView cellForRowAt return cell; } - - - #pragma mark #pragma Life Cycle Methods @@ -311,27 +331,6 @@ - (void)viewDidLoad{ [[self.navigationController navigationBar]setHidden:YES]; self.habitLabel.hidden = YES; - -// self.habitsArray = [NSMutableArray new]; -// HabitList *hl = [HabitList new]; -// self.habitsArray = hl.habitsList; - - //[self.habitPickerView selectRow:[SharedManager sharedModel].selectedRow inComponent:0 animated:YES]; - -// BBUser *currentUser = (BBUser *)[PFUser currentUser]; -// [currentUser objectForKey:@"habits"]; -// [currentUser fetchIfNeededInBackgroundWithBlock:^(PFObject * _Nullable object, NSError * _Nullable error) { -// NSLog(@"%@",object); -// }]; -// PFQuery *query = [PFUser query]; -// -// [query whereKey:@"username" equalTo:[currentUser username]]; -// -// [query getFirstObjectInBackgroundWithBlock:^(PFObject * _Nullable object, NSError * _Nullable error) { -// NSLog(@"Object: %@", object); -// NSLog(@"Habits: %@", [object objectForKey:@"habtis"]); -// }]; - __weak typeof(self) weakSelf = self; PFQuery *query = [PFQuery queryWithClassName:@"Habit"]; @@ -358,20 +357,13 @@ - (nullable NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInte } - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ -// [SharedManager sharedModel].selectedRow = row; -// -// NSString *habitString = self.habitsArray[row]; -// self.habit = [Habit new]; -// self.habit.name = habitString; -// -// if([self.user objectForKey:@"habits"]==nil) -// { -// self.user.habits = [NSMutableArray new]; -// [self.user.habits addObject:self.habit]; -// }else{ -// [self.user.habits addObject:self.habit]; -// } + for(int i=0; i @@ -21,29 +23,18 @@ - (void)viewDidLoad { [super viewDidLoad]; self.navigationItem.title = @"My Habits"; - - - // Uncomment the following line to preserve selection between presentations. - // self.clearsSelectionOnViewWillAppear = NO; - - // Uncomment the following line to display an Edit button in the navigation bar for this view controller. - // self.navigationItem.rightBarButtonItem = self.editButtonItem; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. } #pragma mark - Table view data source - - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { -#warning Incomplete implementation, return the number of sections return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { -#warning Incomplete implementation, return the number of rows return self.habitsArray.count; } @@ -56,50 +47,6 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N return cell; } - -/* -// Override to support conditional editing of the table view. -- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { - // Return NO if you do not want the specified item to be editable. - return YES; -} -*/ - -/* -// Override to support editing the table view. -- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { - if (editingStyle == UITableViewCellEditingStyleDelete) { - // Delete the row from the data source - [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; - } else if (editingStyle == UITableViewCellEditingStyleInsert) { - // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view - } -} -*/ - -/* -// Override to support rearranging the table view. -- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { -} -*/ - -/* -// Override to support conditional rearranging of the table view. -- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { - // Return NO if you do not want the item to be re-orderable. - return YES; -} -*/ - -/* -#pragma mark - Navigation - -// In a storyboard-based application, you will often want to do a little preparation before navigation -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - // Get the new view controller using [segue destinationViewController]. - // Pass the selected object to the new view controller. -} -*/ - (IBAction)doneButtonTapped:(UIBarButtonItem *)sender { [self dismissViewControllerAnimated:YES completion:nil]; } @@ -111,4 +58,7 @@ -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath * [self.navigationController pushViewController:eltvc animated:YES]; } + + + @end diff --git a/BreakingBad/BreakingBad/SharedManager.h b/BreakingBad/BreakingBad/SharedManager.h index 5ecd109..94fa8b9 100644 --- a/BreakingBad/BreakingBad/SharedManager.h +++ b/BreakingBad/BreakingBad/SharedManager.h @@ -10,6 +10,7 @@ #import "HabitList.h" #import "ViewController.h" #import "BBUser.h" +#import "Habit.h" @interface SharedManager : NSObject @@ -21,6 +22,8 @@ @property (nonatomic) BBUser *currentUser; +@property (nonatomic) Habit *habit; + + (SharedManager *)sharedModel; From 0afabafaa7b5abfcdef5749f6808fcae1ed394fb Mon Sep 17 00:00:00 2001 From: Zoufishan Mehdi Date: Tue, 20 Oct 2015 11:21:19 -0400 Subject: [PATCH 35/44] started adding fonts and colors --- .../BreakingBad.xcodeproj/project.pbxproj | 65 +++++++++ BreakingBad/BreakingBad/AppDelegate.m | 19 +++ BreakingBad/BreakingBad/Bariol_Regular.otf | Bin 0 -> 86036 bytes .../BreakingBad/Bariol_Regular_Italic.otf | Bin 0 -> 82392 bytes .../BreakingBad/Base.lproj/Main.storyboard | 41 +++++- .../EntryLogsTableViewController.h | 2 + .../EntryLogsTableViewController.m | 19 ++- BreakingBad/BreakingBad/HabitInfoTVC.h | 2 + BreakingBad/BreakingBad/HabitInfoTVC.m | 10 ++ BreakingBad/BreakingBad/HabitNewsTVC.h | 2 + BreakingBad/BreakingBad/HabitNewsTVC.m | 32 ++--- BreakingBad/BreakingBad/Info.plist | 18 +++ BreakingBad/BreakingBad/Jaapokki-Regular.otf | Bin 0 -> 33600 bytes .../BreakingBad/Jaapokkienchance-Regular.otf | Bin 0 -> 33788 bytes .../BreakingBad/Jaapokkisubtract-Regular.otf | Bin 0 -> 33620 bytes BreakingBad/BreakingBad/Lobster_1.3.otf | Bin 0 -> 42564 bytes BreakingBad/BreakingBad/MainPageVC.h | 2 + BreakingBad/BreakingBad/MainPageVC.m | 136 ++++++++++++------ BreakingBad/BreakingBad/MyHabitsTVC.m | 8 ++ BreakingBad/BreakingBad/Oranienbaum.ttf | Bin 0 -> 155404 bytes BreakingBad/BreakingBad/QuestionDetailVC.h | 12 +- BreakingBad/BreakingBad/QuestionDetailVC.m | 13 ++ BreakingBad/BreakingBad/SharedManager.h | 34 ++++- BreakingBad/BreakingBad/SharedManager.m | 39 +++++ BreakingBad/BreakingBad/ViewController.m | 2 + .../BreakingBad/bariol_regular-webfont.ttf | Bin 0 -> 86060 bytes .../bariol_regular_italic-webfont.ttf | Bin 0 -> 82416 bytes BreakingBad/BreakingBad/jaapokki-regular.ttf | Bin 0 -> 47604 bytes .../BreakingBad/jaapokkienchance-regular.ttf | Bin 0 -> 48016 bytes 29 files changed, 393 insertions(+), 63 deletions(-) create mode 100644 BreakingBad/BreakingBad/Bariol_Regular.otf create mode 100644 BreakingBad/BreakingBad/Bariol_Regular_Italic.otf create mode 100644 BreakingBad/BreakingBad/Jaapokki-Regular.otf create mode 100644 BreakingBad/BreakingBad/Jaapokkienchance-Regular.otf create mode 100644 BreakingBad/BreakingBad/Jaapokkisubtract-Regular.otf create mode 100755 BreakingBad/BreakingBad/Lobster_1.3.otf create mode 100755 BreakingBad/BreakingBad/Oranienbaum.ttf create mode 100755 BreakingBad/BreakingBad/bariol_regular-webfont.ttf create mode 100755 BreakingBad/BreakingBad/bariol_regular_italic-webfont.ttf create mode 100644 BreakingBad/BreakingBad/jaapokki-regular.ttf create mode 100644 BreakingBad/BreakingBad/jaapokkienchance-regular.ttf diff --git a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj index 941888b..2584020 100644 --- a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj +++ b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj @@ -9,6 +9,15 @@ /* Begin PBXBuildFile section */ 4A5A43BBA13FCB718327B866 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 288369826A80E7C37FA68C71 /* libPods.a */; }; 5F058DF01BD1912C001D93B2 /* MyHabitsTVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F058DEF1BD1912C001D93B2 /* MyHabitsTVC.m */; }; + 5F87502B1BD6871300B14CA6 /* jaapokkienchance-regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5F8750141BD6871300B14CA6 /* jaapokkienchance-regular.ttf */; settings = {ASSET_TAGS = (); }; }; + 5F87502C1BD6871300B14CA6 /* Jaapokkienchance-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 5F8750151BD6871300B14CA6 /* Jaapokkienchance-Regular.otf */; settings = {ASSET_TAGS = (); }; }; + 5F87502D1BD6871300B14CA6 /* jaapokki-regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5F8750161BD6871300B14CA6 /* jaapokki-regular.ttf */; settings = {ASSET_TAGS = (); }; }; + 5F87502E1BD6871300B14CA6 /* Jaapokki-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 5F8750171BD6871300B14CA6 /* Jaapokki-Regular.otf */; settings = {ASSET_TAGS = (); }; }; + 5F87502F1BD6871300B14CA6 /* Jaapokkisubtract-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 5F8750181BD6871300B14CA6 /* Jaapokkisubtract-Regular.otf */; settings = {ASSET_TAGS = (); }; }; + 5F8750701BD6879800B14CA6 /* bariol_regular-webfont.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5F8750531BD6879800B14CA6 /* bariol_regular-webfont.ttf */; settings = {ASSET_TAGS = (); }; }; + 5F8750711BD6879800B14CA6 /* bariol_regular_italic-webfont.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5F8750541BD6879800B14CA6 /* bariol_regular_italic-webfont.ttf */; settings = {ASSET_TAGS = (); }; }; + 5F8750721BD6879800B14CA6 /* Bariol_Regular_Italic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 5F8750551BD6879800B14CA6 /* Bariol_Regular_Italic.otf */; settings = {ASSET_TAGS = (); }; }; + 5F8750731BD6879800B14CA6 /* Bariol_Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 5F8750561BD6879800B14CA6 /* Bariol_Regular.otf */; settings = {ASSET_TAGS = (); }; }; 5F8FF9991BC9A9CD00855DFB /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F8FF9981BC9A9CD00855DFB /* main.m */; }; 5F8FF99C1BC9A9CD00855DFB /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F8FF99B1BC9A9CD00855DFB /* AppDelegate.m */; }; 5F8FF99F1BC9A9CD00855DFB /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F8FF99E1BC9A9CD00855DFB /* ViewController.m */; }; @@ -49,6 +58,17 @@ 288369826A80E7C37FA68C71 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; 5F058DEE1BD1912C001D93B2 /* MyHabitsTVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyHabitsTVC.h; sourceTree = ""; }; 5F058DEF1BD1912C001D93B2 /* MyHabitsTVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyHabitsTVC.m; sourceTree = ""; }; + 5F8750141BD6871300B14CA6 /* jaapokkienchance-regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "jaapokkienchance-regular.ttf"; sourceTree = ""; }; + 5F8750151BD6871300B14CA6 /* Jaapokkienchance-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Jaapokkienchance-Regular.otf"; sourceTree = ""; }; + 5F8750161BD6871300B14CA6 /* jaapokki-regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "jaapokki-regular.ttf"; sourceTree = ""; }; + 5F8750171BD6871300B14CA6 /* Jaapokki-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Jaapokki-Regular.otf"; sourceTree = ""; }; + 5F8750181BD6871300B14CA6 /* Jaapokkisubtract-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Jaapokkisubtract-Regular.otf"; sourceTree = ""; }; + 5F8750301BD6873500B14CA6 /* Lobster_1.3.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Lobster_1.3.otf; sourceTree = ""; }; + 5F8750531BD6879800B14CA6 /* bariol_regular-webfont.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "bariol_regular-webfont.ttf"; sourceTree = ""; }; + 5F8750541BD6879800B14CA6 /* bariol_regular_italic-webfont.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "bariol_regular_italic-webfont.ttf"; sourceTree = ""; }; + 5F8750551BD6879800B14CA6 /* Bariol_Regular_Italic.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Bariol_Regular_Italic.otf; sourceTree = ""; }; + 5F8750561BD6879800B14CA6 /* Bariol_Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Bariol_Regular.otf; sourceTree = ""; }; + 5F8750741BD687E500B14CA6 /* Oranienbaum.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Oranienbaum.ttf; sourceTree = ""; }; 5F8FF9941BC9A9CD00855DFB /* BreakingBad.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BreakingBad.app; sourceTree = BUILT_PRODUCTS_DIR; }; 5F8FF9981BC9A9CD00855DFB /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 5F8FF99A1BC9A9CD00855DFB /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -124,10 +144,46 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 5F874FF21BD6825300B14CA6 /* Fonts */ = { + isa = PBXGroup; + children = ( + 5F874FFB1BD6871300B14CA6 /* Jaapokki-font-package-1.0 */, + 5F8750141BD6871300B14CA6 /* jaapokkienchance-regular.ttf */, + 5F8750151BD6871300B14CA6 /* Jaapokkienchance-Regular.otf */, + 5F8750161BD6871300B14CA6 /* jaapokki-regular.ttf */, + 5F8750171BD6871300B14CA6 /* Jaapokki-Regular.otf */, + 5F8750181BD6871300B14CA6 /* Jaapokkisubtract-Regular.otf */, + 5F8750301BD6873500B14CA6 /* Lobster_1.3.otf */, + 5F8750311BD6879800B14CA6 /* Bariol_Regular&Italic */, + 5F8750531BD6879800B14CA6 /* bariol_regular-webfont.ttf */, + 5F8750541BD6879800B14CA6 /* bariol_regular_italic-webfont.ttf */, + 5F8750551BD6879800B14CA6 /* Bariol_Regular_Italic.otf */, + 5F8750561BD6879800B14CA6 /* Bariol_Regular.otf */, + 5F8750741BD687E500B14CA6 /* Oranienbaum.ttf */, + ); + name = Fonts; + path = BreakingBad; + sourceTree = ""; + }; + 5F874FFB1BD6871300B14CA6 /* Jaapokki-font-package-1.0 */ = { + isa = PBXGroup; + children = ( + ); + path = "Jaapokki-font-package-1.0"; + sourceTree = ""; + }; + 5F8750311BD6879800B14CA6 /* Bariol_Regular&Italic */ = { + isa = PBXGroup; + children = ( + ); + path = "Bariol_Regular&Italic"; + sourceTree = ""; + }; 5F8FF98B1BC9A9CD00855DFB = { isa = PBXGroup; children = ( 5F8FF9961BC9A9CD00855DFB /* BreakingBad */, + 5F874FF21BD6825300B14CA6 /* Fonts */, 5F8FF9951BC9A9CD00855DFB /* Products */, 63F0AFE9BD856CE062BFF317 /* Pods */, C7D24797CBE441A3A8CF05A9 /* Frameworks */, @@ -324,7 +380,16 @@ 5F8FF9A71BC9A9CD00855DFB /* Assets.xcassets in Resources */, DCBA27C71BCED16E00E61721 /* CustomContextTableViewCell.xib in Resources */, 5F8FF9A21BC9A9CD00855DFB /* Main.storyboard in Resources */, + 5F87502C1BD6871300B14CA6 /* Jaapokkienchance-Regular.otf in Resources */, 5FE7B0511BD51F4B00C5E163 /* HabitsNewsTableViewCell.xib in Resources */, + 5F87502E1BD6871300B14CA6 /* Jaapokki-Regular.otf in Resources */, + 5F8750701BD6879800B14CA6 /* bariol_regular-webfont.ttf in Resources */, + 5F8750711BD6879800B14CA6 /* bariol_regular_italic-webfont.ttf in Resources */, + 5F8750731BD6879800B14CA6 /* Bariol_Regular.otf in Resources */, + 5F87502D1BD6871300B14CA6 /* jaapokki-regular.ttf in Resources */, + 5F87502B1BD6871300B14CA6 /* jaapokkienchance-regular.ttf in Resources */, + 5F87502F1BD6871300B14CA6 /* Jaapokkisubtract-Regular.otf in Resources */, + 5F8750721BD6879800B14CA6 /* Bariol_Regular_Italic.otf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/BreakingBad/BreakingBad/AppDelegate.m b/BreakingBad/BreakingBad/AppDelegate.m index 8823b23..a37382b 100644 --- a/BreakingBad/BreakingBad/AppDelegate.m +++ b/BreakingBad/BreakingBad/AppDelegate.m @@ -22,6 +22,23 @@ @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + + //Font + NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]]; + NSArray *fontNames; + NSInteger indFamily, indFont; + for (indFamily=0; indFamily<[familyNames count]; ++indFamily) + { + NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]); + fontNames = [[NSArray alloc] initWithArray: + [UIFont fontNamesForFamilyName: + [familyNames objectAtIndex:indFamily]]]; + for (indFont=0; indFont<[fontNames count]; ++indFont) + { + NSLog(@" Font name: %@", [fontNames objectAtIndex:indFont]); + } + } + [BBUser registerSubclass]; [Entry registerSubclass]; [Goal registerSubclass]; @@ -31,6 +48,8 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( [Parse setApplicationId:@"4OUoEnBvW5xaxzLgWkDtZN31dFJoIduWBvB03o36" clientKey:@"aKDf8JmSXdA8PFp8wNdmi0cxiY6Nf4z7yXIgPjya"]; return YES; + + } - (void)applicationWillResignActive:(UIApplication *)application { diff --git a/BreakingBad/BreakingBad/Bariol_Regular.otf b/BreakingBad/BreakingBad/Bariol_Regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..d81e0b450de1c80bc6ff580bc63a6b776d033670 GIT binary patch literal 86036 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%0AZcu1lqA&`Y$2 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 literal 0 HcmV?d00001 diff --git a/BreakingBad/BreakingBad/jaapokkienchance-regular.ttf b/BreakingBad/BreakingBad/jaapokkienchance-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..00993d2acc816b2ed0fb6a76fb59fe60543be459 GIT binary patch literal 48016 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 Date: Tue, 20 Oct 2015 13:09:52 -0400 Subject: [PATCH 36/44] I'm done --- BreakingBad/BreakingBad/Entry.h | 1 + BreakingBad/BreakingBad/Entry.m | 1 + .../BreakingBad/EntryLogsTableViewCell.h | 2 +- .../BreakingBad/EntryLogsTableViewCell.xib | 25 +++++++++---------- .../EntryLogsTableViewController.m | 7 ++---- BreakingBad/BreakingBad/MainPageVC.m | 23 +++++++++++++---- 6 files changed, 35 insertions(+), 24 deletions(-) diff --git a/BreakingBad/BreakingBad/Entry.h b/BreakingBad/BreakingBad/Entry.h index a9c54f4..a81af6b 100644 --- a/BreakingBad/BreakingBad/Entry.h +++ b/BreakingBad/BreakingBad/Entry.h @@ -14,5 +14,6 @@ @property (nonatomic) NSString *entryLog; @property (nonatomic) NSDictionary *logs; @property (nonatomic) NSString *temperature; +@property (nonatomic) NSString *location; @end diff --git a/BreakingBad/BreakingBad/Entry.m b/BreakingBad/BreakingBad/Entry.m index dd482e1..0a7a5ed 100644 --- a/BreakingBad/BreakingBad/Entry.m +++ b/BreakingBad/BreakingBad/Entry.m @@ -13,6 +13,7 @@ @implementation Entry @dynamic entryLog; @dynamic temperature; @dynamic logs; +@dynamic location; + (NSString *)parseClassName{ return @"Entry"; diff --git a/BreakingBad/BreakingBad/EntryLogsTableViewCell.h b/BreakingBad/BreakingBad/EntryLogsTableViewCell.h index b09ff0e..42aec05 100644 --- a/BreakingBad/BreakingBad/EntryLogsTableViewCell.h +++ b/BreakingBad/BreakingBad/EntryLogsTableViewCell.h @@ -9,8 +9,8 @@ #import @interface EntryLogsTableViewCell : UITableViewCell +@property (weak, nonatomic) IBOutlet UILabel *locationLabel; -@property (weak, nonatomic) IBOutlet UIImageView *weatherIconImageView; @property (weak, nonatomic) IBOutlet UILabel *tempInfoLabel; @property (weak, nonatomic) IBOutlet UILabel *entryDateLabel; diff --git a/BreakingBad/BreakingBad/EntryLogsTableViewCell.xib b/BreakingBad/BreakingBad/EntryLogsTableViewCell.xib index 54a5a92..2e6ecb7 100644 --- a/BreakingBad/BreakingBad/EntryLogsTableViewCell.xib +++ b/BreakingBad/BreakingBad/EntryLogsTableViewCell.xib @@ -13,15 +13,8 @@ - - - - - - - + - + + - - - + + + - diff --git a/BreakingBad/BreakingBad/EntryLogsTableViewController.m b/BreakingBad/BreakingBad/EntryLogsTableViewController.m index c185eae..7580ac2 100644 --- a/BreakingBad/BreakingBad/EntryLogsTableViewController.m +++ b/BreakingBad/BreakingBad/EntryLogsTableViewController.m @@ -72,11 +72,8 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N self.entryCreationDate = entry.createdAt; NSString *dateString = [self dateStringFromDate:entry.createdAt]; - - NSString *tempF = entry.temperature; - cell.tempInfoLabel.text = tempF; - - //cell.weatherIconImageView.image = [UIImage imageNamed:dict[@"icon"]]; + cell.tempInfoLabel.text = entry.temperature; + cell.locationLabel.text = entry.location; cell.entryDateLabel.text = dateString; diff --git a/BreakingBad/BreakingBad/MainPageVC.m b/BreakingBad/BreakingBad/MainPageVC.m index fdaa2ef..48c91ba 100644 --- a/BreakingBad/BreakingBad/MainPageVC.m +++ b/BreakingBad/BreakingBad/MainPageVC.m @@ -47,6 +47,7 @@ @interface MainPageVC () @property (nonatomic) Habit *habit; @property (weak, nonatomic) IBOutlet UILabel *habitLabel; +@property (nonatomic) NSString *entryLocationString; @end @@ -184,18 +185,21 @@ - (IBAction)doneButtonTapped:(UIButton *)sender { } newEntry.logs = entryDictionary; + NSLog(@"%@",newEntry.createdAt); NSString *dateString = [self formattedDateStringForAPI:newEntry.createdAt]; + NSLog(@"This is the date: %@",dateString); float latitude = locationManager.location.coordinate.latitude; float longitude = locationManager.location.coordinate.longitude; NSLog(@"lat: %f, long: %f",latitude, longitude); - //@"api.worldweatheronline.com/free/v2/past-weather.ashx?&format=json&date=2015-08-18&tp=24" - + NSString *latString = [NSString stringWithFormat:@"%f",latitude]; + NSString *longString = [NSString stringWithFormat:@"%f",longitude]; + + NSLog(@"Lat String: %@, Long String: %@",latString, longString); -// NSString *urlString = [NSString stringWithFormat:@"https://api.worldweatheronline.com/free/v2/past-weather.ashx?q=%20%@%%2C%@&format=json&date=%@&tp=24&key=%@",latString,longString,dateString, WEATHERAPIKEY]; - NSString *urlString = [NSString stringWithFormat:@"https://api.worldweatheronline.com/free/v2/past-weather.ashx?q=%20%f%%2C%f&format=json&date=%@&tp=24&key=%@",latitude,longitude,dateString,WEATHERAPIKEY]; + NSString *urlString = [NSString stringWithFormat:@"https://api.worldweatheronline.com/free/v2/past-weather.ashx?q=%@,%@&format=json&date=today&tp=24&key=6cc63d13a4dd0826b7383ef753a32",latString,longString]; NSLog(@"%@",urlString); @@ -211,6 +215,7 @@ - (IBAction)doneButtonTapped:(UIButton *)sender { NSDictionary *hourlyDataDictionary = hourlyDataArray[0]; NSString *tempF = hourlyDataDictionary[@"tempF"]; newEntry.temperature = tempF; + newEntry.location = self.entryLocationString; NSLog(@"%@",newEntry); [selectedHabit.entries addObject:newEntry]; @@ -382,9 +387,17 @@ - (void)locationManager:(CLLocationManager *)manager CLGeocoder * geoCoder = [[CLGeocoder alloc] init]; [geoCoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) { - NSString *locString = placemarks.count ? [placemarks.firstObject locality] : @"Not Found"; + NSString *locString = placemarks.count ? [placemarks.lastObject locality] : @"Not Found"; NSLog(@"This is your city: %@",locString); + if(![locString isEqualToString:@"Not Found"]){ + self.entryLocationString = locString; + } + + }]; + + + } - (void)setUpLocationManager{ From 4dfad57c653754fe67194d860ca046ce344b56de Mon Sep 17 00:00:00 2001 From: Mesfin Date: Tue, 20 Oct 2015 14:47:28 -0400 Subject: [PATCH 37/44] final push --- .../BreakingBad/Base.lproj/Main.storyboard | 14 +++---- .../EntryLogsTableViewController.m | 11 +++-- BreakingBad/BreakingBad/HabitInfoTVC.m | 6 +-- BreakingBad/BreakingBad/HabitNewsTVC.m | 8 ++-- BreakingBad/BreakingBad/MainPageVC.m | 33 +++++++-------- BreakingBad/BreakingBad/SharedManager.h | 12 +++++- BreakingBad/BreakingBad/SharedManager.m | 40 +++++++++---------- 7 files changed, 66 insertions(+), 58 deletions(-) diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index 7fd73d2..e2aeff9 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -515,12 +515,6 @@ - - - - - - @@ -1199,7 +1199,7 @@ - + diff --git a/BreakingBad/BreakingBad/EntryLogsTableViewController.m b/BreakingBad/BreakingBad/EntryLogsTableViewController.m index de48a6c..fddffd0 100644 --- a/BreakingBad/BreakingBad/EntryLogsTableViewController.m +++ b/BreakingBad/BreakingBad/EntryLogsTableViewController.m @@ -28,13 +28,13 @@ @interface EntryLogsTableViewController () @property (nonatomic) NSMutableArray *temps; @property (nonatomic) NSInteger index; +@property (strong, nonatomic) IBOutlet UITableView *entryTableView; @end @implementation EntryLogsTableViewController -//@dynamic entryTableView; - (void)viewDidLoad { [super viewDidLoad]; @@ -43,14 +43,13 @@ - (void)viewDidLoad { UINib *nib = [UINib nibWithNibName:@"EntryLogsTableViewCell" bundle:nil]; [self.tableView registerNib:nib forCellReuseIdentifier:@"entryLogCellID"]; self.urlStringsArray = [self urlStringsArray]; - - //[self fetchWeatherData]; + } -//-(void)addColorEntryLog { -// self.entryTableView.backgroundColor = [SharedManager sharedModel].tropicalDream; -//} +-(void)addColorEntryLog { + self.entryTableView.backgroundColor = [SharedManager sharedModel].tropicalDream; +} diff --git a/BreakingBad/BreakingBad/HabitInfoTVC.m b/BreakingBad/BreakingBad/HabitInfoTVC.m index 23684d4..25e5f5a 100644 --- a/BreakingBad/BreakingBad/HabitInfoTVC.m +++ b/BreakingBad/BreakingBad/HabitInfoTVC.m @@ -35,9 +35,9 @@ - (void)viewDidLoad { } -//-(void)addColorHabitInfo { -// self.habitInfoTableView.backgroundColor = [SharedManager sharedModel].icyNight; -//} +-(void)addColorHabitInfo { + self.habitInfoTableView.backgroundColor = [SharedManager sharedModel].icyNight; +} #pragma mark - Table view data source diff --git a/BreakingBad/BreakingBad/HabitNewsTVC.m b/BreakingBad/BreakingBad/HabitNewsTVC.m index 79ddaa7..adb9933 100644 --- a/BreakingBad/BreakingBad/HabitNewsTVC.m +++ b/BreakingBad/BreakingBad/HabitNewsTVC.m @@ -37,10 +37,10 @@ - (void)viewDidLoad { [self addColorHabitNews]; } -// -//-(void)addColorHabitNews { -// self.habitNewsTableView.backgroundColor = [SharedManager sharedModel].colesiumGrey; -//} + +-(void)addColorHabitNews { + self.habitNewsTableView.backgroundColor = [SharedManager sharedModel].colesiumGrey; +} diff --git a/BreakingBad/BreakingBad/MainPageVC.m b/BreakingBad/BreakingBad/MainPageVC.m index 76c147f..d4cf8be 100644 --- a/BreakingBad/BreakingBad/MainPageVC.m +++ b/BreakingBad/BreakingBad/MainPageVC.m @@ -81,7 +81,7 @@ @implementation MainPageVC{ // // self.habitLabel.hidden = YES; // -// [self addColorsMainPg]; +// // // // self.habitsArray = [NSMutableArray new]; // // HabitList *hl = [HabitList new]; @@ -117,21 +117,21 @@ @implementation MainPageVC{ #pragma mark- Add colors -//-(void)addColorsMainPg { -// -// self.habitView.backgroundColor = [SharedManager sharedModel].icyNight; -// -// for (UIView *aquaView in self.oddViews) -// { -// aquaView.backgroundColor = [SharedManager sharedModel].icyNight; -// } -// -// for (UIView *aquaView in self.evenViews) -// { -// aquaView.backgroundColor = [SharedManager sharedModel].blueSky; -// } -// -//} +-(void)addColorsMainPg { + + self.habitView.backgroundColor = [SharedManager sharedModel].icyNight; + + for (UIView *aquaView in self.oddViews) + { + aquaView.backgroundColor = [SharedManager sharedModel].icyNight; + } + + for (UIView *aquaView in self.evenViews) + { + aquaView.backgroundColor = [SharedManager sharedModel].blueSky; + } + +} //self.headerBackgroundView.backgroundColor = [PresetTimerData sharedModel].ghostGrey; //self.lapButton.layer.borderWidth = 2.5; @@ -454,6 +454,7 @@ -(void)viewWillAppear:(BOOL)animated{ - (void)viewDidLoad{ [super viewDidLoad]; + [self addColorsMainPg]; self.habitPickerView.delegate = self; [self answersFromPreviousScreen]; [self initiateMenuOptions]; diff --git a/BreakingBad/BreakingBad/SharedManager.h b/BreakingBad/BreakingBad/SharedManager.h index 6a869c9..bec84da 100644 --- a/BreakingBad/BreakingBad/SharedManager.h +++ b/BreakingBad/BreakingBad/SharedManager.h @@ -5,7 +5,6 @@ // Created by Zoufishan Mehdi on 10/13/15. // Copyright © 2015 Zoufishan Mehdi. All rights reserved. // - #import #import "HabitList.h" #import "ViewController.h" @@ -27,6 +26,15 @@ + (SharedManager *)sharedModel; + +//color properties for Pompeii Palette +@property (nonatomic) UIColor *icyNight; +@property (nonatomic) UIColor *blueSky; +@property (nonatomic) UIColor *tropicalDream; +@property (nonatomic) UIColor *brownForest; +@property (nonatomic) UIColor *brickRed; +@property (nonatomic) UIColor *colesiumGrey; + +(UIColor *)makeColorWithRed:(NSInteger)red green:(NSInteger)green blue:(NSInteger)blue @@ -36,4 +44,4 @@ -(void)initializeColorData; -@end +@end \ No newline at end of file diff --git a/BreakingBad/BreakingBad/SharedManager.m b/BreakingBad/BreakingBad/SharedManager.m index 50e964c..381c79d 100644 --- a/BreakingBad/BreakingBad/SharedManager.m +++ b/BreakingBad/BreakingBad/SharedManager.m @@ -29,7 +29,7 @@ + (SharedManager *)sharedModel { // //static id sharedObject = nil; //if you're not using ARC // dispatch_once(&predicate, ^{ // sharedObject = [[self alloc] init]; -// +// // [SharedManager in // //sharedObject = [[[self alloc] init] retain]; // if you're not using ARC // }); @@ -56,29 +56,29 @@ -(void)initializeData{ -(void)initializeColorData { //Pompeii Palette - self.icyNight = [SharedManager makeColorWithRed:235 green:240 blue:240 alpha:1.0]; - self.blueSky = [SharedManager makeColorWithRed:212 green:230 blue:230 alpha:1.0]; - self.tropicalDream = [SharedManager makeColorWithRed:174 green:200 blue:203 alpha:1.0]; - self.brownForest = [SharedManager makeColorWithRed:95 green:86 blue:81 alpha:1.0]; - self.brickRed = [SharedManager makeColorWithRed:178 green:126 blue:111 alpha:1.0]; - self.colesiumGrey = [SharedManager makeColorWithRed:208 green:203 blue:194 alpha:1.0]; + self.icyNight = [SharedManager makeColorWithRed:235 green:240 blue:240 alpha:1.0]; + self.blueSky = [SharedManager makeColorWithRed:212 green:230 blue:230 alpha:1.0]; + self.tropicalDream = [SharedManager makeColorWithRed:174 green:200 blue:203 alpha:1.0]; + self.brownForest = [SharedManager makeColorWithRed:95 green:86 blue:81 alpha:1.0]; + self.brickRed = [SharedManager makeColorWithRed:178 green:126 blue:111 alpha:1.0]; + self.colesiumGrey = [SharedManager makeColorWithRed:208 green:203 blue:194 alpha:1.0]; //Color Entrance Color Palette -// self.iceGrey = [SharedManager makeColorWithRed:235 green:235 blue:235 alpha:1.0]; -// self.mintGreen = [SharedManager makeColorWithRed:205 green:221 blue:217 alpha:1.0]; -// self.blueSteel = [SharedManager makeColorWithRed:123 green:132 blue:152 alpha:1.0]; -// self.chocolateBrown = [SharedManager makeColorWithRed:87 green:69 blue:77 alpha:1.0]; -// self.caramelToffee = [SharedManager makeColorWithRed:199 green:180 blue:150 alpha:1.0]; -// self.pastelPink = [SharedManager makeColorWithRed:221 green:203 blue:208 alpha:1.0]; + // self.iceGrey = [SharedManager makeColorWithRed:235 green:235 blue:235 alpha:1.0]; + // self.mintGreen = [SharedManager makeColorWithRed:205 green:221 blue:217 alpha:1.0]; + // self.blueSteel = [SharedManager makeColorWithRed:123 green:132 blue:152 alpha:1.0]; + // self.chocolateBrown = [SharedManager makeColorWithRed:87 green:69 blue:77 alpha:1.0]; + // self.caramelToffee = [SharedManager makeColorWithRed:199 green:180 blue:150 alpha:1.0]; + // self.pastelPink = [SharedManager makeColorWithRed:221 green:203 blue:208 alpha:1.0]; //Scandinavia Hues Color Palette -// self.aquaBlue = [SharedManager makeColorWithRed:222 green:239 blue:232 alpha:1.0]; -// self.eggplantPurple = [SharedManager makeColorWithRed:80 green:58 blue:73 alpha:1.0]; -// self.maroon = [SharedManager makeColorWithRed:89 green:33 blue:48 alpha:1.0]; -// self.sherbert = [SharedManager makeColorWithRed:157 green:72 blue:81 alpha:1.0]; -// self.caramelToffee = [SharedManager makeColorWithRed:200 green:177 blue:130 alpha:1.0]; -// self.vanillaSky = [SharedManager makeColorWithRed:230 green:220 blue:188 alpha:1.0]; + // self.aquaBlue = [SharedManager makeColorWithRed:222 green:239 blue:232 alpha:1.0]; + // self.eggplantPurple = [SharedManager makeColorWithRed:80 green:58 blue:73 alpha:1.0]; + // self.maroon = [SharedManager makeColorWithRed:89 green:33 blue:48 alpha:1.0]; + // self.sherbert = [SharedManager makeColorWithRed:157 green:72 blue:81 alpha:1.0]; + // self.caramelToffee = [SharedManager makeColorWithRed:200 green:177 blue:130 alpha:1.0]; + // self.vanillaSky = [SharedManager makeColorWithRed:230 green:220 blue:188 alpha:1.0]; } @@ -90,4 +90,4 @@ +(UIColor *)makeColorWithRed:(NSInteger)red green:(NSInteger)green blue:(NSInteg } -@end +@end \ No newline at end of file From ff5a49762a7ee5e97a9781b367d5ed6c1425dd76 Mon Sep 17 00:00:00 2001 From: Zoufishan Mehdi Date: Wed, 21 Oct 2015 00:48:41 -0400 Subject: [PATCH 38/44] semi final version working --- .../BreakingBad.xcodeproj/project.pbxproj | 10 +- .../BreakingBad/Base.lproj/Main.storyboard | 92 +++++++++++++------ .../EntryLogsTableViewController.h | 3 + .../EntryLogsTableViewController.m | 8 +- BreakingBad/BreakingBad/HabitInfoData.h | 1 + BreakingBad/BreakingBad/HabitInfoTVC.m | 7 +- BreakingBad/BreakingBad/HabitNewsTVC.h | 1 + BreakingBad/BreakingBad/HabitNewsTVC.m | 12 ++- BreakingBad/BreakingBad/MainPageVC.m | 53 +++++++---- BreakingBad/BreakingBad/MyHabitsTVC.h | 3 + BreakingBad/BreakingBad/MyHabitsTVC.m | 11 +++ BreakingBad/BreakingBad/QuestionDetailVC.m | 10 +- 12 files changed, 158 insertions(+), 53 deletions(-) diff --git a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj index 59577d1..9c670aa 100644 --- a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj +++ b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj @@ -159,13 +159,14 @@ 5F8750161BD6871300B14CA6 /* jaapokki-regular.ttf */, 5F8750171BD6871300B14CA6 /* Jaapokki-Regular.otf */, 5F8750181BD6871300B14CA6 /* Jaapokkisubtract-Regular.otf */, - 5F8750301BD6873500B14CA6 /* Lobster_1.3.otf */, 5F8750311BD6879800B14CA6 /* Bariol_Regular&Italic */, 5F8750531BD6879800B14CA6 /* bariol_regular-webfont.ttf */, 5F8750541BD6879800B14CA6 /* bariol_regular_italic-webfont.ttf */, 5F8750551BD6879800B14CA6 /* Bariol_Regular_Italic.otf */, 5F8750561BD6879800B14CA6 /* Bariol_Regular.otf */, + 5F8750751BD6C94000B14CA6 /* Lobster_Oranienbaum */, 5F8750741BD687E500B14CA6 /* Oranienbaum.ttf */, + 5F8750301BD6873500B14CA6 /* Lobster_1.3.otf */, ); name = Fonts; path = BreakingBad; @@ -185,6 +186,13 @@ path = "Bariol_Regular&Italic"; sourceTree = ""; }; + 5F8750751BD6C94000B14CA6 /* Lobster_Oranienbaum */ = { + isa = PBXGroup; + children = ( + ); + name = Lobster_Oranienbaum; + sourceTree = ""; + }; 5F8FF98B1BC9A9CD00855DFB = { isa = PBXGroup; children = ( diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index e2aeff9..59843c1 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -9,7 +9,32 @@ Avenir-Light Avenir-Light - Avenir-Light + + + Bariol-Regular + Bariol-Regular + Bariol-Regular + Bariol-Regular + Bariol-Regular + Bariol-Regular + Bariol-Regular + + + Jaapokki-Regular + + + Jaapokkisubtract-Regular + Jaapokkisubtract-Regular + Jaapokkisubtract-Regular + + + Oranienbaum + Oranienbaum + Oranienbaum + Oranienbaum + Oranienbaum + Oranienbaum + Oranienbaum @@ -520,12 +545,13 @@ - + - + @@ -819,7 +857,7 @@ - - + + @@ -570,13 +576,12 @@ - - + - + - + @@ -760,95 +765,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -856,15 +772,15 @@ + + - - - + + + + - + + + + + + + + + + @@ -1081,6 +1087,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1152,6 +1247,7 @@ + diff --git a/BreakingBad/BreakingBad/EntryLogsTableViewController.m b/BreakingBad/BreakingBad/EntryLogsTableViewController.m index 1f8548f..0d88038 100644 --- a/BreakingBad/BreakingBad/EntryLogsTableViewController.m +++ b/BreakingBad/BreakingBad/EntryLogsTableViewController.m @@ -51,7 +51,7 @@ - (void)viewDidLoad { #pragma mark- Add Color -(void)addColorEntryLog { - self.entryTableView.backgroundColor = [SharedManager sharedModel].blueSky; + self.entryTableView.backgroundColor = [SharedManager sharedModel].tropicalDream; } @@ -89,10 +89,16 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N cell.locationLabel.text = entry.location; cell.entryDateLabel.text = dateString; - cell.backgroundColor = [SharedManager sharedModel].tropicalDream; - cell.textLabel.textColor = [SharedManager sharedModel].brownForest; - cell.textLabel.font = [UIFont fontWithName:@"Bariol" size:22.0]; + cell.backgroundColor = [SharedManager sharedModel].blueSky; + cell.tempInfoLabel.textColor = [SharedManager sharedModel].brickRed; + cell.tempInfoLabel.font = [UIFont fontWithName:@"Bariol" size:22.0]; + cell.locationLabel.textColor = [SharedManager sharedModel].brickRed; + cell.locationLabel.font = [UIFont fontWithName:@"Bariol" size:22.0]; + + cell.entryDateLabel.textColor = [SharedManager sharedModel].brownForest; + cell.entryDateLabel.font = [UIFont fontWithName:@"Bariol" size:22.0]; + return cell; } diff --git a/BreakingBad/BreakingBad/HabitInfoTVC.m b/BreakingBad/BreakingBad/HabitInfoTVC.m index 1252f44..82f85e5 100644 --- a/BreakingBad/BreakingBad/HabitInfoTVC.m +++ b/BreakingBad/BreakingBad/HabitInfoTVC.m @@ -30,6 +30,16 @@ - (void)viewDidLoad { [super viewDidLoad]; self.navigationItem.title = @"Habits Info"; + + NSDictionary *titleAttributes =@{ + NSFontAttributeName :[UIFont fontWithName:@"Bariol" size:25.0], + NSForegroundColorAttributeName : [SharedManager sharedModel].brickRed, + //NSBackgroundColorAttributeName : [SharedManager sharedModel].tropicalDream + + }; + + self.navigationController.navigationBar.titleTextAttributes = titleAttributes; + [self addColorHabitInfo]; } diff --git a/BreakingBad/BreakingBad/HabitsNewsTableViewCell.xib b/BreakingBad/BreakingBad/HabitsNewsTableViewCell.xib index 2629246..bcab43f 100644 --- a/BreakingBad/BreakingBad/HabitsNewsTableViewCell.xib +++ b/BreakingBad/BreakingBad/HabitsNewsTableViewCell.xib @@ -3,6 +3,12 @@ + + + Jaapokkisubtract-Regular + Jaapokkisubtract-Regular + + @@ -13,16 +19,17 @@ - + Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda. - + + - diff --git a/BreakingBad/BreakingBad/MainPageVC.m b/BreakingBad/BreakingBad/MainPageVC.m index 8a2a4f0..9acda3a 100644 --- a/BreakingBad/BreakingBad/MainPageVC.m +++ b/BreakingBad/BreakingBad/MainPageVC.m @@ -265,12 +265,13 @@ - (void)initiateMenuOptions { @"Info", @"Save"]; - self.menuIcons = @[[UIImage imageNamed:@"cancel"], - [UIImage imageNamed:@"my_habits"], - [UIImage imageNamed:@"check_progress"], - [UIImage imageNamed:@"goals"], - [UIImage imageNamed:@"info"], - [UIImage imageNamed:@"save"]]; + + self.menuIcons = @[[UIImage imageNamed:@"cancel1"], + [UIImage imageNamed:@"my_habits1"], + [UIImage imageNamed:@"check_progress1"], + [UIImage imageNamed:@"goals1"], + [UIImage imageNamed:@"info1"], + [UIImage imageNamed:@"save1"]]; } #pragma mark @@ -432,7 +433,10 @@ - (UITableViewCell *)tableView:(YALContextMenuTableView *)tableView cellForRowAt if (cell) { cell.backgroundColor = [UIColor clearColor]; + //[SharedManager sharedModel].blueSky; cell.menuTitleLabel.text = [self.menuTitles objectAtIndex:indexPath.row]; + cell.menuTitleLabel.font = [UIFont fontWithName:@"Oranienbaum" size:22.0]; + cell.menuTitleLabel.textColor = [SharedManager sharedModel].brickRed; cell.menuTitleImage.image = [self.menuIcons objectAtIndex:indexPath.row]; cell.viewHoldingImageView.backgroundColor = [SharedManager sharedModel].tropicalDream; } diff --git a/BreakingBad/BreakingBad/MyHabitsTVC.m b/BreakingBad/BreakingBad/MyHabitsTVC.m index 84902bb..56f78ec 100644 --- a/BreakingBad/BreakingBad/MyHabitsTVC.m +++ b/BreakingBad/BreakingBad/MyHabitsTVC.m @@ -29,6 +29,15 @@ - (void)viewDidLoad { [super viewDidLoad]; self.navigationItem.title = @"My Habits"; + NSDictionary *titleAttributes =@{ + NSFontAttributeName :[UIFont fontWithName:@"Bariol" size:25.0], + NSForegroundColorAttributeName : [SharedManager sharedModel].brownForest, + //NSBackgroundColorAttributeName : [SharedManager sharedModel].tropicalDream + + }; + + self.navigationController.navigationBar.titleTextAttributes = titleAttributes; + [self addColorMyHabits]; } From fae2e9dc771a04d0c05204aa1c16f466cf9474e7 Mon Sep 17 00:00:00 2001 From: Mesfin Date: Wed, 21 Oct 2015 17:03:34 -0400 Subject: [PATCH 40/44] Added Time Ago Pod --- .../BreakingBad.xcodeproj/project.pbxproj | 6 - .../cancel1.imageset/Contents.json | 2 +- .../check_progress1.imageset/Contents.json | 2 +- .../goals1.imageset/Contents.json | 2 +- .../info1.imageset/Contents.json | 2 +- .../my_habits1.imageset/Contents.json | 21 + .../Meditation Guru Filled-50.png | Bin 0 -> 1154 bytes .../save1.imageset/Contents.json | 2 +- .../{Save as-50.png => Save as-50-1.png} | Bin .../BreakingBad/Base.lproj/Main.storyboard | 20 +- .../BreakingBad/EntryLogsTableViewCell.xib | 6 +- .../EntryLogsTableViewController.h | 2 - .../EntryLogsTableViewController.m | 53 +- BreakingBad/BreakingBad/FetchWeatherData.h | 26 - BreakingBad/BreakingBad/FetchWeatherData.m | 57 - BreakingBad/BreakingBad/MyHabitsTVC.m | 1 - BreakingBad/Podfile | 6 +- BreakingBad/Podfile.lock | 3 + .../Private/NSDate+TimeAgo/NSDate+TimeAgo.h | 1 + .../Public/NSDate+TimeAgo/NSDate+TimeAgo.h | 1 + BreakingBad/Pods/Manifest.lock | 3 + BreakingBad/Pods/NSDate+TimeAgo/LICENSE | 13 + .../Pods/NSDate+TimeAgo/NSDate+TimeAgo.h | 17 + .../Pods/NSDate+TimeAgo/NSDate+TimeAgo.m | 375 ++ .../ar.lproj/NSDateTimeAgo.strings | Bin 0 -> 3332 bytes .../bg.lproj/NSDateTimeAgo.strings | 71 + .../cs.lproj/NSDateTimeAgo.strings | 71 + .../da.lproj/NSDateTimeAgo.strings | 71 + .../de.lproj/NSDateTimeAgo.strings | 71 + .../en.lproj/NSDateTimeAgo.strings | 71 + .../es.lproj/NSDateTimeAgo.strings | 71 + .../fi.lproj/NSDateTimeAgo.strings | 71 + .../fr.lproj/NSDateTimeAgo.strings | 71 + .../gre.lproj/NSDateTimeAgo.strings | Bin 0 -> 3494 bytes .../he.lproj/NSDateTimeAgo.strings | 71 + .../hu.lproj/NSDateTimeAgo.strings | 71 + .../it.lproj/NSDateTimeAgo.strings | 71 + .../ja.lproj/NSDateTimeAgo.strings | 71 + .../ko.lproj/NSDateTimeAgo.strings | 71 + .../lv.lproj/NSDateTimeAgo.strings | 24 + .../nb.lproj/NSDateTimeAgo.strings | 125 + .../nl.lproj/NSDateTimeAgo.strings | 71 + .../pl.lproj/NSDateTimeAgo.strings | 71 + .../pt.lproj/NSDateTimeAgo.strings | 71 + .../ro.lproj/NSDateTimeAgo.strings | 71 + .../ru.lproj/NSDateTimeAgo.strings | 125 + .../sv.lproj/NSDateTimeAgo.strings | Bin 0 -> 3430 bytes .../th.lproj/NSDateTimeAgo.strings | Bin 0 -> 3462 bytes .../tr.lproj/NSDateTimeAgo.strings | 71 + .../vi.lproj/NSDateTimeAgo.strings | 71 + .../zh_Hans.lproj/NSDateTimeAgo.strings | 71 + .../zh_Hant.lproj/NSDateTimeAgo.strings | 71 + BreakingBad/Pods/NSDate+TimeAgo/README.md | 129 + .../Pods/Pods.xcodeproj/project.pbxproj | 4881 +++++++++-------- .../AFNetworking-Private.xcconfig | 2 +- .../Bolts/Bolts-Private.xcconfig | 2 +- .../ContextMenu.iOS-Private.xcconfig | 2 +- .../NSDate+TimeAgo-Private.xcconfig | 5 + .../NSDate+TimeAgo/NSDate+TimeAgo-dummy.m | 5 + .../NSDate+TimeAgo/NSDate+TimeAgo-prefix.pch | 4 + .../NSDate+TimeAgo/NSDate+TimeAgo.xcconfig | 0 .../Parse/Parse-Private.xcconfig | 2 +- .../ParseUI/ParseUI-Private.xcconfig | 2 +- .../Pods/Pods-acknowledgements.markdown | 17 + .../Pods/Pods-acknowledgements.plist | 21 + .../Pods/Pods-resources.sh | 2 + .../Pods/Pods.debug.xcconfig | 6 +- .../Pods/Pods.release.xcconfig | 6 +- .../pop/pop-Private.xcconfig | 2 +- 69 files changed, 4884 insertions(+), 2590 deletions(-) create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/my_habits1.imageset/Contents.json create mode 100644 BreakingBad/BreakingBad/Assets.xcassets/my_habits1.imageset/Meditation Guru Filled-50.png rename BreakingBad/BreakingBad/Assets.xcassets/save1.imageset/{Save as-50.png => Save as-50-1.png} (100%) delete mode 100644 BreakingBad/BreakingBad/FetchWeatherData.h delete mode 100644 BreakingBad/BreakingBad/FetchWeatherData.m create mode 120000 BreakingBad/Pods/Headers/Private/NSDate+TimeAgo/NSDate+TimeAgo.h create mode 120000 BreakingBad/Pods/Headers/Public/NSDate+TimeAgo/NSDate+TimeAgo.h create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/LICENSE create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDate+TimeAgo.h create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDate+TimeAgo.m create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/ar.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/bg.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/cs.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/da.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/de.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/en.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/es.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/fi.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/fr.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/gre.lproj/NSDateTimeAgo.strings create mode 100755 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/he.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/hu.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/it.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/ja.lproj/NSDateTimeAgo.strings create mode 100755 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/ko.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/lv.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/nb.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/nl.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/pl.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/pt.lproj/NSDateTimeAgo.strings create mode 100755 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/ro.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/ru.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/sv.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/th.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/tr.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/vi.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/zh_Hans.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/zh_Hant.lproj/NSDateTimeAgo.strings create mode 100644 BreakingBad/Pods/NSDate+TimeAgo/README.md create mode 100644 BreakingBad/Pods/Target Support Files/NSDate+TimeAgo/NSDate+TimeAgo-Private.xcconfig create mode 100644 BreakingBad/Pods/Target Support Files/NSDate+TimeAgo/NSDate+TimeAgo-dummy.m create mode 100644 BreakingBad/Pods/Target Support Files/NSDate+TimeAgo/NSDate+TimeAgo-prefix.pch create mode 100644 BreakingBad/Pods/Target Support Files/NSDate+TimeAgo/NSDate+TimeAgo.xcconfig diff --git a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj index 9c670aa..1a2a24e 100644 --- a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj +++ b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj @@ -48,7 +48,6 @@ DC2FFC5D1BD2EF2700A876F8 /* EntryLogsTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2FFC5B1BD2EF2700A876F8 /* EntryLogsTableViewCell.m */; settings = {ASSET_TAGS = (); }; }; DC2FFC5E1BD2EF2700A876F8 /* EntryLogsTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = DC2FFC5C1BD2EF2700A876F8 /* EntryLogsTableViewCell.xib */; settings = {ASSET_TAGS = (); }; }; DC51A76B1BCC4CD60044984B /* HabitList.m in Sources */ = {isa = PBXBuildFile; fileRef = DC51A76A1BCC4CD60044984B /* HabitList.m */; settings = {ASSET_TAGS = (); }; }; - DCB5888F1BD562BA00777FF9 /* FetchWeatherData.m in Sources */ = {isa = PBXBuildFile; fileRef = DCB5888E1BD562BA00777FF9 /* FetchWeatherData.m */; settings = {ASSET_TAGS = (); }; }; DCB588911BD5E65D00777FF9 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCB588901BD5E65D00777FF9 /* CoreLocation.framework */; }; DCBA27C21BCDE85800E61721 /* SharedManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DCBA27C11BCDE85800E61721 /* SharedManager.m */; settings = {ASSET_TAGS = (); }; }; DCBA27C61BCED16E00E61721 /* CustomContextTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = DCBA27C41BCED16E00E61721 /* CustomContextTableViewCell.m */; settings = {ASSET_TAGS = (); }; }; @@ -127,8 +126,6 @@ DC2FFC5C1BD2EF2700A876F8 /* EntryLogsTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = EntryLogsTableViewCell.xib; sourceTree = ""; }; DC51A7691BCC4CD60044984B /* HabitList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HabitList.h; sourceTree = ""; }; DC51A76A1BCC4CD60044984B /* HabitList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HabitList.m; sourceTree = ""; }; - DCB5888D1BD562BA00777FF9 /* FetchWeatherData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FetchWeatherData.h; sourceTree = ""; }; - DCB5888E1BD562BA00777FF9 /* FetchWeatherData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FetchWeatherData.m; sourceTree = ""; }; DCB588901BD5E65D00777FF9 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; DCBA27C01BCDE85800E61721 /* SharedManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SharedManager.h; sourceTree = ""; }; DCBA27C11BCDE85800E61721 /* SharedManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SharedManager.m; sourceTree = ""; }; @@ -229,8 +226,6 @@ 5F9B08311BCDAD1500460FF2 /* MainPageVC.m */, 5F058DEE1BD1912C001D93B2 /* MyHabitsTVC.h */, 5F058DEF1BD1912C001D93B2 /* MyHabitsTVC.m */, - DCB5888D1BD562BA00777FF9 /* FetchWeatherData.h */, - DCB5888E1BD562BA00777FF9 /* FetchWeatherData.m */, 5FDF1A2A1BD1B7E200720A44 /* EntryLogsTableViewController.h */, 5FDF1A2B1BD1B7E200720A44 /* EntryLogsTableViewController.m */, DC2FFC5A1BD2EF2700A876F8 /* EntryLogsTableViewCell.h */, @@ -475,7 +470,6 @@ 5F8FF9A51BC9A9CD00855DFB /* BreakingBad.xcdatamodeld in Sources */, 5FEAE2711BCB126700201A0E /* DismissingAnimationController.m in Sources */, DC2DC1941BCAEB8D00A627E2 /* BBUser.m in Sources */, - DCB5888F1BD562BA00777FF9 /* FetchWeatherData.m in Sources */, DC2FFC5D1BD2EF2700A876F8 /* EntryLogsTableViewCell.m in Sources */, DC51A76B1BCC4CD60044984B /* HabitList.m in Sources */, 5F8FF9991BC9A9CD00855DFB /* main.m in Sources */, diff --git a/BreakingBad/BreakingBad/Assets.xcassets/cancel1.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/cancel1.imageset/Contents.json index 94b516c..9d41973 100644 --- a/BreakingBad/BreakingBad/Assets.xcassets/cancel1.imageset/Contents.json +++ b/BreakingBad/BreakingBad/Assets.xcassets/cancel1.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", + "filename" : "Delete Filled-50.png", "scale" : "1x" }, { "idiom" : "universal", - "filename" : "Delete Filled-50.png", "scale" : "2x" }, { diff --git a/BreakingBad/BreakingBad/Assets.xcassets/check_progress1.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/check_progress1.imageset/Contents.json index 89b2e2e..21500f4 100644 --- a/BreakingBad/BreakingBad/Assets.xcassets/check_progress1.imageset/Contents.json +++ b/BreakingBad/BreakingBad/Assets.xcassets/check_progress1.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", + "filename" : "Positive Dynamic Filled-50.png", "scale" : "1x" }, { "idiom" : "universal", - "filename" : "Positive Dynamic Filled-50.png", "scale" : "2x" }, { diff --git a/BreakingBad/BreakingBad/Assets.xcassets/goals1.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/goals1.imageset/Contents.json index 470a234..cae7a11 100644 --- a/BreakingBad/BreakingBad/Assets.xcassets/goals1.imageset/Contents.json +++ b/BreakingBad/BreakingBad/Assets.xcassets/goals1.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", + "filename" : "Todo List Filled-50.png", "scale" : "1x" }, { "idiom" : "universal", - "filename" : "Todo List Filled-50.png", "scale" : "2x" }, { diff --git a/BreakingBad/BreakingBad/Assets.xcassets/info1.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/info1.imageset/Contents.json index 2640823..4bcdf1e 100644 --- a/BreakingBad/BreakingBad/Assets.xcassets/info1.imageset/Contents.json +++ b/BreakingBad/BreakingBad/Assets.xcassets/info1.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", + "filename" : "Info Popup-50.png", "scale" : "1x" }, { "idiom" : "universal", - "filename" : "Info Popup-50.png", "scale" : "2x" }, { diff --git a/BreakingBad/BreakingBad/Assets.xcassets/my_habits1.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/my_habits1.imageset/Contents.json new file mode 100644 index 0000000..a390eb6 --- /dev/null +++ b/BreakingBad/BreakingBad/Assets.xcassets/my_habits1.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Meditation Guru Filled-50.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/BreakingBad/BreakingBad/Assets.xcassets/my_habits1.imageset/Meditation Guru Filled-50.png b/BreakingBad/BreakingBad/Assets.xcassets/my_habits1.imageset/Meditation Guru Filled-50.png new file mode 100644 index 0000000000000000000000000000000000000000..f71b00c778681aee7a3efafbd6cbb8638cfad768 GIT binary patch literal 1154 zcmV-|1bzF7P)bo2mwXY2MH9LPNMV*(B84rTDf8%={l zf;lLV>nLcqG=H&iFje&IJc`#gwl+2g1+p0a5rEVOn}fmnO?Uh;wz9P_Iw+8N=tl&4 zXK^kV{HHgXMmDxKHU|ZAG8s9UJ0cV~iKvKwdewdEOmO%QeR4GE~?c^p0$w zu^0w@KnEato_){!8BlR|9MAUfw{q*zfE>fwAExYb*_GBWiAnmaGbWr7@FefG?uez| z!itGkTB+NgN)WS3mGXcIJp$S;nP6Z|jHK0~tKXwoKsNsDMXlQAFuNA`7sSctj!=&X zzgBw6n03dK%ce*g1F=%^tu`dP{KTK?9NkCl8v(hFf+tGzmxBML&M|-Oj;C$0mG$!| zzFQ3aHHe;8fnnfIZ<@(F*UU5mVj116Ro|3hK+3L-Sc2)YNr`R-q*m}Yu_R6BuiwYX zJoGc&@J7@A&D)^Iim&UV-Api@f!Ov_siNP6BJ*&Ny-&Q++AZ(trjJP|V zyeanN;u(Oczgw1NP~nXxFOHUxGFt7H%-lgQpP)PtND)8W50LzRn+b`_ zSk*csbx!VcfA(qJ_i9mg0nI~yK%l)wp9~JX(R9)zqs5-a8QD;QKUoW)$xB9(w&=3S zTSR`k5fI4&KvC_(s?KrdTgXtN7!~EV@~~2xE~Wi9;oe<$0`gZBoTVvCBiOMzi20UD z3IosGW`~#(xigx*3IIN_cGIf~HcJ9e6pT0&Q#^>plXyw$qU_xj2 z&0-VPDw~#~7pA$F5lHRWC!dsv1E#F)1H?vaj6mwduJ}`PA3?MMcn}~Pz0k|D>QWqV zR3OZs)0XO(^u?GFiP&Z!rvqZh(BS)kjj`;GC$I8#`CIxh-7)i55LRH7*v`2A1CbLz UQ4_H>0RR9107*qoM6N<$f^xw*CIA2c literal 0 HcmV?d00001 diff --git a/BreakingBad/BreakingBad/Assets.xcassets/save1.imageset/Contents.json b/BreakingBad/BreakingBad/Assets.xcassets/save1.imageset/Contents.json index f6bcbcd..5fa10aa 100644 --- a/BreakingBad/BreakingBad/Assets.xcassets/save1.imageset/Contents.json +++ b/BreakingBad/BreakingBad/Assets.xcassets/save1.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", + "filename" : "Save as-50-1.png", "scale" : "1x" }, { "idiom" : "universal", - "filename" : "Save as-50.png", "scale" : "2x" }, { diff --git a/BreakingBad/BreakingBad/Assets.xcassets/save1.imageset/Save as-50.png b/BreakingBad/BreakingBad/Assets.xcassets/save1.imageset/Save as-50-1.png similarity index 100% rename from BreakingBad/BreakingBad/Assets.xcassets/save1.imageset/Save as-50.png rename to BreakingBad/BreakingBad/Assets.xcassets/save1.imageset/Save as-50-1.png diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index 3d51012..22d7bc9 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -10,15 +10,6 @@ Avenir-Light Avenir-Light - - Bariol-Regular - Bariol-Regular - Bariol-Regular - Bariol-Regular - Bariol-Regular - Bariol-Regular - Bariol-Regular - Jaapokkisubtract-Regular Jaapokkisubtract-Regular @@ -34,6 +25,15 @@ Oranienbaum Oranienbaum + + Bariol-Regular + Bariol-Regular + Bariol-Regular + Bariol-Regular + Bariol-Regular + Bariol-Regular + Bariol-Regular + @@ -1320,7 +1320,7 @@ - + diff --git a/BreakingBad/BreakingBad/EntryLogsTableViewCell.xib b/BreakingBad/BreakingBad/EntryLogsTableViewCell.xib index 2e6ecb7..cbc81b7 100644 --- a/BreakingBad/BreakingBad/EntryLogsTableViewCell.xib +++ b/BreakingBad/BreakingBad/EntryLogsTableViewCell.xib @@ -16,19 +16,19 @@ diff --git a/BreakingBad/BreakingBad/EntryLogsTableViewController.h b/BreakingBad/BreakingBad/EntryLogsTableViewController.h index 5e43136..ffb8bd4 100644 --- a/BreakingBad/BreakingBad/EntryLogsTableViewController.h +++ b/BreakingBad/BreakingBad/EntryLogsTableViewController.h @@ -8,13 +8,11 @@ #import #import "Habit.h" -#import "FetchWeatherData.h" @interface EntryLogsTableViewController : UITableViewController @property (nonatomic) Habit *habit; -@property (nonatomic) FetchWeatherData *weatherData; -(void)addColorEntryLog; diff --git a/BreakingBad/BreakingBad/EntryLogsTableViewController.m b/BreakingBad/BreakingBad/EntryLogsTableViewController.m index 0d88038..b45dfef 100644 --- a/BreakingBad/BreakingBad/EntryLogsTableViewController.m +++ b/BreakingBad/BreakingBad/EntryLogsTableViewController.m @@ -13,6 +13,7 @@ #import "EntryLogsTableViewCell.h" #import #import "SharedManager.h" +#import "NSDate+TimeAgo.h" @@ -83,12 +84,14 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N Entry *entry = self.habit.entries[indexPath.row]; self.entryCreationDate = entry.createdAt; - NSString *dateString = [self dateStringFromDate:entry.createdAt]; + NSLog(@"Output for date is: %@",[entry.createdAt timeAgo]); + NSString *dateString = [entry.createdAt timeAgo]; cell.tempInfoLabel.text = entry.temperature; cell.locationLabel.text = entry.location; cell.entryDateLabel.text = dateString; + cell.backgroundColor = [SharedManager sharedModel].blueSky; cell.tempInfoLabel.textColor = [SharedManager sharedModel].brickRed; cell.tempInfoLabel.font = [UIFont fontWithName:@"Bariol" size:22.0]; @@ -122,51 +125,6 @@ -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath * [self.navigationController pushViewController:mainPageVC animated:YES]; } -//- (void)fetchWeatherData{ -// -// for(int i=0; i < self.urlStringsArray.count; i++){ -// AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; -// if(!self.temps){ -// self.temps = [NSMutableArray new]; -// } -// NSLog(@"%@",self.urlStringsArray); -// -// [manager GET:self.urlStringsArray[0] parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { -// -// NSDictionary *data = responseObject[@"data"]; -// NSArray *weatherData = data[@"weather"]; -// NSLog(@"%@", weatherData); -// self.data = weatherData; -// -// NSDictionary *dict = self.data[0]; -// NSArray *hourlyDataArray = dict[@"hourly"]; -// NSDictionary *hourlyDataDictionary = hourlyDataArray[0]; -// NSString *tempF = hourlyDataDictionary[@"tempF"]; -// // NSString *tempC = hourlyDataDictionary[@"tempC"]; -// -// [self.temps addObject:tempF]; -// [self.tableView reloadData]; -// } failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) { -// NSLog(@"Error: %@", error.localizedDescription); -// }]; -// } -//} - -//-(NSArray *)urlStringsArray{ -// NSArray *array = [self arrayWithFormattedDateStrings]; -// NSLog(@"Date Strings in array%@",array); -// -// NSMutableArray *urlStringsArray = [NSMutableArray new]; -// -// for(NSString *string in array){ -// -// NSString *urlString = [NSString stringWithFormat:@"https://api.worldweatheronline.com/free/v2/past-weather.ashx?q=22%%2C22&format=json&date=%@&tp=24&key=%@",string,WEATHERAPIKEY]; -// [urlStringsArray addObject:urlString]; -// } -// return urlStringsArray; -// -//} - -(NSString *)formattedDateStringForAPI:(NSDate *)date{ NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; @@ -186,7 +144,4 @@ -(NSString *)formattedDateStringForAPI:(NSDate *)date{ return dateStrings; } - - - @end diff --git a/BreakingBad/BreakingBad/FetchWeatherData.h b/BreakingBad/BreakingBad/FetchWeatherData.h deleted file mode 100644 index 4bdc52e..0000000 --- a/BreakingBad/BreakingBad/FetchWeatherData.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// FetchWeatherData.h -// BreakingBad -// -// Created by Mesfin Bekele Mekonnen on 10/19/15. -// Copyright © 2015 Zoufishan Mehdi. All rights reserved. -// - -#import -#import "Habit.h" - -@interface FetchWeatherData : NSObject - -@property (nonatomic) NSArray *urlStringsArray; - -@property (nonatomic) NSMutableArray *temps; - - -@property (nonatomic) Habit *habit; - -@property (nonatomic) NSArray *data; - -@property (nonatomic) NSOperationQueue *primeQueue; - - -@end diff --git a/BreakingBad/BreakingBad/FetchWeatherData.m b/BreakingBad/BreakingBad/FetchWeatherData.m deleted file mode 100644 index dc3f8ab..0000000 --- a/BreakingBad/BreakingBad/FetchWeatherData.m +++ /dev/null @@ -1,57 +0,0 @@ -// -// FetchWeatherData.m -// BreakingBad -// -// Created by Mesfin Bekele Mekonnen on 10/19/15. -// Copyright © 2015 Zoufishan Mehdi. All rights reserved. -// - -#import "FetchWeatherData.h" -#import "SharedManager.h" -#import - - - -@implementation FetchWeatherData - --(instancetype)init{ - if (self = [super init]) { - self.habit = [SharedManager sharedModel].habit; - //[self fetchWeatherData]; - //self.primeQueue = [NSOperationQueue new]; - [self data]; - return self; - } - return nil; -} - - - --(NSArray *)data{ - NSMutableArray *operationArray =[NSMutableArray new]; - for(int i=0; i < self.urlStringsArray.count; i++) - { - NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ - NSMutableArray *urlRequests = [NSMutableArray new]; - - NSURL *url = [NSURL URLWithString:self.urlStringsArray[i]]; - NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url]; - [urlRequests addObject:urlRequest]; - - }]; - [operationArray addObject:operation]; - } - [self.primeQueue addOperations:operationArray waitUntilFinished:YES]; - - [AFURLConnectionOperation batchOfRequestOperations:operationArray progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) { - NSLog(@"%lu",(unsigned long)numberOfFinishedOperations); - } completionBlock:^(NSArray * _Nonnull operations) { - NSLog(@"%@",operations); - }]; - return operationArray; - -} - - - -@end diff --git a/BreakingBad/BreakingBad/MyHabitsTVC.m b/BreakingBad/BreakingBad/MyHabitsTVC.m index 56f78ec..5e98095 100644 --- a/BreakingBad/BreakingBad/MyHabitsTVC.m +++ b/BreakingBad/BreakingBad/MyHabitsTVC.m @@ -8,7 +8,6 @@ #import "MyHabitsTVC.h" #import "Habit.h" -#import "FetchWeatherData.h" #import "EntryLogsTableViewController.h" #import #import diff --git a/BreakingBad/Podfile b/BreakingBad/Podfile index 56eab7f..27b4f25 100644 --- a/BreakingBad/Podfile +++ b/BreakingBad/Podfile @@ -6,4 +6,8 @@ pod 'ContextMenu.iOS', '~> 1.0.0' pod 'ContextMenu.iOS', '~> 1.0.0' -pod 'ParseUI' \ No newline at end of file +pod 'ParseUI' + +pod 'NSDate+TimeAgo' + +pod "AFNetworking", "~> 2.0" \ No newline at end of file diff --git a/BreakingBad/Podfile.lock b/BreakingBad/Podfile.lock index 25b486b..5064dc4 100644 --- a/BreakingBad/Podfile.lock +++ b/BreakingBad/Podfile.lock @@ -22,6 +22,7 @@ PODS: - AFNetworking/NSURLSession - Bolts/Tasks (1.3.0) - ContextMenu.iOS (1.0.0) + - NSDate+TimeAgo (1.0.3) - Parse (1.9.0): - Bolts/Tasks (>= 1.3.0) - ParseUI (1.1.6): @@ -32,6 +33,7 @@ PODS: DEPENDENCIES: - AFNetworking (~> 2.0) - ContextMenu.iOS (~> 1.0.0) + - NSDate+TimeAgo - Parse - ParseUI - pop (~> 1.0) @@ -40,6 +42,7 @@ SPEC CHECKSUMS: AFNetworking: 8e4e60500beb8bec644cf575beee72990a76d399 Bolts: 805a4a87413e49d4a0c2b7d469084cbc46b09342 ContextMenu.iOS: 7da78b3f99e604669b75e55146c6c33147f64f99 + NSDate+TimeAgo: 416f55d2696d3744c313091c5a9280d47f8238fe Parse: 712efbc476d4f47b0f96b70db7e53101575753aa ParseUI: 8a22e448c03f825203d8c379c80523517f68baa3 pop: bb773ae2c791ca2629de13b347e7a8b450fa6a57 diff --git a/BreakingBad/Pods/Headers/Private/NSDate+TimeAgo/NSDate+TimeAgo.h b/BreakingBad/Pods/Headers/Private/NSDate+TimeAgo/NSDate+TimeAgo.h new file mode 120000 index 0000000..edf20f2 --- /dev/null +++ b/BreakingBad/Pods/Headers/Private/NSDate+TimeAgo/NSDate+TimeAgo.h @@ -0,0 +1 @@ +../../../NSDate+TimeAgo/NSDate+TimeAgo.h \ No newline at end of file diff --git a/BreakingBad/Pods/Headers/Public/NSDate+TimeAgo/NSDate+TimeAgo.h b/BreakingBad/Pods/Headers/Public/NSDate+TimeAgo/NSDate+TimeAgo.h new file mode 120000 index 0000000..edf20f2 --- /dev/null +++ b/BreakingBad/Pods/Headers/Public/NSDate+TimeAgo/NSDate+TimeAgo.h @@ -0,0 +1 @@ +../../../NSDate+TimeAgo/NSDate+TimeAgo.h \ No newline at end of file diff --git a/BreakingBad/Pods/Manifest.lock b/BreakingBad/Pods/Manifest.lock index 25b486b..5064dc4 100644 --- a/BreakingBad/Pods/Manifest.lock +++ b/BreakingBad/Pods/Manifest.lock @@ -22,6 +22,7 @@ PODS: - AFNetworking/NSURLSession - Bolts/Tasks (1.3.0) - ContextMenu.iOS (1.0.0) + - NSDate+TimeAgo (1.0.3) - Parse (1.9.0): - Bolts/Tasks (>= 1.3.0) - ParseUI (1.1.6): @@ -32,6 +33,7 @@ PODS: DEPENDENCIES: - AFNetworking (~> 2.0) - ContextMenu.iOS (~> 1.0.0) + - NSDate+TimeAgo - Parse - ParseUI - pop (~> 1.0) @@ -40,6 +42,7 @@ SPEC CHECKSUMS: AFNetworking: 8e4e60500beb8bec644cf575beee72990a76d399 Bolts: 805a4a87413e49d4a0c2b7d469084cbc46b09342 ContextMenu.iOS: 7da78b3f99e604669b75e55146c6c33147f64f99 + NSDate+TimeAgo: 416f55d2696d3744c313091c5a9280d47f8238fe Parse: 712efbc476d4f47b0f96b70db7e53101575753aa ParseUI: 8a22e448c03f825203d8c379c80523517f68baa3 pop: bb773ae2c791ca2629de13b347e7a8b450fa6a57 diff --git a/BreakingBad/Pods/NSDate+TimeAgo/LICENSE b/BreakingBad/Pods/NSDate+TimeAgo/LICENSE new file mode 100644 index 0000000..9bd9df4 --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/LICENSE @@ -0,0 +1,13 @@ +Copyright (c) 2011-2013, Kevin Lawler + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDate+TimeAgo.h b/BreakingBad/Pods/NSDate+TimeAgo/NSDate+TimeAgo.h new file mode 100644 index 0000000..a797f19 --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDate+TimeAgo.h @@ -0,0 +1,17 @@ +@interface NSDate (TimeAgo) +- (NSString *) timeAgoSimple; +- (NSString *) timeAgo; +- (NSString *) timeAgoWithLimit:(NSTimeInterval)limit; +- (NSString *) timeAgoWithLimit:(NSTimeInterval)limit dateFormat:(NSDateFormatterStyle)dFormatter andTimeFormat:(NSDateFormatterStyle)tFormatter; +- (NSString *) timeAgoWithLimit:(NSTimeInterval)limit dateFormatter:(NSDateFormatter *)formatter; + + +// this method only returns "{value} {unit} ago" strings and no "yesterday"/"last month" strings +- (NSString *)dateTimeAgo; + +// this method gives when possible the date compared to the current calendar date: "this morning"/"yesterday"/"last week"/.. +// when more precision is needed (= less than 6 hours ago) it returns the same output as dateTimeAgo +- (NSString *)dateTimeUntilNow; + +@end + diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDate+TimeAgo.m b/BreakingBad/Pods/NSDate+TimeAgo/NSDate+TimeAgo.m new file mode 100644 index 0000000..5bda16e --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDate+TimeAgo.m @@ -0,0 +1,375 @@ +#import "NSDate+TimeAgo.h" + +@interface NSDate() +-(NSString *)getLocaleFormatUnderscoresWithValue:(double)value; +@end + +@implementation NSDate (TimeAgo) + +#ifndef NSDateTimeAgoLocalizedStrings +#define NSDateTimeAgoLocalizedStrings(key) \ +NSLocalizedStringFromTableInBundle(key, @"NSDateTimeAgo", [NSBundle bundleWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"NSDateTimeAgo.bundle"]], nil) +#endif + +// shows 1 or two letter abbreviation for units. +// does not include 'ago' text ... just {value}{unit-abbreviation} +// does not include interim summary options such as 'Just now' +- (NSString *)timeAgoSimple +{ + NSDate *now = [NSDate date]; + double deltaSeconds = fabs([self timeIntervalSinceDate:now]); + double deltaMinutes = deltaSeconds / 60.0f; + + int value; + + if(deltaSeconds < 60) + { + return [self stringFromFormat:@"%%d%@s" withValue:deltaSeconds]; + } + else if (deltaMinutes < 60) + { + return [self stringFromFormat:@"%%d%@m" withValue:deltaMinutes]; + } + else if (deltaMinutes < (24 * 60)) + { + value = (int)floor(deltaMinutes/60); + return [self stringFromFormat:@"%%d%@h" withValue:value]; + } + else if (deltaMinutes < (24 * 60 * 7)) + { + value = (int)floor(deltaMinutes/(60 * 24)); + return [self stringFromFormat:@"%%d%@d" withValue:value]; + } + else if (deltaMinutes < (24 * 60 * 31)) + { + value = (int)floor(deltaMinutes/(60 * 24 * 7)); + return [self stringFromFormat:@"%%d%@w" withValue:value]; + } + else if (deltaMinutes < (24 * 60 * 365.25)) + { + value = (int)floor(deltaMinutes/(60 * 24 * 30)); + return [self stringFromFormat:@"%%d%@mo" withValue:value]; + } + + value = (int)floor(deltaMinutes/(60 * 24 * 365)); + return [self stringFromFormat:@"%%d%@yr" withValue:value]; +} + +- (NSString *)timeAgo +{ + NSDate *now = [NSDate date]; + double deltaSeconds = fabs([self timeIntervalSinceDate:now]); + double deltaMinutes = deltaSeconds / 60.0f; + + int minutes; + + if(deltaSeconds < 5) + { + return NSDateTimeAgoLocalizedStrings(@"Just now"); + } + else if(deltaSeconds < 60) + { + return [self stringFromFormat:@"%%d %@seconds ago" withValue:deltaSeconds]; + } + else if(deltaSeconds < 120) + { + return NSDateTimeAgoLocalizedStrings(@"A minute ago"); + } + else if (deltaMinutes < 60) + { + return [self stringFromFormat:@"%%d %@minutes ago" withValue:deltaMinutes]; + } + else if (deltaMinutes < 120) + { + return NSDateTimeAgoLocalizedStrings(@"An hour ago"); + } + else if (deltaMinutes < (24 * 60)) + { + minutes = (int)floor(deltaMinutes/60); + return [self stringFromFormat:@"%%d %@hours ago" withValue:minutes]; + } + else if (deltaMinutes < (24 * 60 * 2)) + { + return NSDateTimeAgoLocalizedStrings(@"Yesterday"); + } + else if (deltaMinutes < (24 * 60 * 7)) + { + minutes = (int)floor(deltaMinutes/(60 * 24)); + return [self stringFromFormat:@"%%d %@days ago" withValue:minutes]; + } + else if (deltaMinutes < (24 * 60 * 14)) + { + return NSDateTimeAgoLocalizedStrings(@"Last week"); + } + else if (deltaMinutes < (24 * 60 * 31)) + { + minutes = (int)floor(deltaMinutes/(60 * 24 * 7)); + return [self stringFromFormat:@"%%d %@weeks ago" withValue:minutes]; + } + else if (deltaMinutes < (24 * 60 * 61)) + { + return NSDateTimeAgoLocalizedStrings(@"Last month"); + } + else if (deltaMinutes < (24 * 60 * 365.25)) + { + minutes = (int)floor(deltaMinutes/(60 * 24 * 30)); + return [self stringFromFormat:@"%%d %@months ago" withValue:minutes]; + } + else if (deltaMinutes < (24 * 60 * 731)) + { + return NSDateTimeAgoLocalizedStrings(@"Last year"); + } + + minutes = (int)floor(deltaMinutes/(60 * 24 * 365)); + return [self stringFromFormat:@"%%d %@years ago" withValue:minutes]; +} + +// Similar to timeAgo, but only returns " +- (NSString *)dateTimeAgo +{ + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSDate * now = [NSDate date]; + NSDateComponents *components = [calendar components: + NSYearCalendarUnit| + NSMonthCalendarUnit| + NSWeekCalendarUnit| + NSDayCalendarUnit| + NSHourCalendarUnit| + NSMinuteCalendarUnit| + NSSecondCalendarUnit + fromDate:self + toDate:now + options:0]; + + if (components.year >= 1) + { + if (components.year == 1) + { + return NSDateTimeAgoLocalizedStrings(@"1 year ago"); + } + return [self stringFromFormat:@"%%d %@years ago" withValue:components.year]; + } + else if (components.month >= 1) + { + if (components.month == 1) + { + return NSDateTimeAgoLocalizedStrings(@"1 month ago"); + } + return [self stringFromFormat:@"%%d %@months ago" withValue:components.month]; + } + else if (components.week >= 1) + { + if (components.week == 1) + { + return NSDateTimeAgoLocalizedStrings(@"1 week ago"); + } + return [self stringFromFormat:@"%%d %@weeks ago" withValue:components.week]; + } + else if (components.day >= 1) // up to 6 days ago + { + if (components.day == 1) + { + return NSDateTimeAgoLocalizedStrings(@"1 day ago"); + } + return [self stringFromFormat:@"%%d %@days ago" withValue:components.day]; + } + else if (components.hour >= 1) // up to 23 hours ago + { + if (components.hour == 1) + { + return NSDateTimeAgoLocalizedStrings(@"An hour ago"); + } + return [self stringFromFormat:@"%%d %@hours ago" withValue:components.hour]; + } + else if (components.minute >= 1) // up to 59 minutes ago + { + if (components.minute == 1) + { + return NSDateTimeAgoLocalizedStrings(@"A minute ago"); + } + return [self stringFromFormat:@"%%d %@minutes ago" withValue:components.minute]; + } + else if (components.second < 5) + { + return NSDateTimeAgoLocalizedStrings(@"Just now"); + } + + // between 5 and 59 seconds ago + return [self stringFromFormat:@"%%d %@seconds ago" withValue:components.second]; +} + + + +- (NSString *)dateTimeUntilNow +{ + NSDate * now = [NSDate date]; + NSCalendar *calendar = [NSCalendar currentCalendar]; + + NSDateComponents *components = [calendar components:NSHourCalendarUnit + fromDate:self + toDate:now + options:0]; + + if (components.hour >= 6) // if more than 6 hours ago, change precision + { + NSInteger startDay = [calendar ordinalityOfUnit:NSDayCalendarUnit + inUnit:NSEraCalendarUnit + forDate:self]; + NSInteger endDay = [calendar ordinalityOfUnit:NSDayCalendarUnit + inUnit:NSEraCalendarUnit + forDate:now]; + + NSInteger diffDays = endDay - startDay; + if (diffDays == 0) // today! + { + NSDateComponents * startHourComponent = [calendar components:NSHourCalendarUnit fromDate:self]; + NSDateComponents * endHourComponent = [calendar components:NSHourCalendarUnit fromDate:self]; + if (startHourComponent.hour < 12 && + endHourComponent.hour > 12) + { + return NSDateTimeAgoLocalizedStrings(@"This morning"); + } + else if (startHourComponent.hour >= 12 && + startHourComponent.hour < 18 && + endHourComponent.hour >= 18) + { + return NSDateTimeAgoLocalizedStrings(@"This afternoon"); + } + return NSDateTimeAgoLocalizedStrings(@"Today"); + } + else if (diffDays == 1) + { + return NSDateTimeAgoLocalizedStrings(@"Yesterday"); + } + else + { + NSInteger startWeek = [calendar ordinalityOfUnit:NSWeekCalendarUnit + inUnit:NSEraCalendarUnit + forDate:self]; + NSInteger endWeek = [calendar ordinalityOfUnit:NSWeekCalendarUnit + inUnit:NSEraCalendarUnit + forDate:now]; + NSInteger diffWeeks = endWeek - startWeek; + if (diffWeeks == 0) + { + return NSDateTimeAgoLocalizedStrings(@"This week"); + } + else if (diffWeeks == 1) + { + return NSDateTimeAgoLocalizedStrings(@"Last week"); + } + else + { + NSInteger startMonth = [calendar ordinalityOfUnit:NSMonthCalendarUnit + inUnit:NSEraCalendarUnit + forDate:self]; + NSInteger endMonth = [calendar ordinalityOfUnit:NSMonthCalendarUnit + inUnit:NSEraCalendarUnit + forDate:now]; + NSInteger diffMonths = endMonth - startMonth; + if (diffMonths == 0) + { + return NSDateTimeAgoLocalizedStrings(@"This month"); + } + else if (diffMonths == 1) + { + return NSDateTimeAgoLocalizedStrings(@"Last month"); + } + else + { + NSInteger startYear = [calendar ordinalityOfUnit:NSYearCalendarUnit + inUnit:NSEraCalendarUnit + forDate:self]; + NSInteger endYear = [calendar ordinalityOfUnit:NSYearCalendarUnit + inUnit:NSEraCalendarUnit + forDate:now]; + NSInteger diffYears = endYear - startYear; + if (diffYears == 0) + { + return NSDateTimeAgoLocalizedStrings(@"This year"); + } + else if (diffYears == 1) + { + return NSDateTimeAgoLocalizedStrings(@"Last year"); + } + } + } + } + } + + // anything else uses "time ago" precision + return [self dateTimeAgo]; +} + + + +- (NSString *) stringFromFormat:(NSString *)format withValue:(NSInteger)value +{ + NSString * localeFormat = [NSString stringWithFormat:format, [self getLocaleFormatUnderscoresWithValue:value]]; + return [NSString stringWithFormat:NSDateTimeAgoLocalizedStrings(localeFormat), value]; +} + +- (NSString *) timeAgoWithLimit:(NSTimeInterval)limit +{ + return [self timeAgoWithLimit:limit dateFormat:NSDateFormatterFullStyle andTimeFormat:NSDateFormatterFullStyle]; +} + +- (NSString *) timeAgoWithLimit:(NSTimeInterval)limit dateFormat:(NSDateFormatterStyle)dFormatter andTimeFormat:(NSDateFormatterStyle)tFormatter +{ + if (fabs([self timeIntervalSinceDate:[NSDate date]]) <= limit) + return [self timeAgo]; + + return [NSDateFormatter localizedStringFromDate:self + dateStyle:dFormatter + timeStyle:tFormatter]; +} + +- (NSString *) timeAgoWithLimit:(NSTimeInterval)limit dateFormatter:(NSDateFormatter *)formatter +{ + if (fabs([self timeIntervalSinceDate:[NSDate date]]) <= limit) + return [self timeAgo]; + + return [formatter stringFromDate:self]; +} + +// Helper functions + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation" + +/* + - Author : Almas Adilbek + - Method : getLocaleFormatUnderscoresWithValue + - Param : value (Double value of seconds or minutes) + - Return : @"" or the set of underscores ("_") + in order to define exact translation format for specific translation rules. + (Ex: "%d _seconds ago" for "%d секунды назад", "%d __seconds ago" for "%d секунда назад", + and default format without underscore %d seconds ago" for "%d секунд назад") + Updated : 12/12/2012 + + Note : This method must be used for all languages that have specific translation rules. + Using method argument "value" you must define all possible conditions language have for translation + and return set of underscores ("_") as it is an ID for locale format. No underscore ("") means default locale format; + */ +-(NSString *)getLocaleFormatUnderscoresWithValue:(double)value +{ + NSString *localeCode = [[NSLocale preferredLanguages] objectAtIndex:0]; + + // Russian (ru) + if([localeCode isEqual:@"ru"]) { + int XY = (int)floor(value) % 100; + int Y = (int)floor(value) % 10; + + if(Y == 0 || Y > 4 || (XY > 10 && XY < 15)) return @""; + if(Y > 1 && Y < 5 && (XY < 10 || XY > 20)) return @"_"; + if(Y == 1 && XY != 11) return @"__"; + } + + // Add more languages here, which are have specific translation rules... + + return @""; +} + +#pragma clang diagnostic pop + +@end diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/ar.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/ar.lproj/NSDateTimeAgo.strings new file mode 100644 index 0000000000000000000000000000000000000000..4c6a3dc2a2626f0d9b508d26dfdb33ccba82c9b1 GIT binary patch literal 3332 zcmchZO;5r=5QgV82Yy9EqkI^w1T_-l0b{|`kCPXVRS<}wH6RlHy!y_T&6Y?*FJnkI zWmxFL%=^yl&v!sg^5~ILtgl#Sc#SBbPrU!2IU-*)r6FQNL|$l(RX!ghn&57PJ;#VO zDWD2f>A>t8QjDDo#AEDC5%=f{SCvBU^9g&KeLhEAUS53gO%5}sR6mr9NShd`J4`pP}b`EzPS)QJG*(13RL2{0&=+jsqZL^4H z>QHDGQ{sPltcSLFWFCb7#PV$BflP%tI-bl>$Kr#cqgItRTw?!!u}iXCXemP&oI;B! zbSIBcSY;M7IF)KYOGNmb_Pq;lpP=QKIMS+2J6#u;2&=$kZ=~4gy literal 0 HcmV?d00001 diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/bg.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/bg.lproj/NSDateTimeAgo.strings new file mode 100644 index 0000000..b40d6b7 --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/bg.lproj/NSDateTimeAgo.strings @@ -0,0 +1,71 @@ +/* No comment provided by engineer. */ +"%d days ago" = "преди %d дена"; + +/* No comment provided by engineer. */ +"%d hours ago" = "преди %d часа"; + +/* No comment provided by engineer. */ +"%d minutes ago" = "преди %d минути"; + +/* No comment provided by engineer. */ +"%d months ago" = "преди %d месеца"; + +/* No comment provided by engineer. */ +"%d seconds ago" = "преди %d секунди"; + +/* No comment provided by engineer. */ +"%d weeks ago" = "преди %d седмици"; + +/* No comment provided by engineer. */ +"%d years ago" = "преди %d години"; + +/* No comment provided by engineer. */ +"A minute ago" = "преди минута"; + +/* No comment provided by engineer. */ +"An hour ago" = "преди час"; + +/* No comment provided by engineer. */ +"Just now" = "току що"; + +/* No comment provided by engineer. */ +"Last month" = "през последния месец"; + +/* No comment provided by engineer. */ +"Last week" = "през последната седмица"; + +/* No comment provided by engineer. */ +"Last year" = "през последната година"; + +/* No comment provided by engineer. */ +"Yesterday" = "вчера"; + +/* No comment provided by engineer. */ +"1 year ago" = "преди 1 година"; + +/* No comment provided by engineer. */ +"1 month ago" = "преди 1 месец"; + +/* No comment provided by engineer. */ +"1 week ago" = "преди 1 седмица"; + +/* No comment provided by engineer. */ +"1 day ago" = "преди 1 ден"; + +/* No comment provided by engineer. */ +"This morning" = "тази сутрин"; + +/* No comment provided by engineer. */ +"This afternoon" = "тази вечер"; + +/* No comment provided by engineer. */ +"Today" = "днес"; + +/* No comment provided by engineer. */ +"This week" = "тази седмица"; + +/* No comment provided by engineer. */ +"This month" = "този месец"; + +/* No comment provided by engineer. */ +"This year" = "тази година"; diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/cs.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/cs.lproj/NSDateTimeAgo.strings new file mode 100644 index 0000000..5a1ed47 --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/cs.lproj/NSDateTimeAgo.strings @@ -0,0 +1,71 @@ +/* No comment provided by engineer. */ +"%d days ago" = "Před %d dny"; + +/* No comment provided by engineer. */ +"%d hours ago" = "Před %d hodinami"; + +/* No comment provided by engineer. */ +"%d minutes ago" = "Před %d minutami"; + +/* No comment provided by engineer. */ +"%d months ago" = "Před %d měsíci"; + +/* No comment provided by engineer. */ +"%d seconds ago" = "Před %d sekundami"; + +/* No comment provided by engineer. */ +"%d weeks ago" = "Před %d týdny"; + +/* No comment provided by engineer. */ +"%d years ago" = "Před %d lety"; + +/* No comment provided by engineer. */ +"A minute ago" = "Před minutou"; + +/* No comment provided by engineer. */ +"An hour ago" = "Před hodinou"; + +/* No comment provided by engineer. */ +"Just now" = "Právě teď"; + +/* No comment provided by engineer. */ +"Last month" = "Minulý měsíc"; + +/* No comment provided by engineer. */ +"Last week" = "Minulý týden"; + +/* No comment provided by engineer. */ +"Last year" = "Minulý rok"; + +/* No comment provided by engineer. */ +"Yesterday" = "Včera"; + +/* No comment provided by engineer. */ +"1 year ago" = "Před rokem"; + +/* No comment provided by engineer. */ +"1 month ago" = "Před měsícem"; + +/* No comment provided by engineer. */ +"1 week ago" = "Před týdnem"; + +/* No comment provided by engineer. */ +"1 day ago" = "Předevčírem"; + +/* No comment provided by engineer. */ +"This morning" = "Dnes dopoledne"; + +/* No comment provided by engineer. */ +"This afternoon" = "Dnes odpoledne"; + +/* No comment provided by engineer. */ +"Today" = "Dnes"; + +/* No comment provided by engineer. */ +"This week" = "Tento týden"; + +/* No comment provided by engineer. */ +"This month" = "Tento měsíc"; + +/* No comment provided by engineer. */ +"This year" = "Letos"; diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/da.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/da.lproj/NSDateTimeAgo.strings new file mode 100644 index 0000000..d75138e --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/da.lproj/NSDateTimeAgo.strings @@ -0,0 +1,71 @@ +/* No comment provided by engineer. */ + "%d days ago" = "%d dage siden"; + + /* No comment provided by engineer. */ + "%d hours ago" = "%d timer siden"; + + /* No comment provided by engineer. */ + "%d minutes ago" = "%d minutter siden"; + + /* No comment provided by engineer. */ + "%d months ago" = "%d måneder siden"; + + /* No comment provided by engineer. */ + "%d seconds ago" = "%d sekunder siden"; + + /* No comment provided by engineer. */ + "%d weeks ago" = "%d uger siden"; + + /* No comment provided by engineer. */ + "%d years ago" = "%d år siden"; + + /* No comment provided by engineer. */ + "A minute ago" = "Et minut siden"; + + /* No comment provided by engineer. */ + "An hour ago" = "En time siden"; + +/* No comment provided by engineer. */ +"Just now" = "Lige nu"; + +/* No comment provided by engineer. */ +"Last month" = "Sidste måned"; + +/* No comment provided by engineer. */ +"Last week" = "Sidste uge"; + +/* No comment provided by engineer. */ +"Last year" = "Sidste år"; + +/* No comment provided by engineer. */ +"Yesterday" = "I går"; + +/* No comment provided by engineer. */ +"1 year ago" = "1 år siden"; + +/* No comment provided by engineer. */ +"1 month ago" = "1 måned siden"; + +/* No comment provided by engineer. */ +"1 week ago" = "1 uge siden"; + +/* No comment provided by engineer. */ +"1 day ago" = "1 dag siden"; + +/* No comment provided by engineer. */ +"This morning" = "Her til morgen"; + +/* No comment provided by engineer. */ +"This afternoon" = "Her til eftermiddag"; + +/* No comment provided by engineer. */ +"Today" = "I dag"; + +/* No comment provided by engineer. */ +"This week" = "Denne uge"; + +/* No comment provided by engineer. */ +"This month" = "Denne måned"; + +/* No comment provided by engineer. */ +"This year" = "Dette år"; \ No newline at end of file diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/de.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/de.lproj/NSDateTimeAgo.strings new file mode 100644 index 0000000..d2ece3a --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/de.lproj/NSDateTimeAgo.strings @@ -0,0 +1,71 @@ +/* No comment provided by engineer. */ + "%d days ago" = "Vor %d Tagen"; + + /* No comment provided by engineer. */ + "%d hours ago" = "Vor %d Stunden"; + + /* No comment provided by engineer. */ + "%d minutes ago" = "Vor %d Minuten"; + + /* No comment provided by engineer. */ + "%d months ago" = "Vor %d Monaten"; + + /* No comment provided by engineer. */ + "%d seconds ago" = "Vor %d Sekunden"; + + /* No comment provided by engineer. */ + "%d weeks ago" = "Vor %d Wochen"; + + /* No comment provided by engineer. */ + "%d years ago" = "Vor %d Jahren"; + + /* No comment provided by engineer. */ + "A minute ago" = "Vor einer Minute"; + + /* No comment provided by engineer. */ + "An hour ago" = "Vor einer Stunde"; + +/* No comment provided by engineer. */ +"Just now" = "Gerade eben"; + +/* No comment provided by engineer. */ +"Last month" = "Letzten Monat"; + +/* No comment provided by engineer. */ +"Last week" = "Letzte Woche"; + +/* No comment provided by engineer. */ +"Last year" = "Letztes Jahr"; + +/* No comment provided by engineer. */ +"Yesterday" = "Gestern"; + +/* No comment provided by engineer. */ +"1 year ago" = "Vor 1 Jahr"; + +/* No comment provided by engineer. */ +"1 month ago" = "Vor 1 Monat"; + +/* No comment provided by engineer. */ +"1 week ago" = "Vor 1 Woche"; + +/* No comment provided by engineer. */ +"1 day ago" = "Vor 1 Tag"; + +/* No comment provided by engineer. */ +"This morning" = "Heute Morgen"; + +/* No comment provided by engineer. */ +"This afternoon" = "Heute Nachmittag"; + +/* No comment provided by engineer. */ +"Today" = "Heute"; + +/* No comment provided by engineer. */ +"This week" = "Diese Woche"; + +/* No comment provided by engineer. */ +"This month" = "Diesen Monat"; + +/* No comment provided by engineer. */ +"This year" = "Dieses Jahr"; diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/en.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/en.lproj/NSDateTimeAgo.strings new file mode 100644 index 0000000..18e24e7 --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/en.lproj/NSDateTimeAgo.strings @@ -0,0 +1,71 @@ +/* No comment provided by engineer. */ +"%d days ago" = "%d days ago"; + +/* No comment provided by engineer. */ +"%d hours ago" = "%d hours ago"; + +/* No comment provided by engineer. */ +"%d minutes ago" = "%d minutes ago"; + +/* No comment provided by engineer. */ +"%d months ago" = "%d months ago"; + +/* No comment provided by engineer. */ +"%d seconds ago" = "%d seconds ago"; + +/* No comment provided by engineer. */ +"%d weeks ago" = "%d weeks ago"; + +/* No comment provided by engineer. */ +"%d years ago" = "%d years ago"; + +/* No comment provided by engineer. */ +"A minute ago" = "A minute ago"; + +/* No comment provided by engineer. */ +"An hour ago" = "An hour ago"; + +/* No comment provided by engineer. */ +"Just now" = "Just now"; + +/* No comment provided by engineer. */ +"Last month" = "Last month"; + +/* No comment provided by engineer. */ +"Last week" = "Last week"; + +/* No comment provided by engineer. */ +"Last year" = "Last year"; + +/* No comment provided by engineer. */ +"Yesterday" = "Yesterday"; + +/* No comment provided by engineer. */ +"1 year ago" = "1 year ago"; + +/* No comment provided by engineer. */ +"1 month ago" = "1 month ago"; + +/* No comment provided by engineer. */ +"1 week ago" = "1 week ago"; + +/* No comment provided by engineer. */ +"1 day ago" = "1 day ago"; + +/* No comment provided by engineer. */ +"This morning" = "This morning"; + +/* No comment provided by engineer. */ +"This afternoon" = "This afternoon"; + +/* No comment provided by engineer. */ +"Today" = "Today"; + +/* No comment provided by engineer. */ +"This week" = "This week"; + +/* No comment provided by engineer. */ +"This month" = "This month"; + +/* No comment provided by engineer. */ +"This year" = "This year"; diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/es.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/es.lproj/NSDateTimeAgo.strings new file mode 100644 index 0000000..6c0b885 --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/es.lproj/NSDateTimeAgo.strings @@ -0,0 +1,71 @@ +/* No comment provided by engineer. */ +"%d days ago" = "Hace %d días"; + +/* No comment provided by engineer. */ +"%d hours ago" = "Hace %d horas"; + +/* No comment provided by engineer. */ +"%d minutes ago" = "Hace %d minutos"; + +/* No comment provided by engineer. */ +"%d months ago" = "Hace %d meses"; + +/* No comment provided by engineer. */ +"%d seconds ago" = "Hace %d segundos"; + +/* No comment provided by engineer. */ +"%d weeks ago" = "Hace %d semanas"; + +/* No comment provided by engineer. */ +"%d years ago" = "Hace %d años"; + +/* No comment provided by engineer. */ +"A minute ago" = "Hace un minuto"; + +/* No comment provided by engineer. */ +"An hour ago" = "Hace una hora"; + +/* No comment provided by engineer. */ +"Just now" = "Ahora mismo"; + +/* No comment provided by engineer. */ +"Last month" = "El mes pasado"; + +/* No comment provided by engineer. */ +"Last week" = "La semana pasada"; + +/* No comment provided by engineer. */ +"Last year" = "El año pasado"; + +/* No comment provided by engineer. */ +"Yesterday" = "Ayer"; + +/* No comment provided by engineer. */ +"1 year ago" = "Hace un año"; + +/* No comment provided by engineer. */ +"1 month ago" = "Hace un mes"; + +/* No comment provided by engineer. */ +"1 week ago" = "Hace una semana"; + +/* No comment provided by engineer. */ +"1 day ago" = "Hace un día"; + +/* No comment provided by engineer. */ +"This morning" = "Esta mañana"; + +/* No comment provided by engineer. */ +"This afternoon" = "Esta tarde"; + +/* No comment provided by engineer. */ +"Today" = "Hoy"; + +/* No comment provided by engineer. */ +"This week" = "Esta semana"; + +/* No comment provided by engineer. */ +"This month" = "Este mes"; + +/* No comment provided by engineer. */ +"This year" = "Este año"; diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/fi.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/fi.lproj/NSDateTimeAgo.strings new file mode 100644 index 0000000..91072c3 --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/fi.lproj/NSDateTimeAgo.strings @@ -0,0 +1,71 @@ +/* No comment provided by engineer. */ +"%d days ago" = "%d päivää sitten"; + +/* No comment provided by engineer. */ +"%d hours ago" = "%d tuntia sitten"; + +/* No comment provided by engineer. */ +"%d minutes ago" = "%d minuuttia sitten"; + +/* No comment provided by engineer. */ +"%d months ago" = "%d kuukautta sitten"; + +/* No comment provided by engineer. */ +"%d seconds ago" = "%d sekuntia sitten"; + +/* No comment provided by engineer. */ +"%d weeks ago" = "%d viikkoa sitten"; + +/* No comment provided by engineer. */ +"%d years ago" = "%d vuotta sitten"; + +/* No comment provided by engineer. */ +"A minute ago" = "Minuutti sitten"; + +/* No comment provided by engineer. */ +"An hour ago" = "Tunti sitten"; + +/* No comment provided by engineer. */ +"Just now" = "Juuri äsken"; + +/* No comment provided by engineer. */ +"Last month" = "Viime kuussa"; + +/* No comment provided by engineer. */ +"Last week" = "Viime viikolla"; + +/* No comment provided by engineer. */ +"Last year" = "Viime vuonna"; + +/* No comment provided by engineer. */ +"Yesterday" = "Eilen"; + +/* No comment provided by engineer. */ +"1 year ago" = "Vuosi sitten"; + +/* No comment provided by engineer. */ +"1 month ago" = "Kuukausi sitten"; + +/* No comment provided by engineer. */ +"1 week ago" = "Viikko sitten"; + +/* No comment provided by engineer. */ +"1 day ago" = "Vuorokausi sitten"; + +/* No comment provided by engineer. */ +"This morning" = "Tänä aamuna"; + +/* No comment provided by engineer. */ +"This afternoon" = "Tänä iltapäivänä"; + +/* No comment provided by engineer. */ +"Today" = "Tänään"; + +/* No comment provided by engineer. */ +"This week" = "Tällä viikolla"; + +/* No comment provided by engineer. */ +"This month" = "Tässä kuussa"; + +/* No comment provided by engineer. */ +"This year" = "Tänä vuonna"; diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/fr.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/fr.lproj/NSDateTimeAgo.strings new file mode 100644 index 0000000..c25d2b1 --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/fr.lproj/NSDateTimeAgo.strings @@ -0,0 +1,71 @@ +/* No comment provided by engineer. */ +"%d days ago" = "Il y a %d jours"; + +/* No comment provided by engineer. */ +"%d hours ago" = "Il y a %d heures"; + +/* No comment provided by engineer. */ +"%d minutes ago" = "Il y a %d minutes"; + +/* No comment provided by engineer. */ +"%d months ago" = "Il y a %d mois"; + +/* No comment provided by engineer. */ +"%d seconds ago" = "Il y a %d secondes"; + +/* No comment provided by engineer. */ +"%d weeks ago" = "Il y a %d semaines"; + +/* No comment provided by engineer. */ +"%d years ago" = "Il y a %d ans"; + +/* No comment provided by engineer. */ +"A minute ago" = "Il y a une minute"; + +/* No comment provided by engineer. */ +"An hour ago" = "Il y a une heure"; + +/* No comment provided by engineer. */ +"Just now" = "A l'instant"; + +/* No comment provided by engineer. */ +"Last month" = "Le mois dernier"; + +/* No comment provided by engineer. */ +"Last week" = "La semaine dernière"; + +/* No comment provided by engineer. */ +"Last year" = "L'année dernière"; + +/* No comment provided by engineer. */ +"Yesterday" = "Hier"; + +/* No comment provided by engineer. */ +"1 year ago" = "Il y a 1 an"; + +/* No comment provided by engineer. */ +"1 month ago" = "Il y a 1 mois"; + +/* No comment provided by engineer. */ +"1 week ago" = "Il y a 1 semaine"; + +/* No comment provided by engineer. */ +"1 day ago" = "Il y a 1 jour"; + +/* No comment provided by engineer. */ +"This morning" = "Ce matin"; + +/* No comment provided by engineer. */ +"This afternoon" = "Cet après-midi"; + +/* No comment provided by engineer. */ +"Today" = "Aujourd'hui"; + +/* No comment provided by engineer. */ +"This week" = "Cette semaine"; + +/* No comment provided by engineer. */ +"This month" = "Ce mois-ci"; + +/* No comment provided by engineer. */ +"This year" = "Cette année"; diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/gre.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/gre.lproj/NSDateTimeAgo.strings new file mode 100644 index 0000000000000000000000000000000000000000..994e9f726640963cada0c58cf2292251c461a4e4 GIT binary patch literal 3494 zcmchZPfJ2k5XA>(*Qa<0ZCWI)qlMduR&H8ano9T#&BTw(sTsf5ZYF+-@h_c z5{LS5Sd<=iz%+(hUG#FwR=c*cc2zSIN0A7-e9IjkVged?)mN|vwp7Fkm>AU_F{^rt zC6EZ=8JL$AO?a%0)UbV=s`W7ehk5XRkQVcp27F_fBrWt*+D2-XO&Ave%T5pt3)^-#_OG--AJK58l8`+5bInrevMXo}ro+ z@+;2Ai+Hr%D>T-(i&&QBR$&TUvWUo@;PfUZi8Rie9aVZ(LO#pcGaK^nCC(s{Hj=}V zg_1dvMQ=!Gt$A`(DLOP~I3X+I;V&R-;}kbVM#}kQpty4+!7@APVWsqyv95MWb7szD kEz_kSmzU*e*Dp8uvs}|(_h`?&qp_*zSgw)8;$fS{-$$@|mjD0& literal 0 HcmV?d00001 diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/he.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/he.lproj/NSDateTimeAgo.strings new file mode 100755 index 0000000..65e536c --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/he.lproj/NSDateTimeAgo.strings @@ -0,0 +1,71 @@ +/* No comment provided by engineer. */ +"%d days ago" = "לפני %d ימים"; + +/* No comment provided by engineer. */ +"%d hours ago" = "לפני %d שעות"; + +/* No comment provided by engineer. */ +"%d minutes ago" = "לפני %d דקות"; + +/* No comment provided by engineer. */ +"%d months ago" = "לפני %d חודשים"; + +/* No comment provided by engineer. */ +"%d seconds ago" = "לפני %d שניות"; + +/* No comment provided by engineer. */ +"%d weeks ago" = "לפני %d שבועות"; + +/* No comment provided by engineer. */ +"%d years ago" = "לפני %d שנים"; + +/* No comment provided by engineer. */ +"A minute ago" = "לפני דקה"; + +/* No comment provided by engineer. */ +"An hour ago" = "לפני שעה"; + +/* No comment provided by engineer. */ +"Just now" = "ממש עכשיו"; + +/* No comment provided by engineer. */ +"Last month" = "בחודש שעבר"; + +/* No comment provided by engineer. */ +"Last week" = "בשבוע שעבר"; + +/* No comment provided by engineer. */ +"Last year" = "בשנה שעברה"; + +/* No comment provided by engineer. */ +"Yesterday" = "אתמול"; + +/* No comment provided by engineer. */ +"1 year ago" = "לפני שנה"; + +/* No comment provided by engineer. */ +"1 month ago" = "לפני חודש"; + +/* No comment provided by engineer. */ +"1 week ago" = "לפני שבוע"; + +/* No comment provided by engineer. */ +"1 day ago" = "לפני יום"; + +/* No comment provided by engineer. */ +"This morning" = "הבוקר"; + +/* No comment provided by engineer. */ +"This afternoon" = "בצהריים"; + +/* No comment provided by engineer. */ +"Today" = "היום"; + +/* No comment provided by engineer. */ +"This week" = "השבוע"; + +/* No comment provided by engineer. */ +"This month" = "החודש"; + +/* No comment provided by engineer. */ +"This year" = "השנה"; diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/hu.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/hu.lproj/NSDateTimeAgo.strings new file mode 100644 index 0000000..98a5ad6 --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/hu.lproj/NSDateTimeAgo.strings @@ -0,0 +1,71 @@ +/* No comment provided by engineer. */ +"%d days ago" = "%d napja"; + +/* No comment provided by engineer. */ +"%d hours ago" = "%d órája"; + +/* No comment provided by engineer. */ +"%d minutes ago" = "%d perce"; + +/* No comment provided by engineer. */ +"%d months ago" = "%d hónapja"; + +/* No comment provided by engineer. */ +"%d seconds ago" = "%d másodperce"; + +/* No comment provided by engineer. */ +"%d weeks ago" = "%d hete"; + +/* No comment provided by engineer. */ +"%d years ago" = "%d éve"; + +/* No comment provided by engineer. */ +"A minute ago" = "Egy perccel ezelőtt"; + +/* No comment provided by engineer. */ +"An hour ago" = "Egy órával ezelőtt"; + +/* No comment provided by engineer. */ +"Just now" = "Az imént"; + +/* No comment provided by engineer. */ +"Last month" = "Az előző hónapban"; + +/* No comment provided by engineer. */ +"Last week" = "Az előző héten"; + +/* No comment provided by engineer. */ +"Last year" = "Tavaly"; + +/* No comment provided by engineer. */ +"Yesterday" = "Tegnap"; + +/* No comment provided by engineer. */ +"1 year ago" = "Tavaly"; + +/* No comment provided by engineer. */ +"1 month ago" = "Egy hónapja"; + +/* No comment provided by engineer. */ +"1 week ago" = "Egy hete"; + +/* No comment provided by engineer. */ +"1 day ago" = "Tegnap"; + +/* No comment provided by engineer. */ +"This morning" = "Ma reggel"; + +/* No comment provided by engineer. */ +"This afternoon" = "Ma délután"; + +/* No comment provided by engineer. */ +"Today" = "Ma"; + +/* No comment provided by engineer. */ +"This week" = "Ezen a héten"; + +/* No comment provided by engineer. */ +"This month" = "Ebben a hónapban"; + +/* No comment provided by engineer. */ +"This year" = "Idén"; diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/it.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/it.lproj/NSDateTimeAgo.strings new file mode 100644 index 0000000..c33d90b --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/it.lproj/NSDateTimeAgo.strings @@ -0,0 +1,71 @@ +/* No comment provided by engineer. */ +"%d days ago" = "%d giorni fa"; + +/* No comment provided by engineer. */ +"%d hours ago" = "%d ore fa"; + +/* No comment provided by engineer. */ +"%d minutes ago" = "%d minuti fa"; + +/* No comment provided by engineer. */ +"%d months ago" = "%d mesi fa"; + +/* No comment provided by engineer. */ +"%d seconds ago" = "%d secondi fa"; + +/* No comment provided by engineer. */ +"%d weeks ago" = "%d settimane fa"; + +/* No comment provided by engineer. */ +"%d years ago" = "%d anni fa"; + +/* No comment provided by engineer. */ +"A minute ago" = "Un minuto fa"; + +/* No comment provided by engineer. */ +"An hour ago" = "Un'ora fa"; + +/* No comment provided by engineer. */ +"Just now" = "Ora"; + +/* No comment provided by engineer. */ +"Last month" = "Il mese scorso"; + +/* No comment provided by engineer. */ +"Last week" = "La settimana scorsa"; + +/* No comment provided by engineer. */ +"Last year" = "L'anno scorso"; + +/* No comment provided by engineer. */ +"Yesterday" = "Ieri"; + +/* No comment provided by engineer. */ +"1 year ago" = "Un anno fa"; + +/* No comment provided by engineer. */ +"1 month ago" = "Un mese fa"; + +/* No comment provided by engineer. */ +"1 week ago" = "Una settimana fa"; + +/* No comment provided by engineer. */ +"1 day ago" = "Un giorno fa"; + +/* No comment provided by engineer. */ +"This morning" = "Questa mattina"; + +/* No comment provided by engineer. */ +"This afternoon" = "Questo pomeriggio"; + +/* No comment provided by engineer. */ +"Today" = "Oggi"; + +/* No comment provided by engineer. */ +"This week" = "Questa settimana"; + +/* No comment provided by engineer. */ +"This month" = "Questo mese"; + +/* No comment provided by engineer. */ +"This year" = "Quest'anno"; diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/ja.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/ja.lproj/NSDateTimeAgo.strings new file mode 100644 index 0000000..b93f5ef --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/ja.lproj/NSDateTimeAgo.strings @@ -0,0 +1,71 @@ +/* No comment provided by engineer. */ +"%d days ago" = "%d日前"; + +/* No comment provided by engineer. */ +"%d hours ago" = "%d時間前"; + +/* No comment provided by engineer. */ +"%d minutes ago" = "%d分前"; + +/* No comment provided by engineer. */ +"%d months ago" = "%dヶ月前"; + +/* No comment provided by engineer. */ +"%d seconds ago" = "%d秒前"; + +/* No comment provided by engineer. */ +"%d weeks ago" = "%d週間前"; + +/* No comment provided by engineer. */ +"%d years ago" = "%d年前"; + +/* No comment provided by engineer. */ +"A minute ago" = "1分間前"; + +/* No comment provided by engineer. */ +"An hour ago" = "1時間前"; + +/* No comment provided by engineer. */ +"Just now" = "先程"; + +/* No comment provided by engineer. */ +"Last month" = "先月"; + +/* No comment provided by engineer. */ +"Last week" = "先週"; + +/* No comment provided by engineer. */ +"Last year" = "去年"; + +/* No comment provided by engineer. */ +"Yesterday" = "昨日"; + +/* No comment provided by engineer. */ +"1 year ago" = "一年前"; + +/* No comment provided by engineer. */ +"1 month ago" = "一ヶ月前"; + +/* No comment provided by engineer. */ +"1 week ago" = "一週間前"; + +/* No comment provided by engineer. */ +"1 day ago" = "一日前"; + +/* No comment provided by engineer. */ +"This morning" = "今朝"; + +/* No comment provided by engineer. */ +"This afternoon" = "今晩"; + +/* No comment provided by engineer. */ +"Today" = "今日"; + +/* No comment provided by engineer. */ +"This week" = "今週"; + +/* No comment provided by engineer. */ +"This month" = "今月"; + +/* No comment provided by engineer. */ +"This year" = "今年"; diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/ko.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/ko.lproj/NSDateTimeAgo.strings new file mode 100755 index 0000000..b91d9d8 --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/ko.lproj/NSDateTimeAgo.strings @@ -0,0 +1,71 @@ +/* No comment provided by engineer. */ +"%d days ago" = "%d일전"; + +/* No comment provided by engineer. */ +"%d hours ago" = "%d시간전"; + +/* No comment provided by engineer. */ +"%d minutes ago" = "%d분전"; + +/* No comment provided by engineer. */ +"%d months ago" = "%d개월전"; + +/* No comment provided by engineer. */ +"%d seconds ago" = "%d초전"; + +/* No comment provided by engineer. */ +"%d weeks ago" = "%d주전"; + +/* No comment provided by engineer. */ +"%d years ago" = "%d년전"; + +/* No comment provided by engineer. */ +"A minute ago" = "1분전"; + +/* No comment provided by engineer. */ +"An hour ago" = "1시간전"; + +/* No comment provided by engineer. */ +"Just now" = "방금전"; + +/* No comment provided by engineer. */ +"Last month" = "지난달"; + +/* No comment provided by engineer. */ +"Last week" = "지난주"; + +/* No comment provided by engineer. */ +"Last year" = "지난해"; + +/* No comment provided by engineer. */ +"Yesterday" = "어제"; + +/* No comment provided by engineer. */ +"1 year ago" = "1년전"; + +/* No comment provided by engineer. */ +"1 month ago" = "1개월전"; + +/* No comment provided by engineer. */ +"1 week ago" = "1주전"; + +/* No comment provided by engineer. */ +"1 day ago" = "1일전"; + +/* No comment provided by engineer. */ +"This morning" = "오늘 아침"; + +/* No comment provided by engineer. */ +"This afternoon" = "오늘 오후"; + +/* No comment provided by engineer. */ +"Today" = "오늘"; + +/* No comment provided by engineer. */ +"This week" = "이번주"; + +/* No comment provided by engineer. */ +"This month" = "이번달"; + +/* No comment provided by engineer. */ +"This year" = "올해"; diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/lv.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/lv.lproj/NSDateTimeAgo.strings new file mode 100644 index 0000000..57c3eb6 --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/lv.lproj/NSDateTimeAgo.strings @@ -0,0 +1,24 @@ +"1 year ago" = "Pirms gada"; +"1 month ago" = "Pirms mēneša"; +"1 week ago" = "Pirms nedēļas"; +"1 day ago" = "Pirms dienas"; +"A minute ago" = "Pirms minūtes"; +"An hour ago" = "Pirms stundas"; +"Last month" = "Pagājušajā mēnesī"; +"Last week" = "Pagājušajā nedēļā"; +"Last year" = "Pagājušajā gadā"; +"Just now" = "Tikko"; +"Today" = "Šodien"; +"Yesterday" = "Vakar"; +"This morning" = "Šorīt"; +"This afternoon" = "Pēcpusdienā"; +"This week" = "Šonedēļ"; +"This month" = "Šomēnes"; +"This year" = "Šogad"; +"%d seconds ago" = "Pirms %d sekundēm"; +"%d minutes ago" = "Pirms %d minūtēm"; +"%d hours ago" = "Pirms %d stundām"; +"%d days ago" = "Pirms %d dienām"; +"%d weeks ago" = "Pirms %d nedēļām"; +"%d months ago" = "Pirms %d mēnešiem"; +"%d years ago" = "Pirms %d gadiem"; diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/nb.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/nb.lproj/NSDateTimeAgo.strings new file mode 100644 index 0000000..5975a49 --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/nb.lproj/NSDateTimeAgo.strings @@ -0,0 +1,125 @@ +/* + RULES: + Assume value for (seconds, hours, minutes, days, weeks, months or years) is XXXY, Y is last digit, XY is last two digits; + */ + +/* Y ==0 OR Y > 4 OR XY == 11; */ +"%d days ago" = "%d dager siden"; + +/* If Y != 1 AND Y < 5; */ +"%d _days ago" = "%d dager siden"; + +/* If Y == 1; */ +"%d __days ago" = "%d dag siden"; + + +/* Y ==0 OR Y > 4 OR XY == 11; */ +"%d hours ago" = "%d timer siden"; + +/* If Y != 1 AND Y < 5; */ +"%d _hours ago" = "%d timer siden"; + +/* If Y == 1; */ +"%d __hours ago" = "%d time siden"; + + +/* Y ==0 OR Y > 4 OR XY == 11; */ +"%d minutes ago" = "%d minutter siden"; + +/* If Y != 1 AND Y < 5; */ +"%d _minutes ago" = "%d minutter siden"; + +/* If Y == 1; */ +"%d __minutes ago" = "%d minutt siden"; + + +/* Y ==0 OR Y > 4 OR XY == 11; */ +"%d months ago" = "%d måneder siden"; + +/* If Y != 1 AND Y < 5; */ +"%d _months ago" = "%d måneder siden"; + +/* If Y == 1; */ +"%d __months ago" = "%d måned siden"; + + +/* Y ==0 OR Y > 4 OR XY == 11; */ +"%d seconds ago" = "%d sekunder siden"; + +/* If Y != 1 AND Y < 5; */ +"%d _seconds ago" = "%d sekunder siden"; + +/* If Y == 1; */ +"%d __seconds ago" = "%d sekund siden"; + + +/* Y ==0 OR Y > 4 OR XY == 11; */ +"%d weeks ago" = "%d uker siden"; + +/* If Y != 1 AND Y < 5; */ +"%d _weeks ago" = "%d uker siden"; + +/* If Y == 1; */ +"%d __weeks ago" = "%d uke siden"; + + +/* Y ==0 OR Y > 4 OR XY == 11; */ +"%d years ago" = "%d år siden"; + +/* If Y != 1 AND Y < 5; */ +"%d _years ago" = "%d år siden"; + +/* If Y == 1; */ +"%d __years ago" = "%d år siden"; + + +/* No comment provided by engineer. */ +"A minute ago" = "Et minutt siden"; + +/* No comment provided by engineer. */ +"An hour ago" = "En time siden"; + +/* No comment provided by engineer. */ +"Just now" = "Nå"; + +/* No comment provided by engineer. */ +"Last month" = "For en måned siden"; + +/* No comment provided by engineer. */ +"Last week" = "For en uke siden"; + +/* No comment provided by engineer. */ +"Last year" = "For et år siden"; + +/* No comment provided by engineer. */ +"Yesterday" = "I går"; + +/* No comment provided by engineer. */ +"1 year ago" = "1 år siden"; + +/* No comment provided by engineer. */ +"1 month ago" = "1 måned siden"; + +/* No comment provided by engineer. */ +"1 week ago" = "1 uke siden"; + +/* No comment provided by engineer. */ +"1 day ago" = "1 dag siden"; + +/* No comment provided by engineer. */ +"This morning" = "Denne morgenen"; + +/* No comment provided by engineer. */ +"This afternoon" = "I ettermiddag"; + +/* No comment provided by engineer. */ +"Today" = "I dag"; + +/* No comment provided by engineer. */ +"This week" = "Denne uken"; + +/* No comment provided by engineer. */ +"This month" = "Denne måneden"; + +/* No comment provided by engineer. */ +"This year" = "Dette året"; diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/nl.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/nl.lproj/NSDateTimeAgo.strings new file mode 100644 index 0000000..7e03c6c --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/nl.lproj/NSDateTimeAgo.strings @@ -0,0 +1,71 @@ +/* No comment provided by engineer. */ +"%d days ago" = "%d dagen geleden"; + +/* No comment provided by engineer. */ +"%d hours ago" = "%d uur geleden"; + +/* No comment provided by engineer. */ +"%d minutes ago" = "%d minuten geleden"; + +/* No comment provided by engineer. */ +"%d months ago" = "%d maanden geleden"; + +/* No comment provided by engineer. */ +"%d seconds ago" = "%d seconden geleden"; + +/* No comment provided by engineer. */ +"%d weeks ago" = "%d weken geleden"; + +/* No comment provided by engineer. */ +"%d years ago" = "%d jaar geleden"; + +/* No comment provided by engineer. */ +"A minute ago" = "Een minuut geleden"; + +/* No comment provided by engineer. */ +"An hour ago" = "Een uur geleden"; + +/* No comment provided by engineer. */ +"Just now" = "Zojuist"; + +/* No comment provided by engineer. */ +"Last month" = "Vorige maand"; + +/* No comment provided by engineer. */ +"Last week" = "Vorige week"; + +/* No comment provided by engineer. */ +"Last year" = "Vorig jaar"; + +/* No comment provided by engineer. */ +"Yesterday" = "Gisteren"; + +/* No comment provided by engineer. */ +"1 year ago" = "1 jaar geleden"; + +/* No comment provided by engineer. */ +"1 month ago" = "1 maand geleden"; + +/* No comment provided by engineer. */ +"1 week ago" = "1 week geleden"; + +/* No comment provided by engineer. */ +"1 day ago" = "1 dag geleden"; + +/* No comment provided by engineer. */ +"This morning" = "Vanmorgen"; + +/* No comment provided by engineer. */ +"This afternoon" = "Vanmiddag"; + +/* No comment provided by engineer. */ +"Today" = "Vandaag"; + +/* No comment provided by engineer. */ +"This week" = "Deze week"; + +/* No comment provided by engineer. */ +"This month" = "Deze maand"; + +/* No comment provided by engineer. */ +"This year" = "Dit jaar"; diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/pl.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/pl.lproj/NSDateTimeAgo.strings new file mode 100644 index 0000000..7ff84ed --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/pl.lproj/NSDateTimeAgo.strings @@ -0,0 +1,71 @@ +/* No comment provided by engineer. */ +"%d days ago" = "%d dni temu"; + +/* No comment provided by engineer. */ +"%d hours ago" = "%d godzin(y) temu"; + +/* No comment provided by engineer. */ +"%d minutes ago" = "%d minut(y) temu"; + +/* No comment provided by engineer. */ +"%d months ago" = "%d miesice/-y temu"; + +/* No comment provided by engineer. */ +"%d seconds ago" = "%d sekund(y) temu"; + +/* No comment provided by engineer. */ +"%d weeks ago" = "%d tygodni(e) temu"; + +/* No comment provided by engineer. */ +"%d years ago" = "%d lat(a) temu"; + +/* No comment provided by engineer. */ +"A minute ago" = "Minut temu"; + +/* No comment provided by engineer. */ +"An hour ago" = "Godzin temu"; + +/* No comment provided by engineer. */ +"Just now" = "W tej chwili"; + +/* No comment provided by engineer. */ +"Last month" = "W zeszBym miesicu"; + +/* No comment provided by engineer. */ +"Last week" = "W zeszBym tygodniu"; + +/* No comment provided by engineer. */ +"Last year" = "W zeszBym roku"; + +/* No comment provided by engineer. */ +"Yesterday" = "Wczoraj"; + +/* No comment provided by engineer. */ +"1 year ago" = "1 rok temu"; + +/* No comment provided by engineer. */ +"1 month ago" = "1 miesic temu"; + +/* No comment provided by engineer. */ +"1 week ago" = "1 tydzieD temu"; + +/* No comment provided by engineer. */ +"1 day ago" = "1 dzieD temu"; + +/* No comment provided by engineer. */ +"This morning" = "Dzi[ rano"; + +/* No comment provided by engineer. */ +"This afternoon" = "Dzi[ po poBudniu"; + +/* No comment provided by engineer. */ +"Today" = "Dzisiaj"; + +/* No comment provided by engineer. */ +"This week" = "W tym tygodniu"; + +/* No comment provided by engineer. */ +"This month" = "W tym miesicu"; + +/* No comment provided by engineer. */ +"This year" = "W tym roku"; diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/pt.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/pt.lproj/NSDateTimeAgo.strings new file mode 100644 index 0000000..6143dd8 --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/pt.lproj/NSDateTimeAgo.strings @@ -0,0 +1,71 @@ +/* No comment provided by engineer. */ +"%d days ago" = "%d dias atrás"; + +/* No comment provided by engineer. */ +"%d hours ago" = "%d horas atrás"; + +/* No comment provided by engineer. */ +"%d minutes ago" = "%d minutos atrás"; + +/* No comment provided by engineer. */ +"%d months ago" = "%d meses atrás"; + +/* No comment provided by engineer. */ +"%d seconds ago" = "%d segundos atrás"; + +/* No comment provided by engineer. */ +"%d weeks ago" = "%d semanas atrás"; + +/* No comment provided by engineer. */ +"%d years ago" = "%d anos atrás"; + +/* No comment provided by engineer. */ +"A minute ago" = "Há um minuto"; + +/* No comment provided by engineer. */ +"An hour ago" = "Há uma hora"; + +/* No comment provided by engineer. */ +"Just now" = "Agora"; + +/* No comment provided by engineer. */ +"Last month" = "Mês passado"; + +/* No comment provided by engineer. */ +"Last week" = "Semana passada"; + +/* No comment provided by engineer. */ +"Last year" = "Ano passado"; + +/* No comment provided by engineer. */ +"Yesterday" = "Ontem"; + +/* No comment provided by engineer. */ +"1 year ago" = "1 ano atrás"; + +/* No comment provided by engineer. */ +"1 month ago" = "1 mês atrás"; + +/* No comment provided by engineer. */ +"1 week ago" = "1 semana atrás"; + +/* No comment provided by engineer. */ +"1 day ago" = "1 dia atrás"; + +/* No comment provided by engineer. */ +"This morning" = "Esta manhã"; + +/* No comment provided by engineer. */ +"This afternoon" = "Esta tarde"; + +/* No comment provided by engineer. */ +"Today" = "Hoje"; + +/* No comment provided by engineer. */ +"This week" = "Esta semana"; + +/* No comment provided by engineer. */ +"This month" = "Este mês"; + +/* No comment provided by engineer. */ +"This year" = "Este ano"; diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/ro.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/ro.lproj/NSDateTimeAgo.strings new file mode 100755 index 0000000..24849d5 --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/ro.lproj/NSDateTimeAgo.strings @@ -0,0 +1,71 @@ +/* No comment provided by engineer. */ +"%d days ago" = "În urmă cu %d zile"; + +/* No comment provided by engineer. */ +"%d hours ago" = "În urmă cu %d ore"; + +/* No comment provided by engineer. */ +"%d minutes ago" = "În urmă cu %d minute"; + +/* No comment provided by engineer. */ +"%d months ago" = "În urmă cu %d luni"; + +/* No comment provided by engineer. */ +"%d seconds ago" = "În urmă cu %d secunde"; + +/* No comment provided by engineer. */ +"%d weeks ago" = "În urmă cu %d săptămâni"; + +/* No comment provided by engineer. */ +"%d years ago" = "În urmă cu %d ani"; + +/* No comment provided by engineer. */ +"A minute ago" = "În urmă cu 1 minut"; + +/* No comment provided by engineer. */ +"An hour ago" = "În urmă cu 1 oră"; + +/* No comment provided by engineer. */ +"Just now" = "Acum câteva momente"; + +/* No comment provided by engineer. */ +"Last month" = "Luna trecută"; + +/* No comment provided by engineer. */ +"Last week" = "Săptămâna trecută"; + +/* No comment provided by engineer. */ +"Last year" = "Anul trecut"; + +/* No comment provided by engineer. */ +"Yesterday" = "Ieri"; + +/* No comment provided by engineer. */ +"1 year ago" = "În urmă cu 1 an"; + +/* No comment provided by engineer. */ +"1 month ago" = "În urmă cu 1 lună"; + +/* No comment provided by engineer. */ +"1 week ago" = "În urmă cu 1 săptămână"; + +/* No comment provided by engineer. */ +"1 day ago" = "În urmă cu 1 zi"; + +/* No comment provided by engineer. */ +"This morning" = "Azi dimineață"; + +/* No comment provided by engineer. */ +"This afternoon" = "În această seară"; + +/* No comment provided by engineer. */ +"Today" = "Astăzi"; + +/* No comment provided by engineer. */ +"This week" = "Săptămâna aceasta"; + +/* No comment provided by engineer. */ +"This month" = "Luna aceasta"; + +/* No comment provided by engineer. */ +"This year" = "Anul acesta"; \ No newline at end of file diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/ru.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/ru.lproj/NSDateTimeAgo.strings new file mode 100644 index 0000000..dc279ec --- /dev/null +++ b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/ru.lproj/NSDateTimeAgo.strings @@ -0,0 +1,125 @@ +/* + RULES: + Assume value for (seconds, hours, minutes, days, weeks, months or years) is XXXY, Y is last digit, XY is last two digits; + */ + +/* Y == 0 OR Y > 4 OR (XY > 10 AND XY < 15); */ +"%d days ago" = "%d дней назад"; + +/* Y > 1 AND Y < 5 AND (XY < 10 OR XY > 20); */ +"%d _days ago" = "%d дня назад"; + +/* Y == 1 AND XY != 11; */ +"%d __days ago" = "%d день назад"; + + +/* Y == 0 OR Y > 4 OR (XY > 10 AND XY < 15); */ +"%d hours ago" = "%d часов назад"; + +/* Y > 1 AND Y < 5 AND (XY < 10 OR XY > 20); */ +"%d _hours ago" = "%d часа назад"; + +/* Y == 1 AND XY != 11; */ +"%d __hours ago" = "%d час назад"; + + +/* Y == 0 OR Y > 4 OR (XY > 10 AND XY < 15); */ +"%d minutes ago" = "%d минут назад"; + +/* Y > 1 AND Y < 5 AND (XY < 10 OR XY > 20); */ +"%d _minutes ago" = "%d минуты назад"; + +/* Y == 1 AND XY != 11; */ +"%d __minutes ago" = "%d минуту назад"; + + +/* Y == 0 OR Y > 4 OR (XY > 10 AND XY < 15); */ +"%d months ago" = "%d месяцев назад"; + +/* Y > 1 AND Y < 5 AND (XY < 10 OR XY > 20); */ +"%d _months ago" = "%d месяца назад"; + +/* Y == 1 AND XY != 11; */ +"%d __months ago" = "%d месяц назад"; + + +/* Y == 0 OR Y > 4 OR (XY > 10 AND XY < 15); */ +"%d seconds ago" = "%d секунд назад"; + +/* Y > 1 AND Y < 5 AND (XY < 10 OR XY > 20); */ +"%d _seconds ago" = "%d секунды назад"; + +/* Y == 1 AND XY != 11; */ +"%d __seconds ago" = "%d секунду назад"; + + +/* Y == 0 OR Y > 4 OR (XY > 10 AND XY < 15); */ +"%d weeks ago" = "%d недель назад"; + +/* Y > 1 AND Y < 5 AND (XY < 10 OR XY > 20); */ +"%d _weeks ago" = "%d недели назад"; + +/* Y == 1 AND XY != 11; */ +"%d __weeks ago" = "%d неделю назад"; + + +/* Y == 0 OR Y > 4 OR (XY > 10 AND XY < 15); */ +"%d years ago" = "%d лет назад"; + +/* Y > 1 AND Y < 5 AND (XY < 10 OR XY > 20); */ +"%d _years ago" = "%d года назад"; + +/* Y == 1 AND XY != 11; */ +"%d __years ago" = "%d год назад"; + + +/* No comment provided by engineer. */ +"A minute ago" = "Минуту назад"; + +/* No comment provided by engineer. */ +"An hour ago" = "Час назад"; + +/* No comment provided by engineer. */ +"Just now" = "Только что"; + +/* No comment provided by engineer. */ +"Last month" = "Месяц назад"; + +/* No comment provided by engineer. */ +"Last week" = "Неделю назад"; + +/* No comment provided by engineer. */ +"Last year" = "Год назад"; + +/* No comment provided by engineer. */ +"Yesterday" = "Вчера"; + +/* No comment provided by engineer. */ +"1 year ago" = "1 год назад"; + +/* No comment provided by engineer. */ +"1 month ago" = "1 месяц назад"; + +/* No comment provided by engineer. */ +"1 week ago" = "1 неделю назад"; + +/* No comment provided by engineer. */ +"1 day ago" = "1 день назад"; + +/* No comment provided by engineer. */ +"This morning" = "Этим утром"; + +/* No comment provided by engineer. */ +"This afternoon" = "Этим днём"; + +/* No comment provided by engineer. */ +"Today" = "Сегодня"; + +/* No comment provided by engineer. */ +"This week" = "На этой неделе"; + +/* No comment provided by engineer. */ +"This month" = "В этом месяце"; + +/* No comment provided by engineer. */ +"This year" = "В этом году"; diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/sv.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/sv.lproj/NSDateTimeAgo.strings new file mode 100644 index 0000000000000000000000000000000000000000..873a79593968d807c7130acf94e8779e0f701438 GIT binary patch literal 3430 zcmcgvu};G<5WTry5mjR8K*fw0DgjavV(P*e8k1Bg2}+t){a^YEjKF&i=8T$jvsE=J zcPHPA-@9k?{WX`FB=RIRo@+cye2i4G#ozDJAhMH_m7LK zv^&{h$ITgRepSp}E3s=-Lva?{5jCk*Nla{14mDe$^Ej)ldIR&UqFUoAZjXNKJ&tXM z{2CQ?R9pvirN+l`9V6jcfDK>Sr+#q<-u#*v>@93h=NDs`oLiVEih6*8TkFad)Ux*+ z)z5UnJoFKY>HDiAsH@-0Clu45hFqx|g!6R8*9jwP7M!AujZ`xQF4_dlH(W@EVud#Or?v8YO8I0_LtoetwsoyNk`D`XfA zb2%`FzniUav)G_d&sYQJ<-IcZ{Ef;bn>?>fF!d^qR9=5)h)&Df#s4WXe|erR55A)jhZc3p|qx`2Z&g{y*sNFd-dQ+0nTkN2Ie&q~Z6-xt=1T IX4Pwd06EPdBme*a literal 0 HcmV?d00001 diff --git a/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/th.lproj/NSDateTimeAgo.strings b/BreakingBad/Pods/NSDate+TimeAgo/NSDateTimeAgo.bundle/th.lproj/NSDateTimeAgo.strings new file mode 100644 index 0000000000000000000000000000000000000000..751129a74c10d896b74a31c35a189878967b6c54 GIT binary patch literal 3462 zcmc(h(M!T$6vgjDAnf5j1+jcFLk5P4Qb|OhJ!wc!z4W-!RKhJZ6aV?@+;5C)IQO4=YY;)Jk6?#6-;q$res4TlSN7qCP(;TiYA9IHr#`9dFSEAPldfPwK zfUm%1-?z1M#zziW9cnA1b8Wuhp{d$7U<-4dP=+sURMtZ#Y^#4aFD@{@8~CzhJjWiC zRe|o4)X3vHL~cAH%a$&qBM`2)^0kZf>Y!f@KH_t}#g&g~4hl=xA+(f`XjW+2TW5pP zqz+V;LpV-(Qr9Vuoy%U_z9PHJ0%<8bvr?#D0%Vb2m`+-7Q`&=FH_2VQe#qNYt=Tlz z$`z(mv)M$4(63M>ipgfO{EmA@8qeI0DzjT4pXCd5lBwk`d&oS|bCKDnL?OMquQ#EJ vaYUI^r%2;AR|}_#cU+##$*LQvjx}ZeYuAcHJ+36`Yb%O0^^`%9Zu{+j2 +NSDate *date = [[NSDate alloc] initWithTimeIntervalSince1970:0]; +NSString *ago = [date timeAgo]; +NSLog(@"Output is: \"%@\"", ago); +2011-11-12 17:19:25.608 Proj[0:0] Output is: "41 years ago" + + +2 other methods are available: + +* `dateTimeAgo`: returns times with only strings of the type: "*{value}* *{unit}* ago" +* `dateTimeUntilNow`: returns only "yesterday" / "this morning" / "last week" / "this month" -- less precise than `dateTimeAgo` but more natural + +Those three methods can be interchanged as they have the same signature. + +## Future Directions + +Would be nice to + +1. add customization options (e.g., should it report seconds or just "a minute ago") +2. add string customization +3. have more localizations +4. make `dateTimeUntilNow` more precise: instead of "Last week" use "Last Friday", "Last Monday" etc. +5. other + +## License + +Released under ISC (similar to 2-clause BSD) + +http://wikipedia.org/wiki/ISC_license + +## Credits + +Originally based on code Christopher Pickslay posted to Forrst. Used with permission. http://twitter.com/cpickslay + +Ramon Torres began support for internationalization/localization. Added `es` strings. http://rtorres.me/ + +Dennis Zhuang added `zh_Hans` Chinese Simplified strings. http://fnil.net/ + +Mozart Petter added `pt_BR` Brazilian Portuguese strings. http://www.mozartpetter.com/ + +Stéphane Gerardot added `fr` French strings. + +Marco Sanson added `it` Italian strings. http://marcosanson.tumblr.com/ + +Almas Adilbek added `ru` Russian strings. Extended logic to support Russian idioms. http://mixdesign.kz/ + +Mallox51 added `de` German strings. https://github.com/Mallox51 + +Tieme van Veen added `nl` Dutch strings. http://www.tiemevanveen.nl + +Árpád Goretity added `hu` Hungarian strings. http://apaczai.elte.hu/~13akga/ + +Anajavi added `fi` Finnish strings. https://github.com/anajavi + +Tonydyb added `ja` Japanese strings. + +Vinhnx added `vi` Vietnamese strings. http://vinhnx.github.io/ + +Ronail added `zh_Hant` Traditional Chinese strings. https://github.com/ronail + +SorinAntohi added `ro` Romanian strings. https://github.com/SorinAntohi + +spookd added `da` Danish strings. https://github.com/spookd + +Barrett Jacobsen added `cs` Czech strings. https://github.com/barrettj + +Dmitry Shmidt added `nb` Norwegian strings. https://github.com/shmidt + +Martins Rudens added `lv` Latvian strings. https://github.com/rudensm + +Osman Saral added `tr` Turkish strings. https://github.com/osrl + +analogstyle added `ko` Korean strings. http://almacreative.net/ + +Flavio Caetano fixed `pt` Portuguese strings. http://flaviocaetano.com + +kolarski added `bg` Bulgarian strings. http://github.com/kolarski + +Vladimir Kofman added `he` Hebrew strings. https://github.com/vladimirkofman + +Viraf Sarkari added `ar` Arabic, `gre` Greek, `pl` Polish, `sv` Swedish, and `th` Thai strings. https://github.com/viraf + diff --git a/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj b/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj index 060bf1a..c3a1719 100644 --- a/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj +++ b/BreakingBad/Pods/Pods.xcodeproj/project.pbxproj @@ -7,1424 +7,1540 @@ objects = { /* Begin PBXBuildFile section */ - 015C2EFB4BDA114E874289A8BC01B844 /* PFLogInView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F4C5429E2494ED58C557A5F11CCC6AC /* PFLogInView.h */; }; - 02A1E68F7CA023CBC64E581A3325EF6F /* PFURLSessionDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E645516AFC0CAD5C08101D5F844874F /* PFURLSessionDataTaskDelegate.h */; }; - 02D90891E401812590EFB1B7FD947312 /* PFFileController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8B01C970E96BD862FECF58F194D051 /* PFFileController.h */; }; - 02E5D6EBF54BD9D4CF221E7D76081855 /* ParseUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 51B91EABBB44E7CF6E6B3CD95D857313 /* ParseUI.h */; }; - 0375A436998F237A79A936E6CCE33148 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A97DD8424AA6D29A671297332ADC6CA1 /* CoreGraphics.framework */; }; - 03A6F38CA14AD317B341884170C3BB7D /* PFAnonymousUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = A1C86812C1E16F9AE6E6995B0510FCF5 /* PFAnonymousUtils.h */; }; + 017B8F79B4574667911E42F413D0B125 /* PFFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 3504D1B10CD69BAB4473A7C496756522 /* PFFile.m */; }; + 0198B8BFFD73EE79799F37BDE2DC2D15 /* AFURLConnectionOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 69B3E1C7182F3458AD6A299128488B48 /* AFURLConnectionOperation.h */; }; + 029C90A8589FC1CDD8B78EE4D9527E6E /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF52DC207128EA0274EF4CDA535FFFA /* AFHTTPSessionManager.h */; }; + 02DFBFD6A20FB90FEEE01E93EA600CCB /* PFOfflineQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F6E076421F723D8D370F4D7A93A3912 /* PFOfflineQueryController.m */; }; + 033A50366AFB65E2169F873282EA48AE /* PFOfflineQueryLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 871FF52E7A467327FDCE8823177C9F5F /* PFOfflineQueryLogic.h */; }; + 03946EC67A0BAF94DDB6F4B7E84BCA71 /* PFQueryCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4874ECF650D964F2CDBF9F86115F5A44 /* PFQueryCollectionViewController.m */; }; + 03BDAA9381CA01CCA0AEB055624489B9 /* PFCurrentUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = DA62858D5B874C3F65A65F7E38634279 /* PFCurrentUserController.h */; }; 03FF532EB8C5304EFA2E77016458C281 /* POPPropertyAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2726A20CBCFFB77F9972C445E8972099 /* POPPropertyAnimation.mm */; }; - 04C59EDFE151A61EBE17E21743FCD39C /* PFOfflineObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9825AD54796F54B9AE10955E1AFEDD77 /* PFOfflineObjectController.m */; }; - 0548214136FCCAE0412E4688B4F8CDCB /* ParseModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D60E52FD4E440EA2F1B080932410DE /* ParseModule.m */; }; - 05834B536D3A455ED3798FD75FC72F8E /* PFPushState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D70110CA542D79C645FCD20E2C9674AB /* PFPushState_Private.h */; }; - 058C33FB5C2A3719FE4ADF9A72690954 /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F7FEA8114B1934AF71EEAF5B655B908 /* Pods-dummy.m */; }; - 058D0D5CE02E50025C29F3C920C0342C /* PFFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 563F4B9FC46A7DD720D8945683D2129D /* PFFileState.m */; }; - 0655C53AF3514D826B20F7892BBE3352 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A97DD8424AA6D29A671297332ADC6CA1 /* CoreGraphics.framework */; }; - 06FAB48E1E97530EA1D69FEE81B6B4FB /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC83DB2D364DF47142AB2F90071DA9F5 /* CFNetwork.framework */; }; - 097B901143156E3D41E99BE3AAF835EC /* PFFileState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AD697B984E89B4847323B087964A48EA /* PFFileState_Private.h */; }; - 09B6D79E22DEA5ADF5509786C8710E80 /* PFGeoPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 62A507869EFBA5A9140C70CE67650D5F /* PFGeoPoint.h */; }; + 047D7E309D227F13258E858817519667 /* PFObjectFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B078276D0A69125A2A41D5905950EDF /* PFObjectFileCodingLogic.m */; }; + 04C477F9C24BFF3DAE827A362233C4FF /* PFUserConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = E6D213C6D417643B9A833B0CCC4E1454 /* PFUserConstants.h */; }; + 059CFF34440E8ABB623D36B397E0F092 /* PFWeakValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 294D66B8B455C83AB82DB0D7AB77A825 /* PFWeakValue.m */; }; + 060548DA77437C6E1D9ADF4016C7D943 /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 47C62543F0DEA0A479039AB3514FD9CB /* AFURLConnectionOperation.m */; }; + 06D988944B0D5FE82E0682515FF337FB /* PFObjectSubclassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = B82D05CA95E5FD6D9B9ED444391C47C3 /* PFObjectSubclassInfo.h */; }; + 06F08447EDAD95752E9A4EAF48815E85 /* PFURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 9006A20100190E9CE8DF22BCE0676858 /* PFURLSession.m */; }; + 0729C0E0DEFB01A6C944C3969D5EC76B /* PFTextField.h in Headers */ = {isa = PBXBuildFile; fileRef = 6045E412107503A77AB97F7AFCE87561 /* PFTextField.h */; }; + 086C2FD864FD690C9C6044CB6F2800F5 /* PFRESTAnalyticsCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 08FFC0DB86B62264394E0B3A89EFC73B /* PFRESTAnalyticsCommand.h */; }; 09F160052D6F4DF4F769F6A2A351071C /* POPAnimationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = EC10F21A5E230A911C2C2E5082CDAE4B /* POPAnimationPrivate.h */; }; - 0A9D4D20C55270EF697A3961B39D3FE0 /* PFQueryUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 39FFEDFCBEA2D381B7572D62222BF55D /* PFQueryUtilities.m */; }; - 0B0292923091FED205120BD5097527E9 /* PFRESTSessionCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = A026613DFF149D8BD7D37DDB26152A35 /* PFRESTSessionCommand.h */; }; - 0BDA91D5869CA4191D33157C3F626421 /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 838239C2DC01EAB9AEE7B5553878AB6A /* PFObjectSubclassingController.m */; }; - 0C25D8A64EB9575F6EE8297DDB7E28D6 /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = E504BFBB2DBF9126FAB2DC1F339CB325 /* UIButton+AFNetworking.h */; }; - 0C2B045D7E5509E8F7EFA57AC39B6629 /* UIAlertView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1B49F66FFBB4AD6CCEC0A90A66D326 /* UIAlertView+AFNetworking.m */; }; - 0C3E40A1E1F5C062336954953535A147 /* PFMutableObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = F25C9F58CFDC13B49DEA0CD5013B1F28 /* PFMutableObjectState.m */; }; - 0C49F0B3FD4736F8E75C2B6BF4CBB182 /* PFCurrentUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = C5ADC6D84457794AAF2D20A45BAD22C5 /* PFCurrentUserController.h */; }; - 0D13A6CE3055797D395FB3B1432F8F0E /* PFConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 87D5C76598D7EF5558AB88A80F0ADCF6 /* PFConfig.h */; }; - 0DB56799333E9A43236FF8CD130F07E7 /* PFSessionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 50A3A1846FA5A0CC07A927EBC49B5BF2 /* PFSessionController.h */; }; + 0B6B6629EF056C7F6F4B3399D6BD3FB9 /* PFPaymentTransactionObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = D7A540D0D3BC4B77A4D4F180D8F895E0 /* PFPaymentTransactionObserver.h */; }; + 0DD1DFCE04AD8F99996586627197DC28 /* Parse.m in Sources */ = {isa = PBXBuildFile; fileRef = C22A26B6D2BCD459FB68D14D2F857B95 /* Parse.m */; }; + 0DDAB24D1C65F117F20347BAA4527A27 /* PFCommandRunningConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 54ED68E1ECE1262E6D9BC5B3F77BB6AE /* PFCommandRunningConstants.m */; }; 0E111996ED8AB07B504AD6200F460C6E /* POP.h in Headers */ = {isa = PBXBuildFile; fileRef = 38C1E5A4A6882760CB349FCABD22A9DC /* POP.h */; }; - 0E6063551D612BD83F5BDE564BB459B0 /* PFThreadsafety.h in Headers */ = {isa = PBXBuildFile; fileRef = 34E2D0613E3152D0F6D3B2C1F125895C /* PFThreadsafety.h */; }; - 0F238050CCA06FB31AC3B53D1853A928 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - 1083B349581427A54BEBDAAF8F3F79CC /* PFCachedQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = D16A398DDB303A767A2CF933083655C3 /* PFCachedQueryController.h */; }; - 10A29DA15D651C10348F412CAF7756A6 /* PFUserPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B50558B71D8208975C6283BE61E816D /* PFUserPrivate.h */; }; - 1138646361F9E460DD21884B0F6DFF9C /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = C29500E205220EB8DB49F1C825FADA89 /* PFRESTConfigCommand.h */; }; + 0E591067B7BF92C106395C2FE8634BB1 /* PFCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FF8B6CB88759DF1ED61C6FE79ED9EA1 /* PFCollectionViewCell.m */; }; + 0E7F7F9299DC41809B8E9E85E0D13994 /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7C6284381EBD662B525CB0AAB3B153 /* UIImageView+AFNetworking.m */; }; + 105AC997EEFDA4CFEC70C6DB1A32ECF5 /* PFObjectEstimatedData.m in Sources */ = {isa = PBXBuildFile; fileRef = DF0466A4594D21314E63193491214681 /* PFObjectEstimatedData.m */; }; + 112278EF7B27EFF6490BE7A996514FAF /* PFInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = B8864C84EAA3037F155A3B69D9EF0CE9 /* PFInstallationController.m */; }; + 11405B42A3610C438464DC86FC67A834 /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 312681EB6896B7C2788765E18CA4BC4D /* PFUser.m */; }; 11924DA123F63743B409090BFC425AD2 /* POPCGUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CC05709207C91767940918CDD4779DC /* POPCGUtils.h */; }; - 11A4692CEBB8730B94ACA3DE9386A360 /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = A24FE0141387F910F17488671E600BA8 /* BFExecutor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 11C30B6D836D34D9B469D3EB466BC3C6 /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = A5170E55DE35501B4A713A17711AA0A0 /* PFConfig.m */; }; - 1280D553590D730A67E0F99C1B65F136 /* YALContextMenuCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 526FB5D06EEAEC04BB51ADED7679CF69 /* YALContextMenuCell.h */; }; - 12905F13464787C5271CC5D9FA18C667 /* PFObject+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = 585CC800D2685BF4E18ADBC41D9E73B1 /* PFObject+Subclass.h */; }; - 12F7F6FF549BFF3F9E125CC05FFDE06A /* PFCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = B1C6CB67201095492AA37DBE54C06E7D /* PFCategoryLoader.h */; }; - 132AFB274CF349B143A6CE62178DCE73 /* PFCommandURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 8261B575C444CC37A75DDD38033FCDD3 /* PFCommandURLRequestConstructor.m */; }; - 13407B834F3178398FB483A7A5E16B1F /* PFEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = C0CF8725DD1DD49BE8D6A0907238EA04 /* PFEventuallyQueue.m */; }; - 15D39B2C1708F2F2D00CBC4C37D7D242 /* PFSessionUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 505C7EAE502AC992E9273C10AEFCC86D /* PFSessionUtilities.h */; }; - 1618761B80BC0810912C0E5A6FA8AED2 /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = CB295B33B0FC530FD77C52FEB400203E /* PFCloud.m */; }; - 1640F9FA2671E79FC0BA756063D41D8A /* PFRESTCommand_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B72B60C944C86664F4D05675D934FC68 /* PFRESTCommand_Private.h */; }; - 16C58D5E53A49592C8CBE347C2A8902D /* PFRelation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D0D627CB39CA6EDBC298591F7FB9D15 /* PFRelation.m */; }; - 16D57AA10CE0A2E5D61FD7DF78139724 /* PFURLSessionUploadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D52EE0139EA03EDDE83AA9D9685536FB /* PFURLSessionUploadTaskDelegate.m */; }; - 16E5664C03179ABE5E7339A5D8536E5B /* PFLocalization.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB79D7DC036E7A8C84740F1E542074B /* PFLocalization.h */; }; - 173ED34A0356542BC4AABA232A87BEDC /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = E2143F74B5AD9A40EA532F839BD3B314 /* UIImageView+AFNetworking.m */; }; - 183010BEEB58B8B3CC8C1509BD15346B /* PFResources.h in Headers */ = {isa = PBXBuildFile; fileRef = DFC690133F99B68E1F8CE7784769EF36 /* PFResources.h */; }; - 18379233D2D2B1502FC76DD4C5C692DC /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = C69C27BDBB8B1E63677A91477C52FDA5 /* PFEventuallyPin.m */; }; - 18A8BC9861EDA4C6869FC91964FA284A /* PFErrorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C55517F4B7361A3891B563478721DED /* PFErrorUtilities.h */; }; + 11F0E4D0327E0E0DB7E1A172E0FAAEFD /* PFLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 69670E33EC5B2A67F2FC18752BEA4B68 /* PFLogger.m */; }; + 1251A5D232DD4A171EDE06FA1615F89A /* PFLocalization.h in Headers */ = {isa = PBXBuildFile; fileRef = 830556E84D6C0C3E518700CF712A5B96 /* PFLocalization.h */; }; + 136A0CFFBEB1A10D50AC4A1E225B4675 /* PFPropertyInfo_Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = A3E9F37A09B03FA6BC992D2C8F8E7B3A /* PFPropertyInfo_Runtime.m */; }; + 13D55D436AE1B30274EFF74EF8B91D53 /* PFSession.m in Sources */ = {isa = PBXBuildFile; fileRef = D05E9DBB723E92608165F48E9AF64F3A /* PFSession.m */; }; + 13FA9DD300A8B4A93AB62A0BAFE21C7D /* PFSubclassing.h in Headers */ = {isa = PBXBuildFile; fileRef = EC33E3D76CA84CDA97634E2740AD12A2 /* PFSubclassing.h */; }; + 142EF9CA5A85AE871E3B459132229E09 /* Parse_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AD49AEE9B786D80C2CA36CD083017B5 /* Parse_Private.h */; }; + 1523B080603D77C024E0B747E4996579 /* PFKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FE2B065E415FDE6A0E9A36FD7E97FF7 /* PFKeychainStore.h */; }; + 159C438C855C6095598C7437294EA302 /* PFPropertyInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = C0961B8F6EB8D027464FFB57A6CDE37B /* PFPropertyInfo.h */; }; + 15BACED1A1409CAC2285BCA89CB1AF8D /* PFCommandURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = B7B68993FB16678C2C1A6EACD54BB72B /* PFCommandURLRequestConstructor.h */; }; + 16D48F8DD817BEEC782F46FFA1B918C4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + 17EA19C39C267A986767A673A0282BEF /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = E075B22F58B1F8911EF93D169D51FC46 /* AFSecurityPolicy.m */; }; + 1811C17C0D37318B9C5641E5EE07EC6B /* PFURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 7235B2813F817238C3D71BECCF936BAC /* PFURLSession.h */; }; + 192A200E73C2A2F5F4012B42734D9DAA /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EB57F907824EC8680AA92999B53C22B /* BFCancellationToken.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 1937EC6CD83AA2FAB3455591AB074459 /* POPPropertyAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 134BDC30251FB7A5465C17F603FCAC5F /* POPPropertyAnimationInternal.h */; }; - 19A8A885F0AD8ABBE6397819787BA1A8 /* PFFieldOperationDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 314F14CB5AC1E3119F923E7D73FD2F55 /* PFFieldOperationDecoder.h */; }; - 19EC4D553FB816F1000C41CF1051066B /* PFMutableObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = CA749ACCAF73A8469072D11F78DA1FDA /* PFMutableObjectState.h */; }; - 1A172F3623296435FBE39CA9DECBE299 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A97DD8424AA6D29A671297332ADC6CA1 /* CoreGraphics.framework */; }; - 1A199A539421FD9EF267C20C58B80BFD /* PFCommandURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 70AE4459357403A9AA0B61959202F9A7 /* PFCommandURLRequestConstructor.h */; }; - 1AB31BD52213E4929644D1AA98D1448D /* PFAsyncTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 17A3AD5BCF18F3E0478C884A2B764C4B /* PFAsyncTaskQueue.h */; }; - 1BD3A897099353079B220469631AC62B /* PFSQLiteDatabaseResult.m in Sources */ = {isa = PBXBuildFile; fileRef = C235A6B7A110CC5F4093F80159287E17 /* PFSQLiteDatabaseResult.m */; }; - 1BD80BCC808E7E9643CC37C4AA3ADDFC /* PFConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BABC47EC65B9265C3909474DE8574C9 /* PFConstants.h */; }; + 1AE154A4E8AFB780D26F0E59F8EEEACA /* PFSQLiteDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A1712FC7AE801C8D0346A18C603E1240 /* PFSQLiteDatabase_Private.h */; }; + 1B086BE8BA2D14A321F2377C48D6A3D6 /* PFTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 64B378A014AFEA845B65353C3E1AFC8E /* PFTableViewCell.m */; }; + 1BE8D03DF2ACF1E07F4A5CC0968C2D15 /* PFInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = E71489D04AFAE4B2A9234F74D89F8EDA /* PFInstallation.m */; }; 1BEBEDAB53B9DB3AD45E1F70637747F9 /* POPSpringSolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 6961E549FC85F85EB7560B887B11C928 /* POPSpringSolver.h */; }; - 1C7F42CA15296DA4A6644553F81E234A /* PFMutableRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 8553BBD3BB32BA047968D8FCC0BB7A4A /* PFMutableRelationState.m */; }; - 1D0B465250743982AC6B53A0826FBBD0 /* PFObjectFilePersistenceController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DA3372CAB38E88F7791F2DE96931153 /* PFObjectFilePersistenceController.m */; }; - 1E3C0F09FCE1C3025D98EC3E79134920 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D1BA2737792A257200ECAE76708D233 /* SystemConfiguration.framework */; }; - 1E6A6D284A6252C645194A7DD669B76E /* PFSQLiteDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A40A4CAE6145F41C05AA25BD5CA9BD9 /* PFSQLiteDatabase.h */; }; - 1EBD269DC4FE87225B78B3ED0FDA1D0F /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D9C3B80FDA98CB3B3C80A70441B019C /* PFUserState.h */; }; - 1F881486E8CB860C4E24913A8F5D5F40 /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 02410F25AB700FDE2DC3E940E8F641D3 /* AFNetworking-dummy.m */; }; - 20917DF017F324A8D15F0D9C4D141FA4 /* PFPurchase.h in Headers */ = {isa = PBXBuildFile; fileRef = 7126CE5A9A9393978939ABBD58F26EA9 /* PFPurchase.h */; }; - 20F38429DB788EC0750BAE41035D38BD /* PFReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B19DBC177333992D2D0D2D98EB6BA58 /* PFReachability.m */; }; - 21B089C37641C0DD264CE5D3A4F6561A /* PFPush.m in Sources */ = {isa = PBXBuildFile; fileRef = B8FB92BD0F40B979678430FF43192D73 /* PFPush.m */; }; + 1CE02FBC0604DB365EBDD1CA2C98EC6D /* PFAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 538B533F0A14F3AFF0384A6E35C88F23 /* PFAlertView.h */; }; + 1D4CED7E73484BE3BB284F60D35D00A3 /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = BF8EF50423B482FDAD56806BC1ED5F03 /* UIActivityIndicatorView+AFNetworking.h */; }; + 1DC1D991236BC9F2CE78E97DCE0716E3 /* PFOfflineQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = F80B8B50F9D8716C8F1482A13F291D05 /* PFOfflineQueryController.h */; }; + 1E08932918D992A1541EB0E0D6CC9EEC /* PFActivityIndicatorCollectionReusableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DA45A3E8EB7DEACE98BDB98552ABA77 /* PFActivityIndicatorCollectionReusableView.h */; }; + 1EABC68DB72C74878F6BF39B21EE79BF /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A23FC083F510FB1D62BA453FD6556C6 /* PFURLSession_Private.h */; }; + 1EB7B49E695BEEB604FD158FF186DC8E /* BoltsVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 9ECBBA7F99F345390F66E3FC635EE1EF /* BoltsVersion.h */; }; + 1ED3A520ACFB313CBEDE4D1FCD582D8D /* PFObjectFileCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2965148A80ED4448DBFB85049DE369E1 /* PFObjectFileCoder.m */; }; + 1ED84A82F3FF335F59188A45AC02FB1C /* PFProduct.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A6F91C7FC8222580298FA066453DF05 /* PFProduct.m */; }; + 1F1B4603F52506AC9D06765847BF22F1 /* PFRESTCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 40A31B4ABEDCF23954D29D3CAFDC68DF /* PFRESTCommand.m */; }; + 1FD65FB8CF03C2F35C81F43E7B278814 /* PFOperationSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C2F828710D03ADAB5A77385F42B2005 /* PFOperationSet.h */; }; + 1FF8B1071B45A4B6532CD916691EE1F5 /* PFRESTUserCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = AEBC2122738345FE4B4B804795532339 /* PFRESTUserCommand.m */; }; + 203BF679401152022B93977BE09BE5F4 /* PFObject+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = A5B09E102D7D249A4B19FBB0355D180F /* PFObject+Subclass.h */; }; + 207E6EA55B4E61F9411668BC5ADC6BA0 /* PFAnonymousAuthenticationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = A8F3DC227BF67D356F69321EFB5BC8C3 /* PFAnonymousAuthenticationProvider.h */; }; + 2180740D1254387DC0FFFB15F3ABE7DD /* PFQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 14EB05FA8924F1F6C9625510D00B06D5 /* PFQuery.m */; }; + 21DE1AB45066CBB8893B7512A46C7F40 /* PFMutableRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 20E50E8A0708866EC29A54BC2773B687 /* PFMutableRelationState.h */; }; 22030D04E39440FA02B75449A95BF767 /* POPAnimationEventInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5785AD09C2208501D5161E950E701889 /* POPAnimationEventInternal.h */; }; - 225C0CEF370FAAE240ED3B5232D8AA89 /* PFConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A235350977776A4ADAEAB1CAA67DF8F /* PFConfig_Private.h */; }; 226B9015C8E393975BCF1AFEA63C1D51 /* POPGeometry.mm in Sources */ = {isa = PBXBuildFile; fileRef = B330BCF969EF6189E02E10926FB95CED /* POPGeometry.mm */; }; - 229C97335867E932CB618AFF2AD68FA1 /* BFTask+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F2457C51DB8F154FDFD167B5690FC35C /* BFTask+Private.h */; }; - 22A0E63EE43ED826D8DFAB3444112A06 /* PFUserConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 0835AF0C620B80377CFA5F0070B6F2A8 /* PFUserConstants.m */; }; + 22AFF014CF05A23D8FC082AB33A460E0 /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 661753468309FACA5ACA4AC85A0F7E29 /* AFURLRequestSerialization.h */; }; + 22B11163D1060531F7203CFF741ECF7F /* PFMutableUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = E2008D080880260047ED152D6F5D84A8 /* PFMutableUserState.h */; }; + 22EB6771E43BC84C41EE84F61B446EFE /* PFResources.h in Headers */ = {isa = PBXBuildFile; fileRef = BF2B791839A7CAAE79D6FB65AB7CAA27 /* PFResources.h */; }; + 23E20EBA898902A40ABE33C592C7781C /* PFMultiProcessFileLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BA37293BA9D0C3170FA299BFB8066DD /* PFMultiProcessFileLock.m */; }; 23FC5124B2FA2C879AFE378BBB12AC3A /* POPSpringAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C24554FAA71D841BC3C0759DA37874AE /* POPSpringAnimation.mm */; }; - 246B3249C33500DE5CA8091842FD161E /* PFRESTConfigCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EA0F7203418529BD442E51DEA289F3E /* PFRESTConfigCommand.m */; }; - 24D81C37FF895F44D6D4D8C1108EE0AD /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 005D86B592A4BA2B3547363ECF47A177 /* ParseModule.h */; }; - 24DE67F780C71ADDD3ECD6654317FE72 /* AFHTTPRequestOperationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E72971E8203922C334379D6EF46D2C3A /* AFHTTPRequestOperationManager.h */; }; - 253E5BAE428DD70BB381435C235FE16E /* PFOfflineObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = A51A35330B4AB677C74A6579FC025B7C /* PFOfflineObjectController.h */; }; - 254832160B15699E7724F95DE8DD5752 /* PFPurchaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A0D3F66C0F548DA826E162FB412704A /* PFPurchaseController.m */; }; - 256B22C8EF9B5B23E67AD183CF08A370 /* YALContextMenuTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3827F868B3F08C9E6CA5CFEEE3C83EED /* YALContextMenuTableView.m */; }; - 2585D2B973EDD9644622A4C685DC746A /* PFEventuallyQueue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E873F760B193DFBEF81E19B36B33FCED /* PFEventuallyQueue_Private.h */; }; - 25A85CEAA3DA9477C9380336E9223EFA /* PFObjectFileCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = C8BC0FA6F2C382BF336FF4ECE47C192B /* PFObjectFileCoder.m */; }; - 260117E289FF83C3E56161D34507AC08 /* PFObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 062A3C8CA2C198CBC3F4184AE0DE01AB /* PFObjectController.m */; }; - 2621A0600ABC3EB86C65B713B86601BD /* PFRESTObjectBatchCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = A5E89E9F5A5618CE7965C7807CC99B95 /* PFRESTObjectBatchCommand.h */; }; - 268BFCB72A6AC4C466ACE860992F00C3 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3C592B1563BAD172B026388C571DBE5 /* StoreKit.framework */; }; - 26BF7F88592AF38813101555097DD55C /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 348553BBE97419579F9F55AA50C5F99B /* BFTask+Private.m */; }; - 278028677CDB8067FFF832B90AE73116 /* ParseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 09293FA9DE2829C01FD1BC90B6481E0C /* ParseManager.m */; }; - 27EAF05CC70083B9C74622C4C3F1F50B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CF2B2B9DD2ED593C69A3425ABF50CEA /* Security.framework */; }; - 288F78B90BDDF8D2354804F3326D6A9C /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = E28AF701482179FE07EE17023210453F /* BFExecutor.h */; }; - 28EF03109A91A0399E7ED7DD0DCEC43A /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 415E520ADA42019A24142D17486874BE /* PFDecoder.h */; }; - 29E64CEA35638C93186B498049B7E98C /* PFRESTCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = A81137DE4CAF25A53FED9F979106F428 /* PFRESTCommand.h */; }; - 2A47EF83A3F0B843959DC8DA3ABDC4EA /* PFURLConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = FE3AA7D1FB50A9011DE1F2F4F8986498 /* PFURLConstructor.h */; }; - 2A6D34424562F80CD74C3B2BAC7172D5 /* PFObjectLocalIdStore.h in Headers */ = {isa = PBXBuildFile; fileRef = C04DABE57BA79040087CCBBA081B3616 /* PFObjectLocalIdStore.h */; }; + 24B03E3CEBFE6DF92D3798624570DBA7 /* PFAnalyticsController.h in Headers */ = {isa = PBXBuildFile; fileRef = CACE127E057ACF033A0A59A4B62F36E0 /* PFAnalyticsController.h */; }; + 24E91CC9FB5A2E2FF319EADB309A3639 /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = 72672AA1F26F8760A0D79F4F309EE6E6 /* Bolts.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 2525FDF32D03CE2F90E256EF23AC1918 /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 43DDE7B96E8490981651DF981ECC745F /* BFCancellationToken.h */; }; + 2553D2567B1E70C16C2AB70D607A6BD1 /* PFDefaultACLController.m in Sources */ = {isa = PBXBuildFile; fileRef = E967305041BCBA1F811528239735DE21 /* PFDefaultACLController.m */; }; + 2578803E3E84F6D5B721F605404C0232 /* PFPrimaryButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 540E5395B931591133EB6260DAAADFC9 /* PFPrimaryButton.m */; }; + 2600246F4A3AD578AA137A882FDC9D5F /* PFQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 78C3F43F458A2618F3C9E335C0826CC2 /* PFQueryState.h */; }; + 261ABC2E4AEFF6968D9936161F3306AC /* PFQueryTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = C05E8CDA29F1EE876CB9E6445F045060 /* PFQueryTableViewController.h */; }; + 2633598C693589A7340000F203FBCBCF /* PFRESTCloudCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = EBEAEFCA15C34ADCCC930FCF8A5C2A68 /* PFRESTCloudCommand.h */; }; + 26821BD69B7C839AA1203CC211CF457B /* PFLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = A1EB64B790B73DAB7F65D7CDDFE4A383 /* PFLoadingView.m */; }; + 275768E58A8C3131E0122C515076485B /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = 309E66A69E8B9D1EC8FECB8B484349CC /* BFCancellationTokenRegistration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 29050A8C76B5A5E9E7E6596F7DEF5EEF /* ParseModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 187350C3511E85352C7852B0D3D8B1E2 /* ParseModule.m */; }; + 298880C95E0B2A4C3A653F49691D0A44 /* PFCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = A60D18FA5E274DB64A5436B779B53C51 /* PFCollectionViewCell.h */; }; + 29B8C46DAA66D739074598FF7BEB278F /* PFObjectFileCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = CC3B217F18416097DEE13AF10B1ECA76 /* PFObjectFileCoder.h */; }; + 29F0758F844A9557BBBE832BD475A4AD /* PFUserAuthenticationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 744FBB3DAB92F7F5627525503F0D83AE /* PFUserAuthenticationController.m */; }; 2AD822A4C6DD9CA6D499CF6955198F4A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - 2B805B0D9C82263BED05712F6F61F508 /* PFCurrentObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 035328EF0D2E9A7C6F011700B6486C4B /* PFCurrentObjectControlling.h */; }; - 2BA4EE91EE2A2D2392A549A5D0265E02 /* PFACL.h in Headers */ = {isa = PBXBuildFile; fileRef = 895CF8E6F7A84B12553BCA9E79EC79C3 /* PFACL.h */; }; - 2BA5C7017464A16F4C706785FA19D75B /* PFCurrentConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 863525FC6AF9553E708425B9E1FBBBE3 /* PFCurrentConfigController.m */; }; - 2BA85187131ECA5CF5B3C9339913E5FC /* PFCloud.h in Headers */ = {isa = PBXBuildFile; fileRef = 84EE46E65A1FBB043B8876D673FADFCA /* PFCloud.h */; }; - 2C7C264D41F9220DEB49C3A1B180B546 /* PFObjectFilePersistenceController.h in Headers */ = {isa = PBXBuildFile; fileRef = 92551145ADCBD6A18D43AA2DA73CB21B /* PFObjectFilePersistenceController.h */; }; - 2CAD92B1CD9E623C21762FDD9970ED0A /* PFSQLiteStatement.m in Sources */ = {isa = PBXBuildFile; fileRef = 36204B280B4F34FB73981677EC64B941 /* PFSQLiteStatement.m */; }; - 2D7FC9420988E8825835F617C085C8F0 /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C45BAC8E657D5D25B91CF13FDC4C8C /* PFCommandRunning.m */; }; - 2ED1F725C7A2D9C3B088755133185E3E /* PFHTTPURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = EEDB7E1475A81EE2F12373656077D160 /* PFHTTPURLRequestConstructor.m */; }; - 2F2C8AD562611FDC0AF5CDCD530D5A0D /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 44E52571D995DF254E53AD007ED4859C /* BFTaskCompletionSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 2F8806F964E2757E0AE4C18A63D549F7 /* PFObjectBatchController.m in Sources */ = {isa = PBXBuildFile; fileRef = B63D2BB991AB59607701D89CDA8174A8 /* PFObjectBatchController.m */; }; - 2F95E9BCF26DD34957769CFD6E7B08F7 /* PFOfflineQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 63D62EED87FA9B033C640237039C5D71 /* PFOfflineQueryController.m */; }; - 2FA63B393DD60EC8FD23E587F04E482D /* PFOfflineStore.h in Headers */ = {isa = PBXBuildFile; fileRef = E31FED7E103689AA50C7795F772BDA23 /* PFOfflineStore.h */; }; - 31996DCA29D4E878B0583CFF567CA0CA /* PFPin.h in Headers */ = {isa = PBXBuildFile; fileRef = DBC82AC944CB7F585939AB9589D4F9B4 /* PFPin.h */; }; - 31E45E0290C278EF3172695D508A2E71 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - 32A2CE35418BD5633F9217B88B539CC3 /* PFLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9981AF787E3013B9030751CAD2D7A086 /* PFLoadingView.m */; }; + 2B251BCAA4ADFBF1D3BAD693B963EAB3 /* PFOfflineStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 70803358E5AACD697743DBA69EC2F75E /* PFOfflineStore.m */; }; + 2BB1765C86B201560C4A2B6BBD7A371C /* AFHTTPRequestOperationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E496375098ABBF2BD885E52BDC838A8A /* AFHTTPRequestOperationManager.h */; }; + 2C02491C9A86DDEB1D821ABF98F5E9A3 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E506E997BA37804E78B12743B103213 /* SystemConfiguration.framework */; }; + 2C40561DB066F7EE69CB973B1C339A1F /* PFObjectFilePersistenceController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2655AF28A5BB760A9D8CF09E68E118A2 /* PFObjectFilePersistenceController.m */; }; + 2CBE51B6B685E2C8E580F288532D35BC /* PFObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = AD6E4A746B24C276099087A9EBAEF713 /* PFObjectControlling.h */; }; + 2CD920221C7DB0877C7383DDC555E532 /* PFRole.m in Sources */ = {isa = PBXBuildFile; fileRef = 14E52B238D5014738AB002A4CDD6A30A /* PFRole.m */; }; + 2D13F096E44493E48D82C6B3F1CC7680 /* PFConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = FFE01D48EF7DDCAB2FC799BB39E6D6A4 /* PFConfigController.h */; }; + 2D38329507A0A56D5676E19E27999709 /* PFRESTFileCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = B76855B1BBA027169AC8CEF90FF17F48 /* PFRESTFileCommand.h */; }; + 2DE4962F006CBEDA18350230D22F62E7 /* PFPurchaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = F89EEACE0F757C432E3342B476B97ED5 /* PFPurchaseController.h */; }; + 2E59E88AD7FA5E23EB2884BF7F03E8DC /* PFAnonymousUtils_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FF2C4AB205929FAE824F3F2C811BC3B /* PFAnonymousUtils_Private.h */; }; + 2FE18B8C27EE345DAB24679C78D7E892 /* PFHTTPURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 896143C79933B46F6E5BC5605CBD3FDF /* PFHTTPURLRequestConstructor.h */; }; + 300440913D7402F15B08CAA810368C07 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = CEEEE6B9BBA8A28BB12A34BD43305359 /* BFCancellationTokenRegistration.h */; }; + 3004E3DE761217EC0DD603568CD94F8D /* PFMutableObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 33C5AA662A1B31B9B74F6F6D2BA8EF89 /* PFMutableObjectState.m */; }; + 3049E331D34FE15433FCBD32968AF4D3 /* PFReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 22F8D297F42217E19ECD9D2B11EE21C1 /* PFReachability.m */; }; 32A7371F19FC366D8DF77A2FA2166918 /* POPCustomAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8EC4FC6A3A06D9292C296C691005546B /* POPCustomAnimation.mm */; }; - 33DF104A201E932802169E493F3AEC0A /* PFMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 08DF92C3B8A5DF531A37052EE2D36BA2 /* PFMacros.h */; }; - 344EFC366CB3853905AAC01462A21557 /* PFUser.h in Headers */ = {isa = PBXBuildFile; fileRef = DC8B8475B2B05D335E837929C3ABB2AD /* PFUser.h */; }; - 352D02CEC844BC2D22026A777FA39ACB /* PFActivityIndicatorTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = EF790182566A5099C39C1B289E8BB3B8 /* PFActivityIndicatorTableViewCell.h */; }; - 35953B553BD925643165F1ACB35878BB /* PFQueryState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E1183E2718E99F11B4E9C9C8A80C1AF /* PFQueryState_Private.h */; }; - 359921E987152F2E32ED5A7E95D3D7ED /* PFPushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F44B7D42437E31FF67AF695E26480E07 /* PFPushManager.m */; }; - 360B21E0EB75AA4B2A34C129E7CF78C1 /* PFURLSessionUploadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = F3C4D6B4BF5063C2EC4B6F8862998D93 /* PFURLSessionUploadTaskDelegate.h */; }; - 36ACEFEC11A81EF47DE0C0BFFC6CB97C /* PFCurrentConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = C11D9DEA5457F8EBBADB980FD16BFF7B /* PFCurrentConfigController.h */; }; - 36CCBAA76E5ED042EBDC5DB0D33BE8A4 /* PFNetworkCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 753E0E1AA4BBDE64D2AE0835F63D119F /* PFNetworkCommand.h */; }; - 36D8D65FF0AB068BF9906A86619644F7 /* PFLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CC4DDA9182F4F5C704598B6E722CDC50 /* PFLocationManager.m */; }; - 37A15CF58C488A0BE71C9DF43F028E8D /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = CC980D88098DADD0C68CCE0CC413730A /* PFURLConstructor.m */; }; - 37CEB19E87B3AC3323BBD2E66B42C190 /* PFFileDataStream.h in Headers */ = {isa = PBXBuildFile; fileRef = DFC41E4010D852E3977AF17A221CF0CA /* PFFileDataStream.h */; }; - 3824CB594AD78B77B5FB2FC04D839958 /* PFEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = BED41B8E7F85EE8E67A39865C037C805 /* PFEventuallyQueue.h */; }; - 38253CE84769ED15D8C99ED4B898847F /* PFRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E987F26F4B8054102531C64F176F982 /* PFRelationState.m */; }; - 3859BC5571F7217642873574773EADB1 /* PFSignUpView.m in Sources */ = {isa = PBXBuildFile; fileRef = 33BB29F39122EC7F976E5232ED519B46 /* PFSignUpView.m */; }; - 38E0B7A70C54C146D6E7800490D59C20 /* PFWeakValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AEFA60D137098ACED4615C88DBA7D17 /* PFWeakValue.h */; }; - 3A3EE6FBA4054D41BB3BE24552D0555B /* PFLogInView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BF05C278FCCB54E2356A81F4362E3FB /* PFLogInView_Private.h */; }; - 3A4A4FB0FEE8E11FD14800D236F62CE4 /* ParseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 58D592B48830284011209E1663E7D733 /* ParseManager.h */; }; - 3B22B3CA89C62E0452385CE2796AF1F3 /* PFRelationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5501D5BA77001B3A319125F589DE4774 /* PFRelationPrivate.h */; }; - 3B664B6E61C833CD4BEA0C3FA5F6A204 /* PFPushState.m in Sources */ = {isa = PBXBuildFile; fileRef = AECDAF19F1A734986EF3B6CEE0E5C285 /* PFPushState.m */; }; - 3B6B89143DF62DF0EC2889D8E22D7E12 /* PFDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 17A3A025CC5669EAB17537171EB530B4 /* PFDataProvider.h */; }; - 3CE532D0EA44055EEC7FD1B5A7C27BF1 /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FEDA810326DCCCBD587DEF33586F24C /* PFURLSessionDataTaskDelegate_Private.h */; }; - 3E9FFD7FDD05C6B3A8181F997D776BBA /* PFObjectUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 45637DE63711406B9BE1BECBB23B8EE0 /* PFObjectUtilities.h */; }; - 3F0E3DF64315302D29713F842A484DBB /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = 05E01E38D82A4797E14C9CE9355C3F23 /* PFMultiProcessFileLockController.m */; }; - 3F1414F449E14D51686282DE08C99213 /* PFFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8844A67AC930593786AECB0231747628 /* PFFileManager.m */; }; - 3FA97E218C8EC403B801CDBEED9D7981 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B5B237502D9B0D2DDFB52EE72716703 /* PFURLSessionFileDownloadTaskDelegate.m */; }; - 3FD03AE3ADAAC712667DE736AE685541 /* PFUserFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FA9B2ECC9A26394B543D0F42751F2B3 /* PFUserFileCodingLogic.h */; }; - 3FE2CD905A0D90E675C92E2800E03D9E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - 40D2ADCF0128DEB096B46905667E4E9F /* PFCoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F9B9BF93B8FEFA346B7D92DBA659A391 /* PFCoreManager.h */; }; - 412B08BFF6DAFBF18BBBB68A4E1729C2 /* PFSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CB50B697271E10AC0A2FFC3D43C3AD6D /* PFSession_Private.h */; }; - 417817B29B272C3A7E76522DCED4641B /* PFQueryCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 66C32C6E7A5D7E52B33E0268964CE9D7 /* PFQueryCollectionViewController.m */; }; - 41FA752847E7911579CB5994CACFB55A /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E0AAD20A6FEA44B0CFB6CF47B721809 /* AFHTTPRequestOperationManager.m */; }; - 421F18C338A1D96267A6D56CC4A606DF /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A2F0A20C55B0387272AD66520D13A5C /* PFDecoder.m */; }; - 42B46BB8EB49882AEE36BB5575578EC4 /* PFMulticastDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0C2EFD1475837A15B4834D37F70DCA /* PFMulticastDelegate.h */; }; - 42F4541D75A4F6BA407EB7096B1092F2 /* PFObjectConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = AF40A6B842E8FD9BC950FE00DC5B6F40 /* PFObjectConstants.h */; }; - 435DA30E314A631C5CB9C52A61140AC7 /* PFRESTPushCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 159D21FB91947A9EBAD9A6D923A0E579 /* PFRESTPushCommand.m */; }; - 443BCE5C454E56FCA662D4F1F149CBB7 /* UIImage+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 365EAFBED43EBA1E76B6777D42421642 /* UIImage+AFNetworking.h */; }; - 44CBCCBCF7F96491E4FB42CED4E75332 /* PFCommandRunningConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = EB8DC8124CEE001FB0DCB7332A0E4F5F /* PFCommandRunningConstants.h */; }; - 4559F2C1310C63FC0393148479027450 /* PFRESTObjectCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = D7CBDA2EC1FB8FB11CC6A2C5C9808D47 /* PFRESTObjectCommand.m */; }; - 45E33698BC39D7FF3123216BFE1C1368 /* PFTextField.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CAA43C472F7F6152B3507ABDDE9AD44 /* PFTextField.h */; }; - 4618DA1F5A356DD83541A37748F954DF /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5216F571A9C35B49AC646497DEBD2B3C /* AFHTTPSessionManager.m */; }; + 32F4E2488ACF370D7D7B6E7BF574037A /* PFAnalyticsController.m in Sources */ = {isa = PBXBuildFile; fileRef = F7E6CB7EBD5DD182485EC1B01FFD406E /* PFAnalyticsController.m */; }; + 33DB8AFB0259362CA0EFD9CE3A35975F /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A3AEE130935E15C466214757E4A437C /* PFRESTConfigCommand.h */; }; + 33F185F5752B32FD3D97DC25918BD9DD /* PFCommandCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 9668058EF6D9611AE0F52B0A9D8131AD /* PFCommandCache.m */; }; + 349177D31E9C7130E09E91B8C682E4ED /* PFDefaultACLController.h in Headers */ = {isa = PBXBuildFile; fileRef = E44B0C9E0501BB1831C29E61F86CAB89 /* PFDefaultACLController.h */; }; + 3525E714E4A235CBE4E6B2C3FBDCDCA4 /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = E463344338E538D216FFACCAE0E518B8 /* BFTaskCompletionSource.h */; }; + 35AFF1E89C49E9A373995E2DADF33979 /* PFPushState.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A3687171A64C8D18935718B4FF24DF6 /* PFPushState.m */; }; + 37A9C8036CB504D64EB5B9ECC3F31440 /* NSDate+TimeAgo.h in Headers */ = {isa = PBXBuildFile; fileRef = 44F063CA885EB78BD718E7940F7B0C76 /* NSDate+TimeAgo.h */; }; + 37DF63C0C9103A9E1DFD55E15C8BF33F /* PFSQLiteDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 378806E5D95B89B2F6914E0BDE025565 /* PFSQLiteDatabase.h */; }; + 3899AB8EC33BD102DBB023D4A85FF273 /* PFTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 830636B8D1FD36CAC950ECC4E2B9EDCC /* PFTableViewCell.h */; }; + 391D305388EF6A44D773792B08CC3C1E /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = D179BA1822848A6F5E22C30B8DA415E5 /* PFInternalUtils.m */; }; + 39A74ED00CC15F27A7AB6DAFAB428008 /* PFURLSessionUploadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 72EE0E3DEA73FF87A1F44225E65A2CF0 /* PFURLSessionUploadTaskDelegate.h */; }; + 39B96D481BD81E74DAB39DB6C4969B44 /* UIImage+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 246C782E571D46A59F4CE5DF4BBCF237 /* UIImage+AFNetworking.h */; }; + 3A08186C3E72AC2FC2929F40299836BA /* PFObjectController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E1A0C52A07FAB18E39B89BFCE82A0E42 /* PFObjectController_Private.h */; }; + 3A29B956E2FE21BDA0D041219196B865 /* PFErrorUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E489A5115065FA03D7D3F15FA3BFC83 /* PFErrorUtilities.m */; }; + 3A5CF29344885308DC79E0C391A53D31 /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 46BF8D16DF1543709222F3222BDC849E /* AFNetworkReachabilityManager.h */; }; + 3B109713D9276153580041DE2222B204 /* PFURLSessionCommandRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = 59114E77E8FA17F190C36E71C7D4295B /* PFURLSessionCommandRunner.m */; }; + 3B857F39CDF4FC14282ACCF2531094B5 /* PFColor.m in Sources */ = {isa = PBXBuildFile; fileRef = B9CF96CC1BC79AB5D74851B61A45BB4C /* PFColor.m */; }; + 3BEA94EB016D3E78C67A72262C699B44 /* PFUserAuthenticationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = EB78BBCA14653EA581EAC45B33B681E4 /* PFUserAuthenticationDelegate.h */; }; + 3CF688909A0D796A79167362DDE3FEF7 /* PFProductsRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 33960334DCC05CD75FC4AF6CD8BE3DDB /* PFProductsRequestHandler.m */; }; + 3D0ACC7AC09AFC03CF06CF0BFA3B64DE /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 708BF014D209E4A867445E7C9EA0EBEC /* PFURLSessionFileDownloadTaskDelegate.h */; }; + 3D0E1B6ECD5FC0B60A62C355A91E4918 /* PFOfflineQueryLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = B08A07BDA7AE5470D8B41DFB55B1862A /* PFOfflineQueryLogic.m */; }; + 3D1F031A52A20B30E46816DF3085E80D /* PFMutableRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = E53EF9CF597991C40EFE4662D07B3C4D /* PFMutableRelationState.m */; }; + 3D28B83AAD10B7C57743C71A9BCBD706 /* PFMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 023AAD7A7FDD5D6EBCB0275E3053B48D /* PFMacros.h */; }; + 3D52BDDB5278DD1FDF4BC10FF2D28FAA /* PFFileDataStream.h in Headers */ = {isa = PBXBuildFile; fileRef = AB6D645DB24B0161496C79BCE1E62F88 /* PFFileDataStream.h */; }; + 3EA9DF8D721B9D0D4AC15384B7856062 /* PFMutablePushState.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E053BFD0B35D22C90F81CE9450340A1 /* PFMutablePushState.m */; }; + 3EC8C1A2A16125D66AEF023E65875C0D /* PFMultiProcessFileLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EE2B18DDC2877E30470FF74A6225727 /* PFMultiProcessFileLock.h */; }; + 3F219289B69850BB1CF2ED154E9E1794 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C74596AC3E38A52329D1EEE95C27275B /* CoreGraphics.framework */; }; + 3FD93828B806B0E9827A1516C105E3A2 /* PFRESTSessionCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 19643E83602716D49DB56714C4014980 /* PFRESTSessionCommand.h */; }; + 402B7FD34EA5F4DF7C8C4F9707D8A7CC /* PFSQLiteDatabaseResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EE22F8E5E2EAEC021B622AC34352720 /* PFSQLiteDatabaseResult.m */; }; + 41482DCFBB1219BD53DB333486769AE1 /* PFPinningObjectStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 8094F451DBF5DC13B98EEEC4DE10398D /* PFPinningObjectStore.m */; }; + 41D43A3CA8F83BB5FA7746E1463E6B8E /* PFRect.m in Sources */ = {isa = PBXBuildFile; fileRef = FA7AA59013BD49C975213D44FB636218 /* PFRect.m */; }; + 41DA73BA262516EEE659200AF960524D /* PFAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 43011F509A9CA36CCF1F6FE318A44835 /* PFAnalytics.m */; }; + 41F9E24BFC8A7360E8FF98646E0534D7 /* PFErrorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = B78A26BF250CCDBE634934404921965F /* PFErrorUtilities.h */; }; + 42E12F748623E1F6C033984BD3BA21C3 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AE8117874FB6AE79F6EE0B2845297948 /* Security.framework */; }; + 42F199AB415D77C913035FB6891A7E1F /* PFAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = BD6916DD548BBEF982E129D4ADCA50C4 /* PFAnalytics.h */; }; + 430C5787F4DF47E9094C7ABDB2B04ECD /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = 63BC048EACE4F5B5628D719274D8C52C /* PFCloud.m */; }; + 436A6DC2D3BED5A79126492A065F2677 /* PFRESTQueryCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E68F5B95AB1A81CC6D8695D1558949A /* PFRESTQueryCommand.h */; }; + 436BEC32F216466B177B6C97EF487247 /* PFLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C1B5D8065E12E7D99BD7C432E1F25EFF /* PFLocationManager.h */; }; + 436E2455BCEC76A75B3050437F2BD9AC /* PFOfflineStore.h in Headers */ = {isa = PBXBuildFile; fileRef = B83D35381795B5966D20FFC3550C1B12 /* PFOfflineStore.h */; }; + 4380B74341A32F548C1BD368C0A0520D /* PFObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B836352DD006B82B8C8B18944F7A5F4 /* PFObjectState.m */; }; + 43EE553B964C45CF5DEA762F99E4A33B /* PFPushPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = F31424CDA773AA527195551EADFF442A /* PFPushPrivate.h */; }; + 446CAF4AA59F1F4752D565415C561497 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3377FCED75EFA8411F46FCAB569CA0B /* QuartzCore.framework */; }; + 44C0533BA3EDFF3E3445F62AF0590047 /* PFRESTAnalyticsCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = D94636BF02BBCA2A6CDF6B77EAA004E5 /* PFRESTAnalyticsCommand.m */; }; + 45B4B5D890C00115150DB7A9A243B537 /* PFURLSessionCommandRunner.h in Headers */ = {isa = PBXBuildFile; fileRef = FADD9F8FE2B00307C8C608B8AFABE1FB /* PFURLSessionCommandRunner.h */; }; + 45D36EE54227B0DA49ABAC216014713B /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 53D81711A7BE725E27F6C2A6AA858E16 /* UIWebView+AFNetworking.h */; }; 461ADD1403E940D9DB7BBB5B7323376F /* POPMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C3FE18EB564AF4087573DE6F3F2D3D3 /* POPMath.h */; }; - 4638D38DCDF526A476CE05B3F81CCAD9 /* PFRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = DD64D76CC193A68DABCF84C619EFCFC8 /* PFRelationState.h */; }; - 46649DBE5BC69B649093125569635AC6 /* PFObjectBatchController.h in Headers */ = {isa = PBXBuildFile; fileRef = A133BB30724BEF75ABB81AA509743A45 /* PFObjectBatchController.h */; }; - 46C4231E5E04D67139F9F975246E5DF7 /* PFSQLiteStatement.h in Headers */ = {isa = PBXBuildFile; fileRef = 060DB4FD225A0238252576BE01EEF381 /* PFSQLiteStatement.h */; }; - 46D0E3242C28B43577C2AA06E6FBE718 /* PFPinningObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FC9896164A2A05D8D267241CD2C2615 /* PFPinningObjectStore.h */; }; - 46D4BDDE8AB87A9CAD5D625F9CEF64DE /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9FB80727EBDBCBDEEBCAB45A1785BAF1 /* UIKit.framework */; }; - 4824B7BE52BA2402CED14500E2932601 /* PFMultiProcessFileLock.m in Sources */ = {isa = PBXBuildFile; fileRef = F0CC09558A010C10AAC9F4CD4C53AD04 /* PFMultiProcessFileLock.m */; }; - 48885F40AD8BD0D697CE625FBD2E2E21 /* PFMultiProcessFileLockController.h in Headers */ = {isa = PBXBuildFile; fileRef = A8F222054463224431341AD45804A6AF /* PFMultiProcessFileLockController.h */; }; - 497D21FDF4A360CB97A439754143062F /* PFMutableACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC0B4DB266A15A3A61A62142BDA7069 /* PFMutableACLState.h */; }; - 4987776369E562F38585FC37361D3CBF /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = F182401E66857C7D4B875E79122BD830 /* BFTask.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 49C0D0A6E99F8649034F787477573B57 /* PFMutableFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 74B8114FC619CF23645359BCCE432DBC /* PFMutableFileState.h */; }; - 49CDC02250754AB9B406C89687DF3417 /* PFSubclassing.h in Headers */ = {isa = PBXBuildFile; fileRef = AF2FAD7A53F3AACF9B492617ABD3B62F /* PFSubclassing.h */; }; - 49DD3F7AD1B9FDEFF123B570668F7154 /* PFDismissButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 99C80D21838865183077DD44395D6C3A /* PFDismissButton.h */; }; - 4A80DF5A34C30001E5ED3BAF54228FA7 /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = AA2D73F6B555F385C9E33E7F424BBFE5 /* PFInternalUtils.m */; }; - 4A8C9FF00E3384BC4C3CD3FB2F55E990 /* PFInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = 2FF4FE0BB509523AA3AB48C24B04D2AD /* PFInstallation.m */; }; - 4A9C3367259B56358D28505ACB440384 /* PFSignUpViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C97247E12ADC1F7516B907DB1083863 /* PFSignUpViewController.h */; }; + 46583A2A9C00A174C88A25645B7660F5 /* PFRelationState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B0CDCA8A92F1EC1489226670FED17FE /* PFRelationState_Private.h */; }; + 47427973D7E4AD7D2B94106ED0D8BCBB /* PFMutableQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D38FC40E07DE779D7B3A19F7FA831A2 /* PFMutableQueryState.m */; }; + 47B7588383CF64C5E24EFA92BDD9BEA7 /* PFCachedQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = C9363231E632CCDB302D43B8FF481641 /* PFCachedQueryController.h */; }; + 483CCAA6F19046C0799DA3C570AEAAE1 /* PFRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = DEA8D28EC393D0CD87305636EBEEBE3B /* PFRelationState.h */; }; + 48AFFB1D5636617D840F23ED9952537B /* PFTextButton.m in Sources */ = {isa = PBXBuildFile; fileRef = A4789A83A8E8466FA58F653DDBFF071E /* PFTextButton.m */; }; + 493BC3309F48416303156F5D152EA9E2 /* PFRole.h in Headers */ = {isa = PBXBuildFile; fileRef = D460C6EF4CF1DD775DBB020A78CF5DA4 /* PFRole.h */; }; + 49EE04A65E965F38E217808014224E3C /* PFConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = A32A4885982917556368207430E04EAE /* PFConstants.m */; }; + 4A9186396E27A1603CF96FD61C0F132D /* PFActionButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 427BD07E883212F98FBE50FC1015EB6D /* PFActionButton.m */; }; 4ACF656AFA1302DCF387C7A2D0F238F2 /* POPVector.mm in Sources */ = {isa = PBXBuildFile; fileRef = F0B4105C7EE2DA010EA4746E79138C7C /* POPVector.mm */; }; - 4AF062F4FC2B5263DEB1CF994FAAB679 /* PFMutableACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = F657AD9C72FE5B432F841B53493D1253 /* PFMutableACLState.m */; }; + 4AD83FE13F9E3989958AB89506082F8A /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47400368FF5156B023E93C3E82E16456 /* CFNetwork.framework */; }; + 4B0E0120B82190A2D270BE5517D722C7 /* UIAlertView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 647BF62C2F93589EF002FDEA9890EF80 /* UIAlertView+AFNetworking.m */; }; 4BA566241FA98C1D5E4A5284D84EAB71 /* POPSpringAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = EB56BE02F1B0412A41C9D9834B04BC30 /* POPSpringAnimationInternal.h */; }; - 4BE7FDB3D3FD6EB4DBDBF4A8D6251C93 /* PFUIAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 10926AEF9594A323E624C27E8F4B643A /* PFUIAlertView.h */; }; - 4CF686EDA5878E2B7DE2627B409B34CC /* PFRESTQueryCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B131657B4AE8F0B2C6E0A0C5EA11C6E /* PFRESTQueryCommand.m */; }; - 4D5EF7D0B4D861DF9F3B699C7F838528 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62B4F6275559C45BDBB446ABDB11EB0A /* MobileCoreServices.framework */; }; - 4D925619B81D08AC5E84925C79BE5A59 /* PFMutablePushState.h in Headers */ = {isa = PBXBuildFile; fileRef = 8804B5C3B20BA33A62CE380BBCCC489C /* PFMutablePushState.h */; }; - 4E6EC4EE31AFB4E83A925AD0CA54E128 /* Parse.h in Headers */ = {isa = PBXBuildFile; fileRef = E557ABF7F7687DC7DFF115D7F62AEDA5 /* Parse.h */; }; - 4E72C8BDEF684D123F3726A401ABCB36 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D1BA2737792A257200ECAE76708D233 /* SystemConfiguration.framework */; }; - 4F3FF316B9AC1B085B0BED76753BBF9A /* PFImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F1F7C24D363A023B057B4B020BED379 /* PFImageView.m */; }; - 4F95459B59771365653E226A2D9EBF89 /* PFObjectEstimatedData.h in Headers */ = {isa = PBXBuildFile; fileRef = F908ADAD5734EE4C1EA4466E7FE108C1 /* PFObjectEstimatedData.h */; }; - 50A0B5735FC58289849B81903379466F /* PFCommandCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EA17DCC97E135EB8F1461B291A14122 /* PFCommandCache.m */; }; - 51CB85FCD806DF8447C6FA52391C1E04 /* PFPushController.m in Sources */ = {isa = PBXBuildFile; fileRef = DF6863C55207FC14F127AB7F8E41415A /* PFPushController.m */; }; - 5231BCCB308A3F31F6177D3DE45B4B2A /* PFAsyncTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 511824AA2AD76251DC45B56662AA4DA7 /* PFAsyncTaskQueue.m */; }; - 52FDC5383B9B5D2EEEF373E403D77417 /* PFQueryPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C6EC3EAC5F58685494656DAB9912EA7 /* PFQueryPrivate.h */; }; - 531A2D3B4A600ED6ADC40EA5A46DE3EB /* PFErrorUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = B7F9DB4E614C6F9EFC52811652A1D27F /* PFErrorUtilities.m */; }; + 4D05E27CF6523B0BD5B046DB0C0B2EFB /* NSDate+TimeAgo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AE193C9847EDFDD5761A418126698F11 /* NSDate+TimeAgo-dummy.m */; }; + 4E5D1FCAB597E51FEAC13ECB8F560867 /* PFProductsRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D93BE5DB8400592658EED9DD4616653 /* PFProductsRequestHandler.h */; }; + 4FCC6D1402CBF630574494235E172586 /* PFSQLiteStatement.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D44DE0AD73A9BE3947B531BC59C3751 /* PFSQLiteStatement.m */; }; + 4FE58B65CFBEA1D1823F39D57B543FE7 /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = 71F6F2D4F04F42FEC580B4FC00283A8D /* Bolts.h */; }; + 51D5987F251A327AC7C9760D51E8B001 /* PFRESTSessionCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 66493986FF116C367FBCACB8BD52D970 /* PFRESTSessionCommand.m */; }; + 52AE5A22CD25615A73DA5B66ACDCAC63 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + 52F79FB4CCA04A5A7B5B16737BB8F306 /* PFBaseState.h in Headers */ = {isa = PBXBuildFile; fileRef = 207158EF53AC0A892A53EB8AD174C145 /* PFBaseState.h */; }; + 52F959E3D2C5E0EDE71E991549018F7E /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = BB484A1B11E7D45733E48B6F3BE5BD4E /* UIButton+AFNetworking.m */; }; + 53101F16802FD7835FAE24BFF876E1D1 /* PFObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E490C6DFB35FC5208FC224CE6F0DA02 /* PFObjectState.h */; }; + 5331C0F69400F074FD63902D6DE230A5 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9CF87F9B76B4D7EC7D059739CC8B54 /* BFCancellationTokenSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 537C9A9788489C2CA3A1D877E5702A17 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + 54BD2225BCFA5235F7875A2FE572F66E /* PFLogInView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9014F44156C863573956B280208B21FE /* PFLogInView.m */; }; 5520088E66FB2528F595AA617FFC5D9A /* POPAnimationRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A5F7AF86D19E519B94AD6D8CB98CC34 /* POPAnimationRuntime.h */; }; - 55785784D679DD24B00E9A95DF6CCBE2 /* PFTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 024EDBAD6DEA89979FB7FA48DF6FD2E1 /* PFTaskQueue.h */; }; - 55BB2075236A6D419A39C20BDAE77AA1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED8D97DDDCF9842413073AA979D81CD2 /* QuartzCore.framework */; }; - 57BDB360A71C5C40769FEBCF4EEA9286 /* PFKeyValueCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 57D6481216B3368FC95D692879E27822 /* PFKeyValueCache.m */; }; - 57F9FD71CB5753B5943820CB971EABAC /* PFCloudCodeController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F0070F7D9C1BBF95C7F9EDB863AD555 /* PFCloudCodeController.m */; }; - 59BA7CCA0E9AF6D155A512DF3A8BED25 /* PFQueryTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = B539C1B5ED1A98FE70171B60D8186E32 /* PFQueryTableViewController.h */; }; - 59C5C4F84FE226A4542348E92177F952 /* PFPushManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F241847217017ADBC4283C2F8F469A /* PFPushManager.h */; }; + 56DF4FE90FE41CB6890DA216C61F7330 /* PFPurchaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = C4EAF8CE8527EE11C36B8F62C1BBF5B2 /* PFPurchaseController.m */; }; + 570702F9498935532E3797DA19C184FE /* PFResources.m in Sources */ = {isa = PBXBuildFile; fileRef = 318238BDCB2257E77EB2BDDBCA0452BD /* PFResources.m */; }; + 58326CE78F395552AD3BFD810FF9F65F /* PFWeakValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 68AEB7658D88B72202471E592D74B981 /* PFWeakValue.h */; }; + 58C113248E845E83A0C1BC45C298D325 /* YALContextMenuCell.h in Headers */ = {isa = PBXBuildFile; fileRef = A8E3915520E965F9E617BF1A8C36B1C6 /* YALContextMenuCell.h */; }; + 58F285A458A4022B5D0AC8713348BC0F /* PFUserFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 78F7563A9F217FD7904E5AB2768407D5 /* PFUserFileCodingLogic.h */; }; 59CB94574F710422B4C9CD6D388CCA03 /* POPCustomAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 928EC8B9105DA581C7896C2102E87BE2 /* POPCustomAnimation.h */; }; - 59DBB816A81FD1511D1E38EC0CEEEBB6 /* PFBaseState.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B7B6DB35230E2855BBD62DA92FC70BE /* PFBaseState.h */; }; - 5A77D55F5B0750BBEB517B644365A500 /* PFKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = AD6BEE4FF1F262959DD604F6DFDBAE3B /* PFKeychainStore.m */; }; - 5AC93CEB9283C651882F05B1273DD103 /* PFCurrentInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = B1D36F734A33A907E9958F6778F6D9B1 /* PFCurrentInstallationController.m */; }; - 5B03265249AD905F4FB6E3DB631658AD /* PFQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F8925C71640AC9E18B09C2F32530257 /* PFQueryState.h */; }; - 5BB3EFBBD58F469D64FE05C97A816968 /* BoltsVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = CF7F21D5332C89148FDF4E4644891872 /* BoltsVersion.h */; }; - 5BD0448FB27F6926E8AC4C43AD94F214 /* PFRESTCloudCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 19A96C3911D00F07330D94949348F1EE /* PFRESTCloudCommand.m */; }; - 5BEA0703B949E403FCF00B1C99CE5312 /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EE2B15BEF4BF5D9E73B0F8A28BFE3AF /* PFBaseState.m */; }; + 5ADFF8029235E88CF25BD045F575B7DE /* PFCloud.h in Headers */ = {isa = PBXBuildFile; fileRef = B9E000B981FCF33ACCC4AA76FEEECA97 /* PFCloud.h */; }; + 5BBAE697650D8F0130E1BCE3BC16723A /* PFURLSessionFileDownloadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8510A922B1ED47CC55F1F151966C868B /* PFURLSessionFileDownloadTaskDelegate.m */; }; 5BFDF4E4848A83D2225D948A6D0B79B5 /* POPAnimationRuntime.mm in Sources */ = {isa = PBXBuildFile; fileRef = E85E0983DBE882A8009D0F7EAB591B91 /* POPAnimationRuntime.mm */; }; - 5C0AF4E1346CE2C73EEEE2F76444DBE8 /* ParseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D23A382F14DB50C5CF89F62A1401FFD /* ParseInternal.h */; }; - 5C20B36FFE00F5AC30E5338C5F4E1C95 /* PFRESTUserCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 331270F5C910E5D29DEFABA0DA889E54 /* PFRESTUserCommand.m */; }; - 5C25A0B2AE2D5A04ED1AA575D9D517F2 /* PFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C343079DDD088139CD814C6470830F6 /* PFObject.h */; }; - 5C586D9F95CFEDF896F447BFC98AF4C3 /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = FD9F0F4B22EEC61402D34AE9EEF30DD0 /* AFNetworkActivityIndicatorManager.h */; }; - 5CE8743FE0F90E511A4C84E0995D1397 /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = FA1957D2FB6FAD2FDD777C1424EE93F5 /* AFNetworkReachabilityManager.h */; }; - 5D1D8DB17C40891783970781D35AAADB /* PFRect.h in Headers */ = {isa = PBXBuildFile; fileRef = 15B3921F710AB762D4B6DCFC53018A70 /* PFRect.h */; }; - 5DF1B5387A1DD9CAB5E13CEA1DEBE334 /* PFAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 031E9E0D8D5FFE61CA69EBB13DFF940B /* PFAnalytics.m */; }; - 5E45AE079AC451D88127C79FEB659466 /* PFPaymentTransactionObserver_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 48D4D5780017286C543013DEDE63D651 /* PFPaymentTransactionObserver_Private.h */; }; - 5E5D8BCA6AA7723270741D3B30129E95 /* PFAnonymousUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 25C2F29D6B6FBDBAA33D8593E65EC348 /* PFAnonymousUtils.m */; }; - 5E8A9993BF21FC6A83FD93B1805E7E08 /* PFDismissButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 9151DC926D00004E1604381F7985BB36 /* PFDismissButton.m */; }; - 5EA2BCB87865A7A04C48507EFBBC12DF /* PFObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = CBC8CC7D9B59534667A62E84BF1C8B31 /* PFObjectState.h */; }; - 5FAFA9B41F2A03D77C11EB75A4494750 /* PFInstallationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 16BA4C30B79BFCF3F4A3AE316FC70C8F /* PFInstallationConstants.m */; }; - 5FC02173813B41B3D99A1856EC7B340B /* PFInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F101824BC10648B2A569BDBA9C23BE5 /* PFInstallation.h */; }; + 5C33F9157741C61F6631230AD01FE11E /* PFLogInViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 571D00DE82EAF4F2AABE71CD9002FD71 /* PFLogInViewController.h */; }; + 5C4D0B280BB4AF12EBE760D662668E16 /* PFRESTPushCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = DA363A0EBAA203BF300BB8AEA7B58092 /* PFRESTPushCommand.m */; }; + 5C92F804A6DFEBCE460A8DB1BD613E09 /* PFQueryCollectionViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E08A968A93ACB9D1CAF92789B12C7C4 /* PFQueryCollectionViewController.h */; }; + 5D2081C85D9075DFD20B20DA8E0FE55C /* PFPaymentTransactionObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 643074ED44114F64B0BC6FE33DAFD9AF /* PFPaymentTransactionObserver.m */; }; + 5DE5474CCDF02AF3DF047B2566CB5D9B /* PFCloudCodeController.m in Sources */ = {isa = PBXBuildFile; fileRef = A5B9BCF180F3871EB64CDA5D298A60A7 /* PFCloudCodeController.m */; }; + 5DF38A397631BA3DB7D6AF71AB003F3A /* PFObjectBatchController.m in Sources */ = {isa = PBXBuildFile; fileRef = 87D86889C8EF66DE0CB120F92CC8BC82 /* PFObjectBatchController.m */; }; + 5E9956DE33105A5531D6A3FC4C62ECA3 /* PFPurchaseTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = ED9B06016408585D92ACDBC3FCC637B2 /* PFPurchaseTableViewCell.h */; }; + 607FB6BB8AE8EFE5684FB420E2F6C5C2 /* PFFieldOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 93B8CFD3B61887AC829C393B74B7FFFA /* PFFieldOperation.h */; }; + 61B17DF20A75ADA928785425B7F8DE0E /* PFRESTCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 33DDB3AEDB2B43F3CD9A422BD0B36E24 /* PFRESTCommand.h */; }; + 61BA366C36F6C7B54BE8BF07AB155ABA /* PFImage.h in Headers */ = {isa = PBXBuildFile; fileRef = AC9C8279188AB5D0074C2A37F359A028 /* PFImage.h */; }; 620920967F6C1FB5C501AD33EFDA1639 /* POPAnimationEvent.mm in Sources */ = {isa = PBXBuildFile; fileRef = C0DF3C83EBC5F7BF6DAAACEBD7D72791 /* POPAnimationEvent.mm */; }; - 639AA00D5A683FEF99EED79AA5886679 /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = B18E4523B7A2D3BA68FE05BE72681E02 /* BFCancellationTokenRegistration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 648E7747FB62EEEFE96BD5622128F170 /* PFHash.h in Headers */ = {isa = PBXBuildFile; fileRef = BADE09B4EF587C0DCFC3F014B3DD1767 /* PFHash.h */; }; - 64E5E6820D9816C209547D94F2BB6562 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A0A214D3D8D8170F77B8631024D14E1 /* PFEncoder.m */; }; - 65DC0149C069D90ECFEBF56941250C67 /* PFPurchaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = CF1F38521C14DBB0BD9845FBEBA5D9CC /* PFPurchaseController.h */; }; - 65DC1218144FBCE4EF1FD774A527E3C8 /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1039D733B7402E51965445AD5B5DCB98 /* AFURLSessionManager.h */; }; - 65E631D06E8973BA219DED288619559C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - 66271ACDD8C7FC27215842A9656C1088 /* PFLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E9B0790246604518A313DFB192E257C /* PFLogging.h */; }; - 6655468950083AF61524A6275FF9A2F3 /* PFRESTPushCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E80BE5758F379DA9001B14AF95B3C8B /* PFRESTPushCommand.h */; }; - 6680EDA225DDBD24AAA8AD3D9373828C /* PFSignUpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C9EF79160C35E4B837E7EBBF7C95D158 /* PFSignUpViewController.m */; }; - 66DCFF3A85030DB15D244781AC3FD8BD /* PFObjectFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 63FEAF34522E76198D04B10565E8B1AB /* PFObjectFileCodingLogic.m */; }; - 67469D5ADC9D1553949D7916A288E8EA /* PFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 0706E15293B087CF3BC18798F10E6F37 /* PFNetworkActivityIndicatorManager.h */; }; - 6760D65BFEF0A2FEE179CF031B5B5E07 /* PFPush.h in Headers */ = {isa = PBXBuildFile; fileRef = 775ECD6B6F3AADB8D98379981C1AD2A4 /* PFPush.h */; }; - 676C6E38537C4802051691D8056EBE41 /* PFLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 59EE9ABCCF20271B1A4D97DE22AA8DA7 /* PFLocationManager.h */; }; - 67D2F6E5A3216E43D97B63E771F06DD6 /* PFObjectSubclassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D701A317BF6E49246153A00794CCB57 /* PFObjectSubclassInfo.h */; }; - 67F4EDD1978EF86C5280CB051D92B690 /* ParseUIConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = A1297C03656FAE86C50B3C5179093556 /* ParseUIConstants.h */; }; - 68C107E42DDAB28C80D321FA102CF4A8 /* PFMutablePushState.m in Sources */ = {isa = PBXBuildFile; fileRef = B6CE6D85363B92C1CEFB2272C5148AFD /* PFMutablePushState.m */; }; - 69240AA871D54B8545057A3076CE4093 /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = C40BCF6A4E2863E61431A31D979EE9C9 /* UIRefreshControl+AFNetworking.h */; }; - 69A5F0FA9789A4C66CB54381A98D4A66 /* PFCoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9780F90C830BDBFB169674AFE0921D8C /* PFCoreManager.m */; }; - 69E78077EDD72A6AA494222FD75922C7 /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 041725EB6A05B1CEEF10F1C68D2B4E1C /* AFURLResponseSerialization.h */; }; - 6A4FB15F0506670406DB87B03ED01510 /* PFRole.h in Headers */ = {isa = PBXBuildFile; fileRef = BFA480ECE7F710752C7409F5C380B0F8 /* PFRole.h */; }; - 6AD3C772F3FF85F3497088F60C7963F5 /* PFColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F8F0DF089A8D938A0A83B044D743001 /* PFColor.m */; }; - 6B0EBE7A376D36F9EFA1331E7F8B63CC /* PFReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 42416DC02ED2707B15870496281BE361 /* PFReachability.h */; }; - 6B16EAB0D7C1CA39B78A840EEA86A15D /* PFUserAuthenticationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C5FC55392104FEA040D1DDC37429A8C /* PFUserAuthenticationController.h */; }; - 6CF96D28E0D903FE5CECE870E959A7E3 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 94CA59055B37DA8DC1D9377D2231CF47 /* CoreLocation.framework */; }; - 6D43310BFA5F6AFAB4BE717DE7E9949D /* PFSQLiteDatabaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6131294FCF882C880A8DAC44B48846EF /* PFSQLiteDatabaseController.h */; }; - 6F022DB58BA290D7E1F34A13D16D19E2 /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AD362A7EBE3D2E2936C281C50AC04997 /* PFURLSession_Private.h */; }; - 6F082EA1396F168DFB2C6F030293EB84 /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AAB30B0C1218AFFC57C5B5A58F1925C /* AFHTTPSessionManager.h */; }; - 7201F0F99D6B13F35856DD253A5C0E07 /* PFInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D4152BFBEE6D5EE6216460618A0BFAC /* PFInstallationController.m */; }; - 728A2994B680379A6073F0EAF3197B09 /* PFFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D505F6BC2E75E018CC37E152B154653 /* PFFileState.h */; }; - 739FCF97DC8962B9DFE12B6887C002F7 /* PFCachedQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 777C43E3AA95750283ADAA2717A0595D /* PFCachedQueryController.m */; }; - 744CE28FEC63BC838F17C749DD7302A9 /* PFPushController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0133FEB4B03FB6F08C08C7B83AE52ED3 /* PFPushController.h */; }; - 74852E4264FB23300164F52A30200E5F /* PFCurrentUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = 190972B3389C83F8279C6D8F35289902 /* PFCurrentUserController.m */; }; - 7489C719E388B356406569AE3746E191 /* PFURLSessionJSONDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 96D3C7353F23912FD706CABC336D4D2E /* PFURLSessionJSONDataTaskDelegate.h */; }; - 7526478D2E78774A038474BCBD3F1C32 /* PFObjectConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 8015A60E5EC1992EE7F83FBCDBA181E4 /* PFObjectConstants.m */; }; - 75746B518C7E0EC504D1548C9CC4FC22 /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = E2CA6C46BBB76A49C80830DB49B9FFF5 /* Bolts.h */; }; - 76E92D32C24B20A93B6AE0969D585F4B /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 089FEED162CE81FFDB1F2F722CC53B19 /* AFHTTPRequestOperation.m */; }; - 7710B4CBEACBB6050BF74F5B5C08E484 /* PFThreadsafety.m in Sources */ = {isa = PBXBuildFile; fileRef = D31C147B6E9BBE54DE19804E1F7CC396 /* PFThreadsafety.m */; }; - 7785B27C7EBF0BD5696DC493EE247B6D /* PFPaymentTransactionObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B0FB893863BB0FE866F5AA02F5D0360 /* PFPaymentTransactionObserver.m */; }; - 7924C2A8992A0D316DB1E9A299F60BA2 /* PFQueryCollectionViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C0458126D7C16A449337164DDC84D21 /* PFQueryCollectionViewController.h */; }; + 623489D434FB5A0E96784E951423EE97 /* PFCurrentConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = D0174B42952D90F56EA0F2648DDE8091 /* PFCurrentConfigController.h */; }; + 625F2F0C4B13C9ADCCFB854F0DFD5113 /* PFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EFFCB2BC3F85DF43E91E7C9E6029CDF /* PFNetworkActivityIndicatorManager.m */; }; + 62B992AA4EA2216FDE8D4ACFD4668868 /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 0032DD75A0637521BCE408B488991A32 /* PFConfig.m */; }; + 62C65E9E6542642AE65BD22663AA6DB6 /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D15AEEA95A5148DE70DCB783883AB56 /* UIProgressView+AFNetworking.h */; }; + 62DF196534F98A4C8F2950AE0BC0B848 /* PFInstallationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 99CB9D2CBAA3EB9FF897BDA59C05AB0E /* PFInstallationConstants.h */; }; + 63282495F7A69754CA11E40987DBB797 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3377FCED75EFA8411F46FCAB569CA0B /* QuartzCore.framework */; }; + 633BAFB373DCA7B1706037EF1A32392D /* PFDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = E4B0889630AFD4FEE22ACC8897E502BF /* PFDevice.m */; }; + 63FE801109A1B9D13DE8DEE5EE2E9F50 /* ParseUIConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 070CF2EA5C953FFF03ED8BE7AF055AC6 /* ParseUIConstants.h */; }; + 64B7FDC033EFA36BCD13641AEE0458A9 /* PFActionButton.h in Headers */ = {isa = PBXBuildFile; fileRef = E8A4616759870C960EB08032937E2E1C /* PFActionButton.h */; }; + 654CB8AE73312DD817E9BA3227DE6F6F /* PFRESTUserCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = AD02C69252DD7786D721C61B2B976AA5 /* PFRESTUserCommand.h */; }; + 660FC1CF7289F64C4E6F842EADCDDB83 /* PFCoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E1CC1609ED693F8AD00B3E0AC737E55D /* PFCoreManager.h */; }; + 6723497F2B6623CB33433EBF6FB7E1D3 /* PFSQLiteDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CCAEDE8683EF8A24FFF167A71FA7D5F /* PFSQLiteDatabase.m */; }; + 674D663B284AEF8D267DFF015DADCFFA /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F7D69FA827468B9904DF732655380BE4 /* Bolts-dummy.m */; }; + 676895479A49C84A00AEF25515406BA1 /* PFAnonymousUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = A1BE727276517B932F2B64A6FC3FCCF7 /* PFAnonymousUtils.h */; }; + 67A49849BDC14071843A8EC2972B0F21 /* PFPush.h in Headers */ = {isa = PBXBuildFile; fileRef = B764BD498C359AAFC3E6F6AAC3D3E85C /* PFPush.h */; }; + 67BAB5ED99BF2B716087D0C6E4629302 /* PFSQLiteStatement.h in Headers */ = {isa = PBXBuildFile; fileRef = B67C35C1DABD028393D277EEE5D3B7C9 /* PFSQLiteStatement.h */; }; + 681F184EBED897A7E32E703CE64180F9 /* PFInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BD35A119D862154158FCCC4B09B3262 /* PFInstallationController.h */; }; + 688567EBCD1F791D690EF0B0606E8D7D /* PFAsyncTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 673587B2907BA706E532D70A260B0E23 /* PFAsyncTaskQueue.m */; }; + 6989C078EF4388CD38C689454474E124 /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = DDB175753057C1F0FFBE10AB7B0EEB27 /* PFEventuallyPin.m */; }; + 69EE61E43C6474B742D41E98F445CE9B /* PFCurrentObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 16AEFED7962E0BF326C178758FAA59FB /* PFCurrentObjectControlling.h */; }; + 6A45A9B00F4EEB013A668599F5C034E8 /* PFTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = E92338ECA650704F11762548FC114CD4 /* PFTaskQueue.m */; }; + 6B76300BE41876D9CCB88E24375B998A /* PFInstallationIdentifierStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 08B7EF901C70552DA9B5A8971B03F15C /* PFInstallationIdentifierStore.h */; }; + 6C53A99AA323AC105A23D635D85CB893 /* PFConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B96C276DE7B41CDE5726F2371D90180 /* PFConstants.h */; }; + 6C6F1B84D3E615B005CD148C5B2A1AE3 /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = AD35F054FD3FBA08C0C1A4E0D696BF27 /* UIKit+AFNetworking.h */; }; + 6D27499A38CE0B76D47C9B846117533A /* PFRESTCommand_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C2645D21C07B6F69240D9A4D983E983A /* PFRESTCommand_Private.h */; }; + 6D8349CF69F6F1E9EFF84C4C57FB426F /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FFC7C12A9929D142B391ED373CBFD54 /* AFNetworkActivityIndicatorManager.h */; }; + 6DFC459F183BB5A31DBBED8B64DE6D9F /* PFProduct+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D80FF4E9773DE13DB3A24674C2396EA3 /* PFProduct+Private.h */; }; + 6E02670C7329266CE5EBAFB392D91E79 /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B52975B9237400086D156AC62CC60DA /* UIImageView+AFNetworking.h */; }; + 6E68413CAD6F59569672C23A760513AD /* PFMulticastDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DAB23904561CC53FA534F667038B5583 /* PFMulticastDelegate.h */; }; + 6EA6F173DC7813A46E46EB95B9663BE4 /* PFActivityIndicatorCollectionReusableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D28187843427D20AE0896283D27AF1A /* PFActivityIndicatorCollectionReusableView.m */; }; + 6ECA2588DD9F371705464EA868788A37 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D03B9968185DC57D4AAC534C0871E1F /* AFURLRequestSerialization.m */; }; + 6ED9F7C99C54CAAFE1138FE93FD286AA /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 59811DB1920343BD12DB96E6C9F66504 /* BFTask.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 6F583053A2888B239E6745BA2A6653EB /* PFPropertyInfo_Runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = DC43B9A350143A165C3FF99564935EE4 /* PFPropertyInfo_Runtime.h */; }; + 6FAF91C5D66CD77C9E84DAA8F7303D59 /* PFMutableACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B99B90E05635CBE020DC50A0CAF2EED /* PFMutableACLState.m */; }; + 70D550AF4C9629970790646494809319 /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AB5AA67ADB7D0C7FA8D41D64158DB24B /* AFNetworkActivityIndicatorManager.m */; }; + 71149E3D734A45987DE533C63E64B8CF /* PFHash.h in Headers */ = {isa = PBXBuildFile; fileRef = CDC26E1A3CDFBE282F2AA32E09691A43 /* PFHash.h */; }; + 711F86C92C8161B7E3E8EFAA8DC46084 /* ParseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = D0BA59EE37D1B06B78227EBCA6D326C7 /* ParseInternal.h */; }; + 718A1B8133F64AB761004A96137C2473 /* PFQueryUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 639D27426D5127006E970FB7A1174B54 /* PFQueryUtilities.m */; }; + 71AC8C8F844793FCB358AF89FA39CEE4 /* PFFieldOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FD7A9CAF1212AD0BEA9C1F1FDEBB771 /* PFFieldOperation.m */; }; + 72C4E5F68F540FD3EBB645C1E4E37603 /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D43A8730F06C62593574EC5D9F4B356 /* Pods-dummy.m */; }; + 72D185DBCF5DBEE36998286105DB28B7 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D7F1D2389E46D7B61047075A932829E /* AFNetworkReachabilityManager.m */; }; + 7351EAACF7368F066FDEA8AA65D58F9F /* PFFileStagingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 12E82331DB385318C884CD8058143C44 /* PFFileStagingController.m */; }; + 735B6C06E3A85764BF2C91CAF740DB9D /* PFPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B4D3B911045DA61853DA813F8B7C6CE /* PFPin.h */; }; + 7537230E857ED6153146533AE06FDF98 /* PFURLSessionDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DA0F2801954B02B932946F1720A5AFB /* PFURLSessionDataTaskDelegate.h */; }; + 756040F66618848035E84EDE977C41A9 /* PFPinningEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4F870028EAE1FD8D5AFDDD2470A748 /* PFPinningEventuallyQueue.m */; }; + 760E954330FFA9BCC6353D2595246A9D /* PFUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 61467390B92F97244D3BC26A49D2B685 /* PFUserController.h */; }; + 761C53D89DAED1A039F35140FE681142 /* PFGeoPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A8BECDAF3344B5FC08AE2A877D46543 /* PFGeoPoint.h */; }; + 766B4915C9CE90EF60392BBEC59E5658 /* PFKeyValueCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6823513AE0BEA0DA0200365519976CC4 /* PFKeyValueCache_Private.h */; }; + 7671E87EE1AB4A934CB9C4C48A4FAC94 /* PFThreadsafety.m in Sources */ = {isa = PBXBuildFile; fileRef = 13912AB24A552973624C801917EE93B3 /* PFThreadsafety.m */; }; + 769DB6FFF1F0933FEBFDF5ADA942A9FF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + 76CF1F91AE5BF3853DC887DE7D231439 /* PFPushChannelsController.h in Headers */ = {isa = PBXBuildFile; fileRef = C0B0F0D29938228204FD8B3B73B0574C /* PFPushChannelsController.h */; }; + 773113ED2610EE916C7CD76FD2C2A6FB /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 466BC7AD0617AE5013D7A29EB130696F /* AFURLSessionManager.m */; }; + 7756D7BB0348749B4F60045225319440 /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E06E77181273CFD8A9E0A5A3A82A7982 /* AFHTTPRequestOperationManager.m */; }; + 77C67E773AFBDD3569331C7ED61AF8C6 /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = B03D3FA821F17169116EFE9F9BAA130F /* AFURLResponseSerialization.h */; }; 795E704A17919AB70FF6F5738289A44D /* POPAnimationExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = 22DC4C87D619EF0F28631B5560E82333 /* POPAnimationExtras.mm */; }; - 7A7BE0B71906AC4EEF741D34ACD5571B /* PFQueryTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 31F9E89C104ACA3B7C08B33DB94FFED2 /* PFQueryTableViewController.m */; }; - 7ABC7D13EC7F10833D72B1B5ED75102B /* PFURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 7017E1904439F48F0CC39653841838D9 /* PFURLSession.h */; }; + 79B6295E0237D0DA002EFD4D292BA827 /* PFPropertyInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 973C19D13243047264FC21FBFCDFC121 /* PFPropertyInfo.m */; }; + 79DE1504F1352EA069C6836250F000C2 /* UIAlertView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 317BA79E5F1AD8BF7315B4994BF8EA8E /* UIAlertView+AFNetworking.h */; }; + 79E6F3824ABF1A654EEB5B553C15DBDE /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 5879F2FB09C5807B9FDF0A95766D5A62 /* AFNetworking.h */; }; + 79F0B46501221234392581B72DA283DB /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CBA7766482114ABDA4DC83BA3A480DF /* BFExecutor.h */; }; 7B99231436CB0981EC5113A681AF7C8E /* POPAnimationTracerInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DA58C3428E2A0E2F88C2A0522297274 /* POPAnimationTracerInternal.h */; }; - 7CB520A7F93480BCCE6ED3EAE4D53EAF /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 83A7946D9B9D56684542F8D584D20370 /* PFInternalUtils.h */; }; - 7CEA2506323C78806464A4ADCD1A9FE6 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 270B41DE1EE1C3B5391246CDAED4C8BE /* PFURLSessionFileDownloadTaskDelegate.h */; }; - 7D12660030E37B329BD37158B4BF8245 /* PFAnalyticsController.h in Headers */ = {isa = PBXBuildFile; fileRef = A08F05F414FDAD6FE00523BCDB90BE7B /* PFAnalyticsController.h */; }; + 7C6D920BACC520618DDFE2362A8ED94D /* BFDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = B60BA9ED4F0E275CBAC1E49013164AB8 /* BFDefines.h */; }; + 7C6E0B5561F8DA7C19D1BBAB8AE5CCD9 /* PFObjectLocalIdStore.h in Headers */ = {isa = PBXBuildFile; fileRef = D50C646DA41493735AF1C4DB86891753 /* PFObjectLocalIdStore.h */; }; + 7CFE64FE0E0D57FAF2167E1FF1B7576C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 239E0F9D31C8A1EB39ECBBD49FCC766F /* UIKit.framework */; }; 7D2E1DA076E379421DF5A9E74C0FD4DB /* POPBasicAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = F54B1AE39CAF0CA846C1C729B033E047 /* POPBasicAnimation.mm */; }; - 7D40734CC14F03B41F0E88B139689F00 /* PFPushPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B3E595A5E46C08CB6EDD2AECFC436E7 /* PFPushPrivate.h */; }; 7DC645E712D9190C15F71B1B92844D2C /* pop-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 59B3FD41DEC22C5891C9B83C27BC25E0 /* pop-dummy.m */; }; - 7DDC420AD15D8E33ACCC0CBA24140E1A /* PFCommandResult.m in Sources */ = {isa = PBXBuildFile; fileRef = D39AAA20779A11314DE3292353142A99 /* PFCommandResult.m */; }; - 7DF684A676D0C6D6C9E217E70FBA4E4A /* PFMutableQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = A544D2F0BE5B4B49B319A783BAC77F80 /* PFMutableQueryState.m */; }; + 7E0B1B4265077A70972091E52F33A480 /* PFInstallationIdentifierStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 3265918C8EC595B914BC49318B924A5E /* PFInstallationIdentifierStore.m */; }; + 7E4283FB04E7D6BD11C39793C47E337A /* PFObjectBatchController.h in Headers */ = {isa = PBXBuildFile; fileRef = 92EFF2CB8EF752330DCED2DE09D8B048 /* PFObjectBatchController.h */; }; 7EE77B776CF54D5794EB5D9DB5FCF8D4 /* POPPropertyAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = F81E8633F1E784423FE8B9BE16D38981 /* POPPropertyAnimation.h */; }; - 7EF1C86FE832452F519F51E44434854B /* PFRelation.h in Headers */ = {isa = PBXBuildFile; fileRef = 218C17FDFAF32433D839F97FF17B2F62 /* PFRelation.h */; }; - 7F06975A49D877D950872BE36CA60960 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 358076BF1FC2383D78542D2EFF4939ED /* AFNetworkReachabilityManager.m */; }; - 7FF604BCF508916C20FC96386B466D47 /* PFURLSessionCommandRunner.h in Headers */ = {isa = PBXBuildFile; fileRef = 875608FCABF08485CA5E0DB7D13A53FE /* PFURLSessionCommandRunner.h */; }; - 8035B29DD0D2E6CDE192CFB413021BB3 /* PFProduct.m in Sources */ = {isa = PBXBuildFile; fileRef = 53FB4903C13CD4B728E653A624D36228 /* PFProduct.m */; }; + 7F19E0EB2DA2C4FCB26731C6D3EBAB05 /* PFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DA577BF9DDB46C2FB26396B480D30EF /* PFNetworkActivityIndicatorManager.h */; }; + 7F3A6F6FAD966914F5DCAFAE6BB7254C /* ParseUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 79839EFEDA52DDB79166288FE614A54D /* ParseUI.h */; }; + 800E91ECF564044E99D377858B8B3F28 /* PFHash.m in Sources */ = {isa = PBXBuildFile; fileRef = A2ABD2D212DD9D0B0E07D04D45281FD5 /* PFHash.m */; }; + 801099E0B9FCB6C2D53DA1740CC02609 /* PFInstallationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1052CA766BC6302276F38952879BA31A /* PFInstallationPrivate.h */; }; 804C70F77F75F0E75ACC3E3E4B47B727 /* POPLayerExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 9663A817A809169745F3F8E987FFE076 /* POPLayerExtras.h */; }; - 809B4FC22A06B6B83E0282C7672432D3 /* PFSQLiteDatabaseResult.h in Headers */ = {isa = PBXBuildFile; fileRef = B99C240F89A7BC2E76B71472745234BA /* PFSQLiteDatabaseResult.h */; }; - 80B7075F5055261F04B4029C1406EB76 /* PFColor.h in Headers */ = {isa = PBXBuildFile; fileRef = F42BAF2FFD8FD598E5C736149EA031F8 /* PFColor.h */; }; - 80C528865C8895DB3426F02DBF3C0D9D /* PFActivityIndicatorCollectionReusableView.h in Headers */ = {isa = PBXBuildFile; fileRef = FF535EE9855D265BB146986E399302C9 /* PFActivityIndicatorCollectionReusableView.h */; }; - 80DCEB3A08253B03FC7474C3CAC072A7 /* PFRESTQueryCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 35F8D658E839BECDFF6BB8B4BC6CCE2D /* PFRESTQueryCommand.h */; }; - 817B500E5ED177D38A3EC98115632595 /* PFTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A8718EC782F1DDBEAC83251BEA9043B4 /* PFTableViewCell.m */; }; - 819642514BB29D64B2FF0C38CC0B797C /* PFAnalyticsUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = D74E2E4235E9688B273C0714402DEADB /* PFAnalyticsUtilities.h */; }; - 81E1A28345F03D19813EF682006BC6C7 /* PFFieldOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 9377FA8A24B121D60FE9AA1745B38DC4 /* PFFieldOperation.h */; }; - 82F37565E385A7E818C024A26D83F6FA /* PFACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = 024F688442FF537808B2B1F23FD1E740 /* PFACLState.m */; }; - 841DB4F4869F2D4E6F6F53CC10CE3B3A /* PFProductsRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = F82C8E9DF011E7453EA40431821FB283 /* PFProductsRequestHandler.h */; }; - 84272DB1EB4ACEB4D0BB01CBBF3B9978 /* PFFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A85625E51C91983512393262199899C /* PFFile.h */; }; - 8499099175A198098F7496115B1DBD82 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E49F373A0C99D0BDC90B707820423BE /* AudioToolbox.framework */; }; - 85AECDB66088F01AB3230A50CF38F9EE /* PFLogInViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A11AAB2D71A25709B7A73C3D4626B66 /* PFLogInViewController.h */; }; - 85B0C6E345CC679BACD3B8EC8BC903BF /* PFPrimaryButton.m in Sources */ = {isa = PBXBuildFile; fileRef = F8C27D2D58E1E3AF1C21FB7330AF1B98 /* PFPrimaryButton.m */; }; - 8634E397DB95B4A205CA46F9464A75F9 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = F363289FFEDBECB17FBC94ED2AE8C0EF /* AFSecurityPolicy.m */; }; + 8133F915149D2C3DCCCB37D7400E8BB2 /* PFCommandRunningConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C3EB6B508AEE57A217EDA3D36FF587E /* PFCommandRunningConstants.h */; }; + 82380B9107996A9CC6893DFC10643ACA /* PFProductTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = D45B424C56418F8D74C78DACDA406B53 /* PFProductTableViewController.h */; }; + 8286466FDE3CF73E9657066D3FDAEA6F /* PFUser.h in Headers */ = {isa = PBXBuildFile; fileRef = D65BBCBB056DB6879DFF0EB12E1C804B /* PFUser.h */; }; + 8341EE83FBC383451BA2AE2C5C446BA6 /* PFCachedQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6DD1876D580489E010AEC2846628B23 /* PFCachedQueryController.m */; }; + 84095D5EA8DA88AD13C4FF5F0DF602AA /* PFPrimaryButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 273DD846A6C8B2FAA0D30EFD98074903 /* PFPrimaryButton.h */; }; + 84B090289B5F0D8D883D6E3DA8049C59 /* PFProduct.h in Headers */ = {isa = PBXBuildFile; fileRef = FA5CBC2DC2B028CED630E64EBB9D0FB8 /* PFProduct.h */; }; + 84BB52D486ABE0C46AFF2E1C9D8ECA11 /* PFPushUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = C93F4D18AA8D974173385F0F766E7DB6 /* PFPushUtilities.m */; }; + 85D80D1497A9E6318D2F783D20F6A746 /* PFCommandResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 274990949179381C67FCBC2FB6237E86 /* PFCommandResult.m */; }; + 85FF8BD54230792ABFBB3B20DF0710D4 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E8705BABE3C82AE3B0C16C1A41809C51 /* MobileCoreServices.framework */; }; 868BFBCD8263F71F8A14CBBDDAF5B748 /* POPLayerExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = 197635F0BFB93E63E82503F09B7AABBF /* POPLayerExtras.mm */; }; - 878393E04A1E6DF9BE7442BD2D45971D /* PFURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 31EF40A5583C282323AF183A3C383CBE /* PFURLSession.m */; }; - 878A11C8556D40E0F2D786C85E334456 /* PFConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 51E4264B938F3B426D4673C5853B2500 /* PFConfigController.h */; }; - 878FFB2B0C1CEBB717761B9969A4A64F /* PFObjectLocalIdStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 60ADD91AA56B1BFB00B61936E49D3CFD /* PFObjectLocalIdStore.m */; }; - 87C2F80153CA8A6BD8526B7DB9F4C1B8 /* PFInstallationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = EDBB5CF4F1A249E933B2469709D9F8DD /* PFInstallationPrivate.h */; }; - 880A556877BBB523DEE7001E1945C648 /* PFUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = 973D3E8805C0C339DAA7877098A99A7E /* PFUserController.m */; }; - 8853CBA2C0D6980916593B7808BC29BD /* PFOperationSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 29704F78778234595067B1E9C61399BE /* PFOperationSet.m */; }; - 88D9933BE4B375EB4C69530BC369E350 /* PFOperationSet.h in Headers */ = {isa = PBXBuildFile; fileRef = CCE6D23A84D4E85A3CD15B802A7AE4CE /* PFOperationSet.h */; }; - 8901469CC5AB2228CA972762BC61D3B7 /* PFObjectPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6423CE3A0CE5B59A5BF4B47922AB73A5 /* PFObjectPrivate.h */; }; - 892089BB4371D4B36ADC6A000613CB17 /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A3635CE479DD0FD03FB5589A75B62EC /* PFObjectFileCodingLogic.h */; }; - 8B1BD5642BA0A15B690E677651F808D3 /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = DBD6939AC0C49B37416ADF296729C43E /* AFURLRequestSerialization.h */; }; - 8B58E16D2F44D517D4CD0B5AFA479B54 /* PFUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = 28F300166004C87461905D9822D4C136 /* PFUserState.m */; }; - 8C09B8DEC14AE6744582DD2257C52CD5 /* PFRESTCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = FAAB83BF02473BC0A2415881560312DB /* PFRESTCommand.m */; }; - 8C19440562BFF499AC480DE8E608FF46 /* PFImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = FEF70A7046A494A88828C2736E5DB5BC /* PFImageCache.m */; }; - 8C611929D69DA8FDDD0C2D98B9E2FC02 /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = D44289371FAC5C4BED0F2F71337214A6 /* UIImageView+AFNetworking.h */; }; - 8CDB3264ED94C27CAA178E20CBEE8F8B /* PFDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 8277E669C14D90814D85CAF0D08745D7 /* PFDevice.m */; }; + 875FF12D2CA07A0501C2C6E3737A04AD /* PFCommandURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A4F618AADE59392769825A0D49EE47C /* PFCommandURLRequestConstructor.m */; }; + 87A934AAD963BC79E14FA5B4036E1561 /* PFLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 854E62EC5E2973D6FCF577826C74F488 /* PFLogging.h */; }; + 87BA579DEE95B932566E7AA395784BF1 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 766ECFB7911C046BF26727DBBA70D63C /* UIProgressView+AFNetworking.m */; }; + 87CA2E89F0671338C5D77AB3D1DCAE08 /* PFApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EA417AE6CDB838C92E170472191D0DF /* PFApplication.m */; }; + 881340F4BCADBA95C5B1B83E1030BE38 /* PFTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = BE051BD21600FDC3BEEEC4FD728B4870 /* PFTaskQueue.h */; }; + 887905EB38E8344F596B4E5D119C2E04 /* PFLogInViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FD5E7E043964841EF8A0EF7D3718C17B /* PFLogInViewController.m */; }; + 89DA1EB876BA7141F1A40F8048AE1BAC /* PFBase64Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FD87BEA2A82FBCF43F08520914FAF67 /* PFBase64Encoder.h */; }; + 8A700EB1C1BD9FE93FF3203FC515E8C7 /* PFDateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8915F1D49EC6C0508498246B9ACEFAD5 /* PFDateFormatter.m */; }; + 8B4BA05DDDFFF1CB2B3E627D11876FB8 /* PFImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7309A304A4D33AD098C95DE23B2DA6DB /* PFImageView.h */; }; + 8C7620B050DE2DB1D8C4BE53B7AD446B /* PFRESTPushCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = CAAD75E8BD1581901916F81E5AB5A408 /* PFRESTPushCommand.h */; }; + 8C87A4997D35A353FA5D021F246524AD /* PFMultiProcessFileLockController.h in Headers */ = {isa = PBXBuildFile; fileRef = E7FA3706C8A417CF36509CA16FEE6E0D /* PFMultiProcessFileLockController.h */; }; + 8CB231ED4582EEBB8AFF63A0DFDBCD2C /* PFRESTCloudCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A87B0BB5553675D9F3949E3BCCD04F2 /* PFRESTCloudCommand.m */; }; + 8D31A105377BECB169DFBEFF15313E77 /* PFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F19FCA7E4720B98AE2148E2383CC09 /* PFObject.h */; }; + 8D92FB3C9934E0339F9DFA3F2A9026A5 /* PFRESTQueryCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC83B4BD9DA9879EF97882A6B805D3F /* PFRESTQueryCommand.m */; }; 8DF9960DD96F9AC25E32BFDD4A3B53B7 /* POPDecayAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = C560616DDF5273CF7C53EF72EA6ED45A /* POPDecayAnimation.mm */; }; - 8E02FAA01BA3DCD0CA25C003FEC9C40B /* PFUserAuthenticationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 187E6237B057376167C9530E9E3D2597 /* PFUserAuthenticationController.m */; }; - 8E9C6364F65C04540B01F5F7864679FE /* PFPushChannelsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E49C46EB05E82BE8654545920C832EB /* PFPushChannelsController.m */; }; - 8EA3C689EDCDEBB6094FAB91A8FF8165 /* PFURLSessionCommandRunner_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D292B318B83D8D026CD2FAAAB59A62D9 /* PFURLSessionCommandRunner_Private.h */; }; - 8FE6DD5A880949235DF71570CD9AF86C /* PFLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = F1DD91DA807740D7FAB3167719838902 /* PFLoadingView.h */; }; + 8E0E40DAC6814C6EA72F24C69BDD20BF /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AB7B8E6741B6E0DA722014D71526A8B /* PFEncoder.h */; }; + 8E8569ECB5C0BCACF6189BA52D25D18E /* PFPinningEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 7665F686CB87E16A8AA3434472CFA6B8 /* PFPinningEventuallyQueue.h */; }; + 8EA4621B5543407507A96F8CF0107218 /* PFTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E01AC1838C574E671E9DA63C930BD46 /* PFTextField.m */; }; + 8EFBBDFBFB46FE3AB6B498858E57E925 /* PFRESTObjectCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 13241A3B21123E4FE094C366B51D599E /* PFRESTObjectCommand.h */; }; + 8F12ACFBF21541054C6DDF361C60D5F7 /* PFObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BFE915330494AB9449B0035C1A3FB20 /* PFObjectController.h */; }; + 8F5D4E08A39F536491AEAEAED03AA45F /* PFPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 73B670C37B2B798A121E6EA4650193A6 /* PFPin.m */; }; + 8F5DE45FC6939E665336774057B73E66 /* PFPushUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A238C25BA4BC261D2F689BF12926A8C /* PFPushUtilities.h */; }; + 8FB267ABE60E97A30F39F5A89361C75D /* PFAnalyticsUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F37BDAF72EFEF9BD278F460EC2777CD /* PFAnalyticsUtilities.h */; }; + 90623FBA43B6EC89DB654789E0ACDADC /* PFCoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FA15F6CA2D7C7EF833942425A4D4E14 /* PFCoreManager.m */; }; 9088AFD3E6C678A42A8E0189F65F73B6 /* POPDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 90DA3C63E9AD758336342BC51C0BB859 /* POPDefines.h */; }; - 909CFE7FFE6FBF340F2838D4002C01ED /* PFPushUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = EA487C07C0F804790F5993CF5E3C6D3F /* PFPushUtilities.m */; }; - 91B64709D6B292496C4A6A225D4BB7CF /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 1315EBF14A0D75438D37ED2C3FA79516 /* UIWebView+AFNetworking.m */; }; - 92D43075C24E2442F4E3AD7C4DADBDC5 /* PFMutableQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 053C8DC2F31DA21D6E7CC1C8B47B7E7D /* PFMutableQueryState.h */; }; - 93986334C9BBABFA5A3090FE9494BE81 /* PFSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D78EE0601B6C0565B9C30B04EF23630 /* PFSession.h */; }; - 9475ADC7AEF8EB8886BA1A3EB222581B /* PFFieldOperationDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 877583FCE729451EBA709DD2F69EC026 /* PFFieldOperationDecoder.m */; }; + 911A4DB10A5E33A6F04F94A7703B185A /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9DA36160BA0216D14C3924C282BAB7F4 /* CoreLocation.framework */; }; + 915E44E8A08FE45E6A616B1052249A5F /* PFPinningObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 701E5785FFBE0972D168BB43B924A6E2 /* PFPinningObjectStore.h */; }; + 91B3D4785C26BAFCCAD9DE46FC4B32B5 /* PFDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AC27D16447D4E34E9C9C3F32E5E3C92 /* PFDataProvider.h */; }; + 922C7D59C121357BF2AB4E275E9D1369 /* PFImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 535ACE2CE3D781563A174674D905E319 /* PFImage.m */; }; + 92B98AC6461B0704BB8D94B9DF97EB73 /* PFObjectState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 17C1B899764F56C1759EB14EAE39DA10 /* PFObjectState_Private.h */; }; + 93118EB6B094059F1E801C2D3F0AA183 /* PFSQLiteDatabaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = C00D0192F700B20E64D2594418007E71 /* PFSQLiteDatabaseController.h */; }; + 93EBE76C2A186F0D4C77B319ADEE6BFB /* PFNetworkCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DA3DB595C2499FC183C45E3E9B22292 /* PFNetworkCommand.h */; }; + 94315FD102E2414BA465F5137DE1384A /* BFTask+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 73255E52B56ECB68C1799B5391F4417D /* BFTask+Private.h */; }; 94BFE73B7E00A0FED987F553B0DCE94E /* POPAnimatableProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 313669CF0D1BF49C96C85FC593F4BC1D /* POPAnimatableProperty.h */; }; + 94DE090DC9D4E2FF01B807DC088C1A2B /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EEFB0E13911BFE92BB019AF38E77F0 /* PFBaseState.m */; }; 94FACE1C5E4B42AB129DA7326E4E04F9 /* POPAnimationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F210DEEA777E0BF1995DC3570CC616E /* POPAnimationEvent.h */; }; - 95910634F7060495109982E7841E381A /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED8D97DDDCF9842413073AA979D81CD2 /* QuartzCore.framework */; }; - 9600DCCC69D0F088EB727C5B1769B4B3 /* PFRESTObjectBatchCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 27C2859683043CE13C206444451CA55D /* PFRESTObjectBatchCommand.m */; }; + 95DFA5CCE6397EF69508C00B7B130D4A /* PFEventuallyQueue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DDE935B0E49A17A9AAF9F1F3690617A3 /* PFEventuallyQueue_Private.h */; }; + 95F0FF4728F785061D9B5815E441884C /* PFCurrentUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B85DB17C99ACFC636195DE8B7E94F28 /* PFCurrentUserController.m */; }; 966900CAD39E8B592A35F8401549A86D /* TransformationMatrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E056FF5C4EC38A55B45FB52F395D72E /* TransformationMatrix.h */; }; - 96AD11F17A800AF7904D96EAE89192E6 /* Parse_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 01D98518A65B6A9D496DAB55A24824E7 /* Parse_Private.h */; }; - 9710BA2A332B179BA2827D289D2453F1 /* PFPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 3585F7A481D939D1D1C3294775ACDBE7 /* PFPin.m */; }; - 97A58492910A00B0B6A1149CB7B81FF7 /* PFDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BF42B9B3BCA6AC0E4C7A5C4A8D56C76 /* PFDevice.h */; }; - 98C36B42CA7EF2A5C43647355E1590AA /* PFUserFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = E04C49F5564B931B972E6F826A732529 /* PFUserFileCodingLogic.m */; }; - 9903DE555B85044677A815ACC47B5685 /* PFACLState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C3D77BC909D77D1BFD9EB010608B1E4 /* PFACLState_Private.h */; }; - 99FAD7969112EB91391E4535089F7A27 /* UIView+YALConstraints.m in Sources */ = {isa = PBXBuildFile; fileRef = C398F4947CB112102A0ADF8368272495 /* UIView+YALConstraints.m */; }; - 9A50C636573A1162D6620C5414D09BD7 /* PFRelationState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 57C18DD90130326F25EB38A9F343D5B5 /* PFRelationState_Private.h */; }; - 9A90E8F4BF92C990DE4167054E85D654 /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = AC969BF0B09B32631651A85209580443 /* BFCancellationToken.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 9B3D878BE422C022F78E6F3B8126F7EC /* PFPinningObjectStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 5359BA092EAD4FA522BBB80FC27C145E /* PFPinningObjectStore.m */; }; - 9B60A3C0A1E286E8398F7595B38C5FA8 /* PFRESTCloudCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F1B395CC49D380489BB0BFDABAC35D9 /* PFRESTCloudCommand.h */; }; - 9BAE39B1C12DF4038483AD24F4AEE5E1 /* YALContextMenuTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 37763F17F64B25496F9259C6C59F7CB8 /* YALContextMenuTableView.h */; }; - 9BB97D7622FDB67B314F93646C6A21A6 /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 0024E7BD94CF93AC26F575C1C8DDC77A /* UIWebView+AFNetworking.h */; }; - 9BBBA20A0D257B239AC0CDBEA6F29BC7 /* PFRect.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A835C10155FEF5DCB5D5E43843849B7 /* PFRect.m */; }; - 9BFE33D3520D009C6EB9E8AB56FE2752 /* PFCurrentInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 752312E41E6828D9DFD974503E6DA356 /* PFCurrentInstallationController.h */; }; - 9C967AB082218D0703E71E7522D2DC20 /* PFObjectFileCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F9ABD34BEBC96F253CE102411DABDED /* PFObjectFileCoder.h */; }; - 9D84517F42EDA4E47A670724BEE974C3 /* PFFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 89362786CE0111AEDE7DA9FACAB648E7 /* PFFileManager.h */; }; - 9DA42084513E9EDEC1FD2877C7358DA4 /* PFAnalyticsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DE095F15D0DA44B27DE6F3F40B748C5 /* PFAnalyticsController.m */; }; - 9DFB0B43F8AD5124869FA8B0C49518E6 /* PFObjectState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FF0B9CB696808B8C85640C9F7180BB8 /* PFObjectState_Private.h */; }; - 9FC0A759B553E4C1DA3D0F5B50ACEE0E /* PFInstallationIdentifierStore_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0691E15B84DC22B58B24454A662AF44F /* PFInstallationIdentifierStore_Private.h */; }; - A06391D968AFE47F156783742F646922 /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = BEAFF13EAEE726C139773BE3860F7AB6 /* AFURLConnectionOperation.m */; }; - A13C4BB86354DFB46C4C5481307883E5 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D8F3DA883848E2DCAD665B10531671C /* BFCancellationTokenSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A1B79A413EF7DAA8A4EB9CA5A8BD08A4 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 26F7C6740719BEC436C7CD3912C491A4 /* AFURLResponseSerialization.m */; }; - A1E6CFAC51C967076FB1942859BCCCA2 /* PFObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 01AF5FDFA32CA58C779C40A40EA3D2AE /* PFObject.m */; }; - A1FBBD9D4DB3E0B403F55E475200D922 /* PFMutableFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BE6A6845F3586D10E5408C9FB591328 /* PFMutableFileState.m */; }; - A2473BDD6B4DF7982A694061166A7FD9 /* PFOfflineQueryLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 29883E2F7FA2CA83E9313FBE44CEE849 /* PFOfflineQueryLogic.h */; }; - A2A4F23CEEDDE6AC6AB5E12823B090FD /* PFDefaultACLController.m in Sources */ = {isa = PBXBuildFile; fileRef = 110EB87EF49E8CF2B18E11692AC1E903 /* PFDefaultACLController.m */; }; - A34DE9EF9C14F3296963A55768201841 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - A352DD166FE10E5DB1BFA5A59C2766FB /* PFPropertyInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E495F30B2C591E5AD9A1CC249901ACD2 /* PFPropertyInfo_Private.h */; }; - A3CDFB8B5F9558B4914FDAAA3DEF0954 /* PFGeoPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 39673E55062D1B61E621B82E444AE6CA /* PFGeoPoint.m */; }; - A42F547AFB6AD220F9DCD4EDF6E6689B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9FB80727EBDBCBDEEBCAB45A1785BAF1 /* UIKit.framework */; }; - A6348F02CCC5CBD996733B7A6BC7B8F8 /* PFPropertyInfo_Runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = FF73455163A4B9C060A3B73C44658BB4 /* PFPropertyInfo_Runtime.h */; }; - A996E3E947C6267CC2641F8BCF6D3A0F /* PFRESTFileCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = F996BE0C38219298C5E7E92AF1A4B595 /* PFRESTFileCommand.m */; }; + 96B3620642D51B56698497C98AFA4F82 /* PFQueryTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AB3A48FC769AD95A394C4C83BF67B64 /* PFQueryTableViewController.m */; }; + 96E63FC8257A8F7B84AAD36DABE45911 /* PFKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EC857A3558E673EFCE406A5DFF70CED /* PFKeychainStore.m */; }; + 9739C96986BA08B93A12085B40B04346 /* PFMutableQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = DF83BDFCCA994BD066517D629BC3DF51 /* PFMutableQueryState.h */; }; + 97B759E5130A33C19F275B159200874C /* ParseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 14C49D948543AA2D8DFEF76353D739C1 /* ParseManager.m */; }; + 98396F4F5625358D6069A34AE59B6E27 /* PFObjectConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DAED37688A9788B970EB42A53BC2906 /* PFObjectConstants.h */; }; + 985531317B0CADBD941EF7C58E44F8A3 /* YALContextMenuTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 57262F9EFF4C54EC8B1425BC1CE98F42 /* YALContextMenuTableView.h */; }; + 985A785F14BB1B6CEC3A230CAD5649D7 /* PFInstallationIdentifierStore_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BC36677DB08053931D1BAAD36BAF62D /* PFInstallationIdentifierStore_Private.h */; }; + 99481D8221949F304D52C6F91120A652 /* PFOfflineObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = B7A955E7740A7339D23B5304005393AB /* PFOfflineObjectController.h */; }; + 995A7CB857131DE78231158B6056F960 /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B321A74199674C110D83880D9E64B0B /* PFDecoder.h */; }; + 995ECB7FE5263643F5FDB93C0516858A /* PFPurchase.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CC177AF3ABA56751898D2D9CB28484C /* PFPurchase.h */; }; + 99A0F200BA9C675685D1E43116CA7931 /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = ADE317F890D27E4E39356AA9D6BFB4C8 /* BFCancellationTokenSource.h */; }; + 9A4497776424B55D2DEB186EECA7681C /* PFCommandCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 765B68008399E2AD5680EF7D17B0250C /* PFCommandCache.h */; }; + 9A53557A62341D0ECDE9C085CD75F5CB /* PFPushState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D597CC380B1F76815385F7A6310DE56C /* PFPushState_Private.h */; }; + 9B0ACAE06343FFBB110A9026449C8918 /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = FAF4306E39F8973F061A32BC46F31FAE /* PFObjectSubclassingController.m */; }; + 9CA95F8505F64E85DC3B0A686C16DB87 /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E0FB1196A23924FD3230C985E965FD7 /* PFUserState.h */; }; + 9CF48AEFCE6F9045931D4795813A04F1 /* PFHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = FB1632F36B47719FBD89B72749ED1EFA /* PFHTTPRequest.h */; }; + 9D2BE1D0C32AC20CC918A9A5D106A92E /* PFLogInView.h in Headers */ = {isa = PBXBuildFile; fileRef = E49EF341DFF0A786D4F295ED85B33595 /* PFLogInView.h */; }; + 9D4B1511347C50240A7D974E2680A2BC /* PFUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1392560741BCEA56A371C0C1A00E3E32 /* PFUserController.m */; }; + 9D516D2678E06EB4165D4BB535FE9549 /* PFQueryUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7513C38F42866CBD8F891DC79A7E43 /* PFQueryUtilities.h */; }; + 9EFF97378B2FAB0A79E5DFFA17C7877E /* PFObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 69CC0EFFD531D00F188F0AC109288144 /* PFObject.m */; }; + 9F53C2093DD186B4090B5FD6E7764398 /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A3886486E073DDFC226404820C5AD00 /* PFQueryController.h */; }; + 9FC681F90A12C271D0247109A0AF82A9 /* PFOperationSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AC80D3003419DA756DF2880C6F36172 /* PFOperationSet.m */; }; + A059F3D6C6DCBF6F579390BFBDAF7B0B /* Parse.h in Headers */ = {isa = PBXBuildFile; fileRef = D1A712EAFDE8F1E77A0E62A0AEE3A4FD /* Parse.h */; }; + A0FD5D70607791DA434607BD32953BB8 /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A91EEDE8C7A6B31C2A05FE382152430 /* BFTask+Private.m */; }; + A22BD0BC5D61510B4BABAC8A284DB26A /* PFCoreDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 07D2FC4FC605245EE247C94509830D89 /* PFCoreDataProvider.h */; }; + A37BF088BECE45A7D70796EAC9CA2F8F /* PFRelation.h in Headers */ = {isa = PBXBuildFile; fileRef = 91B92487E040A134ED6ECE85E9F96CBD /* PFRelation.h */; }; + A40FFD3B799DB08AF93EF3D58721C683 /* PFAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 20A9279DABB12A3A350F256E04B589EC /* PFAlertView.m */; }; + A61E7513E800B3B97C2D48A48526D13B /* PFAnalytics_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BEEC2786704C942940CD10E3F749CEE4 /* PFAnalytics_Private.h */; }; + A8A41DDB530252AF762DF8CC3E2E1AC4 /* PFInstallationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 4258A390F83ECD7E9252FDD8B27DAB0D /* PFInstallationConstants.m */; }; + A8C4F183ECF09B6553062A8263040996 /* PFLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = D6A7AC20B273C8BB63EE48D7133CC688 /* PFLoadingView.h */; }; + A8D7D8586E9A5917C29A7837D7F725C3 /* PFFileController.m in Sources */ = {isa = PBXBuildFile; fileRef = D57EDFC44E568CFD0246659F492273A7 /* PFFileController.m */; }; + A90ADF3FB744411C529F9F6FFCF60655 /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CDA5DACDC94924F7EDB7D93CABD0EAC /* PFMultiProcessFileLockController.m */; }; + A915D4D7D96998047110A55EB68445FA /* PFACL.h in Headers */ = {isa = PBXBuildFile; fileRef = 617D220324EF51E32701037AB3B7994C /* PFACL.h */; }; + A9434D6A85D9B7C74ED6FC0A94E94215 /* PFObjectFilePersistenceController.h in Headers */ = {isa = PBXBuildFile; fileRef = 42D399495BBB064481EB941973B350C8 /* PFObjectFilePersistenceController.h */; }; + A967CA792971C2DACFD897D548777BBE /* PFDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 52B23FC4F06E1B1F6E4B87AADE84A616 /* PFDevice.h */; }; + A97972A382BE9DFA0A427639E0BCDBCB /* PFLogInView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A3326F104E2444D64942174B3E37E0 /* PFLogInView_Private.h */; }; + A99D97208D00D2F6AFAB19D2B0B4CA9B /* PFACLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B6906BA58A708893C496F829C45DE8A /* PFACLPrivate.h */; }; + A9B011801E9F00836D17EB399A96E0D4 /* PFPushController.h in Headers */ = {isa = PBXBuildFile; fileRef = C481F602B57BFE1DE599333C1792C70C /* PFPushController.h */; }; A9B701428585304B432F6FD45D7EB707 /* POPAnimatableProperty.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9565C73D5D4BE79747E60DCF1557E71 /* POPAnimatableProperty.mm */; }; - A9F58BD8E15E32FE2F46C820F1E48E66 /* PFACL.m in Sources */ = {isa = PBXBuildFile; fileRef = 891A2E0E0FA20C1648F5C841F3E564AD /* PFACL.m */; }; + A9E52A3CC06FDE81D8C5CD7D984FB61B /* PFUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = D06FB7493A3B6A4C5285B464F48A9A14 /* PFUserState.m */; }; AA0189A6FB9572B5BF87E3B0DD1F872C /* FloatConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = C091E831068E3E504A40AC6932B39C87 /* FloatConversion.h */; }; - ABBBC278EBDDA40702E0436212E86E9F /* ParseUI-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 91C2410DA547032FC3DC2AE3C259C844 /* ParseUI-dummy.m */; }; - ABC087DE99A9A9EB06CA4FC2E6D5D09E /* PFImage.h in Headers */ = {isa = PBXBuildFile; fileRef = B6715EFDF271A27FBC8980E595A56F18 /* PFImage.h */; }; - AC49A05B1513ABEC3365D1474436C6D1 /* PFFileStagingController.m in Sources */ = {isa = PBXBuildFile; fileRef = A1A2A66F3FC79A3E2778CF485801E64C /* PFFileStagingController.m */; }; - ACDDCAAF4C46330AD2D2AB16BFF02C4A /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BA57A433E33E9125A8347D57D7F766F /* UIActivityIndicatorView+AFNetworking.m */; }; - AD170D2AB15EA449A8AFCBED2A2564DC /* PFImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EDB22FC9E38F0BCE867A085A703C3C0 /* PFImageCache.h */; }; - AD28999B0D50D3B103822C3AA659D6D9 /* AFURLConnectionOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C5CBEAEA564EF7FD09CFE53392CC6424 /* AFURLConnectionOperation.h */; }; - AE613AD929239B7E4D5009D4AE5D3944 /* PFEventuallyPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 96B412F3169F62969DAC6A85BFBE68F4 /* PFEventuallyPin.h */; }; - AE61BE4F170E46BCA8557D4BA4CD06A4 /* PFInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = E615EEC282CDCEE0D432D51BEA8F872B /* PFInstallationController.h */; }; - AECED6B3110DF267738AECF5E1F6A7F0 /* UIView+YALConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = EFF1793AB041ED2DA9362386ECE91641 /* UIView+YALConstraints.h */; }; - AF63656DC5C09D391A445E07384ABD71 /* PFUIAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D0D83D976316A1E4675C57A59FD08D7 /* PFUIAlertView.m */; }; + AA9E183BC561A6E7F6E0C1248F557545 /* PFACL.m in Sources */ = {isa = PBXBuildFile; fileRef = 7318D46BCC46C45624A58D09BF59AD27 /* PFACL.m */; }; + AAD2B2F32FD39B7314EE5288D5950978 /* PFMutablePushState.h in Headers */ = {isa = PBXBuildFile; fileRef = 53C01CF54B15E1F429124FF7255C8845 /* PFMutablePushState.h */; }; + AC7905A3C2C7B9F8E16F917DE1BB17CB /* PFEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 92379A8257F8FBCD71D81BC0856D3972 /* PFEventuallyQueue.h */; }; + AD89FBAE3D25F78C3960919883004223 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52CF911E3F9125BF7DDC679A8D3C20E5 /* StoreKit.framework */; }; + AE13E40FC37E8837A44D3E03BFAD215B /* PFDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = CE69D782F43B9CDA9A38BC2A313170E2 /* PFDateFormatter.h */; }; + AE84D9647356875A5B1CE46B2883CF9A /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = E34C5907954DA4C1892EDA643F95193C /* PFJSONSerialization.m */; }; + AEBECFD09AB8F3578632C96EFFD637A9 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C74596AC3E38A52329D1EEE95C27275B /* CoreGraphics.framework */; }; + AEE8765826A3A7D18B4E0078A84F9C3B /* PFRESTObjectBatchCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B241F8BC8B06C3EB6643B6C67E5F153 /* PFRESTObjectBatchCommand.h */; }; AFEBB8DD2F176DBEF3E1F0FFA6FE7AF8 /* POPCGUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0A9ED47A0EA56543BEB2F83DFD6122C8 /* POPCGUtils.mm */; }; - B01375E6D33FF39CFC3AE8CB7D70AE2F /* PFKeyValueCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6744DE3000BEEB7DA4D7DAB0E9D6BB57 /* PFKeyValueCache_Private.h */; }; - B09E3CFB154075BCFE6AEA5F5D9EE8F5 /* PFKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = F820E3F0707C3FCB027CE5B4848D8564 /* PFKeychainStore.h */; }; - B0C4C32BA8DE1D5FE312176AC637848D /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 91FD3566B5AFA4DD010BBD80305BC28A /* Bolts-dummy.m */; }; - B1C7B0AA9E3B2A03A251EE453FA0DD35 /* PFTextButton.h in Headers */ = {isa = PBXBuildFile; fileRef = B2726742F4F01872C36F74F3A273125E /* PFTextButton.h */; }; - B35B52D2F3848F1D23A4734E8BA8CD25 /* PFObjectEstimatedData.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FAB614DE9EA103FF9C22D630ECA7C8A /* PFObjectEstimatedData.m */; }; - B43AAF16FE9A853D23B3997FED1D67C3 /* PFHTTPURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = F3FC1F5573A43949438409A8D53778C3 /* PFHTTPURLRequestConstructor.h */; }; + B0E5DE0D3B2D5CC0A3A6B3FC968243AC /* Parse-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 92A7C648E6A455643E14ED492A6A73B7 /* Parse-dummy.m */; }; + B0EFFD49BF3349A52B092D43AC0E64EA /* PFRESTFileCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = C8DD85BA4B5FA2130F3376B7CF1B1123 /* PFRESTFileCommand.m */; }; + B1DAFACF4D7BA100FBE0E7AC4BF8C30D /* PFMutableFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E2ECD41B391B0815DB0B7B35093D62A /* PFMutableFileState.m */; }; + B2435F3696589184913ABB75AC28ECFB /* PFSessionUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A4D8E589CE7C2025AEDF394F08CB1D0 /* PFSessionUtilities.m */; }; + B2EF8A765545176DA7DBAB499D76792D /* PFImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EFB0CB4177A8795A80AB630F8DFA865 /* PFImageCache.m */; }; + B302AD3DEB783D579E68D9EAEDA80A3E /* PFConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1016A8D2452E56419C6CE81CC7EC4F6B /* PFConfig_Private.h */; }; + B33BF4E7E93D06229509ED543EF7A12B /* PFSessionController.m in Sources */ = {isa = PBXBuildFile; fileRef = C0625D4FC52B190467EDBD198B7A70E0 /* PFSessionController.m */; }; + B41F4C9FC1081ABDB143808A92AE32BD /* PFPushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CD79AE4112C859207DA0A0196FABC894 /* PFPushManager.m */; }; + B4A6D750F7CA184EA98FAAC97A15A564 /* PFDismissButton.m in Sources */ = {isa = PBXBuildFile; fileRef = A6480F5708187FF764D171B4114704BA /* PFDismissButton.m */; }; + B4E74E490B784B925DCBE190392E5FBE /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E506E997BA37804E78B12743B103213 /* SystemConfiguration.framework */; }; + B504ABB7F23033B831D46063F203CBD4 /* PFObjectUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 7686BD3230BCC010ECF764A9A6BC1BFC /* PFObjectUtilities.m */; }; + B5565F2420D2A67A457EFB8F2988A093 /* PFPushState.h in Headers */ = {isa = PBXBuildFile; fileRef = 7938AFA7D01492ACDB7E2C6D7BC6AA59 /* PFPushState.h */; }; + B55863F85E48961D1263CDEDEC58E0A4 /* PFConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 52BAFCE08A44FBFB2F6EC59A3F1D9D79 /* PFConfigController.m */; }; B5B86F0561840C9F3408D9A3CE3BADD0 /* POPDecayAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = B0CE575CDDE0B1795BB8B88E0B49ACA0 /* POPDecayAnimationInternal.h */; }; - B613283A3EA71849002D5B8A87D39CD8 /* PFSQLiteDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C9F6E5345A39FC5550216E4F65A976B0 /* PFSQLiteDatabase_Private.h */; }; - B68778AB3A22AE8EEC182188399F709F /* PFPropertyInfo_Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = AC7C43830B8D324B7BDFBFD2376A6F01 /* PFPropertyInfo_Runtime.m */; }; + B5E7C8C2A582E9A5CB1484D5A2BF68EC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + B6D19506A168E6F30AB64BF058C00ABE /* PFURLSessionJSONDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5611410C73A9B4211DC397D46762270F /* PFURLSessionJSONDataTaskDelegate.m */; }; B6DA545595D3CE47BC8F81E673889B4B /* UnitBezier.h in Headers */ = {isa = PBXBuildFile; fileRef = 96015F1C746803D9318614B277F71BCB /* UnitBezier.h */; }; - B88C872B4DC8DBF56B6C9AF592D0A1CE /* PFUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = A72EE5253DC8D7B55D95796E6F4F6DD3 /* PFUserController.h */; }; - B92A4315EE32C56D189C572C94666714 /* PFSQLiteDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = EED19F37D13868499C43F13264741ADA /* PFSQLiteDatabase.m */; }; - B93D433EE1E23B2A4114703E47EE6F7A /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F447819CD0C3DF808D6946A6364F969 /* PFEncoder.h */; }; - B975E56752236DD4E997D0291C621AC0 /* PFQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = B9680BBDD9701CD4FEFECC8FBFF038F0 /* PFQuery.h */; }; + B74B8A474F9F85D1A6C7E007AFF29BAC /* PFURLSessionJSONDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DE6932550272A874DBBD021837FF6C56 /* PFURLSessionJSONDataTaskDelegate.h */; }; + B8BD806AE0EB03821AF1DAD9F15EF7EF /* PFFieldOperationDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = B86BF1E7407A2BDBFF2DE2E9884D4D33 /* PFFieldOperationDecoder.m */; }; + B94E52553492E39DBF51B961735A29F2 /* PFObjectSubclassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 87BE28AC7E09136A862805B3C7FD7EE7 /* PFObjectSubclassInfo.m */; }; + BA32DACB87D15C93F3966B67F5F07CA5 /* PFObjectLocalIdStore.m in Sources */ = {isa = PBXBuildFile; fileRef = F17D7D11766EAE6CAE75AED56352B4B5 /* PFObjectLocalIdStore.m */; }; BA9989C7128E968BA7D20CFEB392AE9D /* POPBasicAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 212068113F29FA47D17730ED388F8706 /* POPBasicAnimation.h */; }; - BAB4F191AD2790A60EF82E7261BEA3D9 /* PFQueryUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 89E660FBA2FA907C548F83F17BA9CF56 /* PFQueryUtilities.h */; }; - BB111D0ED255D3DC41C59A5EBFAA3660 /* PFApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = B5076516C4CA52DBE232087A86EF876A /* PFApplication.h */; }; - BC32FB211EB444652B6799002CA68C02 /* PFCommandRunningConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 05953FCDA42C0E7323C7F9B5AB886535 /* PFCommandRunningConstants.m */; }; + BB487D5F7B293574D245A094788DAA51 /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = F4DC2010100067AE78C7D4E02E604C0F /* BFTaskCompletionSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + BBD6F782E31784A8733DC849576B1F82 /* PFNullability.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CA9BAD9E5F012F5B45FB24FEED6CB57 /* PFNullability.h */; }; + BC80CDA7730EEC5147C205C4DC3A7208 /* PFDismissButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 183252EB3F3025A5B9AA601E65243596 /* PFDismissButton.h */; }; + BD31FF38FA208D334B6A62BD7A547617 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 34CA1F0C3EF627E402B7E3044CEBF30C /* PFEncoder.m */; }; BD6626643DD9C3A12AB86F9361EC89DB /* POPAnimatorPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0476012CEBFEB22B5F0926994E6AEEE3 /* POPAnimatorPrivate.h */; }; - BD9F08D593AA75F289F00EE82458F3F9 /* PFBase64Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = E6B87160188F7023D2B49F9B91DBAB94 /* PFBase64Encoder.h */; }; - BE22EB1A8780D81AABB9D2CD0CEA8E18 /* PFCoreDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 2713B9DB4119C31C77089DFEF6EE5B0E /* PFCoreDataProvider.h */; }; + BE0F283AE4BA09AA4D986E51CAC4CE01 /* PFUIAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F8244F3675730196C1B33EA7D16570F /* PFUIAlertView.m */; }; BE267A18590772AAA04953604BC7B310 /* POPAnimationExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = C1B6A53BFD919966B87CD6FBFD89CE1B /* POPAnimationExtras.h */; }; - BE4F6803EAFE5A8C677FC5FE6FA8C4EF /* PFProductTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = BDF771A5145C765EE70F40CEBF7C3075 /* PFProductTableViewController.h */; }; - BF2D3113EF4F55028D7C0B93420D341F /* PFSession.m in Sources */ = {isa = PBXBuildFile; fileRef = EEC0387E8F35C7BADBD1B4D6A482702D /* PFSession.m */; }; - C03EBBEAFE95FD7E24990703FD68B77F /* PFProductTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3662B43E3AABF39CEFE44FA79A74BB70 /* PFProductTableViewController.m */; }; - C1D1A848BEBCD76FE7DEAC09CD97E421 /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = C074D541BD181F718CABF5FB5728F620 /* UIButton+AFNetworking.m */; }; - C244270D3D5EA67A2B254B493FC1E918 /* PFProduct.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E40D034FA34D8F3FB9563D4D5DE2705 /* PFProduct.h */; }; - C26DFE0E4BEAE15D72A60EEF9AB2119F /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = F1CD895FE6B420EB0729480BD79BE4E3 /* AFURLRequestSerialization.m */; }; - C2807FECCEA754DD6E77EAF01CD585C9 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A055D518CCF1B206751FCEC2DE32A701 /* AFURLSessionManager.m */; }; - C2AA7D8CD8800BA5C772B03344DCDC37 /* PFObjectUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 590E38452847AE815D9FF8AD36B38F82 /* PFObjectUtilities.m */; }; - C3538059D8FE0662CEE3DE41F3732317 /* PFAnonymousAuthenticationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EDD8E08548221489BFE965864FB3566 /* PFAnonymousAuthenticationProvider.m */; }; - C48FB5CC8A114D5BBFA5B5C6D2C6B7CD /* PFAnalytics_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B17307D8D5E9068BF81147ED3B8E9B3 /* PFAnalytics_Private.h */; }; - C4FA14E2FF9F8A9254BFFCDF71E56DCD /* PFLogInView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1045C6BD9178A7E123E2001F4061D8EF /* PFLogInView.m */; }; - C5EFDF7F763E623AFD30780B1982869A /* PFResources.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F8D3DC3F913BF4E10E3FDEBC2B57B62 /* PFResources.m */; }; - C5FA827AFA2784D7FB156DBAFD92012E /* PFCommandRunning.h in Headers */ = {isa = PBXBuildFile; fileRef = BCF178329E80A7C9788F12D35E84DE11 /* PFCommandRunning.h */; }; - C6BF85B2D68FF8596833EF3EF1BD50FD /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = D43B8CFF328D2BE6C9755924B181CF2F /* UIActivityIndicatorView+AFNetworking.h */; }; - C6D7800441271BE5C55F573916AA3EF5 /* PFCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = F1B7F591E729212EB6BF33EF88BA1981 /* PFCollectionViewCell.h */; }; - C6DAC0A70B2D4465FE543E1030E497E5 /* PFKeyValueCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 00513F8B5C023D9B6A67A40068570F19 /* PFKeyValueCache.h */; }; - C6F4896A69483CD338E2C278DB82D2BD /* PFFileController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2FD4E699963B718746F80595602968BA /* PFFileController.m */; }; - C6FAED6F757456167037A450C730376C /* PFURLSessionDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 3841F19677B4987758E47C8053644CD1 /* PFURLSessionDataTaskDelegate.m */; }; - C7E834F143C71B5C4194641E056B1BDC /* PFPurchaseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = DA89BE341EEC7242A78FEDA064807901 /* PFPurchaseTableViewCell.m */; }; - C7FC18B8A3E8B3CB9F135C9A31A5453F /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DB47428B78601AEE33C5C5D52E2D994 /* PFUser.m */; }; - C8C216A6FB717E67F1D6A90342AA8F77 /* PFPinningEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = AD21854D02782DB6A5EB737BB86B1861 /* PFPinningEventuallyQueue.m */; }; - C9A2FFE39ABD912BB7835CC83FDC9332 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; - C9C11463ADF18ACBC73F8B748202928D /* PFPrimaryButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F8A7EECD6F3077A3B0FC86D271300A6 /* PFPrimaryButton.h */; }; - C9D17B038AAFEAC1050C417F57B02FF6 /* PFTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = D6974501F00D5E601A051C644A12DD71 /* PFTableViewCell.h */; }; - C9F67D469F5419E62C593ABA7DEB7197 /* PFConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 68500105927A08A48A3DA8C59A9B2E12 /* PFConstants.m */; }; - CA324992089BB916C0BEC4C99E3FF138 /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 58B5D2F2CD84279F74BE531861A83308 /* UIKit+AFNetworking.h */; }; - CB29E081C9F6BF7054D06FC63D3953F2 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED8D97DDDCF9842413073AA979D81CD2 /* QuartzCore.framework */; }; - CB41F2C692487CE5EA9C680B4C3CF354 /* PFPinningEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D3B7834060709F0758DAC799C640461 /* PFPinningEventuallyQueue.h */; }; - CB7DC9EDB7454CF34FB6251AB98972B6 /* PFWeakValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ECBBFC9244A3F50EA402F166DEB6DCA /* PFWeakValue.m */; }; - CB8894ACF0D1C6DF4BFDC392C293F25E /* PFAnonymousUtils_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C2A808722282E883FC6468CC1082F40D /* PFAnonymousUtils_Private.h */; }; - CC2AA775E69BED51AA50FA0982F06DB7 /* PFHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B440A60956319D37497AA73807B5A30 /* PFHash.m */; }; - CCDBD66664BB0CA36EBE89388868E078 /* PFImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A595D297E140ECE32592BFEFC293B9A /* PFImage.m */; }; - CD005BD069DE3A3806BBE81F6B4A4F20 /* PFAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 35F2BD9CCE69BA4DEBCD6F1FA72E072A /* PFAnalytics.h */; }; - CD1A2408C77C3419D1D374BDD5A858B0 /* PFProductsRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 75302811ECF5EDC235B0DB8B86291C2B /* PFProductsRequestHandler.m */; }; - CDC08305C998377AA557005E01DA48F2 /* PFBase64Encoder.m in Sources */ = {isa = PBXBuildFile; fileRef = CDB5EF0EC43B47E829CDC47DBC09A531 /* PFBase64Encoder.m */; }; - CE8ED072C6640F4DC793DE5F3CE674A1 /* PFAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = A543A68D1F635C787AFF440419B704A2 /* PFAlertView.h */; }; - D08B147823BE4AD36715360307952DEA /* PFHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C2055953D9AE502AA512CC756C8E07B8 /* PFHTTPRequest.h */; }; - D0C0E6DF830E9771B4A9ACA48BD1C2FA /* PFActivityIndicatorTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 161C522EE324169DC559AED510116C63 /* PFActivityIndicatorTableViewCell.m */; }; - D18540CCAD8048FDB4C2A9918DB92A9F /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = D4C9535D0DCC9CEAF41CAB114CBAC573 /* BFTask.h */; }; - D18CC3FCF71873622CF5F327A568B8BE /* ContextMenu.iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 56B759F1D8C8CB47D727B586BB4AC069 /* ContextMenu.iOS-dummy.m */; }; - D1EF657035114EEF42F10196C800AAB0 /* PFACLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = AE63CC96E753C252BF25110D864F48EF /* PFACLPrivate.h */; }; - D24AD1C1A16875A09867EFDB66DD7A5C /* PFCommandResult.h in Headers */ = {isa = PBXBuildFile; fileRef = D497EB0E3C5055E7FFF959587818764C /* PFCommandResult.h */; }; - D33372B006CA340C5A4A54110B69427B /* PFMutableRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 70DB3EA0DDEFC1284BB14523B754EDA6 /* PFMutableRelationState.h */; }; - D404E2D7015A2B76AABE42C287FAD36F /* PFQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = 506FFF3B464AAC43A21AD8404EDB0408 /* PFQueryState.m */; }; - D414CFD05FE420603C064C7307D13611 /* PFPushUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 17DC80DA8AA3988FB60EAEFDA4C6CAC5 /* PFPushUtilities.h */; }; + C03B6A01F9693FC55FF12348C5EDA810 /* AFHTTPRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = F3D78DD22896564922F83F838094C463 /* AFHTTPRequestOperation.h */; }; + C06FBAC856D1405027F57659FB882DB8 /* PFFileState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 954F116380F604D2E6F3C72D655F9A1C /* PFFileState_Private.h */; }; + C07700E54DD63BDCE649BB4F8B523461 /* PFSignUpView.m in Sources */ = {isa = PBXBuildFile; fileRef = 117570BCB2B64BF12FB3548DD7D1C78E /* PFSignUpView.m */; }; + C10B95C0B57A98F56D3F1524F7AC2D8C /* PFInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D20C829D04DF206BF2DDA0611400595 /* PFInstallation.h */; }; + C1411ECB83FD53DD0040A588922AB805 /* PFURLConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CEA00B74A5BB23D6B7298AC58615DAF /* PFURLConstructor.h */; }; + C16B8238CB5CB2EFAC0AC72A59DA0745 /* ParseUI-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F9C919C6D00EE0E46CB72D8F20F028 /* ParseUI-dummy.m */; }; + C1EC3C48DE08A099CF8C4F4DB9AC92CD /* PFMutableObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = D8F85E50534D30E21F4AC22033441BCE /* PFMutableObjectState.h */; }; + C319866FC2BFC185C63625060AEB6758 /* NSDate+TimeAgo.m in Sources */ = {isa = PBXBuildFile; fileRef = 6058E699B02C72EAC3AB3CEEA1711C1A /* NSDate+TimeAgo.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C3336173FDE2C11323CC7BBB72800680 /* PFSessionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 13781F764EE53C3EC378710AAD2C9052 /* PFSessionController.h */; }; + C41BBD01DDDD1535DE11E2F56EC9E6A0 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 239E0F9D31C8A1EB39ECBBD49FCC766F /* UIKit.framework */; }; + C42F4ED763AEA8D576D24810EB5AA52E /* PFPaymentTransactionObserver_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BAD1F9D81611626BD9723EB565D74B20 /* PFPaymentTransactionObserver_Private.h */; }; + C42FB952F9695977A494C605CF1C1132 /* PFRelationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 223724E99B7299629D2B6C47FFE66863 /* PFRelationPrivate.h */; }; + C42FDE5AABBD17841F7CFC956D6E7721 /* PFObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 32CB9DB9B2B0FE0097C1D30814F022F6 /* PFObjectController.m */; }; + C47626B4889AB5DFD3D9AE947C8C7FF5 /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D027CB4166C718582F41DDA6A2F623B8 /* AFNetworking-dummy.m */; }; + C5D27D34901BE3C9980677DBF5B69240 /* PFRESTConfigCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BF2417542F921BCD429973E192716B3 /* PFRESTConfigCommand.m */; }; + C62482464A02F4FB45A1701739487245 /* PFQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = B47967310CDF1B079052F1414ADCDCE6 /* PFQuery.h */; }; + C652F5E48AE74A8B9E356E4F323427E6 /* UIView+YALConstraints.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A8C0E126FBEBC781FFD512AE7FA7A26 /* UIView+YALConstraints.m */; }; + C661CDC29377D25FD12AF1C6EC78765E /* PFActivityIndicatorTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = FAF0A7C8E00B5F02C45B0CEF47F942C1 /* PFActivityIndicatorTableViewCell.h */; }; + C6F27BC40629D35819C2047ADB591188 /* PFKeyValueCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 09A93A5DE9B28BD2227FECC2725024CD /* PFKeyValueCache.h */; }; + C757D9E7F4F9171A438DC13E207DB812 /* PFAnonymousUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = FAAF0C858F399B359B7921102F568FC2 /* PFAnonymousUtils.m */; }; + C84E4314110E7337590B06D306DB5B25 /* PFACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = DEF96384602363D9E140A3480CF1AE6C /* PFACLState.m */; }; + C8946905367D6E7BB5846DAC2CAC108E /* PFHTTPURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = BBC75424DFC187C0863492C5D31BA77F /* PFHTTPURLRequestConstructor.m */; }; + C91346F6C236EE3B02E0C342FFA059E2 /* PFSQLiteDatabaseResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 140FDABADED9C292E538052CCD0BAB7A /* PFSQLiteDatabaseResult.h */; }; + CA42CE81F0A69EC8D10A19934EDEE8D3 /* PFFieldOperationDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = C132AB5B9FFEB4B7F934CA87D3455638 /* PFFieldOperationDecoder.h */; }; + CA87995336A8322406EC05F986349142 /* PFMutableUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = E49D8072A840070C229A8656B766BCA1 /* PFMutableUserState.m */; }; + CAE4CB7CCC22FE3F30C22FD7682BD87A /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC796DCB4788FB840D9025949079A06A /* AudioToolbox.framework */; }; + CBB4C206A966186093A077A664B7824C /* PFCommandRunning.h in Headers */ = {isa = PBXBuildFile; fileRef = E103621ACC460E7923231496DC5F9936 /* PFCommandRunning.h */; }; + CBDFCB5B68DB0038CB04AD01B8455057 /* PFRESTObjectBatchCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = F04F99D02A881C18F8E1C650E83678B3 /* PFRESTObjectBatchCommand.m */; }; + CD904758CF2D6119A7FF646704BF56B2 /* PFEventuallyPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BC7DC696876D5B9270CA496AA95369D /* PFEventuallyPin.h */; }; + CDADBF0F1573954BC209870E70782321 /* PFObjectPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = D113D54E2E25899C9BA785E8FC922DF5 /* PFObjectPrivate.h */; }; + CF0550BF599655B84038FFDE8274BCB7 /* PFURLSessionUploadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 02610A49C3BA4693FCDE2B028475239F /* PFURLSessionUploadTaskDelegate.m */; }; + CFDB590E0BF74B75F68C5D8241D6F82E /* UIView+YALConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F32567375CC1003F038991B27DC4F7D /* UIView+YALConstraints.h */; }; + CFDE408C1C10A91D91334900C971D71E /* PFLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 76DBE339038C3A58AE9A8BE18D095653 /* PFLogger.h */; }; + CFE44660C56131187597352CE6F5B9B6 /* PFSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BEA2C76CCE4B451C48EDE5BAD5C2BAA /* PFSession.h */; }; + D00730CD391987D0FCDF0599CFFC860A /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = ED916D4870F140B98C95E04269FEBB71 /* BFTask.h */; }; + D07044DE1F5A17A37FCA2259D95CAFF5 /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = CBA01F49A1922ACA40EC02A9A5B8670B /* PFURLConstructor.m */; }; + D0F2F5FEB003B3434666B3492CBEB876 /* PFURLSessionDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F6981E02F3DA9E586AA3F8F9CA7146DE /* PFURLSessionDataTaskDelegate.m */; }; + D0F8C49DC9E28811DFA92FA22B130EF5 /* PFRESTObjectCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 708E4D0D5864F5670DB3C6D0BEA5D8F0 /* PFRESTObjectCommand.m */; }; + D1432034868E01DD64A199C1653F1B36 /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BCF6282172FC1EA47FCF672C1A24430 /* AFURLSessionManager.h */; }; + D2044BF601961041203CF24CDB475660 /* PFJSONSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 65B7927D74C0DA147DF9C272E77CCFCA /* PFJSONSerialization.h */; }; + D23475D5CE10743CDDAF1564B1336BC9 /* PFObjectConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 8553FA7441EFE9ACF82C08BECCBB8E9C /* PFObjectConstants.m */; }; + D3107A4D1EDC165B2B8F2684B36ED62B /* PFConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 9923A756C94863C50037B3D2BD78F2B3 /* PFConfig.h */; }; + D39B95816667281BBCEA8C9390AD655D /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 07A8832085085296F443AC47AB7BCBA8 /* UIActivityIndicatorView+AFNetworking.m */; }; + D3BC96940BBCCF03A94641B319CEAB4B /* PFReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = E2AD6BACBB024B2DB599C0AC72688BE5 /* PFReachability.h */; }; D4224969BAFBC6138FFC872CCC829FB9 /* POPDecayAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = B0F7BCEE9A871E1193D694931FA31E17 /* POPDecayAnimation.h */; }; - D4D98689D09FD3C38EA7A6092736446C /* PFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E16AA8270CAF5EA08D00D8A1D14F2059 /* PFNetworkActivityIndicatorManager.m */; }; - D4F8D5854AD4E10694B8543B01904E4A /* PFObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DD7435FB2C6E16C60951E238B329F43 /* PFObjectControlling.h */; }; + D42EB510EDB18466DD86524396A420B1 /* PFPushController.m in Sources */ = {isa = PBXBuildFile; fileRef = AA761E5A8CDC7B23E7D53C6F2B370465 /* PFPushController.m */; }; + D4EFA2931E80CB3C5BD7E35817D58908 /* PFMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B558C7F4022FCA686D637485AF3061 /* PFMulticastDelegate.m */; }; + D54CB41D898098EDAE5EADD635E21575 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3377FCED75EFA8411F46FCAB569CA0B /* QuartzCore.framework */; }; D5792E05DB34C9521294B06A622AE040 /* POPAnimationTracer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E88590D291A3C131FC32F9BC9A80038 /* POPAnimationTracer.h */; }; - D61130DAF8E0E1ECE22A93E52E1AF17D /* PFPurchase.m in Sources */ = {isa = PBXBuildFile; fileRef = DC073136FD3869B2BB9A9D30587BE1DD /* PFPurchase.m */; }; - D6B2773184F80196F49DF87870AD4FB5 /* UIAlertView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = C917E75AADCC6DB455A54504481914C6 /* UIAlertView+AFNetworking.h */; }; - D7AB6CC905033BE9701B6BE2D8B10474 /* PFActionButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C5F86DEE2CDAB301DCBD052E170C3DF /* PFActionButton.h */; }; + D5B98374F3CCC497AF1E8B7E6AB11A52 /* PFQueryPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 692C33871C1E489AFBA8DAE1C7667271 /* PFQueryPrivate.h */; }; + D6278731D179E6B80923FC1422D89BDE /* PFBase64Encoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B3F0C8633F889B5613FBFF328B46EBB /* PFBase64Encoder.m */; }; + D63BEEB5977D7C7BD7EBDDCCC5A0ECCF /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = CA85A35D3284525FAED1D82CC5689615 /* ParseModule.h */; }; + D682CA1A005BFC39F9845C8B816145FD /* PFPurchase.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C7D5F32F2625673AFDBCC82AA5EB437 /* PFPurchase.m */; }; + D6E5FBA71CBE86EF42CBA9D43768DBCB /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = AD19046439D557B46077E96FE583C11B /* UIWebView+AFNetworking.m */; }; + D7231B0F59D93398F9F3B38E390D7378 /* PFCommandCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C551CD0049A5489B24695592DE118BF /* PFCommandCache_Private.h */; }; + D756690B9C53ECA5483E820CF07DC6B3 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C8EFE6B301ADF72C83A3320D353C799 /* AFURLResponseSerialization.m */; }; + D7B1BB8BBE4B6D388D3D9E35C252ADCD /* PFSignUpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15869702686104107D02D14F642179ED /* PFSignUpViewController.m */; }; + D7E62D1CB62EA6194DC59B7BB5F62132 /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FABAEE52FE230F73852D3F182250143 /* PFURLSessionDataTaskDelegate_Private.h */; }; + D7FE300C0EF96054CBA152A8668B126F /* PFFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 90E81AA7E9A2C782FEA33022EA460137 /* PFFile.h */; }; D83868EA3920350C53488A4C4F9A5565 /* POPGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = 3155A15C877F794FB064A4A0CEEB2F13 /* POPGeometry.h */; }; - D8B21AB2A572F89802E2CAE754E11C1C /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CF33435C91D40E4A5913AAFD0EDE463 /* PFJSONSerialization.m */; }; - D9060FE6FF4B3F9BA85000AA5AB8B52F /* PFOfflineQueryLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 06A372A2F9877D7182971EB1783DA977 /* PFOfflineQueryLogic.m */; }; - D96A915CB19A7ACFC1FF38481113C4E5 /* PFLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 3191215D0811BF0108D28AC1F82B3739 /* PFLogger.m */; }; - D971E396F056FBA17C6CE0CF194FBE3E /* PFQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 843B775414C85A6B739A68A808587E0B /* PFQueryController.m */; }; - D99ED871F816595C6F2283257F5C95D5 /* AFHTTPRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = E6C8C116B56F8D1B7AB62768527EC072 /* AFHTTPRequestOperation.h */; }; - D9AA4A4142F44327165EBD0F2434C842 /* PFRESTAnalyticsCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = C41C99E60696D54F31E9D4B990F0B0B3 /* PFRESTAnalyticsCommand.h */; }; - D9D1261CE4BA4764455EBE65EE2047B4 /* PFTextButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 4415F3C02D8407018883CAFD17661FD9 /* PFTextButton.m */; }; - D9E62EB34600F4CA51ACE19BE7C65AF7 /* PFJSONSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = D96C8C02AE822A3F03B68FAA6D594497 /* PFJSONSerialization.h */; }; - DA0EC40E69DE3685E53603D2D6CD17A7 /* PFSQLiteDatabaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A7EEF110C12FC52BD3E497ADDEF6E48 /* PFSQLiteDatabaseController.m */; }; - DA46F604268312CA6BC6BA3CCB990411 /* PFLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 86CE1FC6E16C4981CCAB4D92ECBFB7B4 /* PFLogger.h */; }; - DA87B0B1CA41E9765DD17F295386E93C /* PFApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = CB6B147735D1F716FC2CE4332F65D798 /* PFApplication.m */; }; - DB25C2F1A23AE3183921A8D3DF4FE24D /* PFCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F0E3349A60D7826DA93B7B2959FCEB2D /* PFCollectionViewCell.m */; }; - DB2B7514E2C7903E4C564F9B4FB83D7C /* PFDateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF3C9636DEAF164594CC80C9C6F8A3F /* PFDateFormatter.m */; }; + D856BAABE6315065140B7FCB203559F6 /* PFSignUpViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = B920F18145A654521BE7EC602D2C657F /* PFSignUpViewController.h */; }; + D8B94C4D85B6AD35B1CD68E98EC33EA5 /* PFFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 47F9956B87220A668AABD09619F9134D /* PFFileManager.m */; }; + DA1EEA007804A54426FC3F44BFDE8545 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AE8117874FB6AE79F6EE0B2845297948 /* Security.framework */; }; + DA416E69B5F566C7B6285F3599959A6B /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 12EBCDDDF8E4B4D958FE97CE51641567 /* AFHTTPRequestOperation.m */; }; + DA5469F73B273CF5CACF7A4C2A44FCC5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + DA64918375AD615EC7A78C9C58F17A91 /* PFCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 735137870D3101BC005B5CEEA18BABAA /* PFCategoryLoader.h */; }; + DAB17550E0BC246D681E78F23490D13A /* PFAnonymousAuthenticationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = F4DDE0E81520E3201CF403C8DAA7ECCE /* PFAnonymousAuthenticationProvider.m */; }; + DB12689F3928F5E34AD2D6F0ACF8772C /* PFQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = E7CEB62B4EEA771ECDA804B34CBE5BEC /* PFQueryController.m */; }; + DB6F3337EA7DE8DEF4650048C3853D7E /* PFSQLiteDatabaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BA5BBB87243515C8EBB8BEDA18847EB /* PFSQLiteDatabaseController.m */; }; + DBB8D921CF3FDED4AE31757890536C9E /* ParseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 2296F3C4885080255F075E05DFB1B427 /* ParseManager.h */; }; DBEF60495B33D1BA4C7BA3C8E3A24968 /* POPSpringAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7371F16336283F2D8BB2A199CD4DDEF5 /* POPSpringAnimation.h */; }; - DD05DB01536F7157D9362BE8E8083066 /* PFPurchaseTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BECD483F69DE182010F84F44CFAB40C /* PFPurchaseTableViewCell.h */; }; - DD069B29E4B7FB44E2756BA625DB5B9F /* PFCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = DD82088840AAB58D0F5243C0230D17B8 /* PFCategoryLoader.m */; }; - DD49064B9FD7B01B1F3E9EDD681A391C /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = E23709D1E2B358163967F34AC4683834 /* BFCancellationToken.h */; }; - DDE7A25B6FDDE44FC58C17F5BF85C2D6 /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = B319964A3771774ECF35609A331A9AC6 /* BFCancellationTokenSource.h */; }; - DDEAAA61B6C55BA10412B3B27110F0D7 /* PFFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AF83C8DCC1E7EFC3B79460BFA1DE1C9 /* PFFile.m */; }; - DDFA6862FB1CE0BA4A61CFE7EF8E083C /* PFObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = E2B8566040F468B4AED32A8BCB27E12A /* PFObjectState.m */; }; - DE961F754007F9A7471D4CF344ABCE82 /* PFPushChannelsController.h in Headers */ = {isa = PBXBuildFile; fileRef = C5603815F5CC7760F94208FF90B5488C /* PFPushChannelsController.h */; }; - DECE9EC538AEE7DBFA4F88A31DC92AC8 /* PFObjectSubclassingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 573E7709FAFC9CAAA3DF68F8C7ECC087 /* PFObjectSubclassingController.h */; }; - DF24C56A224FE7ECAB1EDB1657EE6FB9 /* PFPropertyInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 2248EAD3CAEF6EBEDAA0AC7AC52C51DF /* PFPropertyInfo.h */; }; - DF8191415D0D1255212AE2013F862152 /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = A8C983DB75FAE0BEF68EC8FAD134A4A8 /* PFAssert.h */; }; - E03055FBB48E6B94D8AD1FF653005CA5 /* BFDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 90E284AD7A6A52AEEF7D84AD765A3548 /* BFDefines.h */; }; + DC9501C36EBB2076AE6E53428A202529 /* PFObjectSubclassingController.h in Headers */ = {isa = PBXBuildFile; fileRef = B56CBAD19A2CD9BFF20F3051B4627A81 /* PFObjectSubclassingController.h */; }; + DCA95DB4B5FB46F59B4E55132FFCA9A2 /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = AB191AAD1EBC1DBC7BBC4374B8D95BFC /* PFCommandRunning.m */; }; + DCFBBED4A111E4B8B5200A20170531DB /* PFActivityIndicatorTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 67F74EF0A3FD2F24484F0C6BE4568559 /* PFActivityIndicatorTableViewCell.m */; }; + DD35BE33FFFB276A6AC7EA95866CD3C7 /* PFThreadsafety.h in Headers */ = {isa = PBXBuildFile; fileRef = EF168B468FCAB59188891FE988236456 /* PFThreadsafety.h */; }; + DD6512FDED79E7B7D667FD4A311F9C0C /* PFImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 860A4029037698F6AEAA916D96F38BBE /* PFImageView.m */; }; + DD8F626A250F5AF7CE97772A498D4EAA /* PFRelation.m in Sources */ = {isa = PBXBuildFile; fileRef = 171DCB08FD0E59EC3625D614ACE2E02C /* PFRelation.m */; }; + DDFF4299248933BA9C039A2ACCC75892 /* PFACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = D352CEC5576C01E8BE60AEAD74D531CB /* PFACLState.h */; }; + DEA09E2016BA1749A09F6E3F88BC7E23 /* PFPushManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A3DD0EFB7526AAEF47D57854AEE0AE42 /* PFPushManager.h */; }; + DEF27825E32346CCAF4E647DFAE5BBDC /* PFSignUpView.h in Headers */ = {isa = PBXBuildFile; fileRef = 740953021D381F48143BF4B4EEE2CF5C /* PFSignUpView.h */; }; + DF32FFCE72256BB08A4A4A12AEDAA5F2 /* PFAnalyticsUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A2F5A0AF00712AB15F12282085DF694A /* PFAnalyticsUtilities.m */; }; + DFE6BCC9B3D124F054E0F5E4F7211E5D /* PFKeyValueCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 92C96A18ED4977ED36761B564703B7E1 /* PFKeyValueCache.m */; }; E03238690A5A21C9B8ADCC9737633061 /* POPAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8336CCF2280C58E6C367DF4EC0EBB7B3 /* POPAnimation.mm */; }; - E0FDA3418BDC08A45B8E4F8F6DE1A20C /* PFInstallationIdentifierStore.m in Sources */ = {isa = PBXBuildFile; fileRef = E74884D5A2FE748F09D5B9232A56C7CE /* PFInstallationIdentifierStore.m */; }; - E1D1C143E6692407376FB991936085DC /* PFActionButton.m in Sources */ = {isa = PBXBuildFile; fileRef = B2688E675D28E976EDC6B6AA84C41C84 /* PFActionButton.m */; }; - E23EAA43A1BBCD8353958BAF80880F44 /* PFFileStagingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 466D8E751494438DECF05B755061844C /* PFFileStagingController.h */; }; - E243E0679F630A2E3F9F4B7B24191D8D /* PFObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = F03D0C596469A502C868EB32FEE7D020 /* PFObjectController.h */; }; - E27F8532DB90E0766FA777C88379FA68 /* PFTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = CDF42DAF3471B27B84DD07F1A7E3391C /* PFTextField.m */; }; - E2C60F3460600725D4C2C17EDC0ECF18 /* PFConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = A57B413BD6BA1EA23004CBF88974B886 /* PFConfigController.m */; }; - E333B27781269607DD5B6237EDF09A12 /* PFUserConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = A8D02A717544E8E472DDB654462BA93B /* PFUserConstants.h */; }; - E37EEE527BAAFF772206A72DEF75F60B /* PFUserState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C8045DBF84B4C9FAE5F9493DEF7990E /* PFUserState_Private.h */; }; - E4F18F0BD37AC65F868864D1E55B7B60 /* PFNullability.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DC8B50782AEA44066CA5219CEC67A5F /* PFNullability.h */; }; - E4F65D360A870AE93E4A2CCD3D3491E3 /* PFActivityIndicatorCollectionReusableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E63A2D69F78652A010BB377EBB449C6 /* PFActivityIndicatorCollectionReusableView.m */; }; - E5866C6A6D58A011CCA749AA3EE87861 /* PFAnalyticsUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = C1D8402E147FF6607379D3B631C593FB /* PFAnalyticsUtilities.m */; }; - E5DAB0E03E10762C86ECD9FCC472761F /* PFObjectSubclassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 50FDC487ACDFDD8DDE2E916C1BC455FB /* PFObjectSubclassInfo.m */; }; - E5E316F403D65FF52D02A0665082C101 /* PFOfflineQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 99AC0E4FACC6E2558227DD51210B84EA /* PFOfflineQueryController.h */; }; - E651303757F3195255E0DEC635795BC2 /* PFRole.m in Sources */ = {isa = PBXBuildFile; fileRef = 9761E4B9A3217B85F0615BE7D41F1CB0 /* PFRole.m */; }; + E0D1C75E718584F8F35A4B1EB1F46301 /* PFFileController.h in Headers */ = {isa = PBXBuildFile; fileRef = 00B33AC4876AEAFDEEDC1C7231112392 /* PFFileController.h */; }; + E0D5EA36A6AE0140906FAE1C15C585C1 /* PFObjectUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB0126FD52EE9ACE8C5A159D6EACB56 /* PFObjectUtilities.h */; }; + E1069BC323098EA3B49FB18EC7EE121F /* PFQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = E9F3197A789221BFB75AB57FA08CB469 /* PFQueryState.m */; }; + E16A5B9C5EC0223F63490286BF82A3C1 /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C811BA81343657BD39DE6B0A9CCEDAE /* UIRefreshControl+AFNetworking.m */; }; + E18E0295BE5E5E62DAC3653B70C88F7C /* PFGeoPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 54DE34EB5CB8EA4B93274FC248FBE4E1 /* PFGeoPoint.m */; }; + E1AB90A9BD2BCBDF74A576481757DF55 /* PFACLState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EDEDB8FE40254A22854D3E43109A88F2 /* PFACLState_Private.h */; }; + E1BB2C03EEDB32A4A79B233BC6BAC80E /* PFSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C46B17139F251CBB4B6F1A5BC13FF31 /* PFSession_Private.h */; }; + E26F10B81F88F3C1FC275D39775F8504 /* PFLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 78DAFF8E8BC51BAA61944940D146B13D /* PFLocationManager.m */; }; + E2A58A3EDBD530411F1BA949C5D55133 /* PFProductTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5ED1962F30E3190EA8A3C72A2A1D0122 /* PFProductTableViewController.m */; }; + E2D9B58ECD04DBBEE365F05AF6DEFE3A /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C7A0327639CC312E92E3CC82BA386AB /* PFAssert.h */; }; + E2F69D44CE50C4D737FF9B14183EC438 /* PFEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 822ABF9BEDB469FDEA0376462E065B92 /* PFEventuallyQueue.m */; }; + E307685646D7E5CD6D9094720405F595 /* PFMutableACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = A6130721BBB130E46530627B2D84D660 /* PFMutableACLState.h */; }; + E38281353BA2647FD46FBB122EB89D0E /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = D9A6AF9360C12CA1241B412833DCBA5B /* PFObjectFileCodingLogic.h */; }; + E5443378D4565A922FFFDAA1538FE831 /* PFPropertyInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FFB9A965D43043523BBFB5852F98398 /* PFPropertyInfo_Private.h */; }; + E56B8B77A63214F481AC2DC58A3138F0 /* YALContextMenuTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = DD7CDF7009567C9D6394B695AF816E37 /* YALContextMenuTableView.m */; }; E66A972C821119D091B99E54200F7FC0 /* POPAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 94815AA3EE3CBA04CEE85515701AD534 /* POPAnimator.h */; }; - E70727B793EBD607F1BE486B664CE33D /* PFObjectController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C16B1F4CA93F9A1D3CD11DFF0FE20F8D /* PFObjectController_Private.h */; }; - E72770739EA867C89DE740B977BE5C70 /* PFRESTSessionCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BF00A7674A2E0DCC20BFA18BCD89098 /* PFRESTSessionCommand.m */; }; - E7E9BAE2DCA65E7ABC83BE790E92E20E /* PFRESTObjectCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = AEEB033EF7B91BE4441AF7756D696170 /* PFRESTObjectCommand.h */; }; - E84B6B0C1564161E1DE83392CD28082A /* PFSessionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 470D6445B0D70D789438D349CC071D71 /* PFSessionController.m */; }; - E85D137DF70E4DCCFE461CCA6C3FA618 /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = FDE3D8A4479D0EA4BAFB41AD9CF6FF64 /* Bolts.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - E865E91B85761327812436CFD0EE21FE /* Parse-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F369CDC4FF93740544F25823CC584B90 /* Parse-dummy.m */; }; - E87B6C4AD10233A8EF5093E215BE7A4C /* PFUserAuthenticationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D9FF040FF41C3E677D9AE345094667B /* PFUserAuthenticationDelegate.h */; }; - E8BC741F9C816AB82DA07FF26AABEFE6 /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = AA922A41DD3C8A6F91E02EF0F731F0AB /* UIProgressView+AFNetworking.h */; }; - E99A53E0D4AD3D044F2A724C8906C655 /* PFConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 860AA407C8EE7F2BE1FF80F5F2C2A67C /* PFConfig_Private.h */; }; - E9C8E5867435024A65D9E929D85D2371 /* PFImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = A5BBD08523DDF7DFF2711114FC722A5E /* PFImageView.h */; }; - EA8A963881602AE0082051485B05AC32 /* PFMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = BF2B0A2A499B1873CEA684566E8B5487 /* PFMulticastDelegate.m */; }; - EB003F3813D731CCCC4EDE62A21258ED /* PFCommandCache.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF064AE7675931E4027B1B48FAC0E0E /* PFCommandCache.h */; }; - EB8DB296BB4DA32D527234A3DEE5F061 /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F3F5E33F74D6853C5320405E72A25A99 /* AFNetworkActivityIndicatorManager.m */; }; + E70CDA474BE7D60A1BFC1C8FC67E6E0F /* PFFileDataStream.m in Sources */ = {isa = PBXBuildFile; fileRef = DDE8CA03E44D77EEEB65DF10666691F0 /* PFFileDataStream.m */; }; + E7302DAE889CEE0FC264D8DB543A1550 /* PFMutableFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = A895901B4938323EF02B5D3624AFFAAB /* PFMutableFileState.h */; }; + E78D417CFF735A27772EA3DA77708CFA /* PFRect.h in Headers */ = {isa = PBXBuildFile; fileRef = 40B5E642FA3FEEDE08618DD723D07E89 /* PFRect.h */; }; + E8090707C0F2BA7C2E2F177A329C20AA /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 9147E975FAC6708B063DF2A2B676385C /* BFExecutor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + E8E993E598C72676B8A14B079B54F4CB /* PFSessionUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 78D6CD6C5264B7ADB33043C833FC82D3 /* PFSessionUtilities.h */; }; + E8F3A44DC96750EBBE56CCFA3430F2FF /* PFOfflineObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = E48C34CD5ED6562AF2C4DD6BBC5EF535 /* PFOfflineObjectController.m */; }; + E90A4B7E814D0A252613AC20A287916F /* PFFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A0E5A4854788886ABD909549C5D11BA /* PFFileState.m */; }; + E9188A3B39680D3BADBBA2EFA8864890 /* PFPush.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E8A207A2946C0BB45CFFFCDDDF262C0 /* PFPush.m */; }; + E969732177DDD64FE4A450AF72B47DEE /* PFObjectEstimatedData.h in Headers */ = {isa = PBXBuildFile; fileRef = D2D2B345A8F9F89101865ADDD108B736 /* PFObjectEstimatedData.h */; }; + EA06F60931B43E6A29AC69870A648984 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */; }; + EB0F4E84CD9FED813C2A0BB5A87D92D6 /* PFApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 08F54AFDA8569C430EF8A3EF68AD806D /* PFApplication.h */; }; + EB8972CF2264606E68719BD0A56136E0 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E2FDC150221DD19D4C300EB8CCE568E /* AFHTTPSessionManager.m */; }; EB965B246F7206AE338A7DF882400A0E /* POPVector.h in Headers */ = {isa = PBXBuildFile; fileRef = D5CE48778301C24CD288B08DDA441605 /* POPVector.h */; }; - EBC4E1A2A578C68150812DF664F3CD2C /* PFSessionUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 747ED87BDA0CFC263BA40D355C825B04 /* PFSessionUtilities.m */; }; - EBDA959314C42ACA8FF53848015B383D /* PFMutableUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = B84E7ADA66D7676BCB6F6E7FF2FD89EB /* PFMutableUserState.h */; }; - EBF38A4299D038884C58103080EAA89A /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = B8678F4D5E8E1A277EAFCB398356B491 /* UIProgressView+AFNetworking.m */; }; - EC352BDDF7551229C44577334C79BF3D /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AED3FD61E1EF7915955E1D7600608EB /* AFNetworking.h */; }; - EC754433ED47C6B48A8CE9F4CB37E14B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CF2B2B9DD2ED593C69A3425ABF50CEA /* Security.framework */; }; - ECCDF1B41916BF0EAAA0A8CEB0F54B5B /* PFMultiProcessFileLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 732EEF0236374C25C56BB5C469D842CB /* PFMultiProcessFileLock.h */; }; - ED04F6FB01031FD159F530193AE75C79 /* PFACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = C61F7888A611C849888C8333EB005699 /* PFACLState.h */; }; + EC82ACC74DBAB7C722F639C717886261 /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 70C5FC542FD1979DABEBBF67C4BF62A6 /* UIRefreshControl+AFNetworking.h */; }; + ECAE3B699F8E1E7F8AECBAB835652611 /* PFCurrentInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ACCB6B9273FFBB25B369C4E6B70F40F /* PFCurrentInstallationController.h */; }; ED0BF4FE2052871A5C209B796BA9D91E /* POPAnimator.mm in Sources */ = {isa = PBXBuildFile; fileRef = ECC48BF18D3BD01C21B65648709A45D6 /* POPAnimator.mm */; }; - ED255D7B9F7F8ED67832D921061E8922 /* PFMutableFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C4B6DD741681BE627832D2F02A6A9B /* PFMutableFileState.h */; }; ED3821443DA3268139C3CE29A592C03C /* POPAction.h in Headers */ = {isa = PBXBuildFile; fileRef = F3A985A006B0CCD0116D8FC53C4D1834 /* POPAction.h */; }; - ED75CE5EE2F7C992A5186614070AEC5D /* PFDefaultACLController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A5DE351A0BF7F1BFDD329A0BA815E81 /* PFDefaultACLController.h */; }; - EDEEAA33E39E017A4C68ED263C84AE22 /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DBC85FB02CFE6EE23007AB1EE43B774 /* PFQueryController.h */; }; - EE649D37D119E85D26C3A56AF9481AC9 /* PFURLSessionJSONDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = EF879D6FEC35876A57F1E379EA8F1BEA /* PFURLSessionJSONDataTaskDelegate.m */; }; - EE9ABF7DB56F4A6D9F4969A3CAA035DC /* PFFileDataStream.m in Sources */ = {isa = PBXBuildFile; fileRef = AAC3249989EA908FBA78700563472204 /* PFFileDataStream.m */; }; - EF01EE384D79A1068581524113443FFF /* PFInstallationIdentifierStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 7055666DC363C604BD87260B48EA2D42 /* PFInstallationIdentifierStore.h */; }; - F0BF7C159497C345EFC2279414A9602B /* PFTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 8896894278B01270F7BDA51E345AEE3A /* PFTaskQueue.m */; }; + ED605FEBDAADBEC8552006F045B01705 /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E00153F1487EA845DC2CA6D776CCBFC /* PFDecoder.m */; }; + EE33929B47BED97A6E07BD14C5C353B1 /* PFImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 66F798D8776090E919C1D6DE00DA5856 /* PFImageCache.h */; }; + EE9DDB408EAE238210C991FD79E3CF49 /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A0AC8B57627C291845EE2958D0F30F8A /* PFGeoPointPrivate.h */; }; + EF2B28E778788EEA7CBA0599E01D122A /* PFPushChannelsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 14EA4683E9E8CBE7CDA50AE6E94C3D75 /* PFPushChannelsController.m */; }; + EF3B10427BCAE74AB3064DE5CF4A8B8B /* PFFileStagingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E581829116421485B93F442A7B52B1E /* PFFileStagingController.h */; }; + F0535F9C552F8920D70881646F57C647 /* PFCommandResult.h in Headers */ = {isa = PBXBuildFile; fileRef = E9BFB88263F6AC941D8AEACDCA5BF2BA /* PFCommandResult.h */; }; + F070A31B3506E7B75B7F3B76E77A3C6B /* PFColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A9E5978470D11A0B2189DC537877983 /* PFColor.h */; }; + F0CC4BA2B268305829D4D684804954CF /* PFCurrentInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = F0D26272E2D206ED59FEA3953DA60BD9 /* PFCurrentInstallationController.m */; }; F1869B0A07F843009A3268A12F2F96CF /* POPBasicAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F59C51782AE555897A5B92D6B3CECD1 /* POPBasicAnimationInternal.h */; }; - F1EB5D28E0347730C01E1C9F101A167C /* PFInstallationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = F846ACF033FD69EF28381C488F0B8AA0 /* PFInstallationConstants.h */; }; - F22042889D8469B686198BE4C3C967DE /* PFRESTFileCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 86B7508FF3B989FEF4B30FE544B32B91 /* PFRESTFileCommand.h */; }; - F23C5CA36BBCCEDC450C59ABD9167FF1 /* PFPropertyInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = A631F9A0F687BDDBC873BA5813B8D674 /* PFPropertyInfo.m */; }; - F29600110489E45471884162604FD700 /* PFCommandCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 66EBD08EBD02C88CCDFE2505E222DAD4 /* PFCommandCache_Private.h */; }; - F2C4F6DEE6564743D319F05B2AD6AF6D /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B54B045A5C8DC9D0510BE5BE3FE0A1C /* AFSecurityPolicy.h */; }; - F327003FE3AD1D094C218F976BE1F431 /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = D9E009FDFD4D025A77485806D951F056 /* UIRefreshControl+AFNetworking.m */; }; + F18B4C7BAA5CF8439201B55685ED71C3 /* PFUserPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1781A4ED4F8E1D8A7DCFA8B8B40DE8D2 /* PFUserPrivate.h */; }; + F1B93F72C4ADB9504C27AEBF396016F9 /* ContextMenu.iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A353ED9AF6AD59C42FB55270ACB2B23E /* ContextMenu.iOS-dummy.m */; }; + F2B68903E0189C4FECF6CE848CC4BB7D /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = D04EB33EA81B58280CA75C26B353CC2E /* AFSecurityPolicy.h */; }; + F30293A1105E2FE7867F326CEA330117 /* PFTextButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EAD9DB6468A7A40A36253E8E13E4D15 /* PFTextButton.h */; }; + F310216C789BCB7555C1DCBE58D977F4 /* PFFile_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BD1F1D739696559ABE05CEB48AD2751C /* PFFile_Private.h */; }; F353B70A061E08623279B54744E15DA7 /* POPAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = ED596D85957A49EC6092EC8EC38FCE49 /* POPAnimationInternal.h */; }; + F36ADC9AF8CA401C3620F12B6EFA3041 /* PFUserAuthenticationController.h in Headers */ = {isa = PBXBuildFile; fileRef = FB84E1DE622B80AAFC4C5D8680FBA9EE /* PFUserAuthenticationController.h */; }; + F37556CD73CEFBD739FD6BD654B22A63 /* PFUIAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = D11E630B16ABE653A770F783B46F066E /* PFUIAlertView.h */; }; F388B7C3B4B0325048D4B5E4C1BAF904 /* POPAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 14938EB08280063D294781C3164C8332 /* POPAnimation.h */; }; F3A5D609595883FAB0550B75A0237C58 /* POPMath.mm in Sources */ = {isa = PBXBuildFile; fileRef = A19FD133843D5FCF16B8AF3B4E165515 /* POPMath.mm */; }; - F42F528AAFB4431133A3D12ECF1D97D6 /* PFAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F6C88082787B2C81249E9AC5C14B411 /* PFAlertView.m */; }; - F4CB32331A652F9BEC5790C7BD83488F /* PFQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CBECE1F342D08DEA6C849D4CA23FF5C /* PFQuery.m */; }; - F4D38EE812AF575E7C62AAC6A8E52540 /* PFPushState.h in Headers */ = {isa = PBXBuildFile; fileRef = EBA5F64F36074059AACC0B7DACE6B378 /* PFPushState.h */; }; + F41B06B8F17355F24BB2F03B2788468E /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AF37B6F9885062F0FD4C6504523B46A /* PFInternalUtils.h */; }; + F467776F8908391482CDB6FE6CBF8C00 /* PFAsyncTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B6C978DA502A9F639630B7DB4F0F7B5 /* PFAsyncTaskQueue.h */; }; + F482317F4FB2A4D5D4129CA17E0FF055 /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 23DED3FB98457B6B3E433FF76593240A /* UIButton+AFNetworking.h */; }; + F4AF18FC97592C76315797F668C8B667 /* PFFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 810D122E23D13A40420ED3D1D258EF4F /* PFFileState.h */; }; F50CFC840B1B486D290EF5656C3AB5A4 /* TransformationMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 35574BADA6CDEA944F089CBC021F01AA /* TransformationMatrix.cpp */; }; - F50F059F7518D8F68B09F674C1D81F1B /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 698035C4932D84777E5EC71DFC658ECE /* BFTaskCompletionSource.h */; }; - F5271A92421103FAA7B66901BDADE562 /* PFRESTAnalyticsCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C41DBC222643AB47C9976935B1047D3 /* PFRESTAnalyticsCommand.m */; }; - F5F8F81CDA532191D7DCCB020E9CDCD0 /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC1022DF912D32448DE24E2472BD2EB /* PFGeoPointPrivate.h */; }; - F666FF748D959A512841D717829362CD /* PFURLSessionCommandRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = 8258E5C6287CE05ECE4DBE3A83508112 /* PFURLSessionCommandRunner.m */; }; - F68AF78D542CBBAB1379651762D77220 /* PFFile_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 948A8D3F019700F19148AF5DEF0F0F49 /* PFFile_Private.h */; }; - F8797AD57E1C9E3248CEE5F1BC867DB7 /* PFLogInViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F22D85829359CAC7406869D232CB96B /* PFLogInViewController.m */; }; - F8CE939475DB06A79F0B42858F50A175 /* Parse.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C385EA5C279B003F8C215ED4163B769 /* Parse.m */; }; + F532A3547ACA5A1E6ACF51CF0C45BCD4 /* PFFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = FC1BAB4081E46DF3947E5BD5AD48981C /* PFFileManager.h */; }; + F7334108209FC3957908A3CBE83A6E69 /* PFURLSessionCommandRunner_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E75B68DDAB9B54F1AAC191A9A508E1FE /* PFURLSessionCommandRunner_Private.h */; }; + F8B5E88B8E18BB2704BF1F6CAD8CDD96 /* PFCloudCodeController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BDFB93D7E4BF1E99BD2B1CCB15FD0AA /* PFCloudCodeController.h */; }; + F9115E44CDAC4261540BABEA70F85A8C /* PFUserFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = C8E059CFE74839A889EB31D430030D25 /* PFUserFileCodingLogic.m */; }; F9627C89FA11AC0378E77DF8EF1535FF /* POPAnimationTracer.mm in Sources */ = {isa = PBXBuildFile; fileRef = C1E27C3CBB149C1873F6CDC55D998CE2 /* POPAnimationTracer.mm */; }; - F9D22128094FED62CC689A0DF077D742 /* PFProduct+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 35D8F9A9CC00721366C770FD9E85A417 /* PFProduct+Private.h */; }; - FA062724256AD7BD74E749525E96F593 /* PFMutableUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = B1214E8947EB72FF3291E4600C97D58F /* PFMutableUserState.m */; }; - FA4008023586470174D049C68D7BCA84 /* PFOfflineStore.m in Sources */ = {isa = PBXBuildFile; fileRef = A421A4107F66CC195D55371620880A47 /* PFOfflineStore.m */; }; - FB00925A23D5B4AE5B41E33B5FBD055E /* PFDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 11C9D5CD5B0EBCA52D876E7FBB58F435 /* PFDateFormatter.h */; }; - FB2C988761B71F5EC05ABAA20A10DD3E /* PFFieldOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = EB19AF401F51648EFC25CAA336AF77DA /* PFFieldOperation.m */; }; - FBB54F353706B4761D4C2BBCDE0D3DEC /* PFCloudCodeController.h in Headers */ = {isa = PBXBuildFile; fileRef = 22672E7A70EC530B20C26F2C140E29B2 /* PFCloudCodeController.h */; }; - FC7AD9CD6427562338E316F7D22C6CF5 /* PFAnonymousAuthenticationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D391B4B9A0CB9FD3E2A0BF899903190 /* PFAnonymousAuthenticationProvider.h */; }; - FC81649F3508121AFDC3B469E14C4BE7 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 08A7DDB501049FA74B5AC43628EF32BA /* BFCancellationTokenRegistration.h */; }; - FCE81758F981E89A3B88ED7485A67EA2 /* PFSignUpView.h in Headers */ = {isa = PBXBuildFile; fileRef = 63491A7EC224003EF49DC8F88BC3EB18 /* PFSignUpView.h */; }; - FF7441F3F46A777068C3E1ED9DB6988C /* PFPaymentTransactionObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 043843700614E5CF0208EF9E180A96B5 /* PFPaymentTransactionObserver.h */; }; - FFACAEE5617305A95FDB73B9E3765B25 /* PFRESTUserCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BB229E81638C48D768ACFA74D97E7E4 /* PFRESTUserCommand.h */; }; + FA40D0D4ECB7B8F6222F2A1B5A8DE174 /* PFPurchaseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B22BE2D73FB935E2CABC9BA2529BED84 /* PFPurchaseTableViewCell.m */; }; + FA7488D7D4C8FD74BEF4CC5A60236EFA /* PFQueryState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72773DBC556A73785E0C5F5893457AD6 /* PFQueryState_Private.h */; }; + FAE4A1C0783B76BCACCAF45355E7004B /* PFUserState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 73E1315856FE518B878BF38603277B14 /* PFUserState_Private.h */; }; + FAF4B2FC5EAADBD306166D5438EA7E9B /* PFRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = BBF93E03EBDFC9B6835A33DC14AC39C1 /* PFRelationState.m */; }; + FC324432506E45E0BBE78933D2A74DAF /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C74596AC3E38A52329D1EEE95C27275B /* CoreGraphics.framework */; }; + FD0141DD8823DB67DAF9FB1F1BF9D270 /* PFUserConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 29F2E94A249BC4D49B0C06742741681E /* PFUserConstants.m */; }; + FD104C9FD5A8BC95487C1342CCE4CB39 /* PFCurrentConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BEC52371750B2AD4FE542FA081B707C /* PFCurrentConfigController.m */; }; + FE36F8EB1D79441F0D7EA68204554170 /* PFCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = F2AE1005EC45AEE127A8650F06BCBAEF /* PFCategoryLoader.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 14463E173C08B7B666D09C49F5839A75 /* PBXContainerItemProxy */ = { + 01EE5DCB1462FBD1541FA743AA751BAA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = FF04CF73CFE56992B404E8BC19C3A4FE; - remoteInfo = ContextMenu.iOS; + remoteGlobalIDString = 25F506D3BB111CA2D4ECE0F118AAF4B7; + remoteInfo = Bolts; }; - 4A62D857EC92BBBC0306F5AFC1E44540 /* PBXContainerItemProxy */ = { + 0B36135B4E600C75EB507D327C3976C4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = C8E26D4496BE6E05436ED5442A4A35C6; - remoteInfo = Parse; + remoteGlobalIDString = 073C8BE92E23FA40E8EE37802B1F8CEA; + remoteInfo = "NSDate+TimeAgo"; }; - 52518CE5417A0014201101497C436F9B /* PBXContainerItemProxy */ = { + 22E7DA377798C6E865E71878C454D174 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = C8E26D4496BE6E05436ED5442A4A35C6; - remoteInfo = Parse; + remoteGlobalIDString = 209AB0B77C675E32A81B4BE355428147; + remoteInfo = ParseUI; }; - 990436F1E7C13E75A6DA3B6C9195DA14 /* PBXContainerItemProxy */ = { + 3ED04283DB3363CE0EBBD3C49530F396 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 5E7ECA46011128F44607D2526FF28BBF; + remoteGlobalIDString = 25F506D3BB111CA2D4ECE0F118AAF4B7; remoteInfo = Bolts; }; - 99961E400193CE18389BE0F5180AB7F3 /* PBXContainerItemProxy */ = { + 400CEE44CEDCD245DC7013FD327A097F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 9CEF3252DBE731B89BE08B2C8D33D157; - remoteInfo = AFNetworking; + remoteGlobalIDString = 57D25E61D9826A76A43A896C44CABA8F; + remoteInfo = Parse; }; - B2E5C7781C3E2087AEA03EF41C4EE7C0 /* PBXContainerItemProxy */ = { + 456902F0A3ADAF46CCAC2A5F2F106A75 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 5E7ECA46011128F44607D2526FF28BBF; - remoteInfo = Bolts; + remoteGlobalIDString = F8D4751B066F22CC161A18B7D25B2723; + remoteInfo = ContextMenu.iOS; }; - EE12126F62BD1EEFAD3A114F7165C35B /* PBXContainerItemProxy */ = { + 73DF76E1E667D07E7ABDC9BD285D67BA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 47C800E42623009B7192B025B3DD25A1; - remoteInfo = pop; + remoteGlobalIDString = 3A014738CBA3413E897D1CCDA8931473; + remoteInfo = AFNetworking; }; - F35397A038CF6004F7D006C52C3042DF /* PBXContainerItemProxy */ = { + 988B43739681471C5692D9EFC38ECAFC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 5E7ECA46011128F44607D2526FF28BBF; - remoteInfo = Bolts; + remoteGlobalIDString = 57D25E61D9826A76A43A896C44CABA8F; + remoteInfo = Parse; }; - FABF293F3CD2F3C97F0EA10E96BAC2A6 /* PBXContainerItemProxy */ = { + F2455E9FC9C7D1721D11E79CEBFFA346 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 30B6C683408FE258B28EE47F87D10FD5; - remoteInfo = ParseUI; + remoteGlobalIDString = 47C800E42623009B7192B025B3DD25A1; + remoteInfo = pop; + }; + F639CB996F0FD9140EB909441607B15D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 25F506D3BB111CA2D4ECE0F118AAF4B7; + remoteInfo = Bolts; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 0024E7BD94CF93AC26F575C1C8DDC77A /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+AFNetworking.h"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.h"; sourceTree = ""; }; - 00513F8B5C023D9B6A67A40068570F19 /* PFKeyValueCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache.h; sourceTree = ""; }; - 005D86B592A4BA2B3547363ECF47A177 /* ParseModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseModule.h; path = Parse/Internal/ParseModule.h; sourceTree = ""; }; - 0133FEB4B03FB6F08C08C7B83AE52ED3 /* PFPushController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushController.h; path = Parse/Internal/Push/Controller/PFPushController.h; sourceTree = ""; }; - 01AF5FDFA32CA58C779C40A40EA3D2AE /* PFObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObject.m; path = Parse/PFObject.m; sourceTree = ""; }; - 01D98518A65B6A9D496DAB55A24824E7 /* Parse_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse_Private.h; path = Parse/Internal/Parse_Private.h; sourceTree = ""; }; - 02410F25AB700FDE2DC3E940E8F641D3 /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; - 024EDBAD6DEA89979FB7FA48DF6FD2E1 /* PFTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTaskQueue.h; path = Parse/Internal/PFTaskQueue.h; sourceTree = ""; }; - 024F688442FF537808B2B1F23FD1E740 /* PFACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACLState.m; path = Parse/Internal/ACL/State/PFACLState.m; sourceTree = ""; }; - 031E9E0D8D5FFE61CA69EBB13DFF940B /* PFAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalytics.m; path = Parse/PFAnalytics.m; sourceTree = ""; }; - 035328EF0D2E9A7C6F011700B6486C4B /* PFCurrentObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentObjectControlling.h; path = Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h; sourceTree = ""; }; - 041725EB6A05B1CEEF10F1C68D2B4E1C /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; - 043843700614E5CF0208EF9E180A96B5 /* PFPaymentTransactionObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h; sourceTree = ""; }; + 0032DD75A0637521BCE408B488991A32 /* PFConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfig.m; path = Parse/PFConfig.m; sourceTree = ""; }; + 00B33AC4876AEAFDEEDC1C7231112392 /* PFFileController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileController.h; path = Parse/Internal/File/Controller/PFFileController.h; sourceTree = ""; }; + 0206D7017431D1DE214E1E55DD1CA00E /* libBolts.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBolts.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 023AAD7A7FDD5D6EBCB0275E3053B48D /* PFMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMacros.h; path = Parse/Internal/PFMacros.h; sourceTree = ""; }; + 02610A49C3BA4693FCDE2B028475239F /* PFURLSessionUploadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionUploadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m; sourceTree = ""; }; 0476012CEBFEB22B5F0926994E6AEEE3 /* POPAnimatorPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimatorPrivate.h; path = pop/POPAnimatorPrivate.h; sourceTree = ""; }; - 053C8DC2F31DA21D6E7CC1C8B47B7E7D /* PFMutableQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableQueryState.h; path = Parse/Internal/Query/State/PFMutableQueryState.h; sourceTree = ""; }; - 05953FCDA42C0E7323C7F9B5AB886535 /* PFCommandRunningConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunningConstants.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m; sourceTree = ""; }; - 05E01E38D82A4797E14C9CE9355C3F23 /* PFMultiProcessFileLockController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLockController.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m; sourceTree = ""; }; - 060DB4FD225A0238252576BE01EEF381 /* PFSQLiteStatement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteStatement.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h; sourceTree = ""; }; - 062A3C8CA2C198CBC3F4184AE0DE01AB /* PFObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectController.m; path = Parse/Internal/Object/Controller/PFObjectController.m; sourceTree = ""; }; - 0691E15B84DC22B58B24454A662AF44F /* PFInstallationIdentifierStore_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore_Private.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h; sourceTree = ""; }; - 06A372A2F9877D7182971EB1783DA977 /* PFOfflineQueryLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryLogic.m; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m; sourceTree = ""; }; - 0706E15293B087CF3BC18798F10E6F37 /* PFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkActivityIndicatorManager.h; path = Parse/PFNetworkActivityIndicatorManager.h; sourceTree = ""; }; - 07DD486CA0D467F3E4B0FA3AFB78B671 /* ContextMenu.iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ContextMenu.iOS.xcconfig; sourceTree = ""; }; - 0835AF0C620B80377CFA5F0070B6F2A8 /* PFUserConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserConstants.m; path = Parse/Internal/User/Constants/PFUserConstants.m; sourceTree = ""; }; - 089FEED162CE81FFDB1F2F722CC53B19 /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperation.m; path = AFNetworking/AFHTTPRequestOperation.m; sourceTree = ""; }; - 08A7DDB501049FA74B5AC43628EF32BA /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; - 08DF92C3B8A5DF531A37052EE2D36BA2 /* PFMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMacros.h; path = Parse/Internal/PFMacros.h; sourceTree = ""; }; - 09293FA9DE2829C01FD1BC90B6481E0C /* ParseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseManager.m; path = Parse/Internal/ParseManager.m; sourceTree = ""; }; - 0A0A214D3D8D8170F77B8631024D14E1 /* PFEncoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEncoder.m; path = Parse/Internal/PFEncoder.m; sourceTree = ""; }; - 0A0D3F66C0F548DA826E162FB412704A /* PFPurchaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseController.m; path = Parse/Internal/Purchase/Controller/PFPurchaseController.m; sourceTree = ""; }; + 070CF2EA5C953FFF03ED8BE7AF055AC6 /* ParseUIConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseUIConstants.h; path = ParseUI/Other/ParseUIConstants.h; sourceTree = ""; }; + 07A8832085085296F443AC47AB7BCBA8 /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; + 07D2FC4FC605245EE247C94509830D89 /* PFCoreDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreDataProvider.h; path = Parse/Internal/PFCoreDataProvider.h; sourceTree = ""; }; + 08B7EF901C70552DA9B5A8971B03F15C /* PFInstallationIdentifierStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h; sourceTree = ""; }; + 08F54AFDA8569C430EF8A3EF68AD806D /* PFApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFApplication.h; path = Parse/Internal/PFApplication.h; sourceTree = ""; }; + 08FFC0DB86B62264394E0B3A89EFC73B /* PFRESTAnalyticsCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTAnalyticsCommand.h; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.h; sourceTree = ""; }; + 0931837BCF1288592148F7CEC9744874 /* ContextMenu.iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ContextMenu.iOS.xcconfig; sourceTree = ""; }; + 09A93A5DE9B28BD2227FECC2725024CD /* PFKeyValueCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache.h; sourceTree = ""; }; + 0A6F91C7FC8222580298FA066453DF05 /* PFProduct.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProduct.m; path = Parse/PFProduct.m; sourceTree = ""; }; 0A9ED47A0EA56543BEB2F83DFD6122C8 /* POPCGUtils.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPCGUtils.mm; path = pop/POPCGUtils.mm; sourceTree = ""; }; - 0AED3FD61E1EF7915955E1D7600608EB /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; - 0B440A60956319D37497AA73807B5A30 /* PFHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHash.m; path = Parse/Internal/PFHash.m; sourceTree = ""; }; - 0BE6A6845F3586D10E5408C9FB591328 /* PFMutableFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableFileState.m; path = Parse/Internal/File/State/PFMutableFileState.m; sourceTree = ""; }; - 0C0458126D7C16A449337164DDC84D21 /* PFQueryCollectionViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryCollectionViewController.h; path = ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h; sourceTree = ""; }; - 0D9C3B80FDA98CB3B3C80A70441B019C /* PFUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState.h; path = Parse/Internal/User/State/PFUserState.h; sourceTree = ""; }; - 0E987F26F4B8054102531C64F176F982 /* PFRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelationState.m; path = Parse/Internal/Relation/State/PFRelationState.m; sourceTree = ""; }; - 1039D733B7402E51965445AD5B5DCB98 /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; - 1045C6BD9178A7E123E2001F4061D8EF /* PFLogInView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogInView.m; path = ParseUI/Classes/LogInViewController/PFLogInView.m; sourceTree = ""; }; - 10926AEF9594A323E624C27E8F4B643A /* PFUIAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUIAlertView.h; path = ParseUI/Classes/Internal/Extensions/PFUIAlertView.h; sourceTree = ""; }; - 110EB87EF49E8CF2B18E11692AC1E903 /* PFDefaultACLController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDefaultACLController.m; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m; sourceTree = ""; }; - 11C9D5CD5B0EBCA52D876E7FBB58F435 /* PFDateFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDateFormatter.h; path = Parse/Internal/PFDateFormatter.h; sourceTree = ""; }; - 1315EBF14A0D75438D37ED2C3FA79516 /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+AFNetworking.m"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.m"; sourceTree = ""; }; + 0B0CDCA8A92F1EC1489226670FED17FE /* PFRelationState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState_Private.h; path = Parse/Internal/Relation/State/PFRelationState_Private.h; sourceTree = ""; }; + 0B4D3B911045DA61853DA813F8B7C6CE /* PFPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPin.h; path = Parse/Internal/LocalDataStore/Pin/PFPin.h; sourceTree = ""; }; + 0C7A0327639CC312E92E3CC82BA386AB /* PFAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAssert.h; path = Parse/Internal/PFAssert.h; sourceTree = ""; }; + 0D15AEEA95A5148DE70DCB783883AB56 /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; + 0EAD9DB6468A7A40A36253E8E13E4D15 /* PFTextButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTextButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h; sourceTree = ""; }; + 0EFFCB2BC3F85DF43E91E7C9E6029CDF /* PFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFNetworkActivityIndicatorManager.m; path = Parse/PFNetworkActivityIndicatorManager.m; sourceTree = ""; }; + 0FABAEE52FE230F73852D3F182250143 /* PFURLSessionDataTaskDelegate_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h; sourceTree = ""; }; + 0FB0126FD52EE9ACE8C5A159D6EACB56 /* PFObjectUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectUtilities.h; path = Parse/Internal/Object/Utilities/PFObjectUtilities.h; sourceTree = ""; }; + 1016A8D2452E56419C6CE81CC7EC4F6B /* PFConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig_Private.h; path = Parse/Internal/Config/PFConfig_Private.h; sourceTree = ""; }; + 1052CA766BC6302276F38952879BA31A /* PFInstallationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationPrivate.h; path = Parse/Internal/Installation/PFInstallationPrivate.h; sourceTree = ""; }; + 117570BCB2B64BF12FB3548DD7D1C78E /* PFSignUpView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSignUpView.m; path = ParseUI/Classes/SignUpViewController/PFSignUpView.m; sourceTree = ""; }; + 12E82331DB385318C884CD8058143C44 /* PFFileStagingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileStagingController.m; path = Parse/Internal/File/Controller/PFFileStagingController.m; sourceTree = ""; }; + 12EBCDDDF8E4B4D958FE97CE51641567 /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperation.m; path = AFNetworking/AFHTTPRequestOperation.m; sourceTree = ""; }; + 13241A3B21123E4FE094C366B51D599E /* PFRESTObjectCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectCommand.h; path = Parse/Internal/Commands/PFRESTObjectCommand.h; sourceTree = ""; }; 134BDC30251FB7A5465C17F603FCAC5F /* POPPropertyAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPPropertyAnimationInternal.h; path = pop/POPPropertyAnimationInternal.h; sourceTree = ""; }; + 13781F764EE53C3EC378710AAD2C9052 /* PFSessionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionController.h; path = Parse/Internal/Session/Controller/PFSessionController.h; sourceTree = ""; }; + 13912AB24A552973624C801917EE93B3 /* PFThreadsafety.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFThreadsafety.m; path = Parse/Internal/ThreadSafety/PFThreadsafety.m; sourceTree = ""; }; + 1392560741BCEA56A371C0C1A00E3E32 /* PFUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserController.m; path = Parse/Internal/User/Controller/PFUserController.m; sourceTree = ""; }; + 140FDABADED9C292E538052CCD0BAB7A /* PFSQLiteDatabaseResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseResult.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h; sourceTree = ""; }; 14938EB08280063D294781C3164C8332 /* POPAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimation.h; path = pop/POPAnimation.h; sourceTree = ""; }; - 159D21FB91947A9EBAD9A6D923A0E579 /* PFRESTPushCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTPushCommand.m; path = Parse/Internal/Commands/PFRESTPushCommand.m; sourceTree = ""; }; + 14C49D948543AA2D8DFEF76353D739C1 /* ParseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseManager.m; path = Parse/Internal/ParseManager.m; sourceTree = ""; }; + 14E52B238D5014738AB002A4CDD6A30A /* PFRole.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRole.m; path = Parse/PFRole.m; sourceTree = ""; }; + 14EA4683E9E8CBE7CDA50AE6E94C3D75 /* PFPushChannelsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushChannelsController.m; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.m; sourceTree = ""; }; + 14EB05FA8924F1F6C9625510D00B06D5 /* PFQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQuery.m; path = Parse/PFQuery.m; sourceTree = ""; }; + 15869702686104107D02D14F642179ED /* PFSignUpViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSignUpViewController.m; path = ParseUI/Classes/SignUpViewController/PFSignUpViewController.m; sourceTree = ""; }; 15A529C27057E4A57D259CBC6E6CE49C /* Pods-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-acknowledgements.markdown"; sourceTree = ""; }; - 15B3921F710AB762D4B6DCFC53018A70 /* PFRect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRect.h; path = ParseUI/Classes/Internal/Extensions/PFRect.h; sourceTree = ""; }; - 161C522EE324169DC559AED510116C63 /* PFActivityIndicatorTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActivityIndicatorTableViewCell.m; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.m; sourceTree = ""; }; - 16BA4C30B79BFCF3F4A3AE316FC70C8F /* PFInstallationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationConstants.m; path = Parse/Internal/Installation/Constants/PFInstallationConstants.m; sourceTree = ""; }; - 17A3A025CC5669EAB17537171EB530B4 /* PFDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDataProvider.h; path = Parse/Internal/PFDataProvider.h; sourceTree = ""; }; - 17A3AD5BCF18F3E0478C884A2B764C4B /* PFAsyncTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAsyncTaskQueue.h; path = Parse/Internal/PFAsyncTaskQueue.h; sourceTree = ""; }; - 17DC80DA8AA3988FB60EAEFDA4C6CAC5 /* PFPushUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushUtilities.h; path = Parse/Internal/Push/Utilites/PFPushUtilities.h; sourceTree = ""; }; - 187E6237B057376167C9530E9E3D2597 /* PFUserAuthenticationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserAuthenticationController.m; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m; sourceTree = ""; }; - 190972B3389C83F8279C6D8F35289902 /* PFCurrentUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentUserController.m; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.m; sourceTree = ""; }; - 1912D51690BFB2430D2FC6F89935CD27 /* Parse-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-prefix.pch"; sourceTree = ""; }; + 1652334F7FACB47B60509D457FCC9733 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = Parse/Resources/en.lproj; sourceTree = ""; }; + 16AEFED7962E0BF326C178758FAA59FB /* PFCurrentObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentObjectControlling.h; path = Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h; sourceTree = ""; }; + 171DCB08FD0E59EC3625D614ACE2E02C /* PFRelation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelation.m; path = Parse/PFRelation.m; sourceTree = ""; }; + 1781A4ED4F8E1D8A7DCFA8B8B40DE8D2 /* PFUserPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserPrivate.h; path = Parse/Internal/User/PFUserPrivate.h; sourceTree = ""; }; + 17C1B899764F56C1759EB14EAE39DA10 /* PFObjectState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState_Private.h; path = Parse/Internal/Object/State/PFObjectState_Private.h; sourceTree = ""; }; + 183252EB3F3025A5B9AA601E65243596 /* PFDismissButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDismissButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h; sourceTree = ""; }; + 187350C3511E85352C7852B0D3D8B1E2 /* ParseModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseModule.m; path = Parse/Internal/ParseModule.m; sourceTree = ""; }; + 19643E83602716D49DB56714C4014980 /* PFRESTSessionCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTSessionCommand.h; path = Parse/Internal/Commands/PFRESTSessionCommand.h; sourceTree = ""; }; 197635F0BFB93E63E82503F09B7AABBF /* POPLayerExtras.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPLayerExtras.mm; path = pop/POPLayerExtras.mm; sourceTree = ""; }; - 19A96C3911D00F07330D94949348F1EE /* PFRESTCloudCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCloudCommand.m; path = Parse/Internal/Commands/PFRESTCloudCommand.m; sourceTree = ""; }; - 1A2F0A20C55B0387272AD66520D13A5C /* PFDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDecoder.m; path = Parse/Internal/PFDecoder.m; sourceTree = ""; }; - 1A40A4CAE6145F41C05AA25BD5CA9BD9 /* PFSQLiteDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h; sourceTree = ""; }; - 1A782DEC3085443686EE99BF46207C32 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 1C41DBC222643AB47C9976935B1047D3 /* PFRESTAnalyticsCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTAnalyticsCommand.m; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.m; sourceTree = ""; }; - 1C55517F4B7361A3891B563478721DED /* PFErrorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFErrorUtilities.h; path = Parse/Internal/PFErrorUtilities.h; sourceTree = ""; }; - 1C97247E12ADC1F7516B907DB1083863 /* PFSignUpViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSignUpViewController.h; path = ParseUI/Classes/SignUpViewController/PFSignUpViewController.h; sourceTree = ""; }; - 1D505F6BC2E75E018CC37E152B154653 /* PFFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState.h; path = Parse/Internal/File/State/PFFileState.h; sourceTree = ""; }; - 1F447819CD0C3DF808D6946A6364F969 /* PFEncoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEncoder.h; path = Parse/Internal/PFEncoder.h; sourceTree = ""; }; + 1A91EEDE8C7A6B31C2A05FE382152430 /* BFTask+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Private.m"; path = "Parse/Internal/BFTask+Private.m"; sourceTree = ""; }; + 1A9E5978470D11A0B2189DC537877983 /* PFColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFColor.h; path = ParseUI/Classes/Internal/Extensions/PFColor.h; sourceTree = ""; }; + 1AC27D16447D4E34E9C9C3F32E5E3C92 /* PFDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDataProvider.h; path = Parse/Internal/PFDataProvider.h; sourceTree = ""; }; + 1AE6372AC3E2C579A54322AA014EFA61 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = ParseUI/Resources/Localization/en.lproj; sourceTree = ""; }; + 1AF37B6F9885062F0FD4C6504523B46A /* PFInternalUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInternalUtils.h; path = Parse/Internal/PFInternalUtils.h; sourceTree = ""; }; + 1B3F0C8633F889B5613FBFF328B46EBB /* PFBase64Encoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBase64Encoder.m; path = Parse/Internal/PFBase64Encoder.m; sourceTree = ""; }; + 1B836352DD006B82B8C8B18944F7A5F4 /* PFObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectState.m; path = Parse/Internal/Object/State/PFObjectState.m; sourceTree = ""; }; + 1B96C276DE7B41CDE5726F2371D90180 /* PFConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConstants.h; path = Parse/PFConstants.h; sourceTree = ""; }; + 1BFE915330494AB9449B0035C1A3FB20 /* PFObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController.h; path = Parse/Internal/Object/Controller/PFObjectController.h; sourceTree = ""; }; + 1C2F828710D03ADAB5A77385F42B2005 /* PFOperationSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOperationSet.h; path = Parse/Internal/Object/OperationSet/PFOperationSet.h; sourceTree = ""; }; + 1CEA00B74A5BB23D6B7298AC58615DAF /* PFURLConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLConstructor.h; path = Parse/Internal/HTTPRequest/PFURLConstructor.h; sourceTree = ""; }; + 1D03B9968185DC57D4AAC534C0871E1F /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; + 1E00153F1487EA845DC2CA6D776CCBFC /* PFDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDecoder.m; path = Parse/Internal/PFDecoder.m; sourceTree = ""; }; + 1F32567375CC1003F038991B27DC4F7D /* UIView+YALConstraints.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+YALConstraints.h"; path = "YALContextMenu/UIView+YALConstraints.h"; sourceTree = ""; }; + 1FF8B6CB88759DF1ED61C6FE79ED9EA1 /* PFCollectionViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCollectionViewCell.m; path = ParseUI/Classes/Cells/PFCollectionViewCell.m; sourceTree = ""; }; + 207158EF53AC0A892A53EB8AD174C145 /* PFBaseState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBaseState.h; path = Parse/Internal/PFBaseState.h; sourceTree = ""; }; + 207CFB10D01C51B2A7958CBF15E1D199 /* ContextMenu.iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ContextMenu.iOS-prefix.pch"; sourceTree = ""; }; + 20A9279DABB12A3A350F256E04B589EC /* PFAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAlertView.m; path = Parse/Internal/PFAlertView.m; sourceTree = ""; }; + 20E50E8A0708866EC29A54BC2773B687 /* PFMutableRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableRelationState.h; path = Parse/Internal/Relation/State/PFMutableRelationState.h; sourceTree = ""; }; 212068113F29FA47D17730ED388F8706 /* POPBasicAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPBasicAnimation.h; path = pop/POPBasicAnimation.h; sourceTree = ""; }; - 212C53C992FAFCD6E80C8674CA34B074 /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; - 218C17FDFAF32433D839F97FF17B2F62 /* PFRelation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelation.h; path = Parse/PFRelation.h; sourceTree = ""; }; - 2248EAD3CAEF6EBEDAA0AC7AC52C51DF /* PFPropertyInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo.h; sourceTree = ""; }; - 22672E7A70EC530B20C26F2C140E29B2 /* PFCloudCodeController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloudCodeController.h; path = Parse/Internal/CloudCode/PFCloudCodeController.h; sourceTree = ""; }; + 223724E99B7299629D2B6C47FFE66863 /* PFRelationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationPrivate.h; path = Parse/Internal/Relation/PFRelationPrivate.h; sourceTree = ""; }; + 2296F3C4885080255F075E05DFB1B427 /* ParseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseManager.h; path = Parse/Internal/ParseManager.h; sourceTree = ""; }; 22DC4C87D619EF0F28631B5560E82333 /* POPAnimationExtras.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationExtras.mm; path = pop/POPAnimationExtras.mm; sourceTree = ""; }; - 25C2F29D6B6FBDBAA33D8593E65EC348 /* PFAnonymousUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousUtils.m; path = Parse/PFAnonymousUtils.m; sourceTree = ""; }; - 26F7C6740719BEC436C7CD3912C491A4 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; - 270B41DE1EE1C3B5391246CDAED4C8BE /* PFURLSessionFileDownloadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionFileDownloadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h; sourceTree = ""; }; - 2713B9DB4119C31C77089DFEF6EE5B0E /* PFCoreDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreDataProvider.h; path = Parse/Internal/PFCoreDataProvider.h; sourceTree = ""; }; + 22F8D297F42217E19ECD9D2B11EE21C1 /* PFReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFReachability.m; path = Parse/Internal/PFReachability.m; sourceTree = ""; }; + 239E0F9D31C8A1EB39ECBBD49FCC766F /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 23DED3FB98457B6B3E433FF76593240A /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; + 246C782E571D46A59F4CE5DF4BBCF237 /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; + 247F390401ED8756F05F8590B2A4721F /* ParseUI-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ParseUI-Private.xcconfig"; sourceTree = ""; }; + 2655AF28A5BB760A9D8CF09E68E118A2 /* PFObjectFilePersistenceController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFilePersistenceController.m; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m; sourceTree = ""; }; 2726A20CBCFFB77F9972C445E8972099 /* POPPropertyAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPPropertyAnimation.mm; path = pop/POPPropertyAnimation.mm; sourceTree = ""; }; - 27C2859683043CE13C206444451CA55D /* PFRESTObjectBatchCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectBatchCommand.m; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.m; sourceTree = ""; }; - 28D60E52FD4E440EA2F1B080932410DE /* ParseModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseModule.m; path = Parse/Internal/ParseModule.m; sourceTree = ""; }; - 28F300166004C87461905D9822D4C136 /* PFUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserState.m; path = Parse/Internal/User/State/PFUserState.m; sourceTree = ""; }; - 2940BC6B2FD4089D74072136047C2FEE /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; - 29704F78778234595067B1E9C61399BE /* PFOperationSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOperationSet.m; path = Parse/Internal/Object/OperationSet/PFOperationSet.m; sourceTree = ""; }; - 29883E2F7FA2CA83E9313FBE44CEE849 /* PFOfflineQueryLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryLogic.h; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h; sourceTree = ""; }; - 2BA1448D29C364710AC0CCAC65063979 /* pop-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "pop-prefix.pch"; sourceTree = ""; }; - 2C343079DDD088139CD814C6470830F6 /* PFObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObject.h; path = Parse/PFObject.h; sourceTree = ""; }; + 273DD846A6C8B2FAA0D30EFD98074903 /* PFPrimaryButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPrimaryButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h; sourceTree = ""; }; + 274990949179381C67FCBC2FB6237E86 /* PFCommandResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandResult.m; path = Parse/Internal/PFCommandResult.m; sourceTree = ""; }; + 294D66B8B455C83AB82DB0D7AB77A825 /* PFWeakValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFWeakValue.m; path = Parse/Internal/PFWeakValue.m; sourceTree = ""; }; + 2965148A80ED4448DBFB85049DE369E1 /* PFObjectFileCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCoder.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.m; sourceTree = ""; }; + 29F2E94A249BC4D49B0C06742741681E /* PFUserConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserConstants.m; path = Parse/Internal/User/Constants/PFUserConstants.m; sourceTree = ""; }; + 2A3AEE130935E15C466214757E4A437C /* PFRESTConfigCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTConfigCommand.h; path = Parse/Internal/Commands/PFRESTConfigCommand.h; sourceTree = ""; }; + 2BA37293BA9D0C3170FA299BFB8066DD /* PFMultiProcessFileLock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLock.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m; sourceTree = ""; }; + 2BEC52371750B2AD4FE542FA081B707C /* PFCurrentConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentConfigController.m; path = Parse/Internal/Config/Controller/PFCurrentConfigController.m; sourceTree = ""; }; + 2D38FC40E07DE779D7B3A19F7FA831A2 /* PFMutableQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableQueryState.m; path = Parse/Internal/Query/State/PFMutableQueryState.m; sourceTree = ""; }; + 2D43A8730F06C62593574EC5D9F4B356 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; 2E056FF5C4EC38A55B45FB52F395D72E /* TransformationMatrix.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TransformationMatrix.h; path = pop/WebCore/TransformationMatrix.h; sourceTree = ""; }; - 2E0AAD20A6FEA44B0CFB6CF47B721809 /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperationManager.m; path = AFNetworking/AFHTTPRequestOperationManager.m; sourceTree = ""; }; + 2E2FDC150221DD19D4C300EB8CCE568E /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; + 2E7513C38F42866CBD8F891DC79A7E43 /* PFQueryUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryUtilities.h; path = Parse/Internal/Query/Utilities/PFQueryUtilities.h; sourceTree = ""; }; + 2E86BDAE4E45CBD0D23B0FD9D1F66AD9 /* NSDate+TimeAgo-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSDate+TimeAgo-prefix.pch"; sourceTree = ""; }; 2E88590D291A3C131FC32F9BC9A80038 /* POPAnimationTracer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationTracer.h; path = pop/POPAnimationTracer.h; sourceTree = ""; }; - 2ECBBFC9244A3F50EA402F166DEB6DCA /* PFWeakValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFWeakValue.m; path = Parse/Internal/PFWeakValue.m; sourceTree = ""; }; - 2F22D85829359CAC7406869D232CB96B /* PFLogInViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogInViewController.m; path = ParseUI/Classes/LogInViewController/PFLogInViewController.m; sourceTree = ""; }; - 2F4C5429E2494ED58C557A5F11CCC6AC /* PFLogInView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInView.h; path = ParseUI/Classes/LogInViewController/PFLogInView.h; sourceTree = ""; }; - 2F9ABD34BEBC96F253CE102411DABDED /* PFObjectFileCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCoder.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.h; sourceTree = ""; }; - 2FD4E699963B718746F80595602968BA /* PFFileController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileController.m; path = Parse/Internal/File/Controller/PFFileController.m; sourceTree = ""; }; - 2FEDA810326DCCCBD587DEF33586F24C /* PFURLSessionDataTaskDelegate_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h; sourceTree = ""; }; - 2FF4FE0BB509523AA3AB48C24B04D2AD /* PFInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallation.m; path = Parse/PFInstallation.m; sourceTree = ""; }; + 309E66A69E8B9D1EC8FECB8B484349CC /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; + 312681EB6896B7C2788765E18CA4BC4D /* PFUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUser.m; path = Parse/PFUser.m; sourceTree = ""; }; 313669CF0D1BF49C96C85FC593F4BC1D /* POPAnimatableProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimatableProperty.h; path = pop/POPAnimatableProperty.h; sourceTree = ""; }; - 314F14CB5AC1E3119F923E7D73FD2F55 /* PFFieldOperationDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperationDecoder.h; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.h; sourceTree = ""; }; 3155A15C877F794FB064A4A0CEEB2F13 /* POPGeometry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPGeometry.h; path = pop/POPGeometry.h; sourceTree = ""; }; - 3191215D0811BF0108D28AC1F82B3739 /* PFLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogger.m; path = Parse/Internal/PFLogger.m; sourceTree = ""; }; - 31EF40A5583C282323AF183A3C383CBE /* PFURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSession.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m; sourceTree = ""; }; - 31F9E89C104ACA3B7C08B33DB94FFED2 /* PFQueryTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryTableViewController.m; path = ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m; sourceTree = ""; }; - 331270F5C910E5D29DEFABA0DA889E54 /* PFRESTUserCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTUserCommand.m; path = Parse/Internal/Commands/PFRESTUserCommand.m; sourceTree = ""; }; - 33BB29F39122EC7F976E5232ED519B46 /* PFSignUpView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSignUpView.m; path = ParseUI/Classes/SignUpViewController/PFSignUpView.m; sourceTree = ""; }; - 348553BBE97419579F9F55AA50C5F99B /* BFTask+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Private.m"; path = "Parse/Internal/BFTask+Private.m"; sourceTree = ""; }; - 34E2D0613E3152D0F6D3B2C1F125895C /* PFThreadsafety.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFThreadsafety.h; path = Parse/Internal/ThreadSafety/PFThreadsafety.h; sourceTree = ""; }; + 317BA79E5F1AD8BF7315B4994BF8EA8E /* UIAlertView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAlertView+AFNetworking.h"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.h"; sourceTree = ""; }; + 318238BDCB2257E77EB2BDDBCA0452BD /* PFResources.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFResources.m; path = ParseUI/Generated/PFResources.m; sourceTree = ""; }; + 3265918C8EC595B914BC49318B924A5E /* PFInstallationIdentifierStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationIdentifierStore.m; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m; sourceTree = ""; }; + 32CB9DB9B2B0FE0097C1D30814F022F6 /* PFObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectController.m; path = Parse/Internal/Object/Controller/PFObjectController.m; sourceTree = ""; }; + 33960334DCC05CD75FC4AF6CD8BE3DDB /* PFProductsRequestHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductsRequestHandler.m; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m; sourceTree = ""; }; + 33C5AA662A1B31B9B74F6F6D2BA8EF89 /* PFMutableObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableObjectState.m; path = Parse/Internal/Object/State/PFMutableObjectState.m; sourceTree = ""; }; + 33DDB3AEDB2B43F3CD9A422BD0B36E24 /* PFRESTCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand.h; path = Parse/Internal/Commands/PFRESTCommand.h; sourceTree = ""; }; + 34CA1F0C3EF627E402B7E3044CEBF30C /* PFEncoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEncoder.m; path = Parse/Internal/PFEncoder.m; sourceTree = ""; }; + 3504D1B10CD69BAB4473A7C496756522 /* PFFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFile.m; path = Parse/PFFile.m; sourceTree = ""; }; 35574BADA6CDEA944F089CBC021F01AA /* TransformationMatrix.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TransformationMatrix.cpp; path = pop/WebCore/TransformationMatrix.cpp; sourceTree = ""; }; - 358076BF1FC2383D78542D2EFF4939ED /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; - 3585F7A481D939D1D1C3294775ACDBE7 /* PFPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPin.m; path = Parse/Internal/LocalDataStore/Pin/PFPin.m; sourceTree = ""; }; - 35D8F9A9CC00721366C770FD9E85A417 /* PFProduct+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFProduct+Private.h"; path = "Parse/Internal/Product/PFProduct+Private.h"; sourceTree = ""; }; - 35F2BD9CCE69BA4DEBCD6F1FA72E072A /* PFAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics.h; path = Parse/PFAnalytics.h; sourceTree = ""; }; - 35F8D658E839BECDFF6BB8B4BC6CCE2D /* PFRESTQueryCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTQueryCommand.h; path = Parse/Internal/Commands/PFRESTQueryCommand.h; sourceTree = ""; }; - 36204B280B4F34FB73981677EC64B941 /* PFSQLiteStatement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteStatement.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m; sourceTree = ""; }; - 365EAFBED43EBA1E76B6777D42421642 /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; - 3662B43E3AABF39CEFE44FA79A74BB70 /* PFProductTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductTableViewController.m; path = ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m; sourceTree = ""; }; - 37763F17F64B25496F9259C6C59F7CB8 /* YALContextMenuTableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YALContextMenuTableView.h; path = YALContextMenu/YALContextMenuTableView.h; sourceTree = ""; }; - 3827F868B3F08C9E6CA5CFEEE3C83EED /* YALContextMenuTableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YALContextMenuTableView.m; path = YALContextMenu/YALContextMenuTableView.m; sourceTree = ""; }; - 3841F19677B4987758E47C8053644CD1 /* PFURLSessionDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m; sourceTree = ""; }; - 3845B32677B589F5F7443E7D6E469D4A /* libParse.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libParse.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 378806E5D95B89B2F6914E0BDE025565 /* PFSQLiteDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h; sourceTree = ""; }; + 3877DF147287113642F6AD9C0DB0310F /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; 38C1E5A4A6882760CB349FCABD22A9DC /* POP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POP.h; path = pop/POP.h; sourceTree = ""; }; - 39673E55062D1B61E621B82E444AE6CA /* PFGeoPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFGeoPoint.m; path = Parse/PFGeoPoint.m; sourceTree = ""; }; - 39FFEDFCBEA2D381B7572D62222BF55D /* PFQueryUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryUtilities.m; path = Parse/Internal/Query/Utilities/PFQueryUtilities.m; sourceTree = ""; }; + 38EDFF435F14A19FF4C796101BD8596E /* pop-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "pop-prefix.pch"; sourceTree = ""; }; + 3A0E5A4854788886ABD909549C5D11BA /* PFFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileState.m; path = Parse/Internal/File/State/PFFileState.m; sourceTree = ""; }; 3A5F7AF86D19E519B94AD6D8CB98CC34 /* POPAnimationRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationRuntime.h; path = pop/POPAnimationRuntime.h; sourceTree = ""; }; - 3AF83C8DCC1E7EFC3B79460BFA1DE1C9 /* PFFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFile.m; path = Parse/PFFile.m; sourceTree = ""; }; - 3B19DBC177333992D2D0D2D98EB6BA58 /* PFReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFReachability.m; path = Parse/Internal/PFReachability.m; sourceTree = ""; }; - 3BB229E81638C48D768ACFA74D97E7E4 /* PFRESTUserCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTUserCommand.h; path = Parse/Internal/Commands/PFRESTUserCommand.h; sourceTree = ""; }; - 3C3D77BC909D77D1BFD9EB010608B1E4 /* PFACLState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState_Private.h; path = Parse/Internal/ACL/State/PFACLState_Private.h; sourceTree = ""; }; - 3C6EC3EAC5F58685494656DAB9912EA7 /* PFQueryPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryPrivate.h; path = Parse/Internal/Query/PFQueryPrivate.h; sourceTree = ""; }; - 3DBC85FB02CFE6EE23007AB1EE43B774 /* PFQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryController.h; path = Parse/Internal/Query/Controller/PFQueryController.h; sourceTree = ""; }; - 3E49F373A0C99D0BDC90B707820423BE /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; - 3F8A7EECD6F3077A3B0FC86D271300A6 /* PFPrimaryButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPrimaryButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h; sourceTree = ""; }; - 3F8F0DF089A8D938A0A83B044D743001 /* PFColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFColor.m; path = ParseUI/Classes/Internal/Extensions/PFColor.m; sourceTree = ""; }; - 3FC9896164A2A05D8D267241CD2C2615 /* PFPinningObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningObjectStore.h; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.h; sourceTree = ""; }; - 415E520ADA42019A24142D17486874BE /* PFDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDecoder.h; path = Parse/Internal/PFDecoder.h; sourceTree = ""; }; - 41E4EF38F3F42973C09F8820315F75C3 /* Bolts.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.xcconfig; sourceTree = ""; }; - 42416DC02ED2707B15870496281BE361 /* PFReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFReachability.h; path = Parse/Internal/PFReachability.h; sourceTree = ""; }; - 4415F3C02D8407018883CAFD17661FD9 /* PFTextButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTextButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFTextButton.m; sourceTree = ""; }; - 44E52571D995DF254E53AD007ED4859C /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; - 45637DE63711406B9BE1BECBB23B8EE0 /* PFObjectUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectUtilities.h; path = Parse/Internal/Object/Utilities/PFObjectUtilities.h; sourceTree = ""; }; - 466D8E751494438DECF05B755061844C /* PFFileStagingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileStagingController.h; path = Parse/Internal/File/Controller/PFFileStagingController.h; sourceTree = ""; }; - 470D6445B0D70D789438D349CC071D71 /* PFSessionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionController.m; path = Parse/Internal/Session/Controller/PFSessionController.m; sourceTree = ""; }; - 48D4D5780017286C543013DEDE63D651 /* PFPaymentTransactionObserver_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver_Private.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h; sourceTree = ""; }; - 4A3635CE479DD0FD03FB5589A75B62EC /* PFObjectFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCodingLogic.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h; sourceTree = ""; }; - 4A595D297E140ECE32592BFEFC293B9A /* PFImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImage.m; path = ParseUI/Classes/Internal/Extensions/PFImage.m; sourceTree = ""; }; - 4A7EEF110C12FC52BD3E497ADDEF6E48 /* PFSQLiteDatabaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseController.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m; sourceTree = ""; }; - 4B0FB893863BB0FE866F5AA02F5D0360 /* PFPaymentTransactionObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPaymentTransactionObserver.m; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m; sourceTree = ""; }; - 4B5B237502D9B0D2DDFB52EE72716703 /* PFURLSessionFileDownloadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionFileDownloadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m; sourceTree = ""; }; - 4CAA43C472F7F6152B3507ABDDE9AD44 /* PFTextField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTextField.h; path = ParseUI/Classes/Views/PFTextField.h; sourceTree = ""; }; + 3AC80D3003419DA756DF2880C6F36172 /* PFOperationSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOperationSet.m; path = Parse/Internal/Object/OperationSet/PFOperationSet.m; sourceTree = ""; }; + 3B52975B9237400086D156AC62CC60DA /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; + 3B99B90E05635CBE020DC50A0CAF2EED /* PFMutableACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableACLState.m; path = Parse/Internal/ACL/State/PFMutableACLState.m; sourceTree = ""; }; + 3BF2417542F921BCD429973E192716B3 /* PFRESTConfigCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTConfigCommand.m; path = Parse/Internal/Commands/PFRESTConfigCommand.m; sourceTree = ""; }; + 3D44DE0AD73A9BE3947B531BC59C3751 /* PFSQLiteStatement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteStatement.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m; sourceTree = ""; }; + 3DA0F2801954B02B932946F1720A5AFB /* PFURLSessionDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h; sourceTree = ""; }; + 3E08A968A93ACB9D1CAF92789B12C7C4 /* PFQueryCollectionViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryCollectionViewController.h; path = ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h; sourceTree = ""; }; + 3E2ECD41B391B0815DB0B7B35093D62A /* PFMutableFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableFileState.m; path = Parse/Internal/File/State/PFMutableFileState.m; sourceTree = ""; }; + 3EA417AE6CDB838C92E170472191D0DF /* PFApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFApplication.m; path = Parse/Internal/PFApplication.m; sourceTree = ""; }; + 3EE2B18DDC2877E30470FF74A6225727 /* PFMultiProcessFileLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLock.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h; sourceTree = ""; }; + 3EFB0CB4177A8795A80AB630F8DFA865 /* PFImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImageCache.m; path = ParseUI/Classes/Internal/PFImageCache.m; sourceTree = ""; }; + 3FD7A9CAF1212AD0BEA9C1F1FDEBB771 /* PFFieldOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperation.m; path = Parse/Internal/FieldOperation/PFFieldOperation.m; sourceTree = ""; }; + 40A31B4ABEDCF23954D29D3CAFDC68DF /* PFRESTCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCommand.m; path = Parse/Internal/Commands/PFRESTCommand.m; sourceTree = ""; }; + 40B5E642FA3FEEDE08618DD723D07E89 /* PFRect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRect.h; path = ParseUI/Classes/Internal/Extensions/PFRect.h; sourceTree = ""; }; + 41BFE21A3D5255A9FB6D1EB28C605BB5 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; + 41F19FCA7E4720B98AE2148E2383CC09 /* PFObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObject.h; path = Parse/PFObject.h; sourceTree = ""; }; + 4258A390F83ECD7E9252FDD8B27DAB0D /* PFInstallationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationConstants.m; path = Parse/Internal/Installation/Constants/PFInstallationConstants.m; sourceTree = ""; }; + 427BD07E883212F98FBE50FC1015EB6D /* PFActionButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActionButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m; sourceTree = ""; }; + 42D399495BBB064481EB941973B350C8 /* PFObjectFilePersistenceController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFilePersistenceController.h; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h; sourceTree = ""; }; + 43011F509A9CA36CCF1F6FE318A44835 /* PFAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalytics.m; path = Parse/PFAnalytics.m; sourceTree = ""; }; + 43DDE7B96E8490981651DF981ECC745F /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; + 43F9C919C6D00EE0E46CB72D8F20F028 /* ParseUI-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ParseUI-dummy.m"; sourceTree = ""; }; + 44A0FD2283337A0E2117AE23966080BA /* pop.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = pop.xcconfig; sourceTree = ""; }; + 44F063CA885EB78BD718E7940F7B0C76 /* NSDate+TimeAgo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSDate+TimeAgo.h"; sourceTree = ""; }; + 466BC7AD0617AE5013D7A29EB130696F /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; + 46BF8D16DF1543709222F3222BDC849E /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; + 47400368FF5156B023E93C3E82E16456 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + 47C62543F0DEA0A479039AB3514FD9CB /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLConnectionOperation.m; path = AFNetworking/AFURLConnectionOperation.m; sourceTree = ""; }; + 47F9956B87220A668AABD09619F9134D /* PFFileManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileManager.m; path = Parse/Internal/PFFileManager.m; sourceTree = ""; }; + 4874ECF650D964F2CDBF9F86115F5A44 /* PFQueryCollectionViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryCollectionViewController.m; path = ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m; sourceTree = ""; }; + 4A4F618AADE59392769825A0D49EE47C /* PFCommandURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandURLRequestConstructor.m; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m; sourceTree = ""; }; + 4A8BECDAF3344B5FC08AE2A877D46543 /* PFGeoPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPoint.h; path = Parse/PFGeoPoint.h; sourceTree = ""; }; + 4B241F8BC8B06C3EB6643B6C67E5F153 /* PFRESTObjectBatchCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectBatchCommand.h; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.h; sourceTree = ""; }; + 4C8EFE6B301ADF72C83A3320D353C799 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; 4CC05709207C91767940918CDD4779DC /* POPCGUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPCGUtils.h; path = pop/POPCGUtils.h; sourceTree = ""; }; - 4D1BA2737792A257200ECAE76708D233 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - 4D23A382F14DB50C5CF89F62A1401FFD /* ParseInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseInternal.h; path = Parse/Internal/ParseInternal.h; sourceTree = ""; }; - 4D9FF040FF41C3E677D9AE345094667B /* PFUserAuthenticationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationDelegate.h; path = Parse/PFUserAuthenticationDelegate.h; sourceTree = ""; }; - 4DC8B50782AEA44066CA5219CEC67A5F /* PFNullability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNullability.h; path = Parse/PFNullability.h; sourceTree = ""; }; - 4E9B0790246604518A313DFB192E257C /* PFLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogging.h; path = Parse/Internal/PFLogging.h; sourceTree = ""; }; - 4F6C88082787B2C81249E9AC5C14B411 /* PFAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAlertView.m; path = Parse/Internal/PFAlertView.m; sourceTree = ""; }; - 4F7FEA8114B1934AF71EEAF5B655B908 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; - 505C7EAE502AC992E9273C10AEFCC86D /* PFSessionUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionUtilities.h; path = Parse/Internal/Session/Utilities/PFSessionUtilities.h; sourceTree = ""; }; - 506FFF3B464AAC43A21AD8404EDB0408 /* PFQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryState.m; path = Parse/Internal/Query/State/PFQueryState.m; sourceTree = ""; }; - 50A3A1846FA5A0CC07A927EBC49B5BF2 /* PFSessionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionController.h; path = Parse/Internal/Session/Controller/PFSessionController.h; sourceTree = ""; }; - 50FDC487ACDFDD8DDE2E916C1BC455FB /* PFObjectSubclassInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassInfo.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m; sourceTree = ""; }; - 511824AA2AD76251DC45B56662AA4DA7 /* PFAsyncTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAsyncTaskQueue.m; path = Parse/Internal/PFAsyncTaskQueue.m; sourceTree = ""; }; - 51B91EABBB44E7CF6E6B3CD95D857313 /* ParseUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseUI.h; path = ParseUI/Other/ParseUI.h; sourceTree = ""; }; - 51E4264B938F3B426D4673C5853B2500 /* PFConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfigController.h; path = Parse/Internal/Config/Controller/PFConfigController.h; sourceTree = ""; }; - 5216F571A9C35B49AC646497DEBD2B3C /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; - 526FB5D06EEAEC04BB51ADED7679CF69 /* YALContextMenuCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YALContextMenuCell.h; path = YALContextMenu/YALContextMenuCell.h; sourceTree = ""; }; - 5359BA092EAD4FA522BBB80FC27C145E /* PFPinningObjectStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningObjectStore.m; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.m; sourceTree = ""; }; - 53FB4903C13CD4B728E653A624D36228 /* PFProduct.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProduct.m; path = Parse/PFProduct.m; sourceTree = ""; }; - 5501D5BA77001B3A319125F589DE4774 /* PFRelationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationPrivate.h; path = Parse/Internal/Relation/PFRelationPrivate.h; sourceTree = ""; }; - 563F4B9FC46A7DD720D8945683D2129D /* PFFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileState.m; path = Parse/Internal/File/State/PFFileState.m; sourceTree = ""; }; - 56B759F1D8C8CB47D727B586BB4AC069 /* ContextMenu.iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ContextMenu.iOS-dummy.m"; sourceTree = ""; }; - 573E7709FAFC9CAAA3DF68F8C7ECC087 /* PFObjectSubclassingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassingController.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h; sourceTree = ""; }; + 4CC177AF3ABA56751898D2D9CB28484C /* PFPurchase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchase.h; path = Parse/PFPurchase.h; sourceTree = ""; }; + 4D7F1D2389E46D7B61047075A932829E /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; + 4E053BFD0B35D22C90F81CE9450340A1 /* PFMutablePushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutablePushState.m; path = Parse/Internal/Push/State/PFMutablePushState.m; sourceTree = ""; }; + 4E0FB1196A23924FD3230C985E965FD7 /* PFUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState.h; path = Parse/Internal/User/State/PFUserState.h; sourceTree = ""; }; + 4FFC7C12A9929D142B391ED373CBFD54 /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; + 52B23FC4F06E1B1F6E4B87AADE84A616 /* PFDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDevice.h; path = Parse/Internal/PFDevice.h; sourceTree = ""; }; + 52BAFCE08A44FBFB2F6EC59A3F1D9D79 /* PFConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfigController.m; path = Parse/Internal/Config/Controller/PFConfigController.m; sourceTree = ""; }; + 52CF911E3F9125BF7DDC679A8D3C20E5 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; + 535ACE2CE3D781563A174674D905E319 /* PFImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImage.m; path = ParseUI/Classes/Internal/Extensions/PFImage.m; sourceTree = ""; }; + 538B533F0A14F3AFF0384A6E35C88F23 /* PFAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAlertView.h; path = Parse/Internal/PFAlertView.h; sourceTree = ""; }; + 53C01CF54B15E1F429124FF7255C8845 /* PFMutablePushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutablePushState.h; path = Parse/Internal/Push/State/PFMutablePushState.h; sourceTree = ""; }; + 53D81711A7BE725E27F6C2A6AA858E16 /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+AFNetworking.h"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.h"; sourceTree = ""; }; + 540E5395B931591133EB6260DAAADFC9 /* PFPrimaryButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPrimaryButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.m; sourceTree = ""; }; + 54DE34EB5CB8EA4B93274FC248FBE4E1 /* PFGeoPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFGeoPoint.m; path = Parse/PFGeoPoint.m; sourceTree = ""; }; + 54ED68E1ECE1262E6D9BC5B3F77BB6AE /* PFCommandRunningConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunningConstants.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m; sourceTree = ""; }; + 55FCD8BDF4CAA137C8DF55D62EC9F298 /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; + 5611410C73A9B4211DC397D46762270F /* PFURLSessionJSONDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionJSONDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m; sourceTree = ""; }; + 571D00DE82EAF4F2AABE71CD9002FD71 /* PFLogInViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInViewController.h; path = ParseUI/Classes/LogInViewController/PFLogInViewController.h; sourceTree = ""; }; + 57262F9EFF4C54EC8B1425BC1CE98F42 /* YALContextMenuTableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YALContextMenuTableView.h; path = YALContextMenu/YALContextMenuTableView.h; sourceTree = ""; }; 5785AD09C2208501D5161E950E701889 /* POPAnimationEventInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationEventInternal.h; path = pop/POPAnimationEventInternal.h; sourceTree = ""; }; - 57C18DD90130326F25EB38A9F343D5B5 /* PFRelationState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState_Private.h; path = Parse/Internal/Relation/State/PFRelationState_Private.h; sourceTree = ""; }; - 57D6481216B3368FC95D692879E27822 /* PFKeyValueCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeyValueCache.m; path = Parse/Internal/KeyValueCache/PFKeyValueCache.m; sourceTree = ""; }; - 585CC800D2685BF4E18ADBC41D9E73B1 /* PFObject+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFObject+Subclass.h"; path = "Parse/PFObject+Subclass.h"; sourceTree = ""; }; - 58B5D2F2CD84279F74BE531861A83308 /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; - 58D592B48830284011209E1663E7D733 /* ParseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseManager.h; path = Parse/Internal/ParseManager.h; sourceTree = ""; }; - 590E38452847AE815D9FF8AD36B38F82 /* PFObjectUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectUtilities.m; path = Parse/Internal/Object/Utilities/PFObjectUtilities.m; sourceTree = ""; }; + 5879F2FB09C5807B9FDF0A95766D5A62 /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; + 58DF201C7D18AC9382C7A10622498EEC /* libParse.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libParse.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 59114E77E8FA17F190C36E71C7D4295B /* PFURLSessionCommandRunner.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionCommandRunner.m; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m; sourceTree = ""; }; + 59811DB1920343BD12DB96E6C9F66504 /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; 59B3FD41DEC22C5891C9B83C27BC25E0 /* pop-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "pop-dummy.m"; sourceTree = ""; }; - 59EE9ABCCF20271B1A4D97DE22AA8DA7 /* PFLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocationManager.h; path = Parse/Internal/PFLocationManager.h; sourceTree = ""; }; - 5A11AAB2D71A25709B7A73C3D4626B66 /* PFLogInViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInViewController.h; path = ParseUI/Classes/LogInViewController/PFLogInViewController.h; sourceTree = ""; }; - 5A12ABBF15A8F5506519823676F3C8DD /* Bolts-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Bolts-Private.xcconfig"; sourceTree = ""; }; - 5A5DE351A0BF7F1BFDD329A0BA815E81 /* PFDefaultACLController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDefaultACLController.h; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h; sourceTree = ""; }; + 5A4D8E589CE7C2025AEDF394F08CB1D0 /* PFSessionUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionUtilities.m; path = Parse/Internal/Session/Utilities/PFSessionUtilities.m; sourceTree = ""; }; + 5A87B0BB5553675D9F3949E3BCCD04F2 /* PFRESTCloudCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCloudCommand.m; path = Parse/Internal/Commands/PFRESTCloudCommand.m; sourceTree = ""; }; 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "pop-Private.xcconfig"; sourceTree = ""; }; - 5B131657B4AE8F0B2C6E0A0C5EA11C6E /* PFRESTQueryCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTQueryCommand.m; path = Parse/Internal/Commands/PFRESTQueryCommand.m; sourceTree = ""; }; - 5BF05C278FCCB54E2356A81F4362E3FB /* PFLogInView_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInView_Private.h; path = ParseUI/Classes/LogInViewController/PFLogInView_Private.h; sourceTree = ""; }; - 5C5F86DEE2CDAB301DCBD052E170C3DF /* PFActionButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActionButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h; sourceTree = ""; }; - 5C8045DBF84B4C9FAE5F9493DEF7990E /* PFUserState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState_Private.h; path = Parse/Internal/User/State/PFUserState_Private.h; sourceTree = ""; }; - 5D0D627CB39CA6EDBC298591F7FB9D15 /* PFRelation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelation.m; path = Parse/PFRelation.m; sourceTree = ""; }; - 5D78EE0601B6C0565B9C30B04EF23630 /* PFSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession.h; path = Parse/PFSession.h; sourceTree = ""; }; - 5E49C46EB05E82BE8654545920C832EB /* PFPushChannelsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushChannelsController.m; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.m; sourceTree = ""; }; - 5E63A2D69F78652A010BB377EBB449C6 /* PFActivityIndicatorCollectionReusableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActivityIndicatorCollectionReusableView.m; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.m; sourceTree = ""; }; - 5ECDB4A3D81CD22761B3E657A9193AE7 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = Parse/Resources/en.lproj; sourceTree = ""; }; - 5F0070F7D9C1BBF95C7F9EDB863AD555 /* PFCloudCodeController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloudCodeController.m; path = Parse/Internal/CloudCode/PFCloudCodeController.m; sourceTree = ""; }; - 5F1B395CC49D380489BB0BFDABAC35D9 /* PFRESTCloudCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCloudCommand.h; path = Parse/Internal/Commands/PFRESTCloudCommand.h; sourceTree = ""; }; - 5FA9B2ECC9A26394B543D0F42751F2B3 /* PFUserFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserFileCodingLogic.h; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h; sourceTree = ""; }; - 60ADD91AA56B1BFB00B61936E49D3CFD /* PFObjectLocalIdStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectLocalIdStore.m; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m; sourceTree = ""; }; - 6131294FCF882C880A8DAC44B48846EF /* PFSQLiteDatabaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseController.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h; sourceTree = ""; }; - 62A507869EFBA5A9140C70CE67650D5F /* PFGeoPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPoint.h; path = Parse/PFGeoPoint.h; sourceTree = ""; }; - 62B4F6275559C45BDBB446ABDB11EB0A /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; - 62BE8CADD4670ADEDF5FD8EF8072C87F /* pop.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = pop.xcconfig; sourceTree = ""; }; - 63491A7EC224003EF49DC8F88BC3EB18 /* PFSignUpView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSignUpView.h; path = ParseUI/Classes/SignUpViewController/PFSignUpView.h; sourceTree = ""; }; - 63D62EED87FA9B033C640237039C5D71 /* PFOfflineQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryController.m; path = Parse/Internal/Query/Controller/PFOfflineQueryController.m; sourceTree = ""; }; - 63FEAF34522E76198D04B10565E8B1AB /* PFObjectFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCodingLogic.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m; sourceTree = ""; }; + 5BC7DC696876D5B9270CA496AA95369D /* PFEventuallyPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyPin.h; path = Parse/Internal/PFEventuallyPin.h; sourceTree = ""; }; + 5BD35A119D862154158FCCC4B09B3262 /* PFInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationController.h; path = Parse/Internal/Installation/Controller/PFInstallationController.h; sourceTree = ""; }; + 5BDFB93D7E4BF1E99BD2B1CCB15FD0AA /* PFCloudCodeController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloudCodeController.h; path = Parse/Internal/CloudCode/PFCloudCodeController.h; sourceTree = ""; }; + 5C3EB6B508AEE57A217EDA3D36FF587E /* PFCommandRunningConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunningConstants.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h; sourceTree = ""; }; + 5C811BA81343657BD39DE6B0A9CCEDAE /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; + 5CBA7766482114ABDA4DC83BA3A480DF /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; + 5D20C829D04DF206BF2DDA0611400595 /* PFInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallation.h; path = Parse/PFInstallation.h; sourceTree = ""; }; + 5E01AC1838C574E671E9DA63C930BD46 /* PFTextField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTextField.m; path = ParseUI/Classes/Views/PFTextField.m; sourceTree = ""; }; + 5E489A5115065FA03D7D3F15FA3BFC83 /* PFErrorUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFErrorUtilities.m; path = Parse/Internal/PFErrorUtilities.m; sourceTree = ""; }; + 5E490C6DFB35FC5208FC224CE6F0DA02 /* PFObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState.h; path = Parse/Internal/Object/State/PFObjectState.h; sourceTree = ""; }; + 5EC857A3558E673EFCE406A5DFF70CED /* PFKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeychainStore.m; path = Parse/Internal/PFKeychainStore.m; sourceTree = ""; }; + 5ED1962F30E3190EA8A3C72A2A1D0122 /* PFProductTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductTableViewController.m; path = ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m; sourceTree = ""; }; + 6045E412107503A77AB97F7AFCE87561 /* PFTextField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTextField.h; path = ParseUI/Classes/Views/PFTextField.h; sourceTree = ""; }; + 6058E699B02C72EAC3AB3CEEA1711C1A /* NSDate+TimeAgo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSDate+TimeAgo.m"; sourceTree = ""; }; + 61467390B92F97244D3BC26A49D2B685 /* PFUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserController.h; path = Parse/Internal/User/Controller/PFUserController.h; sourceTree = ""; }; + 617D220324EF51E32701037AB3B7994C /* PFACL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACL.h; path = Parse/PFACL.h; sourceTree = ""; }; + 639D27426D5127006E970FB7A1174B54 /* PFQueryUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryUtilities.m; path = Parse/Internal/Query/Utilities/PFQueryUtilities.m; sourceTree = ""; }; + 63BC048EACE4F5B5628D719274D8C52C /* PFCloud.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloud.m; path = Parse/PFCloud.m; sourceTree = ""; }; 641AE05DD55E5E6AC1590CD7B4A18F97 /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = ""; }; - 6423CE3A0CE5B59A5BF4B47922AB73A5 /* PFObjectPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectPrivate.h; path = Parse/Internal/Object/PFObjectPrivate.h; sourceTree = ""; }; - 66C32C6E7A5D7E52B33E0268964CE9D7 /* PFQueryCollectionViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryCollectionViewController.m; path = ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m; sourceTree = ""; }; - 66EBD08EBD02C88CCDFE2505E222DAD4 /* PFCommandCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache_Private.h; path = Parse/Internal/PFCommandCache_Private.h; sourceTree = ""; }; - 6744DE3000BEEB7DA4D7DAB0E9D6BB57 /* PFKeyValueCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache_Private.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h; sourceTree = ""; }; - 68500105927A08A48A3DA8C59A9B2E12 /* PFConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConstants.m; path = Parse/PFConstants.m; sourceTree = ""; }; + 643074ED44114F64B0BC6FE33DAFD9AF /* PFPaymentTransactionObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPaymentTransactionObserver.m; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m; sourceTree = ""; }; + 647BF62C2F93589EF002FDEA9890EF80 /* UIAlertView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAlertView+AFNetworking.m"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.m"; sourceTree = ""; }; + 64B378A014AFEA845B65353C3E1AFC8E /* PFTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTableViewCell.m; path = ParseUI/Classes/Cells/PFTableViewCell.m; sourceTree = ""; }; + 659AE8A839BF3EA84CE2D2619AAFC66C /* NSDateTimeAgo.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; path = NSDateTimeAgo.bundle; sourceTree = ""; }; + 65B7927D74C0DA147DF9C272E77CCFCA /* PFJSONSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFJSONSerialization.h; path = Parse/Internal/PFJSONSerialization.h; sourceTree = ""; }; + 661753468309FACA5ACA4AC85A0F7E29 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; + 66493986FF116C367FBCACB8BD52D970 /* PFRESTSessionCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTSessionCommand.m; path = Parse/Internal/Commands/PFRESTSessionCommand.m; sourceTree = ""; }; + 66F798D8776090E919C1D6DE00DA5856 /* PFImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImageCache.h; path = ParseUI/Classes/Internal/PFImageCache.h; sourceTree = ""; }; + 673587B2907BA706E532D70A260B0E23 /* PFAsyncTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAsyncTaskQueue.m; path = Parse/Internal/PFAsyncTaskQueue.m; sourceTree = ""; }; + 67F74EF0A3FD2F24484F0C6BE4568559 /* PFActivityIndicatorTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActivityIndicatorTableViewCell.m; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.m; sourceTree = ""; }; + 6823513AE0BEA0DA0200365519976CC4 /* PFKeyValueCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache_Private.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h; sourceTree = ""; }; + 68AEB7658D88B72202471E592D74B981 /* PFWeakValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFWeakValue.h; path = Parse/Internal/PFWeakValue.h; sourceTree = ""; }; + 692C33871C1E489AFBA8DAE1C7667271 /* PFQueryPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryPrivate.h; path = Parse/Internal/Query/PFQueryPrivate.h; sourceTree = ""; }; 6961E549FC85F85EB7560B887B11C928 /* POPSpringSolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringSolver.h; path = pop/POPSpringSolver.h; sourceTree = ""; }; - 698035C4932D84777E5EC71DFC658ECE /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; - 6AAB30B0C1218AFFC57C5B5A58F1925C /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; - 6B50558B71D8208975C6283BE61E816D /* PFUserPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserPrivate.h; path = Parse/Internal/User/PFUserPrivate.h; sourceTree = ""; }; - 6B54B045A5C8DC9D0510BE5BE3FE0A1C /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; - 6B7B6DB35230E2855BBD62DA92FC70BE /* PFBaseState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBaseState.h; path = Parse/Internal/PFBaseState.h; sourceTree = ""; }; - 6BF00A7674A2E0DCC20BFA18BCD89098 /* PFRESTSessionCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTSessionCommand.m; path = Parse/Internal/Commands/PFRESTSessionCommand.m; sourceTree = ""; }; - 6CBECE1F342D08DEA6C849D4CA23FF5C /* PFQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQuery.m; path = Parse/PFQuery.m; sourceTree = ""; }; - 6CF33435C91D40E4A5913AAFD0EDE463 /* PFJSONSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFJSONSerialization.m; path = Parse/Internal/PFJSONSerialization.m; sourceTree = ""; }; - 6D3B7834060709F0758DAC799C640461 /* PFPinningEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningEventuallyQueue.h; path = Parse/Internal/PFPinningEventuallyQueue.h; sourceTree = ""; }; - 6D4152BFBEE6D5EE6216460618A0BFAC /* PFInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationController.m; path = Parse/Internal/Installation/Controller/PFInstallationController.m; sourceTree = ""; }; - 6D701A317BF6E49246153A00794CCB57 /* PFObjectSubclassInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassInfo.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h; sourceTree = ""; }; - 6D8F3DA883848E2DCAD665B10531671C /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; - 6DB47428B78601AEE33C5C5D52E2D994 /* PFUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUser.m; path = Parse/PFUser.m; sourceTree = ""; }; - 6EA0F7203418529BD442E51DEA289F3E /* PFRESTConfigCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTConfigCommand.m; path = Parse/Internal/Commands/PFRESTConfigCommand.m; sourceTree = ""; }; - 6EA17DCC97E135EB8F1461B291A14122 /* PFCommandCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandCache.m; path = Parse/Internal/PFCommandCache.m; sourceTree = ""; }; - 6EDB22FC9E38F0BCE867A085A703C3C0 /* PFImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImageCache.h; path = ParseUI/Classes/Internal/PFImageCache.h; sourceTree = ""; }; - 6F1F7C24D363A023B057B4B020BED379 /* PFImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImageView.m; path = ParseUI/Classes/Views/PFImageView.m; sourceTree = ""; }; - 6F2AB6103ACF8E3202AE317027CA808B /* libParseUI.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libParseUI.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 6F8D3DC3F913BF4E10E3FDEBC2B57B62 /* PFResources.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFResources.m; path = ParseUI/Generated/PFResources.m; sourceTree = ""; }; - 6FAB614DE9EA103FF9C22D630ECA7C8A /* PFObjectEstimatedData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectEstimatedData.m; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m; sourceTree = ""; }; - 7017E1904439F48F0CC39653841838D9 /* PFURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h; sourceTree = ""; }; - 7055666DC363C604BD87260B48EA2D42 /* PFInstallationIdentifierStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h; sourceTree = ""; }; - 70AE4459357403A9AA0B61959202F9A7 /* PFCommandURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandURLRequestConstructor.h; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h; sourceTree = ""; }; - 70DB3EA0DDEFC1284BB14523B754EDA6 /* PFMutableRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableRelationState.h; path = Parse/Internal/Relation/State/PFMutableRelationState.h; sourceTree = ""; }; - 7126CE5A9A9393978939ABBD58F26EA9 /* PFPurchase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchase.h; path = Parse/PFPurchase.h; sourceTree = ""; }; - 713723DAE7A2D766F7D8E9BB88E5E4CA /* ParseUI.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ParseUI.xcconfig; sourceTree = ""; }; - 732EEF0236374C25C56BB5C469D842CB /* PFMultiProcessFileLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLock.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h; sourceTree = ""; }; + 69670E33EC5B2A67F2FC18752BEA4B68 /* PFLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogger.m; path = Parse/Internal/PFLogger.m; sourceTree = ""; }; + 69B3E1C7182F3458AD6A299128488B48 /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLConnectionOperation.h; path = AFNetworking/AFURLConnectionOperation.h; sourceTree = ""; }; + 69CC0EFFD531D00F188F0AC109288144 /* PFObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObject.m; path = Parse/PFObject.m; sourceTree = ""; }; + 6A3886486E073DDFC226404820C5AD00 /* PFQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryController.h; path = Parse/Internal/Query/Controller/PFQueryController.h; sourceTree = ""; }; + 6AD49AEE9B786D80C2CA36CD083017B5 /* Parse_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse_Private.h; path = Parse/Internal/Parse_Private.h; sourceTree = ""; }; + 6B6906BA58A708893C496F829C45DE8A /* PFACLPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLPrivate.h; path = Parse/Internal/ACL/PFACLPrivate.h; sourceTree = ""; }; + 6B6C978DA502A9F639630B7DB4F0F7B5 /* PFAsyncTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAsyncTaskQueue.h; path = Parse/Internal/PFAsyncTaskQueue.h; sourceTree = ""; }; + 6BC36677DB08053931D1BAAD36BAF62D /* PFInstallationIdentifierStore_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore_Private.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h; sourceTree = ""; }; + 6BCF6282172FC1EA47FCF672C1A24430 /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; + 6BEA2C76CCE4B451C48EDE5BAD5C2BAA /* PFSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession.h; path = Parse/PFSession.h; sourceTree = ""; }; + 6E506E997BA37804E78B12743B103213 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; + 6E581829116421485B93F442A7B52B1E /* PFFileStagingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileStagingController.h; path = Parse/Internal/File/Controller/PFFileStagingController.h; sourceTree = ""; }; + 6E68F5B95AB1A81CC6D8695D1558949A /* PFRESTQueryCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTQueryCommand.h; path = Parse/Internal/Commands/PFRESTQueryCommand.h; sourceTree = ""; }; + 6F8244F3675730196C1B33EA7D16570F /* PFUIAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUIAlertView.m; path = ParseUI/Classes/Internal/Extensions/PFUIAlertView.m; sourceTree = ""; }; + 6FF0D7F86EBF3E4E62184BE9EDCAFEBF /* AFNetworking-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AFNetworking-Private.xcconfig"; sourceTree = ""; }; + 701E5785FFBE0972D168BB43B924A6E2 /* PFPinningObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningObjectStore.h; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.h; sourceTree = ""; }; + 70803358E5AACD697743DBA69EC2F75E /* PFOfflineStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineStore.m; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m; sourceTree = ""; }; + 708BF014D209E4A867445E7C9EA0EBEC /* PFURLSessionFileDownloadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionFileDownloadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h; sourceTree = ""; }; + 708E4D0D5864F5670DB3C6D0BEA5D8F0 /* PFRESTObjectCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectCommand.m; path = Parse/Internal/Commands/PFRESTObjectCommand.m; sourceTree = ""; }; + 70C5FC542FD1979DABEBBF67C4BF62A6 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; + 71F6F2D4F04F42FEC580B4FC00283A8D /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; + 7235B2813F817238C3D71BECCF936BAC /* PFURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h; sourceTree = ""; }; + 72672AA1F26F8760A0D79F4F309EE6E6 /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; + 72773DBC556A73785E0C5F5893457AD6 /* PFQueryState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState_Private.h; path = Parse/Internal/Query/State/PFQueryState_Private.h; sourceTree = ""; }; + 72EE0E3DEA73FF87A1F44225E65A2CF0 /* PFURLSessionUploadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionUploadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h; sourceTree = ""; }; + 7309A304A4D33AD098C95DE23B2DA6DB /* PFImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImageView.h; path = ParseUI/Classes/Views/PFImageView.h; sourceTree = ""; }; + 7318D46BCC46C45624A58D09BF59AD27 /* PFACL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACL.m; path = Parse/PFACL.m; sourceTree = ""; }; + 73255E52B56ECB68C1799B5391F4417D /* BFTask+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Private.h"; path = "Parse/Internal/BFTask+Private.h"; sourceTree = ""; }; + 735137870D3101BC005B5CEEA18BABAA /* PFCategoryLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCategoryLoader.h; path = Parse/Internal/PFCategoryLoader.h; sourceTree = ""; }; 7371F16336283F2D8BB2A199CD4DDEF5 /* POPSpringAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringAnimation.h; path = pop/POPSpringAnimation.h; sourceTree = ""; }; - 747ED87BDA0CFC263BA40D355C825B04 /* PFSessionUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionUtilities.m; path = Parse/Internal/Session/Utilities/PFSessionUtilities.m; sourceTree = ""; }; - 74B8114FC619CF23645359BCCE432DBC /* PFMutableFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableFileState.h; path = Parse/Internal/File/State/PFMutableFileState.h; sourceTree = ""; }; - 752312E41E6828D9DFD974503E6DA356 /* PFCurrentInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentInstallationController.h; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h; sourceTree = ""; }; - 75302811ECF5EDC235B0DB8B86291C2B /* PFProductsRequestHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductsRequestHandler.m; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m; sourceTree = ""; }; - 753E0E1AA4BBDE64D2AE0835F63D119F /* PFNetworkCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkCommand.h; path = Parse/Internal/PFNetworkCommand.h; sourceTree = ""; }; - 775ECD6B6F3AADB8D98379981C1AD2A4 /* PFPush.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPush.h; path = Parse/PFPush.h; sourceTree = ""; }; - 777C43E3AA95750283ADAA2717A0595D /* PFCachedQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCachedQueryController.m; path = Parse/Internal/Query/Controller/PFCachedQueryController.m; sourceTree = ""; }; - 7A52DF7C69FED7E78E844893F5F58808 /* libAFNetworking.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAFNetworking.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 7B3E595A5E46C08CB6EDD2AECFC436E7 /* PFPushPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushPrivate.h; path = Parse/Internal/Push/PFPushPrivate.h; sourceTree = ""; }; - 7C385EA5C279B003F8C215ED4163B769 /* Parse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Parse.m; path = Parse/Parse.m; sourceTree = ""; }; - 7C5E7538EF5118E38934B9886BC17B43 /* libContextMenu.iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libContextMenu.iOS.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 7C5FC55392104FEA040D1DDC37429A8C /* PFUserAuthenticationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationController.h; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h; sourceTree = ""; }; - 7DE095F15D0DA44B27DE6F3F40B748C5 /* PFAnalyticsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsController.m; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.m; sourceTree = ""; }; - 7E80BE5758F379DA9001B14AF95B3C8B /* PFRESTPushCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTPushCommand.h; path = Parse/Internal/Commands/PFRESTPushCommand.h; sourceTree = ""; }; - 7F101824BC10648B2A569BDBA9C23BE5 /* PFInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallation.h; path = Parse/PFInstallation.h; sourceTree = ""; }; + 73B5E7339805B09F42BF719F1A6F3B61 /* Bolts.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.xcconfig; sourceTree = ""; }; + 73B670C37B2B798A121E6EA4650193A6 /* PFPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPin.m; path = Parse/Internal/LocalDataStore/Pin/PFPin.m; sourceTree = ""; }; + 73E1315856FE518B878BF38603277B14 /* PFUserState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState_Private.h; path = Parse/Internal/User/State/PFUserState_Private.h; sourceTree = ""; }; + 740953021D381F48143BF4B4EEE2CF5C /* PFSignUpView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSignUpView.h; path = ParseUI/Classes/SignUpViewController/PFSignUpView.h; sourceTree = ""; }; + 744FBB3DAB92F7F5627525503F0D83AE /* PFUserAuthenticationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserAuthenticationController.m; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m; sourceTree = ""; }; + 765B68008399E2AD5680EF7D17B0250C /* PFCommandCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache.h; path = Parse/Internal/PFCommandCache.h; sourceTree = ""; }; + 7665F686CB87E16A8AA3434472CFA6B8 /* PFPinningEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningEventuallyQueue.h; path = Parse/Internal/PFPinningEventuallyQueue.h; sourceTree = ""; }; + 766ECFB7911C046BF26727DBBA70D63C /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; + 7686BD3230BCC010ECF764A9A6BC1BFC /* PFObjectUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectUtilities.m; path = Parse/Internal/Object/Utilities/PFObjectUtilities.m; sourceTree = ""; }; + 76DBE339038C3A58AE9A8BE18D095653 /* PFLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogger.h; path = Parse/Internal/PFLogger.h; sourceTree = ""; }; + 78C3F43F458A2618F3C9E335C0826CC2 /* PFQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState.h; path = Parse/Internal/Query/State/PFQueryState.h; sourceTree = ""; }; + 78D6CD6C5264B7ADB33043C833FC82D3 /* PFSessionUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionUtilities.h; path = Parse/Internal/Session/Utilities/PFSessionUtilities.h; sourceTree = ""; }; + 78DAFF8E8BC51BAA61944940D146B13D /* PFLocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLocationManager.m; path = Parse/Internal/PFLocationManager.m; sourceTree = ""; }; + 78F7563A9F217FD7904E5AB2768407D5 /* PFUserFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserFileCodingLogic.h; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h; sourceTree = ""; }; + 7938AFA7D01492ACDB7E2C6D7BC6AA59 /* PFPushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState.h; path = Parse/Internal/Push/State/PFPushState.h; sourceTree = ""; }; + 79839EFEDA52DDB79166288FE614A54D /* ParseUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseUI.h; path = ParseUI/Other/ParseUI.h; sourceTree = ""; }; + 7A238C25BA4BC261D2F689BF12926A8C /* PFPushUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushUtilities.h; path = Parse/Internal/Push/Utilites/PFPushUtilities.h; sourceTree = ""; }; + 7A23FC083F510FB1D62BA453FD6556C6 /* PFURLSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h; sourceTree = ""; }; + 7A4AFDBB8AC98818A3958140C49E7D8E /* NSDate+TimeAgo.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "NSDate+TimeAgo.xcconfig"; sourceTree = ""; }; + 7A8C0E126FBEBC781FFD512AE7FA7A26 /* UIView+YALConstraints.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+YALConstraints.m"; path = "YALContextMenu/UIView+YALConstraints.m"; sourceTree = ""; }; + 7AB7B8E6741B6E0DA722014D71526A8B /* PFEncoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEncoder.h; path = Parse/Internal/PFEncoder.h; sourceTree = ""; }; + 7ACCB6B9273FFBB25B369C4E6B70F40F /* PFCurrentInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentInstallationController.h; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h; sourceTree = ""; }; + 7C46B17139F251CBB4B6F1A5BC13FF31 /* PFSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession_Private.h; path = Parse/Internal/Session/PFSession_Private.h; sourceTree = ""; }; + 7C87A8B3116CDC86AB48796F14149170 /* NSDate+TimeAgo-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "NSDate+TimeAgo-Private.xcconfig"; sourceTree = ""; }; + 7D0B2ED163A92C1717CA51F8534F021E /* libNSDate+TimeAgo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libNSDate+TimeAgo.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 7D28187843427D20AE0896283D27AF1A /* PFActivityIndicatorCollectionReusableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActivityIndicatorCollectionReusableView.m; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.m; sourceTree = ""; }; + 7DA3DB595C2499FC183C45E3E9B22292 /* PFNetworkCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkCommand.h; path = Parse/Internal/PFNetworkCommand.h; sourceTree = ""; }; + 7DA577BF9DDB46C2FB26396B480D30EF /* PFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkActivityIndicatorManager.h; path = Parse/PFNetworkActivityIndicatorManager.h; sourceTree = ""; }; + 7DAED37688A9788B970EB42A53BC2906 /* PFObjectConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectConstants.h; path = Parse/Internal/Object/Constants/PFObjectConstants.h; sourceTree = ""; }; + 7E8A207A2946C0BB45CFFFCDDDF262C0 /* PFPush.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPush.m; path = Parse/PFPush.m; sourceTree = ""; }; + 7F37BDAF72EFEF9BD278F460EC2777CD /* PFAnalyticsUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsUtilities.h; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h; sourceTree = ""; }; 7F59C51782AE555897A5B92D6B3CECD1 /* POPBasicAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPBasicAnimationInternal.h; path = pop/POPBasicAnimationInternal.h; sourceTree = ""; }; - 8015A60E5EC1992EE7F83FBCDBA181E4 /* PFObjectConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectConstants.m; path = Parse/Internal/Object/Constants/PFObjectConstants.m; sourceTree = ""; }; - 81E5DF449A484A01D0D5D2D79856C74B /* ContextMenu.iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ContextMenu.iOS-prefix.pch"; sourceTree = ""; }; - 8258E5C6287CE05ECE4DBE3A83508112 /* PFURLSessionCommandRunner.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionCommandRunner.m; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m; sourceTree = ""; }; - 8261B575C444CC37A75DDD38033FCDD3 /* PFCommandURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandURLRequestConstructor.m; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m; sourceTree = ""; }; - 8277E669C14D90814D85CAF0D08745D7 /* PFDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDevice.m; path = Parse/Internal/PFDevice.m; sourceTree = ""; }; + 8094F451DBF5DC13B98EEEC4DE10398D /* PFPinningObjectStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningObjectStore.m; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.m; sourceTree = ""; }; + 810D122E23D13A40420ED3D1D258EF4F /* PFFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState.h; path = Parse/Internal/File/State/PFFileState.h; sourceTree = ""; }; + 822ABF9BEDB469FDEA0376462E065B92 /* PFEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyQueue.m; path = Parse/Internal/PFEventuallyQueue.m; sourceTree = ""; }; + 830556E84D6C0C3E518700CF712A5B96 /* PFLocalization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocalization.h; path = ParseUI/Classes/Internal/PFLocalization.h; sourceTree = ""; }; + 830636B8D1FD36CAC950ECC4E2B9EDCC /* PFTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTableViewCell.h; path = ParseUI/Classes/Cells/PFTableViewCell.h; sourceTree = ""; }; 8336CCF2280C58E6C367DF4EC0EBB7B3 /* POPAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimation.mm; path = pop/POPAnimation.mm; sourceTree = ""; }; - 838239C2DC01EAB9AEE7B5553878AB6A /* PFObjectSubclassingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassingController.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m; sourceTree = ""; }; - 83A7946D9B9D56684542F8D584D20370 /* PFInternalUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInternalUtils.h; path = Parse/Internal/PFInternalUtils.h; sourceTree = ""; }; - 843B775414C85A6B739A68A808587E0B /* PFQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryController.m; path = Parse/Internal/Query/Controller/PFQueryController.m; sourceTree = ""; }; - 84EE46E65A1FBB043B8876D673FADFCA /* PFCloud.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloud.h; path = Parse/PFCloud.h; sourceTree = ""; }; - 8553BBD3BB32BA047968D8FCC0BB7A4A /* PFMutableRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableRelationState.m; path = Parse/Internal/Relation/State/PFMutableRelationState.m; sourceTree = ""; }; - 860AA407C8EE7F2BE1FF80F5F2C2A67C /* PFConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig_Private.h; path = Parse/Internal/Config/PFConfig_Private.h; sourceTree = ""; }; - 863525FC6AF9553E708425B9E1FBBBE3 /* PFCurrentConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentConfigController.m; path = Parse/Internal/Config/Controller/PFCurrentConfigController.m; sourceTree = ""; }; - 86B7508FF3B989FEF4B30FE544B32B91 /* PFRESTFileCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTFileCommand.h; path = Parse/Internal/Commands/PFRESTFileCommand.h; sourceTree = ""; }; - 86CE1FC6E16C4981CCAB4D92ECBFB7B4 /* PFLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogger.h; path = Parse/Internal/PFLogger.h; sourceTree = ""; }; - 875608FCABF08485CA5E0DB7D13A53FE /* PFURLSessionCommandRunner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h; sourceTree = ""; }; - 877583FCE729451EBA709DD2F69EC026 /* PFFieldOperationDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperationDecoder.m; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.m; sourceTree = ""; }; - 87D5C76598D7EF5558AB88A80F0ADCF6 /* PFConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig.h; path = Parse/PFConfig.h; sourceTree = ""; }; - 8804B5C3B20BA33A62CE380BBCCC489C /* PFMutablePushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutablePushState.h; path = Parse/Internal/Push/State/PFMutablePushState.h; sourceTree = ""; }; - 8844A67AC930593786AECB0231747628 /* PFFileManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileManager.m; path = Parse/Internal/PFFileManager.m; sourceTree = ""; }; + 84B558C7F4022FCA686D637485AF3061 /* PFMulticastDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMulticastDelegate.m; path = Parse/Internal/PFMulticastDelegate.m; sourceTree = ""; }; + 8510A922B1ED47CC55F1F151966C868B /* PFURLSessionFileDownloadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionFileDownloadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m; sourceTree = ""; }; + 854E62EC5E2973D6FCF577826C74F488 /* PFLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogging.h; path = Parse/Internal/PFLogging.h; sourceTree = ""; }; + 8553FA7441EFE9ACF82C08BECCBB8E9C /* PFObjectConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectConstants.m; path = Parse/Internal/Object/Constants/PFObjectConstants.m; sourceTree = ""; }; + 860A4029037698F6AEAA916D96F38BBE /* PFImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImageView.m; path = ParseUI/Classes/Views/PFImageView.m; sourceTree = ""; }; + 871FF52E7A467327FDCE8823177C9F5F /* PFOfflineQueryLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryLogic.h; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h; sourceTree = ""; }; + 87BE28AC7E09136A862805B3C7FD7EE7 /* PFObjectSubclassInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassInfo.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m; sourceTree = ""; }; + 87D86889C8EF66DE0CB120F92CC8BC82 /* PFObjectBatchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectBatchController.m; path = Parse/Internal/Object/BatchController/PFObjectBatchController.m; sourceTree = ""; }; 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 88941524D385690CBCF300DD140DF00E /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; - 8896894278B01270F7BDA51E345AEE3A /* PFTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTaskQueue.m; path = Parse/Internal/PFTaskQueue.m; sourceTree = ""; }; - 891A2E0E0FA20C1648F5C841F3E564AD /* PFACL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACL.m; path = Parse/PFACL.m; sourceTree = ""; }; - 89362786CE0111AEDE7DA9FACAB648E7 /* PFFileManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileManager.h; path = Parse/Internal/PFFileManager.h; sourceTree = ""; }; - 895CF8E6F7A84B12553BCA9E79EC79C3 /* PFACL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACL.h; path = Parse/PFACL.h; sourceTree = ""; }; - 89E660FBA2FA907C548F83F17BA9CF56 /* PFQueryUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryUtilities.h; path = Parse/Internal/Query/Utilities/PFQueryUtilities.h; sourceTree = ""; }; - 8B17307D8D5E9068BF81147ED3B8E9B3 /* PFAnalytics_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics_Private.h; path = Parse/Internal/Analytics/PFAnalytics_Private.h; sourceTree = ""; }; - 8B8B01C970E96BD862FECF58F194D051 /* PFFileController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileController.h; path = Parse/Internal/File/Controller/PFFileController.h; sourceTree = ""; }; - 8BABC47EC65B9265C3909474DE8574C9 /* PFConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConstants.h; path = Parse/PFConstants.h; sourceTree = ""; }; - 8D0D83D976316A1E4675C57A59FD08D7 /* PFUIAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUIAlertView.m; path = ParseUI/Classes/Internal/Extensions/PFUIAlertView.m; sourceTree = ""; }; - 8D391B4B9A0CB9FD3E2A0BF899903190 /* PFAnonymousAuthenticationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousAuthenticationProvider.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h; sourceTree = ""; }; - 8E40D034FA34D8F3FB9563D4D5DE2705 /* PFProduct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProduct.h; path = Parse/PFProduct.h; sourceTree = ""; }; + 8915F1D49EC6C0508498246B9ACEFAD5 /* PFDateFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDateFormatter.m; path = Parse/Internal/PFDateFormatter.m; sourceTree = ""; }; + 896143C79933B46F6E5BC5605CBD3FDF /* PFHTTPURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPURLRequestConstructor.h; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h; sourceTree = ""; }; + 8AB3A48FC769AD95A394C4C83BF67B64 /* PFQueryTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryTableViewController.m; path = ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m; sourceTree = ""; }; + 8B078276D0A69125A2A41D5905950EDF /* PFObjectFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCodingLogic.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m; sourceTree = ""; }; + 8CCAEDE8683EF8A24FFF167A71FA7D5F /* PFSQLiteDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabase.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m; sourceTree = ""; }; + 8D93BE5DB8400592658EED9DD4616653 /* PFProductsRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductsRequestHandler.h; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h; sourceTree = ""; }; + 8EB57F907824EC8680AA92999B53C22B /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; 8EC4FC6A3A06D9292C296C691005546B /* POPCustomAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPCustomAnimation.mm; path = pop/POPCustomAnimation.mm; sourceTree = ""; }; - 8EE2B15BEF4BF5D9E73B0F8A28BFE3AF /* PFBaseState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBaseState.m; path = Parse/Internal/PFBaseState.m; sourceTree = ""; }; - 8FF0B9CB696808B8C85640C9F7180BB8 /* PFObjectState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState_Private.h; path = Parse/Internal/Object/State/PFObjectState_Private.h; sourceTree = ""; }; - 900D054E76F1D5D03B53DBFF276C5C0D /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = ParseUI/Resources/Localization/en.lproj; sourceTree = ""; }; + 8EE22F8E5E2EAEC021B622AC34352720 /* PFSQLiteDatabaseResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseResult.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m; sourceTree = ""; }; + 8FA15F6CA2D7C7EF833942425A4D4E14 /* PFCoreManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCoreManager.m; path = Parse/Internal/PFCoreManager.m; sourceTree = ""; }; + 8FFB9A965D43043523BBFB5852F98398 /* PFPropertyInfo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Private.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h; sourceTree = ""; }; + 9006A20100190E9CE8DF22BCE0676858 /* PFURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSession.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m; sourceTree = ""; }; + 9014F44156C863573956B280208B21FE /* PFLogInView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogInView.m; path = ParseUI/Classes/LogInViewController/PFLogInView.m; sourceTree = ""; }; 90DA3C63E9AD758336342BC51C0BB859 /* POPDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDefines.h; path = pop/POPDefines.h; sourceTree = ""; }; - 90E284AD7A6A52AEEF7D84AD765A3548 /* BFDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFDefines.h; path = Bolts/Common/BFDefines.h; sourceTree = ""; }; - 9151DC926D00004E1604381F7985BB36 /* PFDismissButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDismissButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.m; sourceTree = ""; }; - 91C2410DA547032FC3DC2AE3C259C844 /* ParseUI-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ParseUI-dummy.m"; sourceTree = ""; }; - 91FD3566B5AFA4DD010BBD80305BC28A /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; - 92551145ADCBD6A18D43AA2DA73CB21B /* PFObjectFilePersistenceController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFilePersistenceController.h; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h; sourceTree = ""; }; + 90E81AA7E9A2C782FEA33022EA460137 /* PFFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile.h; path = Parse/PFFile.h; sourceTree = ""; }; + 9147E975FAC6708B063DF2A2B676385C /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; + 91B92487E040A134ED6ECE85E9F96CBD /* PFRelation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelation.h; path = Parse/PFRelation.h; sourceTree = ""; }; + 92379A8257F8FBCD71D81BC0856D3972 /* PFEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue.h; path = Parse/Internal/PFEventuallyQueue.h; sourceTree = ""; }; 928EC8B9105DA581C7896C2102E87BE2 /* POPCustomAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPCustomAnimation.h; path = pop/POPCustomAnimation.h; sourceTree = ""; }; - 9377FA8A24B121D60FE9AA1745B38DC4 /* PFFieldOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperation.h; path = Parse/Internal/FieldOperation/PFFieldOperation.h; sourceTree = ""; }; + 92A7C648E6A455643E14ED492A6A73B7 /* Parse-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Parse-dummy.m"; sourceTree = ""; }; + 92C96A18ED4977ED36761B564703B7E1 /* PFKeyValueCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeyValueCache.m; path = Parse/Internal/KeyValueCache/PFKeyValueCache.m; sourceTree = ""; }; + 92EFF2CB8EF752330DCED2DE09D8B048 /* PFObjectBatchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectBatchController.h; path = Parse/Internal/Object/BatchController/PFObjectBatchController.h; sourceTree = ""; }; + 93B8CFD3B61887AC829C393B74B7FFFA /* PFFieldOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperation.h; path = Parse/Internal/FieldOperation/PFFieldOperation.h; sourceTree = ""; }; 94815AA3EE3CBA04CEE85515701AD534 /* POPAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimator.h; path = pop/POPAnimator.h; sourceTree = ""; }; - 948A8D3F019700F19148AF5DEF0F0F49 /* PFFile_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile_Private.h; path = Parse/Internal/File/PFFile_Private.h; sourceTree = ""; }; - 94CA59055B37DA8DC1D9377D2231CF47 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; }; + 954F116380F604D2E6F3C72D655F9A1C /* PFFileState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState_Private.h; path = Parse/Internal/File/State/PFFileState_Private.h; sourceTree = ""; }; 96015F1C746803D9318614B277F71BCB /* UnitBezier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UnitBezier.h; path = pop/WebCore/UnitBezier.h; sourceTree = ""; }; 9663A817A809169745F3F8E987FFE076 /* POPLayerExtras.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPLayerExtras.h; path = pop/POPLayerExtras.h; sourceTree = ""; }; - 96B412F3169F62969DAC6A85BFBE68F4 /* PFEventuallyPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyPin.h; path = Parse/Internal/PFEventuallyPin.h; sourceTree = ""; }; - 96D3C7353F23912FD706CABC336D4D2E /* PFURLSessionJSONDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionJSONDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h; sourceTree = ""; }; - 973D3E8805C0C339DAA7877098A99A7E /* PFUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserController.m; path = Parse/Internal/User/Controller/PFUserController.m; sourceTree = ""; }; - 9761E4B9A3217B85F0615BE7D41F1CB0 /* PFRole.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRole.m; path = Parse/PFRole.m; sourceTree = ""; }; - 976A55E7CE8D654A68FBED3175180C45 /* Parse-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Parse-Private.xcconfig"; sourceTree = ""; }; - 9780F90C830BDBFB169674AFE0921D8C /* PFCoreManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCoreManager.m; path = Parse/Internal/PFCoreManager.m; sourceTree = ""; }; - 9825AD54796F54B9AE10955E1AFEDD77 /* PFOfflineObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineObjectController.m; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m; sourceTree = ""; }; - 9981AF787E3013B9030751CAD2D7A086 /* PFLoadingView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLoadingView.m; path = ParseUI/Classes/Internal/Views/PFLoadingView.m; sourceTree = ""; }; - 99AC0E4FACC6E2558227DD51210B84EA /* PFOfflineQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryController.h; path = Parse/Internal/Query/Controller/PFOfflineQueryController.h; sourceTree = ""; }; - 99C45BAC8E657D5D25B91CF13FDC4C8C /* PFCommandRunning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunning.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.m; sourceTree = ""; }; - 99C80D21838865183077DD44395D6C3A /* PFDismissButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDismissButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h; sourceTree = ""; }; - 9A835C10155FEF5DCB5D5E43843849B7 /* PFRect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRect.m; path = ParseUI/Classes/Internal/Extensions/PFRect.m; sourceTree = ""; }; - 9A85625E51C91983512393262199899C /* PFFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile.h; path = Parse/PFFile.h; sourceTree = ""; }; - 9AEFA60D137098ACED4615C88DBA7D17 /* PFWeakValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFWeakValue.h; path = Parse/Internal/PFWeakValue.h; sourceTree = ""; }; - 9BA57A433E33E9125A8347D57D7F766F /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; - 9BECD483F69DE182010F84F44CFAB40C /* PFPurchaseTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseTableViewCell.h; path = ParseUI/Classes/Cells/PFPurchaseTableViewCell.h; sourceTree = ""; }; - 9BF42B9B3BCA6AC0E4C7A5C4A8D56C76 /* PFDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDevice.h; path = Parse/Internal/PFDevice.h; sourceTree = ""; }; + 9668058EF6D9611AE0F52B0A9D8131AD /* PFCommandCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandCache.m; path = Parse/Internal/PFCommandCache.m; sourceTree = ""; }; + 973C19D13243047264FC21FBFCDFC121 /* PFPropertyInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo.m; sourceTree = ""; }; + 98BA5038261FBEE24BBC3F399BD90C23 /* libAFNetworking.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAFNetworking.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 9923A756C94863C50037B3D2BD78F2B3 /* PFConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig.h; path = Parse/PFConfig.h; sourceTree = ""; }; + 99CB9D2CBAA3EB9FF897BDA59C05AB0E /* PFInstallationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationConstants.h; path = Parse/Internal/Installation/Constants/PFInstallationConstants.h; sourceTree = ""; }; + 9A3687171A64C8D18935718B4FF24DF6 /* PFPushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushState.m; path = Parse/Internal/Push/State/PFPushState.m; sourceTree = ""; }; + 9B321A74199674C110D83880D9E64B0B /* PFDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDecoder.h; path = Parse/Internal/PFDecoder.h; sourceTree = ""; }; + 9B85DB17C99ACFC636195DE8B7E94F28 /* PFCurrentUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentUserController.m; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.m; sourceTree = ""; }; + 9BA5BBB87243515C8EBB8BEDA18847EB /* PFSQLiteDatabaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseController.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m; sourceTree = ""; }; + 9BC83B4BD9DA9879EF97882A6B805D3F /* PFRESTQueryCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTQueryCommand.m; path = Parse/Internal/Commands/PFRESTQueryCommand.m; sourceTree = ""; }; 9C3FE18EB564AF4087573DE6F3F2D3D3 /* POPMath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPMath.h; path = pop/POPMath.h; sourceTree = ""; }; - 9CF2B2B9DD2ED593C69A3425ABF50CEA /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - 9D0C2EFD1475837A15B4834D37F70DCA /* PFMulticastDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMulticastDelegate.h; path = Parse/Internal/PFMulticastDelegate.h; sourceTree = ""; }; - 9DA3372CAB38E88F7791F2DE96931153 /* PFObjectFilePersistenceController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFilePersistenceController.m; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m; sourceTree = ""; }; + 9C551CD0049A5489B24695592DE118BF /* PFCommandCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache_Private.h; path = Parse/Internal/PFCommandCache_Private.h; sourceTree = ""; }; + 9C7D5F32F2625673AFDBCC82AA5EB437 /* PFPurchase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchase.m; path = Parse/PFPurchase.m; sourceTree = ""; }; + 9C85F4E975114B0270B229E64AB085B4 /* Parse-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-prefix.pch"; sourceTree = ""; }; + 9CA9BAD9E5F012F5B45FB24FEED6CB57 /* PFNullability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNullability.h; path = Parse/PFNullability.h; sourceTree = ""; }; + 9CDA5DACDC94924F7EDB7D93CABD0EAC /* PFMultiProcessFileLockController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLockController.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m; sourceTree = ""; }; + 9DA36160BA0216D14C3924C282BAB7F4 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; }; + 9DA45A3E8EB7DEACE98BDB98552ABA77 /* PFActivityIndicatorCollectionReusableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActivityIndicatorCollectionReusableView.h; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h; sourceTree = ""; }; 9DA58C3428E2A0E2F88C2A0522297274 /* POPAnimationTracerInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationTracerInternal.h; path = pop/POPAnimationTracerInternal.h; sourceTree = ""; }; - 9DD7435FB2C6E16C60951E238B329F43 /* PFObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectControlling.h; path = Parse/Internal/Object/Controller/PFObjectControlling.h; sourceTree = ""; }; - 9E1183E2718E99F11B4E9C9C8A80C1AF /* PFQueryState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState_Private.h; path = Parse/Internal/Query/State/PFQueryState_Private.h; sourceTree = ""; }; - 9E645516AFC0CAD5C08101D5F844874F /* PFURLSessionDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h; sourceTree = ""; }; - 9EDD8E08548221489BFE965864FB3566 /* PFAnonymousAuthenticationProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousAuthenticationProvider.m; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m; sourceTree = ""; }; + 9ECBBA7F99F345390F66E3FC635EE1EF /* BoltsVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BoltsVersion.h; path = Bolts/Common/BoltsVersion.h; sourceTree = ""; }; 9F210DEEA777E0BF1995DC3570CC616E /* POPAnimationEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationEvent.h; path = pop/POPAnimationEvent.h; sourceTree = ""; }; - 9F8925C71640AC9E18B09C2F32530257 /* PFQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState.h; path = Parse/Internal/Query/State/PFQueryState.h; sourceTree = ""; }; - 9FB80727EBDBCBDEEBCAB45A1785BAF1 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - A026613DFF149D8BD7D37DDB26152A35 /* PFRESTSessionCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTSessionCommand.h; path = Parse/Internal/Commands/PFRESTSessionCommand.h; sourceTree = ""; }; - A055D518CCF1B206751FCEC2DE32A701 /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; - A08F05F414FDAD6FE00523BCDB90BE7B /* PFAnalyticsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsController.h; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.h; sourceTree = ""; }; - A1297C03656FAE86C50B3C5179093556 /* ParseUIConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseUIConstants.h; path = ParseUI/Other/ParseUIConstants.h; sourceTree = ""; }; - A133BB30724BEF75ABB81AA509743A45 /* PFObjectBatchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectBatchController.h; path = Parse/Internal/Object/BatchController/PFObjectBatchController.h; sourceTree = ""; }; + 9F6E076421F723D8D370F4D7A93A3912 /* PFOfflineQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryController.m; path = Parse/Internal/Query/Controller/PFOfflineQueryController.m; sourceTree = ""; }; + 9FD87BEA2A82FBCF43F08520914FAF67 /* PFBase64Encoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBase64Encoder.h; path = Parse/Internal/PFBase64Encoder.h; sourceTree = ""; }; + 9FE2B065E415FDE6A0E9A36FD7E97FF7 /* PFKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeychainStore.h; path = Parse/Internal/PFKeychainStore.h; sourceTree = ""; }; + 9FF2C4AB205929FAE824F3F2C811BC3B /* PFAnonymousUtils_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils_Private.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h; sourceTree = ""; }; + A0AC8B57627C291845EE2958D0F30F8A /* PFGeoPointPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPointPrivate.h; path = Parse/Internal/PFGeoPointPrivate.h; sourceTree = ""; }; + A1712FC7AE801C8D0346A18C603E1240 /* PFSQLiteDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase_Private.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h; sourceTree = ""; }; A19FD133843D5FCF16B8AF3B4E165515 /* POPMath.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPMath.mm; path = pop/POPMath.mm; sourceTree = ""; }; - A1A2A66F3FC79A3E2778CF485801E64C /* PFFileStagingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileStagingController.m; path = Parse/Internal/File/Controller/PFFileStagingController.m; sourceTree = ""; }; - A1C86812C1E16F9AE6E6995B0510FCF5 /* PFAnonymousUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils.h; path = Parse/PFAnonymousUtils.h; sourceTree = ""; }; - A24FE0141387F910F17488671E600BA8 /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; - A421A4107F66CC195D55371620880A47 /* PFOfflineStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineStore.m; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m; sourceTree = ""; }; + A1BE727276517B932F2B64A6FC3FCCF7 /* PFAnonymousUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils.h; path = Parse/PFAnonymousUtils.h; sourceTree = ""; }; + A1EB64B790B73DAB7F65D7CDDFE4A383 /* PFLoadingView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLoadingView.m; path = ParseUI/Classes/Internal/Views/PFLoadingView.m; sourceTree = ""; }; + A2ABD2D212DD9D0B0E07D04D45281FD5 /* PFHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHash.m; path = Parse/Internal/PFHash.m; sourceTree = ""; }; + A2F5A0AF00712AB15F12282085DF694A /* PFAnalyticsUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsUtilities.m; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m; sourceTree = ""; }; + A32A4885982917556368207430E04EAE /* PFConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConstants.m; path = Parse/PFConstants.m; sourceTree = ""; }; + A353ED9AF6AD59C42FB55270ACB2B23E /* ContextMenu.iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ContextMenu.iOS-dummy.m"; sourceTree = ""; }; + A3DD0EFB7526AAEF47D57854AEE0AE42 /* PFPushManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushManager.h; path = Parse/Internal/Push/Manager/PFPushManager.h; sourceTree = ""; }; + A3E9F37A09B03FA6BC992D2C8F8E7B3A /* PFPropertyInfo_Runtime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo_Runtime.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m; sourceTree = ""; }; A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libpop.a; sourceTree = BUILT_PRODUCTS_DIR; }; - A5170E55DE35501B4A713A17711AA0A0 /* PFConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfig.m; path = Parse/PFConfig.m; sourceTree = ""; }; - A51A35330B4AB677C74A6579FC025B7C /* PFOfflineObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineObjectController.h; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h; sourceTree = ""; }; - A543A68D1F635C787AFF440419B704A2 /* PFAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAlertView.h; path = Parse/Internal/PFAlertView.h; sourceTree = ""; }; - A544D2F0BE5B4B49B319A783BAC77F80 /* PFMutableQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableQueryState.m; path = Parse/Internal/Query/State/PFMutableQueryState.m; sourceTree = ""; }; - A57B413BD6BA1EA23004CBF88974B886 /* PFConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfigController.m; path = Parse/Internal/Config/Controller/PFConfigController.m; sourceTree = ""; }; - A5BBD08523DDF7DFF2711114FC722A5E /* PFImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImageView.h; path = ParseUI/Classes/Views/PFImageView.h; sourceTree = ""; }; - A5E89E9F5A5618CE7965C7807CC99B95 /* PFRESTObjectBatchCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectBatchCommand.h; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.h; sourceTree = ""; }; - A631F9A0F687BDDBC873BA5813B8D674 /* PFPropertyInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo.m; sourceTree = ""; }; - A72EE5253DC8D7B55D95796E6F4F6DD3 /* PFUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserController.h; path = Parse/Internal/User/Controller/PFUserController.h; sourceTree = ""; }; - A81137DE4CAF25A53FED9F979106F428 /* PFRESTCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand.h; path = Parse/Internal/Commands/PFRESTCommand.h; sourceTree = ""; }; - A8718EC782F1DDBEAC83251BEA9043B4 /* PFTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTableViewCell.m; path = ParseUI/Classes/Cells/PFTableViewCell.m; sourceTree = ""; }; - A88B9D7B7216A9C1E1312C4CBC71128F /* libBolts.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBolts.a; sourceTree = BUILT_PRODUCTS_DIR; }; - A8C983DB75FAE0BEF68EC8FAD134A4A8 /* PFAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAssert.h; path = Parse/Internal/PFAssert.h; sourceTree = ""; }; - A8D02A717544E8E472DDB654462BA93B /* PFUserConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserConstants.h; path = Parse/Internal/User/Constants/PFUserConstants.h; sourceTree = ""; }; - A8F222054463224431341AD45804A6AF /* PFMultiProcessFileLockController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLockController.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h; sourceTree = ""; }; - A97DD8424AA6D29A671297332ADC6CA1 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - AA2D73F6B555F385C9E33E7F424BBFE5 /* PFInternalUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInternalUtils.m; path = Parse/Internal/PFInternalUtils.m; sourceTree = ""; }; - AA922A41DD3C8A6F91E02EF0F731F0AB /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; - AAC3249989EA908FBA78700563472204 /* PFFileDataStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileDataStream.m; path = Parse/Internal/File/FileDataStream/PFFileDataStream.m; sourceTree = ""; }; - AAF064AE7675931E4027B1B48FAC0E0E /* PFCommandCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache.h; path = Parse/Internal/PFCommandCache.h; sourceTree = ""; }; - AC7C43830B8D324B7BDFBFD2376A6F01 /* PFPropertyInfo_Runtime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo_Runtime.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m; sourceTree = ""; }; - AC969BF0B09B32631651A85209580443 /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; - AD21854D02782DB6A5EB737BB86B1861 /* PFPinningEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningEventuallyQueue.m; path = Parse/Internal/PFPinningEventuallyQueue.m; sourceTree = ""; }; - AD362A7EBE3D2E2936C281C50AC04997 /* PFURLSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h; sourceTree = ""; }; - AD697B984E89B4847323B087964A48EA /* PFFileState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState_Private.h; path = Parse/Internal/File/State/PFFileState_Private.h; sourceTree = ""; }; - AD6BEE4FF1F262959DD604F6DFDBAE3B /* PFKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeychainStore.m; path = Parse/Internal/PFKeychainStore.m; sourceTree = ""; }; - AE63CC96E753C252BF25110D864F48EF /* PFACLPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLPrivate.h; path = Parse/Internal/ACL/PFACLPrivate.h; sourceTree = ""; }; - AECDAF19F1A734986EF3B6CEE0E5C285 /* PFPushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushState.m; path = Parse/Internal/Push/State/PFPushState.m; sourceTree = ""; }; - AEEB033EF7B91BE4441AF7756D696170 /* PFRESTObjectCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectCommand.h; path = Parse/Internal/Commands/PFRESTObjectCommand.h; sourceTree = ""; }; - AF2FAD7A53F3AACF9B492617ABD3B62F /* PFSubclassing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSubclassing.h; path = Parse/PFSubclassing.h; sourceTree = ""; }; - AF40A6B842E8FD9BC950FE00DC5B6F40 /* PFObjectConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectConstants.h; path = Parse/Internal/Object/Constants/PFObjectConstants.h; sourceTree = ""; }; + A4789A83A8E8466FA58F653DDBFF071E /* PFTextButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTextButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFTextButton.m; sourceTree = ""; }; + A4964D13641870CA9C49B9AC5CE300AA /* ParseUI-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ParseUI-prefix.pch"; sourceTree = ""; }; + A5B09E102D7D249A4B19FBB0355D180F /* PFObject+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFObject+Subclass.h"; path = "Parse/PFObject+Subclass.h"; sourceTree = ""; }; + A5B9BCF180F3871EB64CDA5D298A60A7 /* PFCloudCodeController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloudCodeController.m; path = Parse/Internal/CloudCode/PFCloudCodeController.m; sourceTree = ""; }; + A60D18FA5E274DB64A5436B779B53C51 /* PFCollectionViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCollectionViewCell.h; path = ParseUI/Classes/Cells/PFCollectionViewCell.h; sourceTree = ""; }; + A6130721BBB130E46530627B2D84D660 /* PFMutableACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableACLState.h; path = Parse/Internal/ACL/State/PFMutableACLState.h; sourceTree = ""; }; + A6480F5708187FF764D171B4114704BA /* PFDismissButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDismissButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.m; sourceTree = ""; }; + A6B3A97E636348CCC00FE524D7C505E6 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; + A895901B4938323EF02B5D3624AFFAAB /* PFMutableFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableFileState.h; path = Parse/Internal/File/State/PFMutableFileState.h; sourceTree = ""; }; + A8E3915520E965F9E617BF1A8C36B1C6 /* YALContextMenuCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YALContextMenuCell.h; path = YALContextMenu/YALContextMenuCell.h; sourceTree = ""; }; + A8F3DC227BF67D356F69321EFB5BC8C3 /* PFAnonymousAuthenticationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousAuthenticationProvider.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h; sourceTree = ""; }; + AA761E5A8CDC7B23E7D53C6F2B370465 /* PFPushController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushController.m; path = Parse/Internal/Push/Controller/PFPushController.m; sourceTree = ""; }; + AAF52DC207128EA0274EF4CDA535FFFA /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; + AB191AAD1EBC1DBC7BBC4374B8D95BFC /* PFCommandRunning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunning.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.m; sourceTree = ""; }; + AB5AA67ADB7D0C7FA8D41D64158DB24B /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; + AB6325C6084DFA24E8A1FAF7618F5248 /* AFNetworking.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.xcconfig; sourceTree = ""; }; + AB6D645DB24B0161496C79BCE1E62F88 /* PFFileDataStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileDataStream.h; path = Parse/Internal/File/FileDataStream/PFFileDataStream.h; sourceTree = ""; }; + AC9C8279188AB5D0074C2A37F359A028 /* PFImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImage.h; path = ParseUI/Classes/Internal/Extensions/PFImage.h; sourceTree = ""; }; + AD02C69252DD7786D721C61B2B976AA5 /* PFRESTUserCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTUserCommand.h; path = Parse/Internal/Commands/PFRESTUserCommand.h; sourceTree = ""; }; + AD19046439D557B46077E96FE583C11B /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+AFNetworking.m"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.m"; sourceTree = ""; }; + AD35F054FD3FBA08C0C1A4E0D696BF27 /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; + AD6E4A746B24C276099087A9EBAEF713 /* PFObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectControlling.h; path = Parse/Internal/Object/Controller/PFObjectControlling.h; sourceTree = ""; }; + ADE317F890D27E4E39356AA9D6BFB4C8 /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; + AE193C9847EDFDD5761A418126698F11 /* NSDate+TimeAgo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSDate+TimeAgo-dummy.m"; sourceTree = ""; }; + AE8117874FB6AE79F6EE0B2845297948 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + AEBC2122738345FE4B4B804795532339 /* PFRESTUserCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTUserCommand.m; path = Parse/Internal/Commands/PFRESTUserCommand.m; sourceTree = ""; }; + B03D3FA821F17169116EFE9F9BAA130F /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; + B08A07BDA7AE5470D8B41DFB55B1862A /* PFOfflineQueryLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryLogic.m; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m; sourceTree = ""; }; B0CE575CDDE0B1795BB8B88E0B49ACA0 /* POPDecayAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDecayAnimationInternal.h; path = pop/POPDecayAnimationInternal.h; sourceTree = ""; }; B0F7BCEE9A871E1193D694931FA31E17 /* POPDecayAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDecayAnimation.h; path = pop/POPDecayAnimation.h; sourceTree = ""; }; - B1214E8947EB72FF3291E4600C97D58F /* PFMutableUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableUserState.m; path = Parse/Internal/User/State/PFMutableUserState.m; sourceTree = ""; }; - B18E4523B7A2D3BA68FE05BE72681E02 /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; - B1C6CB67201095492AA37DBE54C06E7D /* PFCategoryLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCategoryLoader.h; path = Parse/Internal/PFCategoryLoader.h; sourceTree = ""; }; - B1D36F734A33A907E9958F6778F6D9B1 /* PFCurrentInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentInstallationController.m; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m; sourceTree = ""; }; - B2688E675D28E976EDC6B6AA84C41C84 /* PFActionButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActionButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m; sourceTree = ""; }; - B2726742F4F01872C36F74F3A273125E /* PFTextButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTextButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h; sourceTree = ""; }; - B2954F531D3634410AB8A04C01539733 /* Bolts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-prefix.pch"; sourceTree = ""; }; - B319964A3771774ECF35609A331A9AC6 /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; + B22BE2D73FB935E2CABC9BA2529BED84 /* PFPurchaseTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseTableViewCell.m; path = ParseUI/Classes/Cells/PFPurchaseTableViewCell.m; sourceTree = ""; }; B330BCF969EF6189E02E10926FB95CED /* POPGeometry.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPGeometry.mm; path = pop/POPGeometry.mm; sourceTree = ""; }; - B3C592B1563BAD172B026388C571DBE5 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; - B5076516C4CA52DBE232087A86EF876A /* PFApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFApplication.h; path = Parse/Internal/PFApplication.h; sourceTree = ""; }; - B539C1B5ED1A98FE70171B60D8186E32 /* PFQueryTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryTableViewController.h; path = ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h; sourceTree = ""; }; - B63D2BB991AB59607701D89CDA8174A8 /* PFObjectBatchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectBatchController.m; path = Parse/Internal/Object/BatchController/PFObjectBatchController.m; sourceTree = ""; }; - B6715EFDF271A27FBC8980E595A56F18 /* PFImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImage.h; path = ParseUI/Classes/Internal/Extensions/PFImage.h; sourceTree = ""; }; - B6CE6D85363B92C1CEFB2272C5148AFD /* PFMutablePushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutablePushState.m; path = Parse/Internal/Push/State/PFMutablePushState.m; sourceTree = ""; }; - B72B60C944C86664F4D05675D934FC68 /* PFRESTCommand_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand_Private.h; path = Parse/Internal/Commands/PFRESTCommand_Private.h; sourceTree = ""; }; - B7F9DB4E614C6F9EFC52811652A1D27F /* PFErrorUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFErrorUtilities.m; path = Parse/Internal/PFErrorUtilities.m; sourceTree = ""; }; - B84E7ADA66D7676BCB6F6E7FF2FD89EB /* PFMutableUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableUserState.h; path = Parse/Internal/User/State/PFMutableUserState.h; sourceTree = ""; }; - B8678F4D5E8E1A277EAFCB398356B491 /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; - B8FB92BD0F40B979678430FF43192D73 /* PFPush.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPush.m; path = Parse/PFPush.m; sourceTree = ""; }; - B9680BBDD9701CD4FEFECC8FBFF038F0 /* PFQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQuery.h; path = Parse/PFQuery.h; sourceTree = ""; }; - B99C240F89A7BC2E76B71472745234BA /* PFSQLiteDatabaseResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseResult.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h; sourceTree = ""; }; + B47967310CDF1B079052F1414ADCDCE6 /* PFQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQuery.h; path = Parse/PFQuery.h; sourceTree = ""; }; + B56CBAD19A2CD9BFF20F3051B4627A81 /* PFObjectSubclassingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassingController.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h; sourceTree = ""; }; + B60BA9ED4F0E275CBAC1E49013164AB8 /* BFDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFDefines.h; path = Bolts/Common/BFDefines.h; sourceTree = ""; }; + B66C2B04AD0EF565A1AA8CE88C5E38CF /* Bolts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-prefix.pch"; sourceTree = ""; }; + B67C35C1DABD028393D277EEE5D3B7C9 /* PFSQLiteStatement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteStatement.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h; sourceTree = ""; }; + B764BD498C359AAFC3E6F6AAC3D3E85C /* PFPush.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPush.h; path = Parse/PFPush.h; sourceTree = ""; }; + B76855B1BBA027169AC8CEF90FF17F48 /* PFRESTFileCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTFileCommand.h; path = Parse/Internal/Commands/PFRESTFileCommand.h; sourceTree = ""; }; + B78A26BF250CCDBE634934404921965F /* PFErrorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFErrorUtilities.h; path = Parse/Internal/PFErrorUtilities.h; sourceTree = ""; }; + B7A955E7740A7339D23B5304005393AB /* PFOfflineObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineObjectController.h; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h; sourceTree = ""; }; + B7B68993FB16678C2C1A6EACD54BB72B /* PFCommandURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandURLRequestConstructor.h; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h; sourceTree = ""; }; + B82BDF2DB2AF3004F43B1A3A57997473 /* Bolts-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Bolts-Private.xcconfig"; sourceTree = ""; }; + B82D05CA95E5FD6D9B9ED444391C47C3 /* PFObjectSubclassInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassInfo.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h; sourceTree = ""; }; + B83D35381795B5966D20FFC3550C1B12 /* PFOfflineStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineStore.h; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h; sourceTree = ""; }; + B86BF1E7407A2BDBFF2DE2E9884D4D33 /* PFFieldOperationDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperationDecoder.m; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.m; sourceTree = ""; }; + B8864C84EAA3037F155A3B69D9EF0CE9 /* PFInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationController.m; path = Parse/Internal/Installation/Controller/PFInstallationController.m; sourceTree = ""; }; + B920F18145A654521BE7EC602D2C657F /* PFSignUpViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSignUpViewController.h; path = ParseUI/Classes/SignUpViewController/PFSignUpViewController.h; sourceTree = ""; }; + B9CF96CC1BC79AB5D74851B61A45BB4C /* PFColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFColor.m; path = ParseUI/Classes/Internal/Extensions/PFColor.m; sourceTree = ""; }; + B9E000B981FCF33ACCC4AA76FEEECA97 /* PFCloud.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloud.h; path = Parse/PFCloud.h; sourceTree = ""; }; + B9EEFB0E13911BFE92BB019AF38E77F0 /* PFBaseState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBaseState.m; path = Parse/Internal/PFBaseState.m; sourceTree = ""; }; + B9FC365A77E509F76B58419DED13E66C /* ParseUI.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ParseUI.xcconfig; sourceTree = ""; }; BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - BADE09B4EF587C0DCFC3F014B3DD1767 /* PFHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHash.h; path = Parse/Internal/PFHash.h; sourceTree = ""; }; - BC83DB2D364DF47142AB2F90071DA9F5 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; - BCF178329E80A7C9788F12D35E84DE11 /* PFCommandRunning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunning.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.h; sourceTree = ""; }; - BDF771A5145C765EE70F40CEBF7C3075 /* PFProductTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductTableViewController.h; path = ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h; sourceTree = ""; }; - BEAFF13EAEE726C139773BE3860F7AB6 /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLConnectionOperation.m; path = AFNetworking/AFURLConnectionOperation.m; sourceTree = ""; }; - BED41B8E7F85EE8E67A39865C037C805 /* PFEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue.h; path = Parse/Internal/PFEventuallyQueue.h; sourceTree = ""; }; - BF2B0A2A499B1873CEA684566E8B5487 /* PFMulticastDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMulticastDelegate.m; path = Parse/Internal/PFMulticastDelegate.m; sourceTree = ""; }; + BAD1F9D81611626BD9723EB565D74B20 /* PFPaymentTransactionObserver_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver_Private.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h; sourceTree = ""; }; + BB484A1B11E7D45733E48B6F3BE5BD4E /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; + BBC75424DFC187C0863492C5D31BA77F /* PFHTTPURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHTTPURLRequestConstructor.m; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m; sourceTree = ""; }; + BBF93E03EBDFC9B6835A33DC14AC39C1 /* PFRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelationState.m; path = Parse/Internal/Relation/State/PFRelationState.m; sourceTree = ""; }; + BD1F1D739696559ABE05CEB48AD2751C /* PFFile_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile_Private.h; path = Parse/Internal/File/PFFile_Private.h; sourceTree = ""; }; + BD6916DD548BBEF982E129D4ADCA50C4 /* PFAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics.h; path = Parse/PFAnalytics.h; sourceTree = ""; }; + BE051BD21600FDC3BEEEC4FD728B4870 /* PFTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTaskQueue.h; path = Parse/Internal/PFTaskQueue.h; sourceTree = ""; }; + BEEC2786704C942940CD10E3F749CEE4 /* PFAnalytics_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics_Private.h; path = Parse/Internal/Analytics/PFAnalytics_Private.h; sourceTree = ""; }; + BF2B791839A7CAAE79D6FB65AB7CAA27 /* PFResources.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFResources.h; path = ParseUI/Generated/PFResources.h; sourceTree = ""; }; BF59BC15D23E1E1912C8F334E7236813 /* Pods-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-acknowledgements.plist"; sourceTree = ""; }; - BFA480ECE7F710752C7409F5C380B0F8 /* PFRole.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRole.h; path = Parse/PFRole.h; sourceTree = ""; }; - C04DABE57BA79040087CCBBA081B3616 /* PFObjectLocalIdStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectLocalIdStore.h; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h; sourceTree = ""; }; - C074D541BD181F718CABF5FB5728F620 /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; + BF8EF50423B482FDAD56806BC1ED5F03 /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; + C00D0192F700B20E64D2594418007E71 /* PFSQLiteDatabaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseController.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h; sourceTree = ""; }; + C05E8CDA29F1EE876CB9E6445F045060 /* PFQueryTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryTableViewController.h; path = ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h; sourceTree = ""; }; + C0625D4FC52B190467EDBD198B7A70E0 /* PFSessionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionController.m; path = Parse/Internal/Session/Controller/PFSessionController.m; sourceTree = ""; }; C091E831068E3E504A40AC6932B39C87 /* FloatConversion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FloatConversion.h; path = pop/WebCore/FloatConversion.h; sourceTree = ""; }; - C0CF8725DD1DD49BE8D6A0907238EA04 /* PFEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyQueue.m; path = Parse/Internal/PFEventuallyQueue.m; sourceTree = ""; }; + C0961B8F6EB8D027464FFB57A6CDE37B /* PFPropertyInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo.h; sourceTree = ""; }; + C0B0F0D29938228204FD8B3B73B0574C /* PFPushChannelsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushChannelsController.h; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.h; sourceTree = ""; }; C0DF3C83EBC5F7BF6DAAACEBD7D72791 /* POPAnimationEvent.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationEvent.mm; path = pop/POPAnimationEvent.mm; sourceTree = ""; }; - C11D9DEA5457F8EBBADB980FD16BFF7B /* PFCurrentConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentConfigController.h; path = Parse/Internal/Config/Controller/PFCurrentConfigController.h; sourceTree = ""; }; - C157642B668892E40497C6E7E543A2FC /* AFNetworking-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AFNetworking-Private.xcconfig"; sourceTree = ""; }; - C16B1F4CA93F9A1D3CD11DFF0FE20F8D /* PFObjectController_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController_Private.h; path = Parse/Internal/Object/Controller/PFObjectController_Private.h; sourceTree = ""; }; + C132AB5B9FFEB4B7F934CA87D3455638 /* PFFieldOperationDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperationDecoder.h; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.h; sourceTree = ""; }; + C1B5D8065E12E7D99BD7C432E1F25EFF /* PFLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocationManager.h; path = Parse/Internal/PFLocationManager.h; sourceTree = ""; }; C1B6A53BFD919966B87CD6FBFD89CE1B /* POPAnimationExtras.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationExtras.h; path = pop/POPAnimationExtras.h; sourceTree = ""; }; - C1D8402E147FF6607379D3B631C593FB /* PFAnalyticsUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsUtilities.m; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m; sourceTree = ""; }; C1E27C3CBB149C1873F6CDC55D998CE2 /* POPAnimationTracer.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationTracer.mm; path = pop/POPAnimationTracer.mm; sourceTree = ""; }; - C2055953D9AE502AA512CC756C8E07B8 /* PFHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPRequest.h; path = Parse/Internal/HTTPRequest/PFHTTPRequest.h; sourceTree = ""; }; - C213AD7370FD716E3010F4CCDE4BE681 /* ParseUI-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ParseUI-Private.xcconfig"; sourceTree = ""; }; - C235A6B7A110CC5F4093F80159287E17 /* PFSQLiteDatabaseResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseResult.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m; sourceTree = ""; }; + C22A26B6D2BCD459FB68D14D2F857B95 /* Parse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Parse.m; path = Parse/Parse.m; sourceTree = ""; }; C24554FAA71D841BC3C0759DA37874AE /* POPSpringAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPSpringAnimation.mm; path = pop/POPSpringAnimation.mm; sourceTree = ""; }; - C29500E205220EB8DB49F1C825FADA89 /* PFRESTConfigCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTConfigCommand.h; path = Parse/Internal/Commands/PFRESTConfigCommand.h; sourceTree = ""; }; - C2A808722282E883FC6468CC1082F40D /* PFAnonymousUtils_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils_Private.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h; sourceTree = ""; }; - C398F4947CB112102A0ADF8368272495 /* UIView+YALConstraints.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+YALConstraints.m"; path = "YALContextMenu/UIView+YALConstraints.m"; sourceTree = ""; }; - C40BCF6A4E2863E61431A31D979EE9C9 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; - C41C99E60696D54F31E9D4B990F0B0B3 /* PFRESTAnalyticsCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTAnalyticsCommand.h; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.h; sourceTree = ""; }; - C5603815F5CC7760F94208FF90B5488C /* PFPushChannelsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushChannelsController.h; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.h; sourceTree = ""; }; + C2645D21C07B6F69240D9A4D983E983A /* PFRESTCommand_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand_Private.h; path = Parse/Internal/Commands/PFRESTCommand_Private.h; sourceTree = ""; }; + C3377FCED75EFA8411F46FCAB569CA0B /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + C33C2231FB26FF9D31434434633A6CD8 /* ContextMenu.iOS-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ContextMenu.iOS-Private.xcconfig"; sourceTree = ""; }; + C481F602B57BFE1DE599333C1792C70C /* PFPushController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushController.h; path = Parse/Internal/Push/Controller/PFPushController.h; sourceTree = ""; }; + C4EAF8CE8527EE11C36B8F62C1BBF5B2 /* PFPurchaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseController.m; path = Parse/Internal/Purchase/Controller/PFPurchaseController.m; sourceTree = ""; }; C560616DDF5273CF7C53EF72EA6ED45A /* POPDecayAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPDecayAnimation.mm; path = pop/POPDecayAnimation.mm; sourceTree = ""; }; - C5ADC6D84457794AAF2D20A45BAD22C5 /* PFCurrentUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentUserController.h; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.h; sourceTree = ""; }; - C5CBEAEA564EF7FD09CFE53392CC6424 /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLConnectionOperation.h; path = AFNetworking/AFURLConnectionOperation.h; sourceTree = ""; }; - C61F7888A611C849888C8333EB005699 /* PFACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState.h; path = Parse/Internal/ACL/State/PFACLState.h; sourceTree = ""; }; - C69C27BDBB8B1E63677A91477C52FDA5 /* PFEventuallyPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyPin.m; path = Parse/Internal/PFEventuallyPin.m; sourceTree = ""; }; - C8BC0FA6F2C382BF336FF4ECE47C192B /* PFObjectFileCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCoder.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.m; sourceTree = ""; }; - C917E75AADCC6DB455A54504481914C6 /* UIAlertView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAlertView+AFNetworking.h"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.h"; sourceTree = ""; }; + C74596AC3E38A52329D1EEE95C27275B /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + C784CC8E8064EF5D1B9368F61DC7624B /* Parse-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Parse-Private.xcconfig"; sourceTree = ""; }; + C8DD85BA4B5FA2130F3376B7CF1B1123 /* PFRESTFileCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTFileCommand.m; path = Parse/Internal/Commands/PFRESTFileCommand.m; sourceTree = ""; }; + C8E059CFE74839A889EB31D430030D25 /* PFUserFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserFileCodingLogic.m; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m; sourceTree = ""; }; + C9363231E632CCDB302D43B8FF481641 /* PFCachedQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCachedQueryController.h; path = Parse/Internal/Query/Controller/PFCachedQueryController.h; sourceTree = ""; }; + C93F4D18AA8D974173385F0F766E7DB6 /* PFPushUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushUtilities.m; path = Parse/Internal/Push/Utilites/PFPushUtilities.m; sourceTree = ""; }; C9565C73D5D4BE79747E60DCF1557E71 /* POPAnimatableProperty.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimatableProperty.mm; path = pop/POPAnimatableProperty.mm; sourceTree = ""; }; - C9DD09269903183CC67B8C5718D9BE7F /* AFNetworking.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.xcconfig; sourceTree = ""; }; - C9EF79160C35E4B837E7EBBF7C95D158 /* PFSignUpViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSignUpViewController.m; path = ParseUI/Classes/SignUpViewController/PFSignUpViewController.m; sourceTree = ""; }; - C9F6E5345A39FC5550216E4F65A976B0 /* PFSQLiteDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase_Private.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h; sourceTree = ""; }; - CA749ACCAF73A8469072D11F78DA1FDA /* PFMutableObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableObjectState.h; path = Parse/Internal/Object/State/PFMutableObjectState.h; sourceTree = ""; }; - CB295B33B0FC530FD77C52FEB400203E /* PFCloud.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloud.m; path = Parse/PFCloud.m; sourceTree = ""; }; - CB50B697271E10AC0A2FFC3D43C3AD6D /* PFSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession_Private.h; path = Parse/Internal/Session/PFSession_Private.h; sourceTree = ""; }; - CB6B147735D1F716FC2CE4332F65D798 /* PFApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFApplication.m; path = Parse/Internal/PFApplication.m; sourceTree = ""; }; - CBC8CC7D9B59534667A62E84BF1C8B31 /* PFObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState.h; path = Parse/Internal/Object/State/PFObjectState.h; sourceTree = ""; }; - CC4DDA9182F4F5C704598B6E722CDC50 /* PFLocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLocationManager.m; path = Parse/Internal/PFLocationManager.m; sourceTree = ""; }; - CC980D88098DADD0C68CCE0CC413730A /* PFURLConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLConstructor.m; path = Parse/Internal/HTTPRequest/PFURLConstructor.m; sourceTree = ""; }; - CCE6D23A84D4E85A3CD15B802A7AE4CE /* PFOperationSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOperationSet.h; path = Parse/Internal/Object/OperationSet/PFOperationSet.h; sourceTree = ""; }; - CD1B49F66FFBB4AD6CCEC0A90A66D326 /* UIAlertView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAlertView+AFNetworking.m"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.m"; sourceTree = ""; }; - CDB5EF0EC43B47E829CDC47DBC09A531 /* PFBase64Encoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBase64Encoder.m; path = Parse/Internal/PFBase64Encoder.m; sourceTree = ""; }; - CDF42DAF3471B27B84DD07F1A7E3391C /* PFTextField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTextField.m; path = ParseUI/Classes/Views/PFTextField.m; sourceTree = ""; }; - CF1F38521C14DBB0BD9845FBEBA5D9CC /* PFPurchaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseController.h; path = Parse/Internal/Purchase/Controller/PFPurchaseController.h; sourceTree = ""; }; - CF7F21D5332C89148FDF4E4644891872 /* BoltsVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BoltsVersion.h; path = Bolts/Common/BoltsVersion.h; sourceTree = ""; }; - D16A398DDB303A767A2CF933083655C3 /* PFCachedQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCachedQueryController.h; path = Parse/Internal/Query/Controller/PFCachedQueryController.h; sourceTree = ""; }; - D292B318B83D8D026CD2FAAAB59A62D9 /* PFURLSessionCommandRunner_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h; sourceTree = ""; }; - D31C147B6E9BBE54DE19804E1F7CC396 /* PFThreadsafety.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFThreadsafety.m; path = Parse/Internal/ThreadSafety/PFThreadsafety.m; sourceTree = ""; }; - D39AAA20779A11314DE3292353142A99 /* PFCommandResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandResult.m; path = Parse/Internal/PFCommandResult.m; sourceTree = ""; }; - D43B8CFF328D2BE6C9755924B181CF2F /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; - D44289371FAC5C4BED0F2F71337214A6 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; - D497EB0E3C5055E7FFF959587818764C /* PFCommandResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandResult.h; path = Parse/Internal/PFCommandResult.h; sourceTree = ""; }; - D4C9535D0DCC9CEAF41CAB114CBAC573 /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; - D52EE0139EA03EDDE83AA9D9685536FB /* PFURLSessionUploadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionUploadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m; sourceTree = ""; }; + CA85A35D3284525FAED1D82CC5689615 /* ParseModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseModule.h; path = Parse/Internal/ParseModule.h; sourceTree = ""; }; + CAAD75E8BD1581901916F81E5AB5A408 /* PFRESTPushCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTPushCommand.h; path = Parse/Internal/Commands/PFRESTPushCommand.h; sourceTree = ""; }; + CACE127E057ACF033A0A59A4B62F36E0 /* PFAnalyticsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsController.h; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.h; sourceTree = ""; }; + CBA01F49A1922ACA40EC02A9A5B8670B /* PFURLConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLConstructor.m; path = Parse/Internal/HTTPRequest/PFURLConstructor.m; sourceTree = ""; }; + CC3B217F18416097DEE13AF10B1ECA76 /* PFObjectFileCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCoder.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.h; sourceTree = ""; }; + CD79AE4112C859207DA0A0196FABC894 /* PFPushManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushManager.m; path = Parse/Internal/Push/Manager/PFPushManager.m; sourceTree = ""; }; + CDC26E1A3CDFBE282F2AA32E09691A43 /* PFHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHash.h; path = Parse/Internal/PFHash.h; sourceTree = ""; }; + CE69D782F43B9CDA9A38BC2A313170E2 /* PFDateFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDateFormatter.h; path = Parse/Internal/PFDateFormatter.h; sourceTree = ""; }; + CE7C6284381EBD662B525CB0AAB3B153 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; + CEEEE6B9BBA8A28BB12A34BD43305359 /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; + D0174B42952D90F56EA0F2648DDE8091 /* PFCurrentConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentConfigController.h; path = Parse/Internal/Config/Controller/PFCurrentConfigController.h; sourceTree = ""; }; + D027CB4166C718582F41DDA6A2F623B8 /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; + D04EB33EA81B58280CA75C26B353CC2E /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; + D05E9DBB723E92608165F48E9AF64F3A /* PFSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSession.m; path = Parse/PFSession.m; sourceTree = ""; }; + D06FB7493A3B6A4C5285B464F48A9A14 /* PFUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserState.m; path = Parse/Internal/User/State/PFUserState.m; sourceTree = ""; }; + D0BA59EE37D1B06B78227EBCA6D326C7 /* ParseInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseInternal.h; path = Parse/Internal/ParseInternal.h; sourceTree = ""; }; + D113D54E2E25899C9BA785E8FC922DF5 /* PFObjectPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectPrivate.h; path = Parse/Internal/Object/PFObjectPrivate.h; sourceTree = ""; }; + D11E630B16ABE653A770F783B46F066E /* PFUIAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUIAlertView.h; path = ParseUI/Classes/Internal/Extensions/PFUIAlertView.h; sourceTree = ""; }; + D179BA1822848A6F5E22C30B8DA415E5 /* PFInternalUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInternalUtils.m; path = Parse/Internal/PFInternalUtils.m; sourceTree = ""; }; + D1883197CB1BD7E2C04D44DEB54AE998 /* libContextMenu.iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libContextMenu.iOS.a; sourceTree = BUILT_PRODUCTS_DIR; }; + D1A712EAFDE8F1E77A0E62A0AEE3A4FD /* Parse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse.h; path = Parse/Parse.h; sourceTree = ""; }; + D2D2B345A8F9F89101865ADDD108B736 /* PFObjectEstimatedData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectEstimatedData.h; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h; sourceTree = ""; }; + D352CEC5576C01E8BE60AEAD74D531CB /* PFACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState.h; path = Parse/Internal/ACL/State/PFACLState.h; sourceTree = ""; }; + D45B424C56418F8D74C78DACDA406B53 /* PFProductTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductTableViewController.h; path = ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h; sourceTree = ""; }; + D460C6EF4CF1DD775DBB020A78CF5DA4 /* PFRole.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRole.h; path = Parse/PFRole.h; sourceTree = ""; }; + D50C646DA41493735AF1C4DB86891753 /* PFObjectLocalIdStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectLocalIdStore.h; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h; sourceTree = ""; }; + D57EDFC44E568CFD0246659F492273A7 /* PFFileController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileController.m; path = Parse/Internal/File/Controller/PFFileController.m; sourceTree = ""; }; + D597CC380B1F76815385F7A6310DE56C /* PFPushState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState_Private.h; path = Parse/Internal/Push/State/PFPushState_Private.h; sourceTree = ""; }; D5CE48778301C24CD288B08DDA441605 /* POPVector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPVector.h; path = pop/POPVector.h; sourceTree = ""; }; - D6974501F00D5E601A051C644A12DD71 /* PFTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTableViewCell.h; path = ParseUI/Classes/Cells/PFTableViewCell.h; sourceTree = ""; }; - D70110CA542D79C645FCD20E2C9674AB /* PFPushState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState_Private.h; path = Parse/Internal/Push/State/PFPushState_Private.h; sourceTree = ""; }; - D74E2E4235E9688B273C0714402DEADB /* PFAnalyticsUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsUtilities.h; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h; sourceTree = ""; }; - D7CBDA2EC1FB8FB11CC6A2C5C9808D47 /* PFRESTObjectCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectCommand.m; path = Parse/Internal/Commands/PFRESTObjectCommand.m; sourceTree = ""; }; - D96C8C02AE822A3F03B68FAA6D594497 /* PFJSONSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFJSONSerialization.h; path = Parse/Internal/PFJSONSerialization.h; sourceTree = ""; }; - D979F925569BC22D42FF30FE4C67B4E3 /* Parse.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Parse.xcconfig; sourceTree = ""; }; - D9E009FDFD4D025A77485806D951F056 /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; - DA89BE341EEC7242A78FEDA064807901 /* PFPurchaseTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseTableViewCell.m; path = ParseUI/Classes/Cells/PFPurchaseTableViewCell.m; sourceTree = ""; }; - DAC0B4DB266A15A3A61A62142BDA7069 /* PFMutableACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableACLState.h; path = Parse/Internal/ACL/State/PFMutableACLState.h; sourceTree = ""; }; - DAC1022DF912D32448DE24E2472BD2EB /* PFGeoPointPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPointPrivate.h; path = Parse/Internal/PFGeoPointPrivate.h; sourceTree = ""; }; - DBC82AC944CB7F585939AB9589D4F9B4 /* PFPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPin.h; path = Parse/Internal/LocalDataStore/Pin/PFPin.h; sourceTree = ""; }; - DBD6939AC0C49B37416ADF296729C43E /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; - DC073136FD3869B2BB9A9D30587BE1DD /* PFPurchase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchase.m; path = Parse/PFPurchase.m; sourceTree = ""; }; - DC8B8475B2B05D335E837929C3ABB2AD /* PFUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUser.h; path = Parse/PFUser.h; sourceTree = ""; }; - DD2C8034413D050CB11771F958F248F1 /* ContextMenu.iOS-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ContextMenu.iOS-Private.xcconfig"; sourceTree = ""; }; - DD64D76CC193A68DABCF84C619EFCFC8 /* PFRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState.h; path = Parse/Internal/Relation/State/PFRelationState.h; sourceTree = ""; }; - DD82088840AAB58D0F5243C0230D17B8 /* PFCategoryLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCategoryLoader.m; path = Parse/Internal/PFCategoryLoader.m; sourceTree = ""; }; - DF6863C55207FC14F127AB7F8E41415A /* PFPushController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushController.m; path = Parse/Internal/Push/Controller/PFPushController.m; sourceTree = ""; }; - DFB79D7DC036E7A8C84740F1E542074B /* PFLocalization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocalization.h; path = ParseUI/Classes/Internal/PFLocalization.h; sourceTree = ""; }; - DFC41E4010D852E3977AF17A221CF0CA /* PFFileDataStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileDataStream.h; path = Parse/Internal/File/FileDataStream/PFFileDataStream.h; sourceTree = ""; }; - DFC690133F99B68E1F8CE7784769EF36 /* PFResources.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFResources.h; path = ParseUI/Generated/PFResources.h; sourceTree = ""; }; - E04C49F5564B931B972E6F826A732529 /* PFUserFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserFileCodingLogic.m; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m; sourceTree = ""; }; - E16AA8270CAF5EA08D00D8A1D14F2059 /* PFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFNetworkActivityIndicatorManager.m; path = Parse/PFNetworkActivityIndicatorManager.m; sourceTree = ""; }; - E2143F74B5AD9A40EA532F839BD3B314 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; - E23709D1E2B358163967F34AC4683834 /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; - E28AF701482179FE07EE17023210453F /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; - E2B8566040F468B4AED32A8BCB27E12A /* PFObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectState.m; path = Parse/Internal/Object/State/PFObjectState.m; sourceTree = ""; }; - E2CA6C46BBB76A49C80830DB49B9FFF5 /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; - E31FED7E103689AA50C7795F772BDA23 /* PFOfflineStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineStore.h; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h; sourceTree = ""; }; - E495F30B2C591E5AD9A1CC249901ACD2 /* PFPropertyInfo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Private.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h; sourceTree = ""; }; - E504BFBB2DBF9126FAB2DC1F339CB325 /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; - E557ABF7F7687DC7DFF115D7F62AEDA5 /* Parse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse.h; path = Parse/Parse.h; sourceTree = ""; }; - E615EEC282CDCEE0D432D51BEA8F872B /* PFInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationController.h; path = Parse/Internal/Installation/Controller/PFInstallationController.h; sourceTree = ""; }; - E6B87160188F7023D2B49F9B91DBAB94 /* PFBase64Encoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBase64Encoder.h; path = Parse/Internal/PFBase64Encoder.h; sourceTree = ""; }; - E6C8C116B56F8D1B7AB62768527EC072 /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperation.h; path = AFNetworking/AFHTTPRequestOperation.h; sourceTree = ""; }; - E72971E8203922C334379D6EF46D2C3A /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperationManager.h; path = AFNetworking/AFHTTPRequestOperationManager.h; sourceTree = ""; }; - E74884D5A2FE748F09D5B9232A56C7CE /* PFInstallationIdentifierStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationIdentifierStore.m; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m; sourceTree = ""; }; + D65BBCBB056DB6879DFF0EB12E1C804B /* PFUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUser.h; path = Parse/PFUser.h; sourceTree = ""; }; + D6A7AC20B273C8BB63EE48D7133CC688 /* PFLoadingView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLoadingView.h; path = ParseUI/Classes/Internal/Views/PFLoadingView.h; sourceTree = ""; }; + D7A540D0D3BC4B77A4D4F180D8F895E0 /* PFPaymentTransactionObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h; sourceTree = ""; }; + D80FF4E9773DE13DB3A24674C2396EA3 /* PFProduct+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFProduct+Private.h"; path = "Parse/Internal/Product/PFProduct+Private.h"; sourceTree = ""; }; + D8F85E50534D30E21F4AC22033441BCE /* PFMutableObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableObjectState.h; path = Parse/Internal/Object/State/PFMutableObjectState.h; sourceTree = ""; }; + D94636BF02BBCA2A6CDF6B77EAA004E5 /* PFRESTAnalyticsCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTAnalyticsCommand.m; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.m; sourceTree = ""; }; + D9A6AF9360C12CA1241B412833DCBA5B /* PFObjectFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCodingLogic.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h; sourceTree = ""; }; + DA363A0EBAA203BF300BB8AEA7B58092 /* PFRESTPushCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTPushCommand.m; path = Parse/Internal/Commands/PFRESTPushCommand.m; sourceTree = ""; }; + DA62858D5B874C3F65A65F7E38634279 /* PFCurrentUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentUserController.h; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.h; sourceTree = ""; }; + DAB23904561CC53FA534F667038B5583 /* PFMulticastDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMulticastDelegate.h; path = Parse/Internal/PFMulticastDelegate.h; sourceTree = ""; }; + DC43B9A350143A165C3FF99564935EE4 /* PFPropertyInfo_Runtime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Runtime.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h; sourceTree = ""; }; + DD4F870028EAE1FD8D5AFDDD2470A748 /* PFPinningEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningEventuallyQueue.m; path = Parse/Internal/PFPinningEventuallyQueue.m; sourceTree = ""; }; + DD7CDF7009567C9D6394B695AF816E37 /* YALContextMenuTableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YALContextMenuTableView.m; path = YALContextMenu/YALContextMenuTableView.m; sourceTree = ""; }; + DDB175753057C1F0FFBE10AB7B0EEB27 /* PFEventuallyPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyPin.m; path = Parse/Internal/PFEventuallyPin.m; sourceTree = ""; }; + DDE8CA03E44D77EEEB65DF10666691F0 /* PFFileDataStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileDataStream.m; path = Parse/Internal/File/FileDataStream/PFFileDataStream.m; sourceTree = ""; }; + DDE935B0E49A17A9AAF9F1F3690617A3 /* PFEventuallyQueue_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue_Private.h; path = Parse/Internal/PFEventuallyQueue_Private.h; sourceTree = ""; }; + DE6932550272A874DBBD021837FF6C56 /* PFURLSessionJSONDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionJSONDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h; sourceTree = ""; }; + DEA8D28EC393D0CD87305636EBEEBE3B /* PFRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState.h; path = Parse/Internal/Relation/State/PFRelationState.h; sourceTree = ""; }; + DEF96384602363D9E140A3480CF1AE6C /* PFACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACLState.m; path = Parse/Internal/ACL/State/PFACLState.m; sourceTree = ""; }; + DF0466A4594D21314E63193491214681 /* PFObjectEstimatedData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectEstimatedData.m; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m; sourceTree = ""; }; + DF83BDFCCA994BD066517D629BC3DF51 /* PFMutableQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableQueryState.h; path = Parse/Internal/Query/State/PFMutableQueryState.h; sourceTree = ""; }; + E06E77181273CFD8A9E0A5A3A82A7982 /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperationManager.m; path = AFNetworking/AFHTTPRequestOperationManager.m; sourceTree = ""; }; + E075B22F58B1F8911EF93D169D51FC46 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; + E103621ACC460E7923231496DC5F9936 /* PFCommandRunning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunning.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.h; sourceTree = ""; }; + E1A0C52A07FAB18E39B89BFCE82A0E42 /* PFObjectController_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController_Private.h; path = Parse/Internal/Object/Controller/PFObjectController_Private.h; sourceTree = ""; }; + E1CC1609ED693F8AD00B3E0AC737E55D /* PFCoreManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreManager.h; path = Parse/Internal/PFCoreManager.h; sourceTree = ""; }; + E2008D080880260047ED152D6F5D84A8 /* PFMutableUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableUserState.h; path = Parse/Internal/User/State/PFMutableUserState.h; sourceTree = ""; }; + E2AD6BACBB024B2DB599C0AC72688BE5 /* PFReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFReachability.h; path = Parse/Internal/PFReachability.h; sourceTree = ""; }; + E34C5907954DA4C1892EDA643F95193C /* PFJSONSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFJSONSerialization.m; path = Parse/Internal/PFJSONSerialization.m; sourceTree = ""; }; + E3A3326F104E2444D64942174B3E37E0 /* PFLogInView_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInView_Private.h; path = ParseUI/Classes/LogInViewController/PFLogInView_Private.h; sourceTree = ""; }; + E44B0C9E0501BB1831C29E61F86CAB89 /* PFDefaultACLController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDefaultACLController.h; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h; sourceTree = ""; }; + E463344338E538D216FFACCAE0E518B8 /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; + E48C34CD5ED6562AF2C4DD6BBC5EF535 /* PFOfflineObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineObjectController.m; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m; sourceTree = ""; }; + E496375098ABBF2BD885E52BDC838A8A /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperationManager.h; path = AFNetworking/AFHTTPRequestOperationManager.h; sourceTree = ""; }; + E49D8072A840070C229A8656B766BCA1 /* PFMutableUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableUserState.m; path = Parse/Internal/User/State/PFMutableUserState.m; sourceTree = ""; }; + E49EF341DFF0A786D4F295ED85B33595 /* PFLogInView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInView.h; path = ParseUI/Classes/LogInViewController/PFLogInView.h; sourceTree = ""; }; + E4B0889630AFD4FEE22ACC8897E502BF /* PFDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDevice.m; path = Parse/Internal/PFDevice.m; sourceTree = ""; }; + E53EF9CF597991C40EFE4662D07B3C4D /* PFMutableRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableRelationState.m; path = Parse/Internal/Relation/State/PFMutableRelationState.m; sourceTree = ""; }; + E6D213C6D417643B9A833B0CCC4E1454 /* PFUserConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserConstants.h; path = Parse/Internal/User/Constants/PFUserConstants.h; sourceTree = ""; }; + E71489D04AFAE4B2A9234F74D89F8EDA /* PFInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallation.m; path = Parse/PFInstallation.m; sourceTree = ""; }; + E75B68DDAB9B54F1AAC191A9A508E1FE /* PFURLSessionCommandRunner_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h; sourceTree = ""; }; + E7CEB62B4EEA771ECDA804B34CBE5BEC /* PFQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryController.m; path = Parse/Internal/Query/Controller/PFQueryController.m; sourceTree = ""; }; + E7FA3706C8A417CF36509CA16FEE6E0D /* PFMultiProcessFileLockController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLockController.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h; sourceTree = ""; }; E85E0983DBE882A8009D0F7EAB591B91 /* POPAnimationRuntime.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationRuntime.mm; path = pop/POPAnimationRuntime.mm; sourceTree = ""; }; - E873F760B193DFBEF81E19B36B33FCED /* PFEventuallyQueue_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue_Private.h; path = Parse/Internal/PFEventuallyQueue_Private.h; sourceTree = ""; }; - E8F241847217017ADBC4283C2F8F469A /* PFPushManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushManager.h; path = Parse/Internal/Push/Manager/PFPushManager.h; sourceTree = ""; }; - EA487C07C0F804790F5993CF5E3C6D3F /* PFPushUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushUtilities.m; path = Parse/Internal/Push/Utilites/PFPushUtilities.m; sourceTree = ""; }; - EA5338250BCA80817AD4E8F779E085E1 /* ParseUI-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ParseUI-prefix.pch"; sourceTree = ""; }; - EB19AF401F51648EFC25CAA336AF77DA /* PFFieldOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperation.m; path = Parse/Internal/FieldOperation/PFFieldOperation.m; sourceTree = ""; }; + E8705BABE3C82AE3B0C16C1A41809C51 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; + E8A4616759870C960EB08032937E2E1C /* PFActionButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActionButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h; sourceTree = ""; }; + E92338ECA650704F11762548FC114CD4 /* PFTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTaskQueue.m; path = Parse/Internal/PFTaskQueue.m; sourceTree = ""; }; + E967305041BCBA1F811528239735DE21 /* PFDefaultACLController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDefaultACLController.m; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m; sourceTree = ""; }; + E9BFB88263F6AC941D8AEACDCA5BF2BA /* PFCommandResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandResult.h; path = Parse/Internal/PFCommandResult.h; sourceTree = ""; }; + E9F3197A789221BFB75AB57FA08CB469 /* PFQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryState.m; path = Parse/Internal/Query/State/PFQueryState.m; sourceTree = ""; }; EB56BE02F1B0412A41C9D9834B04BC30 /* POPSpringAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringAnimationInternal.h; path = pop/POPSpringAnimationInternal.h; sourceTree = ""; }; - EB8DC8124CEE001FB0DCB7332A0E4F5F /* PFCommandRunningConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunningConstants.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h; sourceTree = ""; }; - EBA5F64F36074059AACC0B7DACE6B378 /* PFPushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState.h; path = Parse/Internal/Push/State/PFPushState.h; sourceTree = ""; }; + EB78BBCA14653EA581EAC45B33B681E4 /* PFUserAuthenticationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationDelegate.h; path = Parse/PFUserAuthenticationDelegate.h; sourceTree = ""; }; + EBEAEFCA15C34ADCCC930FCF8A5C2A68 /* PFRESTCloudCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCloudCommand.h; path = Parse/Internal/Commands/PFRESTCloudCommand.h; sourceTree = ""; }; EC10F21A5E230A911C2C2E5082CDAE4B /* POPAnimationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationPrivate.h; path = pop/POPAnimationPrivate.h; sourceTree = ""; }; + EC33E3D76CA84CDA97634E2740AD12A2 /* PFSubclassing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSubclassing.h; path = Parse/PFSubclassing.h; sourceTree = ""; }; ECC48BF18D3BD01C21B65648709A45D6 /* POPAnimator.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimator.mm; path = pop/POPAnimator.mm; sourceTree = ""; }; ED596D85957A49EC6092EC8EC38FCE49 /* POPAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationInternal.h; path = pop/POPAnimationInternal.h; sourceTree = ""; }; - ED8D97DDDCF9842413073AA979D81CD2 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - EDBB5CF4F1A249E933B2469709D9F8DD /* PFInstallationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationPrivate.h; path = Parse/Internal/Installation/PFInstallationPrivate.h; sourceTree = ""; }; - EEC0387E8F35C7BADBD1B4D6A482702D /* PFSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSession.m; path = Parse/PFSession.m; sourceTree = ""; }; - EED19F37D13868499C43F13264741ADA /* PFSQLiteDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabase.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m; sourceTree = ""; }; - EEDB7E1475A81EE2F12373656077D160 /* PFHTTPURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHTTPURLRequestConstructor.m; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m; sourceTree = ""; }; - EEF3C9636DEAF164594CC80C9C6F8A3F /* PFDateFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDateFormatter.m; path = Parse/Internal/PFDateFormatter.m; sourceTree = ""; }; - EF790182566A5099C39C1B289E8BB3B8 /* PFActivityIndicatorTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActivityIndicatorTableViewCell.h; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h; sourceTree = ""; }; - EF879D6FEC35876A57F1E379EA8F1BEA /* PFURLSessionJSONDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionJSONDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m; sourceTree = ""; }; - EFF1793AB041ED2DA9362386ECE91641 /* UIView+YALConstraints.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+YALConstraints.h"; path = "YALContextMenu/UIView+YALConstraints.h"; sourceTree = ""; }; - F03D0C596469A502C868EB32FEE7D020 /* PFObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController.h; path = Parse/Internal/Object/Controller/PFObjectController.h; sourceTree = ""; }; + ED916D4870F140B98C95E04269FEBB71 /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; + ED9B06016408585D92ACDBC3FCC637B2 /* PFPurchaseTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseTableViewCell.h; path = ParseUI/Classes/Cells/PFPurchaseTableViewCell.h; sourceTree = ""; }; + EDEDB8FE40254A22854D3E43109A88F2 /* PFACLState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState_Private.h; path = Parse/Internal/ACL/State/PFACLState_Private.h; sourceTree = ""; }; + EE9CF87F9B76B4D7EC7D059739CC8B54 /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; + EF168B468FCAB59188891FE988236456 /* PFThreadsafety.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFThreadsafety.h; path = Parse/Internal/ThreadSafety/PFThreadsafety.h; sourceTree = ""; }; + F04F99D02A881C18F8E1C650E83678B3 /* PFRESTObjectBatchCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectBatchCommand.m; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.m; sourceTree = ""; }; F0B4105C7EE2DA010EA4746E79138C7C /* POPVector.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPVector.mm; path = pop/POPVector.mm; sourceTree = ""; }; - F0CC09558A010C10AAC9F4CD4C53AD04 /* PFMultiProcessFileLock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLock.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m; sourceTree = ""; }; - F0E3349A60D7826DA93B7B2959FCEB2D /* PFCollectionViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCollectionViewCell.m; path = ParseUI/Classes/Cells/PFCollectionViewCell.m; sourceTree = ""; }; - F182401E66857C7D4B875E79122BD830 /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; - F1B7F591E729212EB6BF33EF88BA1981 /* PFCollectionViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCollectionViewCell.h; path = ParseUI/Classes/Cells/PFCollectionViewCell.h; sourceTree = ""; }; - F1CD895FE6B420EB0729480BD79BE4E3 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; - F1DD91DA807740D7FAB3167719838902 /* PFLoadingView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLoadingView.h; path = ParseUI/Classes/Internal/Views/PFLoadingView.h; sourceTree = ""; }; - F2457C51DB8F154FDFD167B5690FC35C /* BFTask+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Private.h"; path = "Parse/Internal/BFTask+Private.h"; sourceTree = ""; }; - F25C9F58CFDC13B49DEA0CD5013B1F28 /* PFMutableObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableObjectState.m; path = Parse/Internal/Object/State/PFMutableObjectState.m; sourceTree = ""; }; - F363289FFEDBECB17FBC94ED2AE8C0EF /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; - F369CDC4FF93740544F25823CC584B90 /* Parse-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Parse-dummy.m"; sourceTree = ""; }; + F0D26272E2D206ED59FEA3953DA60BD9 /* PFCurrentInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentInstallationController.m; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m; sourceTree = ""; }; + F17D7D11766EAE6CAE75AED56352B4B5 /* PFObjectLocalIdStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectLocalIdStore.m; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m; sourceTree = ""; }; + F2AE1005EC45AEE127A8650F06BCBAEF /* PFCategoryLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCategoryLoader.m; path = Parse/Internal/PFCategoryLoader.m; sourceTree = ""; }; + F31424CDA773AA527195551EADFF442A /* PFPushPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushPrivate.h; path = Parse/Internal/Push/PFPushPrivate.h; sourceTree = ""; }; F3A985A006B0CCD0116D8FC53C4D1834 /* POPAction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAction.h; path = pop/POPAction.h; sourceTree = ""; }; - F3C4D6B4BF5063C2EC4B6F8862998D93 /* PFURLSessionUploadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionUploadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h; sourceTree = ""; }; - F3F5E33F74D6853C5320405E72A25A99 /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; - F3FC1F5573A43949438409A8D53778C3 /* PFHTTPURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPURLRequestConstructor.h; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h; sourceTree = ""; }; - F42BAF2FFD8FD598E5C736149EA031F8 /* PFColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFColor.h; path = ParseUI/Classes/Internal/Extensions/PFColor.h; sourceTree = ""; }; - F44B7D42437E31FF67AF695E26480E07 /* PFPushManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushManager.m; path = Parse/Internal/Push/Manager/PFPushManager.m; sourceTree = ""; }; + F3D78DD22896564922F83F838094C463 /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperation.h; path = AFNetworking/AFHTTPRequestOperation.h; sourceTree = ""; }; + F4DC2010100067AE78C7D4E02E604C0F /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; + F4DDE0E81520E3201CF403C8DAA7ECCE /* PFAnonymousAuthenticationProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousAuthenticationProvider.m; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m; sourceTree = ""; }; + F509F95BA6BCD09E8277CF2DE4DA42D8 /* libParseUI.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libParseUI.a; sourceTree = BUILT_PRODUCTS_DIR; }; F54B1AE39CAF0CA846C1C729B033E047 /* POPBasicAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPBasicAnimation.mm; path = pop/POPBasicAnimation.mm; sourceTree = ""; }; - F657AD9C72FE5B432F841B53493D1253 /* PFMutableACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableACLState.m; path = Parse/Internal/ACL/State/PFMutableACLState.m; sourceTree = ""; }; + F6981E02F3DA9E586AA3F8F9CA7146DE /* PFURLSessionDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m; sourceTree = ""; }; + F6DD1876D580489E010AEC2846628B23 /* PFCachedQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCachedQueryController.m; path = Parse/Internal/Query/Controller/PFCachedQueryController.m; sourceTree = ""; }; + F7D69FA827468B9904DF732655380BE4 /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; + F7E6CB7EBD5DD182485EC1B01FFD406E /* PFAnalyticsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsController.m; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.m; sourceTree = ""; }; + F80B8B50F9D8716C8F1482A13F291D05 /* PFOfflineQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryController.h; path = Parse/Internal/Query/Controller/PFOfflineQueryController.h; sourceTree = ""; }; F81E8633F1E784423FE8B9BE16D38981 /* POPPropertyAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPPropertyAnimation.h; path = pop/POPPropertyAnimation.h; sourceTree = ""; }; - F820E3F0707C3FCB027CE5B4848D8564 /* PFKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeychainStore.h; path = Parse/Internal/PFKeychainStore.h; sourceTree = ""; }; - F82C8E9DF011E7453EA40431821FB283 /* PFProductsRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductsRequestHandler.h; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h; sourceTree = ""; }; - F846ACF033FD69EF28381C488F0B8AA0 /* PFInstallationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationConstants.h; path = Parse/Internal/Installation/Constants/PFInstallationConstants.h; sourceTree = ""; }; - F8C27D2D58E1E3AF1C21FB7330AF1B98 /* PFPrimaryButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPrimaryButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.m; sourceTree = ""; }; - F908ADAD5734EE4C1EA4466E7FE108C1 /* PFObjectEstimatedData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectEstimatedData.h; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h; sourceTree = ""; }; - F996BE0C38219298C5E7E92AF1A4B595 /* PFRESTFileCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTFileCommand.m; path = Parse/Internal/Commands/PFRESTFileCommand.m; sourceTree = ""; }; - F9B9BF93B8FEFA346B7D92DBA659A391 /* PFCoreManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreManager.h; path = Parse/Internal/PFCoreManager.h; sourceTree = ""; }; - FA1957D2FB6FAD2FDD777C1424EE93F5 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; - FAAB83BF02473BC0A2415881560312DB /* PFRESTCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCommand.m; path = Parse/Internal/Commands/PFRESTCommand.m; sourceTree = ""; }; - FD9F0F4B22EEC61402D34AE9EEF30DD0 /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; - FDE3D8A4479D0EA4BAFB41AD9CF6FF64 /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; - FE3AA7D1FB50A9011DE1F2F4F8986498 /* PFURLConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLConstructor.h; path = Parse/Internal/HTTPRequest/PFURLConstructor.h; sourceTree = ""; }; - FEF70A7046A494A88828C2736E5DB5BC /* PFImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImageCache.m; path = ParseUI/Classes/Internal/PFImageCache.m; sourceTree = ""; }; - FF535EE9855D265BB146986E399302C9 /* PFActivityIndicatorCollectionReusableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActivityIndicatorCollectionReusableView.h; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h; sourceTree = ""; }; - FF73455163A4B9C060A3B73C44658BB4 /* PFPropertyInfo_Runtime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Runtime.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h; sourceTree = ""; }; + F89EEACE0F757C432E3342B476B97ED5 /* PFPurchaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseController.h; path = Parse/Internal/Purchase/Controller/PFPurchaseController.h; sourceTree = ""; }; + FA5CBC2DC2B028CED630E64EBB9D0FB8 /* PFProduct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProduct.h; path = Parse/PFProduct.h; sourceTree = ""; }; + FA7AA59013BD49C975213D44FB636218 /* PFRect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRect.m; path = ParseUI/Classes/Internal/Extensions/PFRect.m; sourceTree = ""; }; + FAAE27C09E52CC920211C7C29F63C33D /* Parse.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Parse.xcconfig; sourceTree = ""; }; + FAAF0C858F399B359B7921102F568FC2 /* PFAnonymousUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousUtils.m; path = Parse/PFAnonymousUtils.m; sourceTree = ""; }; + FADD9F8FE2B00307C8C608B8AFABE1FB /* PFURLSessionCommandRunner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h; sourceTree = ""; }; + FAF0A7C8E00B5F02C45B0CEF47F942C1 /* PFActivityIndicatorTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActivityIndicatorTableViewCell.h; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h; sourceTree = ""; }; + FAF4306E39F8973F061A32BC46F31FAE /* PFObjectSubclassingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassingController.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m; sourceTree = ""; }; + FB1632F36B47719FBD89B72749ED1EFA /* PFHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPRequest.h; path = Parse/Internal/HTTPRequest/PFHTTPRequest.h; sourceTree = ""; }; + FB84E1DE622B80AAFC4C5D8680FBA9EE /* PFUserAuthenticationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationController.h; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h; sourceTree = ""; }; + FC1BAB4081E46DF3947E5BD5AD48981C /* PFFileManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileManager.h; path = Parse/Internal/PFFileManager.h; sourceTree = ""; }; + FC796DCB4788FB840D9025949079A06A /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; + FD5E7E043964841EF8A0EF7D3718C17B /* PFLogInViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogInViewController.m; path = ParseUI/Classes/LogInViewController/PFLogInViewController.m; sourceTree = ""; }; + FFE01D48EF7DDCAB2FC799BB39E6D6A4 /* PFConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfigController.h; path = Parse/Internal/Config/Controller/PFConfigController.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2BB7104FAE246FFAFA4A6159E11F80B3 /* Frameworks */ = { + 1815A1EC84BB0B6651744D2F131EE124 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0655C53AF3514D826B20F7892BBE3352 /* CoreGraphics.framework in Frameworks */, - 31E45E0290C278EF3172695D508A2E71 /* Foundation.framework in Frameworks */, - 55BB2075236A6D419A39C20BDAE77AA1 /* QuartzCore.framework in Frameworks */, - A42F547AFB6AD220F9DCD4EDF6E6689B /* UIKit.framework in Frameworks */, + AEBECFD09AB8F3578632C96EFFD637A9 /* CoreGraphics.framework in Frameworks */, + 537C9A9788489C2CA3A1D877E5702A17 /* Foundation.framework in Frameworks */, + 85FF8BD54230792ABFBB3B20DF0710D4 /* MobileCoreServices.framework in Frameworks */, + DA1EEA007804A54426FC3F44BFDE8545 /* Security.framework in Frameworks */, + 2C02491C9A86DDEB1D821ABF98F5E9A3 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 56A844AA177010E838BCF58676D0E939 /* Frameworks */ = { + 2A9F3D80F303318DD8876138D9B4321A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3FE2CD905A0D90E675C92E2800E03D9E /* Foundation.framework in Frameworks */, + DA5469F73B273CF5CACF7A4C2A44FCC5 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 85674903FD27FE13717922FF4357F9B5 /* Frameworks */ = { + 2DF511A26B9101758C7D026EE134AC03 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0375A436998F237A79A936E6CCE33148 /* CoreGraphics.framework in Frameworks */, - C9A2FFE39ABD912BB7835CC83FDC9332 /* Foundation.framework in Frameworks */, - 4D5EF7D0B4D861DF9F3B699C7F838528 /* MobileCoreServices.framework in Frameworks */, - EC754433ED47C6B48A8CE9F4CB37E14B /* Security.framework in Frameworks */, - 1E3C0F09FCE1C3025D98EC3E79134920 /* SystemConfiguration.framework in Frameworks */, + FC324432506E45E0BBE78933D2A74DAF /* CoreGraphics.framework in Frameworks */, + 769DB6FFF1F0933FEBFDF5ADA942A9FF /* Foundation.framework in Frameworks */, + 446CAF4AA59F1F4752D565415C561497 /* QuartzCore.framework in Frameworks */, + 7CFE64FE0E0D57FAF2167E1FF1B7576C /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8C45497CBD83A66C8FBF1289DF39CE3D /* Frameworks */ = { + 308970140019F579000A6CFF5E645A00 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2AD822A4C6DD9CA6D499CF6955198F4A /* Foundation.framework in Frameworks */, + 16D48F8DD817BEEC782F46FFA1B918C4 /* Foundation.framework in Frameworks */, + D54CB41D898098EDAE5EADD635E21575 /* QuartzCore.framework in Frameworks */, + C41BBD01DDDD1535DE11E2F56EC9E6A0 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 965ABA69AF689352C7AFAA4D831B30F1 /* Frameworks */ = { + 72C426652F822EEA1F0F6FFCB31FD051 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 65E631D06E8973BA219DED288619559C /* Foundation.framework in Frameworks */, - CB29E081C9F6BF7054D06FC63D3953F2 /* QuartzCore.framework in Frameworks */, - 46D4BDDE8AB87A9CAD5D625F9CEF64DE /* UIKit.framework in Frameworks */, + EA06F60931B43E6A29AC69870A648984 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9BE8C57594B15EEAA567F911A1293696 /* Frameworks */ = { + 8C45497CBD83A66C8FBF1289DF39CE3D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A34DE9EF9C14F3296963A55768201841 /* Foundation.framework in Frameworks */, + 2AD822A4C6DD9CA6D499CF6955198F4A /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - FBED2FAC8FC38B52BADDF50DED237051 /* Frameworks */ = { + 9FB27855AFE7DE38777BBB75A80CF99B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8499099175A198098F7496115B1DBD82 /* AudioToolbox.framework in Frameworks */, - 06FAB48E1E97530EA1D69FEE81B6B4FB /* CFNetwork.framework in Frameworks */, - 1A172F3623296435FBE39CA9DECBE299 /* CoreGraphics.framework in Frameworks */, - 6CF96D28E0D903FE5CECE870E959A7E3 /* CoreLocation.framework in Frameworks */, - 0F238050CCA06FB31AC3B53D1853A928 /* Foundation.framework in Frameworks */, - 95910634F7060495109982E7841E381A /* QuartzCore.framework in Frameworks */, - 27EAF05CC70083B9C74622C4C3F1F50B /* Security.framework in Frameworks */, - 268BFCB72A6AC4C466ACE860992F00C3 /* StoreKit.framework in Frameworks */, - 4E72C8BDEF684D123F3726A401ABCB36 /* SystemConfiguration.framework in Frameworks */, + 52AE5A22CD25615A73DA5B66ACDCAC63 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BA735EE182107B4D0DB2261BAABF4B4D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CAE4CB7CCC22FE3F30C22FD7682BD87A /* AudioToolbox.framework in Frameworks */, + 4AD83FE13F9E3989958AB89506082F8A /* CFNetwork.framework in Frameworks */, + 3F219289B69850BB1CF2ED154E9E1794 /* CoreGraphics.framework in Frameworks */, + 911A4DB10A5E33A6F04F94A7703B185A /* CoreLocation.framework in Frameworks */, + B5E7C8C2A582E9A5CB1484D5A2BF68EC /* Foundation.framework in Frameworks */, + 63282495F7A69754CA11E40987DBB797 /* QuartzCore.framework in Frameworks */, + 42E12F748623E1F6C033984BD3BA21C3 /* Security.framework in Frameworks */, + AD89FBAE3D25F78C3960919883004223 /* StoreKit.framework in Frameworks */, + B4E74E490B784B925DCBE190392E5FBE /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 02DC75DFC7A4F83A34208DF25798A845 /* Reachability */ = { + 011559050DFA7329C4F7D072F2D11AD7 /* Resources */ = { + isa = PBXGroup; + children = ( + 1652334F7FACB47B60509D457FCC9733 /* en.lproj */, + ); + name = Resources; + sourceTree = ""; + }; + 16E7FFA960794C112853DED76DBC1AF2 /* Reachability */ = { isa = PBXGroup; children = ( - FA1957D2FB6FAD2FDD777C1424EE93F5 /* AFNetworkReachabilityManager.h */, - 358076BF1FC2383D78542D2EFF4939ED /* AFNetworkReachabilityManager.m */, + 46BF8D16DF1543709222F3222BDC849E /* AFNetworkReachabilityManager.h */, + 4D7F1D2389E46D7B61047075A932829E /* AFNetworkReachabilityManager.m */, ); name = Reachability; sourceTree = ""; }; - 0A35C5F1675B9377306ECAC57658FE06 /* Support Files */ = { + 1E9E37EACAEABED78602D6A28B880B58 /* Support Files */ = { isa = PBXGroup; children = ( - 07DD486CA0D467F3E4B0FA3AFB78B671 /* ContextMenu.iOS.xcconfig */, - DD2C8034413D050CB11771F958F248F1 /* ContextMenu.iOS-Private.xcconfig */, - 56B759F1D8C8CB47D727B586BB4AC069 /* ContextMenu.iOS-dummy.m */, - 81E5DF449A484A01D0D5D2D79856C74B /* ContextMenu.iOS-prefix.pch */, + AB6325C6084DFA24E8A1FAF7618F5248 /* AFNetworking.xcconfig */, + 6FF0D7F86EBF3E4E62184BE9EDCAFEBF /* AFNetworking-Private.xcconfig */, + D027CB4166C718582F41DDA6A2F623B8 /* AFNetworking-dummy.m */, + 55FCD8BDF4CAA137C8DF55D62EC9F298 /* AFNetworking-prefix.pch */, ); name = "Support Files"; - path = "../Target Support Files/ContextMenu.iOS"; + path = "../Target Support Files/AFNetworking"; sourceTree = ""; }; - 0D702677028DE77B5F98109E6E9A03F7 /* NSURLSession */ = { + 1ECE246140A237A3CFC2889C1E0DB632 /* Support Files */ = { isa = PBXGroup; children = ( - 6AAB30B0C1218AFFC57C5B5A58F1925C /* AFHTTPSessionManager.h */, - 5216F571A9C35B49AC646497DEBD2B3C /* AFHTTPSessionManager.m */, - 1039D733B7402E51965445AD5B5DCB98 /* AFURLSessionManager.h */, - A055D518CCF1B206751FCEC2DE32A701 /* AFURLSessionManager.m */, + FAAE27C09E52CC920211C7C29F63C33D /* Parse.xcconfig */, + C784CC8E8064EF5D1B9368F61DC7624B /* Parse-Private.xcconfig */, + 92A7C648E6A455643E14ED492A6A73B7 /* Parse-dummy.m */, + 9C85F4E975114B0270B229E64AB085B4 /* Parse-prefix.pch */, ); - name = NSURLSession; + name = "Support Files"; + path = "../Target Support Files/Parse"; sourceTree = ""; }; - 1088A147F4A4DB5B1AB0A3782F770EF4 /* Support Files */ = { + 2943A7936CB7B7E379168240D14622DE /* Support Files */ = { isa = PBXGroup; children = ( - 62BE8CADD4670ADEDF5FD8EF8072C87F /* pop.xcconfig */, - 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */, - 59B3FD41DEC22C5891C9B83C27BC25E0 /* pop-dummy.m */, - 2BA1448D29C364710AC0CCAC65063979 /* pop-prefix.pch */, + B9FC365A77E509F76B58419DED13E66C /* ParseUI.xcconfig */, + 247F390401ED8756F05F8590B2A4721F /* ParseUI-Private.xcconfig */, + 43F9C919C6D00EE0E46CB72D8F20F028 /* ParseUI-dummy.m */, + A4964D13641870CA9C49B9AC5CE300AA /* ParseUI-prefix.pch */, ); name = "Support Files"; - path = "../Target Support Files/pop"; + path = "../Target Support Files/ParseUI"; sourceTree = ""; }; - 200225903789300BB00A2889A4437CE8 /* Support Files */ = { + 2CE8AD631B3F75F88E99ED7A60C25BB6 /* Serialization */ = { isa = PBXGroup; children = ( - 41E4EF38F3F42973C09F8820315F75C3 /* Bolts.xcconfig */, - 5A12ABBF15A8F5506519823676F3C8DD /* Bolts-Private.xcconfig */, - 91FD3566B5AFA4DD010BBD80305BC28A /* Bolts-dummy.m */, - B2954F531D3634410AB8A04C01539733 /* Bolts-prefix.pch */, + 661753468309FACA5ACA4AC85A0F7E29 /* AFURLRequestSerialization.h */, + 1D03B9968185DC57D4AAC534C0871E1F /* AFURLRequestSerialization.m */, + B03D3FA821F17169116EFE9F9BAA130F /* AFURLResponseSerialization.h */, + 4C8EFE6B301ADF72C83A3320D353C799 /* AFURLResponseSerialization.m */, ); - name = "Support Files"; - path = "../Target Support Files/Bolts"; + name = Serialization; sourceTree = ""; }; - 23AE72B6B473935D6C17CA1B5CE6EBD0 /* Resources */ = { + 34DDA83FD6AB44645E483F5F6DE9D413 /* Resources */ = { isa = PBXGroup; children = ( - 5ECDB4A3D81CD22761B3E657A9193AE7 /* en.lproj */, + 1AE6372AC3E2C579A54322AA014EFA61 /* en.lproj */, ); name = Resources; sourceTree = ""; }; - 27C4DE13C26F320CD386E4DA6D6716B8 /* UIKit */ = { + 37C187A946F86F96D43F3B5E7B8BB1E6 /* pop */ = { isa = PBXGroup; children = ( - FD9F0F4B22EEC61402D34AE9EEF30DD0 /* AFNetworkActivityIndicatorManager.h */, - F3F5E33F74D6853C5320405E72A25A99 /* AFNetworkActivityIndicatorManager.m */, - D43B8CFF328D2BE6C9755924B181CF2F /* UIActivityIndicatorView+AFNetworking.h */, - 9BA57A433E33E9125A8347D57D7F766F /* UIActivityIndicatorView+AFNetworking.m */, - C917E75AADCC6DB455A54504481914C6 /* UIAlertView+AFNetworking.h */, - CD1B49F66FFBB4AD6CCEC0A90A66D326 /* UIAlertView+AFNetworking.m */, - E504BFBB2DBF9126FAB2DC1F339CB325 /* UIButton+AFNetworking.h */, - C074D541BD181F718CABF5FB5728F620 /* UIButton+AFNetworking.m */, - 365EAFBED43EBA1E76B6777D42421642 /* UIImage+AFNetworking.h */, - D44289371FAC5C4BED0F2F71337214A6 /* UIImageView+AFNetworking.h */, - E2143F74B5AD9A40EA532F839BD3B314 /* UIImageView+AFNetworking.m */, - 58B5D2F2CD84279F74BE531861A83308 /* UIKit+AFNetworking.h */, - AA922A41DD3C8A6F91E02EF0F731F0AB /* UIProgressView+AFNetworking.h */, - B8678F4D5E8E1A277EAFCB398356B491 /* UIProgressView+AFNetworking.m */, - C40BCF6A4E2863E61431A31D979EE9C9 /* UIRefreshControl+AFNetworking.h */, - D9E009FDFD4D025A77485806D951F056 /* UIRefreshControl+AFNetworking.m */, - 0024E7BD94CF93AC26F575C1C8DDC77A /* UIWebView+AFNetworking.h */, - 1315EBF14A0D75438D37ED2C3FA79516 /* UIWebView+AFNetworking.m */, + C091E831068E3E504A40AC6932B39C87 /* FloatConversion.h */, + 38C1E5A4A6882760CB349FCABD22A9DC /* POP.h */, + F3A985A006B0CCD0116D8FC53C4D1834 /* POPAction.h */, + 313669CF0D1BF49C96C85FC593F4BC1D /* POPAnimatableProperty.h */, + C9565C73D5D4BE79747E60DCF1557E71 /* POPAnimatableProperty.mm */, + 14938EB08280063D294781C3164C8332 /* POPAnimation.h */, + 8336CCF2280C58E6C367DF4EC0EBB7B3 /* POPAnimation.mm */, + 9F210DEEA777E0BF1995DC3570CC616E /* POPAnimationEvent.h */, + C0DF3C83EBC5F7BF6DAAACEBD7D72791 /* POPAnimationEvent.mm */, + 5785AD09C2208501D5161E950E701889 /* POPAnimationEventInternal.h */, + C1B6A53BFD919966B87CD6FBFD89CE1B /* POPAnimationExtras.h */, + 22DC4C87D619EF0F28631B5560E82333 /* POPAnimationExtras.mm */, + ED596D85957A49EC6092EC8EC38FCE49 /* POPAnimationInternal.h */, + EC10F21A5E230A911C2C2E5082CDAE4B /* POPAnimationPrivate.h */, + 3A5F7AF86D19E519B94AD6D8CB98CC34 /* POPAnimationRuntime.h */, + E85E0983DBE882A8009D0F7EAB591B91 /* POPAnimationRuntime.mm */, + 2E88590D291A3C131FC32F9BC9A80038 /* POPAnimationTracer.h */, + C1E27C3CBB149C1873F6CDC55D998CE2 /* POPAnimationTracer.mm */, + 9DA58C3428E2A0E2F88C2A0522297274 /* POPAnimationTracerInternal.h */, + 94815AA3EE3CBA04CEE85515701AD534 /* POPAnimator.h */, + ECC48BF18D3BD01C21B65648709A45D6 /* POPAnimator.mm */, + 0476012CEBFEB22B5F0926994E6AEEE3 /* POPAnimatorPrivate.h */, + 212068113F29FA47D17730ED388F8706 /* POPBasicAnimation.h */, + F54B1AE39CAF0CA846C1C729B033E047 /* POPBasicAnimation.mm */, + 7F59C51782AE555897A5B92D6B3CECD1 /* POPBasicAnimationInternal.h */, + 4CC05709207C91767940918CDD4779DC /* POPCGUtils.h */, + 0A9ED47A0EA56543BEB2F83DFD6122C8 /* POPCGUtils.mm */, + 928EC8B9105DA581C7896C2102E87BE2 /* POPCustomAnimation.h */, + 8EC4FC6A3A06D9292C296C691005546B /* POPCustomAnimation.mm */, + B0F7BCEE9A871E1193D694931FA31E17 /* POPDecayAnimation.h */, + C560616DDF5273CF7C53EF72EA6ED45A /* POPDecayAnimation.mm */, + B0CE575CDDE0B1795BB8B88E0B49ACA0 /* POPDecayAnimationInternal.h */, + 90DA3C63E9AD758336342BC51C0BB859 /* POPDefines.h */, + 3155A15C877F794FB064A4A0CEEB2F13 /* POPGeometry.h */, + B330BCF969EF6189E02E10926FB95CED /* POPGeometry.mm */, + 9663A817A809169745F3F8E987FFE076 /* POPLayerExtras.h */, + 197635F0BFB93E63E82503F09B7AABBF /* POPLayerExtras.mm */, + 9C3FE18EB564AF4087573DE6F3F2D3D3 /* POPMath.h */, + A19FD133843D5FCF16B8AF3B4E165515 /* POPMath.mm */, + F81E8633F1E784423FE8B9BE16D38981 /* POPPropertyAnimation.h */, + 2726A20CBCFFB77F9972C445E8972099 /* POPPropertyAnimation.mm */, + 134BDC30251FB7A5465C17F603FCAC5F /* POPPropertyAnimationInternal.h */, + 7371F16336283F2D8BB2A199CD4DDEF5 /* POPSpringAnimation.h */, + C24554FAA71D841BC3C0759DA37874AE /* POPSpringAnimation.mm */, + EB56BE02F1B0412A41C9D9834B04BC30 /* POPSpringAnimationInternal.h */, + 6961E549FC85F85EB7560B887B11C928 /* POPSpringSolver.h */, + D5CE48778301C24CD288B08DDA441605 /* POPVector.h */, + F0B4105C7EE2DA010EA4746E79138C7C /* POPVector.mm */, + 35574BADA6CDEA944F089CBC021F01AA /* TransformationMatrix.cpp */, + 2E056FF5C4EC38A55B45FB52F395D72E /* TransformationMatrix.h */, + 96015F1C746803D9318614B277F71BCB /* UnitBezier.h */, + 3F34B7753EB3E8B52BDFF2A5B3E85386 /* Support Files */, ); - name = UIKit; + path = pop; sourceTree = ""; }; - 2F8332C2B83A463D42D1B98C775DFC06 /* Tasks */ = { + 3E616E7502DFC661CF470D4C196B17F9 /* ParseUI */ = { isa = PBXGroup; children = ( - E23709D1E2B358163967F34AC4683834 /* BFCancellationToken.h */, - AC969BF0B09B32631651A85209580443 /* BFCancellationToken.m */, - 08A7DDB501049FA74B5AC43628EF32BA /* BFCancellationTokenRegistration.h */, - B18E4523B7A2D3BA68FE05BE72681E02 /* BFCancellationTokenRegistration.m */, - B319964A3771774ECF35609A331A9AC6 /* BFCancellationTokenSource.h */, - 6D8F3DA883848E2DCAD665B10531671C /* BFCancellationTokenSource.m */, - 90E284AD7A6A52AEEF7D84AD765A3548 /* BFDefines.h */, - E28AF701482179FE07EE17023210453F /* BFExecutor.h */, - A24FE0141387F910F17488671E600BA8 /* BFExecutor.m */, - D4C9535D0DCC9CEAF41CAB114CBAC573 /* BFTask.h */, - F182401E66857C7D4B875E79122BD830 /* BFTask.m */, - 698035C4932D84777E5EC71DFC658ECE /* BFTaskCompletionSource.h */, - 44E52571D995DF254E53AD007ED4859C /* BFTaskCompletionSource.m */, - E2CA6C46BBB76A49C80830DB49B9FFF5 /* Bolts.h */, - FDE3D8A4479D0EA4BAFB41AD9CF6FF64 /* Bolts.m */, - CF7F21D5332C89148FDF4E4644891872 /* BoltsVersion.h */, + E8A4616759870C960EB08032937E2E1C /* PFActionButton.h */, + 427BD07E883212F98FBE50FC1015EB6D /* PFActionButton.m */, + 9DA45A3E8EB7DEACE98BDB98552ABA77 /* PFActivityIndicatorCollectionReusableView.h */, + 7D28187843427D20AE0896283D27AF1A /* PFActivityIndicatorCollectionReusableView.m */, + FAF0A7C8E00B5F02C45B0CEF47F942C1 /* PFActivityIndicatorTableViewCell.h */, + 67F74EF0A3FD2F24484F0C6BE4568559 /* PFActivityIndicatorTableViewCell.m */, + A60D18FA5E274DB64A5436B779B53C51 /* PFCollectionViewCell.h */, + 1FF8B6CB88759DF1ED61C6FE79ED9EA1 /* PFCollectionViewCell.m */, + 1A9E5978470D11A0B2189DC537877983 /* PFColor.h */, + B9CF96CC1BC79AB5D74851B61A45BB4C /* PFColor.m */, + 183252EB3F3025A5B9AA601E65243596 /* PFDismissButton.h */, + A6480F5708187FF764D171B4114704BA /* PFDismissButton.m */, + AC9C8279188AB5D0074C2A37F359A028 /* PFImage.h */, + 535ACE2CE3D781563A174674D905E319 /* PFImage.m */, + 66F798D8776090E919C1D6DE00DA5856 /* PFImageCache.h */, + 3EFB0CB4177A8795A80AB630F8DFA865 /* PFImageCache.m */, + 7309A304A4D33AD098C95DE23B2DA6DB /* PFImageView.h */, + 860A4029037698F6AEAA916D96F38BBE /* PFImageView.m */, + D6A7AC20B273C8BB63EE48D7133CC688 /* PFLoadingView.h */, + A1EB64B790B73DAB7F65D7CDDFE4A383 /* PFLoadingView.m */, + 830556E84D6C0C3E518700CF712A5B96 /* PFLocalization.h */, + E49EF341DFF0A786D4F295ED85B33595 /* PFLogInView.h */, + 9014F44156C863573956B280208B21FE /* PFLogInView.m */, + 571D00DE82EAF4F2AABE71CD9002FD71 /* PFLogInViewController.h */, + FD5E7E043964841EF8A0EF7D3718C17B /* PFLogInViewController.m */, + E3A3326F104E2444D64942174B3E37E0 /* PFLogInView_Private.h */, + 273DD846A6C8B2FAA0D30EFD98074903 /* PFPrimaryButton.h */, + 540E5395B931591133EB6260DAAADFC9 /* PFPrimaryButton.m */, + D45B424C56418F8D74C78DACDA406B53 /* PFProductTableViewController.h */, + 5ED1962F30E3190EA8A3C72A2A1D0122 /* PFProductTableViewController.m */, + ED9B06016408585D92ACDBC3FCC637B2 /* PFPurchaseTableViewCell.h */, + B22BE2D73FB935E2CABC9BA2529BED84 /* PFPurchaseTableViewCell.m */, + 3E08A968A93ACB9D1CAF92789B12C7C4 /* PFQueryCollectionViewController.h */, + 4874ECF650D964F2CDBF9F86115F5A44 /* PFQueryCollectionViewController.m */, + C05E8CDA29F1EE876CB9E6445F045060 /* PFQueryTableViewController.h */, + 8AB3A48FC769AD95A394C4C83BF67B64 /* PFQueryTableViewController.m */, + 40B5E642FA3FEEDE08618DD723D07E89 /* PFRect.h */, + FA7AA59013BD49C975213D44FB636218 /* PFRect.m */, + BF2B791839A7CAAE79D6FB65AB7CAA27 /* PFResources.h */, + 318238BDCB2257E77EB2BDDBCA0452BD /* PFResources.m */, + 740953021D381F48143BF4B4EEE2CF5C /* PFSignUpView.h */, + 117570BCB2B64BF12FB3548DD7D1C78E /* PFSignUpView.m */, + B920F18145A654521BE7EC602D2C657F /* PFSignUpViewController.h */, + 15869702686104107D02D14F642179ED /* PFSignUpViewController.m */, + 830636B8D1FD36CAC950ECC4E2B9EDCC /* PFTableViewCell.h */, + 64B378A014AFEA845B65353C3E1AFC8E /* PFTableViewCell.m */, + 0EAD9DB6468A7A40A36253E8E13E4D15 /* PFTextButton.h */, + A4789A83A8E8466FA58F653DDBFF071E /* PFTextButton.m */, + 6045E412107503A77AB97F7AFCE87561 /* PFTextField.h */, + 5E01AC1838C574E671E9DA63C930BD46 /* PFTextField.m */, + D11E630B16ABE653A770F783B46F066E /* PFUIAlertView.h */, + 6F8244F3675730196C1B33EA7D16570F /* PFUIAlertView.m */, + 79839EFEDA52DDB79166288FE614A54D /* ParseUI.h */, + 070CF2EA5C953FFF03ED8BE7AF055AC6 /* ParseUIConstants.h */, + 34DDA83FD6AB44645E483F5F6DE9D413 /* Resources */, + 2943A7936CB7B7E379168240D14622DE /* Support Files */, ); - name = Tasks; + path = ParseUI; sourceTree = ""; }; - 400B87487B883E2FBF3BA1A84CBD5001 /* Support Files */ = { + 3F34B7753EB3E8B52BDFF2A5B3E85386 /* Support Files */ = { isa = PBXGroup; children = ( - D979F925569BC22D42FF30FE4C67B4E3 /* Parse.xcconfig */, - 976A55E7CE8D654A68FBED3175180C45 /* Parse-Private.xcconfig */, - F369CDC4FF93740544F25823CC584B90 /* Parse-dummy.m */, - 1912D51690BFB2430D2FC6F89935CD27 /* Parse-prefix.pch */, + 44A0FD2283337A0E2117AE23966080BA /* pop.xcconfig */, + 5AABEAB40B785094AA4B3680A82E2F3B /* pop-Private.xcconfig */, + 59B3FD41DEC22C5891C9B83C27BC25E0 /* pop-dummy.m */, + 38EDFF435F14A19FF4C796101BD8596E /* pop-prefix.pch */, ); name = "Support Files"; - path = "../Target Support Files/Parse"; + path = "../Target Support Files/pop"; sourceTree = ""; }; - 4427CCC45CA8D857347960D5AA5A77C5 /* Pods */ = { + 4E1FDE3AC1D163C59FC56BF51592430E /* Support Files */ = { isa = PBXGroup; children = ( - AE1FCC8648F4384498D2CF5B7F32DAAA /* AFNetworking */, - DDE689B6B09170B803B77F9EB078E1CC /* Bolts */, - B6564B7B05E0D234CDEE562117C5EBF9 /* ContextMenu.iOS */, - 979EFB6D9DB1886486B07494CC621CA9 /* Parse */, - DB950EF338A1419E0F336CF98E3D2AC9 /* ParseUI */, - E057C2EB9A740CE736968F80830BAC47 /* pop */, + 7A4AFDBB8AC98818A3958140C49E7D8E /* NSDate+TimeAgo.xcconfig */, + 7C87A8B3116CDC86AB48796F14149170 /* NSDate+TimeAgo-Private.xcconfig */, + AE193C9847EDFDD5761A418126698F11 /* NSDate+TimeAgo-dummy.m */, + 2E86BDAE4E45CBD0D23B0FD9D1F66AD9 /* NSDate+TimeAgo-prefix.pch */, ); - name = Pods; + name = "Support Files"; + path = "../Target Support Files/NSDate+TimeAgo"; sourceTree = ""; }; - 560364AB93E50BBEF4B33AC759A5F066 /* NSURLConnection */ = { + 6467564F3C2CD3B25B6C4D7C7BB69097 /* NSURLConnection */ = { isa = PBXGroup; children = ( - E6C8C116B56F8D1B7AB62768527EC072 /* AFHTTPRequestOperation.h */, - 089FEED162CE81FFDB1F2F722CC53B19 /* AFHTTPRequestOperation.m */, - E72971E8203922C334379D6EF46D2C3A /* AFHTTPRequestOperationManager.h */, - 2E0AAD20A6FEA44B0CFB6CF47B721809 /* AFHTTPRequestOperationManager.m */, - C5CBEAEA564EF7FD09CFE53392CC6424 /* AFURLConnectionOperation.h */, - BEAFF13EAEE726C139773BE3860F7AB6 /* AFURLConnectionOperation.m */, + F3D78DD22896564922F83F838094C463 /* AFHTTPRequestOperation.h */, + 12EBCDDDF8E4B4D958FE97CE51641567 /* AFHTTPRequestOperation.m */, + E496375098ABBF2BD885E52BDC838A8A /* AFHTTPRequestOperationManager.h */, + E06E77181273CFD8A9E0A5A3A82A7982 /* AFHTTPRequestOperationManager.m */, + 69B3E1C7182F3458AD6A299128488B48 /* AFURLConnectionOperation.h */, + 47C62543F0DEA0A479039AB3514FD9CB /* AFURLConnectionOperation.m */, ); name = NSURLConnection; sourceTree = ""; }; - 5D2BF76AAFCF51667EA94C561B87B388 /* Support Files */ = { + 696780D89D4DAE639D292F08D86726C2 /* NSURLSession */ = { isa = PBXGroup; children = ( - 713723DAE7A2D766F7D8E9BB88E5E4CA /* ParseUI.xcconfig */, - C213AD7370FD716E3010F4CCDE4BE681 /* ParseUI-Private.xcconfig */, - 91C2410DA547032FC3DC2AE3C259C844 /* ParseUI-dummy.m */, - EA5338250BCA80817AD4E8F779E085E1 /* ParseUI-prefix.pch */, + AAF52DC207128EA0274EF4CDA535FFFA /* AFHTTPSessionManager.h */, + 2E2FDC150221DD19D4C300EB8CCE568E /* AFHTTPSessionManager.m */, + 6BCF6282172FC1EA47FCF672C1A24430 /* AFURLSessionManager.h */, + 466BC7AD0617AE5013D7A29EB130696F /* AFURLSessionManager.m */, ); - name = "Support Files"; - path = "../Target Support Files/ParseUI"; + name = NSURLSession; sourceTree = ""; }; - 789559A54696F4710DBD7111F2EE0FAA /* Support Files */ = { + 72C556AED8233708F279D55B53179DD5 /* NSDate+TimeAgo */ = { isa = PBXGroup; children = ( - C9DD09269903183CC67B8C5718D9BE7F /* AFNetworking.xcconfig */, - C157642B668892E40497C6E7E543A2FC /* AFNetworking-Private.xcconfig */, - 02410F25AB700FDE2DC3E940E8F641D3 /* AFNetworking-dummy.m */, - 212C53C992FAFCD6E80C8674CA34B074 /* AFNetworking-prefix.pch */, + 44F063CA885EB78BD718E7940F7B0C76 /* NSDate+TimeAgo.h */, + 6058E699B02C72EAC3AB3CEEA1711C1A /* NSDate+TimeAgo.m */, + 9E8F6492DE22C9720FCAB2B8D079168B /* Resources */, + 4E1FDE3AC1D163C59FC56BF51592430E /* Support Files */, + ); + path = "NSDate+TimeAgo"; + sourceTree = ""; + }; + 7B41CE7C0D86128FA9B4F47C2B3D4CD6 /* Support Files */ = { + isa = PBXGroup; + children = ( + 0931837BCF1288592148F7CEC9744874 /* ContextMenu.iOS.xcconfig */, + C33C2231FB26FF9D31434434633A6CD8 /* ContextMenu.iOS-Private.xcconfig */, + A353ED9AF6AD59C42FB55270ACB2B23E /* ContextMenu.iOS-dummy.m */, + 207CFB10D01C51B2A7958CBF15E1D199 /* ContextMenu.iOS-prefix.pch */, ); name = "Support Files"; - path = "../Target Support Files/AFNetworking"; + path = "../Target Support Files/ContextMenu.iOS"; sourceTree = ""; }; 7DB346D0F39D3F0E887471402A8071AB = { @@ -1432,436 +1548,117 @@ children = ( BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */, EB57DDB3388FBC701046A1E93218737F /* Frameworks */, - 4427CCC45CA8D857347960D5AA5A77C5 /* Pods */, + B3A68FEC8F91125E2665718B1C870034 /* Pods */, CCA510CFBEA2D207524CDA0D73C3B561 /* Products */, D2411A5FE7F7A004607BED49990C37F4 /* Targets Support Files */, ); sourceTree = ""; }; + 81EC82CA426853E969A21FDC89A2489C /* Tasks */ = { + isa = PBXGroup; + children = ( + 43DDE7B96E8490981651DF981ECC745F /* BFCancellationToken.h */, + 8EB57F907824EC8680AA92999B53C22B /* BFCancellationToken.m */, + CEEEE6B9BBA8A28BB12A34BD43305359 /* BFCancellationTokenRegistration.h */, + 309E66A69E8B9D1EC8FECB8B484349CC /* BFCancellationTokenRegistration.m */, + ADE317F890D27E4E39356AA9D6BFB4C8 /* BFCancellationTokenSource.h */, + EE9CF87F9B76B4D7EC7D059739CC8B54 /* BFCancellationTokenSource.m */, + B60BA9ED4F0E275CBAC1E49013164AB8 /* BFDefines.h */, + 5CBA7766482114ABDA4DC83BA3A480DF /* BFExecutor.h */, + 9147E975FAC6708B063DF2A2B676385C /* BFExecutor.m */, + ED916D4870F140B98C95E04269FEBB71 /* BFTask.h */, + 59811DB1920343BD12DB96E6C9F66504 /* BFTask.m */, + E463344338E538D216FFACCAE0E518B8 /* BFTaskCompletionSource.h */, + F4DC2010100067AE78C7D4E02E604C0F /* BFTaskCompletionSource.m */, + 71F6F2D4F04F42FEC580B4FC00283A8D /* Bolts.h */, + 72672AA1F26F8760A0D79F4F309EE6E6 /* Bolts.m */, + 9ECBBA7F99F345390F66E3FC635EE1EF /* BoltsVersion.h */, + ); + name = Tasks; + sourceTree = ""; + }; 952EEBFAF8F7E620423C9F156F25A506 /* Pods */ = { isa = PBXGroup; children = ( 15A529C27057E4A57D259CBC6E6CE49C /* Pods-acknowledgements.markdown */, BF59BC15D23E1E1912C8F334E7236813 /* Pods-acknowledgements.plist */, - 4F7FEA8114B1934AF71EEAF5B655B908 /* Pods-dummy.m */, + 2D43A8730F06C62593574EC5D9F4B356 /* Pods-dummy.m */, 641AE05DD55E5E6AC1590CD7B4A18F97 /* Pods-resources.sh */, - 88941524D385690CBCF300DD140DF00E /* Pods.debug.xcconfig */, - 2940BC6B2FD4089D74072136047C2FEE /* Pods.release.xcconfig */, + A6B3A97E636348CCC00FE524D7C505E6 /* Pods.debug.xcconfig */, + 41BFE21A3D5255A9FB6D1EB28C605BB5 /* Pods.release.xcconfig */, ); name = Pods; path = "Target Support Files/Pods"; sourceTree = ""; }; - 979EFB6D9DB1886486B07494CC621CA9 /* Parse */ = { + 9E8F6492DE22C9720FCAB2B8D079168B /* Resources */ = { isa = PBXGroup; children = ( - F2457C51DB8F154FDFD167B5690FC35C /* BFTask+Private.h */, - 348553BBE97419579F9F55AA50C5F99B /* BFTask+Private.m */, - 895CF8E6F7A84B12553BCA9E79EC79C3 /* PFACL.h */, - 891A2E0E0FA20C1648F5C841F3E564AD /* PFACL.m */, - AE63CC96E753C252BF25110D864F48EF /* PFACLPrivate.h */, - C61F7888A611C849888C8333EB005699 /* PFACLState.h */, - 024F688442FF537808B2B1F23FD1E740 /* PFACLState.m */, - 3C3D77BC909D77D1BFD9EB010608B1E4 /* PFACLState_Private.h */, - A543A68D1F635C787AFF440419B704A2 /* PFAlertView.h */, - 4F6C88082787B2C81249E9AC5C14B411 /* PFAlertView.m */, - 35F2BD9CCE69BA4DEBCD6F1FA72E072A /* PFAnalytics.h */, - 031E9E0D8D5FFE61CA69EBB13DFF940B /* PFAnalytics.m */, - A08F05F414FDAD6FE00523BCDB90BE7B /* PFAnalyticsController.h */, - 7DE095F15D0DA44B27DE6F3F40B748C5 /* PFAnalyticsController.m */, - D74E2E4235E9688B273C0714402DEADB /* PFAnalyticsUtilities.h */, - C1D8402E147FF6607379D3B631C593FB /* PFAnalyticsUtilities.m */, - 8B17307D8D5E9068BF81147ED3B8E9B3 /* PFAnalytics_Private.h */, - 8D391B4B9A0CB9FD3E2A0BF899903190 /* PFAnonymousAuthenticationProvider.h */, - 9EDD8E08548221489BFE965864FB3566 /* PFAnonymousAuthenticationProvider.m */, - A1C86812C1E16F9AE6E6995B0510FCF5 /* PFAnonymousUtils.h */, - 25C2F29D6B6FBDBAA33D8593E65EC348 /* PFAnonymousUtils.m */, - C2A808722282E883FC6468CC1082F40D /* PFAnonymousUtils_Private.h */, - B5076516C4CA52DBE232087A86EF876A /* PFApplication.h */, - CB6B147735D1F716FC2CE4332F65D798 /* PFApplication.m */, - A8C983DB75FAE0BEF68EC8FAD134A4A8 /* PFAssert.h */, - 17A3AD5BCF18F3E0478C884A2B764C4B /* PFAsyncTaskQueue.h */, - 511824AA2AD76251DC45B56662AA4DA7 /* PFAsyncTaskQueue.m */, - E6B87160188F7023D2B49F9B91DBAB94 /* PFBase64Encoder.h */, - CDB5EF0EC43B47E829CDC47DBC09A531 /* PFBase64Encoder.m */, - 6B7B6DB35230E2855BBD62DA92FC70BE /* PFBaseState.h */, - 8EE2B15BEF4BF5D9E73B0F8A28BFE3AF /* PFBaseState.m */, - D16A398DDB303A767A2CF933083655C3 /* PFCachedQueryController.h */, - 777C43E3AA95750283ADAA2717A0595D /* PFCachedQueryController.m */, - B1C6CB67201095492AA37DBE54C06E7D /* PFCategoryLoader.h */, - DD82088840AAB58D0F5243C0230D17B8 /* PFCategoryLoader.m */, - 84EE46E65A1FBB043B8876D673FADFCA /* PFCloud.h */, - CB295B33B0FC530FD77C52FEB400203E /* PFCloud.m */, - 22672E7A70EC530B20C26F2C140E29B2 /* PFCloudCodeController.h */, - 5F0070F7D9C1BBF95C7F9EDB863AD555 /* PFCloudCodeController.m */, - AAF064AE7675931E4027B1B48FAC0E0E /* PFCommandCache.h */, - 6EA17DCC97E135EB8F1461B291A14122 /* PFCommandCache.m */, - 66EBD08EBD02C88CCDFE2505E222DAD4 /* PFCommandCache_Private.h */, - D497EB0E3C5055E7FFF959587818764C /* PFCommandResult.h */, - D39AAA20779A11314DE3292353142A99 /* PFCommandResult.m */, - BCF178329E80A7C9788F12D35E84DE11 /* PFCommandRunning.h */, - 99C45BAC8E657D5D25B91CF13FDC4C8C /* PFCommandRunning.m */, - EB8DC8124CEE001FB0DCB7332A0E4F5F /* PFCommandRunningConstants.h */, - 05953FCDA42C0E7323C7F9B5AB886535 /* PFCommandRunningConstants.m */, - 70AE4459357403A9AA0B61959202F9A7 /* PFCommandURLRequestConstructor.h */, - 8261B575C444CC37A75DDD38033FCDD3 /* PFCommandURLRequestConstructor.m */, - 87D5C76598D7EF5558AB88A80F0ADCF6 /* PFConfig.h */, - A5170E55DE35501B4A713A17711AA0A0 /* PFConfig.m */, - 51E4264B938F3B426D4673C5853B2500 /* PFConfigController.h */, - A57B413BD6BA1EA23004CBF88974B886 /* PFConfigController.m */, - 860AA407C8EE7F2BE1FF80F5F2C2A67C /* PFConfig_Private.h */, - 8BABC47EC65B9265C3909474DE8574C9 /* PFConstants.h */, - 68500105927A08A48A3DA8C59A9B2E12 /* PFConstants.m */, - 2713B9DB4119C31C77089DFEF6EE5B0E /* PFCoreDataProvider.h */, - F9B9BF93B8FEFA346B7D92DBA659A391 /* PFCoreManager.h */, - 9780F90C830BDBFB169674AFE0921D8C /* PFCoreManager.m */, - C11D9DEA5457F8EBBADB980FD16BFF7B /* PFCurrentConfigController.h */, - 863525FC6AF9553E708425B9E1FBBBE3 /* PFCurrentConfigController.m */, - 752312E41E6828D9DFD974503E6DA356 /* PFCurrentInstallationController.h */, - B1D36F734A33A907E9958F6778F6D9B1 /* PFCurrentInstallationController.m */, - 035328EF0D2E9A7C6F011700B6486C4B /* PFCurrentObjectControlling.h */, - C5ADC6D84457794AAF2D20A45BAD22C5 /* PFCurrentUserController.h */, - 190972B3389C83F8279C6D8F35289902 /* PFCurrentUserController.m */, - 17A3A025CC5669EAB17537171EB530B4 /* PFDataProvider.h */, - 11C9D5CD5B0EBCA52D876E7FBB58F435 /* PFDateFormatter.h */, - EEF3C9636DEAF164594CC80C9C6F8A3F /* PFDateFormatter.m */, - 415E520ADA42019A24142D17486874BE /* PFDecoder.h */, - 1A2F0A20C55B0387272AD66520D13A5C /* PFDecoder.m */, - 5A5DE351A0BF7F1BFDD329A0BA815E81 /* PFDefaultACLController.h */, - 110EB87EF49E8CF2B18E11692AC1E903 /* PFDefaultACLController.m */, - 9BF42B9B3BCA6AC0E4C7A5C4A8D56C76 /* PFDevice.h */, - 8277E669C14D90814D85CAF0D08745D7 /* PFDevice.m */, - 1F447819CD0C3DF808D6946A6364F969 /* PFEncoder.h */, - 0A0A214D3D8D8170F77B8631024D14E1 /* PFEncoder.m */, - 1C55517F4B7361A3891B563478721DED /* PFErrorUtilities.h */, - B7F9DB4E614C6F9EFC52811652A1D27F /* PFErrorUtilities.m */, - 96B412F3169F62969DAC6A85BFBE68F4 /* PFEventuallyPin.h */, - C69C27BDBB8B1E63677A91477C52FDA5 /* PFEventuallyPin.m */, - BED41B8E7F85EE8E67A39865C037C805 /* PFEventuallyQueue.h */, - C0CF8725DD1DD49BE8D6A0907238EA04 /* PFEventuallyQueue.m */, - E873F760B193DFBEF81E19B36B33FCED /* PFEventuallyQueue_Private.h */, - 9377FA8A24B121D60FE9AA1745B38DC4 /* PFFieldOperation.h */, - EB19AF401F51648EFC25CAA336AF77DA /* PFFieldOperation.m */, - 314F14CB5AC1E3119F923E7D73FD2F55 /* PFFieldOperationDecoder.h */, - 877583FCE729451EBA709DD2F69EC026 /* PFFieldOperationDecoder.m */, - 9A85625E51C91983512393262199899C /* PFFile.h */, - 3AF83C8DCC1E7EFC3B79460BFA1DE1C9 /* PFFile.m */, - 8B8B01C970E96BD862FECF58F194D051 /* PFFileController.h */, - 2FD4E699963B718746F80595602968BA /* PFFileController.m */, - DFC41E4010D852E3977AF17A221CF0CA /* PFFileDataStream.h */, - AAC3249989EA908FBA78700563472204 /* PFFileDataStream.m */, - 89362786CE0111AEDE7DA9FACAB648E7 /* PFFileManager.h */, - 8844A67AC930593786AECB0231747628 /* PFFileManager.m */, - 466D8E751494438DECF05B755061844C /* PFFileStagingController.h */, - A1A2A66F3FC79A3E2778CF485801E64C /* PFFileStagingController.m */, - 1D505F6BC2E75E018CC37E152B154653 /* PFFileState.h */, - 563F4B9FC46A7DD720D8945683D2129D /* PFFileState.m */, - AD697B984E89B4847323B087964A48EA /* PFFileState_Private.h */, - 948A8D3F019700F19148AF5DEF0F0F49 /* PFFile_Private.h */, - 62A507869EFBA5A9140C70CE67650D5F /* PFGeoPoint.h */, - 39673E55062D1B61E621B82E444AE6CA /* PFGeoPoint.m */, - DAC1022DF912D32448DE24E2472BD2EB /* PFGeoPointPrivate.h */, - C2055953D9AE502AA512CC756C8E07B8 /* PFHTTPRequest.h */, - F3FC1F5573A43949438409A8D53778C3 /* PFHTTPURLRequestConstructor.h */, - EEDB7E1475A81EE2F12373656077D160 /* PFHTTPURLRequestConstructor.m */, - BADE09B4EF587C0DCFC3F014B3DD1767 /* PFHash.h */, - 0B440A60956319D37497AA73807B5A30 /* PFHash.m */, - 7F101824BC10648B2A569BDBA9C23BE5 /* PFInstallation.h */, - 2FF4FE0BB509523AA3AB48C24B04D2AD /* PFInstallation.m */, - F846ACF033FD69EF28381C488F0B8AA0 /* PFInstallationConstants.h */, - 16BA4C30B79BFCF3F4A3AE316FC70C8F /* PFInstallationConstants.m */, - E615EEC282CDCEE0D432D51BEA8F872B /* PFInstallationController.h */, - 6D4152BFBEE6D5EE6216460618A0BFAC /* PFInstallationController.m */, - 7055666DC363C604BD87260B48EA2D42 /* PFInstallationIdentifierStore.h */, - E74884D5A2FE748F09D5B9232A56C7CE /* PFInstallationIdentifierStore.m */, - 0691E15B84DC22B58B24454A662AF44F /* PFInstallationIdentifierStore_Private.h */, - EDBB5CF4F1A249E933B2469709D9F8DD /* PFInstallationPrivate.h */, - 83A7946D9B9D56684542F8D584D20370 /* PFInternalUtils.h */, - AA2D73F6B555F385C9E33E7F424BBFE5 /* PFInternalUtils.m */, - D96C8C02AE822A3F03B68FAA6D594497 /* PFJSONSerialization.h */, - 6CF33435C91D40E4A5913AAFD0EDE463 /* PFJSONSerialization.m */, - 00513F8B5C023D9B6A67A40068570F19 /* PFKeyValueCache.h */, - 57D6481216B3368FC95D692879E27822 /* PFKeyValueCache.m */, - 6744DE3000BEEB7DA4D7DAB0E9D6BB57 /* PFKeyValueCache_Private.h */, - F820E3F0707C3FCB027CE5B4848D8564 /* PFKeychainStore.h */, - AD6BEE4FF1F262959DD604F6DFDBAE3B /* PFKeychainStore.m */, - 59EE9ABCCF20271B1A4D97DE22AA8DA7 /* PFLocationManager.h */, - CC4DDA9182F4F5C704598B6E722CDC50 /* PFLocationManager.m */, - 86CE1FC6E16C4981CCAB4D92ECBFB7B4 /* PFLogger.h */, - 3191215D0811BF0108D28AC1F82B3739 /* PFLogger.m */, - 4E9B0790246604518A313DFB192E257C /* PFLogging.h */, - 08DF92C3B8A5DF531A37052EE2D36BA2 /* PFMacros.h */, - 732EEF0236374C25C56BB5C469D842CB /* PFMultiProcessFileLock.h */, - F0CC09558A010C10AAC9F4CD4C53AD04 /* PFMultiProcessFileLock.m */, - A8F222054463224431341AD45804A6AF /* PFMultiProcessFileLockController.h */, - 05E01E38D82A4797E14C9CE9355C3F23 /* PFMultiProcessFileLockController.m */, - 9D0C2EFD1475837A15B4834D37F70DCA /* PFMulticastDelegate.h */, - BF2B0A2A499B1873CEA684566E8B5487 /* PFMulticastDelegate.m */, - DAC0B4DB266A15A3A61A62142BDA7069 /* PFMutableACLState.h */, - F657AD9C72FE5B432F841B53493D1253 /* PFMutableACLState.m */, - 74B8114FC619CF23645359BCCE432DBC /* PFMutableFileState.h */, - 0BE6A6845F3586D10E5408C9FB591328 /* PFMutableFileState.m */, - CA749ACCAF73A8469072D11F78DA1FDA /* PFMutableObjectState.h */, - F25C9F58CFDC13B49DEA0CD5013B1F28 /* PFMutableObjectState.m */, - 8804B5C3B20BA33A62CE380BBCCC489C /* PFMutablePushState.h */, - B6CE6D85363B92C1CEFB2272C5148AFD /* PFMutablePushState.m */, - 053C8DC2F31DA21D6E7CC1C8B47B7E7D /* PFMutableQueryState.h */, - A544D2F0BE5B4B49B319A783BAC77F80 /* PFMutableQueryState.m */, - 70DB3EA0DDEFC1284BB14523B754EDA6 /* PFMutableRelationState.h */, - 8553BBD3BB32BA047968D8FCC0BB7A4A /* PFMutableRelationState.m */, - B84E7ADA66D7676BCB6F6E7FF2FD89EB /* PFMutableUserState.h */, - B1214E8947EB72FF3291E4600C97D58F /* PFMutableUserState.m */, - 0706E15293B087CF3BC18798F10E6F37 /* PFNetworkActivityIndicatorManager.h */, - E16AA8270CAF5EA08D00D8A1D14F2059 /* PFNetworkActivityIndicatorManager.m */, - 753E0E1AA4BBDE64D2AE0835F63D119F /* PFNetworkCommand.h */, - 4DC8B50782AEA44066CA5219CEC67A5F /* PFNullability.h */, - 2C343079DDD088139CD814C6470830F6 /* PFObject.h */, - 01AF5FDFA32CA58C779C40A40EA3D2AE /* PFObject.m */, - 585CC800D2685BF4E18ADBC41D9E73B1 /* PFObject+Subclass.h */, - A133BB30724BEF75ABB81AA509743A45 /* PFObjectBatchController.h */, - B63D2BB991AB59607701D89CDA8174A8 /* PFObjectBatchController.m */, - AF40A6B842E8FD9BC950FE00DC5B6F40 /* PFObjectConstants.h */, - 8015A60E5EC1992EE7F83FBCDBA181E4 /* PFObjectConstants.m */, - F03D0C596469A502C868EB32FEE7D020 /* PFObjectController.h */, - 062A3C8CA2C198CBC3F4184AE0DE01AB /* PFObjectController.m */, - C16B1F4CA93F9A1D3CD11DFF0FE20F8D /* PFObjectController_Private.h */, - 9DD7435FB2C6E16C60951E238B329F43 /* PFObjectControlling.h */, - F908ADAD5734EE4C1EA4466E7FE108C1 /* PFObjectEstimatedData.h */, - 6FAB614DE9EA103FF9C22D630ECA7C8A /* PFObjectEstimatedData.m */, - 2F9ABD34BEBC96F253CE102411DABDED /* PFObjectFileCoder.h */, - C8BC0FA6F2C382BF336FF4ECE47C192B /* PFObjectFileCoder.m */, - 4A3635CE479DD0FD03FB5589A75B62EC /* PFObjectFileCodingLogic.h */, - 63FEAF34522E76198D04B10565E8B1AB /* PFObjectFileCodingLogic.m */, - 92551145ADCBD6A18D43AA2DA73CB21B /* PFObjectFilePersistenceController.h */, - 9DA3372CAB38E88F7791F2DE96931153 /* PFObjectFilePersistenceController.m */, - C04DABE57BA79040087CCBBA081B3616 /* PFObjectLocalIdStore.h */, - 60ADD91AA56B1BFB00B61936E49D3CFD /* PFObjectLocalIdStore.m */, - 6423CE3A0CE5B59A5BF4B47922AB73A5 /* PFObjectPrivate.h */, - CBC8CC7D9B59534667A62E84BF1C8B31 /* PFObjectState.h */, - E2B8566040F468B4AED32A8BCB27E12A /* PFObjectState.m */, - 8FF0B9CB696808B8C85640C9F7180BB8 /* PFObjectState_Private.h */, - 6D701A317BF6E49246153A00794CCB57 /* PFObjectSubclassInfo.h */, - 50FDC487ACDFDD8DDE2E916C1BC455FB /* PFObjectSubclassInfo.m */, - 573E7709FAFC9CAAA3DF68F8C7ECC087 /* PFObjectSubclassingController.h */, - 838239C2DC01EAB9AEE7B5553878AB6A /* PFObjectSubclassingController.m */, - 45637DE63711406B9BE1BECBB23B8EE0 /* PFObjectUtilities.h */, - 590E38452847AE815D9FF8AD36B38F82 /* PFObjectUtilities.m */, - A51A35330B4AB677C74A6579FC025B7C /* PFOfflineObjectController.h */, - 9825AD54796F54B9AE10955E1AFEDD77 /* PFOfflineObjectController.m */, - 99AC0E4FACC6E2558227DD51210B84EA /* PFOfflineQueryController.h */, - 63D62EED87FA9B033C640237039C5D71 /* PFOfflineQueryController.m */, - 29883E2F7FA2CA83E9313FBE44CEE849 /* PFOfflineQueryLogic.h */, - 06A372A2F9877D7182971EB1783DA977 /* PFOfflineQueryLogic.m */, - E31FED7E103689AA50C7795F772BDA23 /* PFOfflineStore.h */, - A421A4107F66CC195D55371620880A47 /* PFOfflineStore.m */, - CCE6D23A84D4E85A3CD15B802A7AE4CE /* PFOperationSet.h */, - 29704F78778234595067B1E9C61399BE /* PFOperationSet.m */, - 043843700614E5CF0208EF9E180A96B5 /* PFPaymentTransactionObserver.h */, - 4B0FB893863BB0FE866F5AA02F5D0360 /* PFPaymentTransactionObserver.m */, - 48D4D5780017286C543013DEDE63D651 /* PFPaymentTransactionObserver_Private.h */, - DBC82AC944CB7F585939AB9589D4F9B4 /* PFPin.h */, - 3585F7A481D939D1D1C3294775ACDBE7 /* PFPin.m */, - 6D3B7834060709F0758DAC799C640461 /* PFPinningEventuallyQueue.h */, - AD21854D02782DB6A5EB737BB86B1861 /* PFPinningEventuallyQueue.m */, - 3FC9896164A2A05D8D267241CD2C2615 /* PFPinningObjectStore.h */, - 5359BA092EAD4FA522BBB80FC27C145E /* PFPinningObjectStore.m */, - 8E40D034FA34D8F3FB9563D4D5DE2705 /* PFProduct.h */, - 53FB4903C13CD4B728E653A624D36228 /* PFProduct.m */, - 35D8F9A9CC00721366C770FD9E85A417 /* PFProduct+Private.h */, - F82C8E9DF011E7453EA40431821FB283 /* PFProductsRequestHandler.h */, - 75302811ECF5EDC235B0DB8B86291C2B /* PFProductsRequestHandler.m */, - 2248EAD3CAEF6EBEDAA0AC7AC52C51DF /* PFPropertyInfo.h */, - A631F9A0F687BDDBC873BA5813B8D674 /* PFPropertyInfo.m */, - E495F30B2C591E5AD9A1CC249901ACD2 /* PFPropertyInfo_Private.h */, - FF73455163A4B9C060A3B73C44658BB4 /* PFPropertyInfo_Runtime.h */, - AC7C43830B8D324B7BDFBFD2376A6F01 /* PFPropertyInfo_Runtime.m */, - 7126CE5A9A9393978939ABBD58F26EA9 /* PFPurchase.h */, - DC073136FD3869B2BB9A9D30587BE1DD /* PFPurchase.m */, - CF1F38521C14DBB0BD9845FBEBA5D9CC /* PFPurchaseController.h */, - 0A0D3F66C0F548DA826E162FB412704A /* PFPurchaseController.m */, - 775ECD6B6F3AADB8D98379981C1AD2A4 /* PFPush.h */, - B8FB92BD0F40B979678430FF43192D73 /* PFPush.m */, - C5603815F5CC7760F94208FF90B5488C /* PFPushChannelsController.h */, - 5E49C46EB05E82BE8654545920C832EB /* PFPushChannelsController.m */, - 0133FEB4B03FB6F08C08C7B83AE52ED3 /* PFPushController.h */, - DF6863C55207FC14F127AB7F8E41415A /* PFPushController.m */, - E8F241847217017ADBC4283C2F8F469A /* PFPushManager.h */, - F44B7D42437E31FF67AF695E26480E07 /* PFPushManager.m */, - 7B3E595A5E46C08CB6EDD2AECFC436E7 /* PFPushPrivate.h */, - EBA5F64F36074059AACC0B7DACE6B378 /* PFPushState.h */, - AECDAF19F1A734986EF3B6CEE0E5C285 /* PFPushState.m */, - D70110CA542D79C645FCD20E2C9674AB /* PFPushState_Private.h */, - 17DC80DA8AA3988FB60EAEFDA4C6CAC5 /* PFPushUtilities.h */, - EA487C07C0F804790F5993CF5E3C6D3F /* PFPushUtilities.m */, - B9680BBDD9701CD4FEFECC8FBFF038F0 /* PFQuery.h */, - 6CBECE1F342D08DEA6C849D4CA23FF5C /* PFQuery.m */, - 3DBC85FB02CFE6EE23007AB1EE43B774 /* PFQueryController.h */, - 843B775414C85A6B739A68A808587E0B /* PFQueryController.m */, - 3C6EC3EAC5F58685494656DAB9912EA7 /* PFQueryPrivate.h */, - 9F8925C71640AC9E18B09C2F32530257 /* PFQueryState.h */, - 506FFF3B464AAC43A21AD8404EDB0408 /* PFQueryState.m */, - 9E1183E2718E99F11B4E9C9C8A80C1AF /* PFQueryState_Private.h */, - 89E660FBA2FA907C548F83F17BA9CF56 /* PFQueryUtilities.h */, - 39FFEDFCBEA2D381B7572D62222BF55D /* PFQueryUtilities.m */, - C41C99E60696D54F31E9D4B990F0B0B3 /* PFRESTAnalyticsCommand.h */, - 1C41DBC222643AB47C9976935B1047D3 /* PFRESTAnalyticsCommand.m */, - 5F1B395CC49D380489BB0BFDABAC35D9 /* PFRESTCloudCommand.h */, - 19A96C3911D00F07330D94949348F1EE /* PFRESTCloudCommand.m */, - A81137DE4CAF25A53FED9F979106F428 /* PFRESTCommand.h */, - FAAB83BF02473BC0A2415881560312DB /* PFRESTCommand.m */, - B72B60C944C86664F4D05675D934FC68 /* PFRESTCommand_Private.h */, - C29500E205220EB8DB49F1C825FADA89 /* PFRESTConfigCommand.h */, - 6EA0F7203418529BD442E51DEA289F3E /* PFRESTConfigCommand.m */, - 86B7508FF3B989FEF4B30FE544B32B91 /* PFRESTFileCommand.h */, - F996BE0C38219298C5E7E92AF1A4B595 /* PFRESTFileCommand.m */, - A5E89E9F5A5618CE7965C7807CC99B95 /* PFRESTObjectBatchCommand.h */, - 27C2859683043CE13C206444451CA55D /* PFRESTObjectBatchCommand.m */, - AEEB033EF7B91BE4441AF7756D696170 /* PFRESTObjectCommand.h */, - D7CBDA2EC1FB8FB11CC6A2C5C9808D47 /* PFRESTObjectCommand.m */, - 7E80BE5758F379DA9001B14AF95B3C8B /* PFRESTPushCommand.h */, - 159D21FB91947A9EBAD9A6D923A0E579 /* PFRESTPushCommand.m */, - 35F8D658E839BECDFF6BB8B4BC6CCE2D /* PFRESTQueryCommand.h */, - 5B131657B4AE8F0B2C6E0A0C5EA11C6E /* PFRESTQueryCommand.m */, - A026613DFF149D8BD7D37DDB26152A35 /* PFRESTSessionCommand.h */, - 6BF00A7674A2E0DCC20BFA18BCD89098 /* PFRESTSessionCommand.m */, - 3BB229E81638C48D768ACFA74D97E7E4 /* PFRESTUserCommand.h */, - 331270F5C910E5D29DEFABA0DA889E54 /* PFRESTUserCommand.m */, - 42416DC02ED2707B15870496281BE361 /* PFReachability.h */, - 3B19DBC177333992D2D0D2D98EB6BA58 /* PFReachability.m */, - 218C17FDFAF32433D839F97FF17B2F62 /* PFRelation.h */, - 5D0D627CB39CA6EDBC298591F7FB9D15 /* PFRelation.m */, - 5501D5BA77001B3A319125F589DE4774 /* PFRelationPrivate.h */, - DD64D76CC193A68DABCF84C619EFCFC8 /* PFRelationState.h */, - 0E987F26F4B8054102531C64F176F982 /* PFRelationState.m */, - 57C18DD90130326F25EB38A9F343D5B5 /* PFRelationState_Private.h */, - BFA480ECE7F710752C7409F5C380B0F8 /* PFRole.h */, - 9761E4B9A3217B85F0615BE7D41F1CB0 /* PFRole.m */, - 1A40A4CAE6145F41C05AA25BD5CA9BD9 /* PFSQLiteDatabase.h */, - EED19F37D13868499C43F13264741ADA /* PFSQLiteDatabase.m */, - 6131294FCF882C880A8DAC44B48846EF /* PFSQLiteDatabaseController.h */, - 4A7EEF110C12FC52BD3E497ADDEF6E48 /* PFSQLiteDatabaseController.m */, - B99C240F89A7BC2E76B71472745234BA /* PFSQLiteDatabaseResult.h */, - C235A6B7A110CC5F4093F80159287E17 /* PFSQLiteDatabaseResult.m */, - C9F6E5345A39FC5550216E4F65A976B0 /* PFSQLiteDatabase_Private.h */, - 060DB4FD225A0238252576BE01EEF381 /* PFSQLiteStatement.h */, - 36204B280B4F34FB73981677EC64B941 /* PFSQLiteStatement.m */, - 5D78EE0601B6C0565B9C30B04EF23630 /* PFSession.h */, - EEC0387E8F35C7BADBD1B4D6A482702D /* PFSession.m */, - 50A3A1846FA5A0CC07A927EBC49B5BF2 /* PFSessionController.h */, - 470D6445B0D70D789438D349CC071D71 /* PFSessionController.m */, - 505C7EAE502AC992E9273C10AEFCC86D /* PFSessionUtilities.h */, - 747ED87BDA0CFC263BA40D355C825B04 /* PFSessionUtilities.m */, - CB50B697271E10AC0A2FFC3D43C3AD6D /* PFSession_Private.h */, - AF2FAD7A53F3AACF9B492617ABD3B62F /* PFSubclassing.h */, - 024EDBAD6DEA89979FB7FA48DF6FD2E1 /* PFTaskQueue.h */, - 8896894278B01270F7BDA51E345AEE3A /* PFTaskQueue.m */, - 34E2D0613E3152D0F6D3B2C1F125895C /* PFThreadsafety.h */, - D31C147B6E9BBE54DE19804E1F7CC396 /* PFThreadsafety.m */, - FE3AA7D1FB50A9011DE1F2F4F8986498 /* PFURLConstructor.h */, - CC980D88098DADD0C68CCE0CC413730A /* PFURLConstructor.m */, - 7017E1904439F48F0CC39653841838D9 /* PFURLSession.h */, - 31EF40A5583C282323AF183A3C383CBE /* PFURLSession.m */, - 875608FCABF08485CA5E0DB7D13A53FE /* PFURLSessionCommandRunner.h */, - 8258E5C6287CE05ECE4DBE3A83508112 /* PFURLSessionCommandRunner.m */, - D292B318B83D8D026CD2FAAAB59A62D9 /* PFURLSessionCommandRunner_Private.h */, - 9E645516AFC0CAD5C08101D5F844874F /* PFURLSessionDataTaskDelegate.h */, - 3841F19677B4987758E47C8053644CD1 /* PFURLSessionDataTaskDelegate.m */, - 2FEDA810326DCCCBD587DEF33586F24C /* PFURLSessionDataTaskDelegate_Private.h */, - 270B41DE1EE1C3B5391246CDAED4C8BE /* PFURLSessionFileDownloadTaskDelegate.h */, - 4B5B237502D9B0D2DDFB52EE72716703 /* PFURLSessionFileDownloadTaskDelegate.m */, - 96D3C7353F23912FD706CABC336D4D2E /* PFURLSessionJSONDataTaskDelegate.h */, - EF879D6FEC35876A57F1E379EA8F1BEA /* PFURLSessionJSONDataTaskDelegate.m */, - F3C4D6B4BF5063C2EC4B6F8862998D93 /* PFURLSessionUploadTaskDelegate.h */, - D52EE0139EA03EDDE83AA9D9685536FB /* PFURLSessionUploadTaskDelegate.m */, - AD362A7EBE3D2E2936C281C50AC04997 /* PFURLSession_Private.h */, - DC8B8475B2B05D335E837929C3ABB2AD /* PFUser.h */, - 6DB47428B78601AEE33C5C5D52E2D994 /* PFUser.m */, - 7C5FC55392104FEA040D1DDC37429A8C /* PFUserAuthenticationController.h */, - 187E6237B057376167C9530E9E3D2597 /* PFUserAuthenticationController.m */, - 4D9FF040FF41C3E677D9AE345094667B /* PFUserAuthenticationDelegate.h */, - A8D02A717544E8E472DDB654462BA93B /* PFUserConstants.h */, - 0835AF0C620B80377CFA5F0070B6F2A8 /* PFUserConstants.m */, - A72EE5253DC8D7B55D95796E6F4F6DD3 /* PFUserController.h */, - 973D3E8805C0C339DAA7877098A99A7E /* PFUserController.m */, - 5FA9B2ECC9A26394B543D0F42751F2B3 /* PFUserFileCodingLogic.h */, - E04C49F5564B931B972E6F826A732529 /* PFUserFileCodingLogic.m */, - 6B50558B71D8208975C6283BE61E816D /* PFUserPrivate.h */, - 0D9C3B80FDA98CB3B3C80A70441B019C /* PFUserState.h */, - 28F300166004C87461905D9822D4C136 /* PFUserState.m */, - 5C8045DBF84B4C9FAE5F9493DEF7990E /* PFUserState_Private.h */, - 9AEFA60D137098ACED4615C88DBA7D17 /* PFWeakValue.h */, - 2ECBBFC9244A3F50EA402F166DEB6DCA /* PFWeakValue.m */, - E557ABF7F7687DC7DFF115D7F62AEDA5 /* Parse.h */, - 7C385EA5C279B003F8C215ED4163B769 /* Parse.m */, - 4D23A382F14DB50C5CF89F62A1401FFD /* ParseInternal.h */, - 58D592B48830284011209E1663E7D733 /* ParseManager.h */, - 09293FA9DE2829C01FD1BC90B6481E0C /* ParseManager.m */, - 005D86B592A4BA2B3547363ECF47A177 /* ParseModule.h */, - 28D60E52FD4E440EA2F1B080932410DE /* ParseModule.m */, - 01D98518A65B6A9D496DAB55A24824E7 /* Parse_Private.h */, - 23AE72B6B473935D6C17CA1B5CE6EBD0 /* Resources */, - 400B87487B883E2FBF3BA1A84CBD5001 /* Support Files */, + 659AE8A839BF3EA84CE2D2619AAFC66C /* NSDateTimeAgo.bundle */, ); - path = Parse; + name = Resources; sourceTree = ""; }; - 982E1CE8B0E4B7E0E0791F1618606C43 /* Serialization */ = { + A72B651D418D114B7649F27A58F0EEEB /* Bolts */ = { isa = PBXGroup; children = ( - DBD6939AC0C49B37416ADF296729C43E /* AFURLRequestSerialization.h */, - F1CD895FE6B420EB0729480BD79BE4E3 /* AFURLRequestSerialization.m */, - 041725EB6A05B1CEEF10F1C68D2B4E1C /* AFURLResponseSerialization.h */, - 26F7C6740719BEC436C7CD3912C491A4 /* AFURLResponseSerialization.m */, + BB211972567BA45E9E2DAB1B1C077D4F /* Support Files */, + 81EC82CA426853E969A21FDC89A2489C /* Tasks */, ); - name = Serialization; + path = Bolts; sourceTree = ""; }; - AE1FCC8648F4384498D2CF5B7F32DAAA /* AFNetworking */ = { + B3A68FEC8F91125E2665718B1C870034 /* Pods */ = { isa = PBXGroup; children = ( - 0AED3FD61E1EF7915955E1D7600608EB /* AFNetworking.h */, - 560364AB93E50BBEF4B33AC759A5F066 /* NSURLConnection */, - 0D702677028DE77B5F98109E6E9A03F7 /* NSURLSession */, - 02DC75DFC7A4F83A34208DF25798A845 /* Reachability */, - BA60ADEBAE4F73CFB407D5F2B66F2BE4 /* Security */, - 982E1CE8B0E4B7E0E0791F1618606C43 /* Serialization */, - 789559A54696F4710DBD7111F2EE0FAA /* Support Files */, - 27C4DE13C26F320CD386E4DA6D6716B8 /* UIKit */, + C41E88C14C3AEE3F7A7EBE70CBF6FE78 /* AFNetworking */, + A72B651D418D114B7649F27A58F0EEEB /* Bolts */, + EA5839CA7ED87A78550EAAA640114686 /* ContextMenu.iOS */, + 72C556AED8233708F279D55B53179DD5 /* NSDate+TimeAgo */, + EE763FBA4BE98D43CCC79051A9305797 /* Parse */, + 3E616E7502DFC661CF470D4C196B17F9 /* ParseUI */, + 37C187A946F86F96D43F3B5E7B8BB1E6 /* pop */, ); - path = AFNetworking; + name = Pods; sourceTree = ""; }; - B6564B7B05E0D234CDEE562117C5EBF9 /* ContextMenu.iOS */ = { + BB211972567BA45E9E2DAB1B1C077D4F /* Support Files */ = { isa = PBXGroup; children = ( - EFF1793AB041ED2DA9362386ECE91641 /* UIView+YALConstraints.h */, - C398F4947CB112102A0ADF8368272495 /* UIView+YALConstraints.m */, - 526FB5D06EEAEC04BB51ADED7679CF69 /* YALContextMenuCell.h */, - 37763F17F64B25496F9259C6C59F7CB8 /* YALContextMenuTableView.h */, - 3827F868B3F08C9E6CA5CFEEE3C83EED /* YALContextMenuTableView.m */, - 0A35C5F1675B9377306ECAC57658FE06 /* Support Files */, + 73B5E7339805B09F42BF719F1A6F3B61 /* Bolts.xcconfig */, + B82BDF2DB2AF3004F43B1A3A57997473 /* Bolts-Private.xcconfig */, + F7D69FA827468B9904DF732655380BE4 /* Bolts-dummy.m */, + B66C2B04AD0EF565A1AA8CE88C5E38CF /* Bolts-prefix.pch */, ); - path = ContextMenu.iOS; + name = "Support Files"; + path = "../Target Support Files/Bolts"; sourceTree = ""; }; - BA60ADEBAE4F73CFB407D5F2B66F2BE4 /* Security */ = { + C41E88C14C3AEE3F7A7EBE70CBF6FE78 /* AFNetworking */ = { isa = PBXGroup; children = ( - 6B54B045A5C8DC9D0510BE5BE3FE0A1C /* AFSecurityPolicy.h */, - F363289FFEDBECB17FBC94ED2AE8C0EF /* AFSecurityPolicy.m */, + 5879F2FB09C5807B9FDF0A95766D5A62 /* AFNetworking.h */, + 6467564F3C2CD3B25B6C4D7C7BB69097 /* NSURLConnection */, + 696780D89D4DAE639D292F08D86726C2 /* NSURLSession */, + 16E7FFA960794C112853DED76DBC1AF2 /* Reachability */, + FBD36B4240D7C715963AB0D366952F77 /* Security */, + 2CE8AD631B3F75F88E99ED7A60C25BB6 /* Serialization */, + 1E9E37EACAEABED78602D6A28B880B58 /* Support Files */, + FA281573835AA5B58E1595905BBEDC7D /* UIKit */, ); - name = Security; + path = AFNetworking; sourceTree = ""; }; CCA510CFBEA2D207524CDA0D73C3B561 /* Products */ = { isa = PBXGroup; children = ( - 7A52DF7C69FED7E78E844893F5F58808 /* libAFNetworking.a */, - A88B9D7B7216A9C1E1312C4CBC71128F /* libBolts.a */, - 7C5E7538EF5118E38934B9886BC17B43 /* libContextMenu.iOS.a */, - 3845B32677B589F5F7443E7D6E469D4A /* libParse.a */, - 6F2AB6103ACF8E3202AE317027CA808B /* libParseUI.a */, - 1A782DEC3085443686EE99BF46207C32 /* libPods.a */, + 98BA5038261FBEE24BBC3F399BD90C23 /* libAFNetworking.a */, + 0206D7017431D1DE214E1E55DD1CA00E /* libBolts.a */, + D1883197CB1BD7E2C04D44DEB54AE998 /* libContextMenu.iOS.a */, + 7D0B2ED163A92C1717CA51F8534F021E /* libNSDate+TimeAgo.a */, + 58DF201C7D18AC9382C7A10622498EEC /* libParse.a */, + F509F95BA6BCD09E8277CF2DE4DA42D8 /* libParseUI.a */, + 3877DF147287113642F6AD9C0DB0310F /* libPods.a */, A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */, ); name = Products; @@ -1875,217 +1672,669 @@ name = "Targets Support Files"; sourceTree = ""; }; - DB950EF338A1419E0F336CF98E3D2AC9 /* ParseUI */ = { + E2B9394A418EE71C1E22343458733EF0 /* iOS */ = { isa = PBXGroup; children = ( - 5C5F86DEE2CDAB301DCBD052E170C3DF /* PFActionButton.h */, - B2688E675D28E976EDC6B6AA84C41C84 /* PFActionButton.m */, - FF535EE9855D265BB146986E399302C9 /* PFActivityIndicatorCollectionReusableView.h */, - 5E63A2D69F78652A010BB377EBB449C6 /* PFActivityIndicatorCollectionReusableView.m */, - EF790182566A5099C39C1B289E8BB3B8 /* PFActivityIndicatorTableViewCell.h */, - 161C522EE324169DC559AED510116C63 /* PFActivityIndicatorTableViewCell.m */, - F1B7F591E729212EB6BF33EF88BA1981 /* PFCollectionViewCell.h */, - F0E3349A60D7826DA93B7B2959FCEB2D /* PFCollectionViewCell.m */, - F42BAF2FFD8FD598E5C736149EA031F8 /* PFColor.h */, - 3F8F0DF089A8D938A0A83B044D743001 /* PFColor.m */, - 99C80D21838865183077DD44395D6C3A /* PFDismissButton.h */, - 9151DC926D00004E1604381F7985BB36 /* PFDismissButton.m */, - B6715EFDF271A27FBC8980E595A56F18 /* PFImage.h */, - 4A595D297E140ECE32592BFEFC293B9A /* PFImage.m */, - 6EDB22FC9E38F0BCE867A085A703C3C0 /* PFImageCache.h */, - FEF70A7046A494A88828C2736E5DB5BC /* PFImageCache.m */, - A5BBD08523DDF7DFF2711114FC722A5E /* PFImageView.h */, - 6F1F7C24D363A023B057B4B020BED379 /* PFImageView.m */, - F1DD91DA807740D7FAB3167719838902 /* PFLoadingView.h */, - 9981AF787E3013B9030751CAD2D7A086 /* PFLoadingView.m */, - DFB79D7DC036E7A8C84740F1E542074B /* PFLocalization.h */, - 2F4C5429E2494ED58C557A5F11CCC6AC /* PFLogInView.h */, - 1045C6BD9178A7E123E2001F4061D8EF /* PFLogInView.m */, - 5A11AAB2D71A25709B7A73C3D4626B66 /* PFLogInViewController.h */, - 2F22D85829359CAC7406869D232CB96B /* PFLogInViewController.m */, - 5BF05C278FCCB54E2356A81F4362E3FB /* PFLogInView_Private.h */, - 3F8A7EECD6F3077A3B0FC86D271300A6 /* PFPrimaryButton.h */, - F8C27D2D58E1E3AF1C21FB7330AF1B98 /* PFPrimaryButton.m */, - BDF771A5145C765EE70F40CEBF7C3075 /* PFProductTableViewController.h */, - 3662B43E3AABF39CEFE44FA79A74BB70 /* PFProductTableViewController.m */, - 9BECD483F69DE182010F84F44CFAB40C /* PFPurchaseTableViewCell.h */, - DA89BE341EEC7242A78FEDA064807901 /* PFPurchaseTableViewCell.m */, - 0C0458126D7C16A449337164DDC84D21 /* PFQueryCollectionViewController.h */, - 66C32C6E7A5D7E52B33E0268964CE9D7 /* PFQueryCollectionViewController.m */, - B539C1B5ED1A98FE70171B60D8186E32 /* PFQueryTableViewController.h */, - 31F9E89C104ACA3B7C08B33DB94FFED2 /* PFQueryTableViewController.m */, - 15B3921F710AB762D4B6DCFC53018A70 /* PFRect.h */, - 9A835C10155FEF5DCB5D5E43843849B7 /* PFRect.m */, - DFC690133F99B68E1F8CE7784769EF36 /* PFResources.h */, - 6F8D3DC3F913BF4E10E3FDEBC2B57B62 /* PFResources.m */, - 63491A7EC224003EF49DC8F88BC3EB18 /* PFSignUpView.h */, - 33BB29F39122EC7F976E5232ED519B46 /* PFSignUpView.m */, - 1C97247E12ADC1F7516B907DB1083863 /* PFSignUpViewController.h */, - C9EF79160C35E4B837E7EBBF7C95D158 /* PFSignUpViewController.m */, - D6974501F00D5E601A051C644A12DD71 /* PFTableViewCell.h */, - A8718EC782F1DDBEAC83251BEA9043B4 /* PFTableViewCell.m */, - B2726742F4F01872C36F74F3A273125E /* PFTextButton.h */, - 4415F3C02D8407018883CAFD17661FD9 /* PFTextButton.m */, - 4CAA43C472F7F6152B3507ABDDE9AD44 /* PFTextField.h */, - CDF42DAF3471B27B84DD07F1A7E3391C /* PFTextField.m */, - 10926AEF9594A323E624C27E8F4B643A /* PFUIAlertView.h */, - 8D0D83D976316A1E4675C57A59FD08D7 /* PFUIAlertView.m */, - 51B91EABBB44E7CF6E6B3CD95D857313 /* ParseUI.h */, - A1297C03656FAE86C50B3C5179093556 /* ParseUIConstants.h */, - E31C214E20318A87C53DB448EB27C886 /* Resources */, - 5D2BF76AAFCF51667EA94C561B87B388 /* Support Files */, + FC796DCB4788FB840D9025949079A06A /* AudioToolbox.framework */, + 47400368FF5156B023E93C3E82E16456 /* CFNetwork.framework */, + C74596AC3E38A52329D1EEE95C27275B /* CoreGraphics.framework */, + 9DA36160BA0216D14C3924C282BAB7F4 /* CoreLocation.framework */, + 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */, + E8705BABE3C82AE3B0C16C1A41809C51 /* MobileCoreServices.framework */, + C3377FCED75EFA8411F46FCAB569CA0B /* QuartzCore.framework */, + AE8117874FB6AE79F6EE0B2845297948 /* Security.framework */, + 52CF911E3F9125BF7DDC679A8D3C20E5 /* StoreKit.framework */, + 6E506E997BA37804E78B12743B103213 /* SystemConfiguration.framework */, + 239E0F9D31C8A1EB39ECBBD49FCC766F /* UIKit.framework */, ); - path = ParseUI; + name = iOS; sourceTree = ""; }; - DDE689B6B09170B803B77F9EB078E1CC /* Bolts */ = { + EA5839CA7ED87A78550EAAA640114686 /* ContextMenu.iOS */ = { isa = PBXGroup; children = ( - 200225903789300BB00A2889A4437CE8 /* Support Files */, - 2F8332C2B83A463D42D1B98C775DFC06 /* Tasks */, + 1F32567375CC1003F038991B27DC4F7D /* UIView+YALConstraints.h */, + 7A8C0E126FBEBC781FFD512AE7FA7A26 /* UIView+YALConstraints.m */, + A8E3915520E965F9E617BF1A8C36B1C6 /* YALContextMenuCell.h */, + 57262F9EFF4C54EC8B1425BC1CE98F42 /* YALContextMenuTableView.h */, + DD7CDF7009567C9D6394B695AF816E37 /* YALContextMenuTableView.m */, + 7B41CE7C0D86128FA9B4F47C2B3D4CD6 /* Support Files */, ); - path = Bolts; + path = ContextMenu.iOS; sourceTree = ""; }; - E057C2EB9A740CE736968F80830BAC47 /* pop */ = { + EB57DDB3388FBC701046A1E93218737F /* Frameworks */ = { isa = PBXGroup; children = ( - C091E831068E3E504A40AC6932B39C87 /* FloatConversion.h */, - 38C1E5A4A6882760CB349FCABD22A9DC /* POP.h */, - F3A985A006B0CCD0116D8FC53C4D1834 /* POPAction.h */, - 313669CF0D1BF49C96C85FC593F4BC1D /* POPAnimatableProperty.h */, - C9565C73D5D4BE79747E60DCF1557E71 /* POPAnimatableProperty.mm */, - 14938EB08280063D294781C3164C8332 /* POPAnimation.h */, - 8336CCF2280C58E6C367DF4EC0EBB7B3 /* POPAnimation.mm */, - 9F210DEEA777E0BF1995DC3570CC616E /* POPAnimationEvent.h */, - C0DF3C83EBC5F7BF6DAAACEBD7D72791 /* POPAnimationEvent.mm */, - 5785AD09C2208501D5161E950E701889 /* POPAnimationEventInternal.h */, - C1B6A53BFD919966B87CD6FBFD89CE1B /* POPAnimationExtras.h */, - 22DC4C87D619EF0F28631B5560E82333 /* POPAnimationExtras.mm */, - ED596D85957A49EC6092EC8EC38FCE49 /* POPAnimationInternal.h */, - EC10F21A5E230A911C2C2E5082CDAE4B /* POPAnimationPrivate.h */, - 3A5F7AF86D19E519B94AD6D8CB98CC34 /* POPAnimationRuntime.h */, - E85E0983DBE882A8009D0F7EAB591B91 /* POPAnimationRuntime.mm */, - 2E88590D291A3C131FC32F9BC9A80038 /* POPAnimationTracer.h */, - C1E27C3CBB149C1873F6CDC55D998CE2 /* POPAnimationTracer.mm */, - 9DA58C3428E2A0E2F88C2A0522297274 /* POPAnimationTracerInternal.h */, - 94815AA3EE3CBA04CEE85515701AD534 /* POPAnimator.h */, - ECC48BF18D3BD01C21B65648709A45D6 /* POPAnimator.mm */, - 0476012CEBFEB22B5F0926994E6AEEE3 /* POPAnimatorPrivate.h */, - 212068113F29FA47D17730ED388F8706 /* POPBasicAnimation.h */, - F54B1AE39CAF0CA846C1C729B033E047 /* POPBasicAnimation.mm */, - 7F59C51782AE555897A5B92D6B3CECD1 /* POPBasicAnimationInternal.h */, - 4CC05709207C91767940918CDD4779DC /* POPCGUtils.h */, - 0A9ED47A0EA56543BEB2F83DFD6122C8 /* POPCGUtils.mm */, - 928EC8B9105DA581C7896C2102E87BE2 /* POPCustomAnimation.h */, - 8EC4FC6A3A06D9292C296C691005546B /* POPCustomAnimation.mm */, - B0F7BCEE9A871E1193D694931FA31E17 /* POPDecayAnimation.h */, - C560616DDF5273CF7C53EF72EA6ED45A /* POPDecayAnimation.mm */, - B0CE575CDDE0B1795BB8B88E0B49ACA0 /* POPDecayAnimationInternal.h */, - 90DA3C63E9AD758336342BC51C0BB859 /* POPDefines.h */, - 3155A15C877F794FB064A4A0CEEB2F13 /* POPGeometry.h */, - B330BCF969EF6189E02E10926FB95CED /* POPGeometry.mm */, - 9663A817A809169745F3F8E987FFE076 /* POPLayerExtras.h */, - 197635F0BFB93E63E82503F09B7AABBF /* POPLayerExtras.mm */, - 9C3FE18EB564AF4087573DE6F3F2D3D3 /* POPMath.h */, - A19FD133843D5FCF16B8AF3B4E165515 /* POPMath.mm */, - F81E8633F1E784423FE8B9BE16D38981 /* POPPropertyAnimation.h */, - 2726A20CBCFFB77F9972C445E8972099 /* POPPropertyAnimation.mm */, - 134BDC30251FB7A5465C17F603FCAC5F /* POPPropertyAnimationInternal.h */, - 7371F16336283F2D8BB2A199CD4DDEF5 /* POPSpringAnimation.h */, - C24554FAA71D841BC3C0759DA37874AE /* POPSpringAnimation.mm */, - EB56BE02F1B0412A41C9D9834B04BC30 /* POPSpringAnimationInternal.h */, - 6961E549FC85F85EB7560B887B11C928 /* POPSpringSolver.h */, - D5CE48778301C24CD288B08DDA441605 /* POPVector.h */, - F0B4105C7EE2DA010EA4746E79138C7C /* POPVector.mm */, - 35574BADA6CDEA944F089CBC021F01AA /* TransformationMatrix.cpp */, - 2E056FF5C4EC38A55B45FB52F395D72E /* TransformationMatrix.h */, - 96015F1C746803D9318614B277F71BCB /* UnitBezier.h */, - 1088A147F4A4DB5B1AB0A3782F770EF4 /* Support Files */, + E2B9394A418EE71C1E22343458733EF0 /* iOS */, ); - path = pop; + name = Frameworks; sourceTree = ""; }; - E2B9394A418EE71C1E22343458733EF0 /* iOS */ = { + EE763FBA4BE98D43CCC79051A9305797 /* Parse */ = { isa = PBXGroup; children = ( - 3E49F373A0C99D0BDC90B707820423BE /* AudioToolbox.framework */, - BC83DB2D364DF47142AB2F90071DA9F5 /* CFNetwork.framework */, - A97DD8424AA6D29A671297332ADC6CA1 /* CoreGraphics.framework */, - 94CA59055B37DA8DC1D9377D2231CF47 /* CoreLocation.framework */, - 8868E76B0C2B4B5B262EF75FD75DF4C9 /* Foundation.framework */, - 62B4F6275559C45BDBB446ABDB11EB0A /* MobileCoreServices.framework */, - ED8D97DDDCF9842413073AA979D81CD2 /* QuartzCore.framework */, - 9CF2B2B9DD2ED593C69A3425ABF50CEA /* Security.framework */, - B3C592B1563BAD172B026388C571DBE5 /* StoreKit.framework */, - 4D1BA2737792A257200ECAE76708D233 /* SystemConfiguration.framework */, - 9FB80727EBDBCBDEEBCAB45A1785BAF1 /* UIKit.framework */, + 73255E52B56ECB68C1799B5391F4417D /* BFTask+Private.h */, + 1A91EEDE8C7A6B31C2A05FE382152430 /* BFTask+Private.m */, + 617D220324EF51E32701037AB3B7994C /* PFACL.h */, + 7318D46BCC46C45624A58D09BF59AD27 /* PFACL.m */, + 6B6906BA58A708893C496F829C45DE8A /* PFACLPrivate.h */, + D352CEC5576C01E8BE60AEAD74D531CB /* PFACLState.h */, + DEF96384602363D9E140A3480CF1AE6C /* PFACLState.m */, + EDEDB8FE40254A22854D3E43109A88F2 /* PFACLState_Private.h */, + 538B533F0A14F3AFF0384A6E35C88F23 /* PFAlertView.h */, + 20A9279DABB12A3A350F256E04B589EC /* PFAlertView.m */, + BD6916DD548BBEF982E129D4ADCA50C4 /* PFAnalytics.h */, + 43011F509A9CA36CCF1F6FE318A44835 /* PFAnalytics.m */, + CACE127E057ACF033A0A59A4B62F36E0 /* PFAnalyticsController.h */, + F7E6CB7EBD5DD182485EC1B01FFD406E /* PFAnalyticsController.m */, + 7F37BDAF72EFEF9BD278F460EC2777CD /* PFAnalyticsUtilities.h */, + A2F5A0AF00712AB15F12282085DF694A /* PFAnalyticsUtilities.m */, + BEEC2786704C942940CD10E3F749CEE4 /* PFAnalytics_Private.h */, + A8F3DC227BF67D356F69321EFB5BC8C3 /* PFAnonymousAuthenticationProvider.h */, + F4DDE0E81520E3201CF403C8DAA7ECCE /* PFAnonymousAuthenticationProvider.m */, + A1BE727276517B932F2B64A6FC3FCCF7 /* PFAnonymousUtils.h */, + FAAF0C858F399B359B7921102F568FC2 /* PFAnonymousUtils.m */, + 9FF2C4AB205929FAE824F3F2C811BC3B /* PFAnonymousUtils_Private.h */, + 08F54AFDA8569C430EF8A3EF68AD806D /* PFApplication.h */, + 3EA417AE6CDB838C92E170472191D0DF /* PFApplication.m */, + 0C7A0327639CC312E92E3CC82BA386AB /* PFAssert.h */, + 6B6C978DA502A9F639630B7DB4F0F7B5 /* PFAsyncTaskQueue.h */, + 673587B2907BA706E532D70A260B0E23 /* PFAsyncTaskQueue.m */, + 9FD87BEA2A82FBCF43F08520914FAF67 /* PFBase64Encoder.h */, + 1B3F0C8633F889B5613FBFF328B46EBB /* PFBase64Encoder.m */, + 207158EF53AC0A892A53EB8AD174C145 /* PFBaseState.h */, + B9EEFB0E13911BFE92BB019AF38E77F0 /* PFBaseState.m */, + C9363231E632CCDB302D43B8FF481641 /* PFCachedQueryController.h */, + F6DD1876D580489E010AEC2846628B23 /* PFCachedQueryController.m */, + 735137870D3101BC005B5CEEA18BABAA /* PFCategoryLoader.h */, + F2AE1005EC45AEE127A8650F06BCBAEF /* PFCategoryLoader.m */, + B9E000B981FCF33ACCC4AA76FEEECA97 /* PFCloud.h */, + 63BC048EACE4F5B5628D719274D8C52C /* PFCloud.m */, + 5BDFB93D7E4BF1E99BD2B1CCB15FD0AA /* PFCloudCodeController.h */, + A5B9BCF180F3871EB64CDA5D298A60A7 /* PFCloudCodeController.m */, + 765B68008399E2AD5680EF7D17B0250C /* PFCommandCache.h */, + 9668058EF6D9611AE0F52B0A9D8131AD /* PFCommandCache.m */, + 9C551CD0049A5489B24695592DE118BF /* PFCommandCache_Private.h */, + E9BFB88263F6AC941D8AEACDCA5BF2BA /* PFCommandResult.h */, + 274990949179381C67FCBC2FB6237E86 /* PFCommandResult.m */, + E103621ACC460E7923231496DC5F9936 /* PFCommandRunning.h */, + AB191AAD1EBC1DBC7BBC4374B8D95BFC /* PFCommandRunning.m */, + 5C3EB6B508AEE57A217EDA3D36FF587E /* PFCommandRunningConstants.h */, + 54ED68E1ECE1262E6D9BC5B3F77BB6AE /* PFCommandRunningConstants.m */, + B7B68993FB16678C2C1A6EACD54BB72B /* PFCommandURLRequestConstructor.h */, + 4A4F618AADE59392769825A0D49EE47C /* PFCommandURLRequestConstructor.m */, + 9923A756C94863C50037B3D2BD78F2B3 /* PFConfig.h */, + 0032DD75A0637521BCE408B488991A32 /* PFConfig.m */, + FFE01D48EF7DDCAB2FC799BB39E6D6A4 /* PFConfigController.h */, + 52BAFCE08A44FBFB2F6EC59A3F1D9D79 /* PFConfigController.m */, + 1016A8D2452E56419C6CE81CC7EC4F6B /* PFConfig_Private.h */, + 1B96C276DE7B41CDE5726F2371D90180 /* PFConstants.h */, + A32A4885982917556368207430E04EAE /* PFConstants.m */, + 07D2FC4FC605245EE247C94509830D89 /* PFCoreDataProvider.h */, + E1CC1609ED693F8AD00B3E0AC737E55D /* PFCoreManager.h */, + 8FA15F6CA2D7C7EF833942425A4D4E14 /* PFCoreManager.m */, + D0174B42952D90F56EA0F2648DDE8091 /* PFCurrentConfigController.h */, + 2BEC52371750B2AD4FE542FA081B707C /* PFCurrentConfigController.m */, + 7ACCB6B9273FFBB25B369C4E6B70F40F /* PFCurrentInstallationController.h */, + F0D26272E2D206ED59FEA3953DA60BD9 /* PFCurrentInstallationController.m */, + 16AEFED7962E0BF326C178758FAA59FB /* PFCurrentObjectControlling.h */, + DA62858D5B874C3F65A65F7E38634279 /* PFCurrentUserController.h */, + 9B85DB17C99ACFC636195DE8B7E94F28 /* PFCurrentUserController.m */, + 1AC27D16447D4E34E9C9C3F32E5E3C92 /* PFDataProvider.h */, + CE69D782F43B9CDA9A38BC2A313170E2 /* PFDateFormatter.h */, + 8915F1D49EC6C0508498246B9ACEFAD5 /* PFDateFormatter.m */, + 9B321A74199674C110D83880D9E64B0B /* PFDecoder.h */, + 1E00153F1487EA845DC2CA6D776CCBFC /* PFDecoder.m */, + E44B0C9E0501BB1831C29E61F86CAB89 /* PFDefaultACLController.h */, + E967305041BCBA1F811528239735DE21 /* PFDefaultACLController.m */, + 52B23FC4F06E1B1F6E4B87AADE84A616 /* PFDevice.h */, + E4B0889630AFD4FEE22ACC8897E502BF /* PFDevice.m */, + 7AB7B8E6741B6E0DA722014D71526A8B /* PFEncoder.h */, + 34CA1F0C3EF627E402B7E3044CEBF30C /* PFEncoder.m */, + B78A26BF250CCDBE634934404921965F /* PFErrorUtilities.h */, + 5E489A5115065FA03D7D3F15FA3BFC83 /* PFErrorUtilities.m */, + 5BC7DC696876D5B9270CA496AA95369D /* PFEventuallyPin.h */, + DDB175753057C1F0FFBE10AB7B0EEB27 /* PFEventuallyPin.m */, + 92379A8257F8FBCD71D81BC0856D3972 /* PFEventuallyQueue.h */, + 822ABF9BEDB469FDEA0376462E065B92 /* PFEventuallyQueue.m */, + DDE935B0E49A17A9AAF9F1F3690617A3 /* PFEventuallyQueue_Private.h */, + 93B8CFD3B61887AC829C393B74B7FFFA /* PFFieldOperation.h */, + 3FD7A9CAF1212AD0BEA9C1F1FDEBB771 /* PFFieldOperation.m */, + C132AB5B9FFEB4B7F934CA87D3455638 /* PFFieldOperationDecoder.h */, + B86BF1E7407A2BDBFF2DE2E9884D4D33 /* PFFieldOperationDecoder.m */, + 90E81AA7E9A2C782FEA33022EA460137 /* PFFile.h */, + 3504D1B10CD69BAB4473A7C496756522 /* PFFile.m */, + 00B33AC4876AEAFDEEDC1C7231112392 /* PFFileController.h */, + D57EDFC44E568CFD0246659F492273A7 /* PFFileController.m */, + AB6D645DB24B0161496C79BCE1E62F88 /* PFFileDataStream.h */, + DDE8CA03E44D77EEEB65DF10666691F0 /* PFFileDataStream.m */, + FC1BAB4081E46DF3947E5BD5AD48981C /* PFFileManager.h */, + 47F9956B87220A668AABD09619F9134D /* PFFileManager.m */, + 6E581829116421485B93F442A7B52B1E /* PFFileStagingController.h */, + 12E82331DB385318C884CD8058143C44 /* PFFileStagingController.m */, + 810D122E23D13A40420ED3D1D258EF4F /* PFFileState.h */, + 3A0E5A4854788886ABD909549C5D11BA /* PFFileState.m */, + 954F116380F604D2E6F3C72D655F9A1C /* PFFileState_Private.h */, + BD1F1D739696559ABE05CEB48AD2751C /* PFFile_Private.h */, + 4A8BECDAF3344B5FC08AE2A877D46543 /* PFGeoPoint.h */, + 54DE34EB5CB8EA4B93274FC248FBE4E1 /* PFGeoPoint.m */, + A0AC8B57627C291845EE2958D0F30F8A /* PFGeoPointPrivate.h */, + FB1632F36B47719FBD89B72749ED1EFA /* PFHTTPRequest.h */, + 896143C79933B46F6E5BC5605CBD3FDF /* PFHTTPURLRequestConstructor.h */, + BBC75424DFC187C0863492C5D31BA77F /* PFHTTPURLRequestConstructor.m */, + CDC26E1A3CDFBE282F2AA32E09691A43 /* PFHash.h */, + A2ABD2D212DD9D0B0E07D04D45281FD5 /* PFHash.m */, + 5D20C829D04DF206BF2DDA0611400595 /* PFInstallation.h */, + E71489D04AFAE4B2A9234F74D89F8EDA /* PFInstallation.m */, + 99CB9D2CBAA3EB9FF897BDA59C05AB0E /* PFInstallationConstants.h */, + 4258A390F83ECD7E9252FDD8B27DAB0D /* PFInstallationConstants.m */, + 5BD35A119D862154158FCCC4B09B3262 /* PFInstallationController.h */, + B8864C84EAA3037F155A3B69D9EF0CE9 /* PFInstallationController.m */, + 08B7EF901C70552DA9B5A8971B03F15C /* PFInstallationIdentifierStore.h */, + 3265918C8EC595B914BC49318B924A5E /* PFInstallationIdentifierStore.m */, + 6BC36677DB08053931D1BAAD36BAF62D /* PFInstallationIdentifierStore_Private.h */, + 1052CA766BC6302276F38952879BA31A /* PFInstallationPrivate.h */, + 1AF37B6F9885062F0FD4C6504523B46A /* PFInternalUtils.h */, + D179BA1822848A6F5E22C30B8DA415E5 /* PFInternalUtils.m */, + 65B7927D74C0DA147DF9C272E77CCFCA /* PFJSONSerialization.h */, + E34C5907954DA4C1892EDA643F95193C /* PFJSONSerialization.m */, + 09A93A5DE9B28BD2227FECC2725024CD /* PFKeyValueCache.h */, + 92C96A18ED4977ED36761B564703B7E1 /* PFKeyValueCache.m */, + 6823513AE0BEA0DA0200365519976CC4 /* PFKeyValueCache_Private.h */, + 9FE2B065E415FDE6A0E9A36FD7E97FF7 /* PFKeychainStore.h */, + 5EC857A3558E673EFCE406A5DFF70CED /* PFKeychainStore.m */, + C1B5D8065E12E7D99BD7C432E1F25EFF /* PFLocationManager.h */, + 78DAFF8E8BC51BAA61944940D146B13D /* PFLocationManager.m */, + 76DBE339038C3A58AE9A8BE18D095653 /* PFLogger.h */, + 69670E33EC5B2A67F2FC18752BEA4B68 /* PFLogger.m */, + 854E62EC5E2973D6FCF577826C74F488 /* PFLogging.h */, + 023AAD7A7FDD5D6EBCB0275E3053B48D /* PFMacros.h */, + 3EE2B18DDC2877E30470FF74A6225727 /* PFMultiProcessFileLock.h */, + 2BA37293BA9D0C3170FA299BFB8066DD /* PFMultiProcessFileLock.m */, + E7FA3706C8A417CF36509CA16FEE6E0D /* PFMultiProcessFileLockController.h */, + 9CDA5DACDC94924F7EDB7D93CABD0EAC /* PFMultiProcessFileLockController.m */, + DAB23904561CC53FA534F667038B5583 /* PFMulticastDelegate.h */, + 84B558C7F4022FCA686D637485AF3061 /* PFMulticastDelegate.m */, + A6130721BBB130E46530627B2D84D660 /* PFMutableACLState.h */, + 3B99B90E05635CBE020DC50A0CAF2EED /* PFMutableACLState.m */, + A895901B4938323EF02B5D3624AFFAAB /* PFMutableFileState.h */, + 3E2ECD41B391B0815DB0B7B35093D62A /* PFMutableFileState.m */, + D8F85E50534D30E21F4AC22033441BCE /* PFMutableObjectState.h */, + 33C5AA662A1B31B9B74F6F6D2BA8EF89 /* PFMutableObjectState.m */, + 53C01CF54B15E1F429124FF7255C8845 /* PFMutablePushState.h */, + 4E053BFD0B35D22C90F81CE9450340A1 /* PFMutablePushState.m */, + DF83BDFCCA994BD066517D629BC3DF51 /* PFMutableQueryState.h */, + 2D38FC40E07DE779D7B3A19F7FA831A2 /* PFMutableQueryState.m */, + 20E50E8A0708866EC29A54BC2773B687 /* PFMutableRelationState.h */, + E53EF9CF597991C40EFE4662D07B3C4D /* PFMutableRelationState.m */, + E2008D080880260047ED152D6F5D84A8 /* PFMutableUserState.h */, + E49D8072A840070C229A8656B766BCA1 /* PFMutableUserState.m */, + 7DA577BF9DDB46C2FB26396B480D30EF /* PFNetworkActivityIndicatorManager.h */, + 0EFFCB2BC3F85DF43E91E7C9E6029CDF /* PFNetworkActivityIndicatorManager.m */, + 7DA3DB595C2499FC183C45E3E9B22292 /* PFNetworkCommand.h */, + 9CA9BAD9E5F012F5B45FB24FEED6CB57 /* PFNullability.h */, + 41F19FCA7E4720B98AE2148E2383CC09 /* PFObject.h */, + 69CC0EFFD531D00F188F0AC109288144 /* PFObject.m */, + A5B09E102D7D249A4B19FBB0355D180F /* PFObject+Subclass.h */, + 92EFF2CB8EF752330DCED2DE09D8B048 /* PFObjectBatchController.h */, + 87D86889C8EF66DE0CB120F92CC8BC82 /* PFObjectBatchController.m */, + 7DAED37688A9788B970EB42A53BC2906 /* PFObjectConstants.h */, + 8553FA7441EFE9ACF82C08BECCBB8E9C /* PFObjectConstants.m */, + 1BFE915330494AB9449B0035C1A3FB20 /* PFObjectController.h */, + 32CB9DB9B2B0FE0097C1D30814F022F6 /* PFObjectController.m */, + E1A0C52A07FAB18E39B89BFCE82A0E42 /* PFObjectController_Private.h */, + AD6E4A746B24C276099087A9EBAEF713 /* PFObjectControlling.h */, + D2D2B345A8F9F89101865ADDD108B736 /* PFObjectEstimatedData.h */, + DF0466A4594D21314E63193491214681 /* PFObjectEstimatedData.m */, + CC3B217F18416097DEE13AF10B1ECA76 /* PFObjectFileCoder.h */, + 2965148A80ED4448DBFB85049DE369E1 /* PFObjectFileCoder.m */, + D9A6AF9360C12CA1241B412833DCBA5B /* PFObjectFileCodingLogic.h */, + 8B078276D0A69125A2A41D5905950EDF /* PFObjectFileCodingLogic.m */, + 42D399495BBB064481EB941973B350C8 /* PFObjectFilePersistenceController.h */, + 2655AF28A5BB760A9D8CF09E68E118A2 /* PFObjectFilePersistenceController.m */, + D50C646DA41493735AF1C4DB86891753 /* PFObjectLocalIdStore.h */, + F17D7D11766EAE6CAE75AED56352B4B5 /* PFObjectLocalIdStore.m */, + D113D54E2E25899C9BA785E8FC922DF5 /* PFObjectPrivate.h */, + 5E490C6DFB35FC5208FC224CE6F0DA02 /* PFObjectState.h */, + 1B836352DD006B82B8C8B18944F7A5F4 /* PFObjectState.m */, + 17C1B899764F56C1759EB14EAE39DA10 /* PFObjectState_Private.h */, + B82D05CA95E5FD6D9B9ED444391C47C3 /* PFObjectSubclassInfo.h */, + 87BE28AC7E09136A862805B3C7FD7EE7 /* PFObjectSubclassInfo.m */, + B56CBAD19A2CD9BFF20F3051B4627A81 /* PFObjectSubclassingController.h */, + FAF4306E39F8973F061A32BC46F31FAE /* PFObjectSubclassingController.m */, + 0FB0126FD52EE9ACE8C5A159D6EACB56 /* PFObjectUtilities.h */, + 7686BD3230BCC010ECF764A9A6BC1BFC /* PFObjectUtilities.m */, + B7A955E7740A7339D23B5304005393AB /* PFOfflineObjectController.h */, + E48C34CD5ED6562AF2C4DD6BBC5EF535 /* PFOfflineObjectController.m */, + F80B8B50F9D8716C8F1482A13F291D05 /* PFOfflineQueryController.h */, + 9F6E076421F723D8D370F4D7A93A3912 /* PFOfflineQueryController.m */, + 871FF52E7A467327FDCE8823177C9F5F /* PFOfflineQueryLogic.h */, + B08A07BDA7AE5470D8B41DFB55B1862A /* PFOfflineQueryLogic.m */, + B83D35381795B5966D20FFC3550C1B12 /* PFOfflineStore.h */, + 70803358E5AACD697743DBA69EC2F75E /* PFOfflineStore.m */, + 1C2F828710D03ADAB5A77385F42B2005 /* PFOperationSet.h */, + 3AC80D3003419DA756DF2880C6F36172 /* PFOperationSet.m */, + D7A540D0D3BC4B77A4D4F180D8F895E0 /* PFPaymentTransactionObserver.h */, + 643074ED44114F64B0BC6FE33DAFD9AF /* PFPaymentTransactionObserver.m */, + BAD1F9D81611626BD9723EB565D74B20 /* PFPaymentTransactionObserver_Private.h */, + 0B4D3B911045DA61853DA813F8B7C6CE /* PFPin.h */, + 73B670C37B2B798A121E6EA4650193A6 /* PFPin.m */, + 7665F686CB87E16A8AA3434472CFA6B8 /* PFPinningEventuallyQueue.h */, + DD4F870028EAE1FD8D5AFDDD2470A748 /* PFPinningEventuallyQueue.m */, + 701E5785FFBE0972D168BB43B924A6E2 /* PFPinningObjectStore.h */, + 8094F451DBF5DC13B98EEEC4DE10398D /* PFPinningObjectStore.m */, + FA5CBC2DC2B028CED630E64EBB9D0FB8 /* PFProduct.h */, + 0A6F91C7FC8222580298FA066453DF05 /* PFProduct.m */, + D80FF4E9773DE13DB3A24674C2396EA3 /* PFProduct+Private.h */, + 8D93BE5DB8400592658EED9DD4616653 /* PFProductsRequestHandler.h */, + 33960334DCC05CD75FC4AF6CD8BE3DDB /* PFProductsRequestHandler.m */, + C0961B8F6EB8D027464FFB57A6CDE37B /* PFPropertyInfo.h */, + 973C19D13243047264FC21FBFCDFC121 /* PFPropertyInfo.m */, + 8FFB9A965D43043523BBFB5852F98398 /* PFPropertyInfo_Private.h */, + DC43B9A350143A165C3FF99564935EE4 /* PFPropertyInfo_Runtime.h */, + A3E9F37A09B03FA6BC992D2C8F8E7B3A /* PFPropertyInfo_Runtime.m */, + 4CC177AF3ABA56751898D2D9CB28484C /* PFPurchase.h */, + 9C7D5F32F2625673AFDBCC82AA5EB437 /* PFPurchase.m */, + F89EEACE0F757C432E3342B476B97ED5 /* PFPurchaseController.h */, + C4EAF8CE8527EE11C36B8F62C1BBF5B2 /* PFPurchaseController.m */, + B764BD498C359AAFC3E6F6AAC3D3E85C /* PFPush.h */, + 7E8A207A2946C0BB45CFFFCDDDF262C0 /* PFPush.m */, + C0B0F0D29938228204FD8B3B73B0574C /* PFPushChannelsController.h */, + 14EA4683E9E8CBE7CDA50AE6E94C3D75 /* PFPushChannelsController.m */, + C481F602B57BFE1DE599333C1792C70C /* PFPushController.h */, + AA761E5A8CDC7B23E7D53C6F2B370465 /* PFPushController.m */, + A3DD0EFB7526AAEF47D57854AEE0AE42 /* PFPushManager.h */, + CD79AE4112C859207DA0A0196FABC894 /* PFPushManager.m */, + F31424CDA773AA527195551EADFF442A /* PFPushPrivate.h */, + 7938AFA7D01492ACDB7E2C6D7BC6AA59 /* PFPushState.h */, + 9A3687171A64C8D18935718B4FF24DF6 /* PFPushState.m */, + D597CC380B1F76815385F7A6310DE56C /* PFPushState_Private.h */, + 7A238C25BA4BC261D2F689BF12926A8C /* PFPushUtilities.h */, + C93F4D18AA8D974173385F0F766E7DB6 /* PFPushUtilities.m */, + B47967310CDF1B079052F1414ADCDCE6 /* PFQuery.h */, + 14EB05FA8924F1F6C9625510D00B06D5 /* PFQuery.m */, + 6A3886486E073DDFC226404820C5AD00 /* PFQueryController.h */, + E7CEB62B4EEA771ECDA804B34CBE5BEC /* PFQueryController.m */, + 692C33871C1E489AFBA8DAE1C7667271 /* PFQueryPrivate.h */, + 78C3F43F458A2618F3C9E335C0826CC2 /* PFQueryState.h */, + E9F3197A789221BFB75AB57FA08CB469 /* PFQueryState.m */, + 72773DBC556A73785E0C5F5893457AD6 /* PFQueryState_Private.h */, + 2E7513C38F42866CBD8F891DC79A7E43 /* PFQueryUtilities.h */, + 639D27426D5127006E970FB7A1174B54 /* PFQueryUtilities.m */, + 08FFC0DB86B62264394E0B3A89EFC73B /* PFRESTAnalyticsCommand.h */, + D94636BF02BBCA2A6CDF6B77EAA004E5 /* PFRESTAnalyticsCommand.m */, + EBEAEFCA15C34ADCCC930FCF8A5C2A68 /* PFRESTCloudCommand.h */, + 5A87B0BB5553675D9F3949E3BCCD04F2 /* PFRESTCloudCommand.m */, + 33DDB3AEDB2B43F3CD9A422BD0B36E24 /* PFRESTCommand.h */, + 40A31B4ABEDCF23954D29D3CAFDC68DF /* PFRESTCommand.m */, + C2645D21C07B6F69240D9A4D983E983A /* PFRESTCommand_Private.h */, + 2A3AEE130935E15C466214757E4A437C /* PFRESTConfigCommand.h */, + 3BF2417542F921BCD429973E192716B3 /* PFRESTConfigCommand.m */, + B76855B1BBA027169AC8CEF90FF17F48 /* PFRESTFileCommand.h */, + C8DD85BA4B5FA2130F3376B7CF1B1123 /* PFRESTFileCommand.m */, + 4B241F8BC8B06C3EB6643B6C67E5F153 /* PFRESTObjectBatchCommand.h */, + F04F99D02A881C18F8E1C650E83678B3 /* PFRESTObjectBatchCommand.m */, + 13241A3B21123E4FE094C366B51D599E /* PFRESTObjectCommand.h */, + 708E4D0D5864F5670DB3C6D0BEA5D8F0 /* PFRESTObjectCommand.m */, + CAAD75E8BD1581901916F81E5AB5A408 /* PFRESTPushCommand.h */, + DA363A0EBAA203BF300BB8AEA7B58092 /* PFRESTPushCommand.m */, + 6E68F5B95AB1A81CC6D8695D1558949A /* PFRESTQueryCommand.h */, + 9BC83B4BD9DA9879EF97882A6B805D3F /* PFRESTQueryCommand.m */, + 19643E83602716D49DB56714C4014980 /* PFRESTSessionCommand.h */, + 66493986FF116C367FBCACB8BD52D970 /* PFRESTSessionCommand.m */, + AD02C69252DD7786D721C61B2B976AA5 /* PFRESTUserCommand.h */, + AEBC2122738345FE4B4B804795532339 /* PFRESTUserCommand.m */, + E2AD6BACBB024B2DB599C0AC72688BE5 /* PFReachability.h */, + 22F8D297F42217E19ECD9D2B11EE21C1 /* PFReachability.m */, + 91B92487E040A134ED6ECE85E9F96CBD /* PFRelation.h */, + 171DCB08FD0E59EC3625D614ACE2E02C /* PFRelation.m */, + 223724E99B7299629D2B6C47FFE66863 /* PFRelationPrivate.h */, + DEA8D28EC393D0CD87305636EBEEBE3B /* PFRelationState.h */, + BBF93E03EBDFC9B6835A33DC14AC39C1 /* PFRelationState.m */, + 0B0CDCA8A92F1EC1489226670FED17FE /* PFRelationState_Private.h */, + D460C6EF4CF1DD775DBB020A78CF5DA4 /* PFRole.h */, + 14E52B238D5014738AB002A4CDD6A30A /* PFRole.m */, + 378806E5D95B89B2F6914E0BDE025565 /* PFSQLiteDatabase.h */, + 8CCAEDE8683EF8A24FFF167A71FA7D5F /* PFSQLiteDatabase.m */, + C00D0192F700B20E64D2594418007E71 /* PFSQLiteDatabaseController.h */, + 9BA5BBB87243515C8EBB8BEDA18847EB /* PFSQLiteDatabaseController.m */, + 140FDABADED9C292E538052CCD0BAB7A /* PFSQLiteDatabaseResult.h */, + 8EE22F8E5E2EAEC021B622AC34352720 /* PFSQLiteDatabaseResult.m */, + A1712FC7AE801C8D0346A18C603E1240 /* PFSQLiteDatabase_Private.h */, + B67C35C1DABD028393D277EEE5D3B7C9 /* PFSQLiteStatement.h */, + 3D44DE0AD73A9BE3947B531BC59C3751 /* PFSQLiteStatement.m */, + 6BEA2C76CCE4B451C48EDE5BAD5C2BAA /* PFSession.h */, + D05E9DBB723E92608165F48E9AF64F3A /* PFSession.m */, + 13781F764EE53C3EC378710AAD2C9052 /* PFSessionController.h */, + C0625D4FC52B190467EDBD198B7A70E0 /* PFSessionController.m */, + 78D6CD6C5264B7ADB33043C833FC82D3 /* PFSessionUtilities.h */, + 5A4D8E589CE7C2025AEDF394F08CB1D0 /* PFSessionUtilities.m */, + 7C46B17139F251CBB4B6F1A5BC13FF31 /* PFSession_Private.h */, + EC33E3D76CA84CDA97634E2740AD12A2 /* PFSubclassing.h */, + BE051BD21600FDC3BEEEC4FD728B4870 /* PFTaskQueue.h */, + E92338ECA650704F11762548FC114CD4 /* PFTaskQueue.m */, + EF168B468FCAB59188891FE988236456 /* PFThreadsafety.h */, + 13912AB24A552973624C801917EE93B3 /* PFThreadsafety.m */, + 1CEA00B74A5BB23D6B7298AC58615DAF /* PFURLConstructor.h */, + CBA01F49A1922ACA40EC02A9A5B8670B /* PFURLConstructor.m */, + 7235B2813F817238C3D71BECCF936BAC /* PFURLSession.h */, + 9006A20100190E9CE8DF22BCE0676858 /* PFURLSession.m */, + FADD9F8FE2B00307C8C608B8AFABE1FB /* PFURLSessionCommandRunner.h */, + 59114E77E8FA17F190C36E71C7D4295B /* PFURLSessionCommandRunner.m */, + E75B68DDAB9B54F1AAC191A9A508E1FE /* PFURLSessionCommandRunner_Private.h */, + 3DA0F2801954B02B932946F1720A5AFB /* PFURLSessionDataTaskDelegate.h */, + F6981E02F3DA9E586AA3F8F9CA7146DE /* PFURLSessionDataTaskDelegate.m */, + 0FABAEE52FE230F73852D3F182250143 /* PFURLSessionDataTaskDelegate_Private.h */, + 708BF014D209E4A867445E7C9EA0EBEC /* PFURLSessionFileDownloadTaskDelegate.h */, + 8510A922B1ED47CC55F1F151966C868B /* PFURLSessionFileDownloadTaskDelegate.m */, + DE6932550272A874DBBD021837FF6C56 /* PFURLSessionJSONDataTaskDelegate.h */, + 5611410C73A9B4211DC397D46762270F /* PFURLSessionJSONDataTaskDelegate.m */, + 72EE0E3DEA73FF87A1F44225E65A2CF0 /* PFURLSessionUploadTaskDelegate.h */, + 02610A49C3BA4693FCDE2B028475239F /* PFURLSessionUploadTaskDelegate.m */, + 7A23FC083F510FB1D62BA453FD6556C6 /* PFURLSession_Private.h */, + D65BBCBB056DB6879DFF0EB12E1C804B /* PFUser.h */, + 312681EB6896B7C2788765E18CA4BC4D /* PFUser.m */, + FB84E1DE622B80AAFC4C5D8680FBA9EE /* PFUserAuthenticationController.h */, + 744FBB3DAB92F7F5627525503F0D83AE /* PFUserAuthenticationController.m */, + EB78BBCA14653EA581EAC45B33B681E4 /* PFUserAuthenticationDelegate.h */, + E6D213C6D417643B9A833B0CCC4E1454 /* PFUserConstants.h */, + 29F2E94A249BC4D49B0C06742741681E /* PFUserConstants.m */, + 61467390B92F97244D3BC26A49D2B685 /* PFUserController.h */, + 1392560741BCEA56A371C0C1A00E3E32 /* PFUserController.m */, + 78F7563A9F217FD7904E5AB2768407D5 /* PFUserFileCodingLogic.h */, + C8E059CFE74839A889EB31D430030D25 /* PFUserFileCodingLogic.m */, + 1781A4ED4F8E1D8A7DCFA8B8B40DE8D2 /* PFUserPrivate.h */, + 4E0FB1196A23924FD3230C985E965FD7 /* PFUserState.h */, + D06FB7493A3B6A4C5285B464F48A9A14 /* PFUserState.m */, + 73E1315856FE518B878BF38603277B14 /* PFUserState_Private.h */, + 68AEB7658D88B72202471E592D74B981 /* PFWeakValue.h */, + 294D66B8B455C83AB82DB0D7AB77A825 /* PFWeakValue.m */, + D1A712EAFDE8F1E77A0E62A0AEE3A4FD /* Parse.h */, + C22A26B6D2BCD459FB68D14D2F857B95 /* Parse.m */, + D0BA59EE37D1B06B78227EBCA6D326C7 /* ParseInternal.h */, + 2296F3C4885080255F075E05DFB1B427 /* ParseManager.h */, + 14C49D948543AA2D8DFEF76353D739C1 /* ParseManager.m */, + CA85A35D3284525FAED1D82CC5689615 /* ParseModule.h */, + 187350C3511E85352C7852B0D3D8B1E2 /* ParseModule.m */, + 6AD49AEE9B786D80C2CA36CD083017B5 /* Parse_Private.h */, + 011559050DFA7329C4F7D072F2D11AD7 /* Resources */, + 1ECE246140A237A3CFC2889C1E0DB632 /* Support Files */, ); - name = iOS; + path = Parse; sourceTree = ""; }; - E31C214E20318A87C53DB448EB27C886 /* Resources */ = { + FA281573835AA5B58E1595905BBEDC7D /* UIKit */ = { isa = PBXGroup; children = ( - 900D054E76F1D5D03B53DBFF276C5C0D /* en.lproj */, + 4FFC7C12A9929D142B391ED373CBFD54 /* AFNetworkActivityIndicatorManager.h */, + AB5AA67ADB7D0C7FA8D41D64158DB24B /* AFNetworkActivityIndicatorManager.m */, + BF8EF50423B482FDAD56806BC1ED5F03 /* UIActivityIndicatorView+AFNetworking.h */, + 07A8832085085296F443AC47AB7BCBA8 /* UIActivityIndicatorView+AFNetworking.m */, + 317BA79E5F1AD8BF7315B4994BF8EA8E /* UIAlertView+AFNetworking.h */, + 647BF62C2F93589EF002FDEA9890EF80 /* UIAlertView+AFNetworking.m */, + 23DED3FB98457B6B3E433FF76593240A /* UIButton+AFNetworking.h */, + BB484A1B11E7D45733E48B6F3BE5BD4E /* UIButton+AFNetworking.m */, + 246C782E571D46A59F4CE5DF4BBCF237 /* UIImage+AFNetworking.h */, + 3B52975B9237400086D156AC62CC60DA /* UIImageView+AFNetworking.h */, + CE7C6284381EBD662B525CB0AAB3B153 /* UIImageView+AFNetworking.m */, + AD35F054FD3FBA08C0C1A4E0D696BF27 /* UIKit+AFNetworking.h */, + 0D15AEEA95A5148DE70DCB783883AB56 /* UIProgressView+AFNetworking.h */, + 766ECFB7911C046BF26727DBBA70D63C /* UIProgressView+AFNetworking.m */, + 70C5FC542FD1979DABEBBF67C4BF62A6 /* UIRefreshControl+AFNetworking.h */, + 5C811BA81343657BD39DE6B0A9CCEDAE /* UIRefreshControl+AFNetworking.m */, + 53D81711A7BE725E27F6C2A6AA858E16 /* UIWebView+AFNetworking.h */, + AD19046439D557B46077E96FE583C11B /* UIWebView+AFNetworking.m */, ); - name = Resources; + name = UIKit; sourceTree = ""; }; - EB57DDB3388FBC701046A1E93218737F /* Frameworks */ = { + FBD36B4240D7C715963AB0D366952F77 /* Security */ = { isa = PBXGroup; children = ( - E2B9394A418EE71C1E22343458733EF0 /* iOS */, + D04EB33EA81B58280CA75C26B353CC2E /* AFSecurityPolicy.h */, + E075B22F58B1F8911EF93D169D51FC46 /* AFSecurityPolicy.m */, ); - name = Frameworks; + name = Security; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 26FAD1D8029AE388ABD0140C46C4C37A /* Headers */ = { + 3A07EF683B21C20A27061D94B5FA152C /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 2525FDF32D03CE2F90E256EF23AC1918 /* BFCancellationToken.h in Headers */, + 300440913D7402F15B08CAA810368C07 /* BFCancellationTokenRegistration.h in Headers */, + 99A0F200BA9C675685D1E43116CA7931 /* BFCancellationTokenSource.h in Headers */, + 7C6D920BACC520618DDFE2362A8ED94D /* BFDefines.h in Headers */, + 79F0B46501221234392581B72DA283DB /* BFExecutor.h in Headers */, + D00730CD391987D0FCDF0599CFFC860A /* BFTask.h in Headers */, + 3525E714E4A235CBE4E6B2C3FBDCDCA4 /* BFTaskCompletionSource.h in Headers */, + 4FE58B65CFBEA1D1823F39D57B543FE7 /* Bolts.h in Headers */, + 1EB7B49E695BEEB604FD158FF186DC8E /* BoltsVersion.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 41ECC592BE1D67895BE77204F56BD7F6 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 37A9C8036CB504D64EB5B9ECC3F31440 /* NSDate+TimeAgo.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 523DEB9D03C6736407946DC3D00EF6DC /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - D7AB6CC905033BE9701B6BE2D8B10474 /* PFActionButton.h in Headers */, - 80C528865C8895DB3426F02DBF3C0D9D /* PFActivityIndicatorCollectionReusableView.h in Headers */, - 352D02CEC844BC2D22026A777FA39ACB /* PFActivityIndicatorTableViewCell.h in Headers */, - C6D7800441271BE5C55F573916AA3EF5 /* PFCollectionViewCell.h in Headers */, - 80B7075F5055261F04B4029C1406EB76 /* PFColor.h in Headers */, - 49DD3F7AD1B9FDEFF123B570668F7154 /* PFDismissButton.h in Headers */, - ABC087DE99A9A9EB06CA4FC2E6D5D09E /* PFImage.h in Headers */, - AD170D2AB15EA449A8AFCBED2A2564DC /* PFImageCache.h in Headers */, - E9C8E5867435024A65D9E929D85D2371 /* PFImageView.h in Headers */, - 8FE6DD5A880949235DF71570CD9AF86C /* PFLoadingView.h in Headers */, - 16E5664C03179ABE5E7339A5D8536E5B /* PFLocalization.h in Headers */, - 015C2EFB4BDA114E874289A8BC01B844 /* PFLogInView.h in Headers */, - 85AECDB66088F01AB3230A50CF38F9EE /* PFLogInViewController.h in Headers */, - 3A3EE6FBA4054D41BB3BE24552D0555B /* PFLogInView_Private.h in Headers */, - C9C11463ADF18ACBC73F8B748202928D /* PFPrimaryButton.h in Headers */, - BE4F6803EAFE5A8C677FC5FE6FA8C4EF /* PFProductTableViewController.h in Headers */, - DD05DB01536F7157D9362BE8E8083066 /* PFPurchaseTableViewCell.h in Headers */, - 7924C2A8992A0D316DB1E9A299F60BA2 /* PFQueryCollectionViewController.h in Headers */, - 59BA7CCA0E9AF6D155A512DF3A8BED25 /* PFQueryTableViewController.h in Headers */, - 5D1D8DB17C40891783970781D35AAADB /* PFRect.h in Headers */, - 183010BEEB58B8B3CC8C1509BD15346B /* PFResources.h in Headers */, - FCE81758F981E89A3B88ED7485A67EA2 /* PFSignUpView.h in Headers */, - 4A9C3367259B56358D28505ACB440384 /* PFSignUpViewController.h in Headers */, - C9D17B038AAFEAC1050C417F57B02FF6 /* PFTableViewCell.h in Headers */, - B1C7B0AA9E3B2A03A251EE453FA0DD35 /* PFTextButton.h in Headers */, - 45E33698BC39D7FF3123216BFE1C1368 /* PFTextField.h in Headers */, - 4BE7FDB3D3FD6EB4DBDBF4A8D6251C93 /* PFUIAlertView.h in Headers */, - 02E5D6EBF54BD9D4CF221E7D76081855 /* ParseUI.h in Headers */, - 67F4EDD1978EF86C5280CB051D92B690 /* ParseUIConstants.h in Headers */, + CFDB590E0BF74B75F68C5D8241D6F82E /* UIView+YALConstraints.h in Headers */, + 58C113248E845E83A0C1BC45C298D325 /* YALContextMenuCell.h in Headers */, + 985531317B0CADBD941EF7C58E44F8A3 /* YALContextMenuTableView.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 35789C083B98EF480FFA83CB6247B6B2 /* Headers */ = { + 6592748ECBED2897AD37CD5760F11382 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - AECED6B3110DF267738AECF5E1F6A7F0 /* UIView+YALConstraints.h in Headers */, - 1280D553590D730A67E0F99C1B65F136 /* YALContextMenuCell.h in Headers */, - 9BAE39B1C12DF4038483AD24F4AEE5E1 /* YALContextMenuTableView.h in Headers */, + 94315FD102E2414BA465F5137DE1384A /* BFTask+Private.h in Headers */, + A915D4D7D96998047110A55EB68445FA /* PFACL.h in Headers */, + A99D97208D00D2F6AFAB19D2B0B4CA9B /* PFACLPrivate.h in Headers */, + DDFF4299248933BA9C039A2ACCC75892 /* PFACLState.h in Headers */, + E1AB90A9BD2BCBDF74A576481757DF55 /* PFACLState_Private.h in Headers */, + 1CE02FBC0604DB365EBDD1CA2C98EC6D /* PFAlertView.h in Headers */, + 42F199AB415D77C913035FB6891A7E1F /* PFAnalytics.h in Headers */, + 24B03E3CEBFE6DF92D3798624570DBA7 /* PFAnalyticsController.h in Headers */, + 8FB267ABE60E97A30F39F5A89361C75D /* PFAnalyticsUtilities.h in Headers */, + A61E7513E800B3B97C2D48A48526D13B /* PFAnalytics_Private.h in Headers */, + 207E6EA55B4E61F9411668BC5ADC6BA0 /* PFAnonymousAuthenticationProvider.h in Headers */, + 676895479A49C84A00AEF25515406BA1 /* PFAnonymousUtils.h in Headers */, + 2E59E88AD7FA5E23EB2884BF7F03E8DC /* PFAnonymousUtils_Private.h in Headers */, + EB0F4E84CD9FED813C2A0BB5A87D92D6 /* PFApplication.h in Headers */, + E2D9B58ECD04DBBEE365F05AF6DEFE3A /* PFAssert.h in Headers */, + F467776F8908391482CDB6FE6CBF8C00 /* PFAsyncTaskQueue.h in Headers */, + 89DA1EB876BA7141F1A40F8048AE1BAC /* PFBase64Encoder.h in Headers */, + 52F79FB4CCA04A5A7B5B16737BB8F306 /* PFBaseState.h in Headers */, + 47B7588383CF64C5E24EFA92BDD9BEA7 /* PFCachedQueryController.h in Headers */, + DA64918375AD615EC7A78C9C58F17A91 /* PFCategoryLoader.h in Headers */, + 5ADFF8029235E88CF25BD045F575B7DE /* PFCloud.h in Headers */, + F8B5E88B8E18BB2704BF1F6CAD8CDD96 /* PFCloudCodeController.h in Headers */, + 9A4497776424B55D2DEB186EECA7681C /* PFCommandCache.h in Headers */, + D7231B0F59D93398F9F3B38E390D7378 /* PFCommandCache_Private.h in Headers */, + F0535F9C552F8920D70881646F57C647 /* PFCommandResult.h in Headers */, + CBB4C206A966186093A077A664B7824C /* PFCommandRunning.h in Headers */, + 8133F915149D2C3DCCCB37D7400E8BB2 /* PFCommandRunningConstants.h in Headers */, + 15BACED1A1409CAC2285BCA89CB1AF8D /* PFCommandURLRequestConstructor.h in Headers */, + D3107A4D1EDC165B2B8F2684B36ED62B /* PFConfig.h in Headers */, + 2D13F096E44493E48D82C6B3F1CC7680 /* PFConfigController.h in Headers */, + B302AD3DEB783D579E68D9EAEDA80A3E /* PFConfig_Private.h in Headers */, + 6C53A99AA323AC105A23D635D85CB893 /* PFConstants.h in Headers */, + A22BD0BC5D61510B4BABAC8A284DB26A /* PFCoreDataProvider.h in Headers */, + 660FC1CF7289F64C4E6F842EADCDDB83 /* PFCoreManager.h in Headers */, + 623489D434FB5A0E96784E951423EE97 /* PFCurrentConfigController.h in Headers */, + ECAE3B699F8E1E7F8AECBAB835652611 /* PFCurrentInstallationController.h in Headers */, + 69EE61E43C6474B742D41E98F445CE9B /* PFCurrentObjectControlling.h in Headers */, + 03BDAA9381CA01CCA0AEB055624489B9 /* PFCurrentUserController.h in Headers */, + 91B3D4785C26BAFCCAD9DE46FC4B32B5 /* PFDataProvider.h in Headers */, + AE13E40FC37E8837A44D3E03BFAD215B /* PFDateFormatter.h in Headers */, + 995A7CB857131DE78231158B6056F960 /* PFDecoder.h in Headers */, + 349177D31E9C7130E09E91B8C682E4ED /* PFDefaultACLController.h in Headers */, + A967CA792971C2DACFD897D548777BBE /* PFDevice.h in Headers */, + 8E0E40DAC6814C6EA72F24C69BDD20BF /* PFEncoder.h in Headers */, + 41F9E24BFC8A7360E8FF98646E0534D7 /* PFErrorUtilities.h in Headers */, + CD904758CF2D6119A7FF646704BF56B2 /* PFEventuallyPin.h in Headers */, + AC7905A3C2C7B9F8E16F917DE1BB17CB /* PFEventuallyQueue.h in Headers */, + 95DFA5CCE6397EF69508C00B7B130D4A /* PFEventuallyQueue_Private.h in Headers */, + 607FB6BB8AE8EFE5684FB420E2F6C5C2 /* PFFieldOperation.h in Headers */, + CA42CE81F0A69EC8D10A19934EDEE8D3 /* PFFieldOperationDecoder.h in Headers */, + D7FE300C0EF96054CBA152A8668B126F /* PFFile.h in Headers */, + E0D1C75E718584F8F35A4B1EB1F46301 /* PFFileController.h in Headers */, + 3D52BDDB5278DD1FDF4BC10FF2D28FAA /* PFFileDataStream.h in Headers */, + F532A3547ACA5A1E6ACF51CF0C45BCD4 /* PFFileManager.h in Headers */, + EF3B10427BCAE74AB3064DE5CF4A8B8B /* PFFileStagingController.h in Headers */, + F4AF18FC97592C76315797F668C8B667 /* PFFileState.h in Headers */, + C06FBAC856D1405027F57659FB882DB8 /* PFFileState_Private.h in Headers */, + F310216C789BCB7555C1DCBE58D977F4 /* PFFile_Private.h in Headers */, + 761C53D89DAED1A039F35140FE681142 /* PFGeoPoint.h in Headers */, + EE9DDB408EAE238210C991FD79E3CF49 /* PFGeoPointPrivate.h in Headers */, + 9CF48AEFCE6F9045931D4795813A04F1 /* PFHTTPRequest.h in Headers */, + 2FE18B8C27EE345DAB24679C78D7E892 /* PFHTTPURLRequestConstructor.h in Headers */, + 71149E3D734A45987DE533C63E64B8CF /* PFHash.h in Headers */, + C10B95C0B57A98F56D3F1524F7AC2D8C /* PFInstallation.h in Headers */, + 62DF196534F98A4C8F2950AE0BC0B848 /* PFInstallationConstants.h in Headers */, + 681F184EBED897A7E32E703CE64180F9 /* PFInstallationController.h in Headers */, + 6B76300BE41876D9CCB88E24375B998A /* PFInstallationIdentifierStore.h in Headers */, + 985A785F14BB1B6CEC3A230CAD5649D7 /* PFInstallationIdentifierStore_Private.h in Headers */, + 801099E0B9FCB6C2D53DA1740CC02609 /* PFInstallationPrivate.h in Headers */, + F41B06B8F17355F24BB2F03B2788468E /* PFInternalUtils.h in Headers */, + D2044BF601961041203CF24CDB475660 /* PFJSONSerialization.h in Headers */, + C6F27BC40629D35819C2047ADB591188 /* PFKeyValueCache.h in Headers */, + 766B4915C9CE90EF60392BBEC59E5658 /* PFKeyValueCache_Private.h in Headers */, + 1523B080603D77C024E0B747E4996579 /* PFKeychainStore.h in Headers */, + 436BEC32F216466B177B6C97EF487247 /* PFLocationManager.h in Headers */, + CFDE408C1C10A91D91334900C971D71E /* PFLogger.h in Headers */, + 87A934AAD963BC79E14FA5B4036E1561 /* PFLogging.h in Headers */, + 3D28B83AAD10B7C57743C71A9BCBD706 /* PFMacros.h in Headers */, + 3EC8C1A2A16125D66AEF023E65875C0D /* PFMultiProcessFileLock.h in Headers */, + 8C87A4997D35A353FA5D021F246524AD /* PFMultiProcessFileLockController.h in Headers */, + 6E68413CAD6F59569672C23A760513AD /* PFMulticastDelegate.h in Headers */, + E307685646D7E5CD6D9094720405F595 /* PFMutableACLState.h in Headers */, + E7302DAE889CEE0FC264D8DB543A1550 /* PFMutableFileState.h in Headers */, + C1EC3C48DE08A099CF8C4F4DB9AC92CD /* PFMutableObjectState.h in Headers */, + AAD2B2F32FD39B7314EE5288D5950978 /* PFMutablePushState.h in Headers */, + 9739C96986BA08B93A12085B40B04346 /* PFMutableQueryState.h in Headers */, + 21DE1AB45066CBB8893B7512A46C7F40 /* PFMutableRelationState.h in Headers */, + 22B11163D1060531F7203CFF741ECF7F /* PFMutableUserState.h in Headers */, + 7F19E0EB2DA2C4FCB26731C6D3EBAB05 /* PFNetworkActivityIndicatorManager.h in Headers */, + 93EBE76C2A186F0D4C77B319ADEE6BFB /* PFNetworkCommand.h in Headers */, + BBD6F782E31784A8733DC849576B1F82 /* PFNullability.h in Headers */, + 203BF679401152022B93977BE09BE5F4 /* PFObject+Subclass.h in Headers */, + 8D31A105377BECB169DFBEFF15313E77 /* PFObject.h in Headers */, + 7E4283FB04E7D6BD11C39793C47E337A /* PFObjectBatchController.h in Headers */, + 98396F4F5625358D6069A34AE59B6E27 /* PFObjectConstants.h in Headers */, + 8F12ACFBF21541054C6DDF361C60D5F7 /* PFObjectController.h in Headers */, + 3A08186C3E72AC2FC2929F40299836BA /* PFObjectController_Private.h in Headers */, + 2CBE51B6B685E2C8E580F288532D35BC /* PFObjectControlling.h in Headers */, + E969732177DDD64FE4A450AF72B47DEE /* PFObjectEstimatedData.h in Headers */, + 29B8C46DAA66D739074598FF7BEB278F /* PFObjectFileCoder.h in Headers */, + E38281353BA2647FD46FBB122EB89D0E /* PFObjectFileCodingLogic.h in Headers */, + A9434D6A85D9B7C74ED6FC0A94E94215 /* PFObjectFilePersistenceController.h in Headers */, + 7C6E0B5561F8DA7C19D1BBAB8AE5CCD9 /* PFObjectLocalIdStore.h in Headers */, + CDADBF0F1573954BC209870E70782321 /* PFObjectPrivate.h in Headers */, + 53101F16802FD7835FAE24BFF876E1D1 /* PFObjectState.h in Headers */, + 92B98AC6461B0704BB8D94B9DF97EB73 /* PFObjectState_Private.h in Headers */, + 06D988944B0D5FE82E0682515FF337FB /* PFObjectSubclassInfo.h in Headers */, + DC9501C36EBB2076AE6E53428A202529 /* PFObjectSubclassingController.h in Headers */, + E0D5EA36A6AE0140906FAE1C15C585C1 /* PFObjectUtilities.h in Headers */, + 99481D8221949F304D52C6F91120A652 /* PFOfflineObjectController.h in Headers */, + 1DC1D991236BC9F2CE78E97DCE0716E3 /* PFOfflineQueryController.h in Headers */, + 033A50366AFB65E2169F873282EA48AE /* PFOfflineQueryLogic.h in Headers */, + 436E2455BCEC76A75B3050437F2BD9AC /* PFOfflineStore.h in Headers */, + 1FD65FB8CF03C2F35C81F43E7B278814 /* PFOperationSet.h in Headers */, + 0B6B6629EF056C7F6F4B3399D6BD3FB9 /* PFPaymentTransactionObserver.h in Headers */, + C42F4ED763AEA8D576D24810EB5AA52E /* PFPaymentTransactionObserver_Private.h in Headers */, + 735B6C06E3A85764BF2C91CAF740DB9D /* PFPin.h in Headers */, + 8E8569ECB5C0BCACF6189BA52D25D18E /* PFPinningEventuallyQueue.h in Headers */, + 915E44E8A08FE45E6A616B1052249A5F /* PFPinningObjectStore.h in Headers */, + 6DFC459F183BB5A31DBBED8B64DE6D9F /* PFProduct+Private.h in Headers */, + 84B090289B5F0D8D883D6E3DA8049C59 /* PFProduct.h in Headers */, + 4E5D1FCAB597E51FEAC13ECB8F560867 /* PFProductsRequestHandler.h in Headers */, + 159C438C855C6095598C7437294EA302 /* PFPropertyInfo.h in Headers */, + E5443378D4565A922FFFDAA1538FE831 /* PFPropertyInfo_Private.h in Headers */, + 6F583053A2888B239E6745BA2A6653EB /* PFPropertyInfo_Runtime.h in Headers */, + 995ECB7FE5263643F5FDB93C0516858A /* PFPurchase.h in Headers */, + 2DE4962F006CBEDA18350230D22F62E7 /* PFPurchaseController.h in Headers */, + 67A49849BDC14071843A8EC2972B0F21 /* PFPush.h in Headers */, + 76CF1F91AE5BF3853DC887DE7D231439 /* PFPushChannelsController.h in Headers */, + A9B011801E9F00836D17EB399A96E0D4 /* PFPushController.h in Headers */, + DEA09E2016BA1749A09F6E3F88BC7E23 /* PFPushManager.h in Headers */, + 43EE553B964C45CF5DEA762F99E4A33B /* PFPushPrivate.h in Headers */, + B5565F2420D2A67A457EFB8F2988A093 /* PFPushState.h in Headers */, + 9A53557A62341D0ECDE9C085CD75F5CB /* PFPushState_Private.h in Headers */, + 8F5DE45FC6939E665336774057B73E66 /* PFPushUtilities.h in Headers */, + C62482464A02F4FB45A1701739487245 /* PFQuery.h in Headers */, + 9F53C2093DD186B4090B5FD6E7764398 /* PFQueryController.h in Headers */, + D5B98374F3CCC497AF1E8B7E6AB11A52 /* PFQueryPrivate.h in Headers */, + 2600246F4A3AD578AA137A882FDC9D5F /* PFQueryState.h in Headers */, + FA7488D7D4C8FD74BEF4CC5A60236EFA /* PFQueryState_Private.h in Headers */, + 9D516D2678E06EB4165D4BB535FE9549 /* PFQueryUtilities.h in Headers */, + 086C2FD864FD690C9C6044CB6F2800F5 /* PFRESTAnalyticsCommand.h in Headers */, + 2633598C693589A7340000F203FBCBCF /* PFRESTCloudCommand.h in Headers */, + 61B17DF20A75ADA928785425B7F8DE0E /* PFRESTCommand.h in Headers */, + 6D27499A38CE0B76D47C9B846117533A /* PFRESTCommand_Private.h in Headers */, + 33DB8AFB0259362CA0EFD9CE3A35975F /* PFRESTConfigCommand.h in Headers */, + 2D38329507A0A56D5676E19E27999709 /* PFRESTFileCommand.h in Headers */, + AEE8765826A3A7D18B4E0078A84F9C3B /* PFRESTObjectBatchCommand.h in Headers */, + 8EFBBDFBFB46FE3AB6B498858E57E925 /* PFRESTObjectCommand.h in Headers */, + 8C7620B050DE2DB1D8C4BE53B7AD446B /* PFRESTPushCommand.h in Headers */, + 436A6DC2D3BED5A79126492A065F2677 /* PFRESTQueryCommand.h in Headers */, + 3FD93828B806B0E9827A1516C105E3A2 /* PFRESTSessionCommand.h in Headers */, + 654CB8AE73312DD817E9BA3227DE6F6F /* PFRESTUserCommand.h in Headers */, + D3BC96940BBCCF03A94641B319CEAB4B /* PFReachability.h in Headers */, + A37BF088BECE45A7D70796EAC9CA2F8F /* PFRelation.h in Headers */, + C42FB952F9695977A494C605CF1C1132 /* PFRelationPrivate.h in Headers */, + 483CCAA6F19046C0799DA3C570AEAAE1 /* PFRelationState.h in Headers */, + 46583A2A9C00A174C88A25645B7660F5 /* PFRelationState_Private.h in Headers */, + 493BC3309F48416303156F5D152EA9E2 /* PFRole.h in Headers */, + 37DF63C0C9103A9E1DFD55E15C8BF33F /* PFSQLiteDatabase.h in Headers */, + 93118EB6B094059F1E801C2D3F0AA183 /* PFSQLiteDatabaseController.h in Headers */, + C91346F6C236EE3B02E0C342FFA059E2 /* PFSQLiteDatabaseResult.h in Headers */, + 1AE154A4E8AFB780D26F0E59F8EEEACA /* PFSQLiteDatabase_Private.h in Headers */, + 67BAB5ED99BF2B716087D0C6E4629302 /* PFSQLiteStatement.h in Headers */, + CFE44660C56131187597352CE6F5B9B6 /* PFSession.h in Headers */, + C3336173FDE2C11323CC7BBB72800680 /* PFSessionController.h in Headers */, + E8E993E598C72676B8A14B079B54F4CB /* PFSessionUtilities.h in Headers */, + E1BB2C03EEDB32A4A79B233BC6BAC80E /* PFSession_Private.h in Headers */, + 13FA9DD300A8B4A93AB62A0BAFE21C7D /* PFSubclassing.h in Headers */, + 881340F4BCADBA95C5B1B83E1030BE38 /* PFTaskQueue.h in Headers */, + DD35BE33FFFB276A6AC7EA95866CD3C7 /* PFThreadsafety.h in Headers */, + C1411ECB83FD53DD0040A588922AB805 /* PFURLConstructor.h in Headers */, + 1811C17C0D37318B9C5641E5EE07EC6B /* PFURLSession.h in Headers */, + 45B4B5D890C00115150DB7A9A243B537 /* PFURLSessionCommandRunner.h in Headers */, + F7334108209FC3957908A3CBE83A6E69 /* PFURLSessionCommandRunner_Private.h in Headers */, + 7537230E857ED6153146533AE06FDF98 /* PFURLSessionDataTaskDelegate.h in Headers */, + D7E62D1CB62EA6194DC59B7BB5F62132 /* PFURLSessionDataTaskDelegate_Private.h in Headers */, + 3D0ACC7AC09AFC03CF06CF0BFA3B64DE /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, + B74B8A474F9F85D1A6C7E007AFF29BAC /* PFURLSessionJSONDataTaskDelegate.h in Headers */, + 39A74ED00CC15F27A7AB6DAFAB428008 /* PFURLSessionUploadTaskDelegate.h in Headers */, + 1EABC68DB72C74878F6BF39B21EE79BF /* PFURLSession_Private.h in Headers */, + 8286466FDE3CF73E9657066D3FDAEA6F /* PFUser.h in Headers */, + F36ADC9AF8CA401C3620F12B6EFA3041 /* PFUserAuthenticationController.h in Headers */, + 3BEA94EB016D3E78C67A72262C699B44 /* PFUserAuthenticationDelegate.h in Headers */, + 04C477F9C24BFF3DAE827A362233C4FF /* PFUserConstants.h in Headers */, + 760E954330FFA9BCC6353D2595246A9D /* PFUserController.h in Headers */, + 58F285A458A4022B5D0AC8713348BC0F /* PFUserFileCodingLogic.h in Headers */, + F18B4C7BAA5CF8439201B55685ED71C3 /* PFUserPrivate.h in Headers */, + 9CA95F8505F64E85DC3B0A686C16DB87 /* PFUserState.h in Headers */, + FAE4A1C0783B76BCACCAF45355E7004B /* PFUserState_Private.h in Headers */, + 58326CE78F395552AD3BFD810FF9F65F /* PFWeakValue.h in Headers */, + A059F3D6C6DCBF6F579390BFBDAF7B0B /* Parse.h in Headers */, + 711F86C92C8161B7E3E8EFAA8DC46084 /* ParseInternal.h in Headers */, + DBB8D921CF3FDED4AE31757890536C9E /* ParseManager.h in Headers */, + D63BEEB5977D7C7BD7EBDDCCC5A0ECCF /* ParseModule.h in Headers */, + 142EF9CA5A85AE871E3B459132229E09 /* Parse_Private.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2129,410 +2378,207 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 859986280FBF72A1529643EABE37EEEC /* Headers */ = { + 7B43D8DCC5287DA95E21044609FF99A9 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - D99ED871F816595C6F2283257F5C95D5 /* AFHTTPRequestOperation.h in Headers */, - 24DE67F780C71ADDD3ECD6654317FE72 /* AFHTTPRequestOperationManager.h in Headers */, - 6F082EA1396F168DFB2C6F030293EB84 /* AFHTTPSessionManager.h in Headers */, - 5C586D9F95CFEDF896F447BFC98AF4C3 /* AFNetworkActivityIndicatorManager.h in Headers */, - 5CE8743FE0F90E511A4C84E0995D1397 /* AFNetworkReachabilityManager.h in Headers */, - EC352BDDF7551229C44577334C79BF3D /* AFNetworking.h in Headers */, - F2C4F6DEE6564743D319F05B2AD6AF6D /* AFSecurityPolicy.h in Headers */, - AD28999B0D50D3B103822C3AA659D6D9 /* AFURLConnectionOperation.h in Headers */, - 8B1BD5642BA0A15B690E677651F808D3 /* AFURLRequestSerialization.h in Headers */, - 69E78077EDD72A6AA494222FD75922C7 /* AFURLResponseSerialization.h in Headers */, - 65DC1218144FBCE4EF1FD774A527E3C8 /* AFURLSessionManager.h in Headers */, - C6BF85B2D68FF8596833EF3EF1BD50FD /* UIActivityIndicatorView+AFNetworking.h in Headers */, - D6B2773184F80196F49DF87870AD4FB5 /* UIAlertView+AFNetworking.h in Headers */, - 0C25D8A64EB9575F6EE8297DDB7E28D6 /* UIButton+AFNetworking.h in Headers */, - 443BCE5C454E56FCA662D4F1F149CBB7 /* UIImage+AFNetworking.h in Headers */, - 8C611929D69DA8FDDD0C2D98B9E2FC02 /* UIImageView+AFNetworking.h in Headers */, - CA324992089BB916C0BEC4C99E3FF138 /* UIKit+AFNetworking.h in Headers */, - E8BC741F9C816AB82DA07FF26AABEFE6 /* UIProgressView+AFNetworking.h in Headers */, - 69240AA871D54B8545057A3076CE4093 /* UIRefreshControl+AFNetworking.h in Headers */, - 9BB97D7622FDB67B314F93646C6A21A6 /* UIWebView+AFNetworking.h in Headers */, + C03B6A01F9693FC55FF12348C5EDA810 /* AFHTTPRequestOperation.h in Headers */, + 2BB1765C86B201560C4A2B6BBD7A371C /* AFHTTPRequestOperationManager.h in Headers */, + 029C90A8589FC1CDD8B78EE4D9527E6E /* AFHTTPSessionManager.h in Headers */, + 6D8349CF69F6F1E9EFF84C4C57FB426F /* AFNetworkActivityIndicatorManager.h in Headers */, + 3A5CF29344885308DC79E0C391A53D31 /* AFNetworkReachabilityManager.h in Headers */, + 79E6F3824ABF1A654EEB5B553C15DBDE /* AFNetworking.h in Headers */, + F2B68903E0189C4FECF6CE848CC4BB7D /* AFSecurityPolicy.h in Headers */, + 0198B8BFFD73EE79799F37BDE2DC2D15 /* AFURLConnectionOperation.h in Headers */, + 22AFF014CF05A23D8FC082AB33A460E0 /* AFURLRequestSerialization.h in Headers */, + 77C67E773AFBDD3569331C7ED61AF8C6 /* AFURLResponseSerialization.h in Headers */, + D1432034868E01DD64A199C1653F1B36 /* AFURLSessionManager.h in Headers */, + 1D4CED7E73484BE3BB284F60D35D00A3 /* UIActivityIndicatorView+AFNetworking.h in Headers */, + 79DE1504F1352EA069C6836250F000C2 /* UIAlertView+AFNetworking.h in Headers */, + F482317F4FB2A4D5D4129CA17E0FF055 /* UIButton+AFNetworking.h in Headers */, + 39B96D481BD81E74DAB39DB6C4969B44 /* UIImage+AFNetworking.h in Headers */, + 6E02670C7329266CE5EBAFB392D91E79 /* UIImageView+AFNetworking.h in Headers */, + 6C6F1B84D3E615B005CD148C5B2A1AE3 /* UIKit+AFNetworking.h in Headers */, + 62C65E9E6542642AE65BD22663AA6DB6 /* UIProgressView+AFNetworking.h in Headers */, + EC82ACC74DBAB7C722F639C717886261 /* UIRefreshControl+AFNetworking.h in Headers */, + 45D36EE54227B0DA49ABAC216014713B /* UIWebView+AFNetworking.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - AE190F9D831F064F4EF61868C80F1E60 /* Headers */ = { + E6C03F79D01AF73B9044F6081341EAAF /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 229C97335867E932CB618AFF2AD68FA1 /* BFTask+Private.h in Headers */, - 2BA4EE91EE2A2D2392A549A5D0265E02 /* PFACL.h in Headers */, - D1EF657035114EEF42F10196C800AAB0 /* PFACLPrivate.h in Headers */, - ED04F6FB01031FD159F530193AE75C79 /* PFACLState.h in Headers */, - 9903DE555B85044677A815ACC47B5685 /* PFACLState_Private.h in Headers */, - CE8ED072C6640F4DC793DE5F3CE674A1 /* PFAlertView.h in Headers */, - CD005BD069DE3A3806BBE81F6B4A4F20 /* PFAnalytics.h in Headers */, - 7D12660030E37B329BD37158B4BF8245 /* PFAnalyticsController.h in Headers */, - 819642514BB29D64B2FF0C38CC0B797C /* PFAnalyticsUtilities.h in Headers */, - C48FB5CC8A114D5BBFA5B5C6D2C6B7CD /* PFAnalytics_Private.h in Headers */, - FC7AD9CD6427562338E316F7D22C6CF5 /* PFAnonymousAuthenticationProvider.h in Headers */, - 03A6F38CA14AD317B341884170C3BB7D /* PFAnonymousUtils.h in Headers */, - CB8894ACF0D1C6DF4BFDC392C293F25E /* PFAnonymousUtils_Private.h in Headers */, - BB111D0ED255D3DC41C59A5EBFAA3660 /* PFApplication.h in Headers */, - DF8191415D0D1255212AE2013F862152 /* PFAssert.h in Headers */, - 1AB31BD52213E4929644D1AA98D1448D /* PFAsyncTaskQueue.h in Headers */, - BD9F08D593AA75F289F00EE82458F3F9 /* PFBase64Encoder.h in Headers */, - 59DBB816A81FD1511D1E38EC0CEEEBB6 /* PFBaseState.h in Headers */, - 1083B349581427A54BEBDAAF8F3F79CC /* PFCachedQueryController.h in Headers */, - 12F7F6FF549BFF3F9E125CC05FFDE06A /* PFCategoryLoader.h in Headers */, - 2BA85187131ECA5CF5B3C9339913E5FC /* PFCloud.h in Headers */, - FBB54F353706B4761D4C2BBCDE0D3DEC /* PFCloudCodeController.h in Headers */, - EB003F3813D731CCCC4EDE62A21258ED /* PFCommandCache.h in Headers */, - F29600110489E45471884162604FD700 /* PFCommandCache_Private.h in Headers */, - D24AD1C1A16875A09867EFDB66DD7A5C /* PFCommandResult.h in Headers */, - C5FA827AFA2784D7FB156DBAFD92012E /* PFCommandRunning.h in Headers */, - 44CBCCBCF7F96491E4FB42CED4E75332 /* PFCommandRunningConstants.h in Headers */, - 1A199A539421FD9EF267C20C58B80BFD /* PFCommandURLRequestConstructor.h in Headers */, - 0D13A6CE3055797D395FB3B1432F8F0E /* PFConfig.h in Headers */, - 878A11C8556D40E0F2D786C85E334456 /* PFConfigController.h in Headers */, - E99A53E0D4AD3D044F2A724C8906C655 /* PFConfig_Private.h in Headers */, - 1BD80BCC808E7E9643CC37C4AA3ADDFC /* PFConstants.h in Headers */, - BE22EB1A8780D81AABB9D2CD0CEA8E18 /* PFCoreDataProvider.h in Headers */, - 40D2ADCF0128DEB096B46905667E4E9F /* PFCoreManager.h in Headers */, - 36ACEFEC11A81EF47DE0C0BFFC6CB97C /* PFCurrentConfigController.h in Headers */, - 9BFE33D3520D009C6EB9E8AB56FE2752 /* PFCurrentInstallationController.h in Headers */, - 2B805B0D9C82263BED05712F6F61F508 /* PFCurrentObjectControlling.h in Headers */, - 0C49F0B3FD4736F8E75C2B6BF4CBB182 /* PFCurrentUserController.h in Headers */, - 3B6B89143DF62DF0EC2889D8E22D7E12 /* PFDataProvider.h in Headers */, - FB00925A23D5B4AE5B41E33B5FBD055E /* PFDateFormatter.h in Headers */, - 28EF03109A91A0399E7ED7DD0DCEC43A /* PFDecoder.h in Headers */, - ED75CE5EE2F7C992A5186614070AEC5D /* PFDefaultACLController.h in Headers */, - 97A58492910A00B0B6A1149CB7B81FF7 /* PFDevice.h in Headers */, - B93D433EE1E23B2A4114703E47EE6F7A /* PFEncoder.h in Headers */, - 18A8BC9861EDA4C6869FC91964FA284A /* PFErrorUtilities.h in Headers */, - AE613AD929239B7E4D5009D4AE5D3944 /* PFEventuallyPin.h in Headers */, - 3824CB594AD78B77B5FB2FC04D839958 /* PFEventuallyQueue.h in Headers */, - 2585D2B973EDD9644622A4C685DC746A /* PFEventuallyQueue_Private.h in Headers */, - 81E1A28345F03D19813EF682006BC6C7 /* PFFieldOperation.h in Headers */, - 19A8A885F0AD8ABBE6397819787BA1A8 /* PFFieldOperationDecoder.h in Headers */, - 84272DB1EB4ACEB4D0BB01CBBF3B9978 /* PFFile.h in Headers */, - 02D90891E401812590EFB1B7FD947312 /* PFFileController.h in Headers */, - 37CEB19E87B3AC3323BBD2E66B42C190 /* PFFileDataStream.h in Headers */, - 9D84517F42EDA4E47A670724BEE974C3 /* PFFileManager.h in Headers */, - E23EAA43A1BBCD8353958BAF80880F44 /* PFFileStagingController.h in Headers */, - 728A2994B680379A6073F0EAF3197B09 /* PFFileState.h in Headers */, - 097B901143156E3D41E99BE3AAF835EC /* PFFileState_Private.h in Headers */, - F68AF78D542CBBAB1379651762D77220 /* PFFile_Private.h in Headers */, - 09B6D79E22DEA5ADF5509786C8710E80 /* PFGeoPoint.h in Headers */, - F5F8F81CDA532191D7DCCB020E9CDCD0 /* PFGeoPointPrivate.h in Headers */, - D08B147823BE4AD36715360307952DEA /* PFHTTPRequest.h in Headers */, - B43AAF16FE9A853D23B3997FED1D67C3 /* PFHTTPURLRequestConstructor.h in Headers */, - 648E7747FB62EEEFE96BD5622128F170 /* PFHash.h in Headers */, - 5FC02173813B41B3D99A1856EC7B340B /* PFInstallation.h in Headers */, - F1EB5D28E0347730C01E1C9F101A167C /* PFInstallationConstants.h in Headers */, - AE61BE4F170E46BCA8557D4BA4CD06A4 /* PFInstallationController.h in Headers */, - EF01EE384D79A1068581524113443FFF /* PFInstallationIdentifierStore.h in Headers */, - 9FC0A759B553E4C1DA3D0F5B50ACEE0E /* PFInstallationIdentifierStore_Private.h in Headers */, - 87C2F80153CA8A6BD8526B7DB9F4C1B8 /* PFInstallationPrivate.h in Headers */, - 7CB520A7F93480BCCE6ED3EAE4D53EAF /* PFInternalUtils.h in Headers */, - D9E62EB34600F4CA51ACE19BE7C65AF7 /* PFJSONSerialization.h in Headers */, - C6DAC0A70B2D4465FE543E1030E497E5 /* PFKeyValueCache.h in Headers */, - B01375E6D33FF39CFC3AE8CB7D70AE2F /* PFKeyValueCache_Private.h in Headers */, - B09E3CFB154075BCFE6AEA5F5D9EE8F5 /* PFKeychainStore.h in Headers */, - 676C6E38537C4802051691D8056EBE41 /* PFLocationManager.h in Headers */, - DA46F604268312CA6BC6BA3CCB990411 /* PFLogger.h in Headers */, - 66271ACDD8C7FC27215842A9656C1088 /* PFLogging.h in Headers */, - 33DF104A201E932802169E493F3AEC0A /* PFMacros.h in Headers */, - ECCDF1B41916BF0EAAA0A8CEB0F54B5B /* PFMultiProcessFileLock.h in Headers */, - 48885F40AD8BD0D697CE625FBD2E2E21 /* PFMultiProcessFileLockController.h in Headers */, - 42B46BB8EB49882AEE36BB5575578EC4 /* PFMulticastDelegate.h in Headers */, - 497D21FDF4A360CB97A439754143062F /* PFMutableACLState.h in Headers */, - 49C0D0A6E99F8649034F787477573B57 /* PFMutableFileState.h in Headers */, - 19EC4D553FB816F1000C41CF1051066B /* PFMutableObjectState.h in Headers */, - 4D925619B81D08AC5E84925C79BE5A59 /* PFMutablePushState.h in Headers */, - 92D43075C24E2442F4E3AD7C4DADBDC5 /* PFMutableQueryState.h in Headers */, - D33372B006CA340C5A4A54110B69427B /* PFMutableRelationState.h in Headers */, - EBDA959314C42ACA8FF53848015B383D /* PFMutableUserState.h in Headers */, - 67469D5ADC9D1553949D7916A288E8EA /* PFNetworkActivityIndicatorManager.h in Headers */, - 36CCBAA76E5ED042EBDC5DB0D33BE8A4 /* PFNetworkCommand.h in Headers */, - E4F18F0BD37AC65F868864D1E55B7B60 /* PFNullability.h in Headers */, - 12905F13464787C5271CC5D9FA18C667 /* PFObject+Subclass.h in Headers */, - 5C25A0B2AE2D5A04ED1AA575D9D517F2 /* PFObject.h in Headers */, - 46649DBE5BC69B649093125569635AC6 /* PFObjectBatchController.h in Headers */, - 42F4541D75A4F6BA407EB7096B1092F2 /* PFObjectConstants.h in Headers */, - E243E0679F630A2E3F9F4B7B24191D8D /* PFObjectController.h in Headers */, - E70727B793EBD607F1BE486B664CE33D /* PFObjectController_Private.h in Headers */, - D4F8D5854AD4E10694B8543B01904E4A /* PFObjectControlling.h in Headers */, - 4F95459B59771365653E226A2D9EBF89 /* PFObjectEstimatedData.h in Headers */, - 9C967AB082218D0703E71E7522D2DC20 /* PFObjectFileCoder.h in Headers */, - 892089BB4371D4B36ADC6A000613CB17 /* PFObjectFileCodingLogic.h in Headers */, - 2C7C264D41F9220DEB49C3A1B180B546 /* PFObjectFilePersistenceController.h in Headers */, - 2A6D34424562F80CD74C3B2BAC7172D5 /* PFObjectLocalIdStore.h in Headers */, - 8901469CC5AB2228CA972762BC61D3B7 /* PFObjectPrivate.h in Headers */, - 5EA2BCB87865A7A04C48507EFBBC12DF /* PFObjectState.h in Headers */, - 9DFB0B43F8AD5124869FA8B0C49518E6 /* PFObjectState_Private.h in Headers */, - 67D2F6E5A3216E43D97B63E771F06DD6 /* PFObjectSubclassInfo.h in Headers */, - DECE9EC538AEE7DBFA4F88A31DC92AC8 /* PFObjectSubclassingController.h in Headers */, - 3E9FFD7FDD05C6B3A8181F997D776BBA /* PFObjectUtilities.h in Headers */, - 253E5BAE428DD70BB381435C235FE16E /* PFOfflineObjectController.h in Headers */, - E5E316F403D65FF52D02A0665082C101 /* PFOfflineQueryController.h in Headers */, - A2473BDD6B4DF7982A694061166A7FD9 /* PFOfflineQueryLogic.h in Headers */, - 2FA63B393DD60EC8FD23E587F04E482D /* PFOfflineStore.h in Headers */, - 88D9933BE4B375EB4C69530BC369E350 /* PFOperationSet.h in Headers */, - FF7441F3F46A777068C3E1ED9DB6988C /* PFPaymentTransactionObserver.h in Headers */, - 5E45AE079AC451D88127C79FEB659466 /* PFPaymentTransactionObserver_Private.h in Headers */, - 31996DCA29D4E878B0583CFF567CA0CA /* PFPin.h in Headers */, - CB41F2C692487CE5EA9C680B4C3CF354 /* PFPinningEventuallyQueue.h in Headers */, - 46D0E3242C28B43577C2AA06E6FBE718 /* PFPinningObjectStore.h in Headers */, - F9D22128094FED62CC689A0DF077D742 /* PFProduct+Private.h in Headers */, - C244270D3D5EA67A2B254B493FC1E918 /* PFProduct.h in Headers */, - 841DB4F4869F2D4E6F6F53CC10CE3B3A /* PFProductsRequestHandler.h in Headers */, - DF24C56A224FE7ECAB1EDB1657EE6FB9 /* PFPropertyInfo.h in Headers */, - A352DD166FE10E5DB1BFA5A59C2766FB /* PFPropertyInfo_Private.h in Headers */, - A6348F02CCC5CBD996733B7A6BC7B8F8 /* PFPropertyInfo_Runtime.h in Headers */, - 20917DF017F324A8D15F0D9C4D141FA4 /* PFPurchase.h in Headers */, - 65DC0149C069D90ECFEBF56941250C67 /* PFPurchaseController.h in Headers */, - 6760D65BFEF0A2FEE179CF031B5B5E07 /* PFPush.h in Headers */, - DE961F754007F9A7471D4CF344ABCE82 /* PFPushChannelsController.h in Headers */, - 744CE28FEC63BC838F17C749DD7302A9 /* PFPushController.h in Headers */, - 59C5C4F84FE226A4542348E92177F952 /* PFPushManager.h in Headers */, - 7D40734CC14F03B41F0E88B139689F00 /* PFPushPrivate.h in Headers */, - F4D38EE812AF575E7C62AAC6A8E52540 /* PFPushState.h in Headers */, - 05834B536D3A455ED3798FD75FC72F8E /* PFPushState_Private.h in Headers */, - D414CFD05FE420603C064C7307D13611 /* PFPushUtilities.h in Headers */, - B975E56752236DD4E997D0291C621AC0 /* PFQuery.h in Headers */, - EDEEAA33E39E017A4C68ED263C84AE22 /* PFQueryController.h in Headers */, - 52FDC5383B9B5D2EEEF373E403D77417 /* PFQueryPrivate.h in Headers */, - 5B03265249AD905F4FB6E3DB631658AD /* PFQueryState.h in Headers */, - 35953B553BD925643165F1ACB35878BB /* PFQueryState_Private.h in Headers */, - BAB4F191AD2790A60EF82E7261BEA3D9 /* PFQueryUtilities.h in Headers */, - D9AA4A4142F44327165EBD0F2434C842 /* PFRESTAnalyticsCommand.h in Headers */, - 9B60A3C0A1E286E8398F7595B38C5FA8 /* PFRESTCloudCommand.h in Headers */, - 29E64CEA35638C93186B498049B7E98C /* PFRESTCommand.h in Headers */, - 1640F9FA2671E79FC0BA756063D41D8A /* PFRESTCommand_Private.h in Headers */, - 1138646361F9E460DD21884B0F6DFF9C /* PFRESTConfigCommand.h in Headers */, - F22042889D8469B686198BE4C3C967DE /* PFRESTFileCommand.h in Headers */, - 2621A0600ABC3EB86C65B713B86601BD /* PFRESTObjectBatchCommand.h in Headers */, - E7E9BAE2DCA65E7ABC83BE790E92E20E /* PFRESTObjectCommand.h in Headers */, - 6655468950083AF61524A6275FF9A2F3 /* PFRESTPushCommand.h in Headers */, - 80DCEB3A08253B03FC7474C3CAC072A7 /* PFRESTQueryCommand.h in Headers */, - 0B0292923091FED205120BD5097527E9 /* PFRESTSessionCommand.h in Headers */, - FFACAEE5617305A95FDB73B9E3765B25 /* PFRESTUserCommand.h in Headers */, - 6B0EBE7A376D36F9EFA1331E7F8B63CC /* PFReachability.h in Headers */, - 7EF1C86FE832452F519F51E44434854B /* PFRelation.h in Headers */, - 3B22B3CA89C62E0452385CE2796AF1F3 /* PFRelationPrivate.h in Headers */, - 4638D38DCDF526A476CE05B3F81CCAD9 /* PFRelationState.h in Headers */, - 9A50C636573A1162D6620C5414D09BD7 /* PFRelationState_Private.h in Headers */, - 6A4FB15F0506670406DB87B03ED01510 /* PFRole.h in Headers */, - 1E6A6D284A6252C645194A7DD669B76E /* PFSQLiteDatabase.h in Headers */, - 6D43310BFA5F6AFAB4BE717DE7E9949D /* PFSQLiteDatabaseController.h in Headers */, - 809B4FC22A06B6B83E0282C7672432D3 /* PFSQLiteDatabaseResult.h in Headers */, - B613283A3EA71849002D5B8A87D39CD8 /* PFSQLiteDatabase_Private.h in Headers */, - 46C4231E5E04D67139F9F975246E5DF7 /* PFSQLiteStatement.h in Headers */, - 93986334C9BBABFA5A3090FE9494BE81 /* PFSession.h in Headers */, - 0DB56799333E9A43236FF8CD130F07E7 /* PFSessionController.h in Headers */, - 15D39B2C1708F2F2D00CBC4C37D7D242 /* PFSessionUtilities.h in Headers */, - 412B08BFF6DAFBF18BBBB68A4E1729C2 /* PFSession_Private.h in Headers */, - 49CDC02250754AB9B406C89687DF3417 /* PFSubclassing.h in Headers */, - 55785784D679DD24B00E9A95DF6CCBE2 /* PFTaskQueue.h in Headers */, - 0E6063551D612BD83F5BDE564BB459B0 /* PFThreadsafety.h in Headers */, - 2A47EF83A3F0B843959DC8DA3ABDC4EA /* PFURLConstructor.h in Headers */, - 7ABC7D13EC7F10833D72B1B5ED75102B /* PFURLSession.h in Headers */, - 7FF604BCF508916C20FC96386B466D47 /* PFURLSessionCommandRunner.h in Headers */, - 8EA3C689EDCDEBB6094FAB91A8FF8165 /* PFURLSessionCommandRunner_Private.h in Headers */, - 02A1E68F7CA023CBC64E581A3325EF6F /* PFURLSessionDataTaskDelegate.h in Headers */, - 3CE532D0EA44055EEC7FD1B5A7C27BF1 /* PFURLSessionDataTaskDelegate_Private.h in Headers */, - 7CEA2506323C78806464A4ADCD1A9FE6 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, - 7489C719E388B356406569AE3746E191 /* PFURLSessionJSONDataTaskDelegate.h in Headers */, - 360B21E0EB75AA4B2A34C129E7CF78C1 /* PFURLSessionUploadTaskDelegate.h in Headers */, - 6F022DB58BA290D7E1F34A13D16D19E2 /* PFURLSession_Private.h in Headers */, - 344EFC366CB3853905AAC01462A21557 /* PFUser.h in Headers */, - 6B16EAB0D7C1CA39B78A840EEA86A15D /* PFUserAuthenticationController.h in Headers */, - E87B6C4AD10233A8EF5093E215BE7A4C /* PFUserAuthenticationDelegate.h in Headers */, - E333B27781269607DD5B6237EDF09A12 /* PFUserConstants.h in Headers */, - B88C872B4DC8DBF56B6C9AF592D0A1CE /* PFUserController.h in Headers */, - 3FD03AE3ADAAC712667DE736AE685541 /* PFUserFileCodingLogic.h in Headers */, - 10A29DA15D651C10348F412CAF7756A6 /* PFUserPrivate.h in Headers */, - 1EBD269DC4FE87225B78B3ED0FDA1D0F /* PFUserState.h in Headers */, - E37EEE527BAAFF772206A72DEF75F60B /* PFUserState_Private.h in Headers */, - 38E0B7A70C54C146D6E7800490D59C20 /* PFWeakValue.h in Headers */, - 4E6EC4EE31AFB4E83A925AD0CA54E128 /* Parse.h in Headers */, - 5C0AF4E1346CE2C73EEEE2F76444DBE8 /* ParseInternal.h in Headers */, - 3A4A4FB0FEE8E11FD14800D236F62CE4 /* ParseManager.h in Headers */, - 24D81C37FF895F44D6D4D8C1108EE0AD /* ParseModule.h in Headers */, - 96AD11F17A800AF7904D96EAE89192E6 /* Parse_Private.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F73CFFAD226FA8B968BE5BF2EAD51F06 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - DD49064B9FD7B01B1F3E9EDD681A391C /* BFCancellationToken.h in Headers */, - FC81649F3508121AFDC3B469E14C4BE7 /* BFCancellationTokenRegistration.h in Headers */, - DDE7A25B6FDDE44FC58C17F5BF85C2D6 /* BFCancellationTokenSource.h in Headers */, - E03055FBB48E6B94D8AD1FF653005CA5 /* BFDefines.h in Headers */, - 288F78B90BDDF8D2354804F3326D6A9C /* BFExecutor.h in Headers */, - D18540CCAD8048FDB4C2A9918DB92A9F /* BFTask.h in Headers */, - F50F059F7518D8F68B09F674C1D81F1B /* BFTaskCompletionSource.h in Headers */, - 75746B518C7E0EC504D1548C9CC4FC22 /* Bolts.h in Headers */, - 5BB3EFBBD58F469D64FE05C97A816968 /* BoltsVersion.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E389DA279C420AF0CF7157D1CB7777EF /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - FF60ACF78377BE7F10CEF63BE3A7A019 /* PFActionButton.h in Headers */, - 07B9F4A97FC481BEFD13C6A7A876AE65 /* PFActivityIndicatorCollectionReusableView.h in Headers */, - 6B0810EEE6CED5F2B5C846EC9E3D9652 /* PFActivityIndicatorTableViewCell.h in Headers */, - 3F3269C47676A13E44D1DAD963922C5E /* PFCollectionViewCell.h in Headers */, - 4C3272DD361CCB4D062A5EB1B53D0EB3 /* PFColor.h in Headers */, - 4FC34E6FE9DD6F151A4D7CB99AAC6AAF /* PFDismissButton.h in Headers */, - BB23B75ACF0D158E30F1F433310BCAE9 /* PFImage.h in Headers */, - 441D655945C3AF781C9A00BEF8115E5C /* PFImageCache.h in Headers */, - 5F406E659F421557FBAB0878E792BC72 /* PFImageView.h in Headers */, - 49DCEBBB292BC919C0F2F0650F42A379 /* PFLoadingView.h in Headers */, - 81F6B96731525921005CCFBBA013EDB1 /* PFLocalization.h in Headers */, - B43AE9F0A1BBFF35F9A86E10B180859E /* PFLogInView.h in Headers */, - AE84C9BF52A2F053DCF2818A058AF5D0 /* PFLogInViewController.h in Headers */, - E9332502DD74CFB87761C2CE81EFA61B /* PFLogInView_Private.h in Headers */, - 2544CBE3CF2F43C81E1F241DDAE2694C /* PFPrimaryButton.h in Headers */, - 3742C186F9760CECD54271C12A0C0F46 /* PFProductTableViewController.h in Headers */, - 991D8071D96F389C7B3A3D0AB4F086FE /* PFPurchaseTableViewCell.h in Headers */, - 3070A4B3C4F07A6E5E7CD16972DF2A37 /* PFQueryCollectionViewController.h in Headers */, - C703EE7C157DFC6D852FA8DCD75EC0E3 /* PFQueryTableViewController.h in Headers */, - 06029A94B7299AA3DC1B3DD1B50BAC88 /* PFRect.h in Headers */, - E77F1FD60C4EF4F25338458E5436782A /* PFResources.h in Headers */, - 3C61396AA2618D932E1D997910CA6B4E /* PFSignUpView.h in Headers */, - 3775493CB62206BFC75E928CAFB8F431 /* PFSignUpViewController.h in Headers */, - 0045ABA8D9F3A30ABB55603E69D6D2A8 /* PFTableViewCell.h in Headers */, - EB1C15BFFDA1BBE3B4FB2E5DBAD25829 /* PFTextButton.h in Headers */, - 7A22BCAA48DAA8941E900F3BBA2AEAF9 /* PFTextField.h in Headers */, - 042646D0F438BF1C307783B49D4426C0 /* PFUIAlertView.h in Headers */, - 01FEAEEB81E00A55AD412B5EC194D9F4 /* ParseUI.h in Headers */, - A957B2947D9905E95240B0700B020436 /* ParseUIConstants.h in Headers */, + 64B7FDC033EFA36BCD13641AEE0458A9 /* PFActionButton.h in Headers */, + 1E08932918D992A1541EB0E0D6CC9EEC /* PFActivityIndicatorCollectionReusableView.h in Headers */, + C661CDC29377D25FD12AF1C6EC78765E /* PFActivityIndicatorTableViewCell.h in Headers */, + 298880C95E0B2A4C3A653F49691D0A44 /* PFCollectionViewCell.h in Headers */, + F070A31B3506E7B75B7F3B76E77A3C6B /* PFColor.h in Headers */, + BC80CDA7730EEC5147C205C4DC3A7208 /* PFDismissButton.h in Headers */, + 61BA366C36F6C7B54BE8BF07AB155ABA /* PFImage.h in Headers */, + EE33929B47BED97A6E07BD14C5C353B1 /* PFImageCache.h in Headers */, + 8B4BA05DDDFFF1CB2B3E627D11876FB8 /* PFImageView.h in Headers */, + A8C4F183ECF09B6553062A8263040996 /* PFLoadingView.h in Headers */, + 1251A5D232DD4A171EDE06FA1615F89A /* PFLocalization.h in Headers */, + 9D2BE1D0C32AC20CC918A9A5D106A92E /* PFLogInView.h in Headers */, + 5C33F9157741C61F6631230AD01FE11E /* PFLogInViewController.h in Headers */, + A97972A382BE9DFA0A427639E0BCDBCB /* PFLogInView_Private.h in Headers */, + 84095D5EA8DA88AD13C4FF5F0DF602AA /* PFPrimaryButton.h in Headers */, + 82380B9107996A9CC6893DFC10643ACA /* PFProductTableViewController.h in Headers */, + 5E9956DE33105A5531D6A3FC4C62ECA3 /* PFPurchaseTableViewCell.h in Headers */, + 5C92F804A6DFEBCE460A8DB1BD613E09 /* PFQueryCollectionViewController.h in Headers */, + 261ABC2E4AEFF6968D9936161F3306AC /* PFQueryTableViewController.h in Headers */, + E78D417CFF735A27772EA3DA77708CFA /* PFRect.h in Headers */, + 22EB6771E43BC84C41EE84F61B446EFE /* PFResources.h in Headers */, + DEF27825E32346CCAF4E647DFAE5BBDC /* PFSignUpView.h in Headers */, + D856BAABE6315065140B7FCB203559F6 /* PFSignUpViewController.h in Headers */, + 3899AB8EC33BD102DBB023D4A85FF273 /* PFTableViewCell.h in Headers */, + F30293A1105E2FE7867F326CEA330117 /* PFTextButton.h in Headers */, + 0729C0E0DEFB01A6C944C3969D5EC76B /* PFTextField.h in Headers */, + F37556CD73CEFBD739FD6BD654B22A63 /* PFUIAlertView.h in Headers */, + 7F3A6F6FAD966914F5DCAFAE6BB7254C /* ParseUI.h in Headers */, + 63FE801109A1B9D13DE8DEE5EE2E9F50 /* ParseUIConstants.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 1DDE7D1F8C6E863F202337492C269E6B /* Pods */ = { + 073C8BE92E23FA40E8EE37802B1F8CEA /* NSDate+TimeAgo */ = { isa = PBXNativeTarget; - buildConfigurationList = 5C34FB991FA427DC58BDC724C9A71282 /* Build configuration list for PBXNativeTarget "Pods" */; + buildConfigurationList = 00AB20440C5DF4DF1391945C27D1BA38 /* Build configuration list for PBXNativeTarget "NSDate+TimeAgo" */; buildPhases = ( - 56C7B27B1B482492D26CBE5E9ADE324A /* Sources */, - 56A844AA177010E838BCF58676D0E939 /* Frameworks */, + A11D339216C3BF4199362D0BF2119BE9 /* Sources */, + 9FB27855AFE7DE38777BBB75A80CF99B /* Frameworks */, + 41ECC592BE1D67895BE77204F56BD7F6 /* Headers */, ); buildRules = ( ); dependencies = ( - 19923423C703BBEB90AC3A3C857E89F4 /* PBXTargetDependency */, - 952FB994AE0621B42EB3D4A8C5901B4C /* PBXTargetDependency */, - E625AC18748C0B8FF6BB0F892F91679E /* PBXTargetDependency */, - 8EF4E4FF05990F09CF590B3C32C05754 /* PBXTargetDependency */, - 4E4F6F1D81F1078BEF297F869D35B281 /* PBXTargetDependency */, - 0899E8BA2384C2FED5E501B223E3CEFD /* PBXTargetDependency */, ); - name = Pods; - productName = Pods; - productReference = 1A782DEC3085443686EE99BF46207C32 /* libPods.a */; + name = "NSDate+TimeAgo"; + productName = "NSDate+TimeAgo"; + productReference = 7D0B2ED163A92C1717CA51F8534F021E /* libNSDate+TimeAgo.a */; productType = "com.apple.product-type.library.static"; }; - 30B6C683408FE258B28EE47F87D10FD5 /* ParseUI */ = { + 209AB0B77C675E32A81B4BE355428147 /* ParseUI */ = { isa = PBXNativeTarget; - buildConfigurationList = 37ECA32CD2B76A684E26A17FAE254686 /* Build configuration list for PBXNativeTarget "ParseUI" */; + buildConfigurationList = F633834441F6FE37F46F4CEBF3D8136E /* Build configuration list for PBXNativeTarget "ParseUI" */; buildPhases = ( - A4287A5FFA8C78F698E417A9B2E94CD0 /* Sources */, - 2BB7104FAE246FFAFA4A6159E11F80B3 /* Frameworks */, - 26FAD1D8029AE388ABD0140C46C4C37A /* Headers */, + DA7041A2198176B9F9BFAA31A5776A10 /* Sources */, + 2DF511A26B9101758C7D026EE134AC03 /* Frameworks */, + E6C03F79D01AF73B9044F6081341EAAF /* Headers */, ); buildRules = ( ); dependencies = ( - BDCD5DD6A24A428E11E10A934BE669D2 /* PBXTargetDependency */, - 7582E4FBF9E23D885F047845D9BAF1AD /* PBXTargetDependency */, + 14E4E5445512AC7DDC9159B4DC57BF7E /* PBXTargetDependency */, + A70C8815545E6C119C228F702221C465 /* PBXTargetDependency */, ); name = ParseUI; productName = ParseUI; - productReference = 6F2AB6103ACF8E3202AE317027CA808B /* libParseUI.a */; + productReference = F509F95BA6BCD09E8277CF2DE4DA42D8 /* libParseUI.a */; productType = "com.apple.product-type.library.static"; }; - 47C800E42623009B7192B025B3DD25A1 /* pop */ = { + 25F506D3BB111CA2D4ECE0F118AAF4B7 /* Bolts */ = { isa = PBXNativeTarget; - buildConfigurationList = 62C75DE36F62F6DD244D1001268287F5 /* Build configuration list for PBXNativeTarget "pop" */; + buildConfigurationList = AA464FA145A374F11734ED3B06765CFC /* Build configuration list for PBXNativeTarget "Bolts" */; buildPhases = ( - 0EA1208F3B72AAF8A7683795C5C61072 /* Sources */, - 8C45497CBD83A66C8FBF1289DF39CE3D /* Frameworks */, - 725D774220C4DF53E7316E8623730814 /* Headers */, + 6659CFD67B21CF0DBF5092F70242DC66 /* Sources */, + 2A9F3D80F303318DD8876138D9B4321A /* Frameworks */, + 3A07EF683B21C20A27061D94B5FA152C /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = pop; - productName = pop; - productReference = A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */; + name = Bolts; + productName = Bolts; + productReference = 0206D7017431D1DE214E1E55DD1CA00E /* libBolts.a */; productType = "com.apple.product-type.library.static"; }; - 5E7ECA46011128F44607D2526FF28BBF /* Bolts */ = { + 3A014738CBA3413E897D1CCDA8931473 /* AFNetworking */ = { isa = PBXNativeTarget; - buildConfigurationList = 2CAF95F65DE5E0DF3943B5CB1FDFDFB1 /* Build configuration list for PBXNativeTarget "Bolts" */; + buildConfigurationList = E9E7F053BD98C38A4753C0CCF1325E21 /* Build configuration list for PBXNativeTarget "AFNetworking" */; buildPhases = ( - 227331EC1A7CC0DE3F32A2D28DBD3564 /* Sources */, - 9BE8C57594B15EEAA567F911A1293696 /* Frameworks */, - F73CFFAD226FA8B968BE5BF2EAD51F06 /* Headers */, + C2182C64933D5A38455920584D145EA2 /* Sources */, + 1815A1EC84BB0B6651744D2F131EE124 /* Frameworks */, + 7B43D8DCC5287DA95E21044609FF99A9 /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = Bolts; - productName = Bolts; - productReference = A88B9D7B7216A9C1E1312C4CBC71128F /* libBolts.a */; + name = AFNetworking; + productName = AFNetworking; + productReference = 98BA5038261FBEE24BBC3F399BD90C23 /* libAFNetworking.a */; productType = "com.apple.product-type.library.static"; }; - 9CEF3252DBE731B89BE08B2C8D33D157 /* AFNetworking */ = { + 47C800E42623009B7192B025B3DD25A1 /* pop */ = { isa = PBXNativeTarget; - buildConfigurationList = 64D11131D2BE8C02E0D80E3F89019E1B /* Build configuration list for PBXNativeTarget "AFNetworking" */; + buildConfigurationList = 62C75DE36F62F6DD244D1001268287F5 /* Build configuration list for PBXNativeTarget "pop" */; buildPhases = ( - 448AD5E6BEF77FB18F80C6C52594AA4A /* Sources */, - 85674903FD27FE13717922FF4357F9B5 /* Frameworks */, - 859986280FBF72A1529643EABE37EEEC /* Headers */, + 0EA1208F3B72AAF8A7683795C5C61072 /* Sources */, + 8C45497CBD83A66C8FBF1289DF39CE3D /* Frameworks */, + 725D774220C4DF53E7316E8623730814 /* Headers */, ); buildRules = ( ); dependencies = ( - 13E56317D4C79E315D0018B424AF8D8E /* PBXTargetDependency */, - 4D353D1FEAEF9BEBC251744328DD1E88 /* PBXTargetDependency */, ); - name = AFNetworking; - productName = AFNetworking; - productReference = 7A52DF7C69FED7E78E844893F5F58808 /* libAFNetworking.a */; + name = pop; + productName = pop; + productReference = A42EBF4FDD2D5AA16FCD758564D29ABC /* libpop.a */; productType = "com.apple.product-type.library.static"; }; - C8E26D4496BE6E05436ED5442A4A35C6 /* Parse */ = { + 57D25E61D9826A76A43A896C44CABA8F /* Parse */ = { isa = PBXNativeTarget; - buildConfigurationList = 6F682CC992535202A5D2CF278126BF33 /* Build configuration list for PBXNativeTarget "Parse" */; + buildConfigurationList = 6D8FFB603AD420901F4B9FCDA05B5F99 /* Build configuration list for PBXNativeTarget "Parse" */; buildPhases = ( - 62E531351317F4060B9D4A6608E1E5A7 /* Sources */, - FBED2FAC8FC38B52BADDF50DED237051 /* Frameworks */, - AE190F9D831F064F4EF61868C80F1E60 /* Headers */, + CCBBD2CC0F1B01F986136B924E18365B /* Sources */, + BA735EE182107B4D0DB2261BAABF4B4D /* Frameworks */, + 6592748ECBED2897AD37CD5760F11382 /* Headers */, ); buildRules = ( ); dependencies = ( - C1407E01BF7B9C202F3E485071EFB470 /* PBXTargetDependency */, + 6533663E2F7F98C18565A3D5AFD5FCEC /* PBXTargetDependency */, ); name = Parse; productName = Parse; - productReference = 3845B32677B589F5F7443E7D6E469D4A /* libParse.a */; + productReference = 58DF201C7D18AC9382C7A10622498EEC /* libParse.a */; + productType = "com.apple.product-type.library.static"; + }; + F74B94A682E0E6D4AC643CC5FB6EBD66 /* Pods */ = { + isa = PBXNativeTarget; + buildConfigurationList = 40D8BA9A0BA04A3F661C1AC44261695F /* Build configuration list for PBXNativeTarget "Pods" */; + buildPhases = ( + 184BDA93C624E2277E613BFF46E46386 /* Sources */, + 72C426652F822EEA1F0F6FFCB31FD051 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + E8278E01C2E732E7775A717754EA22C5 /* PBXTargetDependency */, + 7C13106622D8568CAE3B6827189A29E0 /* PBXTargetDependency */, + 2C19E241A57064E3D39A6D073CC18833 /* PBXTargetDependency */, + CC2E8312E90985F8C7CAB9EC866C5E3E /* PBXTargetDependency */, + DA3FD69599E8D3657E277590879F15C4 /* PBXTargetDependency */, + E0D6F7DBE91E2AFBB59E512DCFDC60E6 /* PBXTargetDependency */, + 36DA77E3B337B591C644BF09DBD4014A /* PBXTargetDependency */, + ); + name = Pods; + productName = Pods; + productReference = 3877DF147287113642F6AD9C0DB0310F /* libPods.a */; productType = "com.apple.product-type.library.static"; }; - FF04CF73CFE56992B404E8BC19C3A4FE /* ContextMenu.iOS */ = { + F8D4751B066F22CC161A18B7D25B2723 /* ContextMenu.iOS */ = { isa = PBXNativeTarget; - buildConfigurationList = E56AF3B044D4C205DC9CB1D9B3AA30B9 /* Build configuration list for PBXNativeTarget "ContextMenu.iOS" */; + buildConfigurationList = 0DEE6E9A823474FF96F4782896C2E113 /* Build configuration list for PBXNativeTarget "ContextMenu.iOS" */; buildPhases = ( - C31B9478081DD08C7A80D629C9280D29 /* Sources */, - 965ABA69AF689352C7AFAA4D831B30F1 /* Frameworks */, - 35789C083B98EF480FFA83CB6247B6B2 /* Headers */, + 2C3666D1E6ADE97D5AE615BA27748902 /* Sources */, + 308970140019F579000A6CFF5E645A00 /* Frameworks */, + 523DEB9D03C6736407946DC3D00EF6DC /* Headers */, ); buildRules = ( ); @@ -2540,7 +2586,7 @@ ); name = ContextMenu.iOS; productName = ContextMenu.iOS; - productReference = 7C5E7538EF5118E38934B9886BC17B43 /* libContextMenu.iOS.a */; + productReference = D1883197CB1BD7E2C04D44DEB54AE998 /* libContextMenu.iOS.a */; productType = "com.apple.product-type.library.static"; }; /* End PBXNativeTarget section */ @@ -2564,12 +2610,13 @@ projectDirPath = ""; projectRoot = ""; targets = ( - 9CEF3252DBE731B89BE08B2C8D33D157 /* AFNetworking */, - 5E7ECA46011128F44607D2526FF28BBF /* Bolts */, - FF04CF73CFE56992B404E8BC19C3A4FE /* ContextMenu.iOS */, - C8E26D4496BE6E05436ED5442A4A35C6 /* Parse */, - 30B6C683408FE258B28EE47F87D10FD5 /* ParseUI */, - 1DDE7D1F8C6E863F202337492C269E6B /* Pods */, + 3A014738CBA3413E897D1CCDA8931473 /* AFNetworking */, + 25F506D3BB111CA2D4ECE0F118AAF4B7 /* Bolts */, + F8D4751B066F22CC161A18B7D25B2723 /* ContextMenu.iOS */, + 073C8BE92E23FA40E8EE37802B1F8CEA /* NSDate+TimeAgo */, + 57D25E61D9826A76A43A896C44CABA8F /* Parse */, + 209AB0B77C675E32A81B4BE355428147 /* ParseUI */, + F74B94A682E0E6D4AC643CC5FB6EBD66 /* Pods */, 47C800E42623009B7192B025B3DD25A1 /* pop */, ); }; @@ -2602,367 +2649,334 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 227331EC1A7CC0DE3F32A2D28DBD3564 /* Sources */ = { + 184BDA93C624E2277E613BFF46E46386 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 72C4E5F68F540FD3EBB645C1E4E37603 /* Pods-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2C3666D1E6ADE97D5AE615BA27748902 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9A90E8F4BF92C990DE4167054E85D654 /* BFCancellationToken.m in Sources */, - 639AA00D5A683FEF99EED79AA5886679 /* BFCancellationTokenRegistration.m in Sources */, - A13C4BB86354DFB46C4C5481307883E5 /* BFCancellationTokenSource.m in Sources */, - 11A4692CEBB8730B94ACA3DE9386A360 /* BFExecutor.m in Sources */, - 4987776369E562F38585FC37361D3CBF /* BFTask.m in Sources */, - 2F2C8AD562611FDC0AF5CDCD530D5A0D /* BFTaskCompletionSource.m in Sources */, - B0C4C32BA8DE1D5FE312176AC637848D /* Bolts-dummy.m in Sources */, - E85D137DF70E4DCCFE461CCA6C3FA618 /* Bolts.m in Sources */, + F1B93F72C4ADB9504C27AEBF396016F9 /* ContextMenu.iOS-dummy.m in Sources */, + C652F5E48AE74A8B9E356E4F323427E6 /* UIView+YALConstraints.m in Sources */, + E56B8B77A63214F481AC2DC58A3138F0 /* YALContextMenuTableView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 448AD5E6BEF77FB18F80C6C52594AA4A /* Sources */ = { + 6659CFD67B21CF0DBF5092F70242DC66 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 76E92D32C24B20A93B6AE0969D585F4B /* AFHTTPRequestOperation.m in Sources */, - 41FA752847E7911579CB5994CACFB55A /* AFHTTPRequestOperationManager.m in Sources */, - 4618DA1F5A356DD83541A37748F954DF /* AFHTTPSessionManager.m in Sources */, - EB8DB296BB4DA32D527234A3DEE5F061 /* AFNetworkActivityIndicatorManager.m in Sources */, - 7F06975A49D877D950872BE36CA60960 /* AFNetworkReachabilityManager.m in Sources */, - 1F881486E8CB860C4E24913A8F5D5F40 /* AFNetworking-dummy.m in Sources */, - 8634E397DB95B4A205CA46F9464A75F9 /* AFSecurityPolicy.m in Sources */, - A06391D968AFE47F156783742F646922 /* AFURLConnectionOperation.m in Sources */, - C26DFE0E4BEAE15D72A60EEF9AB2119F /* AFURLRequestSerialization.m in Sources */, - A1B79A413EF7DAA8A4EB9CA5A8BD08A4 /* AFURLResponseSerialization.m in Sources */, - C2807FECCEA754DD6E77EAF01CD585C9 /* AFURLSessionManager.m in Sources */, - ACDDCAAF4C46330AD2D2AB16BFF02C4A /* UIActivityIndicatorView+AFNetworking.m in Sources */, - 0C2B045D7E5509E8F7EFA57AC39B6629 /* UIAlertView+AFNetworking.m in Sources */, - C1D1A848BEBCD76FE7DEAC09CD97E421 /* UIButton+AFNetworking.m in Sources */, - 173ED34A0356542BC4AABA232A87BEDC /* UIImageView+AFNetworking.m in Sources */, - EBF38A4299D038884C58103080EAA89A /* UIProgressView+AFNetworking.m in Sources */, - F327003FE3AD1D094C218F976BE1F431 /* UIRefreshControl+AFNetworking.m in Sources */, - 91B64709D6B292496C4A6A225D4BB7CF /* UIWebView+AFNetworking.m in Sources */, + 192A200E73C2A2F5F4012B42734D9DAA /* BFCancellationToken.m in Sources */, + 275768E58A8C3131E0122C515076485B /* BFCancellationTokenRegistration.m in Sources */, + 5331C0F69400F074FD63902D6DE230A5 /* BFCancellationTokenSource.m in Sources */, + E8090707C0F2BA7C2E2F177A329C20AA /* BFExecutor.m in Sources */, + 6ED9F7C99C54CAAFE1138FE93FD286AA /* BFTask.m in Sources */, + BB487D5F7B293574D245A094788DAA51 /* BFTaskCompletionSource.m in Sources */, + 674D663B284AEF8D267DFF015DADCFFA /* Bolts-dummy.m in Sources */, + 24E91CC9FB5A2E2FF319EADB309A3639 /* Bolts.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 56C7B27B1B482492D26CBE5E9ADE324A /* Sources */ = { + A11D339216C3BF4199362D0BF2119BE9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 058C33FB5C2A3719FE4ADF9A72690954 /* Pods-dummy.m in Sources */, + 4D05E27CF6523B0BD5B046DB0C0B2EFB /* NSDate+TimeAgo-dummy.m in Sources */, + C319866FC2BFC185C63625060AEB6758 /* NSDate+TimeAgo.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 62E531351317F4060B9D4A6608E1E5A7 /* Sources */ = { + C2182C64933D5A38455920584D145EA2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 26BF7F88592AF38813101555097DD55C /* BFTask+Private.m in Sources */, - A9F58BD8E15E32FE2F46C820F1E48E66 /* PFACL.m in Sources */, - 82F37565E385A7E818C024A26D83F6FA /* PFACLState.m in Sources */, - F42F528AAFB4431133A3D12ECF1D97D6 /* PFAlertView.m in Sources */, - 5DF1B5387A1DD9CAB5E13CEA1DEBE334 /* PFAnalytics.m in Sources */, - 9DA42084513E9EDEC1FD2877C7358DA4 /* PFAnalyticsController.m in Sources */, - E5866C6A6D58A011CCA749AA3EE87861 /* PFAnalyticsUtilities.m in Sources */, - C3538059D8FE0662CEE3DE41F3732317 /* PFAnonymousAuthenticationProvider.m in Sources */, - 5E5D8BCA6AA7723270741D3B30129E95 /* PFAnonymousUtils.m in Sources */, - DA87B0B1CA41E9765DD17F295386E93C /* PFApplication.m in Sources */, - 5231BCCB308A3F31F6177D3DE45B4B2A /* PFAsyncTaskQueue.m in Sources */, - CDC08305C998377AA557005E01DA48F2 /* PFBase64Encoder.m in Sources */, - 5BEA0703B949E403FCF00B1C99CE5312 /* PFBaseState.m in Sources */, - 739FCF97DC8962B9DFE12B6887C002F7 /* PFCachedQueryController.m in Sources */, - DD069B29E4B7FB44E2756BA625DB5B9F /* PFCategoryLoader.m in Sources */, - 1618761B80BC0810912C0E5A6FA8AED2 /* PFCloud.m in Sources */, - 57F9FD71CB5753B5943820CB971EABAC /* PFCloudCodeController.m in Sources */, - 50A0B5735FC58289849B81903379466F /* PFCommandCache.m in Sources */, - 7DDC420AD15D8E33ACCC0CBA24140E1A /* PFCommandResult.m in Sources */, - 2D7FC9420988E8825835F617C085C8F0 /* PFCommandRunning.m in Sources */, - BC32FB211EB444652B6799002CA68C02 /* PFCommandRunningConstants.m in Sources */, - 132AFB274CF349B143A6CE62178DCE73 /* PFCommandURLRequestConstructor.m in Sources */, - 11C30B6D836D34D9B469D3EB466BC3C6 /* PFConfig.m in Sources */, - E2C60F3460600725D4C2C17EDC0ECF18 /* PFConfigController.m in Sources */, - C9F67D469F5419E62C593ABA7DEB7197 /* PFConstants.m in Sources */, - 69A5F0FA9789A4C66CB54381A98D4A66 /* PFCoreManager.m in Sources */, - 2BA5C7017464A16F4C706785FA19D75B /* PFCurrentConfigController.m in Sources */, - 5AC93CEB9283C651882F05B1273DD103 /* PFCurrentInstallationController.m in Sources */, - 74852E4264FB23300164F52A30200E5F /* PFCurrentUserController.m in Sources */, - DB2B7514E2C7903E4C564F9B4FB83D7C /* PFDateFormatter.m in Sources */, - 421F18C338A1D96267A6D56CC4A606DF /* PFDecoder.m in Sources */, - A2A4F23CEEDDE6AC6AB5E12823B090FD /* PFDefaultACLController.m in Sources */, - 8CDB3264ED94C27CAA178E20CBEE8F8B /* PFDevice.m in Sources */, - 64E5E6820D9816C209547D94F2BB6562 /* PFEncoder.m in Sources */, - 531A2D3B4A600ED6ADC40EA5A46DE3EB /* PFErrorUtilities.m in Sources */, - 18379233D2D2B1502FC76DD4C5C692DC /* PFEventuallyPin.m in Sources */, - 13407B834F3178398FB483A7A5E16B1F /* PFEventuallyQueue.m in Sources */, - FB2C988761B71F5EC05ABAA20A10DD3E /* PFFieldOperation.m in Sources */, - 9475ADC7AEF8EB8886BA1A3EB222581B /* PFFieldOperationDecoder.m in Sources */, - DDEAAA61B6C55BA10412B3B27110F0D7 /* PFFile.m in Sources */, - C6F4896A69483CD338E2C278DB82D2BD /* PFFileController.m in Sources */, - EE9ABF7DB56F4A6D9F4969A3CAA035DC /* PFFileDataStream.m in Sources */, - 3F1414F449E14D51686282DE08C99213 /* PFFileManager.m in Sources */, - AC49A05B1513ABEC3365D1474436C6D1 /* PFFileStagingController.m in Sources */, - 058D0D5CE02E50025C29F3C920C0342C /* PFFileState.m in Sources */, - A3CDFB8B5F9558B4914FDAAA3DEF0954 /* PFGeoPoint.m in Sources */, - 2ED1F725C7A2D9C3B088755133185E3E /* PFHTTPURLRequestConstructor.m in Sources */, - CC2AA775E69BED51AA50FA0982F06DB7 /* PFHash.m in Sources */, - 4A8C9FF00E3384BC4C3CD3FB2F55E990 /* PFInstallation.m in Sources */, - 5FAFA9B41F2A03D77C11EB75A4494750 /* PFInstallationConstants.m in Sources */, - 7201F0F99D6B13F35856DD253A5C0E07 /* PFInstallationController.m in Sources */, - E0FDA3418BDC08A45B8E4F8F6DE1A20C /* PFInstallationIdentifierStore.m in Sources */, - 4A80DF5A34C30001E5ED3BAF54228FA7 /* PFInternalUtils.m in Sources */, - D8B21AB2A572F89802E2CAE754E11C1C /* PFJSONSerialization.m in Sources */, - 57BDB360A71C5C40769FEBCF4EEA9286 /* PFKeyValueCache.m in Sources */, - 5A77D55F5B0750BBEB517B644365A500 /* PFKeychainStore.m in Sources */, - 36D8D65FF0AB068BF9906A86619644F7 /* PFLocationManager.m in Sources */, - D96A915CB19A7ACFC1FF38481113C4E5 /* PFLogger.m in Sources */, - 4824B7BE52BA2402CED14500E2932601 /* PFMultiProcessFileLock.m in Sources */, - 3F0E3DF64315302D29713F842A484DBB /* PFMultiProcessFileLockController.m in Sources */, - EA8A963881602AE0082051485B05AC32 /* PFMulticastDelegate.m in Sources */, - 4AF062F4FC2B5263DEB1CF994FAAB679 /* PFMutableACLState.m in Sources */, - A1FBBD9D4DB3E0B403F55E475200D922 /* PFMutableFileState.m in Sources */, - 0C3E40A1E1F5C062336954953535A147 /* PFMutableObjectState.m in Sources */, - 68C107E42DDAB28C80D321FA102CF4A8 /* PFMutablePushState.m in Sources */, - 7DF684A676D0C6D6C9E217E70FBA4E4A /* PFMutableQueryState.m in Sources */, - 1C7F42CA15296DA4A6644553F81E234A /* PFMutableRelationState.m in Sources */, - FA062724256AD7BD74E749525E96F593 /* PFMutableUserState.m in Sources */, - D4D98689D09FD3C38EA7A6092736446C /* PFNetworkActivityIndicatorManager.m in Sources */, - A1E6CFAC51C967076FB1942859BCCCA2 /* PFObject.m in Sources */, - 2F8806F964E2757E0AE4C18A63D549F7 /* PFObjectBatchController.m in Sources */, - 7526478D2E78774A038474BCBD3F1C32 /* PFObjectConstants.m in Sources */, - 260117E289FF83C3E56161D34507AC08 /* PFObjectController.m in Sources */, - B35B52D2F3848F1D23A4734E8BA8CD25 /* PFObjectEstimatedData.m in Sources */, - 25A85CEAA3DA9477C9380336E9223EFA /* PFObjectFileCoder.m in Sources */, - 66DCFF3A85030DB15D244781AC3FD8BD /* PFObjectFileCodingLogic.m in Sources */, - 1D0B465250743982AC6B53A0826FBBD0 /* PFObjectFilePersistenceController.m in Sources */, - 878FFB2B0C1CEBB717761B9969A4A64F /* PFObjectLocalIdStore.m in Sources */, - DDFA6862FB1CE0BA4A61CFE7EF8E083C /* PFObjectState.m in Sources */, - E5DAB0E03E10762C86ECD9FCC472761F /* PFObjectSubclassInfo.m in Sources */, - 0BDA91D5869CA4191D33157C3F626421 /* PFObjectSubclassingController.m in Sources */, - C2AA7D8CD8800BA5C772B03344DCDC37 /* PFObjectUtilities.m in Sources */, - 04C59EDFE151A61EBE17E21743FCD39C /* PFOfflineObjectController.m in Sources */, - 2F95E9BCF26DD34957769CFD6E7B08F7 /* PFOfflineQueryController.m in Sources */, - D9060FE6FF4B3F9BA85000AA5AB8B52F /* PFOfflineQueryLogic.m in Sources */, - FA4008023586470174D049C68D7BCA84 /* PFOfflineStore.m in Sources */, - 8853CBA2C0D6980916593B7808BC29BD /* PFOperationSet.m in Sources */, - 7785B27C7EBF0BD5696DC493EE247B6D /* PFPaymentTransactionObserver.m in Sources */, - 9710BA2A332B179BA2827D289D2453F1 /* PFPin.m in Sources */, - C8C216A6FB717E67F1D6A90342AA8F77 /* PFPinningEventuallyQueue.m in Sources */, - 9B3D878BE422C022F78E6F3B8126F7EC /* PFPinningObjectStore.m in Sources */, - 8035B29DD0D2E6CDE192CFB413021BB3 /* PFProduct.m in Sources */, - CD1A2408C77C3419D1D374BDD5A858B0 /* PFProductsRequestHandler.m in Sources */, - F23C5CA36BBCCEDC450C59ABD9167FF1 /* PFPropertyInfo.m in Sources */, - B68778AB3A22AE8EEC182188399F709F /* PFPropertyInfo_Runtime.m in Sources */, - D61130DAF8E0E1ECE22A93E52E1AF17D /* PFPurchase.m in Sources */, - 254832160B15699E7724F95DE8DD5752 /* PFPurchaseController.m in Sources */, - 21B089C37641C0DD264CE5D3A4F6561A /* PFPush.m in Sources */, - 8E9C6364F65C04540B01F5F7864679FE /* PFPushChannelsController.m in Sources */, - 51CB85FCD806DF8447C6FA52391C1E04 /* PFPushController.m in Sources */, - 359921E987152F2E32ED5A7E95D3D7ED /* PFPushManager.m in Sources */, - 3B664B6E61C833CD4BEA0C3FA5F6A204 /* PFPushState.m in Sources */, - 909CFE7FFE6FBF340F2838D4002C01ED /* PFPushUtilities.m in Sources */, - F4CB32331A652F9BEC5790C7BD83488F /* PFQuery.m in Sources */, - D971E396F056FBA17C6CE0CF194FBE3E /* PFQueryController.m in Sources */, - D404E2D7015A2B76AABE42C287FAD36F /* PFQueryState.m in Sources */, - 0A9D4D20C55270EF697A3961B39D3FE0 /* PFQueryUtilities.m in Sources */, - F5271A92421103FAA7B66901BDADE562 /* PFRESTAnalyticsCommand.m in Sources */, - 5BD0448FB27F6926E8AC4C43AD94F214 /* PFRESTCloudCommand.m in Sources */, - 8C09B8DEC14AE6744582DD2257C52CD5 /* PFRESTCommand.m in Sources */, - 246B3249C33500DE5CA8091842FD161E /* PFRESTConfigCommand.m in Sources */, - A996E3E947C6267CC2641F8BCF6D3A0F /* PFRESTFileCommand.m in Sources */, - 9600DCCC69D0F088EB727C5B1769B4B3 /* PFRESTObjectBatchCommand.m in Sources */, - 4559F2C1310C63FC0393148479027450 /* PFRESTObjectCommand.m in Sources */, - 435DA30E314A631C5CB9C52A61140AC7 /* PFRESTPushCommand.m in Sources */, - 4CF686EDA5878E2B7DE2627B409B34CC /* PFRESTQueryCommand.m in Sources */, - E72770739EA867C89DE740B977BE5C70 /* PFRESTSessionCommand.m in Sources */, - 5C20B36FFE00F5AC30E5338C5F4E1C95 /* PFRESTUserCommand.m in Sources */, - 20F38429DB788EC0750BAE41035D38BD /* PFReachability.m in Sources */, - 16C58D5E53A49592C8CBE347C2A8902D /* PFRelation.m in Sources */, - 38253CE84769ED15D8C99ED4B898847F /* PFRelationState.m in Sources */, - E651303757F3195255E0DEC635795BC2 /* PFRole.m in Sources */, - B92A4315EE32C56D189C572C94666714 /* PFSQLiteDatabase.m in Sources */, - DA0EC40E69DE3685E53603D2D6CD17A7 /* PFSQLiteDatabaseController.m in Sources */, - 1BD3A897099353079B220469631AC62B /* PFSQLiteDatabaseResult.m in Sources */, - 2CAD92B1CD9E623C21762FDD9970ED0A /* PFSQLiteStatement.m in Sources */, - BF2D3113EF4F55028D7C0B93420D341F /* PFSession.m in Sources */, - E84B6B0C1564161E1DE83392CD28082A /* PFSessionController.m in Sources */, - EBC4E1A2A578C68150812DF664F3CD2C /* PFSessionUtilities.m in Sources */, - F0BF7C159497C345EFC2279414A9602B /* PFTaskQueue.m in Sources */, - 7710B4CBEACBB6050BF74F5B5C08E484 /* PFThreadsafety.m in Sources */, - 37A15CF58C488A0BE71C9DF43F028E8D /* PFURLConstructor.m in Sources */, - 878393E04A1E6DF9BE7442BD2D45971D /* PFURLSession.m in Sources */, - F666FF748D959A512841D717829362CD /* PFURLSessionCommandRunner.m in Sources */, - C6FAED6F757456167037A450C730376C /* PFURLSessionDataTaskDelegate.m in Sources */, - 3FA97E218C8EC403B801CDBEED9D7981 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */, - EE649D37D119E85D26C3A56AF9481AC9 /* PFURLSessionJSONDataTaskDelegate.m in Sources */, - 16D57AA10CE0A2E5D61FD7DF78139724 /* PFURLSessionUploadTaskDelegate.m in Sources */, - C7FC18B8A3E8B3CB9F135C9A31A5453F /* PFUser.m in Sources */, - 8E02FAA01BA3DCD0CA25C003FEC9C40B /* PFUserAuthenticationController.m in Sources */, - 22A0E63EE43ED826D8DFAB3444112A06 /* PFUserConstants.m in Sources */, - 880A556877BBB523DEE7001E1945C648 /* PFUserController.m in Sources */, - 98C36B42CA7EF2A5C43647355E1590AA /* PFUserFileCodingLogic.m in Sources */, - 8B58E16D2F44D517D4CD0B5AFA479B54 /* PFUserState.m in Sources */, - CB7DC9EDB7454CF34FB6251AB98972B6 /* PFWeakValue.m in Sources */, - E865E91B85761327812436CFD0EE21FE /* Parse-dummy.m in Sources */, - F8CE939475DB06A79F0B42858F50A175 /* Parse.m in Sources */, - 278028677CDB8067FFF832B90AE73116 /* ParseManager.m in Sources */, - 0548214136FCCAE0412E4688B4F8CDCB /* ParseModule.m in Sources */, + DA416E69B5F566C7B6285F3599959A6B /* AFHTTPRequestOperation.m in Sources */, + 7756D7BB0348749B4F60045225319440 /* AFHTTPRequestOperationManager.m in Sources */, + EB8972CF2264606E68719BD0A56136E0 /* AFHTTPSessionManager.m in Sources */, + 70D550AF4C9629970790646494809319 /* AFNetworkActivityIndicatorManager.m in Sources */, + 72D185DBCF5DBEE36998286105DB28B7 /* AFNetworkReachabilityManager.m in Sources */, + C47626B4889AB5DFD3D9AE947C8C7FF5 /* AFNetworking-dummy.m in Sources */, + 17EA19C39C267A986767A673A0282BEF /* AFSecurityPolicy.m in Sources */, + 060548DA77437C6E1D9ADF4016C7D943 /* AFURLConnectionOperation.m in Sources */, + 6ECA2588DD9F371705464EA868788A37 /* AFURLRequestSerialization.m in Sources */, + D756690B9C53ECA5483E820CF07DC6B3 /* AFURLResponseSerialization.m in Sources */, + 773113ED2610EE916C7CD76FD2C2A6FB /* AFURLSessionManager.m in Sources */, + D39B95816667281BBCEA8C9390AD655D /* UIActivityIndicatorView+AFNetworking.m in Sources */, + 4B0E0120B82190A2D270BE5517D722C7 /* UIAlertView+AFNetworking.m in Sources */, + 52F959E3D2C5E0EDE71E991549018F7E /* UIButton+AFNetworking.m in Sources */, + 0E7F7F9299DC41809B8E9E85E0D13994 /* UIImageView+AFNetworking.m in Sources */, + 87BA579DEE95B932566E7AA395784BF1 /* UIProgressView+AFNetworking.m in Sources */, + E16A5B9C5EC0223F63490286BF82A3C1 /* UIRefreshControl+AFNetworking.m in Sources */, + D6E5FBA71CBE86EF42CBA9D43768DBCB /* UIWebView+AFNetworking.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - A4287A5FFA8C78F698E417A9B2E94CD0 /* Sources */ = { + CCBBD2CC0F1B01F986136B924E18365B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E1D1C143E6692407376FB991936085DC /* PFActionButton.m in Sources */, - E4F65D360A870AE93E4A2CCD3D3491E3 /* PFActivityIndicatorCollectionReusableView.m in Sources */, - D0C0E6DF830E9771B4A9ACA48BD1C2FA /* PFActivityIndicatorTableViewCell.m in Sources */, - DB25C2F1A23AE3183921A8D3DF4FE24D /* PFCollectionViewCell.m in Sources */, - 6AD3C772F3FF85F3497088F60C7963F5 /* PFColor.m in Sources */, - 5E8A9993BF21FC6A83FD93B1805E7E08 /* PFDismissButton.m in Sources */, - CCDBD66664BB0CA36EBE89388868E078 /* PFImage.m in Sources */, - 8C19440562BFF499AC480DE8E608FF46 /* PFImageCache.m in Sources */, - 4F3FF316B9AC1B085B0BED76753BBF9A /* PFImageView.m in Sources */, - 32A2CE35418BD5633F9217B88B539CC3 /* PFLoadingView.m in Sources */, - C4FA14E2FF9F8A9254BFFCDF71E56DCD /* PFLogInView.m in Sources */, - F8797AD57E1C9E3248CEE5F1BC867DB7 /* PFLogInViewController.m in Sources */, - 85B0C6E345CC679BACD3B8EC8BC903BF /* PFPrimaryButton.m in Sources */, - C03EBBEAFE95FD7E24990703FD68B77F /* PFProductTableViewController.m in Sources */, - C7E834F143C71B5C4194641E056B1BDC /* PFPurchaseTableViewCell.m in Sources */, - 417817B29B272C3A7E76522DCED4641B /* PFQueryCollectionViewController.m in Sources */, - 7A7BE0B71906AC4EEF741D34ACD5571B /* PFQueryTableViewController.m in Sources */, - 9BBBA20A0D257B239AC0CDBEA6F29BC7 /* PFRect.m in Sources */, - C5EFDF7F763E623AFD30780B1982869A /* PFResources.m in Sources */, - 3859BC5571F7217642873574773EADB1 /* PFSignUpView.m in Sources */, - 6680EDA225DDBD24AAA8AD3D9373828C /* PFSignUpViewController.m in Sources */, - 817B500E5ED177D38A3EC98115632595 /* PFTableViewCell.m in Sources */, - D9D1261CE4BA4764455EBE65EE2047B4 /* PFTextButton.m in Sources */, - E27F8532DB90E0766FA777C88379FA68 /* PFTextField.m in Sources */, - AF63656DC5C09D391A445E07384ABD71 /* PFUIAlertView.m in Sources */, - ABBBC278EBDDA40702E0436212E86E9F /* ParseUI-dummy.m in Sources */, + A0FD5D70607791DA434607BD32953BB8 /* BFTask+Private.m in Sources */, + AA9E183BC561A6E7F6E0C1248F557545 /* PFACL.m in Sources */, + C84E4314110E7337590B06D306DB5B25 /* PFACLState.m in Sources */, + A40FFD3B799DB08AF93EF3D58721C683 /* PFAlertView.m in Sources */, + 41DA73BA262516EEE659200AF960524D /* PFAnalytics.m in Sources */, + 32F4E2488ACF370D7D7B6E7BF574037A /* PFAnalyticsController.m in Sources */, + DF32FFCE72256BB08A4A4A12AEDAA5F2 /* PFAnalyticsUtilities.m in Sources */, + DAB17550E0BC246D681E78F23490D13A /* PFAnonymousAuthenticationProvider.m in Sources */, + C757D9E7F4F9171A438DC13E207DB812 /* PFAnonymousUtils.m in Sources */, + 87CA2E89F0671338C5D77AB3D1DCAE08 /* PFApplication.m in Sources */, + 688567EBCD1F791D690EF0B0606E8D7D /* PFAsyncTaskQueue.m in Sources */, + D6278731D179E6B80923FC1422D89BDE /* PFBase64Encoder.m in Sources */, + 94DE090DC9D4E2FF01B807DC088C1A2B /* PFBaseState.m in Sources */, + 8341EE83FBC383451BA2AE2C5C446BA6 /* PFCachedQueryController.m in Sources */, + FE36F8EB1D79441F0D7EA68204554170 /* PFCategoryLoader.m in Sources */, + 430C5787F4DF47E9094C7ABDB2B04ECD /* PFCloud.m in Sources */, + 5DE5474CCDF02AF3DF047B2566CB5D9B /* PFCloudCodeController.m in Sources */, + 33F185F5752B32FD3D97DC25918BD9DD /* PFCommandCache.m in Sources */, + 85D80D1497A9E6318D2F783D20F6A746 /* PFCommandResult.m in Sources */, + DCA95DB4B5FB46F59B4E55132FFCA9A2 /* PFCommandRunning.m in Sources */, + 0DDAB24D1C65F117F20347BAA4527A27 /* PFCommandRunningConstants.m in Sources */, + 875FF12D2CA07A0501C2C6E3737A04AD /* PFCommandURLRequestConstructor.m in Sources */, + 62B992AA4EA2216FDE8D4ACFD4668868 /* PFConfig.m in Sources */, + B55863F85E48961D1263CDEDEC58E0A4 /* PFConfigController.m in Sources */, + 49EE04A65E965F38E217808014224E3C /* PFConstants.m in Sources */, + 90623FBA43B6EC89DB654789E0ACDADC /* PFCoreManager.m in Sources */, + FD104C9FD5A8BC95487C1342CCE4CB39 /* PFCurrentConfigController.m in Sources */, + F0CC4BA2B268305829D4D684804954CF /* PFCurrentInstallationController.m in Sources */, + 95F0FF4728F785061D9B5815E441884C /* PFCurrentUserController.m in Sources */, + 8A700EB1C1BD9FE93FF3203FC515E8C7 /* PFDateFormatter.m in Sources */, + ED605FEBDAADBEC8552006F045B01705 /* PFDecoder.m in Sources */, + 2553D2567B1E70C16C2AB70D607A6BD1 /* PFDefaultACLController.m in Sources */, + 633BAFB373DCA7B1706037EF1A32392D /* PFDevice.m in Sources */, + BD31FF38FA208D334B6A62BD7A547617 /* PFEncoder.m in Sources */, + 3A29B956E2FE21BDA0D041219196B865 /* PFErrorUtilities.m in Sources */, + 6989C078EF4388CD38C689454474E124 /* PFEventuallyPin.m in Sources */, + E2F69D44CE50C4D737FF9B14183EC438 /* PFEventuallyQueue.m in Sources */, + 71AC8C8F844793FCB358AF89FA39CEE4 /* PFFieldOperation.m in Sources */, + B8BD806AE0EB03821AF1DAD9F15EF7EF /* PFFieldOperationDecoder.m in Sources */, + 017B8F79B4574667911E42F413D0B125 /* PFFile.m in Sources */, + A8D7D8586E9A5917C29A7837D7F725C3 /* PFFileController.m in Sources */, + E70CDA474BE7D60A1BFC1C8FC67E6E0F /* PFFileDataStream.m in Sources */, + D8B94C4D85B6AD35B1CD68E98EC33EA5 /* PFFileManager.m in Sources */, + 7351EAACF7368F066FDEA8AA65D58F9F /* PFFileStagingController.m in Sources */, + E90A4B7E814D0A252613AC20A287916F /* PFFileState.m in Sources */, + E18E0295BE5E5E62DAC3653B70C88F7C /* PFGeoPoint.m in Sources */, + C8946905367D6E7BB5846DAC2CAC108E /* PFHTTPURLRequestConstructor.m in Sources */, + 800E91ECF564044E99D377858B8B3F28 /* PFHash.m in Sources */, + 1BE8D03DF2ACF1E07F4A5CC0968C2D15 /* PFInstallation.m in Sources */, + A8A41DDB530252AF762DF8CC3E2E1AC4 /* PFInstallationConstants.m in Sources */, + 112278EF7B27EFF6490BE7A996514FAF /* PFInstallationController.m in Sources */, + 7E0B1B4265077A70972091E52F33A480 /* PFInstallationIdentifierStore.m in Sources */, + 391D305388EF6A44D773792B08CC3C1E /* PFInternalUtils.m in Sources */, + AE84D9647356875A5B1CE46B2883CF9A /* PFJSONSerialization.m in Sources */, + DFE6BCC9B3D124F054E0F5E4F7211E5D /* PFKeyValueCache.m in Sources */, + 96E63FC8257A8F7B84AAD36DABE45911 /* PFKeychainStore.m in Sources */, + E26F10B81F88F3C1FC275D39775F8504 /* PFLocationManager.m in Sources */, + 11F0E4D0327E0E0DB7E1A172E0FAAEFD /* PFLogger.m in Sources */, + 23E20EBA898902A40ABE33C592C7781C /* PFMultiProcessFileLock.m in Sources */, + A90ADF3FB744411C529F9F6FFCF60655 /* PFMultiProcessFileLockController.m in Sources */, + D4EFA2931E80CB3C5BD7E35817D58908 /* PFMulticastDelegate.m in Sources */, + 6FAF91C5D66CD77C9E84DAA8F7303D59 /* PFMutableACLState.m in Sources */, + B1DAFACF4D7BA100FBE0E7AC4BF8C30D /* PFMutableFileState.m in Sources */, + 3004E3DE761217EC0DD603568CD94F8D /* PFMutableObjectState.m in Sources */, + 3EA9DF8D721B9D0D4AC15384B7856062 /* PFMutablePushState.m in Sources */, + 47427973D7E4AD7D2B94106ED0D8BCBB /* PFMutableQueryState.m in Sources */, + 3D1F031A52A20B30E46816DF3085E80D /* PFMutableRelationState.m in Sources */, + CA87995336A8322406EC05F986349142 /* PFMutableUserState.m in Sources */, + 625F2F0C4B13C9ADCCFB854F0DFD5113 /* PFNetworkActivityIndicatorManager.m in Sources */, + 9EFF97378B2FAB0A79E5DFFA17C7877E /* PFObject.m in Sources */, + 5DF38A397631BA3DB7D6AF71AB003F3A /* PFObjectBatchController.m in Sources */, + D23475D5CE10743CDDAF1564B1336BC9 /* PFObjectConstants.m in Sources */, + C42FDE5AABBD17841F7CFC956D6E7721 /* PFObjectController.m in Sources */, + 105AC997EEFDA4CFEC70C6DB1A32ECF5 /* PFObjectEstimatedData.m in Sources */, + 1ED3A520ACFB313CBEDE4D1FCD582D8D /* PFObjectFileCoder.m in Sources */, + 047D7E309D227F13258E858817519667 /* PFObjectFileCodingLogic.m in Sources */, + 2C40561DB066F7EE69CB973B1C339A1F /* PFObjectFilePersistenceController.m in Sources */, + BA32DACB87D15C93F3966B67F5F07CA5 /* PFObjectLocalIdStore.m in Sources */, + 4380B74341A32F548C1BD368C0A0520D /* PFObjectState.m in Sources */, + B94E52553492E39DBF51B961735A29F2 /* PFObjectSubclassInfo.m in Sources */, + 9B0ACAE06343FFBB110A9026449C8918 /* PFObjectSubclassingController.m in Sources */, + B504ABB7F23033B831D46063F203CBD4 /* PFObjectUtilities.m in Sources */, + E8F3A44DC96750EBBE56CCFA3430F2FF /* PFOfflineObjectController.m in Sources */, + 02DFBFD6A20FB90FEEE01E93EA600CCB /* PFOfflineQueryController.m in Sources */, + 3D0E1B6ECD5FC0B60A62C355A91E4918 /* PFOfflineQueryLogic.m in Sources */, + 2B251BCAA4ADFBF1D3BAD693B963EAB3 /* PFOfflineStore.m in Sources */, + 9FC681F90A12C271D0247109A0AF82A9 /* PFOperationSet.m in Sources */, + 5D2081C85D9075DFD20B20DA8E0FE55C /* PFPaymentTransactionObserver.m in Sources */, + 8F5D4E08A39F536491AEAEAED03AA45F /* PFPin.m in Sources */, + 756040F66618848035E84EDE977C41A9 /* PFPinningEventuallyQueue.m in Sources */, + 41482DCFBB1219BD53DB333486769AE1 /* PFPinningObjectStore.m in Sources */, + 1ED84A82F3FF335F59188A45AC02FB1C /* PFProduct.m in Sources */, + 3CF688909A0D796A79167362DDE3FEF7 /* PFProductsRequestHandler.m in Sources */, + 79B6295E0237D0DA002EFD4D292BA827 /* PFPropertyInfo.m in Sources */, + 136A0CFFBEB1A10D50AC4A1E225B4675 /* PFPropertyInfo_Runtime.m in Sources */, + D682CA1A005BFC39F9845C8B816145FD /* PFPurchase.m in Sources */, + 56DF4FE90FE41CB6890DA216C61F7330 /* PFPurchaseController.m in Sources */, + E9188A3B39680D3BADBBA2EFA8864890 /* PFPush.m in Sources */, + EF2B28E778788EEA7CBA0599E01D122A /* PFPushChannelsController.m in Sources */, + D42EB510EDB18466DD86524396A420B1 /* PFPushController.m in Sources */, + B41F4C9FC1081ABDB143808A92AE32BD /* PFPushManager.m in Sources */, + 35AFF1E89C49E9A373995E2DADF33979 /* PFPushState.m in Sources */, + 84BB52D486ABE0C46AFF2E1C9D8ECA11 /* PFPushUtilities.m in Sources */, + 2180740D1254387DC0FFFB15F3ABE7DD /* PFQuery.m in Sources */, + DB12689F3928F5E34AD2D6F0ACF8772C /* PFQueryController.m in Sources */, + E1069BC323098EA3B49FB18EC7EE121F /* PFQueryState.m in Sources */, + 718A1B8133F64AB761004A96137C2473 /* PFQueryUtilities.m in Sources */, + 44C0533BA3EDFF3E3445F62AF0590047 /* PFRESTAnalyticsCommand.m in Sources */, + 8CB231ED4582EEBB8AFF63A0DFDBCD2C /* PFRESTCloudCommand.m in Sources */, + 1F1B4603F52506AC9D06765847BF22F1 /* PFRESTCommand.m in Sources */, + C5D27D34901BE3C9980677DBF5B69240 /* PFRESTConfigCommand.m in Sources */, + B0EFFD49BF3349A52B092D43AC0E64EA /* PFRESTFileCommand.m in Sources */, + CBDFCB5B68DB0038CB04AD01B8455057 /* PFRESTObjectBatchCommand.m in Sources */, + D0F8C49DC9E28811DFA92FA22B130EF5 /* PFRESTObjectCommand.m in Sources */, + 5C4D0B280BB4AF12EBE760D662668E16 /* PFRESTPushCommand.m in Sources */, + 8D92FB3C9934E0339F9DFA3F2A9026A5 /* PFRESTQueryCommand.m in Sources */, + 51D5987F251A327AC7C9760D51E8B001 /* PFRESTSessionCommand.m in Sources */, + 1FF8B1071B45A4B6532CD916691EE1F5 /* PFRESTUserCommand.m in Sources */, + 3049E331D34FE15433FCBD32968AF4D3 /* PFReachability.m in Sources */, + DD8F626A250F5AF7CE97772A498D4EAA /* PFRelation.m in Sources */, + FAF4B2FC5EAADBD306166D5438EA7E9B /* PFRelationState.m in Sources */, + 2CD920221C7DB0877C7383DDC555E532 /* PFRole.m in Sources */, + 6723497F2B6623CB33433EBF6FB7E1D3 /* PFSQLiteDatabase.m in Sources */, + DB6F3337EA7DE8DEF4650048C3853D7E /* PFSQLiteDatabaseController.m in Sources */, + 402B7FD34EA5F4DF7C8C4F9707D8A7CC /* PFSQLiteDatabaseResult.m in Sources */, + 4FCC6D1402CBF630574494235E172586 /* PFSQLiteStatement.m in Sources */, + 13D55D436AE1B30274EFF74EF8B91D53 /* PFSession.m in Sources */, + B33BF4E7E93D06229509ED543EF7A12B /* PFSessionController.m in Sources */, + B2435F3696589184913ABB75AC28ECFB /* PFSessionUtilities.m in Sources */, + 6A45A9B00F4EEB013A668599F5C034E8 /* PFTaskQueue.m in Sources */, + 7671E87EE1AB4A934CB9C4C48A4FAC94 /* PFThreadsafety.m in Sources */, + D07044DE1F5A17A37FCA2259D95CAFF5 /* PFURLConstructor.m in Sources */, + 06F08447EDAD95752E9A4EAF48815E85 /* PFURLSession.m in Sources */, + 3B109713D9276153580041DE2222B204 /* PFURLSessionCommandRunner.m in Sources */, + D0F2F5FEB003B3434666B3492CBEB876 /* PFURLSessionDataTaskDelegate.m in Sources */, + 5BBAE697650D8F0130E1BCE3BC16723A /* PFURLSessionFileDownloadTaskDelegate.m in Sources */, + B6D19506A168E6F30AB64BF058C00ABE /* PFURLSessionJSONDataTaskDelegate.m in Sources */, + CF0550BF599655B84038FFDE8274BCB7 /* PFURLSessionUploadTaskDelegate.m in Sources */, + 11405B42A3610C438464DC86FC67A834 /* PFUser.m in Sources */, + 29F0758F844A9557BBBE832BD475A4AD /* PFUserAuthenticationController.m in Sources */, + FD0141DD8823DB67DAF9FB1F1BF9D270 /* PFUserConstants.m in Sources */, + 9D4B1511347C50240A7D974E2680A2BC /* PFUserController.m in Sources */, + F9115E44CDAC4261540BABEA70F85A8C /* PFUserFileCodingLogic.m in Sources */, + A9E52A3CC06FDE81D8C5CD7D984FB61B /* PFUserState.m in Sources */, + 059CFF34440E8ABB623D36B397E0F092 /* PFWeakValue.m in Sources */, + B0E5DE0D3B2D5CC0A3A6B3FC968243AC /* Parse-dummy.m in Sources */, + 0DD1DFCE04AD8F99996586627197DC28 /* Parse.m in Sources */, + 97B759E5130A33C19F275B159200874C /* ParseManager.m in Sources */, + 29050A8C76B5A5E9E7E6596F7DEF5EEF /* ParseModule.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - C31B9478081DD08C7A80D629C9280D29 /* Sources */ = { + DA7041A2198176B9F9BFAA31A5776A10 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D18CC3FCF71873622CF5F327A568B8BE /* ContextMenu.iOS-dummy.m in Sources */, - 99FAD7969112EB91391E4535089F7A27 /* UIView+YALConstraints.m in Sources */, - 256B22C8EF9B5B23E67AD183CF08A370 /* YALContextMenuTableView.m in Sources */, + 4A9186396E27A1603CF96FD61C0F132D /* PFActionButton.m in Sources */, + 6EA6F173DC7813A46E46EB95B9663BE4 /* PFActivityIndicatorCollectionReusableView.m in Sources */, + DCFBBED4A111E4B8B5200A20170531DB /* PFActivityIndicatorTableViewCell.m in Sources */, + 0E591067B7BF92C106395C2FE8634BB1 /* PFCollectionViewCell.m in Sources */, + 3B857F39CDF4FC14282ACCF2531094B5 /* PFColor.m in Sources */, + B4A6D750F7CA184EA98FAAC97A15A564 /* PFDismissButton.m in Sources */, + 922C7D59C121357BF2AB4E275E9D1369 /* PFImage.m in Sources */, + B2EF8A765545176DA7DBAB499D76792D /* PFImageCache.m in Sources */, + DD6512FDED79E7B7D667FD4A311F9C0C /* PFImageView.m in Sources */, + 26821BD69B7C839AA1203CC211CF457B /* PFLoadingView.m in Sources */, + 54BD2225BCFA5235F7875A2FE572F66E /* PFLogInView.m in Sources */, + 887905EB38E8344F596B4E5D119C2E04 /* PFLogInViewController.m in Sources */, + 2578803E3E84F6D5B721F605404C0232 /* PFPrimaryButton.m in Sources */, + E2A58A3EDBD530411F1BA949C5D55133 /* PFProductTableViewController.m in Sources */, + FA40D0D4ECB7B8F6222F2A1B5A8DE174 /* PFPurchaseTableViewCell.m in Sources */, + 03946EC67A0BAF94DDB6F4B7E84BCA71 /* PFQueryCollectionViewController.m in Sources */, + 96B3620642D51B56698497C98AFA4F82 /* PFQueryTableViewController.m in Sources */, + 41D43A3CA8F83BB5FA7746E1463E6B8E /* PFRect.m in Sources */, + 570702F9498935532E3797DA19C184FE /* PFResources.m in Sources */, + C07700E54DD63BDCE649BB4F8B523461 /* PFSignUpView.m in Sources */, + D7B1BB8BBE4B6D388D3D9E35C252ADCD /* PFSignUpViewController.m in Sources */, + 1B086BE8BA2D14A321F2377C48D6A3D6 /* PFTableViewCell.m in Sources */, + 48AFFB1D5636617D840F23ED9952537B /* PFTextButton.m in Sources */, + 8EA4621B5543407507A96F8CF0107218 /* PFTextField.m in Sources */, + BE0F283AE4BA09AA4D986E51CAC4CE01 /* PFUIAlertView.m in Sources */, + C16B8238CB5CB2EFAC0AC72A59DA0745 /* ParseUI-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 0899E8BA2384C2FED5E501B223E3CEFD /* PBXTargetDependency */ = { + 14E4E5445512AC7DDC9159B4DC57BF7E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = pop; - target = 47C800E42623009B7192B025B3DD25A1 /* pop */; - targetProxy = EE12126F62BD1EEFAD3A114F7165C35B /* PBXContainerItemProxy */; + name = Bolts; + target = 25F506D3BB111CA2D4ECE0F118AAF4B7 /* Bolts */; + targetProxy = 01EE5DCB1462FBD1541FA743AA751BAA /* PBXContainerItemProxy */; }; - 19923423C703BBEB90AC3A3C857E89F4 /* PBXTargetDependency */ = { + 2C19E241A57064E3D39A6D073CC18833 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = AFNetworking; - target = 9CEF3252DBE731B89BE08B2C8D33D157 /* AFNetworking */; - targetProxy = 99961E400193CE18389BE0F5180AB7F3 /* PBXContainerItemProxy */; + name = ContextMenu.iOS; + target = F8D4751B066F22CC161A18B7D25B2723 /* ContextMenu.iOS */; + targetProxy = 456902F0A3ADAF46CCAC2A5F2F106A75 /* PBXContainerItemProxy */; }; - 4E4F6F1D81F1078BEF297F869D35B281 /* PBXTargetDependency */ = { + 36DA77E3B337B591C644BF09DBD4014A /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = ParseUI; - target = 30B6C683408FE258B28EE47F87D10FD5 /* ParseUI */; - targetProxy = FABF293F3CD2F3C97F0EA10E96BAC2A6 /* PBXContainerItemProxy */; + name = pop; + target = 47C800E42623009B7192B025B3DD25A1 /* pop */; + targetProxy = F2455E9FC9C7D1721D11E79CEBFFA346 /* PBXContainerItemProxy */; }; - 7582E4FBF9E23D885F047845D9BAF1AD /* PBXTargetDependency */ = { + 6533663E2F7F98C18565A3D5AFD5FCEC /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Parse; - target = C8E26D4496BE6E05436ED5442A4A35C6 /* Parse */; - targetProxy = 4A62D857EC92BBBC0306F5AFC1E44540 /* PBXContainerItemProxy */; + name = Bolts; + target = 25F506D3BB111CA2D4ECE0F118AAF4B7 /* Bolts */; + targetProxy = 3ED04283DB3363CE0EBBD3C49530F396 /* PBXContainerItemProxy */; + }; + 7C13106622D8568CAE3B6827189A29E0 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Bolts; + target = 25F506D3BB111CA2D4ECE0F118AAF4B7 /* Bolts */; + targetProxy = F639CB996F0FD9140EB909441607B15D /* PBXContainerItemProxy */; }; - 8EF4E4FF05990F09CF590B3C32C05754 /* PBXTargetDependency */ = { + A70C8815545E6C119C228F702221C465 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Parse; - target = C8E26D4496BE6E05436ED5442A4A35C6 /* Parse */; - targetProxy = 52518CE5417A0014201101497C436F9B /* PBXContainerItemProxy */; + target = 57D25E61D9826A76A43A896C44CABA8F /* Parse */; + targetProxy = 400CEE44CEDCD245DC7013FD327A097F /* PBXContainerItemProxy */; }; - 952FB994AE0621B42EB3D4A8C5901B4C /* PBXTargetDependency */ = { + CC2E8312E90985F8C7CAB9EC866C5E3E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Bolts; - target = 5E7ECA46011128F44607D2526FF28BBF /* Bolts */; - targetProxy = B2E5C7781C3E2087AEA03EF41C4EE7C0 /* PBXContainerItemProxy */; + name = "NSDate+TimeAgo"; + target = 073C8BE92E23FA40E8EE37802B1F8CEA /* NSDate+TimeAgo */; + targetProxy = 0B36135B4E600C75EB507D327C3976C4 /* PBXContainerItemProxy */; }; - BDCD5DD6A24A428E11E10A934BE669D2 /* PBXTargetDependency */ = { + DA3FD69599E8D3657E277590879F15C4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Bolts; - target = 5E7ECA46011128F44607D2526FF28BBF /* Bolts */; - targetProxy = F35397A038CF6004F7D006C52C3042DF /* PBXContainerItemProxy */; + name = Parse; + target = 57D25E61D9826A76A43A896C44CABA8F /* Parse */; + targetProxy = 988B43739681471C5692D9EFC38ECAFC /* PBXContainerItemProxy */; }; - C1407E01BF7B9C202F3E485071EFB470 /* PBXTargetDependency */ = { + E0D6F7DBE91E2AFBB59E512DCFDC60E6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Bolts; - target = 5E7ECA46011128F44607D2526FF28BBF /* Bolts */; - targetProxy = 990436F1E7C13E75A6DA3B6C9195DA14 /* PBXContainerItemProxy */; + name = ParseUI; + target = 209AB0B77C675E32A81B4BE355428147 /* ParseUI */; + targetProxy = 22E7DA377798C6E865E71878C454D174 /* PBXContainerItemProxy */; }; - E625AC18748C0B8FF6BB0F892F91679E /* PBXTargetDependency */ = { + E8278E01C2E732E7775A717754EA22C5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = ContextMenu.iOS; - target = FF04CF73CFE56992B404E8BC19C3A4FE /* ContextMenu.iOS */; - targetProxy = 14463E173C08B7B666D09C49F5839A75 /* PBXContainerItemProxy */; + name = AFNetworking; + target = 3A014738CBA3413E897D1CCDA8931473 /* AFNetworking */; + targetProxy = 73DF76E1E667D07E7ABDC9BD285D67BA /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 05AC3AE11084386BFC6EE8A3860A2632 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C213AD7370FD716E3010F4CCDE4BE681 /* ParseUI-Private.xcconfig */; - buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/ParseUI/ParseUI-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - 184E4FDF5C66B50DD1AC02CB1B0236F7 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C157642B668892E40497C6E7E543A2FC /* AFNetworking-Private.xcconfig */; - buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Release; - }; - 377D8F8B1424499BCE256365B12BE3AD /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2940BC6B2FD4089D74072136047C2FEE /* Pods.release.xcconfig */; - buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Release; - }; - 37D75D3EB886D10E43FD1EEE8A61E85B /* Release */ = { + 319833EAF01575F9CCDE4DBDB652C421 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5A12ABBF15A8F5506519823676F3C8DD /* Bolts-Private.xcconfig */; + baseConfigurationReference = C784CC8E8064EF5D1B9368F61DC7624B /* Parse-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; @@ -2973,9 +2987,9 @@ }; name = Release; }; - 3FF43C79B2F8873DE38153E56DD8526B /* Debug */ = { + 39AD742AC1E6E7CFCB216FE34144307C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 976A55E7CE8D654A68FBED3175180C45 /* Parse-Private.xcconfig */; + baseConfigurationReference = C784CC8E8064EF5D1B9368F61DC7624B /* Parse-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; @@ -2983,55 +2997,38 @@ MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Release; - }; - 3F77F15099C013262E1B4B1C3245CB82 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A89DC1C62077920038FC9E70EC43406F /* Parse-Private.xcconfig */; - buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; - name = Release; + name = Debug; }; - 500A11FF036E8000E4D1DBE90EADC6D6 /* Release */ = { + 47505BB755F8AF65B8D507E8C3CE6F77 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 091BEB546F9E83DDA5A3AA12B9DEE1B4 /* AFNetworking-Private.xcconfig */; + baseConfigurationReference = B82BDF2DB2AF3004F43B1A3A57997473 /* Bolts-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; + MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; - name = Release; + name = Debug; }; - 52F764F248C08C9E3023D25A1C8F3129 /* Release */ = { + 4BC10C8C03FC52D474A935B07B3CA038 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 29F9DECE0CF6610E69C7A3675035677A /* ParseUI-Private.xcconfig */; + baseConfigurationReference = 41BFE21A3D5255A9FB6D1EB28C605BB5 /* Pods.release.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/ParseUI/ParseUI-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -3093,22 +3090,6 @@ }; name = Release; }; - 692AE31C3AC629E6A57E7C8EBC6A61AD /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DD2C8034413D050CB11771F958F248F1 /* ContextMenu.iOS-Private.xcconfig */; - buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/ContextMenu.iOS/ContextMenu.iOS-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; 74857149DC1E0D599B8A01A78349A926 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3143,12 +3124,12 @@ }; name = Release; }; - 8E7E293A8DD23699E07E4BFC72036C3D /* Release */ = { + 78631DEA9E8E290DC6137664BB553FAD /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 976A55E7CE8D654A68FBED3175180C45 /* Parse-Private.xcconfig */; + baseConfigurationReference = B82BDF2DB2AF3004F43B1A3A57997473 /* Bolts-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; @@ -3157,11 +3138,27 @@ SDKROOT = iphoneos; SKIP_INSTALL = YES; }; - name = Debug; + name = Release; + }; + 7C3FD50F0752851F4FB2C1DB9C7EC851 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7C87A8B3116CDC86AB48796F14149170 /* NSDate+TimeAgo-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/NSDate+TimeAgo/NSDate+TimeAgo-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; }; - 8F81628251F65DE85CD539EB703940D9 /* Debug */ = { + 86564433F62278E146A0A64567D225B3 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 88941524D385690CBCF300DD140DF00E /* Pods.debug.xcconfig */; + baseConfigurationReference = A6B3A97E636348CCC00FE524D7C505E6 /* Pods.debug.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; IPHONEOS_DEPLOYMENT_TARGET = 9.0; @@ -3175,9 +3172,41 @@ }; name = Debug; }; - A7CEFDABAC8A9F07912D89EF2401A803 /* Debug */ = { + 9162C071E3AF22ECD86FF7967A86F961 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C33C2231FB26FF9D31434434633A6CD8 /* ContextMenu.iOS-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/ContextMenu.iOS/ContextMenu.iOS-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + ADD4E37BB29B2087AEDC32C65AB8FDE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6FF0D7F86EBF3E4E62184BE9EDCAFEBF /* AFNetworking-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + BB1DB19FEF03D388D66CBA77237FD3BD /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C157642B668892E40497C6E7E543A2FC /* AFNetworking-Private.xcconfig */; + baseConfigurationReference = 6FF0D7F86EBF3E4E62184BE9EDCAFEBF /* AFNetworking-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; @@ -3191,12 +3220,12 @@ }; name = Debug; }; - BB6F9B900EDF05BE60DCDA92E4DAECB4 /* Release */ = { + DBF25A4F33FED1E526825172E0619BC5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DD2C8034413D050CB11771F958F248F1 /* ContextMenu.iOS-Private.xcconfig */; + baseConfigurationReference = C33C2231FB26FF9D31434434633A6CD8 /* ContextMenu.iOS-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/ContextMenu.iOS/ContextMenu.iOS-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; @@ -3223,12 +3252,28 @@ }; name = Debug; }; - EC0AAD40C3BDADEBDDA84142EF4B2D4E /* Debug */ = { + EC965352FE6B910420655DAE789961CB /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5A12ABBF15A8F5506519823676F3C8DD /* Bolts-Private.xcconfig */; + baseConfigurationReference = 247F390401ED8756F05F8590B2A4721F /* ParseUI-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/ParseUI/ParseUI-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + ECB89033CAAB80B7BCDD44AA496B3E79 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 247F390401ED8756F05F8590B2A4721F /* ParseUI-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/ParseUI/ParseUI-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; @@ -3239,12 +3284,12 @@ }; name = Debug; }; - FB6D975729D6C0A0CBE0AF592D022A3F /* Release */ = { + FC0463E108F8D8AF1D347DAC921B1FCB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C213AD7370FD716E3010F4CCDE4BE681 /* ParseUI-Private.xcconfig */; + baseConfigurationReference = 7C87A8B3116CDC86AB48796F14149170 /* NSDate+TimeAgo-Private.xcconfig */; buildSettings = { ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/ParseUI/ParseUI-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/NSDate+TimeAgo/NSDate+TimeAgo-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; @@ -3258,20 +3303,20 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 2CAF95F65DE5E0DF3943B5CB1FDFDFB1 /* Build configuration list for PBXNativeTarget "Bolts" */ = { + 00AB20440C5DF4DF1391945C27D1BA38 /* Build configuration list for PBXNativeTarget "NSDate+TimeAgo" */ = { isa = XCConfigurationList; buildConfigurations = ( - EC0AAD40C3BDADEBDDA84142EF4B2D4E /* Debug */, - 37D75D3EB886D10E43FD1EEE8A61E85B /* Release */, + FC0463E108F8D8AF1D347DAC921B1FCB /* Debug */, + 7C3FD50F0752851F4FB2C1DB9C7EC851 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 232C8EB3BB4BBD4011E481EF5D518590 /* Build configuration list for PBXNativeTarget "ContextMenu.iOS" */ = { + 0DEE6E9A823474FF96F4782896C2E113 /* Build configuration list for PBXNativeTarget "ContextMenu.iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - EE40F3DC01937CFC34A5AC195B257824 /* Debug */, - BE677D51E4BD69884BF8C9646A381377 /* Release */, + 9162C071E3AF22ECD86FF7967A86F961 /* Debug */, + DBF25A4F33FED1E526825172E0619BC5 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -3285,56 +3330,56 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 37ECA32CD2B76A684E26A17FAE254686 /* Build configuration list for PBXNativeTarget "ParseUI" */ = { + 40D8BA9A0BA04A3F661C1AC44261695F /* Build configuration list for PBXNativeTarget "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 05AC3AE11084386BFC6EE8A3860A2632 /* Debug */, - FB6D975729D6C0A0CBE0AF592D022A3F /* Release */, + 86564433F62278E146A0A64567D225B3 /* Debug */, + 4BC10C8C03FC52D474A935B07B3CA038 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5C34FB991FA427DC58BDC724C9A71282 /* Build configuration list for PBXNativeTarget "Pods" */ = { + 62C75DE36F62F6DD244D1001268287F5 /* Build configuration list for PBXNativeTarget "pop" */ = { isa = XCConfigurationList; buildConfigurations = ( - 8F81628251F65DE85CD539EB703940D9 /* Debug */, - 377D8F8B1424499BCE256365B12BE3AD /* Release */, + E69EFF8AAAC9CEFE6A33102476292CA8 /* Debug */, + 60DE5500BF969A0D17A617C2E4597711 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 62C75DE36F62F6DD244D1001268287F5 /* Build configuration list for PBXNativeTarget "pop" */ = { + 6D8FFB603AD420901F4B9FCDA05B5F99 /* Build configuration list for PBXNativeTarget "Parse" */ = { isa = XCConfigurationList; buildConfigurations = ( - E69EFF8AAAC9CEFE6A33102476292CA8 /* Debug */, - 60DE5500BF969A0D17A617C2E4597711 /* Release */, + 39AD742AC1E6E7CFCB216FE34144307C /* Debug */, + 319833EAF01575F9CCDE4DBDB652C421 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 64D11131D2BE8C02E0D80E3F89019E1B /* Build configuration list for PBXNativeTarget "AFNetworking" */ = { + AA464FA145A374F11734ED3B06765CFC /* Build configuration list for PBXNativeTarget "Bolts" */ = { isa = XCConfigurationList; buildConfigurations = ( - A7CEFDABAC8A9F07912D89EF2401A803 /* Debug */, - 184E4FDF5C66B50DD1AC02CB1B0236F7 /* Release */, + 47505BB755F8AF65B8D507E8C3CE6F77 /* Debug */, + 78631DEA9E8E290DC6137664BB553FAD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 6F682CC992535202A5D2CF278126BF33 /* Build configuration list for PBXNativeTarget "Parse" */ = { + E9E7F053BD98C38A4753C0CCF1325E21 /* Build configuration list for PBXNativeTarget "AFNetworking" */ = { isa = XCConfigurationList; buildConfigurations = ( - 3FF43C79B2F8873DE38153E56DD8526B /* Debug */, - 8E7E293A8DD23699E07E4BFC72036C3D /* Release */, + BB1DB19FEF03D388D66CBA77237FD3BD /* Debug */, + ADD4E37BB29B2087AEDC32C65AB8FDE5 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E56AF3B044D4C205DC9CB1D9B3AA30B9 /* Build configuration list for PBXNativeTarget "ContextMenu.iOS" */ = { + F633834441F6FE37F46F4CEBF3D8136E /* Build configuration list for PBXNativeTarget "ParseUI" */ = { isa = XCConfigurationList; buildConfigurations = ( - 692AE31C3AC629E6A57E7C8EBC6A61AD /* Debug */, - BB6F9B900EDF05BE60DCDA92E4DAECB4 /* Release */, + ECB89033CAAB80B7BCDD44AA496B3E79 /* Debug */, + EC965352FE6B910420655DAE789961CB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-Private.xcconfig b/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-Private.xcconfig index bfc8625..03a1321 100644 --- a/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-Private.xcconfig +++ b/BreakingBad/Pods/Target Support Files/AFNetworking/AFNetworking-Private.xcconfig @@ -1,6 +1,6 @@ #include "AFNetworking.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/AFNetworking" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/AFNetworking" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/NSDate+TimeAgo" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" OTHER_LDFLAGS = ${AFNETWORKING_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig b/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig index 5b0d215..f80bd43 100644 --- a/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig +++ b/BreakingBad/Pods/Target Support Files/Bolts/Bolts-Private.xcconfig @@ -1,5 +1,5 @@ #include "Bolts.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Bolts" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Bolts" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/NSDate+TimeAgo" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-Private.xcconfig b/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-Private.xcconfig index d12ec85..640805d 100644 --- a/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-Private.xcconfig +++ b/BreakingBad/Pods/Target Support Files/ContextMenu.iOS/ContextMenu.iOS-Private.xcconfig @@ -1,6 +1,6 @@ #include "ContextMenu.iOS.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/NSDate+TimeAgo" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" OTHER_LDFLAGS = ${CONTEXTMENU_IOS_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/NSDate+TimeAgo/NSDate+TimeAgo-Private.xcconfig b/BreakingBad/Pods/Target Support Files/NSDate+TimeAgo/NSDate+TimeAgo-Private.xcconfig new file mode 100644 index 0000000..0ef564d --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/NSDate+TimeAgo/NSDate+TimeAgo-Private.xcconfig @@ -0,0 +1,5 @@ +#include "NSDate+TimeAgo.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/NSDate+TimeAgo" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/NSDate+TimeAgo" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" +PODS_ROOT = ${SRCROOT} +SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/NSDate+TimeAgo/NSDate+TimeAgo-dummy.m b/BreakingBad/Pods/Target Support Files/NSDate+TimeAgo/NSDate+TimeAgo-dummy.m new file mode 100644 index 0000000..3deb923 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/NSDate+TimeAgo/NSDate+TimeAgo-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_NSDate_TimeAgo : NSObject +@end +@implementation PodsDummy_NSDate_TimeAgo +@end diff --git a/BreakingBad/Pods/Target Support Files/NSDate+TimeAgo/NSDate+TimeAgo-prefix.pch b/BreakingBad/Pods/Target Support Files/NSDate+TimeAgo/NSDate+TimeAgo-prefix.pch new file mode 100644 index 0000000..aa992a4 --- /dev/null +++ b/BreakingBad/Pods/Target Support Files/NSDate+TimeAgo/NSDate+TimeAgo-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/BreakingBad/Pods/Target Support Files/NSDate+TimeAgo/NSDate+TimeAgo.xcconfig b/BreakingBad/Pods/Target Support Files/NSDate+TimeAgo/NSDate+TimeAgo.xcconfig new file mode 100644 index 0000000..e69de29 diff --git a/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig b/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig index a4f468c..2b1d5da 100644 --- a/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig +++ b/BreakingBad/Pods/Target Support Files/Parse/Parse-Private.xcconfig @@ -1,6 +1,6 @@ #include "Parse.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Parse" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Parse" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/NSDate+TimeAgo" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" OTHER_LDFLAGS = ${PARSE_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-Private.xcconfig b/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-Private.xcconfig index cf5336c..73b4f7d 100644 --- a/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-Private.xcconfig +++ b/BreakingBad/Pods/Target Support Files/ParseUI/ParseUI-Private.xcconfig @@ -1,6 +1,6 @@ #include "ParseUI.xcconfig" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/ParseUI" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/ParseUI" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/NSDate+TimeAgo" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" OTHER_LDFLAGS = ${PARSEUI_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown index 306898c..5cabade 100644 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown @@ -263,6 +263,23 @@ Apache License +## NSDate+TimeAgo + +Copyright (c) 2011-2013, Kevin Lawler + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + + ## Parse See https://www.parse.com/about/terms diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist index 6211c13..4b2362c 100644 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods-acknowledgements.plist @@ -286,6 +286,27 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Type PSGroupSpecifier + + FooterText + Copyright (c) 2011-2013, Kevin Lawler + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + + Title + NSDate+TimeAgo + Type + PSGroupSpecifier + FooterText See https://www.parse.com/about/terms diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods-resources.sh b/BreakingBad/Pods/Target Support Files/Pods/Pods-resources.sh index 0c4eb4b..6c1ff4d 100755 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods-resources.sh +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods-resources.sh @@ -58,10 +58,12 @@ install_resource() esac } if [[ "$CONFIGURATION" == "Debug" ]]; then + install_resource "NSDate+TimeAgo/NSDateTimeAgo.bundle" install_resource "Parse/Parse/Resources/en.lproj" install_resource "ParseUI/ParseUI/Resources/Localization/en.lproj" fi if [[ "$CONFIGURATION" == "Release" ]]; then + install_resource "NSDate+TimeAgo/NSDateTimeAgo.bundle" install_resource "Parse/Parse/Resources/en.lproj" install_resource "ParseUI/ParseUI/Resources/Localization/en.lproj" fi diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig b/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig index 041274f..6d5fe80 100644 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods.debug.xcconfig @@ -1,7 +1,7 @@ CLANG_CXX_LANGUAGE_STANDARD = c++11 CLANG_CXX_LIBRARY = libc++ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" -isystem "${PODS_ROOT}/Headers/Public/Parse" -isystem "${PODS_ROOT}/Headers/Public/ParseUI" -isystem "${PODS_ROOT}/Headers/Public/pop" -OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"Bolts" -l"ContextMenu.iOS" -l"Parse" -l"ParseUI" -l"c++" -l"pop" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "Foundation" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "Accounts" -weak_framework "Social" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/NSDate+TimeAgo" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" -isystem "${PODS_ROOT}/Headers/Public/NSDate+TimeAgo" -isystem "${PODS_ROOT}/Headers/Public/Parse" -isystem "${PODS_ROOT}/Headers/Public/ParseUI" -isystem "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"Bolts" -l"ContextMenu.iOS" -l"NSDate+TimeAgo" -l"Parse" -l"ParseUI" -l"c++" -l"pop" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "Foundation" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "Accounts" -weak_framework "Social" PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig b/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig index 041274f..6d5fe80 100644 --- a/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig +++ b/BreakingBad/Pods/Target Support Files/Pods/Pods.release.xcconfig @@ -1,7 +1,7 @@ CLANG_CXX_LANGUAGE_STANDARD = c++11 CLANG_CXX_LIBRARY = libc++ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" -isystem "${PODS_ROOT}/Headers/Public/Parse" -isystem "${PODS_ROOT}/Headers/Public/ParseUI" -isystem "${PODS_ROOT}/Headers/Public/pop" -OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"Bolts" -l"ContextMenu.iOS" -l"Parse" -l"ParseUI" -l"c++" -l"pop" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "Foundation" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "Accounts" -weak_framework "Social" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/NSDate+TimeAgo" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/Bolts" -isystem "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" -isystem "${PODS_ROOT}/Headers/Public/NSDate+TimeAgo" -isystem "${PODS_ROOT}/Headers/Public/Parse" -isystem "${PODS_ROOT}/Headers/Public/ParseUI" -isystem "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"Bolts" -l"ContextMenu.iOS" -l"NSDate+TimeAgo" -l"Parse" -l"ParseUI" -l"c++" -l"pop" -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "Foundation" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "Accounts" -weak_framework "Social" PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/BreakingBad/Pods/Target Support Files/pop/pop-Private.xcconfig b/BreakingBad/Pods/Target Support Files/pop/pop-Private.xcconfig index 627f46a..43117ea 100644 --- a/BreakingBad/Pods/Target Support Files/pop/pop-Private.xcconfig +++ b/BreakingBad/Pods/Target Support Files/pop/pop-Private.xcconfig @@ -2,7 +2,7 @@ CLANG_CXX_LANGUAGE_STANDARD = ${POP_CLANG_CXX_LANGUAGE_STANDARD} CLANG_CXX_LIBRARY = ${POP_CLANG_CXX_LIBRARY} GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/pop" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/pop" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/Bolts" "${PODS_ROOT}/Headers/Public/ContextMenu.iOS" "${PODS_ROOT}/Headers/Public/NSDate+TimeAgo" "${PODS_ROOT}/Headers/Public/Parse" "${PODS_ROOT}/Headers/Public/ParseUI" "${PODS_ROOT}/Headers/Public/pop" OTHER_LDFLAGS = ${POP_OTHER_LDFLAGS} PODS_ROOT = ${SRCROOT} SKIP_INSTALL = YES \ No newline at end of file From b51c831d06b06f8bbf3536785ad0dd322ed7de2b Mon Sep 17 00:00:00 2001 From: Zoufishan Mehdi Date: Wed, 21 Oct 2015 20:52:17 -0400 Subject: [PATCH 41/44] question audio and breaking bad home pg custom animation added --- .../BreakingBad.xcodeproj/project.pbxproj | 16 +++ .../BreakingBad/Base.lproj/Main.storyboard | 127 +++++++++++++++--- .../BreakingBad/CustomModalViewController.h | 3 + .../BreakingBad/CustomModalViewController.m | 118 +++++++++------- .../CustomVCTransitionViewController.m | 60 ++++++--- BreakingBad/BreakingBad/MainPageVC.h | 2 + BreakingBad/BreakingBad/MainPageVC.m | 3 + BreakingBad/BreakingBad/QuestionDetailVC.h | 6 +- BreakingBad/BreakingBad/QuestionDetailVC.m | 21 ++- 9 files changed, 271 insertions(+), 85 deletions(-) diff --git a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj index 1a2a24e..d2ae866 100644 --- a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj +++ b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj @@ -28,6 +28,10 @@ 5F9B082F1BCC9ECD00460FF2 /* QuestionDetailVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F9B082E1BCC9ECC00460FF2 /* QuestionDetailVC.m */; }; 5F9B08321BCDAD1500460FF2 /* MainPageVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F9B08311BCDAD1500460FF2 /* MainPageVC.m */; }; 5FDF1A2C1BD1B7E200720A44 /* EntryLogsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FDF1A2B1BD1B7E200720A44 /* EntryLogsTableViewController.m */; settings = {ASSET_TAGS = (); }; }; + 5FE787311BD840590008E0FC /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5FE787301BD840590008E0FC /* AudioToolbox.framework */; }; + 5FE787331BD8406C0008E0FC /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5FE787321BD8406C0008E0FC /* AVFoundation.framework */; }; + 5FE787351BD840AD0008E0FC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5FE787341BD840AD0008E0FC /* Foundation.framework */; }; + 5FE787371BD840B90008E0FC /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5FE787361BD840B90008E0FC /* UIKit.framework */; }; 5FE7B03A1BD3EF3200C5E163 /* HabitInfoData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FE7B0391BD3EF3200C5E163 /* HabitInfoData.m */; settings = {ASSET_TAGS = (); }; }; 5FE7B0431BD41E1500C5E163 /* HabitInfoTVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FE7B0421BD41E1500C5E163 /* HabitInfoTVC.m */; settings = {ASSET_TAGS = (); }; }; 5FE7B04C1BD5178D00C5E163 /* HabitNewsTVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FE7B04B1BD5178D00C5E163 /* HabitNewsTVC.m */; settings = {ASSET_TAGS = (); }; }; @@ -87,6 +91,10 @@ 5F9B08311BCDAD1500460FF2 /* MainPageVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainPageVC.m; sourceTree = ""; }; 5FDF1A2A1BD1B7E200720A44 /* EntryLogsTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EntryLogsTableViewController.h; sourceTree = ""; }; 5FDF1A2B1BD1B7E200720A44 /* EntryLogsTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EntryLogsTableViewController.m; sourceTree = ""; }; + 5FE787301BD840590008E0FC /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; + 5FE787321BD8406C0008E0FC /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; + 5FE787341BD840AD0008E0FC /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 5FE787361BD840B90008E0FC /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 5FE7B0381BD3EF3200C5E163 /* HabitInfoData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HabitInfoData.h; sourceTree = ""; }; 5FE7B0391BD3EF3200C5E163 /* HabitInfoData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HabitInfoData.m; sourceTree = ""; }; 5FE7B0411BD41E1500C5E163 /* HabitInfoTVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HabitInfoTVC.h; sourceTree = ""; }; @@ -139,6 +147,10 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 5FE787371BD840B90008E0FC /* UIKit.framework in Frameworks */, + 5FE787351BD840AD0008E0FC /* Foundation.framework in Frameworks */, + 5FE787331BD8406C0008E0FC /* AVFoundation.framework in Frameworks */, + 5FE787311BD840590008E0FC /* AudioToolbox.framework in Frameworks */, DCB588911BD5E65D00777FF9 /* CoreLocation.framework in Frameworks */, 4A5A43BBA13FCB718327B866 /* libPods.a in Frameworks */, ); @@ -304,6 +316,10 @@ C7D24797CBE441A3A8CF05A9 /* Frameworks */ = { isa = PBXGroup; children = ( + 5FE787361BD840B90008E0FC /* UIKit.framework */, + 5FE787341BD840AD0008E0FC /* Foundation.framework */, + 5FE787321BD8406C0008E0FC /* AVFoundation.framework */, + 5FE787301BD840590008E0FC /* AudioToolbox.framework */, DCB588901BD5E65D00777FF9 /* CoreLocation.framework */, 288369826A80E7C37FA68C71 /* libPods.a */, ); diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index 22d7bc9..9ee52bb 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -1,5 +1,5 @@ - + @@ -10,10 +10,21 @@ Avenir-Light Avenir-Light + + Bariol-Regular + Bariol-Regular + Bariol-Regular + Bariol-Regular + Bariol-Regular + Bariol-Regular + Bariol-Regular + Jaapokkisubtract-Regular Jaapokkisubtract-Regular Jaapokkisubtract-Regular + Jaapokkisubtract-Regular + Jaapokkisubtract-Regular Oranienbaum @@ -24,15 +35,7 @@ Oranienbaum Oranienbaum Oranienbaum - - - Bariol-Regular - Bariol-Regular - Bariol-Regular - Bariol-Regular - Bariol-Regular - Bariol-Regular - Bariol-Regular + Oranienbaum @@ -606,10 +609,10 @@ - + - + @@ -639,10 +642,10 @@ - + - + @@ -1254,6 +1257,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1433,12 +1487,53 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BreakingBad/BreakingBad/CustomModalViewController.h b/BreakingBad/BreakingBad/CustomModalViewController.h index 0274c9c..e09f0c3 100644 --- a/BreakingBad/BreakingBad/CustomModalViewController.h +++ b/BreakingBad/BreakingBad/CustomModalViewController.h @@ -20,4 +20,7 @@ PFSignUpViewControllerDelegate @property (weak, nonatomic) IBOutlet UITextField *passwordTextField; @property (weak, nonatomic) IBOutlet UITextField *confirmPasswordTextField; +@property (weak, nonatomic) IBOutlet UIButton *dareToTryButton; + + @end diff --git a/BreakingBad/BreakingBad/CustomModalViewController.m b/BreakingBad/BreakingBad/CustomModalViewController.m index 538c843..14e6511 100644 --- a/BreakingBad/BreakingBad/CustomModalViewController.m +++ b/BreakingBad/BreakingBad/CustomModalViewController.m @@ -18,6 +18,27 @@ @implementation CustomModalViewController #pragma mark #pragma LifeCycle Methods +- (void)viewDidLoad{ + [super viewDidLoad]; + + self.view.backgroundColor = [SharedManager sharedModel].colesiumGrey; + + self.dareToTryButton.layer.borderWidth = 3.3; + self.dareToTryButton.layer.borderColor = [SharedManager sharedModel].brickRed.CGColor; + self.dareToTryButton.backgroundColor = [SharedManager sharedModel].colesiumGrey; + self.dareToTryButton.layer.cornerRadius = 18; + self.dareToTryButton.tintColor = [SharedManager sharedModel].brickRed; + +} + +- (IBAction)dareToTry:(id)sender { + MainPageVC *mvc = (MainPageVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"showMainPgVC"]; + [self presentViewController:mvc animated:YES completion:nil]; +} + + + + //- (void)viewDidAppear:(BOOL)animated { // [super viewDidAppear:animated]; // @@ -43,59 +64,56 @@ @implementation CustomModalViewController // [self presentViewController:logInViewController animated:YES completion:NULL]; // } //} -// -//- (void)viewDidLoad{ -// [super viewDidLoad]; -//} -- (IBAction)cancelButtonTapped:(UIButton *)sender { - [self dismissViewControllerAnimated:YES completion:nil]; -} -- (IBAction)signUpButtonTapped:(UIButton *)sender { - - PFUser *thisUser = [PFUser user]; - if(![[thisUser objectForKey:@"emailVerified"] boolValue]){ - [thisUser fetch]; - } - - if ([self.passwordTextField.text isEqualToString:self.confirmPasswordTextField.text] && self.passwordTextField.text.length !=0) { - PFUser *thisUser = [PFUser user]; - thisUser.email = self.emailTextField.text; - thisUser.username = self.usernameTextField.text; - thisUser.password = self.passwordTextField.text; - - [thisUser signUpInBackgroundWithBlock:^(BOOL succeeded, NSError * _Nullable error) { - - [[SharedManager sharedModel].currentUser saveInBackground]; - - MainPageVC *mvc = (MainPageVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"showMainPgVC"]; - [self presentViewController:mvc animated:YES completion:nil]; - }]; - - - } else { - - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Error" message:@"The password field is either empty or does not match the confirm password field" preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - [alertController dismissViewControllerAnimated:YES completion:nil]; - }]; - - [alertController addAction:okAction]; - - [self presentViewController:alertController animated:YES completion:nil]; - } - -} +//- (IBAction)cancelButtonTapped:(UIButton *)sender { +// [self dismissViewControllerAnimated:YES completion:nil]; +//} +// +//- (IBAction)signUpButtonTapped:(UIButton *)sender { +// +// PFUser *thisUser = [PFUser user]; +// if(![[thisUser objectForKey:@"emailVerified"] boolValue]){ +// [thisUser fetch]; +// } +// +// if ([self.passwordTextField.text isEqualToString:self.confirmPasswordTextField.text] && self.passwordTextField.text.length !=0) { +// PFUser *thisUser = [PFUser user]; +// thisUser.email = self.emailTextField.text; +// thisUser.username = self.usernameTextField.text; +// thisUser.password = self.passwordTextField.text; +// +// [thisUser signUpInBackgroundWithBlock:^(BOOL succeeded, NSError * _Nullable error) { +// +// [[SharedManager sharedModel].currentUser saveInBackground]; +// +// MainPageVC *mvc = (MainPageVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"showMainPgVC"]; +// [self presentViewController:mvc animated:YES completion:nil]; +// }]; +// +// +// } else { +// +// UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Error" message:@"The password field is either empty or does not match the confirm password field" preferredStyle:UIAlertControllerStyleAlert]; +// +// UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { +// [alertController dismissViewControllerAnimated:YES completion:nil]; +// }]; +// +// [alertController addAction:okAction]; +// +// [self presentViewController:alertController animated:YES completion:nil]; +// } +// +//} --(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { - - [self.emailTextField resignFirstResponder]; - [self.usernameTextField resignFirstResponder]; - [self.passwordTextField resignFirstResponder]; - [self.confirmPasswordTextField resignFirstResponder]; -} +//-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { +// +// [self.emailTextField resignFirstResponder]; +// [self.usernameTextField resignFirstResponder]; +// [self.passwordTextField resignFirstResponder]; +// [self.confirmPasswordTextField resignFirstResponder]; +//} diff --git a/BreakingBad/BreakingBad/CustomVCTransitionViewController.m b/BreakingBad/BreakingBad/CustomVCTransitionViewController.m index feffc54..5625ffb 100644 --- a/BreakingBad/BreakingBad/CustomVCTransitionViewController.m +++ b/BreakingBad/BreakingBad/CustomVCTransitionViewController.m @@ -14,19 +14,45 @@ #import "LoginViewController.h" #import "SignUpViewController.h" #import +#import "SharedManager.h" @implementation CustomVCTransitionViewController -- (IBAction)didClickEnter:(id)sender { - // CustomModalViewController *modalVC = [self.storyboard instantiateViewControllerWithIdentifier:@"customModal"]; - // - // - // modalVC.transitioningDelegate = self; - // - // modalVC.modalPresentationStyle = UIModalPresentationCustom; - // - // [self presentViewController:modalVC animated:YES completion:nil]; +-(void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [SharedManager sharedModel].brickRed; + + + [self performSelector:@selector(threeSecondDelay) withObject:self afterDelay:3.0]; + +} + + +- (void)threeSecondDelay { + CustomModalViewController *modalVC = [self.storyboard instantiateViewControllerWithIdentifier:@"customModal"]; + + modalVC.transitioningDelegate = self; + + modalVC.modalPresentationStyle = UIModalPresentationCustom; + + [self presentViewController:modalVC animated:YES completion:nil]; + +} + + + +//- (IBAction)didClickEnter:(id)sender { +// CustomModalViewController *modalVC = [self.storyboard instantiateViewControllerWithIdentifier:@"customModal"]; +// +// +// modalVC.transitioningDelegate = self; +// +// modalVC.modalPresentationStyle = UIModalPresentationCustom; +// +// [self presentViewController:modalVC animated:YES completion:nil]; +// // LoginViewController *lvc = [self.storyboard instantiateViewControllerWithIdentifier:@"loginVC"]; // lvc.transitioningDelegate = self; // lvc.modalPresentationStyle = UIModalPresentationCustom; @@ -50,15 +76,15 @@ - (IBAction)didClickEnter:(id)sender { // [self presentViewController:logInViewController animated:YES completion:NULL]; // } -} +//} --(void)viewWillAppear:(BOOL)animated{ - [super viewWillAppear:animated]; - LoginViewController *lvc = [self.storyboard instantiateViewControllerWithIdentifier:@"loginVC"]; - lvc.transitioningDelegate = self; - lvc.modalPresentationStyle = UIModalPresentationCustom; - [self presentViewController:lvc animated:YES completion:nil]; -} +//-(void)viewWillAppear:(BOOL)animated{ +// [super viewWillAppear:animated]; +// LoginViewController *lvc = [self.storyboard instantiateViewControllerWithIdentifier:@"loginVC"]; +// lvc.transitioningDelegate = self; +// lvc.modalPresentationStyle = UIModalPresentationCustom; +// [self presentViewController:lvc animated:YES completion:nil]; +//} diff --git a/BreakingBad/BreakingBad/MainPageVC.h b/BreakingBad/BreakingBad/MainPageVC.h index b2247c2..31c1fd6 100644 --- a/BreakingBad/BreakingBad/MainPageVC.h +++ b/BreakingBad/BreakingBad/MainPageVC.h @@ -8,6 +8,8 @@ #import #import "Entry.h" +//#import + @interface MainPageVC : UIViewController @property (nonatomic) Entry *entry; diff --git a/BreakingBad/BreakingBad/MainPageVC.m b/BreakingBad/BreakingBad/MainPageVC.m index 9acda3a..305a48a 100644 --- a/BreakingBad/BreakingBad/MainPageVC.m +++ b/BreakingBad/BreakingBad/MainPageVC.m @@ -177,6 +177,9 @@ - (IBAction)questionButtonTapped:(UIButton *)sender { UILabel *currentAnswerLabel = self.reply[sender.tag]; if (currentAnswerLabel.text) { qvc.answer = currentAnswerLabel.text; + + + } [self presentViewController:qvc animated:YES completion:nil]; diff --git a/BreakingBad/BreakingBad/QuestionDetailVC.h b/BreakingBad/BreakingBad/QuestionDetailVC.h index 1b62a5f..3e6306f 100644 --- a/BreakingBad/BreakingBad/QuestionDetailVC.h +++ b/BreakingBad/BreakingBad/QuestionDetailVC.h @@ -8,6 +8,8 @@ #import #import "ViewController.h" +#import +#import @class QuestionDetailVC; @@ -31,6 +33,8 @@ @property (weak, nonatomic) IBOutlet UIButton *doneButton; @property (strong, nonatomic) IBOutlet UIView *questionDetailView; --(void)addColorQuestionDetail; +-(void)addColorQuestionDetail; + +@property (strong, nonatomic) AVSpeechSynthesizer *synthesizer; @end diff --git a/BreakingBad/BreakingBad/QuestionDetailVC.m b/BreakingBad/BreakingBad/QuestionDetailVC.m index 1571bb9..4db9674 100644 --- a/BreakingBad/BreakingBad/QuestionDetailVC.m +++ b/BreakingBad/BreakingBad/QuestionDetailVC.m @@ -10,7 +10,7 @@ #import "ViewController.h" #import "SharedManager.h" -@interface QuestionDetailVC () +@interface QuestionDetailVC () @end @@ -25,9 +25,27 @@ - (void)viewDidLoad{ self.questionLabel.text = self.question; if (self.answer) { self.answerTextView.text = self.answer; + + + AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc] init]; + synthesizer.delegate = self; + + AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:self.question]; + utterance.pitchMultiplier = 1.25; // higher pitch + utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"fr-FR"]; + + [synthesizer speakUtterance:utterance]; } [self addColorQuestionDetail]; + + //READ QUESTION +// [self.questionLabel resignFirstResponder]; +// AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:self.questionLabel.text]; +// //[self.synthesizer speakUtterance:utterance]; +// utterance.rate = AVSpeechUtteranceMinimumSpeechRate*( 10.0); +// utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-au"]; +// [self.synthesizer speakUtterance:utterance]; } @@ -58,6 +76,7 @@ -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { - (IBAction)doneButtonTapped:(UIButton *)sender { [self.delegate finishedAnswering:self withAnswer:self.answerTextView.text]; [self dismissViewControllerAnimated:YES completion:nil]; + } From 7d0276f84dcac12d6579643d7f8a0924129b8406 Mon Sep 17 00:00:00 2001 From: Zoufishan Mehdi Date: Wed, 21 Oct 2015 23:42:50 -0400 Subject: [PATCH 42/44] quotes added to myHabitsTVC --- .../CustomVCTransitionViewController.m | 2 +- .../EntryLogsTableViewController.m | 4 + BreakingBad/BreakingBad/MyHabitsTVC.m | 144 ++++++++++++++++++ 3 files changed, 149 insertions(+), 1 deletion(-) diff --git a/BreakingBad/BreakingBad/CustomVCTransitionViewController.m b/BreakingBad/BreakingBad/CustomVCTransitionViewController.m index 5625ffb..076d506 100644 --- a/BreakingBad/BreakingBad/CustomVCTransitionViewController.m +++ b/BreakingBad/BreakingBad/CustomVCTransitionViewController.m @@ -24,7 +24,7 @@ -(void)viewDidLoad { self.view.backgroundColor = [SharedManager sharedModel].brickRed; - [self performSelector:@selector(threeSecondDelay) withObject:self afterDelay:3.0]; + [self performSelector:@selector(threeSecondDelay) withObject:self afterDelay:1.5]; } diff --git a/BreakingBad/BreakingBad/EntryLogsTableViewController.m b/BreakingBad/BreakingBad/EntryLogsTableViewController.m index b45dfef..614a07e 100644 --- a/BreakingBad/BreakingBad/EntryLogsTableViewController.m +++ b/BreakingBad/BreakingBad/EntryLogsTableViewController.m @@ -31,6 +31,7 @@ @interface EntryLogsTableViewController () @property (nonatomic) NSInteger index; @property (strong, nonatomic) IBOutlet UITableView *entryTableView; + @end @@ -50,6 +51,7 @@ - (void)viewDidLoad { } + #pragma mark- Add Color -(void)addColorEntryLog { self.entryTableView.backgroundColor = [SharedManager sharedModel].tropicalDream; @@ -144,4 +146,6 @@ -(NSString *)formattedDateStringForAPI:(NSDate *)date{ return dateStrings; } + + @end diff --git a/BreakingBad/BreakingBad/MyHabitsTVC.m b/BreakingBad/BreakingBad/MyHabitsTVC.m index 5e98095..1139485 100644 --- a/BreakingBad/BreakingBad/MyHabitsTVC.m +++ b/BreakingBad/BreakingBad/MyHabitsTVC.m @@ -19,6 +19,10 @@ @interface MyHabitsTVC () @property (strong, nonatomic) IBOutlet UITableView *myHabitsTableView; @property (weak, nonatomic) IBOutlet UIBarButtonItem *doneButton; +//animation properties +@property (nonatomic, assign) BOOL animationInProgress; +@property (nonatomic, assign) UIViewAnimationOptions animation1; + @end @@ -41,6 +45,146 @@ - (void)viewDidLoad { [self addColorMyHabits]; } +-(void)viewDidAppear:(BOOL)animated { + + // + NSArray *inspQuotesArray = @[ + @"Nurture your mind with great thoughts. To believe in the heroic makes heroes. - Benjami Disraeli", + @"The real opportunity for success lies within the person and not in the job. – Zig Ziglar135", + @"Look at the sparrows; they do not know what they will do in the next moment. Let us literally live from moment to moment. – Mahatma Gandhi", + @"Luck is a dividend of sweat. The more you sweat, the luckier you get. – Ray Kroc", + @"When I let go of what I am, I become what I might be. – Lao Tzu", + @"You may find the worst enemy or best friend in yourself. – English Proverb", + @"Whoever loves much, performs much, and can accomplish much, and what is done in love is done well. – Vincent Van Gogh", + @"Courage is the first of human qualities because it is the quality which guarantees all others. – Winston Churchill", + @"The great thing in this world is not so much where you stand, as in what direction you are moving. – Oliver Wendell Holmes", + @"Live each day as if your life had just begun. – Johann Wolfgang Von Goethe", + @"Every truth passes through three stages before it is recognized. In the first, it is ridiculed. In the second, it is opposed. In the third, it is regarded as self evident. – Arthur Schopenhauer", + @"Either you run the day, or the day runs you. – Jim Rohn", + @"The difference between a successful person and others is not lack of strength not a lack of knowledge but rather a lack of will. – Vince Lombardi", + @"If not us, who? If not now, when? – John F. Kennedy", + @"Don’t worry about failures, worry about the chances you miss when you don’t even try. – Jack Canfield" + + ]; + + + + + + + // “Though no one can go back and make a brand new start, anyone can start from now and make a brand new ending.” + // – Carl Bard + // “Life has two rules: #1 Never quit #2 Always remember rule # 1.” + // – Unknown + // “Some men see things as they are and say why – I dream things that never were and say why not.” + // – George Bernard Shaw + // “The only way of finding the limits of the possible is by going beyond them into the impossible.” + // – Arthur C. Clarke + // “I don’t know the key to success, but the key to failure is trying to please everybody.” + // – Bill Cosby + // Ralph Waldo Emerson + // Ralph Waldo Emerson (Photo credit: Wikimedia Commons) + // “Do not go where the path may lead, go instead where there is no path and leave a trail.” + // – Ralph Waldo Emerson + // “Many of life’s failures are experienced by people who did not realize how close they were to success when they gave up.” + // – Thomas Edison + // “Education costs money. But then so does ignorance.” + // – Sir Claus Moser + // “The journey of a thousand miles begins with one step.” + // – Lao Tzu + // “Every noble work is at first impossible.” + // – Thomas Carlyle + // “Do not let what you cannot do interfere with what you can do.” + // – John Wooden + // “Defeat is not bitter unless you swallow it.” + // – Joe Clark + // “Nobody ever wrote down a plan to be broke, fat, lazy, or stupid. Those things are what happen when you don’t have a plan.” + // – Larry Winget + // “Rule #1 of life. Do what makes YOU happy.” + // – Unknown + // “The best revenge is massive success.” + // – Frank Sinatra + // “It is not enough to aim, you must hit.” + // – Italian Proverb + // “Challenges are what make life interesting and overcoming them is what makes life meaningful.” + // – Joshua J. Marine + // “Every strike brings me closer to the next home run.” + // – Babe Ruth + // “Challenges are what make life interesting and overcoming them is what makes life meaningful.” + // – Joshua J. Marine + // “An obstacle is often a stepping stone.” + // – Prescott + // “I am not a product of my circumstances. I am a product of my decisions.” + // – Stephen Covey + // Martin Luther King Jr. + // Martin Luther King Jr. + // “Our lives begin to end the day we become silent about things that matter.” + // – Martin Luther King Jr. + // “Keep away from people who try to belittle your ambitions. Small people always do that, but the really great makes you feel that you, too, can become great.” + // – Mark Twain + // “Eighty percent of success is showing up.” + // – Woody Allen + // “I have never in my life learned anything from any man who agreed with me.” + // – Dudley Field Malone + // “I am thankful for all of those who said NO to me. Its because of them I’m doing it myself.” + // – Albert Einstein + // “We become what we think about.” + // – Earl Nightingale + // “The mind is everything. What you think you become.” + // – Buddha + // + // = + // + // + // ]; + + + + UIView *inspQuoteView = [[UIView alloc] init]; + inspQuoteView.frame = CGRectMake(23, 459, 332, 130); + inspQuoteView.backgroundColor = [SharedManager sharedModel].colesiumGrey; + + UILabel *quotesLabel = [[UILabel alloc] init]; + quotesLabel.frame = inspQuoteView.bounds; + quotesLabel.textColor = [SharedManager sharedModel].brownForest; + quotesLabel.frame = CGRectMake(20, 25, 310, 80); + [quotesLabel setLineBreakMode:NSLineBreakByWordWrapping]; + quotesLabel.numberOfLines = 0; + + //NSArray *quotesArray = nil; // self.quotesArray + if (inspQuotesArray.count > 0) { + quotesLabel.text = inspQuotesArray[arc4random() % inspQuotesArray.count]; + } + + [inspQuoteView addSubview:quotesLabel]; + [self.view addSubview:inspQuoteView]; + + + + //Animation + + [UIView animateKeyframesWithDuration:0.5 + delay:0.0 + options:self.animation1 + animations:^{ + inspQuoteView.frame = CGRectMake(inspQuoteView.frame.origin.x + 200, inspQuoteView.frame.origin.y, inspQuoteView.frame.size.width, inspQuoteView.frame.size.height); + } + completion:^(BOOL finished) { + [UIView animateKeyframesWithDuration:0.5 + delay:0.0 + options:self.animation1 + animations:^{ + inspQuoteView.frame = CGRectMake(inspQuoteView.frame.origin.x - 200, inspQuoteView.frame.origin.y, inspQuoteView.frame.size.width, inspQuoteView.frame.size.height); + } + completion:^(BOOL finished) { + self.animationInProgress = NO; + }]; + }]; +} + + + + -(void)addColorMyHabits { From 911fd244b42824a1fb7c581fea3b678f75735757 Mon Sep 17 00:00:00 2001 From: Mesfin Date: Thu, 22 Oct 2015 11:52:04 -0400 Subject: [PATCH 43/44] disabled speech in reareadOnly mode --- .../BreakingBad.xcodeproj/project.pbxproj | 12 - BreakingBad/BreakingBad/AppDelegate.m | 34 +-- .../BreakingBad/Base.lproj/Main.storyboard | 18 +- .../BreakingBad/CustomModalViewController.m | 1 - .../CustomVCTransitionViewController.m | 2 +- BreakingBad/BreakingBad/HabitList.h | 20 -- BreakingBad/BreakingBad/HabitList.m | 49 ---- BreakingBad/BreakingBad/LoginViewController.m | 1 - BreakingBad/BreakingBad/MainPageVC.m | 7 +- BreakingBad/BreakingBad/MyHabitsTVC.h | 1 + BreakingBad/BreakingBad/QuestionDetailVC.h | 3 +- BreakingBad/BreakingBad/QuestionDetailVC.m | 39 +-- BreakingBad/BreakingBad/SharedManager.h | 3 - BreakingBad/BreakingBad/SharedManager.m | 1 - BreakingBad/BreakingBad/ViewController.h | 16 -- BreakingBad/BreakingBad/ViewController.m | 225 ------------------ 16 files changed, 54 insertions(+), 378 deletions(-) delete mode 100644 BreakingBad/BreakingBad/HabitList.h delete mode 100644 BreakingBad/BreakingBad/HabitList.m delete mode 100644 BreakingBad/BreakingBad/ViewController.h delete mode 100644 BreakingBad/BreakingBad/ViewController.m diff --git a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj index d2ae866..781a863 100644 --- a/BreakingBad/BreakingBad.xcodeproj/project.pbxproj +++ b/BreakingBad/BreakingBad.xcodeproj/project.pbxproj @@ -20,7 +20,6 @@ 5F8750731BD6879800B14CA6 /* Bariol_Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 5F8750561BD6879800B14CA6 /* Bariol_Regular.otf */; settings = {ASSET_TAGS = (); }; }; 5F8FF9991BC9A9CD00855DFB /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F8FF9981BC9A9CD00855DFB /* main.m */; }; 5F8FF99C1BC9A9CD00855DFB /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F8FF99B1BC9A9CD00855DFB /* AppDelegate.m */; }; - 5F8FF99F1BC9A9CD00855DFB /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F8FF99E1BC9A9CD00855DFB /* ViewController.m */; }; 5F8FF9A21BC9A9CD00855DFB /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5F8FF9A01BC9A9CD00855DFB /* Main.storyboard */; }; 5F8FF9A51BC9A9CD00855DFB /* BreakingBad.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 5F8FF9A31BC9A9CD00855DFB /* BreakingBad.xcdatamodeld */; }; 5F8FF9A71BC9A9CD00855DFB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5F8FF9A61BC9A9CD00855DFB /* Assets.xcassets */; }; @@ -51,7 +50,6 @@ DC2DC1941BCAEB8D00A627E2 /* BBUser.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2DC1931BCAEB8D00A627E2 /* BBUser.m */; settings = {ASSET_TAGS = (); }; }; DC2FFC5D1BD2EF2700A876F8 /* EntryLogsTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2FFC5B1BD2EF2700A876F8 /* EntryLogsTableViewCell.m */; settings = {ASSET_TAGS = (); }; }; DC2FFC5E1BD2EF2700A876F8 /* EntryLogsTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = DC2FFC5C1BD2EF2700A876F8 /* EntryLogsTableViewCell.xib */; settings = {ASSET_TAGS = (); }; }; - DC51A76B1BCC4CD60044984B /* HabitList.m in Sources */ = {isa = PBXBuildFile; fileRef = DC51A76A1BCC4CD60044984B /* HabitList.m */; settings = {ASSET_TAGS = (); }; }; DCB588911BD5E65D00777FF9 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCB588901BD5E65D00777FF9 /* CoreLocation.framework */; }; DCBA27C21BCDE85800E61721 /* SharedManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DCBA27C11BCDE85800E61721 /* SharedManager.m */; settings = {ASSET_TAGS = (); }; }; DCBA27C61BCED16E00E61721 /* CustomContextTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = DCBA27C41BCED16E00E61721 /* CustomContextTableViewCell.m */; settings = {ASSET_TAGS = (); }; }; @@ -78,8 +76,6 @@ 5F8FF9981BC9A9CD00855DFB /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 5F8FF99A1BC9A9CD00855DFB /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 5F8FF99B1BC9A9CD00855DFB /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 5F8FF99D1BC9A9CD00855DFB /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; - 5F8FF99E1BC9A9CD00855DFB /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 5F8FF9A11BC9A9CD00855DFB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 5F8FF9A41BC9A9CD00855DFB /* BreakingBad.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = BreakingBad.xcdatamodel; sourceTree = ""; }; 5F8FF9A61BC9A9CD00855DFB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -132,8 +128,6 @@ DC2FFC5A1BD2EF2700A876F8 /* EntryLogsTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EntryLogsTableViewCell.h; sourceTree = ""; }; DC2FFC5B1BD2EF2700A876F8 /* EntryLogsTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EntryLogsTableViewCell.m; sourceTree = ""; }; DC2FFC5C1BD2EF2700A876F8 /* EntryLogsTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = EntryLogsTableViewCell.xib; sourceTree = ""; }; - DC51A7691BCC4CD60044984B /* HabitList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HabitList.h; sourceTree = ""; }; - DC51A76A1BCC4CD60044984B /* HabitList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HabitList.m; sourceTree = ""; }; DCB588901BD5E65D00777FF9 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; DCBA27C01BCDE85800E61721 /* SharedManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SharedManager.h; sourceTree = ""; }; DCBA27C11BCDE85800E61721 /* SharedManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SharedManager.m; sourceTree = ""; }; @@ -226,10 +220,6 @@ children = ( 5F8FF99A1BC9A9CD00855DFB /* AppDelegate.h */, 5F8FF99B1BC9A9CD00855DFB /* AppDelegate.m */, - DC51A7691BCC4CD60044984B /* HabitList.h */, - DC51A76A1BCC4CD60044984B /* HabitList.m */, - 5F8FF99D1BC9A9CD00855DFB /* ViewController.h */, - 5F8FF99E1BC9A9CD00855DFB /* ViewController.m */, 5F9B082D1BCC9ECC00460FF2 /* QuestionDetailVC.h */, 5F9B082E1BCC9ECC00460FF2 /* QuestionDetailVC.m */, DC22D49D1BCEE95A00D1E214 /* CheckProgressViewController.h */, @@ -474,7 +464,6 @@ DC2DC18B1BCAC08700A627E2 /* Goal.m in Sources */, 5FEAE26E1BCB125A00201A0E /* PresentingAnimationController.m in Sources */, 5FE7B03A1BD3EF3200C5E163 /* HabitInfoData.m in Sources */, - 5F8FF99F1BC9A9CD00855DFB /* ViewController.m in Sources */, 5F9B082F1BCC9ECD00460FF2 /* QuestionDetailVC.m in Sources */, DC22D49F1BCEE95A00D1E214 /* CheckProgressViewController.m in Sources */, DC2DC18E1BCAC0A700A627E2 /* Entry.m in Sources */, @@ -487,7 +476,6 @@ 5FEAE2711BCB126700201A0E /* DismissingAnimationController.m in Sources */, DC2DC1941BCAEB8D00A627E2 /* BBUser.m in Sources */, DC2FFC5D1BD2EF2700A876F8 /* EntryLogsTableViewCell.m in Sources */, - DC51A76B1BCC4CD60044984B /* HabitList.m in Sources */, 5F8FF9991BC9A9CD00855DFB /* main.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/BreakingBad/BreakingBad/AppDelegate.m b/BreakingBad/BreakingBad/AppDelegate.m index a37382b..75b9219 100644 --- a/BreakingBad/BreakingBad/AppDelegate.m +++ b/BreakingBad/BreakingBad/AppDelegate.m @@ -22,23 +22,23 @@ @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - - //Font - NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]]; - NSArray *fontNames; - NSInteger indFamily, indFont; - for (indFamily=0; indFamily<[familyNames count]; ++indFamily) - { - NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]); - fontNames = [[NSArray alloc] initWithArray: - [UIFont fontNamesForFamilyName: - [familyNames objectAtIndex:indFamily]]]; - for (indFont=0; indFont<[fontNames count]; ++indFont) - { - NSLog(@" Font name: %@", [fontNames objectAtIndex:indFont]); - } - } - +// +// //Font +// NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]]; +// NSArray *fontNames; +// NSInteger indFamily, indFont; +// for (indFamily=0; indFamily<[familyNames count]; ++indFamily) +// { +// NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]); +// fontNames = [[NSArray alloc] initWithArray: +// [UIFont fontNamesForFamilyName: +// [familyNames objectAtIndex:indFamily]]]; +// for (indFont=0; indFont<[fontNames count]; ++indFont) +// { +// NSLog(@" Font name: %@", [fontNames objectAtIndex:indFont]); +// } +// } +// [BBUser registerSubclass]; [Entry registerSubclass]; [Goal registerSubclass]; diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index 9ee52bb..1a10dfd 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -10,15 +10,6 @@ Avenir-Light Avenir-Light - - Bariol-Regular - Bariol-Regular - Bariol-Regular - Bariol-Regular - Bariol-Regular - Bariol-Regular - Bariol-Regular - Jaapokkisubtract-Regular Jaapokkisubtract-Regular @@ -37,6 +28,15 @@ Oranienbaum Oranienbaum + + Bariol-Regular + Bariol-Regular + Bariol-Regular + Bariol-Regular + Bariol-Regular + Bariol-Regular + Bariol-Regular + diff --git a/BreakingBad/BreakingBad/CustomModalViewController.m b/BreakingBad/BreakingBad/CustomModalViewController.m index 14e6511..9455163 100644 --- a/BreakingBad/BreakingBad/CustomModalViewController.m +++ b/BreakingBad/BreakingBad/CustomModalViewController.m @@ -10,7 +10,6 @@ #import #import "MainPageVC.h" #import "LoginViewController.h" -#import "ViewController.h" #import "SharedManager.h" @implementation CustomModalViewController diff --git a/BreakingBad/BreakingBad/CustomVCTransitionViewController.m b/BreakingBad/BreakingBad/CustomVCTransitionViewController.m index 5625ffb..5bd37ca 100644 --- a/BreakingBad/BreakingBad/CustomVCTransitionViewController.m +++ b/BreakingBad/BreakingBad/CustomVCTransitionViewController.m @@ -24,7 +24,7 @@ -(void)viewDidLoad { self.view.backgroundColor = [SharedManager sharedModel].brickRed; - [self performSelector:@selector(threeSecondDelay) withObject:self afterDelay:3.0]; + [self performSelector:@selector(threeSecondDelay) withObject:self afterDelay:0.4]; } diff --git a/BreakingBad/BreakingBad/HabitList.h b/BreakingBad/BreakingBad/HabitList.h deleted file mode 100644 index 52a121e..0000000 --- a/BreakingBad/BreakingBad/HabitList.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// HabitList.h -// BreakingBad -// -// Created by Mesfin Bekele Mekonnen on 10/12/15. -// Copyright © 2015 Zoufishan Mehdi. All rights reserved. -// - -#import - -@interface HabitList : NSObject - -@property (nonatomic) NSMutableArray *habits; - -//+ (NSMutableArray *)listOfHabits; - - -- (NSMutableArray *)habitsList; - -@end diff --git a/BreakingBad/BreakingBad/HabitList.m b/BreakingBad/BreakingBad/HabitList.m deleted file mode 100644 index b13d8da..0000000 --- a/BreakingBad/BreakingBad/HabitList.m +++ /dev/null @@ -1,49 +0,0 @@ -// -// HabitList.m -// BreakingBad -// -// Created by Mesfin Bekele Mekonnen on 10/12/15. -// Copyright © 2015 Zoufishan Mehdi. All rights reserved. -// - -#import "HabitList.h" -#import "ViewController.h" -#import "QuestionDetailVC.h" - -@implementation HabitList - - -//+ (NSMutableArray *)listOfHabits{ -// -// -// NSArray *habitList = @[@"Smoking", -// @"Biting your nails", -// @"Cocaine Addiction", -// @"Biting your lips", -// @"Eating unhealthy", -// @"Excessive Drinking", -// @"Facebook"]; -// -// -// -//// [ addObjectsFromArray:habitList]; -// -// -// return nil; -//} - -- (NSMutableArray *)habitsList{ - NSArray *habitList = @[@"Smoking", - @"Biting your nails", - @"Cocaine Addiction", - @"Biting your lips", - @"Biting you nails", - @"Eating unhealthy", - @"Excessive Drinking", - @"Facebook"]; - - self.habits = [[NSMutableArray alloc] initWithArray:habitList]; - return self.habits; -} - -@end diff --git a/BreakingBad/BreakingBad/LoginViewController.m b/BreakingBad/BreakingBad/LoginViewController.m index 7701e0f..671dc8c 100644 --- a/BreakingBad/BreakingBad/LoginViewController.m +++ b/BreakingBad/BreakingBad/LoginViewController.m @@ -8,7 +8,6 @@ #import "LoginViewController.h" #import "MainPageVC.h" -#import "ViewController.h" #import "SignUpViewController.h" #import "SharedManager.h" diff --git a/BreakingBad/BreakingBad/MainPageVC.m b/BreakingBad/BreakingBad/MainPageVC.m index 305a48a..5bbdb7a 100644 --- a/BreakingBad/BreakingBad/MainPageVC.m +++ b/BreakingBad/BreakingBad/MainPageVC.m @@ -177,9 +177,10 @@ - (IBAction)questionButtonTapped:(UIButton *)sender { UILabel *currentAnswerLabel = self.reply[sender.tag]; if (currentAnswerLabel.text) { qvc.answer = currentAnswerLabel.text; - - - + } + if(self.readOnly) + { + [qvc setReadOnly:YES]; } [self presentViewController:qvc animated:YES completion:nil]; diff --git a/BreakingBad/BreakingBad/MyHabitsTVC.h b/BreakingBad/BreakingBad/MyHabitsTVC.h index a5cc7f8..57a26e0 100644 --- a/BreakingBad/BreakingBad/MyHabitsTVC.h +++ b/BreakingBad/BreakingBad/MyHabitsTVC.h @@ -14,6 +14,7 @@ @property (nonatomic) NSArray *habitsArray; + -(void)addColorMyHabits; @end diff --git a/BreakingBad/BreakingBad/QuestionDetailVC.h b/BreakingBad/BreakingBad/QuestionDetailVC.h index 3e6306f..1ab6ab7 100644 --- a/BreakingBad/BreakingBad/QuestionDetailVC.h +++ b/BreakingBad/BreakingBad/QuestionDetailVC.h @@ -7,7 +7,6 @@ // #import -#import "ViewController.h" #import #import @@ -25,6 +24,8 @@ @property (nonatomic, retain) NSString *data; @property (nonatomic, weak) id delegate; @property (nonatomic) NSInteger tag; +@property (nonatomic) BOOL readOnly; + ////properties to add color to diff --git a/BreakingBad/BreakingBad/QuestionDetailVC.m b/BreakingBad/BreakingBad/QuestionDetailVC.m index 4db9674..55e58e8 100644 --- a/BreakingBad/BreakingBad/QuestionDetailVC.m +++ b/BreakingBad/BreakingBad/QuestionDetailVC.m @@ -7,7 +7,6 @@ // #import "QuestionDetailVC.h" -#import "ViewController.h" #import "SharedManager.h" @interface QuestionDetailVC () @@ -26,27 +25,29 @@ - (void)viewDidLoad{ if (self.answer) { self.answerTextView.text = self.answer; - - AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc] init]; - synthesizer.delegate = self; - - AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:self.question]; - utterance.pitchMultiplier = 1.25; // higher pitch - utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"fr-FR"]; - - [synthesizer speakUtterance:utterance]; + if(!self.readOnly) + { + AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc] init]; + synthesizer.delegate = self; + + AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:self.question]; + utterance.pitchMultiplier = 1.25; // higher pitch + utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"fr-FR"]; + + [synthesizer speakUtterance:utterance]; + } } [self addColorQuestionDetail]; //READ QUESTION -// [self.questionLabel resignFirstResponder]; -// AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:self.questionLabel.text]; -// //[self.synthesizer speakUtterance:utterance]; -// utterance.rate = AVSpeechUtteranceMinimumSpeechRate*( 10.0); -// utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-au"]; -// [self.synthesizer speakUtterance:utterance]; - + // [self.questionLabel resignFirstResponder]; + // AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:self.questionLabel.text]; + // //[self.synthesizer speakUtterance:utterance]; + // utterance.rate = AVSpeechUtteranceMinimumSpeechRate*( 10.0); + // utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-au"]; + // [self.synthesizer speakUtterance:utterance]; + } @@ -54,7 +55,7 @@ -(void)addColorQuestionDetail { self.questionDetailView.backgroundColor = [SharedManager sharedModel].colesiumGrey; self.questionLabel.textColor = [SharedManager sharedModel].brickRed; - + self.answerTextView.backgroundColor = [SharedManager sharedModel].blueSky; self.doneButton.layer.borderWidth = 3.5; @@ -76,7 +77,7 @@ -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { - (IBAction)doneButtonTapped:(UIButton *)sender { [self.delegate finishedAnswering:self withAnswer:self.answerTextView.text]; [self dismissViewControllerAnimated:YES completion:nil]; - + } diff --git a/BreakingBad/BreakingBad/SharedManager.h b/BreakingBad/BreakingBad/SharedManager.h index bec84da..80442c6 100644 --- a/BreakingBad/BreakingBad/SharedManager.h +++ b/BreakingBad/BreakingBad/SharedManager.h @@ -6,14 +6,11 @@ // Copyright © 2015 Zoufishan Mehdi. All rights reserved. // #import -#import "HabitList.h" -#import "ViewController.h" #import "BBUser.h" #import "Habit.h" @interface SharedManager : NSObject -@property (nonatomic) HabitList *habitListData; @property (nonatomic) NSMutableArray *habitArray; @property (nonatomic) NSInteger selectedRow; diff --git a/BreakingBad/BreakingBad/SharedManager.m b/BreakingBad/BreakingBad/SharedManager.m index 381c79d..ce82bc8 100644 --- a/BreakingBad/BreakingBad/SharedManager.m +++ b/BreakingBad/BreakingBad/SharedManager.m @@ -40,7 +40,6 @@ + (SharedManager *)sharedModel { -(void)initializeData{ - self.habitListData = [[HabitList alloc] init]; self.habitArray = @[@"Smoking", @"Biting your nails", diff --git a/BreakingBad/BreakingBad/ViewController.h b/BreakingBad/BreakingBad/ViewController.h deleted file mode 100644 index 25762af..0000000 --- a/BreakingBad/BreakingBad/ViewController.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// ViewController.h -// BreakingBad -// -// Created by Zoufishan Mehdi on 10/10/15. -// Copyright © 2015 Zoufishan Mehdi. All rights reserved. -// - -#import - -@interface ViewController : UIViewController - - - -@end - diff --git a/BreakingBad/BreakingBad/ViewController.m b/BreakingBad/BreakingBad/ViewController.m deleted file mode 100644 index 2c560dc..0000000 --- a/BreakingBad/BreakingBad/ViewController.m +++ /dev/null @@ -1,225 +0,0 @@ -// -// ViewController.m -// BreakingBad -// -// Created by Zoufishan Mehdi on 10/10/15. -// Copyright © 2015 Zoufishan Mehdi. All rights reserved. -// - -#import "ViewController.h" -#import -#import "BBUser.h" -#import "Habit.h" -#import "Goal.h" -#import "Entry.h" -#import "Step.h" -#import "HabitList.h" -#import "QuestionDetailVC.h" -#import "SharedManager.h" -#import "CustomVCTransitionViewController.h" - - - -@interface ViewController () -@property (weak, nonatomic) IBOutlet UIPickerView *habitsPickerView; -@property (weak, nonatomic) IBOutlet UITextField *createNewHabit; - - -@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *question; -@property (strong, nonatomic) IBOutletCollection(UILabel) NSArray *answer; - -@property (nonatomic) NSMutableArray *habitsArray; - -@property (nonatomic) BBUser *user; -@property (nonatomic) Entry *entry; -@property (nonatomic) Habit *habit; - - - -@end - -@implementation ViewController - -- (IBAction)saveButtonTapped:(UIBarButtonItem *)sender { - - //[self.user saveInBackground]; - - [SharedManager sharedModel].currentUser = self.user; - - CustomVCTransitionViewController *customVC = [self.storyboard instantiateViewControllerWithIdentifier:@"customVC"]; - - [self presentViewController:customVC animated:YES completion:nil]; - -} - - -- (IBAction)questionButtonTapped:(UIButton *)sender { - QuestionDetailVC *qvc = (QuestionDetailVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"showQDetailSegue"]; - qvc.question = sender.titleLabel.text; - qvc.delegate = self; - qvc.tag = sender.tag; - - [self presentViewController:qvc animated:YES completion:nil]; -} - - -- (IBAction)habitDoneButtonTapped:(UIButton *)sender { - [self.habitsArray addObject:self.createNewHabit.text]; - [self.habitsPickerView reloadAllComponents]; - - self.habit = [Habit new]; - self.habit.name = self.createNewHabit.text; - - if([self.user objectForKey:@"habits"]==nil) - { - self.user.habits = [NSMutableArray new]; - [self.user.habits addObject:self.habit]; - }else{ - [self.user.habits addObject:self.habit]; - } - -} - -- (void)finishedAnswering:(QuestionDetailVC *)qvc withAnswer:(NSString *)answer { - if(![SharedManager sharedModel].answersDictionary) - { - [SharedManager sharedModel].answersDictionary = [NSMutableDictionary new]; - } - for(int i=0; i < self.question.count; i++) - { - UIButton *currentButton = (UIButton *)self.question[i]; - if(qvc.tag == currentButton.tag) - { - UILabel *currentAnswerLabel = (UILabel *)self.answer[i]; - - currentAnswerLabel.text = answer; - - NSString *tagString = [NSString stringWithFormat:@"%ld",(long)qvc.tag]; - - [[SharedManager sharedModel].answersDictionary setObject:answer forKey:tagString]; - - self.entry = [Entry new]; - self.entry.entryLog = answer; - if([self.habit objectForKey:@"entries"] == nil) - { - self.habit.entries = [NSMutableArray new]; - [self.habit.entries addObject:self.entry]; - } - else - { - [self.habit.entries addObject:self.entry]; - } - } - } -} - -- (void)viewDidLoad { - [super viewDidLoad]; - self.habitsPickerView.delegate = self; - self.habitsPickerView.dataSource = self; - self.habitsArray = [NSMutableArray new]; - HabitList *hl = [HabitList new]; - self.habitsArray = hl.habitsList; - - - self.user = (BBUser *)[PFUser object]; - - // user.email = @"ab1c@gmail.com"; - // user.password = @"mesfinnotcool"; - // user.username = @"nc3j"; - // - // - // Habit *habit = [Habit new]; - // habit.name = @"Smoking"; - // - // Entry *entry = [Entry new]; - // entry.entryLog = @"Bitting nails"; - // - // - // Step *step1 = [Step new]; - // step1.stepDescription = @"1. No pack for a whole day"; - // step1.completed = 1; - // - // Step *step2 = [Step new]; - // step2.stepDescription = @"1. No pack for a whole week"; - // step2.completed = 0; - // - // Goal *goal = [Goal new]; - // goal.name = @"Quit Smoking"; - // goal.steps = [NSMutableArray new]; - // - // [goal.steps addObject:step1]; - // [goal.steps addObject:step2]; - // - // - // habit.entries = [NSMutableArray new]; - // habit.goals = [NSMutableArray new]; - // habit.name = @"Zouf says we need to talk, ...whatever"; - // - // [habit.entries addObject:entry]; - // [habit.goals addObject:goal]; - // - // - // if([user objectForKey:@"habits"]==nil){ - // user.habits = [NSMutableArray new]; - // [user.habits addObject:habit]; - // } - // - // [user signUpInBackground]; - // [user saveInBackground]; - // - // - // PFQuery *query = [PFQuery queryWithClassName:@"_User"]; - // [query findObjectsInBackgroundWithBlock:^(NSArray * _Nullable objects, NSError * _Nullable error) { - // ; - // NSLog(@"%@",objects); - // }]; - // - // BBUser *currentUser = (BBUser *)[PFUser currentUser]; - // [currentUser objectForKey:@"habits"]; - // [currentUser fetchIfNeeded]; - // NSLog(@"%@",currentUser.habits); - -} - - - -#pragma mark -#pragma UIPickerView DataSource Methods - --(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ - return 1; -} - -- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ - - return self.habitsArray.count; -} - -- (nullable NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ - - return self.habitsArray[row]; -} - -- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ - [SharedManager sharedModel].selectedRow = row; - - NSString *habitString = self.habitsArray[row]; - self.habit = [Habit new]; - self.habit.name = habitString; - - if([self.user objectForKey:@"habits"]==nil) - { - self.user.habits = [NSMutableArray new]; - [self.user.habits addObject:self.habit]; - }else{ - [self.user.habits addObject:self.habit]; - } - -} - - - - - -@end From c6cda62dd1a1ed875db9b3b3e2265399d7dc220b Mon Sep 17 00:00:00 2001 From: Zoufishan Mehdi Date: Thu, 22 Oct 2015 14:49:01 -0400 Subject: [PATCH 44/44] final changes ie fixing custom animation --- .../BreakingBad/Base.lproj/Main.storyboard | 68 ++++++----- .../CustomVCTransitionViewController.m | 4 +- BreakingBad/BreakingBad/MainPageVC.m | 44 ++++++- BreakingBad/BreakingBad/MyHabitsTVC.h | 1 + BreakingBad/BreakingBad/MyHabitsTVC.m | 109 ++++++------------ .../PresentingAnimationController.m | 15 +-- BreakingBad/BreakingBad/QuestionDetailVC.m | 1 + 7 files changed, 129 insertions(+), 113 deletions(-) diff --git a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard index 9ee52bb..5e24bc5 100644 --- a/BreakingBad/BreakingBad/Base.lproj/Main.storyboard +++ b/BreakingBad/BreakingBad/Base.lproj/Main.storyboard @@ -71,6 +71,7 @@ + @@ -80,6 +81,7 @@ + @@ -110,6 +112,7 @@ + @@ -569,6 +572,7 @@ + @@ -784,11 +788,12 @@ @@ -832,11 +837,12 @@ @@ -874,11 +880,12 @@ @@ -922,7 +929,7 @@ - + @@ -958,27 +965,29 @@ - + + @@ -986,10 +995,10 @@ - + - + @@ -998,6 +1007,7 @@ + @@ -1014,11 +1024,12 @@ @@ -1146,12 +1157,12 @@ -
BbKn<#njx-V*5ldGh#`a%IpV5Y&Ni0@+15>ds2#D`wuTyZKQ&7*B0xVtiUw?D{O% z4hyv_ms)GlX}twKA&Kt2N$(mi>_2$2J*|6|2sOq%cb7J><9K+=NFEsIJ=QHEG1}?U zlj&>?s>TIrB|~fI(Vj{sNu!yVwV|uW8o;-TlIGuO4w=tT4xI?LlFfEBf=rMWs|!jU zg=KBL11TOTM+hb}@!HH(mttVj5rgiRLQ27+??V9fW}6=5!QoLJLU~$n0r%Ncp&KfK zyrJ^{Z>PZTsc88TBT)oRjLhXCx+OWX8l~)b8G0 zU)P3;(>1AC<~;H5t#9tFsVKC$g+fOOmhn?`xh=4v@ ziJ%YPm)852nv(Jwp{&G#stlLanG3q9rr!7a>yMm0SHE=5T+@;%B56@c!{Vkt{Y>jL zGK?r%&s_N;?jMo@HK%fQbcG8kW|xq@2u`9JyhEP5(Ew)1aVR4cUgUpNU=JC>=#Iez#h{@C#a~pG$yH^(k}|oRO!SqLK~|-u2G6Fc z-PURtte^2NXf)njz>ZItGd?-Z?n)Kx`GvS?NViQbWmeZFQC1<#W>wHpq$FCA7G*Yj z#IEwI-TDt>j!e36uy;T>YWuWX@2PD*hOS@AS)%V86T4uc82I)W*K5=DlU7<53!9k0 za~>nrw2SBt{_tpr5M~^}+ zIntx%NY5cXYKBaY8cFF<$LPkfq)-)uFsoB}7 ziTc%zi3f58sEk4fXE+aG2hgQJm$pz@;LI);T&WRNiwvoFnu(aFf<;WXd1g^Qo*9~^ zNQV@JKr=K0C6l1zc+b%Juf|-NDF!A>H-eB^by+Q4X0lsY0f!WK~#brP_wXc3FS5|?{c~p=P zd~-asn9F#WLUe%Jthf-77bSG_6c;G+qJ-|UirR2qhH#(^7Pkq#X$MiQ+b4;4p$XiG zCIC!-$@6h$OG}E1k=YV>?9erWa$u&3Oj8$?ZnJNbM?H%*KXd414F zHujMv*e*+_DV^-a(hI zYRVkNc88!nGRH`@$z$G&I*y;6A>A5$tORy8s*SOZ7c1l$qClm~Nb>N6zDKZQNzI2I zBY}&At)(Szlo|lD>E%><6fAF{ghtT4nh?7}Ko9P0lLEfH;^}Wk8*)%Lpdh-zI2$lw zUJop7LQQow3U1O_2snOq;y~c(@4-TQAQ*B{yF4DhVU`lDZBA!7B52_zgLf0KzT1sH z%o$CnlE$bh+)&~`1o6#0L}ACL%{d1cZ~JmT=;<5?9`c|Es21TH58C?NI3wUKOYaeR LHKuJP{;lv|h2xGR literal 0 HcmV?d00001 diff --git a/BreakingBad/BreakingBad/Bariol_Regular_Italic.otf b/BreakingBad/BreakingBad/Bariol_Regular_Italic.otf new file mode 100644 index 0000000000000000000000000000000000000000..ec621bcf05e05a9a728f5a1a0d2c90bf17881991 GIT binary patch literal 82392 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 + + + + @@ -96,6 +100,9 @@ + + + @@ -559,6 +566,8 @@ + + @@ -1069,9 +1078,12 @@ - + + + + @@ -1084,6 +1096,24 @@ + + + + + + + + + + + + + + + + + + @@ -1120,6 +1150,10 @@ + + + + @@ -1164,6 +1198,9 @@ + + + @@ -1267,7 +1304,7 @@ - + diff --git a/BreakingBad/BreakingBad/EntryLogsTableViewController.h b/BreakingBad/BreakingBad/EntryLogsTableViewController.h index 0aeb9b6..23fadb4 100644 --- a/BreakingBad/BreakingBad/EntryLogsTableViewController.h +++ b/BreakingBad/BreakingBad/EntryLogsTableViewController.h @@ -13,4 +13,6 @@ @property (nonatomic) Habit *habit; +-(void)addColorEntryLog; + @end diff --git a/BreakingBad/BreakingBad/EntryLogsTableViewController.m b/BreakingBad/BreakingBad/EntryLogsTableViewController.m index 4ab714d..42ac0d9 100644 --- a/BreakingBad/BreakingBad/EntryLogsTableViewController.m +++ b/BreakingBad/BreakingBad/EntryLogsTableViewController.m @@ -12,15 +12,25 @@ #import "MainPageVC.h" #import "EntryLogsTableViewCell.h" #import +#import "SharedManager.h" + +//@dynamic tableView; @interface EntryLogsTableViewController () @property (nonatomic) NSArray *data; +////properties to add color to +@property (strong, nonatomic) IBOutlet UITableView *entryTableView; + + @end + @implementation EntryLogsTableViewController +@dynamic entryTableView; + - (void)viewDidLoad { [super viewDidLoad]; self.navigationItem.title = @"My Entries"; @@ -29,9 +39,16 @@ - (void)viewDidLoad { [self.tableView registerNib:nib forCellReuseIdentifier:@"entryLogCellID"]; [self fetchWeatherData]; - + [self addColorEntryLog]; } + +-(void)addColorEntryLog { + self.entryTableView.backgroundColor = [SharedManager sharedModel].tropicalDream; +} + + + -(NSString *)stringFromTimeInterval:(NSTimeInterval)time{ NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:time]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; diff --git a/BreakingBad/BreakingBad/HabitInfoTVC.h b/BreakingBad/BreakingBad/HabitInfoTVC.h index 45d29a0..5efa006 100644 --- a/BreakingBad/BreakingBad/HabitInfoTVC.h +++ b/BreakingBad/BreakingBad/HabitInfoTVC.h @@ -12,4 +12,6 @@ @property (nonatomic) NSArray *habitsArray; +-(void)addColorHabitInfo; + @end diff --git a/BreakingBad/BreakingBad/HabitInfoTVC.m b/BreakingBad/BreakingBad/HabitInfoTVC.m index bc72f03..903e3ee 100644 --- a/BreakingBad/BreakingBad/HabitInfoTVC.m +++ b/BreakingBad/BreakingBad/HabitInfoTVC.m @@ -15,9 +15,12 @@ #import "EntryLogsTableViewController.h" #import #import "HabitNewsTVC.h" +#import "SharedManager.h" @interface HabitInfoTVC () +@property (strong, nonatomic) IBOutlet UITableView *habitInfoTableView; +@property (weak, nonatomic) IBOutlet UIBarButtonItem *doneButton; @end @@ -26,6 +29,12 @@ @implementation HabitInfoTVC - (void)viewDidLoad { [super viewDidLoad]; + [self addColorHabitInfo]; +} + + +-(void)addColorHabitInfo { + self.habitInfoTableView.backgroundColor = [SharedManager sharedModel].icyNight; } @@ -45,6 +54,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N Habit *habit = self.habitsArray[indexPath.row]; cell.textLabel.text = habit.name; + cell.backgroundColor = [SharedManager sharedModel].icyNight; return cell; diff --git a/BreakingBad/BreakingBad/HabitNewsTVC.h b/BreakingBad/BreakingBad/HabitNewsTVC.h index 47cc177..b8f5ccb 100644 --- a/BreakingBad/BreakingBad/HabitNewsTVC.h +++ b/BreakingBad/BreakingBad/HabitNewsTVC.h @@ -13,7 +13,9 @@ @property (nonatomic) HabitInfoData *data; +//@property (nonatomic) NSString *habitDataPicked; @property (nonatomic) NSMutableArray *searchResults; +-(void)addColorHabitNews; @end diff --git a/BreakingBad/BreakingBad/HabitNewsTVC.m b/BreakingBad/BreakingBad/HabitNewsTVC.m index 16365be..cbf8b60 100644 --- a/BreakingBad/BreakingBad/HabitNewsTVC.m +++ b/BreakingBad/BreakingBad/HabitNewsTVC.m @@ -13,10 +13,12 @@ #import "HabitInfoData.h" #import "HabitsNewsTableViewCell.h" #import "Habit.h" +#import "SharedManager.h" @interface HabitNewsTVC () +@property (strong, nonatomic) IBOutlet UITableView *habitNewsTableView; @end @@ -30,24 +32,23 @@ - (void)viewDidLoad { UINib *nib = [UINib nibWithNibName:@"HabitsNewsTableViewCell" bundle:nil]; [self.tableView registerNib:nib forCellReuseIdentifier:@"HabitsNewsCellID"]; - [self fetchHabitInfo]; + [self fetchHabitInfo]; + + [self addColorHabitNews]; +} + + +-(void)addColorHabitNews { + self.habitNewsTableView.backgroundColor = [SharedManager sharedModel].colesiumGrey; } + #pragma mark- NYTimes API Request -//- (void)fetchHabitInfoData:(NSString *)searchTerm -// callbackBlock:(void(^)())block { + - (void)fetchHabitInfo{ - - // NSString *urlString = [NSString stringWithFormat:@"https://api.nytimes.com/svc/search/v2/articlesearch.json?fq=smoking&api-key=4aaf719230b21874acd05c657c680643:18:73243649", searchTerm]; - - - NSString *url = @"http://api.nytimes.com/svc/search/v2/articlesearch.json?fq=drinking&api-key=4aaf719230b21874acd05c657c680643:18:73243649" ; - - // NSString *encodedString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; - // - // NSURL *forecastURL = [NSURL URLWithString:encodedString]; - // NSString *myString = [forecastURL absoluteString]; + + NSString *url = @"http://api.nytimes.com/svc/search/v2/articlesearch.json?fq=drinking&api-key=4aaf719230b21874acd05c657c680643:18:73243649" ; AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] init]; @@ -58,7 +59,6 @@ - (void)fetchHabitInfo{ NSDictionary *results = responseObject[@"response"]; NSArray *docs = results[@"docs"]; - // reset my array self.searchResults = [[NSMutableArray alloc] init]; @@ -74,7 +74,7 @@ - (void)fetchHabitInfo{ [self.tableView reloadData]; - NSLog(@"%@", results); + NSLog(@"%@", results); } failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) { NSLog(@"Error: %@", error.localizedDescription); @@ -103,7 +103,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N cell.newsHeadlineLabel.text = data.nyHeadline; cell.newsSnippetTextView.text = data.nySnippet; - + cell.backgroundColor = [SharedManager sharedModel].colesiumGrey; return cell; } diff --git a/BreakingBad/BreakingBad/Info.plist b/BreakingBad/BreakingBad/Info.plist index db26bc0..59257a5 100644 --- a/BreakingBad/BreakingBad/Info.plist +++ b/BreakingBad/BreakingBad/Info.plist @@ -2,6 +2,24 @@ + UIAppFonts + + + + Item 0 + Jaapokkisubtract-Regular.otf + Item 1 + Jaapokkienchance-Regular.otf + Item 2 + jaapokki-regular.ttf + Item 3 + Lobster_1.3.otf + Item 4 + bariol_regular-webfont.ttf + Item 5 + Bariol_Regular.otf + Item 6 + Oranienbaum.ttf NSAppTransportSecurity NSAllowsArbitraryLoads diff --git a/BreakingBad/BreakingBad/Jaapokki-Regular.otf b/BreakingBad/BreakingBad/Jaapokki-Regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..9ea75543635f38452402587ba03dcca2443ac869 GIT binary patch literal 33600 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 literal 0 HcmV?d00001 diff --git a/BreakingBad/BreakingBad/Jaapokkienchance-Regular.otf b/BreakingBad/BreakingBad/Jaapokkienchance-Regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..3710d7feb5820d9dc646ee2697c491c3d2e7238a GIT binary patch literal 33788 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%0D&+8OrskncrnrFO|$sq0oyH!Q!NMVf-N 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 J6OGz5?LX#x_-+6I literal 0 HcmV?d00001 diff --git a/BreakingBad/BreakingBad/Jaapokkisubtract-Regular.otf b/BreakingBad/BreakingBad/Jaapokkisubtract-Regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..0b8a20a8f3d1a28edaca6efc0d70fc9a29e989ab GIT binary patch literal 33620 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 Q=88sBM58I9(G*Sl4?ZBW1^@s6 literal 0 HcmV?d00001 diff --git a/BreakingBad/BreakingBad/Lobster_1.3.otf b/BreakingBad/BreakingBad/Lobster_1.3.otf new file mode 100755 index 0000000000000000000000000000000000000000..5e4228169730925b428af826fd5bd9f387ff1dd4 GIT binary patch literal 42564 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 k+R3T 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 @property (weak, nonatomic) IBOutlet UIPickerView *habitPickerView; -@property (weak, nonatomic) IBOutlet UIButton *doneButton; +//@property (weak, nonatomic) IBOutlet UIButton *doneButton; @property (strong, nonatomic) IBOutletCollection(UILabel) NSArray *reply; @property (nonatomic) YALContextMenuTableView *contextMenuTableView; @@ -42,13 +42,106 @@ @interface MainPageVC () @property (nonatomic) BBUser *user; @property (nonatomic) Habit *habit; +//@property (weak, nonatomic) IBOutlet UILabel *habitLabel; + + +////properties to add color to +@property (weak, nonatomic) IBOutlet UIView *habitView; +@property (weak, nonatomic) IBOutlet UIButton *doneButton; @property (weak, nonatomic) IBOutlet UILabel *habitLabel; +@property (weak, nonatomic) IBOutlet UILabel *habitLftLabel; +@property (weak, nonatomic) IBOutlet UIButton *menuIconButton; +@property (strong, nonatomic) IBOutletCollection(UIView) NSArray *oddViews; +@property (strong, nonatomic) IBOutletCollection(UIView) NSArray *evenViews; +@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *oddButtons; +@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *evenButtons; +@property (strong, nonatomic) IBOutletCollection(UILabel) NSArray *oddLabels; +@property (strong, nonatomic) IBOutletCollection(UILabel) NSArray *evenLabels; + @end @implementation MainPageVC -#pragma mark +#pragma mark- viewDidLoad + +- (void)viewDidLoad{ + [super viewDidLoad]; + self.habitPickerView.delegate = self; + [self answersFromPreviousScreen]; + [self initiateMenuOptions]; + [[self.navigationController navigationBar]setHidden:YES]; + + self.habitLabel.hidden = YES; + + [self addColorsMainPg]; + + // self.habitsArray = [NSMutableArray new]; + // HabitList *hl = [HabitList new]; + // self.habitsArray = hl.habitsList; + + //[self.habitPickerView selectRow:[SharedManager sharedModel].selectedRow inComponent:0 animated:YES]; + + // BBUser *currentUser = (BBUser *)[PFUser currentUser]; + // [currentUser objectForKey:@"habits"]; + // [currentUser fetchIfNeededInBackgroundWithBlock:^(PFObject * _Nullable object, NSError * _Nullable error) { + // NSLog(@"%@",object); + // }]; + // PFQuery *query = [PFUser query]; + // + // [query whereKey:@"username" equalTo:[currentUser username]]; + // + // [query getFirstObjectInBackgroundWithBlock:^(PFObject * _Nullable object, NSError * _Nullable error) { + // NSLog(@"Object: %@", object); + // NSLog(@"Habits: %@", [object objectForKey:@"habtis"]); + // }]; + + + __weak typeof(self) weakSelf = self; + PFQuery *query = [PFQuery queryWithClassName:@"Habit"]; + [query includeKey:@"entries"]; + [query findObjectsInBackgroundWithBlock:^(NSArray * _Nullable objects, NSError * _Nullable error) { + weakSelf.habitsArray = objects; + [weakSelf.habitPickerView reloadAllComponents]; + }]; +} + + + +#pragma mark- Add colors + +-(void)addColorsMainPg { + + self.habitView.backgroundColor = [SharedManager sharedModel].icyNight; + + for (UIView *aquaView in self.oddViews) + { + aquaView.backgroundColor = [SharedManager sharedModel].icyNight; + } + + for (UIView *aquaView in self.evenViews) + { + aquaView.backgroundColor = [SharedManager sharedModel].blueSky; + } + +} + +//self.headerBackgroundView.backgroundColor = [PresetTimerData sharedModel].ghostGrey; +//self.lapButton.layer.borderWidth = 2.5; +//self.lapButton.layer.borderColor = [PresetTimerData sharedModel].glacierBlue.CGColor; +//self.lapButton.backgroundColor = [PresetTimerData sharedModel].glacierBlue; +//self.lapButton.layer.cornerRadius = 25; +//self.lapButton.tintColor = [PresetTimerData sharedModel].burntOrange; +//self.timeLabel.textColor = [PresetTimerData sharedModel].eggplant; +//self.timeLabel.layer.borderWidth = 15; +//self.timeLabel.layer.borderColor = [PresetTimerData sharedModel].steelBlueGrey.CGColor; +//self.timeLabel.layer.cornerRadius =10; +// +//self.lapTimeLabel.textColor = [PresetTimerData sharedModel].burntOrange; +//self.lapTableView.backgroundColor = [PresetTimerData sharedModel].ghostGrey; + + + #pragma Question Buttons Method - (IBAction)questionButtonTapped:(UIButton *)sender { @@ -280,7 +373,7 @@ - (UITableViewCell *)tableView:(YALContextMenuTableView *)tableView cellForRowAt cell.backgroundColor = [UIColor clearColor]; cell.menuTitleLabel.text = [self.menuTitles objectAtIndex:indexPath.row]; cell.menuTitleImage.image = [self.menuIcons objectAtIndex:indexPath.row]; - cell.viewHoldingImageView.backgroundColor = [UIColor whiteColor]; + cell.viewHoldingImageView.backgroundColor = [SharedManager sharedModel].brickRed; } return cell; @@ -318,44 +411,7 @@ -(void)viewWillAppear:(BOOL)animated{ } } -- (void)viewDidLoad{ - [super viewDidLoad]; - self.habitPickerView.delegate = self; - [self answersFromPreviousScreen]; - [self initiateMenuOptions]; - [[self.navigationController navigationBar]setHidden:YES]; - - self.habitLabel.hidden = YES; -// self.habitsArray = [NSMutableArray new]; -// HabitList *hl = [HabitList new]; -// self.habitsArray = hl.habitsList; - - //[self.habitPickerView selectRow:[SharedManager sharedModel].selectedRow inComponent:0 animated:YES]; - -// BBUser *currentUser = (BBUser *)[PFUser currentUser]; -// [currentUser objectForKey:@"habits"]; -// [currentUser fetchIfNeededInBackgroundWithBlock:^(PFObject * _Nullable object, NSError * _Nullable error) { -// NSLog(@"%@",object); -// }]; -// PFQuery *query = [PFUser query]; -// -// [query whereKey:@"username" equalTo:[currentUser username]]; -// -// [query getFirstObjectInBackgroundWithBlock:^(PFObject * _Nullable object, NSError * _Nullable error) { -// NSLog(@"Object: %@", object); -// NSLog(@"Habits: %@", [object objectForKey:@"habtis"]); -// }]; - - - __weak typeof(self) weakSelf = self; - PFQuery *query = [PFQuery queryWithClassName:@"Habit"]; - [query includeKey:@"entries"]; - [query findObjectsInBackgroundWithBlock:^(NSArray * _Nullable objects, NSError * _Nullable error) { - weakSelf.habitsArray = objects; - [weakSelf.habitPickerView reloadAllComponents]; - }]; -} #pragma mark #pragma UIPickerView DataSource Methods diff --git a/BreakingBad/BreakingBad/MyHabitsTVC.m b/BreakingBad/BreakingBad/MyHabitsTVC.m index f0c0b48..6d59c07 100644 --- a/BreakingBad/BreakingBad/MyHabitsTVC.m +++ b/BreakingBad/BreakingBad/MyHabitsTVC.m @@ -11,9 +11,15 @@ #import "EntryLogsTableViewController.h" #import #import +#import "SharedManager.h" @interface MyHabitsTVC () +////properties to add color to +@property (strong, nonatomic) IBOutlet UITableView *myHabitsTableView; +@property (weak, nonatomic) IBOutlet UIBarButtonItem *doneButton; + + @end @implementation MyHabitsTVC @@ -23,6 +29,7 @@ - (void)viewDidLoad { self.navigationItem.title = @"My Habits"; + self.tableView.backgroundColor = [SharedManager sharedModel].icyNight; // Uncomment the following line to preserve selection between presentations. // self.clearsSelectionOnViewWillAppear = NO; @@ -49,6 +56,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myHabitsCell" forIndexPath:indexPath]; Habit *habit = self.habitsArray[indexPath.row]; cell.textLabel.text = habit.name; + cell.backgroundColor = [SharedManager sharedModel].icyNight; return cell; } diff --git a/BreakingBad/BreakingBad/Oranienbaum.ttf b/BreakingBad/BreakingBad/Oranienbaum.ttf new file mode 100755 index 0000000000000000000000000000000000000000..f77d2a28108aea8498668d732ab9393f95e31eff GIT binary patch literal 155404 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 delegate; @property (nonatomic) NSInteger tag; + +////properties to add color to +@property (nonatomic) IBOutlet UILabel *questionLabel; +@property (weak, nonatomic) IBOutlet UITextView *answerTextView; +@property (weak, nonatomic) IBOutlet UIButton *doneButton; +@property (strong, nonatomic) IBOutlet UIView *questionDetailView; + +-(void)addColorQuestionDetail; + @end diff --git a/BreakingBad/BreakingBad/QuestionDetailVC.m b/BreakingBad/BreakingBad/QuestionDetailVC.m index a752767..6301489 100644 --- a/BreakingBad/BreakingBad/QuestionDetailVC.m +++ b/BreakingBad/BreakingBad/QuestionDetailVC.m @@ -8,6 +8,7 @@ #import "QuestionDetailVC.h" #import "ViewController.h" +#import "SharedManager.h" @interface QuestionDetailVC () @@ -25,9 +26,21 @@ - (void)viewDidLoad{ if (self.answer) { self.answerTextView.text = self.answer; } + + [self addColorQuestionDetail]; + +} + +-(void)addColorQuestionDetail { + + self.questionDetailView.backgroundColor = [SharedManager sharedModel].colesiumGrey; + self.answerTextView.backgroundColor = [SharedManager sharedModel].brickRed; + } + + -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.answerTextView resignFirstResponder]; diff --git a/BreakingBad/BreakingBad/SharedManager.h b/BreakingBad/BreakingBad/SharedManager.h index 5ecd109..7f089f0 100644 --- a/BreakingBad/BreakingBad/SharedManager.h +++ b/BreakingBad/BreakingBad/SharedManager.h @@ -21,9 +21,41 @@ @property (nonatomic) BBUser *currentUser; +//Pompeii Palette +@property (nonatomic) UIColor *icyNight; +@property (nonatomic) UIColor *blueSky; +@property (nonatomic) UIColor *tropicalDream; //darker blue/green +@property (nonatomic) UIColor *brownForest; +@property (nonatomic) UIColor *brickRed; +@property (nonatomic) UIColor *colesiumGrey; + +//Color Entrance Color Palette +//@property (nonatomic) UIColor *iceGrey; +//@property (nonatomic) UIColor *mintGreen; +//@property (nonatomic) UIColor *blueSteel; +//@property (nonatomic) UIColor *chocolateBrown; +//@property (nonatomic) UIColor *caramelToffee; +//@property (nonatomic) UIColor *pastelPink; + +//Scandinavian Hues Color Palette +//@property (nonatomic) UIColor *aquaBlue; +//@property (nonatomic) UIColor *eggplantPurple; +//@property (nonatomic) UIColor *maroon; +//@property (nonatomic) UIColor *sherbert; +//@property (nonatomic) UIColor *caramelToffee; +//@property (nonatomic) UIColor *vanillaSky; + + + (SharedManager *)sharedModel; --(void)initializeData; ++(UIColor *)makeColorWithRed:(NSInteger)red + green:(NSInteger)green + blue:(NSInteger)blue + alpha:(NSInteger)alpha; + +-(void)initializeData; + +-(void)initializeColorData; @end diff --git a/BreakingBad/BreakingBad/SharedManager.m b/BreakingBad/BreakingBad/SharedManager.m index 57c80f9..50e964c 100644 --- a/BreakingBad/BreakingBad/SharedManager.m +++ b/BreakingBad/BreakingBad/SharedManager.m @@ -16,6 +16,7 @@ + (SharedManager *)sharedModel { dispatch_once(&onceToken, ^{ sharedMyManager = [[self alloc] init]; [sharedMyManager initializeData]; + [sharedMyManager initializeColorData]; }); return sharedMyManager; @@ -51,4 +52,42 @@ -(void)initializeData{ } + +-(void)initializeColorData { + + //Pompeii Palette + self.icyNight = [SharedManager makeColorWithRed:235 green:240 blue:240 alpha:1.0]; + self.blueSky = [SharedManager makeColorWithRed:212 green:230 blue:230 alpha:1.0]; + self.tropicalDream = [SharedManager makeColorWithRed:174 green:200 blue:203 alpha:1.0]; + self.brownForest = [SharedManager makeColorWithRed:95 green:86 blue:81 alpha:1.0]; + self.brickRed = [SharedManager makeColorWithRed:178 green:126 blue:111 alpha:1.0]; + self.colesiumGrey = [SharedManager makeColorWithRed:208 green:203 blue:194 alpha:1.0]; + + //Color Entrance Color Palette +// self.iceGrey = [SharedManager makeColorWithRed:235 green:235 blue:235 alpha:1.0]; +// self.mintGreen = [SharedManager makeColorWithRed:205 green:221 blue:217 alpha:1.0]; +// self.blueSteel = [SharedManager makeColorWithRed:123 green:132 blue:152 alpha:1.0]; +// self.chocolateBrown = [SharedManager makeColorWithRed:87 green:69 blue:77 alpha:1.0]; +// self.caramelToffee = [SharedManager makeColorWithRed:199 green:180 blue:150 alpha:1.0]; +// self.pastelPink = [SharedManager makeColorWithRed:221 green:203 blue:208 alpha:1.0]; + + + //Scandinavia Hues Color Palette +// self.aquaBlue = [SharedManager makeColorWithRed:222 green:239 blue:232 alpha:1.0]; +// self.eggplantPurple = [SharedManager makeColorWithRed:80 green:58 blue:73 alpha:1.0]; +// self.maroon = [SharedManager makeColorWithRed:89 green:33 blue:48 alpha:1.0]; +// self.sherbert = [SharedManager makeColorWithRed:157 green:72 blue:81 alpha:1.0]; +// self.caramelToffee = [SharedManager makeColorWithRed:200 green:177 blue:130 alpha:1.0]; +// self.vanillaSky = [SharedManager makeColorWithRed:230 green:220 blue:188 alpha:1.0]; + +} + ++(UIColor *)makeColorWithRed:(NSInteger)red green:(NSInteger)green blue:(NSInteger)blue alpha:(NSInteger)alpha { + return [UIColor colorWithRed:red / 255.0 + green:green / 255.0 + blue:blue / 255.0 + alpha:alpha / 1.0]; +} + + @end diff --git a/BreakingBad/BreakingBad/ViewController.m b/BreakingBad/BreakingBad/ViewController.m index dc60ee5..2c560dc 100644 --- a/BreakingBad/BreakingBad/ViewController.m +++ b/BreakingBad/BreakingBad/ViewController.m @@ -34,6 +34,8 @@ @interface ViewController ())hovvohKdS; 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�&9DvwH+M|G98C+$g7 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 F=RfITnHc~8 literal 0 HcmV?d00001 diff --git a/BreakingBad/BreakingBad/bariol_regular_italic-webfont.ttf b/BreakingBad/BreakingBad/bariol_regular_italic-webfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..09440348ed46a59cee38b29e8e4cd9fb0d88e22b GIT binary patch literal 82416 zcmcG$2Uru?`aeD)%m5P&N{p+Cld-L3ckLC|jwlvvh!vG8pa@7W38X;)DS<#pLb3N= z*WMLT?7gmci@TO}-FhZ_@ZSGB2`cygzW4sV_j!K*$A`>mbIzGl-t)en_j8;!Yt}TP zC7~vS#B`tW<2#zJueJ~b@t7b?VH2iL3urXP{7w+%qX{Bx`-FhNv5D7i?;{BGnjq-8 z(*pYRkKNt<9wBfU2k!)jEf0xb?|DKC@%02jW<^DWgi}ZMLfpM8+;*!#91?EPHq{e@gRSKPjZa8(OeJPhaj^}}B)Nrvzn zzN2La#b2HsIu2<46+;l}AG`$Zpkl&gTf;t+9$xJ=w7z9W7U2nB5fodx{_K7!eTC_$zmS5PWgFE}7LC%7hfDELH)a84Z*Dk-ha6%Vh3!#^=ov@3rr?8LETj(R4Dx5D|B3vO< z3bn#~VTsTxTrb=$JSMy-yehmcd?tJ?d@KB2_?PgVE8*(qDt2w-Ds%1bI?#2P>v-2G zt}|Wdx-N2!aE)W+)lY&aBFb8>Gss^rQ2IK_Fbuz9Ta*y^#@H}ZMk@B%nL~M9S zVw9tY5z9XW1hmf!1P3Qu=68W*&362*c9lsMk6ps85 z3X5C5JjB_r3C+Th&BA^kYm53AoR}0H6CN?q*|~|1`X_#TNl0EE z6Ox=1*E}-Q@&3$aHP3X6S(4*7(D7Btj^99MwaLy$prhVo$8R94zQ|<$C$M?dF);Fp zWB6o88*oB4g~s?g6CxasX^!RN2+j$QhNYMooj5NtAtWUt-SO)XGQ5;X2uX_L7eMb1 z5nkMUj5uV@hp0pFe2nqZ=R=GaK_4RyIrJgw6h&_vQL_X`pPI+{UNwvJ{c0X{^sHHevv1839KCB6Pl}3;b;$fNO}izeX}g3twmqzD z*p|+qW9FQ}kE_!ee?JS(m}3&0LFd#v!*P)?70aAqer7+0nl<8BIF6h#&UZtck1>wc zLma_Obe)xfWC5K~K|9koO|-;8#=GjUS%($x3eOm(guM?X^?zjGWZ0nHY5 zVzclR$I{ODusi2}2xU0loA3Bd|JbK_AA_kMgL6IxlbbL5S&r)AT!NuaXx40kBR%os zTLB+~iOvo?eq$WvVjbbB&EAh~7M|)T6XHB4Vw+yzmDPke{@mm@OPq5?n#n%LJUB(4 zGx*`VozZ6XI}-S_#4j`?AqxIxHOowD7M=xpN$}@fRL%|Ucsb(ZvWfWkozATH6X%RI zTU1VQ-c;!Q`QVH;TW(IF?nqwZ_)T~I{!_K-j`4G5{7d^zvEqDxacI*M&b+2j)Q6P! zA?GT0oP!_omNtc&p3%-|%=`TJ&&5p{{6XwU3x_i-Bq<;)A{yx{6(&-U2l>?at67Q z+(tepG1Y>aOodR(sT?XFH1XrqW$Fg?E%gKS+Re?auUoiVjoTBq@7#WHd*$}V?H}%~ z-Lu_ac+B*e=W)v8p2stfzi5_@q7&&6X zb6OU(EN^LTd93C6mN#3z6$`{3Voz}!aWC;$v7dOcc&RvEoFq;ctHe5SzSt5N9c((TJ;yJ)`xaU|;KTm(pMV=v^(VlUhsh-)M z2G0^tvuBOxde6da3iioDu{3#GA}3F3B^=%SxdLi-h;d^3vim zlgy$vXXP034LJ%i8qS4E)0FXaUV467hRo-y07Roc2fuk)tvHOVtty*Wo>nZ*;1zX15GAH zQnT4$)|PicL_4)vxiU+Yr7Bics*&p#?JBet2D8~+EFDOrer*TR;%;;_BO*ViMVuHt zlkUPdNL7(pYn59qCQBKM;kEf%@q$OWvR?5>=s`R|V+`?S;ZetHJtEfU}l~-BHt);98ZRI|bo?}>@$y8v3 zL`zj^zA?|p?nnvPK2hFd^rA0V%%Ic_17tI2CQk_ntJ%6jVbW`ha^#s=S(#8}aV{IN zp)TUS98vd=y=9RMr!0RZJ9(n&m_iiJlx`zyinFch@-!uMf%R$pjOv7w4hCs<#_r;?2UV1>S7=w?w;DaV-u^7ZJ=`vG7-Fl z7gH4%$jj!vM>Cl(7_|6(1@_kV5z^FyOy9;0xRN_anhZLVQl6?(Letpgosdk=GZ)gU zZMIp=3vL54H69|hMpJI(T^hOAU218*Zbygu(;{g~roo_LS6?6zMO9fXRh7E(EEcz? zRBBDOfn9=qF5X9;VnnsYY8zj> zGA)l4rO>M$!*}i6XsfDX$7>g_SR&6*6`Pc7aZYYgt~^Vl$CM~CnI5w$t{JMz4|E;hZ26_x9?#X5Of zc6PeHSPzRSbp83b2Xf^4;w9W0{6sl!<8ub}L~2AL22HzrYQ>D*tVp^U4RuthlxuPf zIvoqB+Eg+}pO>qbWtVF!6-Y?wLrKYMRem{iqq>ssh9tObKUqatZ5C^#wp`6(dE2jF zWqeMG3vvq#c`~)hP^K_jORDATEZT&{>8eHPnMR|QEi&X48sr+SRs+LfG_V@W2K_qu z&Ar=hvf@k{cSWfv5XndwUQ4;mrm|+{=nC{&1zv>%MP8`y4ODhrvYp$<9g+^GB|#O2 zY*Us~0IbX_%3&w1xiuNlay0qHGo)bAJbZ64>L^R2MM|@#Y89=x$#o}Jm#k*eRq6Sx zXo)@{Jy^aZ&9s>k6aDNq!JFX7juUU!MEP}>yfFtw_>s@A5d%w%yI zg)X3%uwqM1X4zv}fj3gAnaWgFBn#h?eq?oRNm;d`(r7HNkX7hSY7s1XRjs_%W}U@| zq(7rT{k1<8iC9FA$PAs^RlazsZ96L>2SQ#z(zc_!D&RzLIlFe*f=CUfu?sAb?Na>7 z0xan1dtm+}^vO{q_~}N-u`gNCAchs$H09ZuS*p0{UnQPWh-<3&HV)K;AD18AzIHPw5Aa`oXPx=BWh_SlrmLo$}m3|CccK2Wv& zJS%#-vL2c0k+NRE)!h^#m3@#jEu9xJ3$cX+-xK}l{IyFPu|&M|Vl1iRxA_yF#5wmWK%ypih@ zG!0QBE@O%v-S~-ga8Uh^s|r__tYI%6I(_s9`GfNjeQ}q;v#=X0mX_scjT(8nQkk9u z2b-QP(UxRo_r#SYc!g}hrMXCedfs~S)~K)*s^LgW&f?D%$supm+=#*Qv5U9Vv1mN9 zC82?`)w=a6SmJ27Gz!eKB%69YE7`wu&DuR{mF5Hx`c`X=u>clIh1zBP#Q0NLzv zX@A&OE02Hs;@*KJLvZKGpJI_;*!COdm7rHCL|j*$bOdvU8v^Q81&!U`b?w1yMni5N zLkgTuYDz0|&2kY6L*Gizpax$Cj#vRqc!hGce07zI-h-kL@iX$lPf2}Ah1PbAF3m4t zu|N6|l_MQlZYnlaIL zUtP+02q%+WBE586xpW8HIHGY1sobL5b3}$Rkt^zqW++e)4wm9f?20?%8B^w4w?!+s z5!@8gy4VmNq|-B3F+E`DbBYYbxe6r30c1`|SzZ~hWmg&tND-&%=GH;S?S+!y3enp9~u((8K(wD**<{1o% zX)}U-Cdx!#FwdvbqExjyGoMYtqe*pvF{e^qSypN;X7{4eWL1gYoGKTkaNX+As5*gY z_4a*iS*fYa!XMoqH0iL^xu8jJeqJg%Ed3(rIC4kP_t7FW{N<5(u-~Fb;zf8ktC=Q6 zrPt75G!ylhbOX1?r4#UBJQMe5@I~!e@#L%v=<}0k(0Ngj#ZaL%wXaMTWu0G^!VNwz zdMI=Z3}{2vv}*bu_h$?(nx_p7TOj8T4wYGL`~K>cuWhU-+wsQGvm$Awwjx_GoT={g$#pDl2{{AH;~L45ca~t6XDcMO4LX1~fg9HOneW z$;i^C$VF5gV-|Iy#fKN7)?T70sk800j4|}H+m3c?icd3B7!jWEas=`gWvvA5>`#>x zWr2VlhPGZ+ol4lpUbsk>mKBv5W!CIU70d$6RbT+)0cqhP|D&qb}Lzx zr>;zQ9L$EooWdMd3@1|qN0BgFebvm~Bbkh-d;PqhQU9Nj2nC4FbAt1t*tDu`#zIq} zQ6x{xREbP_eUa8tMQ%|Js7^~)T@HUD|Ko9!8lL#QOq7>akfoFrFe1CV)H&+zFzS03 zPp%m*$62^1=rLO-SOYhNvD5rvO%>>KWg@AvpfbBkUQ=DUs)*f%9*O=?)pJP=uv*iU zFa)crRkVn_Y1z2{qI|tAS69pCl^OGma;w>FWyNE&76uJ3Vn)%Z)s5S~)Uda?p`<7@ zb?Gl6W^Z>J1O~HgcqJg<3$g3(uuTa7bBLM@=aOg3Ufxh zIYizg$gd+D#-v)Gt5M4`tg7m=60n;T;_a$>e>8@pQEz{~#(`*29SW)Q63G`ZBKXid z^`e`!KtxsBtkt3m(@{+3Dantb12ikD0@VQ&xoi;_L@7>#$Uh*uW^1fMB*$XE9QuQ0 zB61iEdqDk2;U=XDM49|SA+l&IRH8UMio_(9sa0jDje0XHI!%l5!V9R+Lt4~Gkv@#* z2qF$$J|Yl-9&`A_ae=6A@p;q_`gi2=Aw)oWTAo?CN-lzp0y@9wB}&IJ4I;};Ms#vZ zdg3|}PTKqJJ{Xw`!F5~}zooq-@glI68bn}PRAz#nRRg94SY;pW4$)Qg?5a>C<7J-+ z4e+lQRaL>qyGg1wCS65^$yA{bh2VvC=WncB$*dF=R~J=R$({tC>oj1L=%SW^j~sGN zbWC&1OCaqwW*n`R$(Q(w_7z#U#79SUikjRpP?$(Q5+~o3aiV!*Z{HG#Hovl%8 z%XH;1GUoEi62(=th!kCKK&M6cxFtoj2esHE5&-r?xPl9OJ`pM)A_PQ~D-q{HBzh4B z7h)wrln_J(K~%bcdzx4!BsK_%t%LxwgaqM25V?e)z=KF22s1%|BYz7)R1w5FLQvj~ zs3rtQX`+@8TnG`2Z{^aX1vt4~1_{CCP1pz*?^fX9Ch7>6Ngl*0!ey3-C?tq7!X?<9 z*g+7x2;v?=gb+kH;Sx;{=LupjK^!57;{ZpOPtG1aH01SjuB1)=lL?BQTQ5M;X$s^t{JX7Tu*?@`$y7^oDMGTlhi26 zpPEgbqHa-tqh7jobera;b}MkZ?e@^E(S4HpboY7gCU*?(WG{~n9)TVe9@XF?7SU3= zE8P#EvORPi{Y=zRG)Xj16fH^?m5FLaheT&Zw?$7yf3}Ed5!WKU#lDvEmJ?deZJF1y zqUF<;FT_*DO0iaK5g!xZ^6Ugq*6*J0TD5O=tJQa{MXjZ+JGJiBdUWg5*3Z0VdIftW zd*ymrz1Ddh_xih}ous3rr^H*bSP~;KNGc^;Bqt>IB!9MXYa?%CY4cXvLpoEsscpZu z1#Rzr(&3ZYpA@%~wd>XHM*ETNe~?X(70HaU^|D8@A7yqqBTttP(x)!c5B36T+oBr+kkLW+Ue@XuX{l6VR4ro0fdcctZmj^r0zQ2K5>= zcTnY^Erb3TEEzm+@QT5^2VWgBW=Q#vnjzbVTpIFh$m^jUhV~yicId335kprD)eJ2i zx?$-4q34F)8~S|cpWc*rD{t1jm-h(oN#1k3=X=L{E4>T7tG#!7pYp!${jK+}!(4`W z4eK!M^I_h@CJviDENs}WVP}Tj8TQkcUSIb9a`Km9UuJ#z*KqIQ!NW_3mk(bz{M88e z5er6sGP3>1qLJrEULE=EC}Nas)Z|fXM;#t@b=2cgFGl@2+I4i`=!DU$NADlqF#5sh zm!tm}Lyj3XX404iV`9c+kEtB9Va(mJqOs$~hK$`c_WalzWB>GV^=a?Z&u5HJwGSTW zF-|dV;J8QQ-ukxm9qK#VH^sNWca86*@l(e?nUFR?KfyF%!-S&~-uaP!o__89y8Dgu z3-Al|OYvLh*Wh>0?;jI;Ok6xMaiVUbb>fDJM<>=#yfyJ}6YZ0PlUhycI;roZWs|l} z`hIfT$pMoslMhT8Jmn|<-v06a+5ScTYyA)UpYgx#|DC^mYWt~QOr170Z0hc*7pK0S zHf&naw5QVtP0yLWclw(dZD)*{kvU`EjAt{cnLTHw&)hikc0kvF=zv`Tzt0*mD{s~h zfrA5!16K#`39JkJZFbr0?XwTgK0Ig0oFj9-n=781Jon5z?|A|9jPo|k`(gfq`B&zn z1u+Y@F8D5Jc#!SP%A=hA__T+lk+$d);0kf$0y~ z{lLBB#?6fAtvE{6ZC`zO|IWmPijketu}~K7hDYLwQtoH2N8`_KjdSfCrSGP5dG_gU zV!Thhz9I!B9z`9FqVQA!BGyXta|#RwS$3Ju`iMatK{cO2LQ)Zye7+IaL0x^LR##CaKP&uBi8{Gh5Cg8EQS_yw~>) z=Ppl15vp5H>Q3F3Jc_pma+9SQ0KMiE<`w3#CF+t~oh)%#?vPHiqNXY&4|k`TGE21z zO<9GZTrN2p4+>&6Tcs_w$Tn^)KdXT9$+0pl9N>!;STyziZ6rtT2NBJ`Sz|TVTGarx zNbbci@ZEX!+R3eFj_ycXUd=*1DpQ%EQeJDRvK6l^$tz_~u9&rXyu8nlz^>Ewh3rXX z`=()mKW;C>?%(!7Uw{Ji$=9gQTEn_Lo8sQN+J<%dDt#qek)timl8YPNxOpk4DAfzG zuRcN9cFz)8@@yFm22SggzuZ#=-_;3WJdZ7<`vu~|?&1&Ws2DQ#qGL;FJlq}x%b#e@wKwZ33Qd;!AKQt?fpW3nG=gS04N54W@hEBw zERCvSwIx%Y4ls2dyPQ|MMkyIIidv3Gl9_qttSWhJrKPHv-GWAvXw(J<{{we&eCl5K zQu+R-4;_S(PYckWs2r*dg7OTpgP!u5<8(<4*t-$T1u_8A8HzN(IUP$&5L z3irtsA-b5z;IY*VI>9}Y_GqlDWdLIqg5H&7OPA~Q`MCfh`eDH)rfg+BHxG@TR_Ar( z7T4yQpi|MYz7Yz$lh^tjw7;e#3$szO|_k|QCqorg;MUlzm0OcO`qLG=x z33w@~(;4(?*gL<)JzAtv0JOO_)Y|)P639KZoGAFx4E6>Qv$^c6R@MZt4^?|?0 zk?+eLv`vSS{p-1~R4+*|H!qCdqS{Pz$$Wdi&7t?J>d>P)6nIha;u6ET&SOF>DcnB* zG|Im%L~gZZ3_|Bhkk&ncRy2CNM~%?;lpc4*e_+W9e8*k98R|Gthm>_*x317=V-Qq& z5e4$~3Q+4y47xFo=BEQ~eCf6K^|IHJXY0X;BBhe+8zCL$lUoHDuVP+HuES=12X=zw znHJwJpTB)af^;1za&YQ9w6#olkRJPt)@H!HEWtw*!;VmgE5LjuLSYK7kjJ8hxHlE8~%jGGkG(QGu?b1n`xaOct4VvhF3< z4nF34VKEEP^AH_kbOJl1Qy_) zKHlAO70LpOins2-2_o74#Cl@SGx_bWmQQ2xcx+pX2g*`R3DyinHXbhh09Z+Ge}J*X zXfvL9hrW21;a=(e=qj2UnkwkZh<5=dSa}{WK`$=z#)6{@Zb*K-3|JlYcz5KCVUuR| z0`!~G%#b2)O7iy3!SIQF1EzFju{VYK_)F1{M=w#E`@vsLx3QA%uGXBp{H^Spz;jrv zz$2;jG#**(*!T+|OBQ8~Tx?>ze!MB!js8$chcS}teP~t;fFyU=iAKiJ;zU}&&1~D1 z7VAMST&zb$^#T-xPD#-Uss@0?1eyhK^($1wgR3EW7n*-obl_E@BuYYuC6%2C()7f8H@eZWlz zL81BJ7#iLEGcpD?Q&j>%I#kDZp2kX%)n26dN zLYVzN)b#_AzTGBI10P}^N(~bY^X>K9W7PZi2`759c)|N2{|tQ!QshqkNm`P|!z!}xTdzWBCp)Bq<75U8DGJoZfCv&5II_gCVcS#{DVyZhC-5-!zdiU9BOlG8ik?U);JtjI2v1UYk@b6QveSMV6vb0TNcRf%&MJP;g#TT!Qo{2=`by4a(Ufdex`8doB{wf!WL+r7eX$Er0w%GN-JgN@$Yl_m3qLlX zgAGCeVDBzw;CHw59u2OhEj9FjMm<@=JYW=J6YX`qL9%-YNTKNTx)*$41pea#w z5+k^N8ST6*><(L94Tuc4-2t(pbZ)-%ga0~?5!+}%Lj&5~AnZYlchb=KA^JGl379*N zxACYu?=u%ap}C6>1ZZ$7)b=&@ud|PU*pP?93sEa*9}p>^YzITu1znxJN2=g4^1MoS zYrN(|zvZr#!_MDzmJ!%9t_bZifYnFNj|pGK?n@8a;w_&vJ0?7lbvWuB;OkdtCHb{& z@7W*aceX|a0wE$VlU;<%0Gc|2R*`osM-Kl@{$Nv7KvqH4Kjjox6WpEKg9Tt;w)7Ivq_nb&5hZyqT1oi(nLzi-imZzsU1`H`Em2Q7nHl)PQocy=5kK0yn{K*y%xZZ_sV8jIboD=$iJ zqeGZlK;wGMru@a*3R~<|(p@z0IPieK%Xrihj{TY%&{vw?M6)hVg_ql0m)u03+h+$c z3y}U)nit=J~%Kme_;yDaW zn0nC*^=ZhwB(ZXPK;)~{29=f#iCdNxCYPiKgd7|tPfyCxXR-UYeRb-t%#vSY0QdN3 zQ)%o&Nz54sHAi>LetLZV)!)8~o^Dl0Y}v)-S&roiV!jNBMNc!v9PR`%>9a3z`>@J| z<`_1q7kz?~q?e@>rKZZJj2jWMOp&EAXw@>MCEErRDx*oUYU?`75xKL(e<9*x>cI<~^08VRxRt*{0i~T*FE# z4j_3Tf?{Cl1Oovm9@dG98;6R#5OsU(tAp?d>SEIgu{jntXj?cc zF2YffXFb3mHxxdT#{HXu%i(25_%Vu+1~M0r2?lBt+6(62{rNPyf0!AFrJybxn~(Cn zB&Sdy{!Cg~UTQ7^J{$L%M6P>*J#Y=!1BVzyQr#P0lj{63aJY#F;vkei{}?yS`Q~c0 znTwQ02wHWrvqa|ZPb|+@ZvJCS0$^Jd1V>^?8_@`#gMlNY+A^wDz{dfbIX8F zLQ*?WW&o@0R$_OfTtRdN$mTV-3tVo8*A7QUK@ zWx>4%Ep31H$ohS@XE(WS?Zh3?$P`oyqi;h!*VFjT|71r;;lVH=J6;`x!+OpB#q|3b zV)+z~wtFt7`PtxL8fP+Syu-pqV_qX4-p)pA+fJm>`nDTs?x=;{d;%>vAvyVsM{J(` z-w~T4O#~EI!{ZcqhhFKJj~H(MiT7D;6iTyLjhX!K!~!q{o`mH&TYLbKwa-V zy(2_pxvkw8Y~~7{G6K}@Ad(yuq7_`h2)@Si%sJ?i?;#;d(9yOFWE7?JC5JP3Ii7qN zF{y$Rr-W#VKYi-f?!DFQd}?OWjIbJ5)N{CM=f_lX$9L167>?nWw*3!&X}{|>pSE`c zLv=D*v*+|)RJa$;wXcMn2RbM%*PDP`WP8XU8)dGnFtd?}mFj}Y?EEr~1>DsYl|^v8 zZ6eJ@I&+p>snulXvjqlnRdP&4jJ(sB0l1al?x5Qz_HQ__mcTC4pX(}}8@uJ=+rwucoY=g4YPW>}BUsb{yEOG` zJ@jh5vsZ(;PEzbTX)JE*eK7PMa=m;TwS5w@e-ta;#Jktpf@EvKS?jz|c>@}>VMT-F zAt$nrkz#3pcYh^#u1PK3VBU3@-pfdi6f=^?7wA1;EL6efzm2v@s{u;NkT;G8)w2f` zidAGrUPV^5yt>L#UCfGu@st!ellapd%>m5;Fdi$gLNlf?of?1c!R$hzAqZqKa`Fp2iDuce@OXy4*O)kJ0iUorf{EaNh&n?r)H9DP!#a~=yp1EzCMdlU*jv#l~ zb%S}k&L7S9;_|LbendW~x5Jog{|bz`pMB1PF*lH^`Gu6+hwrKa$7K2kJ|hr-c(eL3 zw@}I(ga;#iJ5CA&IG_(D9(U<#{ppKWz0i_t3D+cV(UKpe8RqQj)wMONZ5m5@a(a5I zLh|E5WRPY$lB-u&L2^Ta3Tt`tL#W_6QKeKZIOw?uhj6)cR3l{QXCduAh46-o=Y|6%lO%Ll)1R75vrd z(+3ZoId@=DpyGpa%bO0M-(IEhXYan>Kp%0awpTu?wmx$rqZ8N@XlFS+wQ+})!96&y zb&06|i8aU9d7-wO>Ni~3P`62P5|khxY2SbaUAml||NO<7W54}2>u4{w5buzV4Bqqn z`N7@y9~@ZHw{J+q2v&<+rTYU&LvcxdiM-4R6oi#Uc_r-9{p6b3wd>cXt%+f0QTm)5 zpeTRhrZ3GYD=RH6Qyg=XWUp~Oaloz0l%1v2slj3!hXP=|J0R4?u1bdMx`A2hFowX) zL7$>@pIZ_RJp%IqPxZkAfjr>RFbfG#++iU441JOKV96==@CMRcW-K?$s;}3ELnynt6H(LVkLm@7j~~( zZV4-$*S>Z|Smh%5n8q)qqk{K5L+;0s7cfaAzu!9;F&Mkg#a_4_?37UrDd;Wiy%op| z1~_U(mgVSyQ>x6$Qsx%vi@^?dfs%c38&U`As}9trESt$#RAy43&yn;GNY|H^0WTfA z4mO_Q4(6!Ovzay_lw&1!<(HuuI^f^N?Ob2l$Jt!JY&LG zPz>t$2GzptljYq40Q3wk8=>-Zv0l)OZAvomI-Z%gz^XrrofJ>f)<(P;*1@&ba^|v=9>b`^dieWK9 ztzAzR6$7{^E7zB4b9pASB78B4i$KYVq6YOKG3={9sMI9VU?|ATm1)cL<;D^)NECYx zk;r(MvEt8C{&Iub|FjQ~76JFj=oltgN%}km{^nh|H+o2#^RyL8$3y^d4D|Cijjh2@ zG3zVkw(@eb5#}yejPtn&6!TtnL#}Ok{p|*zoX=AQ^{<5}2~@g7l{%5%%*#kkK?#u8 zt!1W)BK9Y48M)4=F((53;+?N_BOU2DxjWK`ZX3W{b)xaFoM`;HMCK}BU%j~}0LGvD zpTKxM?z@S(`T>l;-vq|b`F{q+U**Ag4S?gE+y5_M{MF`Qd|DWNl?UUC`Sx1OfyjF> z{!akoThC*zf^o=$@h1R`AI^jExE`rw{|Srdt8ilR&jE`+90YZKz~U8v#Xp@#<9Dd^ zrQmNcYhI`nCImm>rls)sC|YLk><#l;$&EOQmK^c=WhVoN+3+uET+0o)L8A?)h3J`m z#1{a+t~?qA+T;<=6Ar%ppsOuaosuNI0OJK40=*gJjlY-X51t3qR`C^Z^O6xG0k z+$NVC*hyIE9o%U~t-zZFXat^50-yN`> zymoocNiWplY&L9V3bip^LL<+jPG==Y;_V|q^e3bnvNKtIt^r8CDs#3?AvqXdWvpB) z-@74ZX~3+EU}e_Il4Q2Hyu?;3dobzp$k`F`G0BQeOCz?-mCp+anLF=5=y8Bh-)=p& zY8%f-gF7*XTvn&kWoO8tuHy8|mvHT#rC;m+M1!ZPxaz<>r`_Q?wX7OfsnwfVSPDAAQG4_7!Tc-Af*k$y4r@LTlR zP1FModUbB$r}*=6xEs)lzvqgicv){e15d#6hyF;4Vtz!^ksp$OS&yY4ZU(`sKLN{e zC$~sCqH%l=fV8uCpB(VZGz$tAhY#wAHZ=Sm6h`T7jec)*geP_d~_#oqn{eU zN7t1b56cj)899mps%kC+AKkf~`?uYfKi(HP7o2;IgV*9j-l@j9g7N<~Rg5Iu=Q*&+ z9?rOcJ-Uw#8xgD!m*Jiu6?}M?Sv}hDU%TiQZaba?E;>t&+Nf@F(eYP6CT+Sh=Ph7r z-|nExa2J#@t&Usl@X?L_MtYYUN#3H<XeaNDJV$}MPz_hZ zT<{?>?;QPrwwg-eyghjIc+D;O*XKg};7)_4U~0hPjkjZ=|2A+jI&lL2nv#JXyy50- z*{h?PSf1&l@ zRrvBx(3-C;JvC!3E3seRc;9AkC1>PF)nZu#bGij2+KWmuF`XQ0Va> zbP04w620L4<)BLhfo7gL#K9GK36ua4`hF?x9f(i!Tmfe?s(|#v=zE|F)OL3IAd*Le z3!*7fI`qHrIpArXZOqpnfyI+!0axVH(1MSUVSjse5R->kzF^ zYbhJ)$*T8g!-e-~14nQbfHvF!NyKA}!(R)3)g{v%QJND&S&zcj({tcR7(D#~w*qzZ zLanc&;08FwXK-Osz0m|HFMsKwq=3h9$)z2 zTNOjmy1iH;8#yzyt8c`%g9(aCy|x4d1pspV)x8{c-GXBap6aqjwNvHs_ou4hJ^@@@ zO0(W4QLEC2_kTyD@R}$%GLP*$^5Xi&<;&J8#7TVLK%n@c-d=aX{c#s9l49oSxHq{9 z)yVhvu%I4*tl};A-j<#@VzIS1l^2%-7zsv!PM@zUd*U zTtY3YD|H}#7E84g@zYtCp6ga#c@4gfzs;4Y&Q|5I+2cvvCllP+1YRx^Cn{lLT?eM@ zSetYn$gV&}83a-q(G7{0B{^#J02!rl?+vtZxJ>d1rCG1uvO{*~;)&-^HZKVV^fgzV zUBX|ltcEt71Vpj@fV{$?;TyfqCA1kq|!3S(Ck-~Wbo)>RT11u9UmGnd$~dd z@-s`8Y00W8hbynZ&={<)-C0w#bwl=?dr9vF0Lj}|7cGZC`3FKXH`i++&{s?iU zN_PRmIF$xB>J&7CgbQqC&WoVnx8=e6**FqRgK)AuS6!CvB!(B}mgrgJiRY00fbJor zasX`rE=kxZ$YMe%6wY#>qZKTiyJ;i-Q-tq)YjLrn@Yl3#d=HgC*yrV6VItz~Q6#b~L6OTB`zYq(*6!)Spd4Y$#n zoNW)~8@KB8HEbT-94d88x!GXSl(FW_P|IR@(|xDj44OktJPHi2V!kdJ_;egzJG&e5 z6xuh~X=!nFwnkA_Jl%J?1UBDXjMh(%waHnNd5nH5XdZP{77t!A&g5g1iQa2Z%Llp0NTu0oTL z7PdUf_soo|OYgcP*W355{Up1wa39c?CJw>kxfQ|YSVd3&1p$3zl4GAfnD)mH=Qi&< zp%9N-c^ajhMhn0=G=g#fym#=*@tmxYO`NPuxC6&?vPJ?Yi^|A^dl{h0vkq?7s3vY! zmCeb`0?2#RY4E0Pe@~|Y89RODY0d|fxR+bukl6)?%&uJwjt7GS?M6LGb17UbbP{#I zV|ED|(d6i0r}7*dg94S{FG&N)87Il7+)%FL&CsSQOV+}jEO2n6T{{@Q+brJY=pVa- zcl6}w^;u38_C*sN(#&kte8~i_9!Upz^k&W4tw)eylTC!8E4D0rNS;1m?$HX>u*Hm+tNvJn-OEwKQ+r(W z`MFSff z#QKZPtE#G2t***Ujhq)XJX=#(s8_rR?R4!^`S3BJUrsn3d8Vq;Vynuo%v_dIy><82 z_4|w2okI{g{jt)0Wl=_=EXt5fAJhrXJD1;(NCBO?zhFD7qn;ZWByBpt__H*(?)%FDj`h5%?p9bujI_%|idvCXI{x@## z|C91|$DRTns(&V+pm6jXpUAA-wuc6a-1a7lTmw+#P>elIDyi-WudJnkw6YyYD-A$e zL2pr`Go3m15O{BB-vc;ZoYcC<{CjQf+HtgrzW0#FfX6~6y!e=ZaUCau48|WN@N~S* zP48TEzO!jJEwOZh#%7@9JV$0Tymis}RvTxQld|WJ)Lw9hSaLm%-uW|R?C!*vo%EY) z4cvmqLVG{^m(or&u4&Xo(Q}zZx(-}xJhzVEp-C4Y4XbspW2 z?qPrfLP;7kRqtFon*>BkKqstq5o40k{v`iEqSV5gFT@Z8@=*4Xb@h|)TqbX z8YDmWfMbKJlS;nU(DxW_8R!=OYsw}1n(GVx+nqFEivJU}Dhm7t9hoPLJr&%$tDCMx zAG7c9XT*@0etZ!F@MRJ#H;ARc0_p~nvbm|)bNeiQ*ssHo?)KyBP=Zr88l1W|$K~oD z?eoF4%kw;U|3Bb)a!c(Cp{JX1dkdHIU*d(A(P!J4 z|MGv2F*fcc2W19L87NOp%Sct4v#Stu{Rh-yHH%1l>slal!j(zX`zCXUe*eGVRMWiX z@~?W!4E%(Af8W@7*ZJ8k{?0L29%M63MgdIQ!^fRmTkys)upWV1cm24NT?h1ldyuk? z0lD$wCQ3R_AG;}e^eMgScYb;P1k3Y@9|Pq<#5MeJ40YSSv_bNuJN=T|3-Sg^ynzx= z{h0S;-dR6Mo7^ZL_{DSNS38$r6U7!OAESsH!XY#o)D33v!#fU{ zUkm(j$T8ZpK?vUO#5l=w`~_biT-4KueehWFfcwlomY4n-tdvH8_Irz`)7|+yFm8&Z@9b9?RS99aUIwkyMfJd9oQVZfz5Fp*c`jdXr82(e2aMm zI7ep&wMBjYeNnyxqmKXg++kE{uZEf9TT&f&(gD%Q-ynsra5#t?;dQt(PfPayS6}u2 zv3DNuQ5Db0!W_ zsq+&4pO1N6|GWz$V0tD#W&zL%QE&?BQm^Dvu_|-lI2D#y%aZ01>Vedw^ z?Ehg>^&+rwZG~MWz31((Ca>InFy`gHt6J3R+M!X8l>QsW$N9d!@YOXHcUj91UsMCO z)fyZ9kh^^bWIn>Z>_a(YY!#LSUE}`LN#nhh9oFO4yLUR;945+^ZmR>Ud#&9sIc{^j ze&XCp$4HLew04g<+-_*DN6y9XnChN`W|u?UJxRM|9pJ6ClViW*PiSugIW$zsVYSJ9 zqP!ca2YsvCdLXxdIk%k7^dHSU&e6<|IGTC@<3;!6uJ0Ocqnu zyFakzN)E@8!H3Dql^i3v8nf4(PSEn%HQg8HhJ(FYe(Z($^EJ}jgN!Zq-cC|`z3WIT#aola zR*~4)Ty0QM3si&=$6RloLB)f9R1_0b6!SJWsHk3 zJw!4jd#!f4H;~ZX)(w)m-X?E5$l8uRlCf6D9jRoiXe-H8tG({s1oiB%>AqYk(Hpy? zyt`O0+=FVOvA>|2XphkobeU=*>#TPUt>8c(Lt(#Tu8lXk zUH$K-nXYp!uWjC^U=f1S;~letY4)}eekkGB)p3039WKq^HX6tEjU^D1qGPVL1n5J6 zwRIdEPxsH4cz5gsseK8Hx%LoXECKe^aU^@kl$Q^$$cRCue-pUU;_8eHlS-l0%CMC^Uhyt#X7Zq?#?PLEfeRyn_ z&72n3dT@(Q527=J4U7iS^}269Wrgfy3!>zEo4elb3u%RPLs5_5ZJo4S$KX9$u0E?> zdleZRr=&>nbsV2^M(ZCh?K+;{Ja$~w_f^kIt9mry9>95q#OYg~KfTRz=e$MF`^ zw9<|xzJWCNr1DxOICpK~{b1gM&VAnFbevo0W7pEhZlRA|OCP&s9M=R#OLsV8WPNrc zMrL`vhd|N@|Fn*S{(nY@V+T#^1#em6A=+LO+}1y-{I`jGw0EV{`dMoI?Z!0YGTpOE z^K$5)N@pGEjJNU%5K_zUvzonT&3dibKaiI_V#ObE^|9VTYuJ{JNy}gKZ0~G$rN~L6 zd1n1}?v%Nc6Fi-F+83`}uw_%smiUcBSI6zxX-`NH*&tbjoxo|O$#I=K*b0&GxI@(9{8}oSgn68OWEbSZD`4P0aOq)27 z-RUtYq8M{d+|HeLSDzs-ZW_BK_O;+f4<9&weD{IlZ>F_w)aa4c_jy#IT zBX#!6e1G&N7Kuc^h^$iXtL2_Bch0o=$T1}^N|-jn@zl0HoA~LCu6DP@U6&7vOB~*JUhi06?P|UVUqcVVcK*c*k+(Y`)7)R3As%C%`&jPn zOo8rq&|2rf;64$B@&03&es!Wd%iEpl&3t;FQ_OnSnaNx^?@tf9U-dP=sB=l=XtvVV zWXJ(s_NPl-_GaA#w~UZpv|9QP>zaApWjf>*R=o7VXJcRQ{+0vT*T8J=)3MR6Wq($b zj}zWTnvc`^6)2MxH`Fih^ZpOR-0Oe3Wq`woc5LR1@T;b~cmLpBRG#DOboZ6qRtZi% z_(ueqfxwr!?aEzzwa`102gVBWrh9HX!mTw^bWwxTgSEeEZ_YVo-ErKtAzy3Y(%-8! z&^Pj@plH_{bZV z7J52t-QmxyU-)UpE1Ot%68R_Bsmfr(iimdYD(yzWl6M5!l@1GQ2NY6f1W4=m5teKH za7RaWJzYymyRVe98exS{TqC&2aG{|Tefvd`x04k9XaAC6>9z9;tRq|!NNc^9Prk@s zL3!p>(9Le&Yd=i`8-tAJTTFwxoU*Ej@LG!tFX7KxfmA!;+MSWQ84?h)ZS;EdW=>`H z{oI~3drqQX^YGLuPfwp3=WBZVKI9vh%o?{)&O(a-Gn4!~p0tmfGI{(svuFJ5oM&b} z8@GK)H($Se5#2?ck6UrEC>b0A*ww6$ef*TkBI&~dyeN2^6SrbvcO*upk9&ID_?R}U zpE@wqv1DOC$FQ;USIn95?9AjiG)P*GL-wROvl0_tcl+~Gr*oRMP=o+i4S2`#&lB$4 zLe?#f9qS#ftUghQ>A8+qaVLL7&2GG&MKY@^gJ|a|D_$^w%xQg4;FZJhj+1Zhx8nDI zFihueIz0Qm?_LYa9mW2@5TjnV>V>Vo9Pc6fyvY;M8!-aeEz!3-C3G~37LeUqJS*<3 zcZ>DIg>-v-LgM7)*kwt`a~X{YOJ|KiO@r0)LP&JSfvNl7UYm6)?S=ji)qk>99nTZK zPSL9tJ@>-WadU_D8##Euh@|mLJug@lqOIryR^cB`b$+R?&xO2EnL0Zkf8P_n+#wQz zX~$f!0Yr9>$_Bq1eaPMbLA@E{5FW#u_-siBoy8Y_Hdtpe%wD{XOq(JLcL;&~b#^OTehydm1|4aGT{y-q$^~ zGWKS{Nm ztm5uvRbt?DmVwhr22N)gIGtqRbe4hB$plBO(pFV36CQp1C=++I?-ttA`s{=_4oLV< zbBH$FS)Qchhi7kHzG~TZzfU3Wr9S@I1CID5y|y=;J3l>eykyL1IbJfpwcS@??Cn0M z@AjDRNgO(DyFYEemB%K^MsEizB{~J=Vg54#K_S*0>(C$2TwKQYhTRwZfx{{kGVu|+ zuTaP+HitP!;@^}F^&d{#Xf&YhcDVY>!89v$t3wU}goMmZvxlRqjzjDp?EmJdJ8FYf ztl?XnQeZdZR~7z7HrQ)<*r>hDAJLs5Ggr<^o&9_v>z@2g;JP6Um%n_A6J~yWz^?D( z6Xs8!7dy&v^oe>qE5`cn^|@~L)ot$?@PT7_$dm!o226jd&;U8qur9>c;F;_@t(vi- zjexG>LbHz73wlX^3+einR-y84S*N)V zDx$Wl2_gNV6`_5(Q_H&<{PZ5yhjnd7A9u2M5?PTutFU)cIqvApc(|US1k2$LFJp}? zlT1OKmBYLVe|bJvBHi#R9h`f*A8d;~r&v~~~}7VyXLO0EMA$c6(>!2#KDz$rK&8xA;? z09VPRVTX5lIbo*WjQEc8+&WkB$wz#0oKHUDljD5y5uY4SaIA4}M^)WkqATYZWVQR{ zxXlpZffHu=dW2P zy~!-RvhDCC3MH%txh%3lWl=ecr1bbowN^Fy;gDfGID-sF#}Q?PooTUq+grEGP`9r}kBzG`@X0t@fD zPw#%%>L>elfqkXd+$X(F?5no8`zAVk-y}NvZgH#%x$8oc*NhsE#KX}GPus0;LPpoH z(_)|H<0_^vJ=;xG-LP0mFh)r%ojFRU~2 z{r-VYGi!i39m1IEWMwy99o_Pd>)pu*-MKeW4_|tJh%S5KgQq9Vob>GE>ju=dkD5Af z@;swOd}Z>uUXwlDCl8z06QxH5G>MPrc&}&b(~}dX#7#(iZo&((uWfn$(0tD;^9QH4 zh@CKE`V7y~y^CfoOrDu?9cn}DR-+IOggxQDaA(K}MA$?*H(FPGPakyelCw}O(MKVx zbth}F-O#BzcH}hANVF-X#BL5j=6zzP`Q29zxo$v>f*D(2GB#45i|5D__?sd+NDKV>_e9#^ zb=OZfID8eY<$)&nXG~8FcCeY0pU8G=KMN>>86NS)K}RQIiod~eyF_*QCh}m}5az1} z@2!)}-EFOD=xE`)f1g$ORjbwktK30e?%HQP_&S|db%rR1+gM0d&3Gmu?$H6=yLG7V zo;qpz^oeoPCro~NT!)B-M(VYj4D5%v9VS2vr`e;$+`^CXs=MH(Swcc(8 zbSsRQ6z|uqVAZw07m=l8bSsP=I~*G2DEgNdZm^ec(Yr+r5#jE1D7V&$e@|@4HPtGQ zFnOm#|EBn6BLvkyz95Khg)^zb`*%EIz4u(n9x%yQT zmDSZm3G(~qRG2plM*G@>T5D1>2MZ|wWacJ zShWu6+}lMx`cZGtSjqV<4u7sqd>kpeT2*?uw=X0s2~=@hx&3b9xu_RAP&N=y&#{y= zdzl3xjY?#`dkbe{*>r5@oTIRE~_rzam3Yr*O=8^Gh$N~FI<8u z_A&j(r@WNlIpbXf5&}w);XDrdJLMFt;5PpN>?%pJ&P9GrqFY(K2!4%h8c?0=S9{I# zElgE=<%c%uUd-L)oNngh0n+*h8$O)Tzvv_K*ljv?}gq)-hUpLrMi z5B6U7nj`#&gYIoc=d~P(>aoLh&Rc7uBXOtw>G^YJ%!@_sSk4s_fU$@l-R9fitM<+v zR^(m9`S_j?R z4|3wSFp54|87~7(Snn8`m>Xj3-FSZA^xBov!r{|9T75XyPb3ADL?OGdLi+McYNM?6 z)(SdvQ+aZ3>>TID)^jS&^ydDW$a&|(EY80DT;AdOsh8VwS)2Slx=g8LKIL)!+}g2L zL^e<|Yt{4iz^#>UCMMB)HzzET-?h7DEtoYv2}#{?B4OcbhiV32`SJB@RrWn(o!sZE z7IRC37QUjlw%f9IaGdL=D;M#WHapt1Wm2}M-Gi~0ug$Pn7ipG+5$tUbq&3XU$ zkb@H!4b8wfQ|GOAixRLwuQu6odqSb`G5%fdc`^q{naUpA95?&iYoBzp`4`v@55FHK z-!29O_FK0e)TiA0M6s4NWo-2MBfEF6_B2^~q}PYBnY#zNXUw0q&|^*f?!XTRAK6pk zw)=WE>+Cr?xYg?0V|@?Yj`J#|pDb7SKxXv1VA0qsaV7 z=DFC67y9+P|F#}jf(ZBCFy?T_!`9PcW~JldsL$VW4bDAV99g$L=n^zWTP`UV3|MaA z3$KZ)dRpmq zT^uMaJF>s6)r6HT^g6sH!u{25^cC|p6_r@%)%x_PRq{E{Yu4BH7mVciz>t(Ln9NLK z5o%;rd)3kI&qIbFK)+^07X;WpM)OwHkxd`HC$>SC4If+OGqSPc^xUm8JmG6igKAcV zh4}ut!*U*XeQo^&2O&=W;1$M*TvlDjl|;6r<)K#DXmu)p!k>?n&&m9L> zg;gDzTLjUg_@mgiLcvH~%Q6Z^+SIval;^e!V=B5o_KvY1OY z9m%qAkNQFD@l!!;2t@oOhbVndn^SS3Pwdp~XcT)}1yqW?7%y{nd03MYn7WTUyVIUIwAPH#>d4HIpztUBq_QBY{{YvN!~(|Z*C;XXG1vRyDnb=&iy8D0ShE#Z{I$vAuUMe zgO1&AY}>Nfvtr(|>7z900@t8qC=tYb`{5I|WAKC&FSvu8NYNns=MbyoBw(hpwwshM& zwr_)O4yqA!N6^BcwZUP*-Gg5UUK9LUaE3kB-pKx_eY}0LeU5#;eVKii{f&_D5O>Hu zAzy@C2#pEd7W#7N8=;w@A7ksFTA?8r1D#rEbD@2OD;I87ct_y_j>?YNjwHt}$6?2L zCkFMLk2nW8hdW<&9t#T#^Mv&bdopZn*o3et7yx}O>}1%fu+PH2DN?aW)grZuG$_)z zNUI_b7wJ-@dyzgx1{E1zWJQtvMKX${Qd9`!#~CNXGnxIA|j$pMAe9!BWgu7h-ezo zJfdwx$B6Ej|LhkrC}McT(-HF{mSOyJb;O2zeE5|Zr(dGy%5$-olui~n1?#-Dig4o4^Q$(; z-Qafqb|>uLgYzp9#su1BwtFtuB|F*e`E5nAflLVRuXV)zktSn>T8n6|sRp0Ygeq8aNs?0n5&S$hA4Irb4V6DKZ4P3!!H z*cyGwn`@tmGMfaWsCLx&31g9`8-F3?A#bvM(e!ciMI5c<8 zOvHx$rt`{%j2wqRhb)?&38~-MJ_%*9SYMor^~L2O8y1Zo)V2T6PJKovFN^ogojM6S zZeq|<)Co-U44C&~&-B={oAw^vG;rg?7=V(sAPn^xNs%oMDNAvcANytDwI%;_D$73Ge z^wgoaG?v`fC5{<2WWwMM9#?kH_~gaQ5}$h+TV7$&>r+Mz>^)@gBS_mmF>>LGbt_iv zMBiCpRH#j_4>L= zjxUbw&v?;OXVGij&c&Gkx%FgJX z{YQ@)9bLzo)|wMsdsFR`*X0~VL!WS2;h+VaORR10Wp6cugM~8InkRzKrKUk-A zqv{^t9il@TtASOpD;Pf~dCL4wk5F=~8 z?iZqe=}esSCSxA$7c|OTOP`GE_(hE}uCu;t>69rj!#O(Ou5CAQ+Nn7iS{*YxU6IUx`~KBo1mr_u|a5STqPDbC53ddiw*Xw=v`l>&;?>uvvV!<~NEpu!rVa{a&^n@D)Add%(BM zSKC+Bx6Rku3cA^9`^9&Qw;lJ)pY!b8c`=C-=8ngX>-1@Hk2ktyOr2O?%?cSPpj(Y% z@50tdtM<3`eKmc>AFWod=a8gL2{RIA&huzUfsENXR4>w<{{~EJ}k{fTS3R({l})&qlYbx8*`hz?$}OsYsWSlvURs7 zJYNg`MHTqYUlk*F_T*3~TbDazavEsHS5J9i;&RU(&h{B)0HTfu-C$ED$35E3zPewh zMXmDZrhT6sICqGrV;34Xv8U}CJ|=0L7_FT>C+?*Us50*T;?7a8#xiy7(kJoxVIJ!R zYr1`A{LHaqV|;#-YH>b?RU|qvsokOC z(we(7uZo!_yvOjRJ6~UR`kjqShIP7sXpMV3lOBn-3U6jy@=o_vO?`#C`GTw7 zv#IY=1V=r39zyzPC&Wo9CMQzRPIij_u@SR6RYmKxmnDUU=7A7Rl zo)u?#bHmtvnEC9S*WF_#O_+qeOKTDeS`OqZXmR`=1ub`8t)S(8qoAckKtan;zk-&I zqM&8dMFlP9M1|iBBKi{($8;LGVhxImUfyX%9gaEJdqblS_UwN%DQ^BNv))TSP-x5i zrE3nvE?T@WMT~R$I&Jo~_Z1)HxnoSnv29`}g^WSn2nI({hmaVT5c2Zo_?FC6A86|< z(j=z+x(=VDq%2H{3rFgsx>e{y(Rj1pXuLVN^3d*cG1*4rO@$`D*k(rKP1z?Nu2&Xw zH}AI+l{fa>=;(L1_d(@N$13-9UUT%*!#hRg%??p{v#-0TylE>cZ#I5lg}i^zLVv{* z?%|^_PME(zn!mZ{-_X2#PtPf)UG8%DJjF+12P8nu`OCn+sJ_9g%=*mLwxPu^D;hxP z@SRrQ=y$#K{o0jKI$*RbburqNCW)mM4A2ku6-T?$B!{cZb5?PCItC9@WECBo$=>1? z+Q*D?C9HuDr>R}!L4DZ(Upf2ZT^o11DHb!yNn@PRi$0y3c`(Kbf9z1*O>r})Fu*bT z^~TQ`pE%ibwCB=xcf_M5KET5M4jb3yqmP0sV@i_3+tepP7kTefNQV|J-k3 zuSc|yVmkHOi#EO>tNb-rgFf+2T8v7DRe@EXa8Z$ee{s=?&#uc$){wDGibhqR*q~*M zFMMnB_q)eUpFIoX@}gdG{^UfIPBdLVY~Kel2b11j^l98itLF=7HHt=oJeRSIqLffy%-8 z&rHS2!k9@D*;cQFO2R=?=EtvywZe1ny=d(>zt8Z5BkJ$W*F!SK?L3rr#B%&&TaT{K z$2sRPc5$v9lRU8JkYPRIoE_c9!z?-0a4uYeIp!f|zsk9I@q(l!u|yNUz&T`o{B!FT ztV)ebnUuUVCN=4~#N}}_pPeytW(?M9CQU};`P8^xk9B*nO-#5f@Lkd+P{1bV=iUu= zr>{u#wt>qYmi_-YvB3R|W2gfIm!izXxiCJ-8U5_sXJ+}e%ZwdADSmR?g$h3{w@;n; z^t4Gv|9kTMgv2?VRd)IAXFP4rI0o#EIHR{?yt9uZd^DN1;y95dlE6n{PB}Et{YJ-2 zA*v4G!nxlm&}tIde;MyfGflsZ%`{8vhh&pEgzOy&F@Q%`L~9*npj}f0M&G zO{NkbrfvP?^GCMUuKmbkH{P1|*oU5Q;=?+z{gEZkCXVpf(T=XHB0Eu>)5PlcnpNj; zlrv>1g0LQE+IuG*PC0to(V6)Q)^{=KdCO;yzVC}gUj2aEnJKo7qnl*dopOp1%cAp= z7AH=bYt(hjsG!fJG1QP?tUDAyu)qGRH$sXr|e&GJ2lxM?2F=tH`vnptu|$qez=*0*P*tOw(_=mwnnxGY^_*}>TMfr8)=(n zOSCPst+ws69kIO~JT!P;@Q?N`_JJY$LLH&SLd%3^7n)GGH0w)~9Q7T^9L(JnRwnF` zBE4DnSs3w6WL#w3$oi4PS%rB%a((2f$ZsRPkv|s=E*e#|V$u3VyA@qnbYqkws#sJ^ zRN1KNQFWv0NA-;A7d1F)R#b9SM%2lu52HSf`XcI^s2rDag}5SJ#a*Rb&0K9<6I`=h zOI&MRpSdm+t6A)UVpEEx6gyEY8+(~OqcfsEEq+t+hQ((Uf4=y+62T?HOB5>+SE6Ex z>Lu!y3@MpX^0|^PUf1ZlPh%#;JQIVq-YJ2K?8he^~+LX>IeWA>fGSA=O zxS`DrL$RCLtn4G@I+yEHzF+y#<)>6ATcL7=_7yr;c&0)^g?$x{R4QHRrpnbS*Q}CK zWp$N(RZdjNu98zVxN3OSQdP@Tty;Bu)w)&RuliBd&u*Glt#Y+`wy%Y6L)jM79Y`t^$1mDy7 zo^JO{xhLhG)%R>^(5}HF4SFC3(*aPh4{Q=@iC(eUh zU*&oTcnvrV9HE}0s4J=IliGvN^?XHb=?8%hKu7#K0VB9ijZXs9nM2wMP-qTRnGRo_R`&xBa^C{J5z6e(d->vX{JsRf0=@>$^UZfa4)8M= zc9M^?v` z1+)g*0BwPGz(YWL;9;Nx-*n{rN4W3AwKLbpNpm!5j056<@jxQ)l7OYWdyYC=0p?!- zQVG8jcoA3ytOnK)ZY{8mutH%Qx!(-ziBP@j&cIExRLtEp+0h`j~wbla4&cl zoaY!W7Y-Nh7S8ri?$XdgbM9LJErC`*YoHC#7H9`N1hfYp20BpAj(qnB-*w{JnQK={ zCtRAya}tos{Yv0PU=^?$ScCssU?Z>@xRUG2QIZ@e?+jFThIa7`RF(`le*Hl`$!SL!d za+ppI)5&2v{5p+XrjyHba+yvp(`ms5(|QfQ*uP|};)V_?f|Z(JtUvkvnR=1>mGneqICBJSqaGzg42MBWz3cHz@Q)mqaLuJ{jF|j|$wLgBJbNv$d3iz7T z!hmof(xjYbDC_#X-f*+DRK4M3p|ot>0%!@e0$KxYfVMz8;31$r@G#JUZ#w3s1t={o zKxsl{X;4`jRF(~uWkY4zP+2xqCaqi=RF+05(x9?5dSVB4(jS~fLxUxN>ws9m4G4ZZ z@RiWB&~iRbmhmnhC;9l;h2L&q4;Zi;s(?1BvGdf%c`$W8z?tw3>77&$8@xHeTS;o; zI>6te`uqF_P){R5-Ul=R?&tjjz=Qa=;M#^3pO#Ja$lI%)0{RorCj36<{g=R3z}LXf zc?p5OeGL>Reft`yPWtvW@WV#` z1+)fe^WcR{cp(#B$b=U%;e|{}G?)@?rCu_rm#x%GCiRl3yQ>z|jkLZ(y<5TgR`8q& zo-@I7CV0*S&zazPD|p@tez$_(t+aEe!R2Xic^X`vR`tNfMnOz8=#)li_}w& z7N8=n;*DGzKqbQ2_k*7YfCqVQ#web$g3EMpDKwixN*PKis|@Q^!+ zP+c0hPXqU9;64r9=Z~ADU&$Xcod=8O>C4Vj2boY|CRCUS6=o`@!9V>0m^o}Hr8m^_ zB+wTa4vYlW1A7S*N_nS|*J92ECQ=kp_lW~1{ z(jE@12lkqLT;A(T`<`vuXK9<|%lfKRfMXj z+&s&y&d*0a)lc0+OfsIu9s=tk4u4z2XkX@iGSk%LDaXuPi{Uz<8Rnk+Wt;;AE4#eE zYLpTpWxeK`LMG3R__7Jm6c8M=3*dqB|4SJ1&r&bpLPjC!>V z%o9}`b%Vh|GFZIUJnmX0%%5pzgB6*x%X1pBPZ|C2bgsTI`Hos7{m?s-!ZN!3BCAg-*5$r#uM9mR3y zGtd6AX0TqdCh%TDomXL|zp4QiYC=(i;Fm-o2}m)VcNlIs%;-_ZLWki9Sq%~T{bN)r z>m}*LDC5v{a4i&>Kijzc>Cew~ugz`$zs2{Tnekt{4f~I!eX+%hxY*+T`{u|6Th#wM z@n4$x`}>AV&%b{6_sYOuyE5SKo&D~A_bS2Px%<~vSp4g5m$=Q(hkxCQ%Wsd_{(ntd zdM_D^U%u}0M|}VMdV!3dPX7z*4gcG}myw`c_cr5uoAJF(#`w%E6o_Zac77$g2Z4wfDJ|3CKd{Bx|oci#UKJMWjbme<~w`Xj!V z+S|)x{w4n_S3|FSF4$^ku&qvjNc&_aCsZki4ZumzNH=7Z~v|o_i$WV_n+W5Pcu9V*R>uc$+ zYlTEwBGsHPl9NVq#z^{?(@@3##Z!PO|6`{B|42*tw}jOHgoKpz`!WKMGy2(o?)#{MRM`akjIrS)1FW8W`E&Ez^Iyr= z)p8I1K0r>CT)tcO_vr0k8x8#RtC{|KztqD2`JN`gIVEhOr9*X7Z=qztp-1ZpdYYc4 z=jnxdnMMLgZ`SGhLtB5_Slc9Yb$k=lDyV(Xl%QQfr-Os-#qFi+mC@UgX#dFmZAiV4 zrXg)YI*0TO85lA;WJ<{FkcA;JeQcW<~6ZI1+I(;5+JMFYq+ijM5n<;Ho5{QVF${v@%tF z07*`;k_A>yqlqJv(q>W0EJ~S0DYHmBle9BQJCn3CNjsCYGf6vBUjTm2%OduzI17jFzN%NK4jQ@$RtT?o5;W; z^+rlQQ{t2PUm?4Bxdc5SO{hYY(r0plo{`IPAgN#AT|xbD_TKR zEAHDO_0=A!u-CXh3>*Po2R`JzXfzRRCcmV~k*(c&|BT0p9J~>{RuNrMd-o6P+%l}6Y!e^yaJ^2?W@4&eD?)_?gZ*6hdRokj&k(Z zgdu%>9v~0;J0J&t$%hyCk#BtfSfCz#)L{;i$s)UjgeJ5qGKwAYrcuAssH5u0a^D7} z)q&bwMwD8z0lp>i(j4Ot8~5+-2tL0MYN=(^VP|~S4Kwb z;#X0I6IwzwqTxZbHHfALWDF_&X-a>Z(*G(~P@2<*D}q%kLKXwkfmfk27o|$49H%el zr~^6a2y`;JJ5BCR2XZGGA^Z|#Yq+ijkR+omOQ$VM2P^3X+D~aovlvfg8NWR4^30t% z^KI@#N>WB-(&~x4q}&+|8&`xAX~6R)pNGMDY9Ox}sy4E4tl&~3hsp0@@_QI;`tv)4 z`(eNc-jBj>3~lZK;2>>JkesR|t$bMkJCdBzR!C2gLhQd*Hz~xDLM$oJL@nz6N;eIu zD1V!CnwX?bmOkS=`O4Ska-RI;kcZQMNyx&=4sH6&v6WP}QhQrTaVr?Oly@h2H0wR! z&97}HU%Sj2p4S2!0kq1H&ukS5^`+6Sh%|gA^5B_B!)GE5pNXV;CcKsgucg6jY4BPa zyp{&9rNLLy4yV!PWSUm~Vy>=u@?-E{Ps2$rrPa*SNx ziGJ*~Dbs&{4xNGCDf_D4Ni+$FOgO!i$b(ZJk*dBPzP}mnISc#% z57KQ0rI#_D@3NltucX_`fm~+5U1J%k33vH9@oMgp@y&Va$mCMZrA@m!rx|~c!!oYm zu#8{eu=AJE+i$n;LaC|jr29v+sp=MT{!1;I;_`g3fj-m+<1a_A$CmN;6Ib??{-kuZ-)RX&eP8j*%eZ#DR|GSUP{=R-@>9%DA#WqC z-eo^#!&m&k#!1?}Yvc;Q!9Z$391&xB9=ktRM8cz_1Rl;``9|_^W$CUC<^SrJ;=L+P z(*IRFr1E|ZfJPZ8O;PtLxajS>GN!AaDc==1yA+0zpfVuoLkYyc)$fxZ=2FQR+p4@Y zu$$?BM;;_6f@$<0%G+!Gps=f`=33#zPq6iCSh)0^)C>Q^zb~}^yWh%(zpe}~W#-3w zt#7WV`+F|0gG>0jl-s~v+!a0%jFx}lcP+ZPR!~!C*Pz{Ng*EkbUfPIjzrD6^L0-8$ z1S3i%)Ph@pzAnecwX?pnb}%ZRa=!(ccHte5;}8RqF1stD>ikR)wEZ4tFEd$^WA>@8>%V%?^RFp zZ={}6E7W~zrCP0;sI_VncEeuc--&C|7Y zZI!6&>3S+j->Vy`WZhIZRSR`9-Apag9d&1wqPyrWYMFjqcU8-EPu)|k(7p9!^}L>{ zXQ+LwPCu&->O`Ha4(SxVOdVmJ`ha>vAJhlcSNf1XqR#1e^a=H?KC8c0-|HW=r7q|T z`e&7A3$g`kn=RB9s)KEXZ4Qm@U)H__vrcdt!CGV#D-XrcJy;wJmuB6oEP5oXs+-WI zSOdLtP1OUcnQE?DfTON_*&V!20IMt2i)t0PT&vcp^=gAc*BaP70v6H!1=d2eQy0+@ zVCV)g(@}S#bR)3OHb&3T&rp^molIF4>m_+Ua5qLunZy-KgvYgmI{r`PKZdZXUN zYWz!ji{7fY>Fs)l-l@~{%X*jIt@r2ylwKn}e8Q#-wb+?YDJaB)@AcS)v#D}WOE6`* z5gMwdZlyoJjen%71^pC-e(F>5hEPUHbw5-TOZ~UyyNCGSKv}zj38A8LhJMN$I;mi2 zqoSdWTUCzAQ?<1X3aM`>q=BK3hK54!g+iiLOI<>jP_6WJ`a0EG$Ld(sM!TV$wz@Qw z)6P)NLxytN8+zzq=%J&bher)PbTRbsIP@?;b=8CPAoZjkqKBwHdYB%i`hw5NYM`N$ zQHD<94V_E?w<&5e*j=WkfZL5~I+)xHHExA+<{Qd+-cZX6hFaDcYS}2%qFxeeQCp#w z!fG2>OaQNT6$4JM2eV}Ym@UUDM|mhEn014SysyMR1bkP9va0eA2J1JXU#uGc!s-_O z4*0Y>RCnvenkYg|)Pf3Y^N*lD?m`FG-TWg}J^n@E;(MUZ`hj{fYqW54G&R-;YQ3L- z38?b{?jPh|5;|?hSIzmmpw||>ZF#X?OPP9gn|i&@)N72X*P^Cgi&3wl*Xl$5QR*N3 zwfcyEl=_&zR_L$h{uBOMeab&d{gb~+;{i0j*TmI4T!FSw$&p#Sk zk#i{)|7hjqAFOiu7gs;3pSb^-za47IQz3?);8t3kP(x3l&{JU*%wCm46^E;ws*n!T zVX7qjRfPL+9nO7(j^I90M{-}37OJqJzc538VTS&~4E==}`U^Ak7is7(68bBr!gYDt zFSnt>Nd1U@L`CY(v`vwQ7H!bt<0?pZrG+YKDAEo^KB-FSKDv)8qWiLXT}t=U{kVTh zKgD`Of8Afj>H$z~sG-^jL$wi5?J(B0hqLnJrac%zx+7WTE=9{Qif_m0G0LgO>aoNy zPLEe5*qxg|JQMXqd?x8h+)sw$9Z>vKurW+o66DwvxVX9FR(>K%mKsb9u_m)=9jy{wP9^*+51 z|NVMDalWEoAtwjmC8yyfC%kkP%>|$9b71UiTHz@8>IY)T(K+~7w8$mlu?xzjf6_mZ z|DS1{V{O6kTcqJPX`R{8fsUp?33k@e!}y1r_ADa6d*x`0wBajF>wGi!!dEWCS2n{} zL8gTZHhg6_e8svW{}97Vp@x?V(W*CqOB?cM*TZm>@K31WoI-|Yin4ap3chX4-(lKC zr{SM4`o;E8zqE@*RDb^A?2*XM$R+*>ExSC;d`S~G87uTFoFkBI&OX`x` zOWPczV{{Dn(n1I6Qo0oP(oP5IIBoW8XstsGpV$qbglSr8=veq9gubm4_rfh9hEKHN z4X5FaV8a_u!yCbdH(Z7{it2&v^h6onh}47G@rg1V5~+u>^AlzGB+~FnnBfz<;S;Cf zlVEnON0US07MtM~m*JD5hEH6EPl_5oaY;{0-h>D2hWfRk{vbpBq0-m#R(ODuQ}95T z;Q>26??(Kk$A~bTpbaMk8BPc@)L+z4zm2`}bZ{#p5u1LMRmQ?*JmM(84QaMO z+Ukg86u`KE)|QoTC_j{5h;xIowgt_~m?!eF$NCIbk9U1+P!&t9HLzb_wWGiI>=`8Sqz~%VuZKD^ zXh{D->iA&sKS2%{l$bn9PUNnHabs|c{Bpibm>}au8TUHl7By~h<3=0TW!#d+EoIzT z;})a6sK=PN1zg&Nv#$Nsa22nnso5%7En~#CQSDIs;Mn8pB)!{N_{_^G2sQ*gIXt|_(cFJofuLXQk zl+C``zV7h| zz~7Jg{CtL}LY%BA_!qohEJyHXs&MdyEB>-pc_{>Y9Kr8j^?&ELC2Az#G_ z&Vr$$V6YSXd?1u9cq3!a{F%*~0&|;m^{P6c4yr>6JO{7MdjfZ3-f-N;aF;E3J@t?Z zPuYUk($Cjb%VoBy@6>ncyP5gjqwB+k;{~qyP6sa`KaA)YTSHBHHct=oEccHQb1S)n zXXVZoJes-LQQcg>&YW+K%zpG|`i%akKCM5{r*xM7Q2#@Jq(9cj^_%)F{kBffb2;5K zU%#*0>X!OF{jNT#Tj(~rm2Ryc)(`2U`k2npZ|G0-r@Ebn(t<~-I9-9(fVr%$qO0l~ z^-cO_UG4Y!5kqZaxJ6f&8L+-h*VMIiZCyv-{(JqDEhvW=u7Stj>qiV*h@pXQD06Oo zpKh$1Fz>!!Kk$3~h+&%Y=sWyv0xiNxYS7;*NL}W)3_=-Kw+06nPC#&c5y*yQBz@uNFhIO?kRm*I{PA1p2+7r)v6k`j4f$zJ9<^ zdpx~sxa7&?$IeJWawNI2Gvbx}NM7u!sL74w#Ll>eyqJ9083~gUlM6dL(B#A9!LFhu z7bXXGM%v`Tq;F>~Kn_gml5Sm-as%RwAWc&Cr%Rfo>`#}{gNH!6cbb&%BfN_=CFRE4 z7b8tcxe52tq$w#k<-Ry+O3L?hUxG9xWlF8zR$)-Yqu1gDc(ks*0XLdHOjcKl(8|WleI6ti@?|*R1<|A3!@NM#@&xm~0Xe>x`M?DFu)|RD>-1G`(MP>) z*3aH$O#dZg`L7vWe9MU4(&ZT^cV;ZRp7G=7`V0M~=0ux5r@ztX^|$&v838iR3n52A zfgDLr9VY!^q$(>qew@aU?;8VHy_-DdW41FTzY4oxVxe9H9^}Ml5rbVRsng&g%*0-t zcY+z|6C?!nLHjuyyapQ#D)poPN-V|neT4{Y4`HZLSOvu^b#pyM?;H5Fz5k(Rd|%oZ z66DIOqIv|402}_^M(I~=%W2z7leVIa25eF?`IW+lJDx+dm*>LFZ2WHmUzIW#J5u=pGjAWX!Lh}H%VyHdR9$VgVjhin|ay~pzfH;V7+u9?eC?ZwBm~Shy^cpQWMo2Xh?qD;LiRk zA+QdaOPxFcuXbg|dlz&um2X&^qzzak+-znqz2M|Ns;?Sw?G;PD$X~Nuu7=PH3}aM2 zLXA?R)qFKZja9)xy-9Z{IJAS?3h;RseAlWx9i;7y&5JT$y^dMw^~^wTlh&60tON3zsfdI;M17=`y9um#$X&_R>>aFW48t$u*@)vyRsV9MV6*5W%cH71dG93u2fFmw|_C z(r!1TA8pFWp(iUl35+;?B;As>7}9;!b}}wLZerZGr0XhOvUI7^rA@kZOuB{6Y+_2cStFTanPess@ARX>XT=;%j>KRWQy*B_1iN7oNWemLyIY9ID?5Xyc8 z?i%V33zicDcjlt2%0*my2ft46sj)L)F`7`+r!37t%Vl0wa@e<5c4UZ`pubQP~%dOT|slUTEuz`Xxw)-hgTO(C6C zjbf}PysAf={fbeHg+|bKY+yxXC@Um`Suq*Nn#>UD&d)_-sLlEMNnKX=Hk>M4+Q;x~ zUs{Gvw>B{aUdqMhv^As-&v92?J!JbrO|TuH-(N@@QC>X^Xs|Se6_WDQs*P3C zuGDD-R%c>t9aJ~{s2WcXaI-B=)v}dRx7(_yJ8dUl`zIwlVACyCCE_W` z)uxZBQ9;)ew!122yG6CN4O5+LUATrAXl+a4c@pjJr>eDHtV$49YvOEc%T-NmeSp_g zXIp92+FZ+Uy@|AA)O1^a^^~oinjBP}Jb$m8#5dWd85aeqJIM13Iwm*@36st*1QnK?I5uW(B9Aom}rmO&L&L-E&N5bh^chHFDc zsSWju>Ly)+*7Y>Dg0`uSws`dj^cu@^9X(&Ubu0Q4PP=op>nwVbp*K=f>CjzE=!&qY7lGD0xfNg*>~HK7kGxja&%sqMfxkL=KM}SEVO!evstUn1 z;EZF81qZ4FK!$Dx=ZvI(p*?2gw}3sJBl=GI6{niSb0x;vx9X-UIVh3%+o{H^2R5=* z%6r~+t7=Q0OXzv(X~D0lcgc4T;*#=?ARTBybN-)|^)Tx238_)bY*B@Qqv^mC;By-A1UP+; zaz9799l_Zhso}byJWtZ$)r4;pAF^FdyWt2s*=+Zz;zD@YMnOD+R1%R#a2yU1;tXufhu@RYQ29 zx$uP0*Ue(OJ3m5(1BSXvZlJHYLT;wZgTj*Q(OK3cBtu0q*x~1Vacn*GQ zDEub0f7MlZFaW{_!iT~Ozj&1q&qoHArGy8Any4Z{l}x<#g?EK-4ewM|1E7sb&_-wK z^bs8l?}l)7;s1pi!S2x$+z-{28S$m7dW4H5TnWO(5v~O9suHdS;mUA-3*&S}*x|hI zt?k6+g8sfx@w|VE`!T#LOFXrSr>NG<4TFgzgsThxFQAJE;&-Xa`S}GW_x@gxZ%lhf zdGoKVTMROFd(2dmp#jC~m`Dax-s0{SXJAvTJhGwcj zFPDKSBkj8hC$t`-21D;h9=R5neoOkS0w8rqS?dcw2|Wc>gTGSXpDfz1 z3xL#VfNq4=Y|%XX%iSTLE(M(DR42&plERDJFi7ewgqNA9(i7Z|) zn*WyLiaa0tc%0M<7TG#nu^w&5j?zTj8#()B=XBym-1<)H85v5~tJT0W5R2$7$?P ziv*_F77(eHa3j|efe#j^@ex-fT_TNL>Z17jrQO68`_x6vThR|KmWw5Pl(AGDW&B;n z-(~z=#)s4Egehix#7gyP6>ahyjei37a{f3vV8vSOSVt2^P9#gZaxPh1`KpBRDPep{ z7$1*0Tg++zW%rmf#vZgKo#y^V50GkI|FmF`BYGM%v6{ ztY~|T)R_mHdy*?T#pqF=n0t{z^B~73E^-&RNL}C}bAgM*1+LiE_F$7w+#GSm3MVd- zX}DP8#6?047i*ljk>11bB~Q)?%n1d3*6k7 zG42hT#+vHVE<2C zY;@y3VqD~yxyMpBF1EUHk?6!lrV|%AAzWlTagi6oMZOakNmg9sJaLgB!o@N$F0w?p z!gn6g*@%nQMqJM9;;u9<*1Wl2W!%-q#V#m5Xz#)mZuN*|P~0@*zHHoG#@%gPY<%+; zTgUz@Uo^-_(`oA98HF2>Zj*AU(+(hFh8F!6w*BW=DamAi^8RAdH749xW z{Moo-UAzoDDEA@`d~O)bSzp3|y>^<6?Il7mLEU*dE749t;=z-+Wat#+*FEZNsf#B7_QhQzrkSR27`?o;QAbVM8-z! z2FhEpJ6@JB3AiGiT$U20;)>n!vXo1FZZ!8Ivs{+eLtK$vE~~_rd0BP8aUV4PV$r;; zk!mhWOCtBul9V+qNm)1R(bJTFU|ATILCxL+GrET5O9O%Rt8=(yPGRAt4M zD6U8gmZfEod+ea&Vp|k9(%fSWoqOz|<6;pV7n|s~rd%4k=-gu&9T(f^xY7cYr53~o z3+cGcjoZSw(nFPn>&3-ZIxg1Iaj}<A2Yb#l`j~F4og=vHyvS z1$A6(sN-Tq9Tz+5xL8uh#g;lQmOycnjJwo?#HKnvE1$uon#}(`A<)9F8 zMMAWk;i+=;KBu{_#kb|CQ~V8ol{5UsnJw`*TvpC-8K*4Cc{#&n<=|_1E4)^Yl8T#R ze1zl5k#li37$4!ga^%^^%7nBk<;jD%(vnnABE2r!iRE7WEBO6M5gWw#V<{ScaYah4 zqPiPuuLuq2;0iBPH2qygzLGG=E#o4!jQf>wzZMsI6F1zrk;auCr=sa=Dw zc}40yhgEhN;Zy>L;$9E7E73BDE0*OeAsr~L^oEt-^h{jQWKaoC&%o_(z7m`Bm5kN- zO2+PdCB_EgBev%&!Qsbq|yDIuXrR!Cw0v<*e-Ui;|_w4{~hfA^Z) zJcWYo*hs~Q#Y4Q92J#y;Eqj5cd1C3N>_wz@pYO-6NF-FEd^kDxoZoZK@0{QH_ndQ{ z@Gg0`HZ18lG>} zUx76&s}qYj12gXGL?;cn-?(WdIvGbr zW;D}D8<@EH+I=T_2)V0))t`LzwG%yr?ebpAsFPj;`B)b6$$NfH-aE;A+(-TOn0!H> z(}sLepFhj9u(HHG>#sBNRmpvx_|NK|lk@T|`L=Q2fnP@(t1x5NuagVD@~oA0X=Pnn zSr@&=$M~mx=(0ELVyu1@H>a`T7Sh~B+!o|M3TE4}nl5|BE_=f+^2N=d*8DE(d>3P$ zgh@T`vYvO57o^em#V7T-ixwk3snuQ9>Mq7DalZq*N#`ptrvbZ3=N!C`9Ch0!bkioR z;@)M*2T5%=?L&O>ZRu`WhPb)!0&?30{3N7h2=9;^q>^m`y2;V^`1KF8%fU<7;D-{4Z%%`hwni4 zbd%amgbY&~H(`%gVOrWv#9HBqeEYkhgH(DRWM*>L{p+y>tGY7BA%N z9^8&~SE)H6UkQWxQhAl{Lx+2m&@TrJGo*W;aUa(Gi0=I|V~Hwhi{y+Ys(j!4EqGi$ zX9_R)>whTiKjnYPPvox{Syi1qRjHYziZ+DQQa|I)?5WBaDekZ4>9niiUGi>eeyP3W z+A&hqF;bN=(kecGoTocdsxnfFd#}J|gb74D$8nr9DOWrL_A+;+Z@1Z{TQM=+E&^@R-_y6=&hU7l^kmUXg z{4>VrqiqZi$b<4x`IvlMX@{Z>YGXnk*8LsbBXX2IsD0E)bi!yM=^QgmA;%3fAt&XO zoR$s4G-b{;_E9?FyUNK8PJN6b!rbCiqtsgP3uv`Qsl}Z&iW;RBMkh7O>m#^b?vN?3 z8hudwb01R8k!p?hA^uNMi)xfqn4YvoN#$AGy#cv-19I;M{3N7|!aL*!nGtM_G77U! zQgZ}bqpp%3$|&LQp$^n2qqw;t0uJaisLx(GBuyc`SVBH5ACddz0eMh9Dj$=ND=j5e zqofiyB~_yri+e=Ako-EztyxAjY$RdE{dH1K$!VF=sbM?etHw((6W z)+njCGuGWq8Lh%D-50Rp&CWMB(~9yd?Pr)7*=9zS;jGLYYO`~wx)xeT&Ujnh-lVRD z*0s<&WgY+As!?YQ8Qw>mQ|F0s=YE1ZHDL~JmpkN6(0&V=n6MAjgV+8?mKk1>)xPS4N$uh<{o;hI<+hAdy`sfS9}Kb*(>+S zhvdWZ5xHL;kO$?X@-g|iax(j_Q?DXFv+p|fD()vt&q%akuT-!6xjug_`L-1PnSGqT!BYH>3o3tyGFyJf4h zt*zw!8t%-twqkwU;=@x`VMf&398GO=9JS47ZA0cNJGgE}OWRG)cGJV@JJPV7TjRp4 z$8IMjVcN;O1LA!(HTs{qef9mbkO+m~t{I-pRP=8gEr{5@Z*@w8LGj|L-#VF5Yz9i94~f zPw{IoZvnnZny<2t{#E!Of4;&VwJ)H5c6{>dZl&$U=VRQ-<8Je~+kEYD4!%bTdz7$8 zJ?~M^d(`tD_1v$te#7@$*8Rk~($;UReq;3;tKV4t#u^~j3VRz;6WIGLzeySfD5G$< zOidWDCJeM4&>hJG)`tP)UtzCZBn&EH(7H5e`3{<%LF>|>=@~TE;94wGHE5~^P1T^O z+G}a}!yb&$&&RcL76fxr;9+kMD)KlP~95B0qItsPf~4p`QvTWY*+|T$3MSrH=dj z(CSApGn##*a22Lx_aT9MA@RSA^n7>o5q=Fb)5(_-=3spGlMC+SAs69*%*gGa`8sI6 z4q9UmnxlifwYf?v)6RvFNYC+tFtepKI(R zk3MH`UuGA1)-yR#CL4_2&l~r=aa*{ru)Fw+@B-<)1T(I_K<>t2ADX{F?k>a4r1kT?~Fztrf5G_@FHwwuw{4y(eVN z4f3Y4axc^ zzXe`m|2^LW&v^}g-Bsa>;5oU$Q+7jcK*W~Mz@+MssXAn;4wLp|q5%NX9%HPqJe5Ep$chHcxbueMy``)GK;C{rT3Sd;3u$TLl%%D_&3qr`+eKs80%>DZ7N0rEOdmIIKOt{F zA#Xn+GX==|O~_0EF2h1?6l$YT8->~^)JCB;3bj$FjY4e{YNJpah1w|8MxizewNa>z zLTwakqfi@#+9=dUp*9M&QK*eVZ4_#wP#cBXDAY!wHVU;-q~BpjZnROTjY4e{YNJpa zMbcjH$LgFA!9ta3}4CI2QuG* z%wiz37|1#U`_vc#Li$0-7?LybvG>1Es|fXBE%7q@g_%=BX45cj&RI0S0@JFTwZ%A# z&adERcFf6QW6`q^GHWc5^+w3LF=X8svTh7ZcnD$d<0Z&=2_~oG8TnM~^gc8zMuCV7R5+;=}sf0--Oe$eg36n~gRKlbZCY6vLc7;9G zkuar%DJ4uPVM+;8N|;i@loF09LyKcAllF(TH_E7?#Wl3Jh8EY*;u>09LyK#)rTuAWaSbi5p~W?{ zxP}(j(Bc|eT!XZ|Pk3%TglT^oSX|PRHo1Yt;jhItw77;A*U;h`T3kbmYhZB+nf9ka zeLDm5{j>%a7v>vk4K1#r#Wl3Jh8EY*;u>09LyK#wlO{TOpA+(F$(!gTTCpQztUjPgDIg)lXCXG}TX2{WR52Q~fm6 zPgDIg)lXCXWTe;P)_}ARGurPAI=PHH?Zb@i!;J0240Vh!+VzZfJ)>REXxB5^^^EPq zjMhD)b!YU5eIh?(yv>Ol#+HzkAILi<$oeN_Z5Fcb0n_fC&pHoGZ+;$~hv~1+qxrZq zGC7aTNMMzQlLe2*P1=w^+CtVMAZrnjwFt;s1Y|7&vK9eZi-4>`Kvp3jYYvb#2gsTO zWX*w_6f$mUXr%_Q z)UqzMtV=EHQcL@4Xd7CH&jzh9sLGsjfzvR9B_CD%Dk~u1a-Ps;g34E7eu0u1a-Ps;g36mFlWgSEaft z)m5pkN_CZ)%W5SvmoU2enb!20{;%o(n*Oip|GNIK>(7oh()>EVu5cLZPZ|MJ~{%`94rv7j0KZ`%L1phF-{H(K& zS=)+P+lpD+idox=S>h6MEv{|FtZl`tZN;o@#jI_`tZl`tZ3Q=y6Kl?=%=r}FhViU9 z<O5ul#xC&ntgk`SZ%3SN^>6=aoON z{CVZiD}P@3^U9xB{yg$mD;JT!1Tz-8sQin_!L6K&%DJeVi^{pEoQq1hXbKmUu%Ltm zB`hdmK?w^=SWv=(5*C!Opo9e_EGmJ!j(F~(5*C%PsDwo&EGl7935!ZtRKlVX-X<3J zuWPMuV~N~Qmp7G=ca)rp$gl7CYv#q*xVs?pkq;{W1V1GF708#1AZsi)wPBT)+gRwi zDJNz*Bg@&Eimo=^E4z1E-on4u{BvV#eck;#>}=z5q9oZrbUC6W1M_W8fG5is zcf7k}+tH&P{&=$E#OTS<6F(SzvU~gRi6h64J~aCDpB^1P(ebTQ!$*&d82o{bwVyg} z{OtjSe&$aHMo*kPa{O4w#*Lf0`Fn%pt~JS@8L#8W$&TTUQzwR>9DR29#4{bopIT3_ z>3IJ6=eyU^KYEgN=$zs`-FAW#fKPJ{@KjsQw~nwAs)INFYp0nz(A8=FJQT}vX7xSe58s(hxD84^{PZDxF@gn`Wp&!EcX-*{`)%ROS9L9ZwCw?mZ0p$F) zSRJfKe;O~Lf0NSdW8L_qt{dVUFoh>g)iL7d_PtG{b?yJxOX*<#bbX3%e0B#ClIvmq zo+6jS@ zb{AQ7C6;AfMAlW-E*3;_-Lq)INWERxzD-h zo_p>&=bl?0#u;NVY%`PD>iYVr6PE9t+0EGRPvdUNs1YOUgD#TZWbB4v_+B`wVbYY# zdUQ+h{X@pA-;J6wtuFJWyi$B$h2J|SO)0T0fBj$xV|+cnFIaR@^Xkfjj4*G&0TGh6wc}Mg;s~HRb3uDshi<;N3=8rSb!e=7CxwZMCmim95 z`i!xi4fy@r)otw^)$1p`z}T)4py_Kyb?2-$@6*|#^J8lM%_8KpxWir#9rwAGx^8uD z2#N`c!}m}o(OrD-oP4(TTgHMKT(`O^f?@1TdOdJ2gd zJpO^cDvqkJHR)(~e{T25= zU>0dNo_&SYN^_7Wjydpby)*-94Zbf#IvBr=L;jO2mvdGuW#Jw}8I;as3xXO@ZaVPf z;rl7%Jph;ns9_Gd5$Wx$mfwps19|R1YC!%%q)#CofoC$aHAx@xVMv~5uXCWVLVH` zBffb7_?Az+14II>;H|9jjdlo5`90bI?Xe$K zxSjzILy_JG_ycfEa`TUP=nd3XNi1LRkoc$p@o*-aO1xC%MDT&=(7sdMMH}{)l1#k; zx+tY~CLR%;KamRggDeD0Lm?xOO{v0lztkgSISD*wsOPOn(~urUT8s3IlCnfK&6SUX z-u;jx$TZJ({Y%I-WDK%xhn$6wj3bpO<=eskFr?Su_if1kTa*Ra7kuvSAFOr*| zk&1pveS~C-+E?wL)K{pVdZm@pMpmS?Gx!$?e%`0m%fCDs{eWaq{XO4Jze+dHMxAG} zWl|GhCi@lO4B%D3ozi%gj&uiFZ~#)XMx%e~rnv_6Z$-Prpsl*mN3R6j!eR)de9+;5 ze9VN5Jp!KGjJ&_c@6el&I|ovWl#6--WDa`GpvweM`#<{{dB@-x(*3XoDx?S-!T5OG zA?uXFf;j9e8x4&QTft_tx$H7_FZ&fc$R1}$*i+oWNApd5H-DSEq-4nXx*%_(k7Q&dcgT`t$(TxVP#xt?+zbscd%?t0YK?Rwbt8`ndw z+g$TqgIt*|opXb8xih1;>&%O1=6*Efqw0?aeq{S7@1ukd4}BQ+!T1kMAF%g(m0E+U z|M@3G3MV9Fe*KVfxBZ53y5L87Qf5Kmc?hg;C<|lZECP}l#iHRY#WFpMV+Iz_j4Xkf zSRzYe16VRzD-~KH9lXt8nasknST@UHR#=uimd^@UA#7_gD`BOq43^i<%2@@gWDZuv z2C_k{n$@tuYzQbD3K#~Nt7F622sV<{vr&+MF>EXw$Hub>Y$BV)8rWpk$fmHVY#N)+ zX0VxT7Hfih%t5=(6SZ5z+F2)C$1Z2v*;VX1b}hS}?PfQ?Q@EMk!uGIR*==ke+spQ| z+u5D$Zgv->;XcULL3Tg;HG2R!7DGZ72waR^qo&K)LcV}?u$}nc!khU*)~x=bCFBd< z#13d*c>$lVTnn$Pm0irXF(-5J$-I$I-t7StHDBWG zg>DVq9eQ7Acj&RuFT&EoMuc^Q-4*s+ctUtp_}K6z;hVy*3O^ElIzo!DMJ$N8B;xUi zmmnBgHhu zY>c@p=7m@(HaB)&?AF+4V$bNAK1*M(U##D%zfb?1{)f2YxT$d);||7sYKS%D8jp z@ufs(Qhm}TNjD|Ene^R&v;m_BtQm0qfTIK6PiD!L$qSP2NPa8DoH9OTeagX<)2X4U zRjJET_olv;7M?aFZEf03X)mOGk)EGEF@0zH(R8Od)7)g*Jqx{ z{KjIo)LT|t?y;P(oXcWaIazgCYqK88I+69~?AYw8>=oHpWj~btQudkb^EuHunK`zc z5jhKT*5~Zbc_`t^dg>uIYqw>WoB?oGK*=bq2Y&0C#!N8ZzUU*yN; z*X1wEKUTmBnhNeJ3@w~fc(|~qD7R>4(b}S0i@J+mDUL24Tij8+xA>Lf?@B65T1)OI zd7+e*mX|Ily|VOy(pO5)l|`22mrX2NU3OF1;j(kKc-utVYTH$|!?ttw6nnjWqx~WK z>2h27+VUe6u@wy!D=Mz6xTB)G;+cxm75}IVuPm*cTDh!pZROs|XDUB+L_2Jbd5)cq zdmP6cuQ>kfIO{lH6<(EARa#YF^>o#Vfsq5(4vHO=HmG6HnnBkNdSK8O)m7CCtM9A+ zp(e6sV$DS8F&kw1x6)Zy35*RKcD+TmS6C`GZpN`kO^(H(GQShkyz^0kG=?1mmXk!M(Qo zj*nV6cGsBMV=vurzx~+QS!1sn+cbKc^HuvUJ3n&6Tp)g9?hSL_#OI3}ZlE$`l(A3B zl{29Wi=p)xHzt@8jPbeI zDCeuDmpG~_Ce;^M7mQjmcsdUrZk-k!Tva`%e#BJMm?T?sW^5Ga+Y%F{it97&gU3%8 zQXMgSc2Gpx_yu(l2f04EYRS~-15{1<&mW%a6%|rjK_$D-D+Z z18Sq8&$FPXSvu!d9s;5&9hGT3#5#n7rf6S#NRv3i)%ZgM-T&YKo;4LxD~*84U@} zTaiDnI!L`8mnTb!@rDFgHk<1kDIINFz*vSgnp-k+D#{&zN?U@_Ql66;VvJAYc4MYB zS~kWf*lm@Axn0i>$#IQ2OLxt#Uia|&cE{Mt+8O18CS?}tgX*fQ8ruh&t!+zI53ia& zb>)g_*6ch>Zlz(FJ}NycQD0Uu##-b27qul+D8^4$3b|q=Reb2^ZICAAw<6bNJWLJ& z|Cj--3o=Y-Nr%$1AQ5~V%J)hY$@o-AZE}S%Ocxxi3o};8a!62f+v?4mFK%lN$_{RA z${RSa$}wubKnY zjw+yTY7ItxYIqwz1OHQx%IQoxD@0OfbyyuHh@pd@X=@wNw4!N*l1LjzjF{|LxzaJ2 z(p|e8c)kcDum|};_y-Iux8QN~nF>44*|DPo|G0(zC#Ms6%UqYTGpq|T#!PmDu58S* zYjm+P z)l$i4Ri-3L%}JyqAR`N;7vQ^OzyLxp;zLMGvNN@YF+ngiMp|>;{`9_k&)&;TMR}%} zn3$-f+~U%lq$pgPa-lEPH#&Y+#~tEHnT zi)GtEJTwwGV4LMUym;}~*IaWAzlZz>p|{|rz61{`pE0{Zba*StF51&kX>+$_G>_pK zMjoGFLo-91ZJ!zRS;@(_` za&xkCvj?O`$HYXZ4!~tjZumXp$F)llX$1vosRad~*WvnxzX#q71FtQjZ12)T(8qN` ztVl)SFH;dRA_!mqr^ zNdYyb-jW$(%Usl3S84Y!TvXGd)YBnqS)OCb)L9J~#=oZ*mQ@rMWLXRbLwsgdL1~%2 zxX5DG&yO3DT{Ur%V|4DC>3pp;c3oV&KFd;AR9;b7oSCJMkB_rtX62@5Pg*^(CY7&f z7wr$e|A_Jjz&~bO7Cbg3s9aWy&nb5pBwHmldp!T$by-!8h11 z5)&)PBn?}h<0krv?@gV3NA6{%STQwy?ED=P3UfmS@GEhCaq1qg4FvOax8zxudM(|e^<0~r1Ryy?q8wU+) zBwp6K{w;+|uflHUK%4a6mt?(4A$rn|>#P~MW@2Y-hB>!jPC=eIJ&w3pS(#(4sEFV> za#U=(IXkbQC^y?o?9`{F=H?X^T4D%pA1g^pVFu?cF19G92 zw(-Jk&Mi<*5-WD?W2e0H$k2F`w{5eGnYSIedd~^PhrS36{7=NvLg2{+JBqk9*ul5j zoo9KH&AIW1V@t2Pa@kSBSHzn6Nq(PNCX`GtpokxEHo=|0ucPBNp)3`A=Tv;A?22q% zaFv~Jab9NQN%t;2w)E(-E2%F?YytjDhYyuX`q5#pC?6t|NkNa+nTDXBlfu+ROGXn^ znX^61ZqFK0y`XVx-0JX=R=eGjZMCGduUT^-#WJ|8d}7J+x`9g?5(`UeDvAcCre}>V ze`XEJsCA_T#Yo36s+)+2wN8^HXdKb^(ztMfLWFuDNh_!O@aN*uGe|jClov}Nh|FlV zFnH*b;+x&ZuP)v&c2-W#@DVeb7A>AVvu?!LBJ0qBL+lyG@L^Nu@7y_m>ag$y39+H! zrRixymtH-3|6fNAJBkK>%Zkae@zyN)8 zc49{5j$=D2^PKm@Bm_y7_A#TcUOM!z``0a;@@{6CEh972Qd*LQE=+v1;J+U9EgiHG zypar@h1Sy4r9ay&o;;K>zv%`YRG+=oFG5;!%GZAG&eQagq)V5XgG-l= z7`37}JbUTXQ@rq$Qa9K&sReb@sB{}Bp)X+tEDn|0+UG{q4lT7MrKBX;>@`EjTr;q1 z(2PqjoiRvyDml5-He~3Su|tQJ+7naw)f*qaRL}|B@xV=fgE2$<(@XKr-}7kaH++P% zRC=mwOV_Pk$V9pu`NMGu8>{BmTl7-6k{fxD)%h37DtPd%tcNaxWb=v)7~>F2F?S5% z)jYujDHKu!$GV!61HjMllCGs|Z+V0BQ#Z?(Eo`YADb1;^lWJ?{$W3)cF+8iw*-+mo zoxJ7dH~FMR*;4JWIdkfU4=boq$^u<;(3VsWJq*7dgl{shQxnFfr8*q{@{w4A!lJ3@9gc}2Qmih#B z5%O#;Z}DWl^Vk(#1Cq0|k_X5)!7k+U`Bz*qpY!Yi$;kt_m7+pb2$Ga9X)f#`Gr%l9e9SniD$@m=+RF4S9!3r4YK?ic|4*% z(&q}!43HAWsrDv^G{39N`4{JVrCl$+2y)Kza0vfze)l^!&o<&2v?V>G7tcsDvb&s@ z6{0Df>-m+)eH-#h@KwH*qu?{?5P4$EoDdsg&WX(;osNFOBO$A&oNt}t&mG>p`S51x zCHevZ9*HlT57YCACh>1YS@3YFr%@-_&$OI8NnOr|+)32!8>|J+8K}Ch?GKRNCNsqp#;e&e8K>oaqljZnvdz8a@iusS8Qto?a_l3<3z=c0T3T$9{+X_4(N%k2lgdaQZLV*n z$;d;x%1-{d6|$oWwgYk`HSjw>ypwm)usA1M;$2)`edisk`IFB2N^4F|wu3(jo+@RX z0v_1V45;5^Zs)h6kI$b)_-e~moCW8{_yj*JEejIum^pYsoyooh3l zPw#tj$QAnz3q8%9Ef)^vFa=a*$z2B`u+D0-Fxpt;(t7G zxAUG)KH>BD{7*l{V<@)>&q4Jgii$d7u&YOr{Ih)@cYU(&dgLGBbaBp)I=`d5q~jh( zUi1rlMnwj6mobAoq@~W?e0%RRP>GjqmE!WY^?rf84X$ClN|uPfCe;IJINRBI_UU%% zFYSK68_~%C4QJ1GPH2~(Y46QaXu}v^DnT?;h6eyeR3fnscoEP!(!YWGA-ZocIjoj< zYwnSoS_+_%B$kFY1Hs^9D%D6RSJiUM{xT;KBh`BT*U`q)QwZFm;<4@w+0thivvnB=P335&YA7ER*UEg2AL z8f3K$Ob$z4T)1=oyq&-W+mHU2s?nMOE2A<3Qk<=dvEozdLiqi|=g!};bKczHYn@kl zXfnrthp$E_iLes^d_@@+t3Ew-8nzOkfgWVmSW7zj0X=$U%VlGNj8P+ax9tA zQYwwzsgGjpj^QY{@WyOIN@7NI(3UOh8yhPeGbT$9PfAQFG{;QtbUw!ibxvMcJDg%$ z@y_CnP3O6Vq4^G48XZV-#shm;6|{m~kC3Aj zeBbq{U0s_WJaj1S29Q;A_2cgR>>%=^Z&t&OoPC44Ka0-7BNtzN_2NZWU;Vh*oKaGmmYJDeQp}IS6URU23l>{xrp1!6IFtG@ zVkyq&r2_PgNZ~;XieN#kV0f??#%KctN97%1LQfp4?c|-_J&zxXw72VI+kT#**Xf%!)*)+6bO!1(+x@?*2jB(lF z_TlqtFRz=NnHHNIgYcutF>ufrQ_Aerc)cksIwB-ej;SlJXe1tR8d>v2SOY>f&!Zpg z%(Zy&e7?6*wzmoi%ICaGcL zhx#Qgv1c~6mJHe0O2*}xXZWEvn%2ERxY3;a2Rui0(3$8tddR_lxZ~y<8fRZ|^Bp%d z%|=hx!LFH)A z9P5xEQjw+#NCQUR$Pg{tjOm7mATGtmCf1BLrW>PlGEcIb(qlrolvX=&v@tA<^Dw=I z&z={W6knE}sSBzs9Uh++GlvK33{e?|(x|z!QX;LH!z_(4H7R@!PtP?Dv6cpfW?Af} zSWyQaJ2=UrCkn%iqbJs;Njx+r-DFSVvM$P)K73A0TKw?R%4I3V^LT7R zd1iKKP^oo@F*hA#rqskVT83p>BU5J0jVd){L>Y7#f`}L@!rVJyzu|wtCX!++=H<$? z361WIl~$TJflA>mg9eVOA2V;>nEEjTYf|!aR>eeSW=4LxAWv>u6o1M74aSv=g=iTVauzOES?Rsm^sMC=z}(Sm1yQRw4Xlm`25bi8%(S08}@@gl<7q|CT2@D{JZ^ zR@OPzOrO%(K5bfXRCs)_KJ@qZhUT@mw^xlUOBgtM+VsUu6S9-6`O!&9F{!%5xPj)J zRJE_cc1nw2W5_1Uz$z@V5=|cri)EML)=G;GHC=k?rCorg?tL3Ch5vYUJ2K_F`EEQNhuAqOKIm+n2>n_z(ZG*4I2;X*d2xv*Lt&EiH(Wa!f|3mJ3Hb(0 zeNe2bjz5UCGZ8dqBh8`I1C;4wZCau?Bq-LRtFw*toEWXjzU83yU-7CnDl&4$~nZn~Hh9RAYXT zJ}o`Lm@3NyVvVtJA>rYuO@3m6$rL3^v3Nc)-y9bfW;Vtq#it@;`cQK`o+CN^4gB^xxD2zLJ0eeKzVOk4bY0JyAlp6)lv&y@4*~G1K zKhh(@)~fgj4>TuJA@=f0{!Znc{fSa~+U|QvL?BDORH>fF6XlUfJ?{jRE6A9?V98{M zq#pTU^vMX}A;NYUJki4cV2Je}-+-Y!2P3YYM(?wk{TG(ql=KXY5?jeV78FX;k>ebWum44_RSlGB?MPtts9;!U}ZWKD%jFu4oCmj4C z(ok-t!2ldjFYK?@hKHAx=&d~$ zd6yZa@^gdGaWN#p`zIdhc(11Nxc(7@>4hnrYfb0tEtMk0j^5?wu z-zh)z|EO%N^r*w0zj+D*Ug$=bOWp-NAA=QC46}UdUj^^m*Q-J&hRSOOWJ)UXPPfb3d*cT^sHgE;>S(8|eT%&5h&@Vpkc z3gZ+&F~(VN+(S{wP#z)B&U%N95in3R(_-Ng+XKIZk2AD)PhNX zsmQQo%brtHC_`1j*12O}b3Tt`9LcqafeU$q=TFiWFcQ9x6l$GcG+YQ>@3a6R@j!SD zfg(VqR3W=z)s3 zRfxkWKm0--davq(oyH`H!wWu(sEfmD(xUPI0S_iB0eP9K{w* z1m6>0wv|THLZ}e+D@Pzl3@nUTU;$s;%8dpI>qw`}m83Z%)AFL1&zat~YF24cu)&s- zXP+0u%d1v5OA*o2W{uqx8CEkSb?Sn)CC&)`{qnL@lesW)L1N+L;sF=}lI{?3d+A$T z>1ke+B+YQa=>1NJ+`+&BeCZytWKZ@J#s4qLdIe2j@29L~Wchxotgj%G@e~_VrINxJ zo_KtpiHTTMJO}nu=2ya0eh|2VO8urM)qRgBq>mjUS?WmZPs4%H>DLTI~sT5H@Y`%M5#f*uTs%CTg!YXBn$))N% z%aII3meqwN{E)${&bXL|HrNUa?a&65`M(vjFE{y4cwv45V{n>}f-febS$?DN0Iod0 zsA||aUr#=Hz=)}sr>fOvuC^~O;06AUd~;IA=y^MfJyTgiFNirNp%)S;4lDFR|1(XC zpcJBZ>LuR4pI1D&-3WTel*gV4%o{eT$42OT;g%UsA^rWEjRPY}t<7YW>#$ zuk88*@@K2{g?~jW?`hOc*lR_#F2NI`0=0sUNzg}$(!<#OL%mR}D>b?Y2kOdFF*~TN z3d=zt0-+m6g2^GPs)HsA`Q`}=YO8fpTwJ<24-5D5)09jFG*Npsj*Ki zTI49Gt}e*0sgXJhN6czi86Fo}gq4wLSjnePGiO_i3iGnfDRFvfsAFV)byAk2Aa!8x z3pM%5Q{<0fJdIs3q}$OW18R10(`Wi?pqDoH1T>7ENioS^f&0&q37dkoq2HjVL@6^` zu+RO?lu<9N3@}+H-9>i!r2sQ#0rAWI;iuj=G!XtJWQ#9^{|m@btQesw{m#^15o)h{ zK2RxN2-(T)!1 zd!0}c$e9n_^e@a|#v`Uhb9n*AG^St&{7;%Jb?D&1(3B?sB)w?o{0Y@rrCEhL=Zzbj zRqA|hPeN*On)#L6lFUWvW`23v;BoVJ7G;%MY9=7Hl)Sem#*$e!VA5WFrlpMHXOc1> zDCC*^X6T>3vx2iB#yr72GpI=KQ~uL~fp8i6%rM>!k-gi4N(gFSRBl`(r!?MDq%^n> zx=&Q2aK8toB9(vbLmv1n=04T+0kro+)roznoGCQquRTabgMZT(r^Lh@q|o2g+QdJx z-pI~BMopcMYSWQImH&9sdrnefQ(c>-H0d>H5~9X$4Go4YXm3o9*`BW$OkT|3igsR! zam$=EvpKy